% \iffalse
%% File: hyperref.dtx
% Copyright
% 1995-2001 Sebastian Rahtz, with portions written by David Carlisle and Heiko Oberdiek,
% 2001-2015 Heiko Oberdiek.
% 2016-2019 Oberdiek Package Support Group
% 2019-2026 LaTeX Project
%      https://github.com/latex3/hyperref/issues
%
% This file is part of the `Hyperref Bundle'.
% -------------------------------------------
%
% 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 the LaTeX Project.
%
% The list of all files belonging to the `Hyperref Bundle' is
% given in the file `manifest.txt'.
%
%<package|nohyperref|driver|check>\NeedsTeXFormat{LaTeX2e}[2020/10/01]
%<package>\ProvidesPackage{hyperref}
%<nohyperref>\ProvidesPackage{nohyperref}
%<driver>\ProvidesFile{hyperref.drv}
%<check>\ProvidesFile{hycheck.tex}
%<hypertex>\ProvidesFile{hypertex.def}
%<pdftex>\ProvidesFile{hpdftex.def}
%<luatex>\ProvidesFile{hluatex.def}
%<pdfmark>\ProvidesFile{pdfmark.def}
%<vtexpdfmark>\ProvidesFile{hvtexmrk.def}
%<dvips>\ProvidesFile{hdvips.def}
%<dvipsone>\ProvidesFile{hdvipson.def}
%<textures>\ProvidesFile{htexture.def}
%<dviwindo>\ProvidesFile{hdviwind.def}
%<dvipdfm>\ProvidesFile{hdvipdfm.def}
%<xetex>\ProvidesFile{hxetex.def}
%<vtex>\ProvidesFile{hvtex.def}
%<vtexhtml>\ProvidesFile{hvtexhtml.def}
%<tex4ht>\ProvidesFile{htex4ht.def}
%<tex4htcfg>\ProvidesFile{htex4ht.cfg}
%<pd1enc>\ProvidesFile{pd1enc.def}
%<puenc>\ProvidesFile{puenc.def}
%<puextra>\ProvidesFile{puenc-extra.def}
%<puvnenc>\ProvidesFile{puvnenc.def}
%<puarenc>\ProvidesFile{puarenc.def}
%<psdextra>\ProvidesFile{psdextra.def}
%<!none&!packageEnd>  [2026-06-17 v7.01r %
%<package>  Hypertext links for LaTeX]
%<nohyperref>  Dummy hyperref (SR)]
%<driver>  Hyperref documentation driver file]
%<check>  Hyperref test file]
%<hypertex>  Hyperref driver for HyperTeX specials]
%<hypertex>\Hy@VersionCheck{hypertex.def}
%<pdftex>  Hyperref driver for pdfTeX]
%<pdftex>\Hy@VersionCheck{hpdftex.def}
%<luatex>  Hyperref driver for luaTeX]
%<luatex>\Hy@VersionCheck{hluatex.def}
%<pdfmark>  Hyperref definitions for pdfmark specials]
%<pdfmark>\Hy@VersionCheck{pdfmark.def}
%<vtexpdfmark> Hyperref driver for VTeX in PDF/PS mode (pdfmark specials)]
%<vtexpdfmark>\Hy@VersionCheck{hvtexmrk.def}
%<dvips>  Hyperref driver for dvips]
%<dvips>\Hy@VersionCheck{hdvips.def}
%<dvipsone>  Hyperref driver for dvipsone]
%<dvipsone>\Hy@VersionCheck{hdvipson.def}
%<textures>  Hyperref driver for Textures]
%<textures>\Hy@VersionCheck{htexture.def}
%<dviwindo>  Hyperref driver for dviwindo]
%<dviwindo>\Hy@VersionCheck{hdviwind.def}
%<dvipdfm>  Hyperref driver for dvipdfm]
%<dvipdfm>\Hy@VersionCheck{hdvipdfm.def}
%<xetex>  Hyperref driver for XeTeX]
%<xetex>\Hy@VersionCheck{hxetex.def}
%<vtex>  Hyperref driver for VTeX in PDF/PS mode]
%<vtex>\Hy@VersionCheck{hvtex.def}
%<vtexhtml>  Hyperref driver for VTeX in HTML mode]
%<vtexhtml>\Hy@VersionCheck{hvtexhtm.def}
%<tex4ht>  Hyperref driver for TeX4ht]
%<tex4ht>\Hy@VersionCheck{htex4ht.def}
%<tex4htcfg>  Hyperref configuration file for TeX4ht]
%<pd1enc>  Hyperref: PDFDocEncoding definition (HO)]
%<puenc>      Hyperref: PDF Unicode definition (HO)]
%<puextra>  Hyperref: PDF Unicode extra definition (HO)]
%<puvnenc>  Hyperref: Additions to puenc.def for VnTeX]
%<puarenc>  Hyperref: Additions to puenc.def for Arabi]
%<psdextra>  Hyperref: Additions to PDF string support]
%<*driver>
\PassOptionsToPackage{numbered}{hypdoc}
\documentclass{ltxdoc}
\usepackage{array,iftex}
\iftutex
  \usepackage{fontspec}%
  \renewcommand*{\ttdefault}{lmvtt}%
\else
  \usepackage[T1]{fontenc}%
  \renewcommand*{\ttdefault}{lmvtt}%
\fi
\usepackage[%
  colorlinks,%
  hyperindex=false,% done by hypdoc
  pdfusetitle,%
  pdfpagelabels%
]{hyperref}
\usepackage[numbered]{hypdoc}
\usepackage{bmhydoc}
\pdfstringdefDisableCommands{%
  \let\\\textbackslash
}%
\EnableCrossrefs
\CodelineIndex
\setlength{\hfuzz}{2pt}
\begin{document}
  %
  % title
  %
  \GetFileInfo{hyperref.sty}%
  \title{Hypertext marks in \LaTeX}%
  \author{Sebastian Rahtz (deceased)\\%
    Heiko Oberdiek (inactive)\\%
    The \LaTeX\ Project\\%
    \texttt{https://github.com/latex3/hyperref/issues}}%
  % \date{processed \today}%
  \date{\filedate\space\fileversion}%
  \maketitle
  %
  % overview
  %
  \makeatletter
  \@ifundefined{HyperrefOverview}{}{%
    \HyperrefOverview\relax
    \newpage
  }%
  %
  % table of contents
  %
  \section{\contentsname}%
  \makeatletter
  \@starttoc{toc}%
  \newpage
  %
  % source code documentation
  %
  \let\Email\nolinkurl
  \DocInput{hyperref.dtx}%
  %
  % index
  %
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \MakeShortVerb{|}
% \StopEventually{}
%
% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let}
% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi}
% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup}
% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand}
% \DoNotIndex{\space,\@empty,\special}
% \DoNotIndex{\\,\0,\1,\2,\8}
% \makeatletter
% \let\SavedTheIndex\theindex
% \def\theindex{^^A
%   \clearpage
%   \addtolength{\textwidth}{\marginparwidth}^^A
%   \addtolength{\textwidth}{\marginparsep}^^A
%   \setlength{\linewidth}{\textwidth}^^A
%   \setlength{\hsize}{\textwidth}^^A
%   \setlength{\oddsidemargin}{\paperwidth}^^A
%   \addtolength{\oddsidemargin}{-\textwidth}^^A
%   \setlength{\oddsidemargin}{.5\oddsidemargin}^^A
%   \addtolength{\oddsidemargin}{-1in}^^A
%   \setlength{\evensidemargin}{\oddsidemargin}^^A
%   \SavedTheIndex
% }
% \g@addto@macro\theindex{^^A
%   \parfillskip=0pt plus 1fil
% }
% \makeatother
%
% \providecommand*{\eTeX}{\mbox{$\varepsilon$-\TeX}}
%
% \section{File hycheck.tex}
%
%    Many commands of \LaTeX\ or other packages cannot be
%    overloaded, but have to be redefined by hyperref directly.
%    If these commands change in newer versions, these
%    changes are not noticed by hyperref.
%    With this test file this situation can be checked.
%    It defines the command \cmd{\checkcommand} that
%    is more powerful than \LaTeX's \cmd{\CheckCommand},
%    because it takes \cmd{\DeclareRobustCommand} and
%    optional parameters better into account.
%
%    \begin{macrocode}
%<*check>
\documentclass{article}
\makeatletter
%    \end{macrocode}
%
%    \begin{macro}{\checklatex}
%    Optional argument: release date of \LaTeX.
%    \begin{macrocode}
\newcommand*{\checklatex}[1][]{%
  \typeout{}%
  \typeout{* Format: `LaTeX2e' #1}%
  \typeout{\space\space Loaded: `\fmtname' \fmtversion}%
}%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\checkpackage}
%    The argument of \cmd{\checkpackage} is the package name
%    without extension optionally followed by a release date.
%    \begin{macrocode}
\newcommand*{\checkpackage}[1]{%
  \def\HyC@package{#1}%
  \let\HyC@date\@empty
  \@ifnextchar[\HyC@getDate\HyC@checkPackage
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@getDate}
%    The release date is scanned.
%    \begin{macrocode}
\def\HyC@getDate[#1]{%
  \def\HyC@date{#1}%
  \HyC@checkPackage
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@checkPackage}
%    \begin{macrocode}
\def\HyC@checkPackage{%
  \typeout{}%
  \begingroup
    \edef\x{\endgroup
      \noexpand\RequirePackage{\HyC@package}%
      \ifx\HyC@date\@empty\relax\else[\HyC@date]\fi%
    }%
  \x
  \typeout{}%
  \typeout{%
    * Package `\HyC@package'%
    \ifx\HyC@date\@empty
    \else
      \space\HyC@date
    \fi
  }%
  \@ifundefined{ver@\HyC@package.sty}{%
  }{%
    \typeout{%
      \space\space Loaded: `\HyC@package' %
      \csname ver@\HyC@package.sty\endcsname
    }%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\checkcommand}
%    The macro \cmd{\checkcommand} parses the next
%    tokens as a \LaTeX\ definition and compares
%    this definition with the current meaning of
%    that command.
%    \begin{macrocode}
\newcommand*{\checkcommand}[1]{%
  \begingroup
  \ifx\long#1\relax
    \expandafter\HyC@checklong
  \else
    \def\HyC@defcmd{#1}%
    \expandafter\let\expandafter\HyC@next
      \csname HyC@\expandafter\@gobble\string#1\endcsname
    \expandafter\HyC@checkcommand
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@checklong}
%    The definition command \cmd{\def} or \cmd{\edef}
%    is read.
%    \begin{macrocode}
\def\HyC@checklong#1{%
  \def\HyC@defcmd{\long#1}%
  \expandafter\let\expandafter\HyC@next
    \csname HyC@\expandafter\@gobble\string#1\endcsname
  \HyC@checkcommand
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@checkcommand}
%    The optional star of \LaTeX's definitions is parsed.
%    \begin{macrocode}
\def\HyC@checkcommand{%
  \ifx\HyC@next\relax
    \PackageError{hycheck}{%
      Unknown command `\expandafter\strip@prefix\meaning\HyC@cmd'%
    }\@ehd
    \expandafter\endinput
  \fi
  \@ifstar{%
    \def\HyC@star{*}%
    \HyC@check
  }{%
    \let\HyC@star\@empty
    \HyC@check
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@check}
%    The macro \cmd{\HyC@check} reads the
%    definition command.
%    \begin{macrocode}
\def\HyC@check#1{%
  \def\HyC@cmd{#1}%
  \let\HyC@org@cmd#1%
  \let#1\relax
  \let\HyC@param\@empty
  \HyC@Toks{}%
  \let\HyC@org@optcmd\HyC@noValue
  \let\HyC@org@robustcmd\HyC@noValue
  \let\HyC@org@robustoptcmd\HyC@noValue
  \HyC@next
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@noValue}
%    \begin{macrocode}
\def\HyC@noValue{NoValue}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@newcommand}
%    The code for \cmd{\newcommand}.
%    \begin{macrocode}
\def\HyC@newcommand{%
  \let\HyC@@cmd\HyC@cmd
  \@ifnextchar[\HyC@nc@opt\HyC@nc@noopt
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@Toks}
%    A register for storing the default value of an
%    optional argument.
%    \begin{macrocode}
\newtoks\HyC@Toks
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@nc@noopt}
%    This macro \cmd{\HyC@nc@noopt} is called, if the
%    parser has reached the definition text.
%    \begin{macrocode}
\long\def\HyC@nc@noopt#1{%
  \edef\x{%
    \expandafter\noexpand\HyC@defcmd
    \HyC@star
    \expandafter\noexpand\HyC@cmd
    \HyC@param\the\HyC@Toks
  }%
  \x{#1}%
  \HyC@doCheck
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@nc@opt}
%    This macro scans the first optional argument
%    of a \LaTeX\ definition (number of arguments).
%    \begin{macrocode}
\def\HyC@nc@opt[#1]{%
  \def\HyC@param{[{#1}]}%
  \@ifnextchar[\HyC@nc@default\HyC@nc@noopt
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@nc@default}
%    Macro \cmd{\HyC@nc@default} scans the
%    default for an optional argument.
%    \begin{macrocode}
\def\HyC@nc@default[#1]{%
  \HyC@Toks={[{#1}]}%
  \edef\HyC@optcmd{%
    \expandafter\noexpand
    \csname\expandafter\string\HyC@@cmd\endcsname
  }%
  \expandafter\let\expandafter\HyC@org@optcmd\HyC@optcmd
  \HyC@nc@noopt
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyC@DeclareRobustCommand}
%    \cmd{\DeclareRobustCommand}|{\cmd}| makes the command
%    \cmd{\cmd} robust, that then calls |\cmd|\verb*| |
%    with an space at the end of the command name, defined by
%    \cmd{\newcommand}. Therefore the further parsing
%    is done by \cmd{\HyC@nc@opt} or \cmd{\Hy@nc@noopt}
%    of the \cmd{\HyC@newcommand} chain.
%    \begin{macrocode}
\def\HyC@DeclareRobustCommand{%
  \edef\HyC@robustcmd{%
    \expandafter\noexpand
    \csname\expandafter\expandafter\expandafter\@gobble
      \expandafter\string\HyC@cmd\space\endcsname
  }%
  \expandafter\let\expandafter\HyC@org@robustcmd\HyC@robustcmd
  \expandafter\let\HyC@robustcmd\relax
  \let\HyC@@cmd\HyC@robustcmd
  \@ifnextchar[\HyC@nc@opt\HyC@nc@noopt
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyC@def}
%    \begin{macro}{\HyC@edef}
%    The parameter text of \cmd{\def} or \cmd{\edef} is
%    stored in the token register \cmd{\HyC@Toks}.
%    \begin{macrocode}
\def\HyC@def#1#{%
  \HyC@Toks={#1}%
  \HyC@nc@noopt
}
\let\HyC@edef\HyC@def
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
%    \begin{macro}{\HyC@doCheck}
%    This command performs the checks and prints the result.
%    \begin{macrocode}
\def\HyC@doCheck{%
  \typeout{* Checking `\HyC@string\HyC@cmd':}%
  \HyC@checkItem{cmd}%
  \HyC@checkItem{robustcmd}%
  \HyC@checkItem{optcmd}%
  \HyC@checkItem{robustoptcmd}%
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@checkItem}
%    A single check.
%    \begin{macrocode}
\def\HyC@checkItem#1{%
  \expandafter\ifx\csname HyC@org@#1\endcsname\HyC@noValue
  \else
    \expandafter\expandafter\expandafter\ifx
    \csname HyC@#1\expandafter\endcsname
    \csname HyC@org@#1\endcsname
      \expandafter\HyC@checkOk\csname HyC@#1\endcsname
    \else
      \expandafter\HyC@checkFailed
        \csname HyC@#1\expandafter\endcsname
        \csname HyC@org@#1\endcsname
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@string}
%    \begin{macro}{\HyC@meaning}
%    Some shorthands.
%    \begin{macrocode}
\def\HyC@string#1{\expandafter\string#1}
\def\HyC@meaning#1{\expandafter\meaning#1}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \begin{macro}{\HyC@checkOk}
%    The result, if the check succeeds.
%    \begin{macrocode}
\def\HyC@checkOk#1{%
  \typeout{\space\space`\HyC@string#1' ok.}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyC@checkFailed}
%    The result, if the check fails.
%    \begin{macrocode}
\def\HyC@checkFailed#1#2{%
  \typeout{\space\space`\HyC@string#1' failed.}%
  \typeout{\space\space* original: \meaning#2}%
  \typeout{\space\space* expected: \HyC@meaning#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
% **************************************************
%</check>
%    \end{macrocode}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
% \section{Package options and setup}\label{options}
%
%
% \subsection{Save catcodes}
%    There are many packages that change the standard catcodes.
%
%    First we save the original meaning of |`| and |=|
%    in the token register |\toks@|, because we need the two
%    characters in the macros \cmd{\Hy@SetCatcodes} and
%    \cmd{\Hy@RestoreCatcodes}.
%    \begin{macrocode}
\begingroup
  \@makeother\`%
  \@makeother\=%
  \edef\x{%
    \edef\noexpand\x{%
      \endgroup
      \noexpand\toks@{%
        \catcode 96=\noexpand\the\catcode`\noexpand\`\relax
        \catcode 61=\noexpand\the\catcode`\noexpand\=\relax
      }%
    }%
    \noexpand\x
  }%
\x
\@makeother\`
\@makeother\=
%    \end{macrocode}
%    \begin{macro}{\Hy@SetCatcodes}
%    \begin{macrocode}
\def\Hy@SetCatcodes{%
  \@makeother\`%
  \@makeother\=%
  \catcode`\$=3 %
  \catcode`\&=4 %
  \catcode`\^=7 %
  \catcode`\_=8 %
  \@makeother\|%
  \@makeother\:%
  \@makeother\(%
  \@makeother\)%
  \@makeother\[%
  \@makeother\]%
  \@makeother\/%
  \@makeother\!%
  \@makeother\<%
  \@makeother\>%
  \@makeother\.%
  \@makeother\;%
  \@makeother\+%
  \@makeother\-%
  \@makeother\"%
  \@makeother\'%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@RestoreCatcodes}
%    \begin{macrocode}
\begingroup
  \def\x#1{\catcode`\noexpand#1=\the\catcode`#1\relax}%
  \xdef\Hy@RestoreCatcodes{%
    \the\toks@
    \x\$%
    \x\&%
    \x\^%
    \x\_%
    \x\|%
    \x\:%
    \x\(%
    \x\)%
    \x\[%
    \x\]%
    \x\/%
    \x\!%
    \x\<%
    \x\>%
    \x\.%
    \x\;%
    \x\+%
    \x\-%
    \x\"%
    \x\'%
  }%
\endgroup
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\Hy@SetCatcodes
%    \end{macrocode}
%
% \subsection{Disable patches}
% 
% If new latex interfaces are used with \cs{DocumentMetadata} various patches are unneeded or do
% harm, so we disable them.
% Not handled yet: \cs{hyper@nopatch@amsmath@tag}, \cs{hyper@nopatch@mathenv}
%    \begin{macrocode}
\IfFormatAtLeastT{2025-11-01}
 {
   \IfDocumentMetadataT
    {
      \def\hyper@nopatch@counter{} % disabled since 2024-11-01 anyway
      \def\hyper@nopatch@bib{}
      \def\hyper@nopatch@thm{}
      \def\hyper@nopatch@caption{}
      \def\hyper@nopatch@footnote{}
      \def\hyper@nopatch@sectioning{}
      \def\hyper@nopatch@toc{}
      \def\hyper@nopatch@longtable{}
    }
 }
%    \end{macrocode}
% change 2020-07-24: require newer pdftexcmds and remove fallback code
% for version older than 2010.
% change 2021-08-14: require expl3
% change 2023-11-26: no longer require pdftexcmds
% change 2023-11-26: no longer require expl3, we assume kernel is new enough.
% change 2024-05-23: load stringenc always (for pdfx)
%    \begin{macrocode}
\RequirePackage{iftex}[2019/10/24]
\RequirePackage{keyval}[1997/11/10]
\RequirePackage{kvsetkeys}[2007/09/29]
\RequirePackage{kvdefinekeys}[2011/04/07]
\RequirePackage{pdfescape}[2007/11/11]
\RequirePackage{hycolor}
\RequirePackage{nameref}[2012/07/28]
\RequirePackage{etoolbox}
\RequirePackage{stringenc}[2009/12/15]%
\def\Hy@Error{\PackageError{hyperref}}
\def\Hy@Warning{\PackageWarning{hyperref}}
\def\Hy@WarningNoLine{\PackageWarningNoLine{hyperref}}
\def\Hy@Info{\PackageInfo{hyperref}}
\def\Hy@InfoNoLine#1{\PackageInfo{hyperref}{#1\@gobble}}
\def\Hy@Message#1{%
  \GenericWarning{%
    (hyperref)\@spaces\@spaces\@spaces\@spaces
  }{%
    Package hyperref Message: #1\@gobble
  }%
}
%    \end{macrocode}
%
% \subsection{Version check}
%
%    \begin{macro}{\Hy@VersionChecked}
%    \begin{macrocode}
\chardef\Hy@VersionChecked=0 %
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@VersionCheck}
%    \begin{macrocode}
\def\Hy@VersionCheck#1{%
  \begingroup
    \@ifundefined{ver@hyperref.sty}{%
      \Hy@Error{%
        This should not happen!\MessageBreak
        Missing hyperref version%
      }\@ehd
    }{%
      \@ifundefined{ver@#1}{%
        \Hy@Error{%
          This should not happen!\MessageBreak
          Missing version of `#1'%
        }\@ehd
      }{%
        \def\x##1##2##3{%
          \expandafter\expandafter\expandafter\Hy@@VersionCheck
          \expandafter\expandafter\expandafter##2%
          \csname ver@##3\endcsname##1##1\@nil
        }%
        \x{ }\y{hyperref.sty}%
        \x{ }\z{#1}%
        \ifx\y\z
        \else
          \edef\a{#1}%
          \edef\b{\HyOpt@CustomDriver.def}%
          \ifx\a\b
            \Hy@WarningNoLine{%
              Version mismatch (custom driver)!\MessageBreak
              * \y: hyperref.sty\MessageBreak
              * \z: \a
            }%
          \else
            \Hy@Error{%
              Version mismatch!\MessageBreak
              * \y: hyperref.sty\MessageBreak
              * \z: \a
            }\@ehd
          \fi
        \fi
      }%
    }%
  \endgroup
  \chardef\Hy@VersionChecked=1 %
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@@VersionCheck}
%    \begin{macrocode}
\def\Hy@@VersionCheck #1#2 #3 #4\@nil{%
  \def#1{#2 #3}%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Checks with regular expressions}
%
%    \begin{macrocode}
\edef\Hy@leftbracechar{\string{}
\edef\Hy@rightbracechar{\string}}
\@ifundefined{pdfmatch}{%
  \def\Hy@Match#1#2#3#4#5{}%
}{%
  \def\Hy@Match#1#2#3{%
    \begingroup
    \edef\^{\@backslashchar\string^}%
    \edef\.{\@backslashchar.}%
    \edef\[{\@backslashchar[}% ]]
    \edef\${\@backslashchar$}%
    \edef\({\@backslashchar(}%
    \edef\){\@backslashchar)}%
    \edef\|{\@backslashchar|}%
    \edef\*{\@backslashchar*}%
    \edef\+{\@backslashchar+}%
    \edef\?{\@backslashchar?}%
    \edef\{{\@backslashchar\Hy@leftbracechar}%
    \edef\}{\Hy@rightbracechar}%
    \edef\\{\@backslashchar\@backslashchar}%
    \let\ \Hy@space
    \ifcase\pdfmatch#2{#3}{#1} %
      \endgroup
      \expandafter\@secondoftwo
    \or
      \endgroup
      \expandafter\@firstoftwo
    \else
      \Hy@Warning{%
        Internal error: Wrong pattern!\MessageBreak
        --> #3 <--\MessageBreak
        Pattern check ignored%
      }%
      \endgroup
      \expandafter\@firstoftwo
    \fi
  }%
}
%    \end{macrocode}
%
% \subsection{Compatibility with format dumps}
%
%    \begin{macro}{\AfterBeginDocument}
%    For use with pre-compiled formats, created using the
%    |ldump|  package, there needs to be 2 hooks for adding
%    material delayed until |\begin{document}|.
%    These are called \cmd{\AfterBeginDocument} and
%    \cmd{\AtBeginDocument}.
%    If |ldump| is not loaded, then a single hook suffices
%    for normal \LaTeX{} processing.
%
%    The default definition of |\AfterBeginDocument| cannot
%    be done by |\let| because of problems with |xypic|.
%    \begin{macrocode}
\@ifundefined{AfterBeginDocument}{%
  \def\AfterBeginDocument{\AtBeginDocument}%
}{}%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@AtBeginDocument}
%    For the case that package `hyperref' is loaded
%    using \cs{AtBeginDocument}, we have to wrap the calls
%    of \cs{AtBeginDocument}/\cs{AfterBeginDocument} in
%    \cs{AtEndOfPackage}. However, packages must be
%    loaded in \cs{AtEndOfPackage} \emph{before} package
%    `kvoptions' has to perform its option cleanup.
%    Therefore we use a hook.
%    \begin{macrocode}
\ExplSyntaxOn
\let\Hy@LocalAppendToMacro\tl_put_right:Nn
\let\Hy@GlobalAppendToMacro\tl_gput_right:Nn
\let\Hy@ifempty\tl_if_empty:nTF
\ExplSyntaxOff
\def\Hy@AtBeginDocument{%
  \Hy@LocalAppendToMacro\Hy@AtBeginDocumentHook
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@AtEndOfPackage}
%    \begin{macrocode}
\def\Hy@AtEndOfPackage{%
  \Hy@LocalAppendToMacro\Hy@AtEndOfPackageHook
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@AtBeginDocumentHook}
%    \begin{macrocode}
\let\Hy@AtBeginDocumentHook\@empty
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@AtEndOfPackageHook}
%    \begin{macrocode}
\let\Hy@AtEndOfPackageHook\@empty
%    \end{macrocode}
%    \end{macro}
%    Install the hook, before package `kvoptions' is loaded.
%    \begin{macrocode}
\AtEndOfPackage{%
  \Hy@AtEndOfPackageHook
  \let\Hy@AtEndOfPackageHook\@undefined
  \AfterBeginDocument{%
    \Hy@AtBeginDocumentHook{}%
    \let\Hy@AtBeginDocumentHook\@undefined
  }%
}
%    \end{macrocode}
%
%    Package kvoptions is used for processing options that are
%    given as key value pairs. The package provides
%    |\ProcessKeyvalOptions|, formerly known as
%    |\ProcessOptionsWithKV|.
%    \begin{macrocode}
\RequirePackage{kvoptions}[2009/07/21]
%    \end{macrocode}
%
% \subsection{Switches}
%    \begin{macrocode}
\newif\ifHy@stoppedearly
\newif\ifHy@typexml
\newif\ifHy@activeanchor
\newif\ifHy@backref
\newif\ifHy@bookmarks
\newif\ifHy@bookmarksnumbered
\newif\ifHy@bookmarksopen
\newif\ifHy@breaklinks
\newif\ifHy@pdfcenterwindow
\newif\ifHy@CJKbookmarks
\newif\ifHy@colorlinks
\newif\ifHy@destlabel
\newif\ifHy@draft
\let\Hy@finaltrue\Hy@draftfalse
\let\Hy@finalfalse\Hy@drafttrue
\newif\ifHy@pdfescapeform
\newif\ifHy@hyperfigures
\newif\ifHy@pdffitwindow
\newif\ifHy@frenchlinks
\newif\ifHy@hyperfootnotes
\newif\ifHy@hyperindex
\newif\ifHy@hypertexnames
\newif\ifHy@implicit
\newif\ifHy@linktocpage
\newif\ifHy@localanchorname
\newif\ifHy@pdfmenubar
\newif\ifHy@naturalnames
\newif\ifHy@nesting
\newif\ifHy@pdfnewwindowset
\newif\ifHy@pdfnewwindow
\newif\ifHy@ocgcolorlinks
\newif\ifHy@pageanchor
\newif\ifHy@pdfpagelabels
\newif\ifHy@pdfstring
\newif\ifHy@plainpages
\newif\ifHy@psize
\newif\ifHy@raiselinks
\newif\ifHy@seminarslides
\newif\ifHy@setpagesize
\newif\ifHy@texht
\newif\ifHy@psdextra
\newif\ifHy@pdftoolbar
\newif\ifHy@unicode
\newif\ifHy@pdfusetitle
\newif\ifHy@verbose
\let\Hy@debugtrue\Hy@verbosetrue
\let\Hy@debugfalse\Hy@verbosefalse
\newif\ifHy@pdfwindowui
\newif\ifHy@pdfdisplaydoctitle
\newif\ifHy@pdfa
%    \end{macrocode}
%    Defaults for the switches are now set.
%    \begin{macrocode}
\Hy@backreffalse
\Hy@bookmarksnumberedfalse
\Hy@bookmarksopenfalse
\Hy@bookmarkstrue
\Hy@breaklinksfalse
\Hy@pdfcenterwindowfalse
\Hy@CJKbookmarksfalse
\Hy@destlabelfalse
\Hy@pdfescapeformfalse
\Hy@hyperfiguresfalse
\Hy@pdffitwindowfalse
\Hy@hyperfootnotestrue
\Hy@hyperindextrue
\Hy@hypertexnamestrue
\Hy@implicittrue
\Hy@linktocpagefalse
\Hy@localanchornamefalse
\Hy@pdfmenubartrue
\Hy@naturalnamesfalse
\Hy@nestingfalse
\Hy@pdfnewwindowsetfalse
\Hy@pdfnewwindowfalse
\Hy@pageanchortrue
\Hy@pdfpagelabelstrue
\Hy@pdfstringfalse
\Hy@plainpagesfalse
\Hy@raiselinksfalse
\Hy@setpagesizetrue
\Hy@texhtfalse
\Hy@psdextrafalse
\Hy@pdftoolbartrue
\Hy@unicodetrue
\ifx\kanjiskip\@undefined
\else
  \ifx\forcecjktoken\@undefined
   \Hy@unicodefalse
  \fi
\fi
\Hy@pdfusetitlefalse
\Hy@verbosefalse
\Hy@pdfwindowuitrue
\Hy@pdfdisplaydoctitlefalse
\Hy@pdfafalse
%    \end{macrocode}
%
% \section{Common help macros}
%
%    \begin{macro}{\Hy@StepCount}
%    \begin{macrocode}
\def\Hy@StepCount#1{\advance#1 by 1 }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@GlobalStepCount}
%    \begin{macrocode}
\def\Hy@GlobalStepCount#1{\global\advance#1 by 1 }%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
\newdimen\@linkdim
\let\Hy@driver\@empty
\let\MaybeStopEarly\relax
\newcount\Hy@linkcounter
\newcount\Hy@pagecounter
\Hy@linkcounter0
\Hy@pagecounter0
\def\Hy@space{ }
%    \end{macrocode}
%
% \subsection{Macros for recursions}
%
%    \begin{macrocode}
\let\Hy@ReturnEnd\@empty
\long\def\Hy@ReturnAfterFi#1\fi{\fi#1}
\long\def\Hy@ReturnAfterElseFi#1\else#2\fi{\fi#1}
\long\def\Hy@ReturnAfterFiFiEnd#1\fi#2\Hy@ReturnEnd{\fi\fi#1}
\long\def\Hy@ReturnAfterElseFiFiEnd#1\else#2\Hy@ReturnEnd{\fi\fi#1}
%    \end{macrocode}
%
% \subsection{Babel's protection of shorthand characters}
%
%    \begin{macro}{\Hy@safe@activestrue}
%    \begin{macro}{\Hy@safe@activesfalse}
%    Babel's switch setting commands cannot used directly,
%    because they can be undefined if babel is not loaded.
%    \begin{macrocode}
\def\Hy@safe@activestrue{\csname @safe@activestrue\endcsname}
\def\Hy@safe@activesfalse{\csname @safe@activesfalse\endcsname}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
% \subsection{Coordinate transformations}
%
%    At some places numbers in pdf units are
%    expected (eg: FitBH, ...). The following macros
%    perform the transformation from TeX units (pt)
%    to PDF units (bp).
%
%    \begin{macro}{\hypercalcbp}
%    The user macro \cmd{\hypercalcbp} can be used, for example,
%    inside option values:
%\begin{verbatim}
%pdfstartview={FitBH \hypercalcbp{\paperheight-\topmargin-1in}}
%\end{verbatim}
%    \begin{itemize}
%    \item
%    It cannot be used inside \cmd{\usepackage}, because
%    LaTeX expands the options before package hyperref
%    is loaded and \cmd{\hypercalcbp} is defined.
%    \item
%    With the now required e-TeX extensions an expandable implementation
%    is very easy; \cmd{\hypercalcbp} can be used
%    everywhere and is expanded at use.
%    \end{itemize}
%    Example (\TeX):
%\begin{verbatim}
%\usepackage[...]{hyperref}
%\hypersetup{
%  pdfstartview={FitBH \hypercalcbp{\paperheight-\topmargin-1in
%    -\headheight-\headsep}}
%}
%\end{verbatim}
%    \begin{macro}{\hypercalcbp}
%    \begin{macrocode}
  \def\hypercalcbp#1{%
    \strip@pt\dimexpr 0.99626401\dimexpr(#1)\relax\relax
  }%
  \def\hypercalcbpdef{\def}%
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
% \section{Dealing with PDF strings}\label{sec:pdfstring}
%    The PDF string stuff done by Heiko Oberdiek.
%
%    Naming convention: All internal commands that are only
%    needed by \cs{pdfstringdef} are prefixed with \cs{HyPsd@}.
%
% \subsection{Description of PDF strings}
%    The PDF specification defines several places to hold
%    text strings (bookmark names, document information,
%    text annotations, etc.).
%    The PDF strings have following properties:
%    \begin{itemize}
%    \item They are surrounded by parentheses. The hexadecimal form
%      is not supported.
%    \item Like PostScript language strings they use the same
%      escaping mechanism:\\
%      \begin{tabular}{ll}
%      |\\|& the backslash itself\\
%      \cs{)}, \cs{(}& unbalanced parentheses\\
%      \cs{n}, \cs{r}, \cs{t}, \cs{b}, \cs{f}& special white space
%        escape sequences\\
%      |\|\textit{|ddd|}& octal character code \textit{|ddd|}
%      \end{tabular}
%    \item Strings are stored either in PDFDocEncoding, which is a superset of
%      ISOLatin1 and is compatible with Unicode with character codes
%      below 256, or in Unicode.
%    \end{itemize}
%
% \subsection{Definition of
%    \texorpdfstring{\cs{pdfstringdef}}{\\pdfstringdef}}
%    The central macro for dealing with PDF strings is \cs{pdfstringdef}.
%    It defines a command |#1| to be the result of the conversion
%    from the string in |#2| to a legal PDFDocEncoded string.
%    Currently the definition is global, but this can be changed in
%    the future.
%
%    Important: In \TeX's view PDF strings are written to a file and
%    are expanded only in its mouth. Stomach commands that cannot
%    be expanded further aren't executed, they are written verbatim.
%    But the PDF reader that reads such a string isn't a \TeX{}
%    interpreter!
%
%    The macro \cs{pdfstringdef} consists of three main parts:
%    \begin{enumerate}
%    \item Preprocessing. Here the expansion is prepared. The encoding
%          is set and many commands are redefined, so that they work
%          appropriate.
%    \item Expansion. The \TeX{} string is expanded the first time
%          to get a PDF string.
%    \item Postprocessing. The result of the expansion is checked and
%          converted to the final form.
%    \end{enumerate}
%
%    \cs{MakeUppercase} and \cs{MakeLowercase} do not work by expansion in
%    legacy code but if the expl3 code is available we can handle them.
%    If a current babel or polyglossia is used we can also make use of the language.
%
%    \begin{macro}{\MakeUppercaseUnsupportedInPdfStrings}
%    \begin{macro}{\MakeLowercaseUnsupportedInPdfStrings}
%    \begin{macrocode}
\providecommand*\BCPdata[1]{}
\ExplSyntaxOn
\@ifundefined{text_uppercase:n}{}
 {
   \def\MakeUppercaseUnsupportedInPdfStrings#1
         {\use:e
           {\exp_args:Ne
              \text_uppercase:nn{\BCPdata { casing }}{#1}
           }
         }
   \def\MakeLowercaseUnsupportedInPdfStrings#1
         {\use:e
           {\exp_args:Ne
              \text_lowercase:nn{\BCPdata { casing }}{#1}
           }
         }
 }
\ExplSyntaxOff
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    
% \begin{macro}{\hyper@natlinkstart}
% \begin{macro}{\hyper@natlinkend}
% \begin{macro}{\hyper@natlinkbreak}
% \begin{macro}{\hyper@natanchorstart}
% \begin{macro}{\hyper@natanchorend}
% We provide the natbib hooks always, for better tagging support, see
% issue \#406
%    \begin{macrocode}
\def\hyper@natlinkstart#1{}
\def\hyper@natlinkend{}
\def\hyper@natlinkbreak#1#2{#1}
\def\hyper@natanchorstart#1{}
\def\hyper@natanchorend{}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}

%    \begin{macro}{\pdfstringdef}
%    \cs{pdfstringdef} works on the tokens in |#2| and converts them to
%    a PDF string as far as possible:
%    \begin{itemize}
%    \item The result should obey the rules of the PDF specification
%          for strings.
%    \item The string can safely processed by \TeX, because the
%          tokens have only catcodes 10 until 12.
%    \end{itemize}
%    The result is stored in the command token given in |#1|.
%    \begin{macrocode}
\def\pdfstringdef#1#2{%
%    \end{macrocode}
%    Many redefinitions are needed, so all the work is done in a group.
%    \begin{macrocode}
  \begingroup
%    \end{macrocode}
%
% \subsubsection{Preprocessing}
% \paragraph{Octal escape sequences.}
%    To avoid problems with eight bit or non printable characters, the octal
%    escape notation is supported. So most glyphs in the encoding definitions
%    for PD1 and PU produce these octal escape sequences.
%    All three octal digits have to be used:
%    \begin{itemize}
%    \item Wrong results are avoided, if digits follow that are not part of the
%          octal sequence.
%    \item Macros rely on the fact that the octal sequences always consist of
%          three digits (vtex driver, Unicode support).
%    \end{itemize}
%    The escape sequences start with a backslash. By \cs{string} it will be
%    printed. Therefore it is ensured that the \TeX{} escape character indeed
%    prints as a normal backslash.
%    Eventually this line can be removed, because this is standard
%    \LaTeX{} behaviour.
%    \begin{macrocode}
    \escapechar`\\%
%    \end{macrocode}
%    From the view of \TeX{} a octal sequence consists of the command tokens
%    \cs{0} until \cs{3} and two digits.
%    For saving tokens \cs{0}, \cs{1}, \cs{2}, and \cs{3} are directly
%    used without a preceding \cs{string} in the glyph definitions.
%    This is done here locally
%    by defining the \cs{0} until \cs{3} commands. So the user
%    can use octal escape sequences directly, the disadvantage is
%    that a previous definition of this short commands does not apply.
%    \begin{macrocode}
    \edef\0{\string\0}%
    \edef\1{\string\1}%
    \edef\2{\string\2}%
    \edef\3{\string\3}%
%    \end{macrocode}
% \paragraph{Setting font encoding.}
%    The unicode encoding
%    uses \cs{8} and \cs{9} as marker for the higher byte.
%    \cs{8} is an abbreviation for the higher bytes 0 until 7
%    that can be expressed by one digit. \cs{8} will be
%    converted to \cs{00}. However \cs{9} only marks the next
%    three digits as higher byte and will be removed later.
%
%    The encoding is set by \cs{enc@update} for optimizing reasons.
%    \begin{macrocode}
    \ifHy@unicode
      \edef\8{\string\8}%
      \edef\9{\string\9}%
      \fontencoding{PU}%
      \HyPsd@UTFviii
      \def\ifpdfstringunicode##1##2{##1}%
    \else
      \fontencoding{PD1}%
      \def\ifpdfstringunicode##1##2{##2}%
    \fi
    \let\utf@viii@undeferr\HyPsd@utf@viii@undeferr
    \enc@update
%    \end{macrocode}
%
% \paragraph{Internal encoding commands.}
%    \cs{pdfstringdef} interprets text strings which are not allowed
%    to contain mathematical stuff. The text glyph commands will produce
%    a warning, if called in math mode. But this warning disturbs while
%    expanding. Therefore we check for math mode here, before
%    \cs{@inmathwarn} will be disabled (see below).
%    \begin{macrocode}
    \@inmathwarn\pdfstringdef
%    \end{macrocode}
%    If a glyph is used, that isn't in the PD1/PU encoding there will
%    be an infinite error loop, because the NFSS encoding stuff
%    have to be expanded unprotected (\cs{edef}), so that the
%    assignments of \cs{@changed@cmd} don't take place.
%    To patch this behaviour I only found \cs{@inmathwarn}
%    as a usable hook. While an \cs{edef} a warning message by
%    \cs{@inmathwarn} or \cs{TextSymbolUnavailable} cannot be give out,
%    so \cs{@inmathwarn} should be disabled. And with the help of it
%    the assignments in \cs{@changed@cmd} can easily be caught
%    (see below).
%    \begin{macrocode}
    \let\@inmathwarn\HyPsd@inmathwarn
%    \end{macrocode}
%
%    Unknown composite characters are built with \cs{add@accent},
%    so it is redefined to provide a warning.
%    \begin{macrocode}
    \let\add@accent\HyPsd@add@accent
%    \end{macrocode}
%
% \paragraph{Commands that don't use NFSS directly.}
%    There are several commands that prints characters in the
%    printable ASCII area that don't obey the NFSS, so they have
%    to be redefined here.
%    UF 29.09.2017: added a mapping for \cs{noboundary}, see issue |#37|
%    \url{https://github.com/latex3/hyperref/issues/37}
%    No test for PU, if some definition for PD1 is added it will work too.
%    \begin{macrocode}
    \let\{\textbraceleft
    \let\}\textbraceright
    \let\\\textbackslash
    \let\#\textnumbersign
    \let\$\textdollar
    \let\%\textpercent
    \let\&\textampersand
%    \let\~\textasciitilde
    \let\_\textunderscore
    \let\P\textparagraph
    \let\ldots\textellipsis
    \let\dots\textellipsis
    \@ifundefined{textEncodingNoboundary}%
      {}{\let\noboundary\textEncodingNoboundary}%
%    \end{macrocode}
%
% \paragraph{Newline}
%    \cmd{\newline} or \cmd{\\} do not work in bookmarks, in text
%    annotations they should expand to \cmd{\r}. In pdf strings
%    \cmd{\\} stands for a backslash. Therefore the commands
%    are disabled now. The user can redefine them for a result
%    what he want:
%    \begin{description}
%    \item[backslash:]
%      |\pdfstringdefDisableCommands{\let\\\textbackslash}|
%    \item[new line:]
%      |\pdfstringdefDisableCommands{\let\\\textCR}|
%    \item[disabled:]
%      |\pdfstringdefDisableCommands{\let\\\empty}|
%    \end{description}
%    At any case, however, the optional argument or the star
%    cannot be scanned in a 100\% sure manner.
%    \begin{macrocode}
    \def\\{\pdfstringdefWarn\\}%
    \def\newline{\pdfstringdefWarn\newline}%
%    \end{macrocode}
%
% \paragraph{Logos.}
%    Because the box shifting
%    used in the \TeX{} logo does not work while writing to a file,
%    the standard \TeX{} logos are redefined.
%    We use the direct PU code to avoid problems if
%    \cs{textepsilon} is not defined.
%    \begin{macrocode}
    \def\TeX{TeX}%
    \def\LaTeX{La\TeX}%
    \def\LaTeXe{%
      \LaTeX2%
      \ifHy@unicode\83\265\else e\fi
    }%
    \def\eTeX{%
      \ifHy@unicode\83\265\else e\fi
      -\TeX%
    }%
    \def\SliTeX{Sli\TeX}%
    \def\MF{Metafont}%
    \def\MP{Metapost}%
%    \end{macrocode}
%
% \paragraph{Standard font commands.}
%    Because font changes do not work, the standard font
%    switching commands are disabled.
%    \begin{macrocode}
    \let\fontencoding\@gobble
    \let\fontfamily\@gobble
    \let\fontseries\@gobble
    \let\fontshape\@gobble
    \let\fontsize\@gobbletwo
    \let\selectfont\@empty
    \let\usefont\@gobblefour
    \let\emph\@firstofone
    \let\textnormal\@firstofone
    \let\textrm\@firstofone
    \let\textsf\@firstofone
    \let\texttt\@firstofone
    \let\textbf\@firstofone
    \let\textmd\@firstofone
    \let\textit\@firstofone
    \let\textsc\@firstofone
    \let\textsl\@firstofone
    \let\textup\@firstofone
    \let\normalfont\@empty
    \let\rmfamily\@empty
    \let\sffamily\@empty
    \let\ttfamily\@empty
    \let\bfseries\@empty
    \let\mdseries\@empty
    \let\itshape\@empty
    \let\scshape\@empty
    \let\slshape\@empty
    \let\upshape\@empty
    \let\em\@empty
    \let\rm\@empty
    \let\Huge\@empty
    \let\LARGE\@empty
    \let\Large\@empty
    \let\footnotesize\@empty
    \let\huge\@empty
    \let\large\@empty
    \let\normalsize\@empty
    \let\scriptsize\@empty
    \let\small\@empty
    \let\tiny\@empty
    \let\mathversion\@gobble
    \let\phantom\@gobble
    \let\vphantom\@gobble
    \let\hphantom\@gobble
%    \end{macrocode}
%
% \paragraph{Package pifont.}
%    \begin{macrocode}
    \let\ding\HyPsd@ding
    \let\Cube\HyPsd@DieFace
%* \HyPsd@DieFace -> \epsdice (epsdice)
%* \HyPsd@DieFace -> \fcdice (hhcount)
%    \end{macrocode}
%
% \paragraph{Environments.}
%    \begin{macrocode}
    \def\begin##1{\csname##1\endcsname}%
    \def\end##1{\csname end##1\endcsname}%
%    \end{macrocode}
%
% \paragraph{Package color.}
%    \begin{macrocode}
    \def\textcolor##1##{\@secondoftwo}%
%    \end{macrocode}
%
% \paragraph{Upper- and lowercase.}
%    \begin{macrocode}
    \def\MakeUppercase{\MakeUppercaseUnsupportedInPdfStrings}%
    \def\MakeLowercase{\MakeLowercaseUnsupportedInPdfStrings}%
%    \end{macrocode}
%
% \paragraph{TextOrMath}
% The \cs{TextOrMath} command is protected in a current \LaTeX{} and
% so can not be processed.
%    \begin{macrocode}
   \def\TextOrMath{\ifmmode\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}%
%    \end{macrocode}
% \paragraph{Support of math commands without prefix \texttt{text}.}
%    This is controlled by option ``psdextra'' and only
%    activated with Unicode PDF strings.
%    \begin{macrocode}
    \ifHy@psdextra
      \ifHy@unicode
        \csname psdmapshortnames\endcsname
        \csname psdaliasnames\endcsname
      \fi
    \fi
%    \end{macrocode}
%
% \paragraph{Package babel.}
%    Wherever ``naturalnames'' is used, disable \cs{textlatin}
%    (from Babel 3.6k). Thanks to Felix Neubauer
%    (Email: \Email{Felix.Neubauer@gmx.net}).
%    \begin{macrocode}
    \let\foreignlanguage\@secondoftwo
    \let\textlatin\@firstofone
    \@ifundefined{language@group}{}{%
      \let\bbl@info\@gobble
      \csname HyPsd@babel@\language@group\endcsname
    }%
%    \end{macrocode}
%
%    \begin{macrocode}
    \let\@safe@activestrue\relax
    \let\@safe@activesfalse\relax
%    \end{macrocode}
%
%    Disable \cs{cyr}, used in russianb.ldf.
%    \begin{macrocode}
    \let\cyr\relax
%    \end{macrocode}
%
%
% \paragraph{Package german.}
%    \begin{macrocode}
    \let\glqq\textglqq
    \let\grqq\textgrqq
    \let\glq\textglq
    \let\grq\textgrq
    \let\flqq\textflqq
    \let\frqq\textfrqq
    \let\flq\textflq
    \let\frq\textfrq
%    \end{macrocode}
%
% \paragraph{Package french.} The support is deferred, because
%    it needs |\GenericError| to be disabled (see below).
%
% \paragraph{Package FrenchPro.} This package uses:
%    \begin{quote}
%    |\if@mid@expandable{|not fully expandable code|}{|fully expandable code|}|
%    \end{quote}
%    \begin{macrocode}
    \let\if@mid@expandable\@firstoftwo
%    \end{macrocode}
%
% \paragraph{AMS classes.}
%    \begin{macrocode}
    \HyPsd@AMSclassfix
%    \end{macrocode}
%
% \paragraph{Redefinition of \cs{hspace}}
%    \cs{hspace} don't work in bookmarks, the following fix
%    tries to set a space if the argument is a positive length.
%    \begin{macrocode}
    \let\hspace\HyPsd@hspace
%    \end{macrocode}
%
% \paragraph{Commands of referencing and indexing systems.}
%    Some \LaTeX{} commands that are legal in \cs{section} commands
%    have to be disabled here.
%    \begin{macrocode}
    \let\label\@gobble
    \let\index\@gobble
    \let\glossary\@gobble
    \let\href\HyPsd@href
    \let\@mkboth\@gobbletwo
%    \end{macrocode}
%
%    The \cs{ref} and \cs{pageref} is much more complicate because of their
%    star form.
%    \begin{macrocode}
    \let\ref\HyPsd@ref
    \let\pageref\HyPsd@pageref
    \let\nameref\HyPsd@nameref
    \let\autoref\HyPsd@autoref
%    \end{macrocode}
%
% \paragraph{Miscellaneous commands.}
%    \begin{macrocode}
    \let\leavevmode\@empty
    \let\mbox\@empty
%    \end{macrocode}
%    \cs{halign} causes error messages because of the template
%    character |#|.
%    \begin{macrocode}
    \def\halign{\pdfstringdefWarn\halign\@gobble}%
%    \end{macrocode}
%    \begin{macrocode}
    \let\ignorespaces\HyPsd@ignorespaces
%    \end{macrocode}
%    \begin{macrocode}
    \let\Hy@SectionAnchorHref\@gobble
%    \end{macrocode}
%    \begin{macrocode}
    \let\ensuremath\@firstofone
%    \end{macrocode}
%
% \paragraph{Patch for cjk bookmarks.}
%    \begin{macrocode}
    \HyPsd@CJKhook
%    \end{macrocode}
%
% \paragraph{User hook.}
%    The switch \cs{Hy@pdfstring} is turned on. So user commands
%    can detect that they are processed not to be typesetted within
%    \TeX's stomach,
%    but to be expanded by the mouth to give a PDF string.
%    At this place before interpreting the string in |#2| additional
%    redefinitions can by added by the hook \cs{pdfstringdefPreHook}.
%
%    The position in the middle of the redefinitions is a compromise:
%    The user should be able to provide his own (perhaps better)
%    redefinitions, but some commands should have their original
%    meaning, because they can be used in the hook (\cs{bgroup},
%    or \cs{@protected@testopt}, and \cs{@ifnextchar}
%    for \cs{renewcommand}).
%    \begin{macrocode}
    \Hy@pdfstringtrue
    \pdfstringdefPreHook
%    \end{macrocode}
%
% \paragraph{Spaces.}
%    For checking the token of the string, spaces must be masked, because
%    they cannot by caught by undelimited arguments.
%    \begin{macrocode}
    \HyPsd@LetUnexpandableSpace\space
    \HyPsd@LetUnexpandableSpace\ %
    \HyPsd@LetUnexpandableSpace~%
    \HyPsd@LetUnexpandableSpace\nobreakspace
%    \end{macrocode}
%
% \paragraph{Package xspace.}
%    \begin{macrocode}
    \@ifundefined{@xspace}{%
      \let\xspace\HyPsd@ITALCORR
    }{%
      \let\xspace\HyPsd@XSPACE
    }%
    \let\/\HyPsd@ITALCORR
    \let\bgroup\/%
    \let\egroup\/%
%    \end{macrocode}
%
% \paragraph{Redefinitions of miscellaneous commands.}
%    Hyphenation does not make sense.
%    \begin{macrocode}
    \let\discretionary\@gobbletwo
%    \end{macrocode}
%
%  \cs{@ifstar} is defined in \LaTeX\ as follows:
%\begin{verbatim}
%\def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
%\end{verbatim}
%    \cs{@ifnextchar} doesn't work, because it uses stomach
%    commands like \cs{let} and \cs{futurelet}. But it
%    doesn't break. Whereas |\@firstoftwo{#1}}| gives an
%    error message because \cs{@firstoftwo} misses its second
%    argument.
%
%    A mimicry of \cs{@ifnextchar} only with expandible commands
%    would be very extensive and the result would be only an
%    approximation. So here a cheaper solution follows
%    in order to get rid of the error message at least:
%    \begin{macrocode}
    \def\@ifnextchar{\HyPsd@ifnextchar\@ifnextchar}%
    \def\kernel@ifnextchar{\HyPsd@ifnextchar\kernel@ifnextchar}%
    \def\new@ifnextchar{\HyPsd@ifnextchar\new@ifnextchar}%
    \let\@protected@testopt\HyPsd@protected@testopt
%    \end{macrocode}
%    Support for package `xargs':
%    \begin{macrocode}
    \let\@protected@testopt@xargs\HyPsd@protected@testopt
%    \end{macrocode}
%
% \subsubsection{Expansion}
%    There are several possibilities to
%    expand tokens within \LaTeX:
%    \begin{description}
%    \item[\cs{protected@edef}:]
%      The weakest form isn't usable, because
%      it does not expand the font encoding commands. They are
%      made robust and protect themselves.
%    \item[\cs{csname}:] First the string is
%      expanded within a \cs{csname} and \cs{endcsname}.
%      Then the command name is converted to characters
%      with catcode 12 by \cs{string} and the first
%      escape character removed by \cs{@gobble}.
%      This method has the great \emph{advantage} that
%      stomach tokens that aren't allowed in PDF strings are detected
%      by \TeX{} and reported as errors in order to force the user
%      to write correct things. So he get no wrong results by
%      forgetting the proofreading of his text.
%      But the \emph{disadvantage} is that old wrong code cannot
%      processed without errors. Mainly the error message is very cryptic
%      and for the normal user hard to understand. \TeX{} provides
%      no way to catch the error caused by \cs{csname} or allows to
%      support the user with a descriptive error message. Therefore
%      the experienced user had to enable this behaviour by an
%      option |exactdef| in previous versions less or equal 6.50.
%    \item[\cs{edef}] This version uses this standard form for expansion.
%      It is stronger than \LaTeX's \cs{protected@edef}.
%      So the font encoding mechanism works and the glyph commands
%      are converted to the correct tokens for PDF strings with the
%      definitions of the PD1 encoding.
%      Because the protecting mechanism of \LaTeX{} doesn't work
%      within an \cs{edef}, there are situations thinkable where
%      code can break. For example, assignments and definitions aren't
%      performed and so undefined command errors or argument
%      parsing errors can occur. But this is only a compatibility problem
%      with old texts. Now there are possibilities to write
%      code that gives correct PDF strings (see \cs{texorpdfstring}).
%      In the most cases unexpandable commands and tokens
%      (math shift, grouping characters) remains. They
%      don't cause an error like with \cs{csname}. However a PDF reader
%      isn't \TeX{}, so these tokens are viewed verbatim. So
%      this version detects them now, and removes them with an
%      descriptive warning for the user. As additional features
%      xspace support is possible and grouping characters can be
%      used without problems, because they are removed silently.
%    \end{description}
%
% \paragraph{Generic messages.}
%    While expanding via \cs{xdef} the |\Generic...| messages
%    don't work and causes problems (error messages, invalid |.out|
%    file). So they are disabled while expanding and removed silently,
%    because a user warning would be too expensive (memory and runtime,
%    |\pdfstringdef| is slow enough).
%    \begin{macrocode}
    \begingroup
      \let\GenericError\@gobblefour
      \let\GenericWarning\@gobbletwo
      \let\GenericInfo\@gobbletwo
%    \end{macrocode}
%
% \paragraph{Package french.}
%    This fix only works, if \cs{GenericError} is disabled.
%    \begin{macrocode}
      \ifx\nofrenchguillemets\@undefined
      \else
        \nofrenchguillemets
      \fi
%    \end{macrocode}
%
% \paragraph{Definition commands and expansion.}
%    Redefining the defining commands (see sec. \ref{defcmd}).
%    The original meaning of \cs{xdef} is saved in \cs{Hy@temp}.
%    \begin{macrocode}
      \let\Hy@temp\xdef
      \let\def\HyPsd@DefCommand
      \let\gdef\HyPsd@DefCommand
      \let\edef\HyPsd@DefCommand
      \let\xdef\HyPsd@DefCommand
      \let\futurelet\HyPsd@LetCommand
      \let\let\HyPsd@LetCommand
      \Hy@temp#1{#2}%
    \endgroup
%    \end{macrocode}
%
% \subsubsection{Postprocessing}
%    If the string is empty time can be saved by omitting the
%    postprocessing process.
%    \begin{macrocode}
    \ifx#1\@empty
    \else
%    \end{macrocode}
%
% \paragraph{Protecting spaces and removing grouping characters.}
%    In order to check the tokens we must separate them. This will be
%    done with \TeX's argument parsing. With this method
%    we must the following item takes into account, that makes
%    makes things a little more complicated:
%    \begin{itemize}
%    \item \TeX{} does not accept a space as an undelimited argument,
%    it cancels space tokens while looking for an undelimited
%    argument. Therefore we must protect the spaces now.
%    \item An argument can be a single token or a group of many tokens.
%    And within curly braces tokens aren't find by \TeX's
%    argument scanning process. Third curly braces as grouping characters
%    cannot be expanded further, so they don't vanish by the string
%    expansion above. So these characters with catcode 1 and 2 are
%    removed in the following and replaced by an marker for the xspace
%    support.
%    \item \TeX{} silently removes the outmost pair of braces of an
%      argument. To prevent this on unwanted places, in the following
%    the character \verb+|+ is appended to the string to make an outer
%    brace to an inner one.
%    \end{itemize}
%    First the top level spaces are protected by replacing. Then the
%    string is scanned to detect token groups. Each token group
%    will now be space protected and again scanned for another
%    token groups.
%    \begin{macrocode}
      \HyPsd@ProtectSpaces#1%
      \let\HyPsd@String\@empty
      \expandafter\HyPsd@RemoveBraces\expandafter{#1|}%
      \global\let#1\HyPsd@String
%    \end{macrocode}
%
% \paragraph{Check tokens.}
%    After removing the spaces and the grouping characters
%    the string now should only consists of the following tokens/catcodes:\\
%    \begin{tabular}{rl}
%      0&command names with start with an escape character.\\
%      3&math shift\\
%      4&alignment tabs\\
%      6&parameter, but this is unlikely.\\
%      7&superscript\\
%      8&subscript\\
%     11&letter\\
%     12&other\\
%     13&commands that are active characters.
%    \end{tabular}
%
%    After \cs{HyPsd@CheckCatcodes} the command \cs{HyPsd@RemoveMask} is
%    reused to remove the group protection character \verb+|+.
%    This character is needed to ensure that the string at least
%    consists of one token if \cs{HyPsd@CheckCatcodes}
%    is called.
%
%    Because of internal local assignments and tabulars
%    group braces are used.
%    \begin{macrocode}
      \let\HyPsd@SPACEOPTI\relax
      {%
         \let\HyPsd@String\@empty
         \expandafter\HyPsd@CheckCatcodes#1\HyPsd@End
         \global\let#1\HyPsd@String
      }%
      \expandafter\HyPsd@RemoveMask\expandafter
        |\expandafter\@empty#1\HyPsd@End#1%
%    \end{macrocode}
%    \cs{HyPsd@CheckCatcodes} should no have removed the tokens with
%    catcode 3, 4, 7, and 8. Because a parameter token (6) would
%    cause to many errors before, there should now be only tokens
%    with catcodes 11 or 12. So I think there is no need for
%    a safety step like:
%\begin{verbatim}
%\xdef#1{\expandafter\strip@prefix\meaning#1}%
%\end{verbatim}
% \paragraph{Looking for wrong glyphs.}
%    The case that glyphs aren't defined in the PD1 encoding
%    is caught above in such a way, that the glyph name and
%    a marker is inserted into the string. Now we can safely
%    scan the string for this marker and provide a descriptive
%    warning.
%    \begin{macrocode}
      \expandafter
      \HyPsd@Subst\expandafter{\HyPsd@GLYPHERR}{\relax}#1%
      \let\HyPsd@String\@empty
      \expandafter\HyPsd@GlyphProcess#1\relax\@empty
      \global\let#1\HyPsd@String
%    \end{macrocode}
%
% \paragraph{Backslash.}
%    The double backslash disturbs parsing octal sequences, for
%    example in an string like |abc\\051| the sequence \cs{051}
%    is detected although the second \cs{} belongs to the
%    first backslash.
%    \begin{macrocode}
      \HyPsd@StringSubst{\\}{\textbackslash}#1%
%    \end{macrocode}
%
% \paragraph{Spaces.}
%    All spaces have already the form \cs{040}.
%    The last postprocessing step will
%    be an optimizing of the spaces, so we already introduce
%    already the necessary command \cs{HyPsd@SPACEOPTI}.
%    But first it is defined to be \cs{relax} in order to
%    prevent a too early expansion by an \cs{edef}.
%    Secondly a \cs{relax} serves as a marker for
%    a token that is detected by \cs{xspace}.
%
%    The code of |frenchb.ldf| can produce an additional
%    space before \cs{guillemetright}, because \cs{lastskip}
%    and \cs{unskip} do not work. Therefore it is removed here.
%    \begin{macrocode}
      \ifHy@unicode
        \expandafter\HyPsd@StringSubst\csname 80\040\endcsname
          \HyPsd@SPACEOPTI#1%
        \edef\Hy@temp@A{\HyPsd@SPACEOPTI\HyPsd@SPACEOPTI\80\273}%
        \expandafter\HyPsd@Subst\expandafter{\Hy@temp@A}%
          {\HyPsd@SPACEOPTI\80\273}#1%
      \else
        \HyPsd@StringSubst{\040}\HyPsd@SPACEOPTI#1%
        \expandafter\HyPsd@Subst\expandafter{%
          \expandafter\HyPsd@SPACEOPTI\expandafter\HyPsd@SPACEOPTI
          \string\273}{\HyPsd@SPACEOPTI\273}#1%
      \fi
%    \end{macrocode}
%
% \paragraph{Right parenthesis.}
%    Also \cs{xspace} detects a right parenthesis.
%    For the \cs{xspace} support and the following
%    parenthesis check the different parenthesis
%    notations |)|, \cs{)}, and \cs{051} are converted
%    to one type \cs{)} and before \cs{HyPsd@empty}
%    with the meaning of \cs{relax} is introduced for
%    \cs{xspace}. By redefining to \cs{@empty} \cs{HyPsd@empty}
%    can easily removed later.
%    \begin{macrocode}
      \ifHy@unicode
        \HyPsd@StringSubst{\)}{\80\051}#1%
        \HyPsd@Subst){\80\051}#1%
        \let\HyPsd@empty\relax
        \expandafter\HyPsd@StringSubst\csname 80\051\endcsname
          {\HyPsd@empty\80\051}#1%
      \else
        \HyPsd@StringSubst{\)}{\051}#1%
        \HyPsd@Subst){\051}#1%
        \let\HyPsd@empty\relax
        \HyPsd@StringSubst{\051}{\HyPsd@empty\string\)}#1%
      \fi
%    \end{macrocode}
%
% \paragraph{Support for package \texttt{xspace}.}
%    \cs{xspace} looks for the next token and decides if it
%    expands to a space or not. Following tokens prevent its
%    transformation to a space: Beginning and end of group,
%    handled above by replacing by an italic correction,
%    several punctuation marks, a closing parentheses, and
%    several spaces.
%
%    Without package |xspace| there are tokens with catcode 11 and 12,
%    \cs{HyPsd@empty} and \cs{HyPsd@SPACEOPTI}. With package |xspace|
%    marker for the italic correction \cs{/} and \cs{xspace} come with.
%    In the package |xspace| case the two markers are replaced by
%    commands and an \cs{edef} performs the \cs{xspace} processing.
%
%    In the opposite of the original \cs{xspace} \cs{HyPsd@xspace} uses
%    an argument instead of a \cs{futurelet}, so we have to provide
%    such an argument, if \cs{HyPsd@xspace} comes last. Because
%    \cs{HyPsd@Subst} with several equal tokens (|--|) needs a safe
%    last token, in both cases
%    the string gets an additional \cs{HyPsd@empty}.
%    \begin{macrocode}
      \expandafter\HyPsd@Subst\expandafter{\/}\HyPsd@empty#1%
      \@ifundefined{@xspace}{%
      }{%
        \let\HyPsd@xspace\relax
        \expandafter\HyPsd@Subst\expandafter
          {\HyPsd@XSPACE}\HyPsd@xspace#1%
        \let\HyPsd@xspace\HyPsd@doxspace
      }%
      \xdef#1{#1\HyPsd@empty}%
%    \end{macrocode}
%
% \paragraph{Ligatures.}
%    \TeX{} forms ligatures in its stomach, but the PDF strings are
%    treated only by \TeX's mouth. The PDFDocEncoding contains
%    some ligatures, but the current
%    version 3 of the AcrobatReader lacks the |fi| and |fl| glyphs, and
%    the Linux version lacks the |emdash| and |endash| glyphs.
%    So the necessary code is provided here, but currently disabled,
%    hoping that version 4 of the AcrobatReader is better.
%    To break the ligatures the user can use an empty group,
%    because it leads to an insertion of an \cs{HyPsd@empty}.
%    If this ligature code will be enabled some day, then the italic
%    correction should also break the ligatures. Currently this occurs
%    only, if package |xspace| is loaded.
%
%    Since newer AcrobatReader versions now show the en- and emdash in
%    a correct way (AR7/Linux, AR8/Linux), the substitution code
%    for them is enabled starting with version 6.78l.
%    \begin{macrocode}
      \HyPsd@Subst{---}\textemdash#1%
      \HyPsd@Subst{--}\textendash#1%
%      \HyPsd@Subst{fi}\textfi#1%
%      \HyPsd@Subst{fl}\textfl#1%
      \HyPsd@Subst{!`}\textexclamdown#1%
      \HyPsd@Subst{?`}\textquestiondown#1%
%    \end{macrocode}
%     With the next \cs{edef} we get rid of the token \cs{HyPsd@empty}.
%    \begin{macrocode}
      \let\HyPsd@empty\@empty
%    \end{macrocode}
%
% \paragraph{Left parentheses.}
%    Left parentheses are now converted to safe forms to avoid
%    problems with unmatched ones (\cs{(} with PDFDocEncoding,
%    the octal sequence with Unicode.
%
%    An optimization is possible. Matched parentheses can replaced
%    by a |()| pair. But this code is removed to save \TeX{} memory
%    and time.
%    \begin{macrocode}
      \ifHy@unicode
        \HyPsd@StringSubst\(\textparenleft#1%
        \HyPsd@Subst(\textparenleft#1%
      \else
        \HyPsd@StringSubst\({\050}#1%
        \HyPsd@Subst({\050}#1%
        \HyPsd@StringSubst{\050}{\string\(}#1%
      \fi
%    \end{macrocode}
%
% \paragraph{Optimizing spaces.}
%    Spaces are often used, but they have a very long form \cs{040}.
%    They are converted back to real spaces, but not all, so that
%    no space follows after another. In the bookmark case several
%    spaces are written to the |.out| file, but if the entries
%    are read back, several spaces are merged to a single one.
%
%    With Unicode the spaces are replaced by their octal sequences.
%    \begin{macrocode}
      \ifHy@unicode
        \edef\HyPsd@SPACEOPTI{\80\040}%
      \else
        \let\HyPsd@SPACEOPTI\HyPsd@spaceopti
      \fi
      \xdef#1{#1\@empty}%
    \fi
%    \end{macrocode}
%
% \paragraph{Converting to Unicode.}
%    At last the eight bit letters have to be converted to Unicode,
%    the masks \cs{8} and \cs{9} are removed and the Unicode
%    marker is added.
%    \begin{macrocode}
  \endgroup
  \begingroup
    \ifHy@unicode
      \HyPsd@ConvertToUnicode#1%
%    \end{macrocode}
%
% \paragraph{Try conversion back to PDFDocEncoding.}
%
%    \begin{macrocode}
      \ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
         \EdefUnescapeString\HyPsd@temp#1%
         \iftutex
           \let\HyPsd@UnescapedString\HyPsd@temp
           \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
                                     {utf16be}{ascii-print}{%
             \EdefEscapeString\HyPsd@temp\HyPsd@temp
             \global\let#1\HyPsd@temp
             \HyPsd@EscapeTeX#1%
             \Hy@unicodefalse
           }{%
             \HyPsd@EscapeTeX#1%
           }%
         \else
           \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
                                     {utf16be}{pdfdoc}{%
             \EdefEscapeString\HyPsd@temp\HyPsd@temp
             \global\let#1\HyPsd@temp
             \HyPsd@EscapeTeX#1%
             \Hy@unicodefalse
           }{}%
         \fi
      \fi
    \fi
%    \end{macrocode}
%
% \paragraph{User hook.}
%    The hook \cs{pdfstringdefPostHook} can be used
%    for the purpose to postprocess the string further.
%    \begin{macrocode}
    \pdfstringdefPostHook#1%
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Hy@pdfstringdef}
%    \begin{macrocode}
\def\Hy@pdfstringdef#1#2{%
  \pdfstringdef\Hy@gtemp{#2}%
  \let#1\Hy@gtemp
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Encodings}
%
% \subsubsection{Xe\TeX}
% change 2020-05-13: the special code for XeTeX big chars has been removed as no
% longer needed.
%
% \subsubsection{Workaround for package linguex}
%
%    \begin{macrocode}
\@ifpackageloaded{linguex}{%
  \let\HyLinguex@OrgB\b
  \let\HyLinguex@OrgC\c
  \let\HyLinguex@OrgD\d
  \def\HyLinguex@Restore{%
    \let\b\HyLinguex@OrgB
    \let\c\HyLinguex@OrgC
    \let\d\HyLinguex@OrgD
  }%
  \Hy@AtEndOfPackage{%
    \pdfstringdefDisableCommands{%
      \@ifundefined{oldb}{}{\let\b\oldb}%
      \@ifundefined{oldc}{}{\let\c\oldc}%
      \@ifundefined{oldd}{}{\let\d\oldd}%
    }%
  }%
}{%
  \let\HyLinguex@Restore\relax
}%
%    \end{macrocode}
%
% \subsubsection{Catcodes saving and restoring for \texttt{.def} files}
%
%    \begin{macro}{\Hy@SaveCatcodeSettings}
%    \begin{macrocode}
\def\Hy@SaveCatcodeSettings#1{%
  \expandafter\edef\csname Hy@cat@#1\endcsname{%
    \endlinechar=\the\endlinechar\relax
    \catcode32 \the\catcode32\relax % (space)
    \catcode34 \the\catcode34\relax % "
    \catcode35 \the\catcode35\relax % #
    \catcode37 \the\catcode37\relax % (percent)
    \catcode40 \the\catcode40\relax % (
    \catcode41 \the\catcode41\relax % )
    \catcode42 \the\catcode42\relax % *
    \catcode46 \the\catcode46\relax % .
    \catcode58 \the\catcode58\relax % :
    \catcode60 \the\catcode60\relax % <
    \catcode61 \the\catcode61\relax % =
    \catcode62 \the\catcode62\relax % >
    \catcode64 \the\catcode64\relax % @
    \catcode91 \the\catcode91\relax % [
    \catcode92 \the\catcode92\relax % (backslash)
    \catcode93 \the\catcode93\relax % ]
    \catcode123 \the\catcode123\relax % {
    \catcode124 \the\catcode124\relax % |
    \catcode125 \the\catcode125\relax % }
  }%
  \endlinechar=-1 %
  \catcode32 10 % (space)
  \catcode34 12 % "
  \catcode35 6 % #
  \catcode37 14 % (percent)
  \catcode40 12 % (
  \catcode41 12 % )
  \catcode42 12 % *
  \catcode46 12 % .
  \catcode58 12 % :
  \catcode60 12 % <
  \catcode61 12 % =
  \catcode62 12 % >
  \catcode91 12 % [
  \catcode92 0 % (backslash)
  \catcode93 12 % ]
  \catcode123 1 % {
  \catcode124 12 % |
  \catcode125 2 % }
  \makeatletter
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@RestoreCatcodeSettings}
%    \begin{macrocode}
\def\Hy@RestoreCatcodeSettings#1{%
  \csname Hy@cat@#1\endcsname
  \expandafter\let\csname Hy@cat@#1\endcsname\relax
}
%    \end{macrocode}
%    \end{macro}
%
%
% \subsubsection{PD1 encoding}
%    The PD1 encoding implements the PDFDocEncoding for use with
%    \LaTeXe's NFSS. Because the informational strings are not set by
%    \TeX's typesetting mechanism but for interpreting by the PDF reader,
%    the glyphs of the PD1 encoding are implemented to be safely written
%    to a file (PDF output file, |.out| file).
%
%    The  PD1 encoding can be specified as an option of the 'fontenc'  package
%    or loaded here. It does not matter what font family is selected,
%    as \TeX{} does not process it anyway. So use CM.
%    \begin{macrocode}
\@ifundefined{T@PD1}{%
  \Hy@SaveCatcodeSettings{pd1}%
  \input{pd1enc.def}%
  \Hy@RestoreCatcodeSettings{pd1}%
  \HyLinguex@Restore
}{}
\DeclareFontFamily{PD1}{pdf}{}
\DeclareFontShape{PD1}{pdf}{m}{n}{ <-> cmr10 }{}
\DeclareFontSubstitution{PD1}{pdf}{m}{n}
%    \end{macrocode}
%
% \subsubsection{PU encoding}
%    The PU encoding implements the Unicode encoding for use with
%    \LaTeX's NFSS. Because of large memory requirements the
%    encoding file for Unicode support is only loaded, if option
%    |unicode| is specified as package option.
%    change 2020-08-14: Starting with version
%     v7.00f the file is always loaded and unicode is the
%     default option.
%    \begin{macro}{\HyPsd@LoadUnicode}
%    Because the file |puenc.def| takes a lot of memory, the loading
%    is defined in the macro \cs{HyPsd@LoadUnicode} called by
%    the package option |unicode|.
%    \begin{macrocode}
\def\HyPsd@LoadUnicode{%
  \@ifundefined{T@PU}{%
    \Hy@SaveCatcodeSettings{pu}%
    \input{puenc.def}%
    \Hy@RestoreCatcodeSettings{pu}%
    \HyLinguex@Restore
  }{}%
  \DeclareFontFamily{PU}{pdf}{}%
  \DeclareFontShape{PU}{pdf}{m}{n}{ <-> cmr10 }{}%
  \DeclareFontSubstitution{PU}{pdf}{m}{n}%
  \HyPsd@LoadExtra
  \let\HyPsd@LoadUnicode\relax
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@LoadExtra}
%    \begin{macrocode}
\def\Hy@iffileloaded#1{%
  \@ifundefined{ver@#1}\@secondoftwo\@firstoftwo
}
\def\HyPsd@LoadExtra{%
  \ifHy@psdextra
    \Hy@iffileloaded{puenc.def}{%
      \Hy@SaveCatcodeSettings{psdextra}%
      \input{psdextra.def}%
      \Hy@RestoreCatcodeSettings{psdextra}%
      \let\HyPsd@LoadExtra\relax
    }{}%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Additional user commands}
%
% \subsubsection{^^A
%   \texorpdfstring{\cs{texorpdfstring}}{\\texorpdfstring}^^A
% }
%    \begin{macro}{\texorpdfstring}
%    While expanding the string in \cs{pdfstringdef} the switch
%    \cs{ifHy@pdfstring} is set. This is used by the
%    full expandible macro \cs{texorpdfstring}. It expects
%    two arguments, the first contains the string that will be
%    set and processed by \TeX's stomach, the second
%    contains the replacement for PDF strings.
%    \begin{macrocode}
\def\texorpdfstring{%
   \ifHy@pdfstring
     \expandafter\@secondoftwo
   \else
     \expandafter\@firstoftwo
   \fi
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Hooks for
%    \texorpdfstring{\cs{pdfstringdef}}{\\pdfstringdef}^^A
% }
%    \begin{macro}{\pdfstringdefPreHook}
%    \begin{macro}{\pdfstringdefPostHook}
%    Default definition of the hooks for \cs{pdfstringdef}.
%    The construct \cs{@ifundefined} with \cs{let} is a little bit
%    faster than \cs{providecommand}.
%    \begin{macrocode}
\@ifundefined{pdfstringdefPreHook}{%
  \let\pdfstringdefPreHook\@empty
}{}
\@ifundefined{pdfstringdefPostHook}{%
  \let\pdfstringdefPostHook\@gobble
}{}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
%    \begin{macro}{\pdfstringdefDisableCommands}
%    In \cmd{\pdfstringdefPreHook} the user can add
%    code that is executed before the string, that have
%    to be converted by \cmd{\pdfstringdef}, is expanded.
%    So replacements for problematic macros can be given.
%    The code in \cmd{\pdfstringdefPreHook} should not
%    be replaced perhaps by an \cmd{\renewcommand},
%    because a previous meaning gets lost.
%
%    Macro \cmd{\pdfstringdefDisableCommands} avoids this,
%    because it reuses the old meaning of the hook and appends
%    the new code to \cmd{\pdfstringdefPreHook}, e.g.:
%\begin{verbatim}
%\pdfstringdefDisableCommands{%
%  \let~\textasciitilde
%  \def\url{\pdfstringdefWarn\url}%
%  \let\textcolor\@gobble
%}%
%\end{verbatim}
%    In the argument of \cmd{\pdfstringdefDisableCommands} the
%    character |@| can be used in command names. So it is easy
%    to use useful \LaTeX{} commands like \cmd{\@gobble} or
%    \cmd{\@firstofone}.
%    \begin{macrocode}
\def\pdfstringdefDisableCommands{%
  \begingroup
    \makeatletter
    \HyPsd@DisableCommands
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@DisableCommands}
%    \begin{macrocode}
\long\def\HyPsd@DisableCommands#1{%
    \Hy@GlobalAppendToMacro\pdfstringdefPreHook{#1}%
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\pdfstringdefWarn}
%    The purpose of \cmd{\pdfstringdefWarn} is to produce
%    a warning message, so the user can see, that something
%    can go wrong with the conversion to PDF strings.
%
%    The prefix |\<>-| is added to the token. \cmd{\noexpand}
%    protects the probably undefined one during the first
%    expansion step. Then \cmd{\HyPsd@CheckCatcodes} can
%    detect the not allowed token, \cmd{\HyPsd@CatcodeWarning}
%    prints a warning message, after \cmd{\HyPsd@RemovePrefix}
%    has removed the prefix.
%
%    \cmd{\pdfstringdefWarn} is intended for document authors or
%    package writers, examples for use can be seen in the definition
%    of \cmd{\HyPsd@ifnextchar} or \cmd{\HyPsd@protected@testopt}.
%    \begin{macrocode}
\def\pdfstringdefWarn#1{%
   \expandafter\noexpand\csname<>-\string#1\endcsname
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Help macros for expansion}
%
% \subsubsection{\cs{ignorespaces}}
%
%    \begin{macro}{\HyPsd@ignorespaces}
%    With the help of a trick using \cs{romannumeral} the
%    effect of \cs{ignorespaces} can be simulated a little,
%    In a special case using an alphabetic constant
%    \cs{romannumeral} eats an optional space. If the constant
%    is zero, then the \cs{romannumeral} expression vanishes.
%    The following macro uses this trick twice, thus \cs{HyPsd@ignorespaces}
%    eats up to two following spaces.^^A
%    \begin{macrocode}
\begingroup
  \catcode0=12 %
  \def\x{\endgroup
    \def\HyPsd@ignorespaces{%
      \romannumeral\expandafter`\expandafter^^@%
      \romannumeral`^^@%
    }%
  }%
\x
%    \end{macrocode}
%    \end{macro}
% \subsubsection{Babel languages}
% change 2020-10-10: moved language patches to its own file as a first step
% toward removing them completely.
%    \begin{macrocode}
\newif\ifHy@next
%</package>
%    \end{macrocode}
%
% Since version 2008/03/16 v3.8j babel used inside \cs{AtBeginDocument}:
%\begin{quote}
%\begin{verbatim}
%\pdfstringdefDisableCommands{%
%  \languageshorthands{system}%
%}
%\end{verbatim}
%\end{quote}
%    As consequence the shorthands were shown in the bookmarks, and required
%    a hyperref patch. In version 3.48 babel removed this unneeded code
%    and so the patch could be removed.
%
%    Nothing to do for english.
%    change 2020/07/16: removed patch for french. No longer needed.
%    change 2020/07/21: removed patches for german, ngerman. Will be done by
%    the language package. https://github.com/jspitz/babel-german/issues/4
%    change 2020/10/10: removed patches for danish, dutch, finnish, portugues,
%    swedish, usorbian, slovene see https://github.com/latex3/babel/issues/84
%    change 2020/10/10: removed patch for macedonian, ukrainian; maintainers notified.
%    change 2020/10/11: removed patch for russian, has been merged into babel-russian
%    see https://github.com/kia999/babel-russian/pull/3
%    change 2021/02/04: removed patches for greek numerals, code is now in babel-greek.
%    spanish: Nested quoting environments are not supported (|<<|, |>>|).
%    change 2021/07/19: removed patches for spanish, code is now in babel-spanish.
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
% \subsubsection{CJK patch}
%
%    \begin{macrocode}
\RequirePackage{intcalc}[2007/09/27]
%    \end{macrocode}
%
%    \begin{macro}{\HyPsd@CJKhook}
%    \begin{macrocode}
\def\HyPsd@CJKhook{%
  \@ifpackageloaded{CJK}{%
    \let\CJK@kern\relax
    \let\CJKkern\relax
    \let\CJK@CJK\relax
    \ifHy@CJKbookmarks
      \HyPsd@CJKhook@bookmarks
    \fi
    \HyPsd@CJKhook@unicode
  }{}%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{CJK bookmarks}
%
%    \begin{macro}{\HyPsd@CJKhook}
%    Some internal commands of package cjk are redefined
%    to avoid error messages. For a rudimental support
%    of CJK bookmarks the active characters are
%    redefined so that they print themselves.
%
%    After preprocessing of Big5 encoded data the
%    following string for a double-byte character
%    is emitted:
%\begin{verbatim}
%^^7f<arg1>^^7f<arg2>^^7f
%\end{verbatim}
%    \verb|<arg1>| is the first byte in the range (always $>$ 0x80);
%    \verb|<arg2>| is the second byte in decimal notation
%    ($\ge$ 0x40).
%    \begin{macrocode}
\begingroup
  \catcode"7F=\active
  \toks@{%
    \let\CJK@ignorespaces\empty
    \def\CJK@char#1{\@gobbletwo}%
    \let\CJK@charx\@gobblefour
    \let\CJK@punctchar\@gobblefour
    \def\CJK@punctcharx#1{\@gobblefour}%
    \catcode"7F=\active
    \def^^7f#1^^7f#2^^7f{%
      \string #1\HyPsd@DecimalToOctal{#2}%
    }%
    % ... ?
    \ifHy@unicode
      \def\Hy@cjkpu{\80}%
    \else
      \let\Hy@cjkpu\@empty
    \fi
    \HyPsd@CJKActiveChars
  }%
  \count@=127 %
  \@whilenum\count@<255 \do{%
    \advance\count@ by 1 %
    \lccode`\~=\count@
    \lowercase{%
      \toks@\expandafter{\the\toks@ ~}%
    }%
  }%
  \toks@\expandafter{\the\toks@ !}%
  \xdef\HyPsd@CJKhook@bookmarks{%
    \the\toks@
  }%
\endgroup
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@CJKActiveChars}
%    The macro \cmd{\HyPsd@CJKActiveChars} is only defined
%    to limit the memory consumption of \cmd{\HyPsd@CJKhook}.
%    \begin{macrocode}
\def\HyPsd@CJKActiveChars#1{%
  \ifx#1!%
    \let\HyPsd@CJKActiveChars\relax
  \else
    \edef#1{\noexpand\Hy@cjkpu\string#1}%
  \fi
  \HyPsd@CJKActiveChars
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@DecimalToOctal}
%    A character, given by the decimal number is converted
%    to a PDF character.
%    \begin{macrocode}
\def\HyPsd@DecimalToOctal#1{%
  \ifcase #1 %
        \000\or \001\or \002\or \003\or \004\or \005\or \006\or \007%
    \or \010\or \011\or \012\or \013\or \014\or \015\or \016\or \017%
    \or \020\or \021\or \022\or \023\or \024\or \025\or \026\or \027%
    \or \030\or \031\or \032\or \033\or \034\or \035\or \036\or \037%
    \or \040\or \041\or \042\or \043\or \044\or \045\or \046\or \047%
    \or \050\or \051\or \052\or \053\or \054\or \055\or \056\or \057%
    \or    0\or    1\or    2\or    3\or    4\or    5\or    6\or    7%
    \or    8\or    9\or \072\or \073\or \074\or \075\or \076\or \077%
    \or    @\or    A\or    B\or    C\or    D\or    E\or    F\or    G%
    \or    H\or    I\or    J\or    K\or    L\or    M\or    N\or    O%
    \or    P\or    Q\or    R\or    S\or    T\or    U\or    V\or    W%
    \or    X\or    Y\or    Z\or \133\or \134\or \135\or \136\or \137%
    \or \140\or    a\or    b\or    c\or    d\or    e\or    f\or    g%
    \or    h\or    i\or    j\or    k\or    l\or    m\or    n\or    o%
    \or    p\or    q\or    r\or    s\or    t\or    u\or    v\or    w%
    \or    x\or    y\or    z\or \173\or \174\or \175\or \176\or \177%
    \or \200\or \201\or \202\or \203\or \204\or \205\or \206\or \207%
    \or \210\or \211\or \212\or \213\or \214\or \215\or \216\or \217%
    \or \220\or \221\or \222\or \223\or \224\or \225\or \226\or \227%
    \or \230\or \231\or \232\or \233\or \234\or \235\or \236\or \237%
    \or \240\or \241\or \242\or \243\or \244\or \245\or \246\or \247%
    \or \250\or \251\or \252\or \253\or \254\or \255\or \256\or \257%
    \or \260\or \261\or \262\or \263\or \264\or \265\or \266\or \267%
    \or \270\or \271\or \272\or \273\or \274\or \275\or \276\or \277%
    \or \300\or \301\or \302\or \303\or \304\or \305\or \306\or \307%
    \or \310\or \311\or \312\or \313\or \314\or \315\or \316\or \317%
    \or \320\or \321\or \322\or \323\or \324\or \325\or \326\or \327%
    \or \330\or \331\or \332\or \333\or \334\or \335\or \336\or \337%
    \or \340\or \341\or \342\or \343\or \344\or \345\or \346\or \347%
    \or \350\or \351\or \352\or \353\or \354\or \355\or \356\or \357%
    \or \360\or \361\or \362\or \363\or \364\or \365\or \366\or \367%
    \or \370\or \371\or \372\or \373\or \374\or \375\or \376\or \377%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{CJK unicode}
%
%    \begin{macro}{\HyPsd@CJKhook@unicode}
%    \begin{macrocode}
\def\HyPsd@CJKhook@unicode{%
  \let\Unicode\HyPsd@CJK@Unicode
  \let\CJKnumber\HyPsd@CJKnumber
  \let\CJKdigits\HyPsd@CJKdigits
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@CJK@Unicode}
%    \begin{macrocode}
\def\HyPsd@CJK@Unicode#1#2{%
  \ifnum#1<256 %
    \HyPsd@DecimalToOctalFirst{#1}%
    \HyPsd@DecimalToOctalSecond{#2}%
  \else
    \933%
    \expandafter\expandafter\expandafter\HyPsd@HighA
    \intcalcDiv{#1}{4}!%
    \933%
    \ifcase\intcalcMod{#1}{4} %
      4\or 5\or 6\or 7%
    \fi
    \HyPsd@DecimalToOctalSecond{#2}%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\def\HyPsd@HighA#1!{%
  \expandafter\expandafter\expandafter\HyPsd@HighB
  \IntCalcDiv#1!64!!%
  \expandafter\expandafter\expandafter\HyPsd@HighD
  \IntCalcMod#1!64!!%
}
\def\HyPsd@HighB#1!{%
  \expandafter\expandafter\expandafter\HyPsd@HighC
  \IntCalcDec#1!!%
}
\def\HyPsd@HighC#1!{%
  \IntCalcDiv#1!4!%
  \@backslashchar
  \IntCalcMod#1!4!%
}
\def\HyPsd@HighD#1!{%
  \ifcase\IntCalcDiv#1!8! %
    0\or 1\or 2\or 3\or 4\or 5\or 6\or 7%
  \fi
  \ifcase\IntCalcMod#1!8! %
    0\or 1\or 2\or 3\or 4\or 5\or 6\or 7%
  \fi
}
\def\HyPsd@DecimalToOctalFirst#1{%
  \9%
  \ifcase#1 %
        000\or 001\or 002\or 003\or 004\or 005\or 006\or 007%
    \or 010\or 011\or 012\or 013\or 014\or 015\or 016\or 017%
    \or 020\or 021\or 022\or 023\or 024\or 025\or 026\or 027%
    \or 030\or 031\or 032\or 033\or 034\or 035\or 036\or 037%
    \or 040\or 041\or 042\or 043\or 044\or 045\or 046\or 047%
    \or 050\or 051\or 052\or 053\or 054\or 055\or 056\or 057%
    \or 060\or 061\or 062\or 063\or 064\or 065\or 066\or 067%
    \or 070\or 071\or 072\or 073\or 074\or 075\or 076\or 077%
    \or 100\or 101\or 102\or 103\or 104\or 105\or 106\or 107%
    \or 120\or 111\or 112\or 113\or 114\or 115\or 116\or 117%
    \or 120\or 121\or 122\or 123\or 124\or 125\or 126\or 127%
    \or 130\or 131\or 132\or 133\or 134\or 135\or 136\or 137%
    \or 140\or 141\or 142\or 143\or 144\or 145\or 146\or 147%
    \or 150\or 151\or 152\or 153\or 154\or 155\or 156\or 157%
    \or 160\or 161\or 162\or 163\or 164\or 165\or 166\or 167%
    \or 170\or 171\or 172\or 173\or 174\or 175\or 176\or 177%
    \or 200\or 201\or 202\or 203\or 204\or 205\or 206\or 207%
    \or 210\or 211\or 212\or 213\or 214\or 215\or 216\or 217%
    \or 220\or 221\or 222\or 223\or 224\or 225\or 226\or 227%
    \or 230\or 231\or 232\or 233\or 234\or 235\or 236\or 237%
    \or 240\or 241\or 242\or 243\or 244\or 245\or 246\or 247%
    \or 250\or 251\or 252\or 253\or 254\or 255\or 256\or 257%
    \or 260\or 261\or 262\or 263\or 264\or 265\or 266\or 267%
    \or 270\or 271\or 272\or 273\or 274\or 275\or 276\or 277%
    \or 300\or 301\or 302\or 303\or 304\or 305\or 306\or 307%
    \or 310\or 311\or 312\or 313\or 314\or 315\or 316\or 317%
    \or 320\or 321\or 322\or 323\or 324\or 325\or 326\or 327%
    \or 330\or 331\or 332\or 333\or 334\or 335\or 336\or 337%
    \or 340\or 341\or 342\or 343\or 344\or 345\or 346\or 347%
    \or 350\or 351\or 352\or 353\or 354\or 355\or 356\or 357%
    \or 360\or 361\or 362\or 363\or 364\or 365\or 366\or 367%
    \or 370\or 371\or 372\or 373\or 374\or 375\or 376\or 377%
  \fi
}
\def\HyPsd@DecimalToOctalSecond#1{%
  \ifcase #1 %
        \000\or \001\or \002\or \003\or \004\or \005\or \006\or \007%
    \or \010\or \011\or \012\or \013\or \014\or \015\or \016\or \017%
    \or \020\or \021\or \022\or \023\or \024\or \025\or \026\or \027%
    \or \030\or \031\or \032\or \033\or \034\or \035\or \036\or \037%
    \or \040\or \041\or \042\or \043\or \044\or \045\or \046\or \047%
    \or \050\or \051\or \052\or \053\or \054\or \055\or \056\or \057%
    \or \060\or \061\or \062\or \063\or \064\or \065\or \066\or \067%
    \or \070\or \071\or \072\or \073\or \074\or \075\or \076\or \077%
    \or \100\or \101\or \102\or \103\or \104\or \105\or \106\or \107%
    \or \110\or \111\or \112\or \113\or \114\or \115\or \116\or \117%
    \or \120\or \121\or \122\or \123\or \124\or \125\or \126\or \127%
    \or \130\or \131\or \132\or \133\or \134\or \135\or \136\or \137%
    \or \140\or \141\or \142\or \143\or \144\or \145\or \146\or \147%
    \or \150\or \151\or \152\or \153\or \154\or \155\or \156\or \157%
    \or \160\or \161\or \162\or \163\or \164\or \165\or \166\or \167%
    \or \170\or \171\or \172\or \173\or \174\or \175\or \176\or \177%
    \or \200\or \201\or \202\or \203\or \204\or \205\or \206\or \207%
    \or \210\or \211\or \212\or \213\or \214\or \215\or \216\or \217%
    \or \220\or \221\or \222\or \223\or \224\or \225\or \226\or \227%
    \or \230\or \231\or \232\or \233\or \234\or \235\or \236\or \237%
    \or \240\or \241\or \242\or \243\or \244\or \245\or \246\or \247%
    \or \250\or \251\or \252\or \253\or \254\or \255\or \256\or \257%
    \or \260\or \261\or \262\or \263\or \264\or \265\or \266\or \267%
    \or \270\or \271\or \272\or \273\or \274\or \275\or \276\or \277%
    \or \300\or \301\or \302\or \303\or \304\or \305\or \306\or \307%
    \or \310\or \311\or \312\or \313\or \314\or \315\or \316\or \317%
    \or \320\or \321\or \322\or \323\or \324\or \325\or \326\or \327%
    \or \330\or \331\or \332\or \333\or \334\or \335\or \336\or \337%
    \or \340\or \341\or \342\or \343\or \344\or \345\or \346\or \347%
    \or \350\or \351\or \352\or \353\or \354\or \355\or \356\or \357%
    \or \360\or \361\or \362\or \363\or \364\or \365\or \366\or \367%
    \or \370\or \371\or \372\or \373\or \374\or \375\or \376\or \377%
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\def\HyPsd@CJKnumber#1{%
  \ifnum#1<\z@
    \CJK@minus
    \expandafter\HyPsd@@CJKnumber\expandafter{\number-\number#1}%
  \else
    \expandafter\HyPsd@@CJKnumber\expandafter{\number#1}%
  \fi
}
\def\HyPsd@@CJKnumber#1{%
  \ifcase#1 %
    \CJK@zero\or\CJK@one\or\CJK@two\or\CJK@three\or\CJK@four\or
    \CJK@five\or\CJK@six\or\CJK@seven\or\CJK@eight\or\CJK@nine\or
    \CJK@ten\or\CJK@ten\CJK@one\or\CJK@ten\CJK@two\or
    \CJK@ten\CJK@three\or\CJK@ten\CJK@four\or\CJK@ten\CJK@five\or
    \CJK@ten\CJK@six\or\CJK@ten\CJK@seven\or\CJK@ten\CJK@eight\or
    \CJK@ten\CJK@nine
  \else
    \ifnum#1<10000 %
      \HyPsd@CJKnumberFour#1!\@empty{20}%
      \@empty
    \else
      \ifnum#1<100000000 %
        \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
          \IntCalcDiv#1!10000!%
        !{}{20}%
        \CJK@tenthousand
        \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
          \IntCalcMod#1!10000!%
        !\CJK@zero{10}%
        \@empty
      \else
        \expandafter\HyPsd@CJKnumberLarge
        \number\IntCalcDiv#1!100000000!\expandafter!%
        \number\IntCalcMod#1!100000000!!%
      \fi
    \fi
  \fi
}
\def\HyPsd@CJKnumberLarge#1!#2!{%
  \HyPsd@CJKnumberFour#1!{}{20}%
  \CJK@hundredmillion
  \ifnum#2=\z@
  \else
    \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
      \IntCalcDiv#2!10000!%
    !\CJK@zero{10}%
    \CJK@tenthousand
    \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
      \IntCalcMod#2!10000!%
    !\CJK@zero{10}%
    \@empty
  \fi
}
\def\HyPsd@CJKnumberFour#1!#2#3{%
  \ifnum#1=\z@
    \expandafter\@gobble
  \else
    \ifnum#1<1000 %
      #2%
      \HyPsd@CJKnumberThree#1!{}{#3}%
    \else
      \HyPsd@@CJKnumber{\IntCalcDiv#1!1000!}%
      \CJK@thousand
      \expandafter\expandafter\expandafter\HyPsd@CJKnumberThree
        \IntCalcMod#1!1000!%
      !\CJK@zero{10}%
    \fi
  \fi
}
\def\HyPsd@CJKnumberThree#1!#2#3{%
  \ifnum#1=\z@
  \else
    \ifnum#1<100 %
      #2%
      \HyPsd@CJKnumberTwo#1!{}{#3}%
    \else
      \HyPsd@@CJKnumber{\IntCalcDiv#1!100!}%
      \CJK@hundred
      \expandafter\expandafter\expandafter\HyPsd@CJKnumberTwo
        \IntCalcMod#1!100!%
      !\CJK@zero{10}%
    \fi
  \fi
}
\def\HyPsd@CJKnumberTwo#1!#2#3{%
  \ifnum#1=\z@
  \else
    \ifnum#1<#3 %
      #2%
      \HyPsd@@CJKnumber{#1}%
    \else
      \HyPsd@@CJKnumber{\IntCalcDiv#1!10!}%
      \CJK@ten
      \ifnum\IntCalcMod#1!10!=\z@
      \else
        \HyPsd@@CJKnumber{\IntCalcMod#1!10!}%
      \fi
    \fi
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\def\HyPsd@CJKdigits#1{%
  \ifx*#1\relax
    \expandafter\HyPsd@@CJKdigits\expandafter\CJK@zero
  \else
    \HyPsd@@CJKdigits\CJK@null{#1}%
  \fi
}
\def\HyPsd@@CJKdigits#1#2{%
  \ifx\\#2\\%
  \else
    \HyPsd@@@CJKdigits#1#2\@nil
  \fi
}%
\def\HyPsd@@@CJKdigits#1#2#3\@nil{%
  \HyPsd@CJKdigit#1{#2}%
  \ifx\\#3\\%
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
  {%
    \HyPsd@@@CJKdigits#1#3\@nil
  }%
}
\def\HyPsd@CJKdigit#1#2{%
  \ifcase#2 %
    #1\or
    \CJK@one\or\CJK@two\or\CJK@three\or\CJK@four\or
    \CJK@five\or\CJK@six\or\CJK@seven\or\CJK@eight\or\CJK@nine
  \fi
}
%    \end{macrocode}
%
% \subsubsection{\texorpdfstring{\cs{@inmathwarn}}{\\@inmathwarn}-Patch}
%    \begin{macro}{\HyPsd@inmathwarn}
%    The patch of \cs{@inmathwarn} is needed to get rid of the
%    infinite error loop with glyphs of other encodings
%    (see the explanation above). Potentially the patch is
%    dangerous, if the code in |ltoutenc.dtx| changes.
%    Checked with \LaTeXe{} versions [1998/06/01] and
%    [1998/12/01]. I expect that versions below [1995/12/01]
%    don't work.
%
%    To understand the patch easier, the original code of
%    \cs{@current@cmd} and \cs{@changed@cmd} follows
%    (\LaTeXe{} release [1998/12/01]).
%    In the normal case \cs{pdfstringdef} is executed in a context
%    where \cs{protect} has the meaning of \cs{@typesetprotect}
%    (=\cs{relax}).
%\begin{verbatim}
%\def\@current@cmd#1{%
%   \ifx\protect\@typeset@protect
%      \@inmathwarn#1%
%   \else
%      \noexpand#1\expandafter\@gobble
%   \fi}
%\def\@changed@cmd#1#2{%
%   \ifx\protect\@typeset@protect
%      \@inmathwarn#1%
%      \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
%         \expandafter\ifx\csname ?\string#1\endcsname\relax
%            \expandafter\def\csname ?\string#1\endcsname{%
%               \TextSymbolUnavailable#1%
%            }%
%         \fi
%         \global\expandafter\let
%               \csname\cf@encoding \string#1\expandafter\endcsname
%               \csname ?\string#1\endcsname
%      \fi
%      \csname\cf@encoding\string#1%
%         \expandafter\endcsname
%   \else
%      \noexpand#1%
%   \fi}
%\gdef\TextSymbolUnavailable#1{%
%   \@latex@error{%
%      Command \protect#1 unavailable in encoding \cf@encoding%
%   }\@eha}
%\def\@inmathwarn#1{%
%   \ifmmode
%      \@latex@warning{Command \protect#1 invalid in math mode}%
%   \fi}
%\end{verbatim}
%    \begin{macrocode}
\def\HyPsd@inmathwarn#1#2{%
  \ifx#2\expandafter
    \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
      \HyPsd@GLYPHERR
      \expandafter\@gobble\string#1%
      >%
      \expandafter\expandafter\expandafter\HyPsd@EndWithElse
    \else
      \expandafter\expandafter\expandafter\HyPsd@GobbleFiFi
    \fi
  \else
    \expandafter#2%
  \fi
}
\def\HyPsd@GobbleFiFi#1\fi#2\fi{}
\def\HyPsd@EndWithElse#1\else{\else}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPsd@add@accent}
%    \begin{macrocode}
\def\HyPsd@add@accent#1#2{%
  \HyPsd@GLYPHERR\expandafter\@gobble\string#1+\string#2>%
  #2%
}%
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Unexpandable spaces}
%
%    \begin{macro}{\HyPsd@LetUnexpandableSpace}
%    In \cmd{\HyPsd@@ProtectSpaces} the space tokens are replaced
%    by not expandable commands, that work like spaces:
%    \begin{itemize}
%    \item So they can caught by undelimited arguments.
%    \item And they work in number, dimen, and skip
%          assignments.
%    \end{itemize}
%    These properties are used in \cmd{\HyPsd@CheckCatcodes}.
%    \begin{macrocode}
\def\HyPsd@LetUnexpandableSpace#1{%
  \expandafter\futurelet\expandafter#1\expandafter\@gobble\space\relax
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@UnexpandableSpace}
%    \cmd{\HyPsd@UnexpandableSpace} is used
%    in \cmd{\HyPsd@@ProtectSpaces}.
%    In \cmd{HyPsd@@ProtectSpaces} the space tokens are replaced
%    by unexpandable commands \cmd{\HyPsd@UnexpandableSpace},
%    but that have the effect of spaces.
%    \begin{macrocode}
\HyPsd@LetUnexpandableSpace\HyPsd@UnexpandableSpace
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Marker for commands}
%    \begin{macro}{\HyPsd@XSPACE}
%    \begin{macro}{\HyPsd@ITALCORR}
%    \begin{macro}{\HyPsd@GLYPHERR}
%    Some commands and information cannot be utilized before
%    the string expansion and the checking process.
%    Command names are filtered out, so we need another way
%    to transport the information: An unusual |#| with catcode
%    12 marks the beginning of the extra information.
%    \begin{macrocode}
\edef\HyPsd@XSPACE{\string#\string X}
\edef\HyPsd@ITALCORR{\string#\string I}
\edef\HyPsd@GLYPHERR{\string#\string G}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \end{macro}
%
% \subsubsection{\texorpdfstring{\cs{hspace}}{\\hspace} fix}
%    \begin{macro}{\HyPsd@hspace}
%    \begin{macrocode}
\def\HyPsd@hspace#1{\HyPsd@@hspace#1*\END}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@hspace}
%    \cs{HyPsd@@hspace} checks whether \cs{hspace}
%    is called in its star form.
%    \begin{macrocode}
\def\HyPsd@@hspace#1*#2\END{%
  \ifx\\#2\\%
    \HyPsd@hspacetest{#1}%
  \else
    \expandafter\HyPsd@hspacetest
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@hspacetest}
%    \cs{HyPsd@hyspacetest} replaces the \cs{hspace} by a space, if
%    the length is greater than zero.
%    \begin{macrocode}
\def\HyPsd@hspacetest#1{\ifdim\dimexpr#1\relax>\z@\space\fi}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Fix for AMS classes}
%
%    \begin{macrocode}
\@ifundefined{tocsection}{%
  \let\HyPsd@AMSclassfix\relax
}{%
  \def\HyPsd@AMSclassfix{%
    \let\tocpart\HyPsd@tocsection
    \let\tocchapter\HyPsd@tocsection
    \let\tocappendix\HyPsd@tocsection
    \let\tocsection\HyPsd@tocsection
    \let\tocsubsection\HyPsd@tocsection
    \let\tocsubsubsection\HyPsd@tocsection
    \let\tocparagraph\HyPsd@tocsection
  }%
  \def\HyPsd@tocsection#1#2#3{%
    \if @#2@\else\if @#1@\else#1 \fi#2. \fi
    #3%
  }%
}
%    \end{macrocode}
%
% \subsubsection{Reference commands}
%
%    \begin{macro}{\HyPsd@href}
%    \begin{macrocode}
\def\HyPsd@href#1#{\@secondoftwo}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPsd@ref}
%    Macro \cs{HyPsd@ref} calls the macro \cs{HyPsd@@ref} for star checking.
%    The same methods like in \cs{HyPsd@hspace} is used.
%    \begin{macrocode}
\def\HyPsd@ref#1{\HyPsd@@ref#1*\END}%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@ref}
%    Macro \cs{HyPsd@@ref} checks if a star is present.
%    \begin{macrocode}
\def\HyPsd@@ref#1*#2\END{%
  \ifx\\#2\\%
    \HyPsd@@@ref{#1}%
  \else
    \expandafter\HyPsd@@@ref
  \fi
}%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@@ref}
%    \cs{HyPsd@@@ref} does the work and extracts the first argument.
%    \begin{macrocode}
\def\HyPsd@@@ref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
    ??%
  \else
    \expandafter\expandafter\expandafter
    \@car\csname r@#1\endcsname\@nil
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPsd@pageref}
%    Macro \cs{HyPsd@pageref} calls the macro \cs{HyPsd@@pageref} for star checking.
%    The same methods like in \cs{HyPsd@hspace} is used.
%    \begin{macrocode}
\def\HyPsd@pageref#1{\HyPsd@@pageref#1*\END}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@pageref}
%    Macro \cs{HyPsd@@pageref} checks if a star is present.
%    \begin{macrocode}
\def\HyPsd@@pageref#1*#2\END{%
  \ifx\\#2\\%
    \HyPsd@@@pageref{#1}%
  \else
    \expandafter\HyPsd@@@pageref
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@@pageref}
%    \cs{HyPsd@@@pageref} does the work and extracts the second argument.
%    \begin{macrocode}
\def\HyPsd@@@pageref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
    ??%
  \else
    \expandafter\expandafter\expandafter\expandafter
    \expandafter\expandafter\expandafter\@car
    \expandafter\expandafter\expandafter\@gobble
    \csname r@#1\endcsname{}\@nil
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPsd@nameref}
%    Macro \cs{HyPsd@nameref} calls the macro \cs{HyPsd@@nameref} for star checking.
%    The same methods like in \cs{HyPsd@hspace} is used.
%    \begin{macrocode}
\def\HyPsd@nameref#1{\HyPsd@@nameref#1*\END}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@nameref}
%    Macro \cs{HyPsd@@nameref} checks if a star is present.
%    \begin{macrocode}
\def\HyPsd@@nameref#1*#2\END{%
  \ifx\\#2\\%
    \HyPsd@@@nameref{#1}%
  \else
    \expandafter\HyPsd@@@nameref
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@@nameref}
%    \cs{HyPsd@@@nameref} does the work and extracts the third argument.
%    \begin{macrocode}
\def\HyPsd@@@nameref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
    ??%
  \else
    \expandafter\expandafter\expandafter\expandafter
    \expandafter\expandafter\expandafter\@car
    \expandafter\expandafter\expandafter\@gobbletwo
    \csname r@#1\endcsname{}{}\@nil
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPsd@autoref}
%    Macro \cs{HyPsd@autoref} calls the macro \cs{HyPsd@@autoref} for star checking.
%    The same methods like in \cs{HyPsd@hspace} is used.
%    \begin{macrocode}
\def\HyPsd@autoref#1{\HyPsd@@autoref#1*\END}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@autoref}
%    Macro \cs{HyPsd@@autoref} checks if a star is present.
%    \begin{macrocode}
\def\HyPsd@@autoref#1*#2\END{%
  \ifx\\#2\\%
    \HyPsd@@@autoref{#1}%
  \else
    \expandafter\HyPsd@@@autoref
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@@autoref}
%    \cs{HyPsd@@@autoref} does the work and extracts the second argument.
%    \begin{macrocode}
\def\HyPsd@@@autoref#1{%
  \expandafter\ifx\csname r@#1\endcsname\relax
    ??%
  \else
    \expandafter\expandafter\expandafter\HyPsd@autorefname
        \csname r@#1\endcsname{}{}{}{}\@nil
    \expandafter\expandafter\expandafter
    \@car\csname r@#1\endcsname\@nil
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@autorefname}
%    At least a basic definition for getting the \cs{autoref} name.
%    \begin{macrocode}
\def\HyPsd@autorefname#1#2#3#4#5\@nil{%
  \ifx\\#4\\%
  \else
    \HyPsd@@autorefname#4.\@nil
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@autorefname}
%    \begin{macrocode}
\def\HyPsd@@autorefname#1.#2\@nil{%
  \@ifundefined{#1autorefname}{%
    \@ifundefined{#1name}{%
    }{%
      \csname#1name\endcsname\space
    }%
  }{%
    \csname#1autorefname\endcsname\space
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Redefining the defining commands}
% \label{defcmd}
%    Definitions aren't allowed, because they aren't executed in
%    an only expanding context. So the command to be defined
%    isn't defined and can perhaps be undefined. This would causes
%    TeX to stop with an error message.
%    With a deep trick it is possible to define commands in such
%    a context: \cs{csname} does the job, it defines the command
%    to be \cs{relax}, if it has no meaning.
%
%    Active characters cannot be defined with this trick. It is
%    possible to define all undefined active characters
%    (perhaps that they have the meaning of \cs{relax}).
%    To avoid side effects this should be done in \cs{pdfstringdef}
%    shortly before the \cs{xdef} job. But checking and defining
%    all possible active characters of the full range (0 until 255)
%    would take a while. \cs{pdfstringdef} is slow enough, so
%    this isn't done.
%
%    \cs{HyPsd@DefCommand} and \cs{HyPsd@LetCommand} expands to the
%    commands \cs{<def>-command} and \cs{<let>-command}
%    with the meaning of \cs{def} and \cs{let}. So it is detected by
%    \cs{HyPsd@CheckCatcodes} and the command name \cs{<def>-command}
%    or \cs{<let>-command} should indicate a forbidden definition
%    command.
%
%    The command to be defined is converted to a string and back
%    to a command name with the help of \cs{csname}. If the
%    command is already defined, \cs{noexpand} prevents a
%    further expansion, even though the command would
%    expand to legal stuff. If the command don't have the meaning
%    of \cs{relax}, \cs{HyPsd@CheckCatcodes} will produce a warning.
%    (The command itself can be legal, but the warning is legitimate
%    because of the position after a defining command.)
%
%    The difference between \cs{HyPsd@DefCommand} and
%    \cs{HyPsdLetCommand} is that the first one also cancels this
%    arguments, the parameter and definition text. The right side
%    of the \cs{let} commands cannot be canceled with an undelimited
%    parameter because of a possible space token after \cs{futurelet}.
%
%    To avoid unmachted \cs{if...} tokens, the cases
%    \verb|\let\if...\iftrue| and \verb|\let\if...\iffalse|
%    are checked and ignored.
%
%    \begin{macro}{\HyPsd@DefCommand}
%    \begin{macro}{\HyPsd@LetCommand}
%    \begin{macrocode}
\begingroup
  \def\x#1#2{%
    \endgroup
    \let#1\def
    \def\HyPsd@DefCommand##1##2##{%
      #1%
      \expandafter\noexpand
        \csname\expandafter\@gobble\string##1\@empty\endcsname
      \@gobble
    }%
    \let#2\let
    \def\HyPsd@@LetCommand##1{%
      \expandafter\ifx\csname##1\expandafter\endcsname
                      \csname iftrue\endcsname
        \pdfstringdefWarn\let
        \expandafter\@gobble
      \else
        \expandafter\ifx\csname##1\expandafter\endcsname
                        \csname iffalse\endcsname
          \pdfstringdefWarn\let
          \expandafter\expandafter\expandafter\@gobble
        \else
          #2%
          \expandafter\noexpand
            \csname##1\expandafter\expandafter\expandafter\endcsname
        \fi
      \fi
    }%
  }%
\expandafter\x\csname <def>-command\expandafter\endcsname
              \csname <let>-command\endcsname
\def\HyPsd@LetCommand#1{%
  \expandafter\expandafter\expandafter\HyPsd@@LetCommand
    \expandafter\expandafter\expandafter{%
    \expandafter\@gobble\string#1\@empty
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
% \subsubsection{^^A
%   \texorpdfstring{\cs{ifnextchar}}{\\ifnextchar}^^A
% }
%    \begin{macro}{\HyPsd@ifnextchar}
%    In \cs{pdfstringdef} \cs{@ifnextchar} is disabled
%    via a \cs{let} command to save time. First a
%    warning message is given, then the three arguments
%    are canceled. \cs{@ifnextchar} cannot work in a correct
%    manner, because it uses \cs{futurelet}, but this is a
%    stomach feature, that doesn't work in an expanding context.
%    There are several variants of \cs{@ifnextchar}:
%    \begin{itemize}
%    \item \cs{@ifnextchar}
%    \item \cs{kernel@ifnextchar}
%    \item \cs{new@ifnextchar} from package \verb|amsgen.sty|
%    (bug report latex/3662).
%    \end{itemize}
%    \begin{macrocode}
\def\HyPsd@ifnextchar#1{%
  \pdfstringdefWarn#1%
  \expandafter\@gobbletwo\@gobble
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{^^A
%   \texorpdfstring{\cs{@protected@testoptifnextchar}}^^A
%     {\\@protected@testopt}^^A
% }
%    \begin{macro}{\HyPsd@protected@testopt}
%    Macros with optional arguments doesn't work properly, because
%    they call \cmd{\@ifnextchar} to detect the optional argument
%    (see the explanation of \cmd{\HyPsd@ifnextchar}).
%    But a warning, that \cmd{\@ifnextchar} doesn't work, doesn't
%    help the user very much. Therefore \cmd{\@protected@testopt}
%    is also disabled, because its first argument is the problematic
%    macro with the optional argument and it is called before
%    \cmd{\@ifnextchar}.
%    \begin{macrocode}
\def\HyPsd@protected@testopt#1{%
  \pdfstringdefWarn#1%
  \@gobbletwo
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Help macros for postprocessing}
%
% \subsubsection{Generic warning.}
%    \begin{macro}{\HyPsd@Warning}
%    For several reasons \cs{space} is masked and does not have its
%    normal meaning. But it is used in warning messages, so it is
%    redefined locally:
%    \begin{macrocode}
\def\HyPsd@Warning#1{%
  \begingroup
    \let\space\Hy@space
    \Hy@Warning{#1}%
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Protecting spaces}
%
%    \begin{macro}{\HyPsd@ProtectSpaces}
%    \cs{HyPsd@ProtectSpaces} calls with the expanded
%    string \cs{HyPsd@@ProtectSpacesFi}. The expanded string is
%    protected by \verb+|+ at the beginning and end of
%    the expanded string. Because of this there can be no group
%    at the beginning or end of the string and grouping characters
%    are not removed by the call of \cs{HyPsd@@ProtectSpacesFi}.
%    \begin{macrocode}
\let\HyPsd@fi\fi
\def\HyPsd@ProtectSpaces#1{%
  \xdef#1{%
    \iftrue
      \expandafter\HyPsd@@ProtectSpacesFi
        \expandafter|\expandafter\@empty#1| %
    \HyPsd@fi
  }%
  \expandafter\HyPsd@RemoveMask#1\HyPsd@End#1%
}%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@ProtectSpacesFi}
%    The string can contain command tokens, so it is better
%    to use an \cs{def} instead of an \cs{edef}.
%    \begin{macrocode}
\def\HyPsd@@ProtectSpacesFi#1 #2\HyPsd@fi{%
  \fi
  \unexpanded{#1}%
  \ifx\scrollmode#2\scrollmode
  \else
    \HyPsd@@ProtectSpacesFi\HyPsd@UnexpandableSpace#2%
  \HyPsd@fi
}%
%    \end{macrocode}
%    \end{macro}
%
% \paragraph{Remove mask.}
%    \begin{macro}{\HyPsd@RemoveMask}
%    \cs{HyPsd@RemoveMask} removes the protecting \verb+|+.
%    It is used by \cs{HyPsd@@ProtectSpacesFi} and by the code in
%    \cs{pdfstringdef} that removes the grouping characters.
%    \begin{macrocode}
\def\HyPsd@RemoveMask|#1|\HyPsd@End#2{%
  \xdef#2{\unexpanded\expandafter{#1}}%
}%
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Remove grouping braces}
%    \begin{macro}{\HyPsd@RemoveBraces}
%    |#1| contains the expanded string, the result will
%    be locally written in command \cs{HyPsd@String}.
%    \begin{macrocode}
\def\HyPsd@RemoveBraces#1{%
  \ifx\scrollmode#1\scrollmode
  \else
    \HyPsd@@RemoveBracesFi#1\HyPsd@End{#1}%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@RemoveBraces}
%    \cs{HyPsd@@RemoveBraces} is called with the expanded string,
%    the end marked by \cs{HyPsd@End}, the expanded string again, but
%    enclosed in braces and the string command. The first expanded
%    string is scanned by the parameter text |#1#2|.
%    By a comparison with the original form in |#3| we can decide
%    whether |#1| is a single token or a group. To avoid the
%    case that |#2| is a group, the string is extended by a \verb+|+
%    before.
%
%    While removing the grouping braces an italic correction
%    marker is inserted for supporting package |xspace| and
%    letting ligatures broken.
%
%    Because the string is already expanded, the \cs{if} commands
%    should disappeared. So we can move some parts out
%    of the argument of \cs{Hy@ReturnAfterFi}.
%    \begin{macrocode}
\def\HyPsd@@RemoveBracesFi#1#2\HyPsd@End#3\fi{%
  \fi
  \def\Hy@temp@A{#1#2}%
  \def\Hy@temp@B{#3}%
  \ifx\Hy@temp@A\Hy@temp@B
    \expandafter\def\expandafter\HyPsd@String\expandafter{%
      \HyPsd@String#1%
    }%
    \ifx\scrollmode#2\scrollmode
    \else
      \Hy@ReturnAfterFiFiEnd{%
        \HyPsd@RemoveBraces{#2}%
      }%
    \fi
  \else
    \def\Hy@temp@A{#1}%
    \HyPsd@AppendItalcorr\HyPsd@String
    \ifx\Hy@temp@A\@empty
      \Hy@ReturnAfterElseFiFiEnd{%
        \HyPsd@RemoveBraces{#2}%
      }%
    \else
      \HyPsd@ProtectSpaces\Hy@temp@A
      \HyPsd@AppendItalcorr\Hy@temp@A
      \Hy@ReturnAfterFiFiEnd{%
        \expandafter\HyPsd@RemoveBraces\expandafter
          {\Hy@temp@A#2}%
      }%
    \fi
  \fi
  \Hy@ReturnEnd
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@AppendItalcorr}
%    \begin{macro}{\HyPsd@@AppendItalcorr}
%    The string can contain commands yet, so it is better
%    to use \cs{def} instead of a shorter \cs{edef}.
%    The two help macros limit the count of \cs{expandafter}.
%    \begin{macrocode}
\def\HyPsd@AppendItalcorr#1{%
  \expandafter\HyPsd@@AppendItalcorr\expandafter{\/}#1%
}
\def\HyPsd@@AppendItalcorr#1#2{%
  \expandafter\def\expandafter#2\expandafter{#2#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
% \subsubsection{Catcode check}
%
% \paragraph{Workaround for LuaTeX.}
%    \cs{HyPsd@CheckCatcodes} might trigger a bug
%    of LuaTeX (0.60.2, 0.70.1, 0.70.2, ...) in the
%    comparison with \cs{ifcat}, see
%    \url{http://tracker.luatex.org/view.php?id=773}.
%    \begin{macrocode}
\@ifundefined{directlua}{%
}{%
  \expandafter\ifx\csname\endcsname\relax\fi
}
%    \end{macrocode}
%
% \paragraph{Check catcodes.}
%    \begin{macro}{\HyPsd@CheckCatcodes}
%    Because \cs{ifcat} expands its arguments, this is
%    prevented by \cs{noexpand}. In case of command tokens
%    and active characters \cs{ifcat} now sees a \cs{relax}.
%    After protecting spaces and removing braces |#1| should
%    be a single token, no group of several tokens, nor an
%    empty group. (So the \cs{expandafter}\cs{relax} between
%    \cs{ifcat} and \cs{noexpand} is only for safety and
%    it should be possible to remove it.)
%
%    \cs{protect} and \cs{relax} should be removed silently.
%    But it is too dangerous and breaks some code giving them
%    the meaning of \cs{@empty}. So commands with the meaning
%    of \cs{protect} are removed here. (\cs{protect} should
%    have the meaning of \cs{@typeset@protect} that
%    is equal to \cs{relax}).
%
%    For the comparison with active characters, \texttt{\textasciitilde}
%    cannot be used because it has the meaning of a blank space here.
%    And active characters need to be checked, if they have been defined
%    using \cs{protected}.
%    \begin{macrocode}
\begingroup
  \catcode`\Q=\active
  \let Q\@empty
  \gdef\HyPsd@CheckCatcodes#1#2\HyPsd@End{%
    \global\let\HyPsd@Rest\relax
    \ifcat\relax\noexpand#1\relax
      \ifx#1\protect
      \else
        \ifx#1\penalty
          \setbox\z@=\hbox{%
            \afterassignment\HyPsd@AfterCountRemove
            \count@=#2\HyPsd@End
          }%
        \else
          \ifx#1\kern
            \setbox\z@=\hbox{%
              \afterassignment\HyPsd@AfterDimenRemove
              \dimen@=#2\HyPsd@End
            }%
          \else
            \ifx#1\hskip
              \setbox\z@=\hbox{%
                \afterassignment\HyPsd@AfterSkipRemove
                \skip@=#2\HyPsd@End
              }%
            \else
              \HyPsd@CatcodeWarning{#1}%
            \fi
          \fi
        \fi
      \fi
    \else
      \ifcat\noexpand#1\noexpandQ% active character
        \expandafter\expandafter\expandafter\def
        \expandafter\expandafter\expandafter\HyPsd@String
        \expandafter\expandafter\expandafter{%
          \expandafter\HyPsd@String\string#1%
        }%
      \else
        \ifcat#1A% letter
          \expandafter\def\expandafter\HyPsd@String\expandafter{%
            \HyPsd@String#1%
          }%
        \else
          \ifcat#1 % SPACE
            \expandafter\def\expandafter\HyPsd@String\expandafter{%
              \HyPsd@String\HyPsd@SPACEOPTI
            }%
          \else
            \ifcat$#1%
              \HyPsd@CatcodeWarning{math shift}%
            \else
              \ifcat&#1%
                \HyPsd@CatcodeWarning{alignment tab}%
              \else
                \ifcat^#1%
                  \HyPsd@CatcodeWarning{superscript}%
                \else
                  \ifcat_#1%
                    \HyPsd@CatcodeWarning{subscript}%
                  \else
                    \expandafter\def\expandafter\HyPsd@String\expandafter{%
                      \HyPsd@String#1%
                    }%
                  \fi
                \fi
              \fi
            \fi
          \fi
        \fi
      \fi
    \fi
    \ifx\HyPsd@Rest\relax
      \ifx\scrollmode#2\scrollmode
      \else
        \Hy@ReturnAfterFiFiEnd{%
          \HyPsd@CheckCatcodes#2\HyPsd@End
        }%
      \fi
    \else
      \ifx\HyPsd@Rest\@empty
      \else
        \Hy@ReturnAfterFiFiEnd{%
          \expandafter\HyPsd@CheckCatcodes\HyPsd@Rest\HyPsd@End
        }%
      \fi
    \fi
    \Hy@ReturnEnd
  }%
\endgroup
%    \end{macrocode}
%    \end{macro}
%
% \paragraph{Remove counts, dimens, skips.}
%    \begin{macro}{\HyPsd@AfterCountRemove}
%    Counts like \cs{penalty} are removed silently.
%    \begin{macrocode}
\def\HyPsd@AfterCountRemove#1\HyPsd@End{%
  \gdef\HyPsd@Rest{#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@AfterDimenRemove}
%    If the value of the dimen (\cs{kern}) is zero, it can be
%    removed silently. All other values are difficult to interpret.
%    Negative values do not work in bookmarks. Should positive
%    values be removed or should they be replaced by space(s)?
%    The following code replaces positive values greater than
%    |1ex| with a space and removes them else.
%    \begin{macrocode}
\def\HyPsd@AfterDimenRemove#1\HyPsd@End{%
  \ifdim\ifx\HyPsd@String\@empty\z@\else\dimen@\fi>1ex %
    \HyPsd@ReplaceSpaceWarning{\string\kern\space\the\dimen@}%
    \gdef\HyPsd@Rest{\HyPsd@UnexpandableSpace #1}%
  \else
    \ifdim\dimen@=\z@
    \else
      \HyPsd@RemoveSpaceWarning{\string\kern\space\the\dimen@}%
    \fi
    \gdef\HyPsd@Rest{#1}%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@AfterSkipRemove}
%    The glue part of skips do not work in PDF strings and are ignored.
%    Skips (\cs{hskip}), that are not zero, have the same
%    interpreting problems like dimens (see above).
%    \begin{macrocode}
\def\HyPsd@AfterSkipRemove#1\HyPsd@End{%
  \ifdim\ifx\HyPsd@String\@empty\z@\else\skip@\fi>1ex %
    \HyPsd@ReplaceSpaceWarning{\string\hskip\space\the\skip@}%
    \gdef\HyPsd@Rest{\HyPsd@UnexpandableSpace #1}%
  \else
    \ifdim\skip@=\z@
    \else
      \HyPsd@RemoveSpaceWarning{\string\kern\space\the\skip@}%
    \fi
    \gdef\HyPsd@Rest{#1}%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
% \paragraph{Catcode warnings.}
%    \begin{macro}{\HyPsd@CatcodeWarning}
%    \cs{HyPsd@CatcodeWarning} produces a warning for the user.
%    \begin{macrocode}
\def\HyPsd@CatcodeWarning#1{%
  \HyPsd@Warning{%
    Token not allowed in a PDF string (%
    \ifHy@unicode
      Unicode%
    \else
      PDFDocEncoding%
    \fi
    ):%
    \MessageBreak removing `\HyPsd@RemoveCmdPrefix#1'%
  }%
}
\begingroup
  \catcode`\|=0 %
  \catcode`\\=12 %
%    \end{macrocode}
%    \SpecialEscapechar{\|}
%    \vspace{-2\MacrocodeTopsep}
%    \vspace{-\parskip}
%    \vspace{-\partopsep}
%    \begin{macrocode}
  |gdef|HyPsd@RemoveCmdPrefix#1{%
    |expandafter|HyPsd@@RemoveCmdPrefix
      |string#1|@empty\<>-|@empty|@empty
  }%
  |gdef|HyPsd@@RemoveCmdPrefix#1\<>-#2|@empty#3|@empty{#1#2}%
|endgroup
%    \end{macrocode}
%    \SpecialEscapechar{\\}
%    \end{macro}
%    \begin{macro}{\HyPsd@RemoveSpaceWarning}
%    \begin{macrocode}
\def\HyPsd@RemoveSpaceWarning#1{%
  \HyPsd@Warning{%
    Token not allowed in a PDF string (%
    \ifHy@unicode
      Unicode%
    \else
      PDFDocEncoding%
    \fi
    ):%
    \MessageBreak #1\MessageBreak
    removed%
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@ReplaceSpaceWarning}
%    \begin{macrocode}
\def\HyPsd@ReplaceSpaceWarning#1{%
  \HyPsd@Warning{%
    Token not allowed in a PDF string (%
    \ifHy@unicode
      Unicode%
    \else
      PDFDocEncoding%
    \fi
    ):%
    \MessageBreak #1\MessageBreak
    replaced by space%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Check for wrong glyphs}
%    A wrong glyph is marked with \cs{relax}, the glyph
%    name follows, delimited by |>|. \cs{@empty} ends
%    the string.
%    \begin{macrocode}
\def\HyPsd@GlyphProcess#1\relax#2\@empty{%
  \expandafter\def\expandafter\HyPsd@String\expandafter{%
    \HyPsd@String#1%
  }%
  \ifx\\#2\\%
  \else
    \Hy@ReturnAfterFi{%
      \HyPsd@GlyphProcessWarning#2\@empty
    }%
  \fi
}
\def\HyPsd@GlyphProcessWarning#1>#2\@empty{%
  \HyPsd@@GlyphProcessWarning#1++>%
  \HyPsd@GlyphProcess#2\@empty
}
\def\HyPsd@@GlyphProcessWarning#1+#2+#3>{%
  \ifx\\#2\\%
    \HyPsd@Warning{%
      Glyph not defined in %
      P\ifHy@unicode U\else D1\fi\space encoding,\MessageBreak
      removing `\@backslashchar#1'%
    }%
  \else
    \HyPsd@Warning{%
      Composite letter `\@backslashchar#1+#2'\MessageBreak
      not defined in P\ifHy@unicode U\else D1\fi\space encoding,%
      \MessageBreak
      removing `\@backslashchar#1'%
    }%
  \fi
}
%    \end{macrocode}
%
% \paragraph{Spaces.}
%    \begin{macro}{\HyPsd@spaceopti}
%    In the string the spaces are represented by \cs{HyPsd@spaceopti}
%    tokens. Within an \cs{edef} it prints itself as
%    a simple space and looks for its next argument.
%    If another space follows, so it replaces the next \cs{HyPsd@spaceopti}
%    by an protected space \cs{040}.
%    \begin{macrocode}
\def\HyPsd@spaceopti#1{ % first space
  \ifx\HyPsd@spaceopti#1%
    \040%
  \else
    #1%
  \fi
}%
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Replacing tokens}
%    \begin{macro}{\HyPsd@Subst}
%    To save tokens \cs{HyPsd@StringSubst} is an wrapper for the
%    command \cs{HyPsd@Subst} that does all the work:
%    In string stored in command |#3| it replaces the tokens
%    |#1| with |#2|.\\
%    \begin{tabular}{ll}
%    |#1|& Exact the tokens that should be replaced.\\
%    |#2|& The replacement (don't need to be expanded).\\
%    |#3|& Command with the string.
%    \end{tabular}
%    \begin{macrocode}
\def\HyPsd@Subst#1#2#3{%
  \def\HyPsd@@ReplaceFi##1#1##2\END\fi{%
    \fi
    ##1%
    \ifx\scrollmode##2\scrollmode
    \else
      #2%
      \HyPsd@@ReplaceFi##2\END
    \fi
  }%
  \xdef#3{%
    \iftrue
      \expandafter\HyPsd@@ReplaceFi#3#1\END
    \fi
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@StringSubst}
%    To save tokens in \cs{pdfstringdef} \cs{HyPsd@StringSubst} is a wrapper,
%    that expands argument |#1| before calling \cs{HyPsd@Subst}.
%    \begin{macrocode}
\def\HyPsd@StringSubst#1{%
  \expandafter\HyPsd@Subst\expandafter{\string#1}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPsd@EscapeTeX}
%    \begin{macrocode}
\begingroup
  \lccode`\!=`\%%
  \lccode`\|=`\\%
  \lccode`\(=`\{%
  \lccode`\)=`\}%
  \lccode`0=\z@
  \lccode`1=\z@
  \lccode`3=\z@
  \lccode`4=\z@
  \lccode`5=\z@
  \lccode`7=\z@
\lowercase{\endgroup
  \def\HyPsd@EscapeTeX#1{%
    \HyPsd@Subst!{|045}#1%
    \HyPsd@Subst({|173}#1%
    \HyPsd@Subst){|175}#1%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Support for package \texttt{xspace}}
%    \begin{macro}{\HyPsd@doxspace}
%    \cs{xspace} does not work, because it uses a \cs{futurelet}
%    that cannot be executed in \TeX's mouth. So this implementation
%    uses an argument to examine the next token. In a previous version
%    I reused \cs{@xspace}, but this version is shorter and easier
%    to understand.
%    \begin{macrocode}
\def\HyPsd@doxspace#1{%
  \ifx#1\relax\else
   \ifx#1.\else
    \ifx#1:\else
     \ifx#1,\else
      \ifx#1;\else
       \ifx#1!\else
        \ifx#1?\else
         \ifx#1/\else
          \ifx#1-\else
           \ifx#1'\else
             \HyPsd@SPACEOPTI
           \fi
          \fi
         \fi
        \fi
       \fi
      \fi
     \fi
    \fi
   \fi
  \fi
  #1%
}%
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Converting to Unicode}
%    Eight bit characters are converted to the sixteen bit ones,
%    \cs{8} is replaced by \cs{00}, and \cs{9} is removed.
%    The result should be a valid Unicode PDF string without the
%    Unicode marker at the beginning.
%    \begin{macrocode}
\begingroup
  \catcode`\|=0 %
  \catcode`\\=12 %
%    \end{macrocode}
%    \SpecialEscapechar{\|}
%    \begin{macro}{\HyPsd@ConvertToUnicode}
%    \begin{macrocode}
  |gdef|HyPsd@ConvertToUnicode#1{%
    |xdef#1{%
      |expandafter|HyPsd@DoConvert#1|@empty|@empty|@empty
    }%
    |ifx#1|@empty
    |else
      |xdef#1{%
        \376\377%
        #1%
      }%
    |fi
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@DoConvert}
%    \begin{macrocode}
  |gdef|HyPsd@DoConvert#1{%
    |ifx#1|@empty
    |else
      |Hy@ReturnAfterFi{%
        |ifx#1\%%
          \%%
          |expandafter|HyPsd@DoEscape
        |else
          |HyPsd@Char{#1}%
          |expandafter|HyPsd@DoConvert
        |fi
      }%
    |fi
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@DoEscape}
%    \begin{macrocode}
  |gdef|HyPsd@DoEscape#1{%
    |ifx#19%
      |expandafter|HyPsd@GetTwoBytes
    |else
      |Hy@ReturnAfterFi{%
        |ifx#18%
          00%
          |expandafter|HyPsd@GetTwoBytes
        |else
          #1%
          |expandafter|HyPsd@GetOneByte
        |fi
      }%
    |fi
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@GetTwoBytes}
%    \begin{macrocode}
  |gdef|HyPsd@GetTwoBytes#1\#2#3#4{%
    #1\#2#3#4%
    |HyPsd@DoConvert
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@GetOneBye}
%    \begin{macrocode}
  |gdef|HyPsd@GetOneByte#1#2{%
    #1#2%
    |HyPsd@DoConvert
  }%
|endgroup
%    \end{macrocode}
%    \end{macro}
%    \SpecialEscapechar{\\}
%    \begin{macro}{\HyPsd@@GetNextTwoTokens}
%    \TeX{} does only allow nine parameters, so we need another macro
%    to get more arguments.
%    \begin{macrocode}
\def\HyPsd@GetNextTwoTokens#1#2#3\END#4{%
  \xdef#4{#4#1#2}%
  \HyPsd@@ConvertToUnicode#3\END#4%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@Char}
%    \begin{macrocode}
\begingroup
  \catcode0=9 %
  \catcode`\^=7 %
  \catcode`\^^^=12 %
  \def\x{^^^^0000}%
\expandafter\endgroup
\ifx\x\@empty
  \def\HyPsd@Char#1{%
    \ifnum`#1<128 %
      \@backslashchar 000#1%
    \else
      \ifnum`#1<65536 %
        \expandafter\HyPsd@CharTwoByte\number`#1!%
      \else
        \expandafter\expandafter\expandafter\HyPsd@CharSurrogate
        \intcalcSub{`#1}{65536}!%
      \fi
    \fi
  }%
  \def\HyPsd@CharTwoByte#1!{%
    \expandafter\expandafter\expandafter\HyPsd@CharOctByte
    \IntCalcDiv#1!256!!%
    \expandafter\expandafter\expandafter\HyPsd@CharOctByte
    \IntCalcMod#1!256!!%
  }%
  \def\HyPsd@CharOctByte#1!{%
    \@backslashchar
    \IntCalcDiv#1!64!%
    \intcalcDiv{\IntCalcMod#1!64!}{8}%
    \IntCalcMod#1!8!%
  }%
  \def\HyPsd@CharSurrogate#1!{%
    \@backslashchar 33%
    \IntCalcDiv#1!262144!%
    \expandafter\expandafter\expandafter\HyPsd@CharOctByte
    \intcalcDiv{\IntCalcMod#1!262144!}{1024}!%
    \@backslashchar 33%
    \expandafter\expandafter\expandafter\IntCalcAdd
    \intcalcDiv{\IntCalcMod#1!1024!}{256}!4!%
    \expandafter\expandafter\expandafter\HyPsd@CharOctByte
    \IntCalcMod#1!256!!%
  }%
\else
  \def\HyPsd@Char#1{%
    \@backslashchar 000#1%
  }%
\fi
%    \end{macrocode}
% change 2022-02-21
% For the case that utf8 chars are protected we need to expand them.
% This works only is |\UTFviii@loop| is not defined in a group, which will be the
% case in the new latex code, so we test for it.
%    \begin{macrocode}
\ifcsname UTFviii@loop\endcsname
 \def\HyPsd@expand@utfviii {%
    \count@"C2
    \@tempcnta"F5
    \def\UTFviii@tmp{\expandafter\def\expandafter~\expandafter{~}}%
    \UTFviii@loop
  }
\else
 \def\HyPsd@expand@utfviii {}
\fi
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Support for UTF-8 input encoding}
%
%    After |\usepackage[utf8]{inputenc}| there are macros that
%    expect the UTF-8 octets as arguments. Therefore we can
%    calculate the PDF octal sequences directly. Because the
%    PDF format is limited to UCS-2, conversion macros are
%    needed for UTF-8 sequences with two and three octets only.
%
%    This calculation must be done in an expandable context,
%    so we use e\TeX here for performance reasons. Unhappily
%    the results of divisions are rounded. Thus a
%    circumvention via |\dimexpr| is used, e.g.:
%    \begin{quote}
%      |\numexpr 123/4\relax| is replaced by\\
%      |\number\dimexpr.25\dimexpr 123sp\relax\relax|
%    \end{quote}
%    \begin{macrocode}
  \begingroup
    \lccode`\~=`^^f4\relax
  \lowercase{\endgroup
    \def\HyPsd@UTFviii{%
      \HyPsd@expand@utfviii
      \let\UTFviii@two@octets\HyPsd@UTFviii@two
      \let\UTFviii@three@octets\HyPsd@UTFviii@three
      \let\UTFviii@four@octets\HyPsd@UTFviii@four
      \ifx~\HyPsd@UTFviii@ccxliv@undef
        \let~\HyPsd@UTFviii@ccxliv@def
      \fi
      \let\unichar\HyPsd@unichar
    }%
  }%
  \def\HyPsd@UTFviii@ccxliv@undef{\@inpenc@undefined@{utf8}}%
  \edef\HyPsd@UTFviii@ccxliv@def{%
    \noexpand\UTFviii@four@octets\string ^^f4%
  }%
%    \end{macrocode}
%
%    The two octet form of UTF-8 |110aaabb| (A) and |10cccddd| (B)
%    must be converted into octal numbers |00a| and |bcd|. The
%    result is |\8a\bcd| (with a, b, c, d as octal numbers).
%    The conversion equations.
%    \begin{eqnarray}
%      a &:= A/4 - 48\\
%      b &:= A - 4*(A/4)\\
%      c &:= B/8 - 8*((8*(B/8))/8)\\
%      d &:= B - 8*(B/8)\\
%    \end{eqnarray}
%    ^^A   #1 = A/4   #2 = A
%    ^^A   #3 = B/8   #4 = B
%    \begin{macrocode}
  \def\HyPsd@UTFviii@two#1#2{%
    \expandafter\HyPsd@UTFviii@@two
      \number\dimexpr.25\dimexpr`#1sp\expandafter\relax\expandafter|%
      \number`#1\expandafter|%
      \number\dimexpr.125\dimexpr`#2sp\expandafter\relax\expandafter|%
      \number`#2 \@nil
  }%
  \def\HyPsd@UTFviii@@two#1|#2|#3|#4\@nil{%
    \expandafter\8%
    \number\numexpr #1-48\expandafter\relax
    \csname\number\numexpr #2-4*#1\relax\expandafter\endcsname
    \number\numexpr #3-8*%
        \number\dimexpr.125\dimexpr#3sp\relax\relax\expandafter\relax
    \number\numexpr #4-8*#3\relax
  }%
%    \end{macrocode}
%
%    Three octet form: |1110aabb| (A), |10bcccdd| (B), and |10eeefff|
%    (C). The result is |\9abc\def| (with a, \dots, f as octal numbers).
%    The conversion equations:
%    \begin{eqnarray}
%      a &:= A/4 - 56\\
%      b &:= 2*(A - 4*(A/4)) + ((B-128 < 32) ? 0 : 1)\\
%      c &:= B/4 - 32 - ((B-128 < 32) ? 0 : 8)\\
%      d &:= B - 4*(B/4)\\
%      e &:= C/8 - 16\\
%      f &:= C - 8*(C/8)\\
%    \end{eqnarray}
%    ^^A   #1 = A/4   #2 = A
%    ^^A   #3 = (B-128 < 32) ? 0 : 1
%    ^^A   #4 = B/4   #5 = B
%    ^^A   #6 = C/8   #7 = C
%    \begin{macrocode}
  \def\HyPsd@UTFviii@three#1#2#3{%
    \expandafter\HyPsd@UTFviii@@three
      \number\dimexpr.25\dimexpr`#1sp\expandafter\relax\expandafter|%
      \number`#1\expandafter|%
      \number\ifnum\numexpr`#2-128\relax <32 0\else 1\fi\expandafter|%
      \number\dimexpr.25\dimexpr`#2sp\expandafter\relax\expandafter|%
      \number`#2\expandafter|%
      \number\dimexpr.125\dimexpr`#3sp\expandafter\relax\expandafter|%
      \number`#3 \@nil
  }%
  \def\HyPsd@UTFviii@@three#1|#2|#3|#4|#5|#6|#7\@nil{%
    \expandafter\9%
    \number\numexpr #1-56\expandafter\relax
    \number\numexpr 2*(#2-4*#1)+#3\expandafter\relax
    \number\numexpr #4 - 32 -\ifcase#3 0\else 8\fi\expandafter\relax
    \csname\number\numexpr #5-4*#4\relax\expandafter\endcsname
    \number\numexpr #6-16\expandafter\relax
    \number\numexpr #7-8*#6\relax
  }%
%    \end{macrocode}
%
%    Surrogates: 4 octets in UTF-8, a surrogate pair in UTF-16.
%    High surrogate range: U+D800--U+DBFF, low surrogate range:
%    U+DC00-U+DFFF.
%
%\begin{quote}
%\begin{verbatim}
%UTF-8:  11110uuu     10uuzzzz     10yyyyyy     10xxxxxx
%wwww =  uuuuu - 1
%UTF-16: 110110ww     wwzzzzyy     110111yy     yyxxxxxx
%octal:  011 011 0ww  0ww zzz zyy  011 011 1yy  0yy xxx xxx
%\end{verbatim}
%\end{quote}
%    \begin{macrocode}
  \def\HyPsd@UTFviii@four#1#2{%
    \expandafter\HyPsd@@UTFviii@four\number
    \numexpr-1+(`#1-240)*4+\dimexpr.0625\dimexpr`#2sp-128sp%
    \expandafter|\number
    \numexpr`#2-16*\dimexpr.0625\dimexpr`#2sp|%
  }%
  \def\HyPsd@@UTFviii@four#1|#2|#3{%
    \933\number\dimexpr.25\dimexpr#1sp\relax\relax
    \csname\number\numexpr#1-4*\dimexpr.25\dimexpr#1sp\endcsname
    \ifodd#2 %
      \number\numexpr(#2-1)/2\relax
    \else
      \number\numexpr#2/2\relax
    \fi
    \number\numexpr\ifodd#2 4+\fi
        \dimexpr.0625\dimexpr`#3sp-128sp\relax\relax\relax
    \933%
    \expandafter\HyPsd@@@UTFviii@four\number
    \numexpr`#3-16*\dimexpr.0625\dimexpr`#3sp|%
  }%
  \def\HyPsd@@@UTFviii@four#1|#2{%
    \number\numexpr4+\dimexpr.25\dimexpr#1sp\relax\relax\relax
    \csname\number\numexpr#1-4*\dimexpr.25\dimexpr#1sp\endcsname
    \number\dimexpr.125\dimexpr`#2sp-128sp\relax\relax
    \number\numexpr`#2-8*\dimexpr.125\dimexpr`#2sp\relax\relax\relax
  }%
%    \end{macrocode}
%
%    Input encoding |utf8x| of package |ucs| uses macro \cmd{\unichar}.
%    Values greater than |"FFFF| are not supported.
%    \begin{macrocode}
  \def\HyPsd@unichar#1{%
    \ifHy@unicode
      \ifnum#1>"10FFFF %
        \HyPsd@UnicodeReplacementCharacter % illegal
      \else
        \ifnum#1>"FFFF %
%    \end{macrocode}
%    High-surrogate code point.
%    (|"D800| = |55296|, |\p@| = |1pt| = |65536sp|)
%    \begin{macrocode}
          \expandafter\HyPsd@unichar\expandafter{%
            \number\numexpr 55296+%
                \dimexpr.0009765625\dimexpr\number#1sp-\p@
                \relax\relax\relax
          }%
%    \end{macrocode}
%    Low-surrogate code point.
%    (|"DC00| = 56320, |"DC00| - |65536| = |-9216|)
%    \begin{macrocode}
          \expandafter\HyPsd@unichar\expandafter{%
            \number\numexpr#1-9216%
                -1024*\dimexpr.0009765625\dimexpr\number#1sp-\p@
                \relax\relax\relax
        }%
        \else
          \ifnum#1>"7FF %
            \9%
            \expandafter\HyPsd@unichar@first@byte\expandafter{%
              \number
              \dimexpr.00390625\dimexpr\number#1sp\relax\relax
            }%
          \else
            \8%
            \number\dimexpr.00390625\dimexpr\number#1sp\relax\relax
          \fi
          \expandafter\HyPsd@unichar@second@byte\expandafter{%
            \number
            \numexpr#1-256*\number
                \dimexpr.00390625\dimexpr\number#1sp\relax\relax\relax
          }%
        \fi
      \fi
    \else
      .% unsupported (Unicode -> PDF Doc Encoding)
    \fi
  }%
  \def\HyPsd@UnicodeReplacementCharacter{\9377\375}%
  \def\HyPsd@unichar@first@byte#1{%
    \number\dimexpr.015625\dimexpr#1sp\relax\relax
    \expandafter\HyPsd@unichar@octtwo\expandafter{%
      \number
      \numexpr#1-64*\number\dimexpr.015625\dimexpr#1sp%
      \relax\relax\relax
    }%
  }%
  \def\HyPsd@unichar@second@byte#1{%
    \csname\number\dimexpr.015625\dimexpr#1sp\relax\relax\endcsname
    \expandafter\HyPsd@unichar@octtwo\expandafter{%
      \number
      \numexpr#1-64*\number\dimexpr.015625\dimexpr#1sp%
      \relax\relax\relax
    }%
  }%
  \def\HyPsd@unichar@octtwo#1{%
    \number\dimexpr.125\dimexpr#1sp\relax\relax
    \number\numexpr#1-8*\number\dimexpr.125\dimexpr#1sp%
    \relax\relax\relax
  }%
%    \end{macrocode}
%
%    \begin{macro}{\HyPsd@utf@viii@undeferr}
%    \cs{utf@viii@undeferr} comes from file |utf8x.def| from
%    package |ucs|.
%    \begin{macrocode}
\def\HyPsd@utf@viii@undeferr#1#2#3#4#5#6{%
  \ifx\@gobble#1%
  \else
    [Please insert \textbackslash PrerenderUnicode%
    \textbraceleft#1\textbraceright\space
    into preamble]%
  \fi
}%
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Support for die faces (ifsym et. al.)}
%
%    \begin{macro}{\HyPsd@DieFace}
%    Die faces are provided by
%    \begin{quote}
%      \begin{tabular}{@{}ll@{}}
%        Package & Macro\\
%        \hline
%        ifsym & \cs{Cube}\\
%        epsdice & \cs{epsdice}\\
%        hhcount & \cs{fcdice}
%      \end{tabular}
%    \end{quote}
%    \cs{Cube} and \cs{epsdice} restrict the range to the
%    numbers one to six. \cs{fcdice} generates for larger numbers
%    several dice faces with the sum matching the number.
%    The implementation for the PDF strings follows \cs{fcdice}.
%    \begin{macrocode}
\def\HyPsd@DieFace#1{%
  \ifHy@unicode
    \ifnum#1<1 %
      \HyPsd@UnicodeReplacementCharacter
    \else
      \ifnum#1>6 %
        \9046\205%
        \expandafter\expandafter\expandafter
        \HyPsd@DieFaceLarge\intcalcSub{#1}{6}!%
      \else
        \9046\20\intcalcDec{#1}%
      \fi
    \fi
  \else
    .% Die faces are not part of PDFDocEncoding
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@DieFaceLarge}
%    \begin{macrocode}
\def\HyPsd@DieFaceLarge#1!{%
  \ifnum#1>6 %
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {%
    \9046\205%
    \expandafter\expandafter\expandafter
    \HyPsd@DieFaceLarge\IntCalcSub#1!6!!%
  }{%
    \9046\20\IntCalcDec#1!%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Support for moon phases of package china2e}
%
%    \begin{macrocode}
\def\HyPsd@MoonPha#1{%
  \ifcase\intcalcNum{#1} %
    \HyPsd@UnicodeReplacementCharacter
  \or % 1
% U+1F31A NEW MOON WITH FACE; \MoonPha{1} (china2e)
    \9330\074\9337\032%
  \or % 2
    \HyPsd@UnicodeReplacementCharacter
  \or % 3
% U+1F31D FULL MOON WITH FACE; \MoonPha{3} (china2e)
    \9330\074\9337\035%
  \or % 4
% U+1F31C LAST QUARTER MOON WITH FACE; \MoonPha{4} (china2e)
    \9330\074\9337\034%
  \else
    \HyPsd@UnicodeReplacementCharacter
  \fi
}
%* \HyPsd@MoonPha -> \MoonPha
%    \end{macrocode}
%
% \subsubsection{Support for package pifont}
%
%    \begin{macro}{\HyPsd@ding}
%    \begin{macrocode}
\def\HyPsd@ding#1{%
  \ifHy@unicode
    \ifnum#1<32 %
      \HyPsd@UnicodeReplacementCharacter
    \else
      \ifnum#1>254 %
        \HyPsd@UnicodeReplacementCharacter
      \else
        \ifnum#1<127 %
          \expandafter\expandafter\expandafter
          \HyPsd@@ding\intcalcNum{#1}!%
        \else
          \ifnum#1>160 %
            \expandafter\expandafter\expandafter
            \HyPsd@@ding\intcalcNum{#1}!%
          \else
            \HyPsd@UnicodeReplacementCharacter
          \fi
        \fi
      \fi
    \fi
  \else
    .% Dingbats are not part of PDFDocEncoding
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPsd@@ding}
%    \begin{macrocode}
\def\HyPsd@@ding#1!{%
  \@ifundefined{HyPsd@ding@#1}{%
    \ifnum#1<127 %
      \9047%
      \HyPsd@DecimalToOctalSecond{\IntCalcSub#1!32!}%
    \else
      \ifnum#1<168 %
        \9047\14\IntCalcSub#1!160!%
      \else
        \ifnum#1>181 %
          \9047\HyPsd@DecimalToOctalSecond{\IntCalcSub#1!64!}%
        \else
          % 172..181 -> U+2460..U+2469
          \9044\HyPsd@DecimalToOctalSecond{\IntCalcSub#1!76!}%
        \fi
      \fi
    \fi
  }{%
    \csname HyPsd@ding@#1\endcsname
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\@namedef{HyPsd@ding@32}{\space}
% U+260E BLACK TELEPHONE
\@namedef{HyPsd@ding@37}{\9046\016}% U+260E
% U+261B BLACK RIGHT POINTING INDEX
\@namedef{HyPsd@ding@42}{\9046\033}% U+261B
% U+261E WHITE RIGHT POINTING INDEX
\@namedef{HyPsd@ding@43}{\9046\036}% U+261E
% U+2605 BLACK STAR
\@namedef{HyPsd@ding@72}{\9046\005}% U+2605
% U+25CF BLACK CIRCLE
\@namedef{HyPsd@ding@108}{\9045\317}% U+25CF
% U+25A0 BLACK SQUARE
\@namedef{HyPsd@ding@110}{\9045\240}% U+25A0
% U+25B2 BLACK UP-POINTING TRIANGLE
\@namedef{HyPsd@ding@115}{\9045\262}% U+25B2
% U+25BC BLACK DOWN-POINTING TRIANGLE
\@namedef{HyPsd@ding@116}{\9045\274}% U+25BC
% U+25C6 BLACK DIAMOND
\@namedef{HyPsd@ding@117}{\9045\306}% U+25C6
% U+25D7 RIGHT HALF BLACK CIRCLE
\@namedef{HyPsd@ding@119}{\9045\327}% U+25D7
\@namedef{HyPsd@ding@168}{\textclubsuitblack}%
\@namedef{HyPsd@ding@169}{\textdiamondsuitblack}%
\@namedef{HyPsd@ding@170}{\textheartsuitblack}%
\@namedef{HyPsd@ding@171}{\textspadesuitblack}%
\@namedef{HyPsd@ding@213}{\textrightarrow}%
\@namedef{HyPsd@ding@214}{\textleftrightarrow}%
\@namedef{HyPsd@ding@215}{\textupdownarrow}%
\@namedef{HyPsd@ding@240}{\HyPsd@UnicodeReplacementCharacter}
%    \end{macrocode}
%
% \section{Support of other packages}
%
%
% \subsection{Package subfigure}
%    Added fix for version 2.1. Here \cmd{\sub@label} is defined.
%    \begin{macrocode}
\@ifpackageloaded{subfigure}{%
  \@ifundefined{sub@label}{%
    \Hy@hypertexnamesfalse
  }{%
    \renewcommand*{\sub@label}[1]{%
      \@bsphack
      \subfig@oldlabel{#1}%
      \if@filesw
        \begingroup
          \edef\@currentlabstr{%
            \expandafter\strip@prefix\meaning\@currentlabelname
          }%
          \protected@write\@auxout{}{%
            \string\newlabel{sub@#1}{%
              {\@nameuse{@@thesub\@captype}}%
              {\thepage}%
              {%
                \expandafter\strip@period\@currentlabstr
                \relax.\relax\@@@%
              }%
              {\@currentHref}%
              {}%
            }%
          }%
        \endgroup
      \fi
      \@esphack
    }%
  }%
}{}
%    \end{macrocode}
%
% \subsection{Package xr and xr-hyper}
%
% The beta version of xr that supports \cmd{\XR@addURL} is called
% \verb|xr-hyper|.
% If reading external aux files check whether they have a non zero
% fourth field in |\newlabel| and if so, add the URL as the fifth field.
% Change 2023-05-14: xr-hyper adds the field.
%
%
%    \begin{macrocode}
\def\Hy@true{true}
\def\Hy@false{false}
%    \end{macrocode}
%
%    Providing dummy definitions.
%    \begin{macrocode}
\let\literalps@out\@gobble
\newcommand\pdfbookmark[3][]{}
\def\Acrobatmenu#1#2{\leavevmode#2}
\def\Hy@writebookmark#1#2#3#4#5{}%
%    \end{macrocode}
%
% \section{Help macros for links}
% Anchors get created on the baseline of where they occur.   If an
% XYZ PDF view is set, this means that the link places the top of the
% screen \emph{on the baseline} of the target. If this is an equation,
% for instance, it means that you cannot see anything. Some links, of
% course, are created at the start of environments, and so it works. To
% allow for this, anchors are raised, where possible, by some small
% amount. This defaults to |\baselineskip|, but users can set it to
% something else in two ways (thanks to Heiko Oberdiek for suggesting this):
% \begin{enumerate}
% \item Redefine |\HyperRaiseLinkDefault| to be eg the height of a |\strut|
% \item Redefine  |\HyperRaiseLinkHook| to do something complicated;
%  it must give a value to |\HyperRaiseLinkLength|, which is what
%  actually gets used
% \end{enumerate}
%    \begin{macrocode}
\let\HyperRaiseLinkHook\@empty
\def\HyperRaiseLinkDefault{\baselineskip}
%    \end{macrocode}
%    |\HyperRaiseLinkHook| allows the user to reassign
%    |\HyperRaiseLinkLength|.
%    \begin{macrocode}
\newcount\Hy@SavedSpaceFactor
\def\Hy@SaveSpaceFactor{%
  \global\Hy@SavedSpaceFactor=\ifhmode\spacefactor\else\z@\fi
}
\def\Hy@RestoreSpaceFactor{%
  \relax
  \ifhmode
    \ifnum\Hy@SavedSpaceFactor>\z@
      \spacefactor=\Hy@SavedSpaceFactor
    \fi
  \fi
}
\def\Hy@SaveSavedSpaceFactor{%
  \edef\Hy@RestoreSavedSpaceFactor{%
    \global\Hy@SavedSpaceFactor=\the\Hy@SavedSpaceFactor\relax
  }%
}
%    \end{macrocode}
% Packages like varwidth need an option to change the handling in vmode.
% (Issue \#204). With a new format we therefore insert a socket.
%    \begin{macrocode}
\NewSocket{hyp/raisedlink}{1}
\def\Hy@raisedlink#1{%
  \ifvmode
    \UseSocket{hyp/raisedlink}{#1}%
  \else
    \Hy@SaveSpaceFactor
    \penalty\@M
    \smash{%
      \begingroup
        \let\HyperRaiseLinkLength\@tempdima
        \setlength\HyperRaiseLinkLength\HyperRaiseLinkDefault
        \HyperRaiseLinkHook
      \expandafter\endgroup
      \expandafter\raise\the\HyperRaiseLinkLength\hbox{%
        \Hy@RestoreSpaceFactor
        #1%
        \Hy@SaveSpaceFactor
      }%
    }%
    \Hy@RestoreSpaceFactor
  \fi
}
%    \end{macrocode}
%
%    \begin{macro}{\Hy@SaveLastskip}
%    \begin{macro}{\Hy@RestoreLastskip}
%    Inserting a \cmd{\special} command to set a
%    destination destroys the \cmd{\lastskip} value.
%
%    \begin{macrocode}
\def\Hy@SaveLastskip{%
  \let\Hy@RestoreLastskip\relax
  \ifvmode
    \ifdim\lastskip=\z@
      \ifnum\lastnodetype=1 %
        \let\Hy@RestoreLastskip\relax
      \else
        \let\Hy@RestoreLastskip\nobreak
      \fi
    \else
      \begingroup
        \skip@=-\lastskip
        \edef\x{%
          \endgroup
          \def\noexpand\Hy@RestoreLastskip{%
            \noexpand\ifvmode
              \noexpand\nobreak
              \vskip\the\skip@
              \vskip\the\lastskip\relax
            \noexpand\fi
          }%
        }%
      \x
    \fi
  \else
    \ifhmode
      \ifdim\lastskip=\z@
        \let\Hy@RestoreLastskip\nobreak
      \else
        \begingroup
          \skip@=-\lastskip
          \edef\x{%
            \endgroup
            \def\noexpand\Hy@RestoreLastskip{%
              \noexpand\ifhmode
                \noexpand\nobreak
                \hskip\the\skip@
                \hskip\the\lastskip\relax
              \noexpand\fi
            }%
          }%
        \x
      \fi
    \fi
  \fi
}%
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
% \section{Options}
%
%    \begin{macrocode}
\SetupKeyvalOptions{%
  family=Hyp,%
  prefix=HyOpt%
}
%    \end{macrocode}
%
% \subsection{Help macros}
% Package like hyperxmp want to retrieve the value of keys like |pdfauthor|.
% To avoid that we have two parallel interfaces we provide the interface from
% the pdfmanagement/ltdocinit if it doesn't exist.
%
%    \begin{macro}{\AddToDocumentProperties}
%    \begin{macro}{\GetDocumentProperties}
%    \begin{macrocode}
\ExplSyntaxOn
\@ifundefined{AddToDocumentProperties}
  {
   \prop_new:N \g__hyp_documentproperties_prop
   \NewDocumentCommand\AddToDocumentProperties{O{\@currname}mm}
    {
      \exp_args:NNx
      \prop_gput:Nnn \g__hyp_documentproperties_prop
        {
          \tl_if_blank:eTF {#1}{top-level/}{#1/} #2
        }
        { #3}
    }
   \NewExpandableDocumentCommand\GetDocumentProperties{m}
     {
       \prop_item:Nn \g__hyp_documentproperties_prop {#1}
     }
  }{}
\ExplSyntaxOff
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%    \begin{macro}{\IfHyperBooleanExists}
%    \begin{macrocode}
\def\IfHyperBooleanExists#1{%
  \@ifundefined{Hy@#1false}\@secondoftwo{%
    \@ifundefined{KV@Hyp@#1@default}\@secondoftwo\@firstoftwo
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\@namedef{KV@Hyp@stoppedearly@default}{}
%    \end{macrocode}
%
%    \begin{macro}{\IfHyperBoolean}
%    \begin{macrocode}
\def\IfHyperBoolean#1{%
  \IfHyperBooleanExists{#1}{%
    \csname ifHy@#1\endcsname
      \expandafter\@firstoftwo
    \else
      \expandafter\@secondoftwo
    \fi
  }\@secondoftwo
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Hy@boolkey}
%    \begin{macrocode}
\def\Hy@boolkey#1#2{%
  \edef\Hy@tempa{#2}%
  \lowercase\expandafter{%
    \expandafter\def\expandafter\Hy@tempa\expandafter{\Hy@tempa}%
  }%
  \ifx\Hy@tempa\@empty
    \let\Hy@tempa\Hy@true
  \fi
  \ifx\Hy@tempa\Hy@true
  \else
    \ifx\Hy@tempa\Hy@false
    \else
      \let\Hy@tempa\relax
    \fi
  \fi
  \ifx\Hy@tempa\relax
    \Hy@WarnOptionValue{#2}{#1}{`true' or 'false'}%
  \else
    \Hy@Info{Option `#1' set `\Hy@tempa'}%
    \csname Hy@#1\Hy@tempa\endcsname
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@WarnOptionValue}
%    \begin{macrocode}
\def\Hy@WarnOptionValue#1#2#3{%
  \Hy@Warning{%
    Unexpected value `#1'\MessageBreak
    of option `#2' instead of\MessageBreak
    #3%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Hy@DisableOption}
%    \begin{macrocode}
\def\Hy@DisableOption#1{%
  \@ifundefined{KV@Hyp@#1@default}{%
    \define@key{Hyp}{#1}%
  }{%
    \define@key{Hyp}{#1}[]%
  }%
  {\Hy@WarnOptionDisabled{#1}}%
}

%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Hy@WarnOptionDisabled}
%    \begin{macrocode}
\def\Hy@WarnOptionDisabled#1{%
  \Hy@Warning{%
    Option `#1' has already been used,\MessageBreak
    setting the option has no effect%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Hy@CheckOptionValue}
%    Some options take a string value out of a limited set of values.
%    Macro \cs{Hy@CheckOptionValue} checks whether the given value |#1|
%    for option |#2| is a member of the value list |#3|.
%    \begin{macrocode}
\def\Hy@CheckOptionValue#1#2#3{%
  \begingroup
    \edef\x{#1}%
    \@onelevel@sanitize\x
    \let\y=y%
    \def\do##1##2{%
      \def\z{##1}%
      \@onelevel@sanitize\z
      \ifx\x\z
        \let\y=n%
        \let\do\@gobbletwo
      \fi
    }%
    #3%
    \ifx\y y%
      \def\do##1##2{%
        * `##1'%
        \ifx\\##2\\\else\space(##2)\fi
        \MessageBreak
      }%
      \Hy@Warning{%
        Values of option `#2':\MessageBreak
        #3%
        * An empty value disables the option.\MessageBreak
        Unknown value `\x'%
      }%
    \fi
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Hy@DefNameKey}
%    \noindent
%    |#1|: option name\\
%    |#2|: \cs{do} list with known values, first
%          argument of \cs{do} is value, second argument is a comment.
%    \begin{macrocode}
\def\Hy@DefNameKey#1{%
  \expandafter\Hy@@DefNameKey\csname @#1\endcsname{#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@@DefNameKey}
%    \noindent
%    |#1|: macro for value storage\\
%    |#2|: option name\\
%    |#3|: \cs{do} list with known values.
%    \begin{macrocode}
\def\Hy@@DefNameKey#1#2#3{%
  \define@key{Hyp}{#2}{%
    \edef#1{##1}%
    \ifx#1\@empty
    \else
      \Hy@CheckOptionValue{##1}{#2}{#3}%
    \fi
  }%
  \let#1\@empty
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@UseNameKey}
%    \begin{macrocode}
\def\Hy@UseNameKey#1#2{%
  \ifx#2\@empty
  \else
    /#1/#2%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Defining the options}
%    \begin{macrocode}
\define@key{Hyp}{implicit}[true]{%
  \Hy@boolkey{implicit}{#1}%
}
\define@key{Hyp}{draft}[true]{%
  \Hy@boolkey{draft}{#1}%
}
\define@key{Hyp}{final}[true]{%
  \Hy@boolkey{final}{#1}%
}
\let\KV@Hyp@nolinks\KV@Hyp@draft
%    \end{macrocode}
%    \begin{macrocode}
\def\Hy@ObsoletePaperOption#1{%
  \Hy@WarningNoLine{%
    Option `#1' is no longer used%
  }%
  \define@key{Hyp}{#1}[true]{}%
}
\def\Hy@temp#1{%
  \define@key{Hyp}{#1}[true]{%
    \Hy@ObsoletePaperOption{#1}%
  }%
}
\Hy@temp{a4paper}
\Hy@temp{a5paper}
\Hy@temp{b5paper}
\Hy@temp{letterpaper}
\Hy@temp{legalpaper}
\Hy@temp{executivepaper}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Hyp}{setpagesize}[true]{%
  \Hy@boolkey{setpagesize}{#1}%
}
\define@key{Hyp}{debug}[true]{%
  \Hy@boolkey{debug}{#1}%
}
\define@key{Hyp}{linktocpage}[true]{%
  \Hy@boolkey{linktocpage}{#1}%
  \ifHy@linktocpage
    \let\Hy@linktoc\Hy@linktoc@page
  \else
    \let\Hy@linktoc\Hy@linktoc@section
  \fi
}
\chardef\Hy@linktoc@none=0 %
\chardef\Hy@linktoc@section=1 %
\chardef\Hy@linktoc@page=2 %
\chardef\Hy@linktoc@all=3 %
\ifHy@linktocpage
  \let\Hy@linktoc\Hy@linktoc@page
\else
  \let\Hy@linktoc\Hy@linktoc@section
\fi
\define@key{Hyp}{linktoc}{%
  \@ifundefined{Hy@linktoc@#1}{%
    \Hy@Warning{%
      Unexpected value `#1' of\MessageBreak
      option `linktoc' instead of `none',\MessageBreak
      `section', `page' or `all'%
    }%
  }{%
    \expandafter\let\expandafter\Hy@linktoc
    \csname Hy@linktoc@#1\endcsname
  }%
}
\define@key{Hyp}{extension}{\def\XR@ext{#1}}
\let\XR@ext\relax
\define@key{Hyp}{verbose}[true]{%
  \Hy@boolkey{verbose}{#1}%
}
%    \end{macrocode}
% If we are going to PDF via HyperTeX |\special| commands,
% the dvips (-z option)  processor does not know
% the \emph{height} of a link, as it works solely on the
% position of the closing |\special|. If we use this option,
% the |\special| is raised up by the right amount, to fool
% the dvi processor.
%    \begin{macrocode}
\define@key{Hyp}{raiselinks}[true]{%
  \Hy@boolkey{raiselinks}{#1}%
}
%    \end{macrocode}
% Most PDF-creating drivers do not allow links to be broken
%    \begin{macrocode}
\def\Hy@setbreaklinks#1{%
  \csname breaklinks#1\endcsname
}
%    \end{macrocode}
%    \begin{macrocode}
\def\Hy@breaklinks@unsupported{%
  \ifx\Hy@setbreaklinks\@gobble
    \ifHy@breaklinks
      \Hy@WarningNoLine{%
        You have enabled option `breaklinks'.\MessageBreak
        But driver `\Hy@driver.def' does not support this.\MessageBreak
        Expect trouble with the link areas of broken links%
      }%
    \fi
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Hyp}{breaklinks}[true]{%
  \Hy@boolkey{breaklinks}{#1}%
  \let\Hy@setbreaklinks\@gobble
}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Hyp}{localanchorname}[true]{%
  \Hy@WarningNoLine{%
        Option `localanchorname' is deprecated%
      }%
  \Hy@boolkey{localanchorname}{#1}%
}
%    \end{macrocode}
% Determines whether an automatic anchor is put on each page
%    \begin{macrocode}
\define@key{Hyp}{pageanchor}[true]{%
  \Hy@boolkey{pageanchor}{#1}%
}
%    \end{macrocode}
% Are the page links done as plain arabic numbers, or do
% they follow the formatting of the package? The latter loses
% if you put in typesetting like |\textbf| or the like.
%    \begin{macrocode}
\define@key{Hyp}{plainpages}[true]{%
  \Hy@boolkey{plainpages}{#1}%
}
%    \end{macrocode}
% Are the names for anchors made as per the HyperTeX system,
% or do they simply use what \LaTeX\ provides?
%    \begin{macrocode}
\define@key{Hyp}{naturalnames}[true]{%
  \Hy@boolkey{naturalnames}{#1}%
}
%    \end{macrocode}
% Completely ignore the names as per the HyperTeX system,
% and use unique counters.
%    \begin{macrocode}
\define@key{Hyp}{hypertexnames}[true]{%
  \Hy@boolkey{hypertexnames}{#1}%
}
%    \end{macrocode}
% Currently, |dvips| doesn't allow anchors nested within targets,
% so this option tries to stop that happening. Other processors
% may be able to cope.
%    \begin{macrocode}
\define@key{Hyp}{nesting}[true]{%
  \Hy@boolkey{nesting}{#1}%
}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Hyp}{destlabel}[true]{%
  \Hy@boolkey{destlabel}{#1}%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\define@key{Hyp}{unicode}[true]{%
  \Hy@boolkey{unicode}{#1}%
  \ifHy@unicode
    \def\HyPsd@pdfencoding{unicode}%
    \HyPsd@LoadUnicode
  \else
    \def\HyPsd@pdfencoding{pdfdoc}%
  \fi
}
\Hy@AtBeginDocument{%
  \ifx\HyPsd@LoadUnicode\relax
  \else
    \def\HyPsd@LoadUnicode{%
      \Hy@Error{%
        Unicode support for bookmarks is not available.\MessageBreak
        Activate unicode support by using one of the options\MessageBreak
        `unicode', `pdfencoding=unicode', `pdfencoding=auto'\MessageBreak
        in the preamble%
      }\@ehc
      \global\let\HyPsd@LoadUnicode\relax
      \global\Hy@unicodefalse
      \global\let\Hy@unicodetrue\Hy@unicodefalse
    }%
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Hyp}{pdfencoding}{%
  \edef\HyPsd@temp{#1}%
  \ifx\HyPsd@temp\HyPsd@pdfencoding@pdfdoc
    \let\HyPsd@pdfencoding\HyPsd@temp
    \Hy@unicodefalse
  \else
    \ifcase\ifx\HyPsd@temp\HyPsd@pdfencoding@unicode
             \z@
           \else
             \ifx\HyPsd@temp\HyPsd@pdfencoding@auto
               \z@
             \else
               \@ne
             \fi
           \fi
      \let\HyPsd@pdfencoding\HyPsd@temp
      \hypersetup{unicode}%
      \ifHy@unicode
        \def\HyPsd@pdfencoding{#1}%
      \else
        \Hy@Warning{Cannot switch to unicode bookmarks}%
        \let\HyPsd@pdfencoding\HyPsd@pdfencoding@pdfdoc
      \fi
    \else
      \@onelevel@sanitize\HyPsd@temp
      \Hy@Warning{%
        Values of option `pdfencoding':\MessageBreak
        `pdfdoc', `unicode', `auto'.\MessageBreak
        Ignoring unknown value `\HyPsd@temp'%
      }%
    \fi
  \fi
}
\def\HyPsd@pdfencoding@auto{auto}
\def\HyPsd@pdfencoding@pdfdoc{pdfdoc}
\def\HyPsd@pdfencoding@unicode{unicode}
%    \end{macrocode}
% change 2020-08-14, use unicode by default:
%    \begin{macrocode}
\let\HyPsd@pdfencoding\HyPsd@pdfencoding@unicode
\HyPsd@LoadUnicode
%    \end{macrocode}
%
%    \begin{macrocode}
\define@key{Hyp}{psdextra}[true]{%
  \Hy@boolkey{psdextra}{#1}%
  \HyPsd@LoadExtra
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\hypersetup{\kvsetkeys{Hyp}}
%    \end{macrocode}
%
%    \begin{macrocode}
\newif\ifHy@setpdfversion
\define@key{Hyp}{pdfversion}{%
  \@ifundefined{Hy@pdfversion@#1}{%
    \PackageWarning{hyperref}{%
      Unsupported PDF version `#1'.\MessageBreak
      Valid values: 1.2-1.7, 2.0%
    }%
  }{%
    \Hy@setpdfversiontrue
    \@nameuse{Hy@pdfversion@#1}%
  }%
}
%    \end{macrocode}
% \verb|\Hy@pdfminorversion| already used elsewhere to denote \verb|\pdfminorversion|
% or \verb|\pdfvariable majorversion}| so introduce new names here.
%    \begin{macrocode}
\@namedef{Hy@pdfversion@1.2}{\def\Hy@pdf@majorversion{1}\def\Hy@pdf@minorversion{2}}%
\@namedef{Hy@pdfversion@1.3}{\def\Hy@pdf@majorversion{1}\def\Hy@pdf@minorversion{3}}%
\@namedef{Hy@pdfversion@1.4}{\def\Hy@pdf@majorversion{1}\def\Hy@pdf@minorversion{4}}%
\@namedef{Hy@pdfversion@1.5}{\def\Hy@pdf@majorversion{1}\def\Hy@pdf@minorversion{5}}%
\@namedef{Hy@pdfversion@1.6}{\def\Hy@pdf@majorversion{1}\def\Hy@pdf@minorversion{6}}%
\@namedef{Hy@pdfversion@1.7}{\def\Hy@pdf@majorversion{1}\def\Hy@pdf@minorversion{7}}%
\@namedef{Hy@pdfversion@2.0}{\def\Hy@pdf@majorversion{2}\def\Hy@pdf@minorversion{0}}%
\def\Hy@pdf@majorversion{1}\def\Hy@pdf@minorversion{7}
%    \end{macrocode}
% Legacy name, earlier releases assumed  1.x
%    \begin{macrocode}
\let\Hy@pdfversion\Hy@pdf@minorversion
\def\Hy@pdf@majorminor@version{\numexpr100*\Hy@pdf@majorversion+\Hy@pdf@minorversion\relax}
\def\Hy@pdfmajorminor@version{\numexpr100*\Hy@pdfmajorversion+\Hy@pdfminorversion\relax}
%    \end{macrocode}
% if \verb|pdfminorversion| is defined, make sure \verb|pdfmajorversion| is too.
%    \begin{macrocode}
\@ifundefined{pdfminorversion}{}{%
\@ifundefined{pdfmajorversion}{%
\newcount\pdfmajorversion
\pdfmajorversion=1
}{}%
}
\ifx\pdfmajorversion\@undefined\else
\def\Hy@pdfmajorversion{\pdfmajorversion}
\fi
%    \end{macrocode}
%
% \section{Options for different drivers}\label{drivers}
%
%    \begin{macrocode}
\newif\ifHy@DviMode
\let\Hy@DviErrMsg\@empty
\ifpdf
  \def\Hy@DviErrMsg{pdfTeX or LuaTeX is running in PDF mode}%
\else
  \ifxetex
    \def\Hy@DviErrMsg{XeTeX is running}%
  \else
    \ifvtex
      \ifnum\OpMode=\z@
        \Hy@DviModetrue
      \else
        \def\Hy@DviErrMsg{VTeX is running, but not in DVI mode}%
      \fi
    \else
      \Hy@DviModetrue
    \fi
  \fi
\fi
\def\HyOpt@CheckDvi#1{%
  \ifHy@DviMode
    \expandafter\@firstofone
  \else
    \Hy@Error{%
      Wrong DVI mode driver option `#1',\MessageBreak
      because \Hy@DviErrMsg
    }\@ehc
    \expandafter\@gobble
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareVoidOption{tex4ht}{%
  \Hy@texhttrue
  \kvsetkeys{Hyp}{colorlinks=true}%
  \def\BeforeTeXIVht{\RequirePackage{color}}%
  \def\Hy@driver{htex4ht}%
  \def\MaybeStopEarly{%
    \Hy@Message{Stopped early}%
    \Hy@AtBeginDocument{%
      \PDF@FinishDoc
      \gdef\PDF@FinishDoc{}%
    }%
    \endinput
  }%
}
\DeclareVoidOption{pdftex}{%
  \ifpdf
    \def\Hy@driver{hpdftex}%
    \PassOptionsToPackage{pdftex}{color}%
  \else
    \Hy@Error{%
      Wrong driver option `pdftex',\MessageBreak
      because pdfTeX in PDF mode is not detected%
    }\@ehc
  \fi
}
\DeclareVoidOption{luatex}{%
  \ifpdf
    \ifx\pdfextension\@undefined
      \def\Hy@driver{hpdftex}%
      \PassOptionsToPackage{pdftex}{color}%
    \else
      \def\Hy@driver{hluatex}%
      \PassOptionsToPackage{luatex}{color}%
    \fi
  \else
    \Hy@Error{%
      Wrong driver option `luatex',\MessageBreak
      because luaTeX in PDF mode is not detected%
    }\@ehc
  \fi
}
\DeclareVoidOption{nativepdf}{%
  \HyOpt@CheckDvi{nativepdf}{%
    \def\Hy@driver{hdvips}%
    \PassOptionsToPackage{dvips}{color}%
  }%
}
\DeclareVoidOption{dvipdfm}{%
  \HyOpt@CheckDvi{dvipdfm}{%
    \def\Hy@driver{hdvipdfm}%
  }%
}
\DeclareVoidOption{dvipdfmx}{%
  \HyOpt@CheckDvi{dvipdfmx}{%
    \def\Hy@driver{hdvipdfm}%
    \PassOptionsToPackage{dvipdfmx}{color}%
  }%
}
\define@key{Hyp}{dvipdfmx-outline-open}[true]{%
  \expandafter\ifx\csname if#1\expandafter\endcsname
                  \csname iftrue\endcsname
    \chardef\SpecialDvipdfmxOutlineOpen\@ne
  \else
    \chardef\SpecialDvipdfmxOutlineOpen\z@
  \fi
}
\DeclareVoidOption{xetex}{%
  \ifxetex
    \def\Hy@driver{hxetex}%
  \else
    \Hy@Error{%
      Wrong driver option `xetex',\MessageBreak
      because XeTeX is not detected%
    }\@ehc
  \fi
}
\DeclareVoidOption{pdfmark}{%
  \HyOpt@CheckDvi{pdfmark}{%
    \def\Hy@driver{hdvips}%
  }%
}
\DeclareVoidOption{dvips}{%
  \HyOpt@CheckDvi{dvips}{%
    \def\Hy@driver{hdvips}%
    \PassOptionsToPackage{dvips}{color}%
  }%
}
\DeclareVoidOption{hypertex}{%
  \HyOpt@CheckDvi{hypertex}{%
    \def\Hy@driver{hypertex}%
  }%
}
\let\Hy@MaybeStopNow\relax
\DeclareVoidOption{vtex}{%
  \ifvtex
    \ifnum 0\ifnum\OpMode<1 1\fi \ifnum\OpMode>3 1\fi =0 %
      \def\Hy@driver{hvtex}%
    \else
      \ifnum\OpMode=10\relax
        \def\Hy@driver{hvtexhtm}%
        \def\MaybeStopEarly{%
           \Hy@Message{Stopped early}%
           \Hy@AtBeginDocument{%
             \PDF@FinishDoc
             \gdef\PDF@FinishDoc{}%
           }%
           \endinput
        }%
      \else
        \Hy@Error{%
          Wrong driver option `vtex',\MessageBreak
          because of wrong OpMode (\the\OpMode)%
        }\@ehc
      \fi
    \fi
  \else
    \Hy@Error{%
      Wrong driver option `vtex',\MessageBreak
      because VTeX is not running%
    }\@ehc
  \fi
}
\DeclareVoidOption{vtexpdfmark}{%
  \ifvtex
    \ifnum 0\ifnum\OpMode<1 1\fi \ifnum\OpMode>3 1\fi =0 %
      \def\Hy@driver{hvtexmrk}%
    \else
      \Hy@Error{%
        Wrong driver option `vtexpdfmark',\MessageBreak
        because of wrong OpMode (\the\OpMode)%
      }\@ehc
    \fi
  \else
    \Hy@Error{%
      Wrong driver option `vtexpdfmark,\MessageBreak
      because VTeX is not running%
    }\@ehc
  \fi
}
\DeclareVoidOption{dviwindo}{%
  \HyOpt@CheckDvi{dviwindo}{%
    \def\Hy@driver{hdviwind}%
    \kvsetkeys{Hyp}{colorlinks}%
    \PassOptionsToPackage{dviwindo}{color}%
  }%
}
\DeclareVoidOption{dvipsone}{%
  \HyOpt@CheckDvi{dvipsone}{%
    \def\Hy@driver{hdvipson}%
    \PassOptionsToPackage{dvipsone}{color}%
  }%
}
\DeclareVoidOption{textures}{%
  \HyOpt@CheckDvi{textures}{%
    \def\Hy@driver{htexture}%
  }%
}
\DeclareVoidOption{latex2html}{%
  \Hy@Warning{Option `latex2html` is obsolete. \MessageBreak
   A current html.sty will do all necessary (re)definitions%
  }%
}
\DeclareVoidOption{hitex}{%
  \ifhint
   \IfFileExists{hhitex.def}
     {\def\Hy@driver{hhitex}}%
     {\Hy@Warning{%
      Missing driver file `hhitex.def',\MessageBreak
      ignoring hitex driver%
     }}%
  \else
    \Hy@Error{%
      Wrong driver option `hitex',\MessageBreak
      because HiTeX is not detected%
    }\@ehc
  \fi
}
%    \end{macrocode}
% No more special treatment for ps2pdf. Let it sink or swim.
%    \begin{macrocode}
\DeclareVoidOption{ps2pdf}{%
  \HyOpt@CheckDvi{ps2pdf}{%
    \def\Hy@driver{hdvips}%
    \PassOptionsToPackage{dvips}{color}%
  }%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\let\HyOpt@DriverFallback\@empty
\define@key{Hyp}{driverfallback}{%
  \ifHy@DviMode
    \def\HyOpt@DriverFallback{#1}%
    \Hy@Match\HyOpt@DriverFallback{}{%
      ^(|dvipdfm|dvipdfmx|dvips|dvipsone|dviwindo|hypertex|ps2pdf|%
       latex2html|tex4ht)$%
    }{}{%
      \Hy@Warning{%
        Invalid driver `#1' for option\MessageBreak
        `driverfallback'%
      }%
      \let\HyOpt@DriverFallback\@empty
    }%
  \fi
}
%    \end{macrocode}
%
%    \begin{macrocode}
\IfPDFManagementActiveTF
 {\def\HyOpt@CustomDriver{hgeneric-testphase}}
 {\let\HyOpt@CustomDriver\@empty}

\define@key{Hyp}{customdriver}{%
  \IfFileExists{#1.def}{%
    \def\HyOpt@CustomDriver{#1}%
  }{%
    \Hy@Warning{%
      Missing driver file `#1.def',\MessageBreak
      ignoring custom driver%
    }%
  }%
}
%    \end{macrocode}
%
% \section{Options to add extra features}\label{features}
%    Make included figures (assuming they use the standard graphics
%     package) be hypertext links. Off by default. Needs more work.
%    \begin{macrocode}
\define@key{Hyp}{hyperfigures}[true]{%
  \Hy@boolkey{hyperfigures}{#1}%
}
%    \end{macrocode}
%
%    The automatic footnote linking can be disabled
%    by option hyperfootnotes.
%    \begin{macrocode}
\define@key{Hyp}{hyperfootnotes}[true]{%
  \Hy@boolkey{hyperfootnotes}{#1}%
}
%    \end{macrocode}
%
%    Set up back-referencing to be hyper links, by page,
%     slide or section number,
%    \begin{macrocode}
\def\back@none{none}
\def\back@section{section}
\def\back@page{page}
\def\back@slide{slide}
\define@key{Hyp}{backref}[section]{%
  \lowercase{\def\Hy@tempa{#1}}%
  \ifx\Hy@tempa\@empty
    \let\Hy@tempa\back@section
  \fi
  \ifx\Hy@tempa\Hy@false
    \let\Hy@tempa\back@none
  \fi
  \ifx\Hy@tempa\back@slide
    \let\Hy@tempa\back@section
  \fi
  \ifx\Hy@tempa\back@page
    \PassOptionsToPackage{hyperpageref}{backref}%
    \Hy@backreftrue
  \else
    \ifx\Hy@tempa\back@section
      \PassOptionsToPackage{hyperref}{backref}%
      \Hy@backreftrue
    \else
      \ifx\Hy@tempa\back@none
        \Hy@backreffalse
      \else
        \Hy@WarnOptionValue{#1}{backref}{%
          `section', `slide', `page', `none',\MessageBreak
          or `false'}%
      \fi
    \fi
  \fi
}
\define@key{Hyp}{pagebackref}[true]{%
  \edef\Hy@tempa{#1}%
  \lowercase\expandafter{%
    \expandafter\def\expandafter\Hy@tempa\expandafter{\Hy@tempa}%
  }%
  \ifx\Hy@tempa\@empty
    \let\Hy@tempa\Hy@true
  \fi
  \ifx\Hy@tempa\Hy@true
    \PassOptionsToPackage{hyperpageref}{backref}%
    \Hy@backreftrue
  \else
    \ifx\Hy@tempa\Hy@false
      \Hy@backreffalse
    \else
      \Hy@WarnOptionValue{#1}{pagebackref}{`true' or `false'}%
    \fi
  \fi
}
%    \end{macrocode}
% Make index entries be links back to the relevant pages. By default
% this is turned on, but may be stopped.
%    \begin{macrocode}
\define@key{Hyp}{hyperindex}[true]{%
  \Hy@boolkey{hyperindex}{#1}%
}
%    \end{macrocode}
%    Configuration of encap char.
%    \begin{macrocode}
\define@key{Hyp}{encap}[\|]{%
  \def\HyInd@EncapChar{#1}%
}
%    \end{macrocode}
%
% \section{Language options}
%
%    The \cmd{\autoref} feature depends on the language.
%    \begin{macrocode}
\def\HyLang@afrikaans{%
  \def\equationautorefname{Vergelyking}%
  \def\footnoteautorefname{Voetnota}%
  \def\itemautorefname{Item}%
  \def\figureautorefname{Figuur}%
  \def\tableautorefname{Tabel}%
  \def\partautorefname{Deel}%
  \def\appendixautorefname{Bylae}%
  \def\chapterautorefname{Hoofstuk}%
  \def\sectionautorefname{Afdeling}%
  \def\subsectionautorefname{Subafdeling}%
  \def\subsubsectionautorefname{Subsubafdeling}%
  \def\paragraphautorefname{Paragraaf}%
  \def\subparagraphautorefname{Subparagraaf}%
  \def\FancyVerbLineautorefname{Lyn}%
  \def\theoremautorefname{Teorema}%
  \def\pageautorefname{Bladsy}%
}
\def\HyLang@english{%
  \def\equationautorefname{Equation}%
  \def\footnoteautorefname{footnote}%
  \def\itemautorefname{item}%
  \def\figureautorefname{Figure}%
  \def\tableautorefname{Table}%
  \def\partautorefname{Part}%
  \def\appendixautorefname{Appendix}%
  \def\chapterautorefname{chapter}%
  \def\sectionautorefname{section}%
  \def\subsectionautorefname{subsection}%
  \def\subsubsectionautorefname{subsubsection}%
  \def\paragraphautorefname{paragraph}%
  \def\subparagraphautorefname{subparagraph}%
  \def\FancyVerbLineautorefname{line}%
  \def\theoremautorefname{Theorem}%
  \def\pageautorefname{page}%
}
\def\HyLang@french{%
  \def\equationautorefname{\'equation}%
  \def\footnoteautorefname{note}%
  \def\itemautorefname{item}%
  \def\figureautorefname{figure}%
  \def\tableautorefname{tableau}%
  \def\partautorefname{partie}%
  \def\appendixautorefname{annexe}%
  \def\chapterautorefname{chapitre}%
  \def\sectionautorefname{section}%
  \def\subsectionautorefname{sous-section}%
  \def\subsubsectionautorefname{sous-sous-section}%
  \def\paragraphautorefname{paragraphe}%
  \def\subparagraphautorefname{sous-paragraphe}%
  \def\FancyVerbLineautorefname{ligne}%
  \def\theoremautorefname{th\'eor\`eme}%
  \def\pageautorefname{page}%
}
\def\HyLang@german{%
  \def\equationautorefname{Gleichung}%
  \def\footnoteautorefname{Fu\ss note}%
  \def\itemautorefname{Punkt}%
  \def\figureautorefname{Abbildung}%
  \def\tableautorefname{Tabelle}%
  \def\partautorefname{Teil}%
  \def\appendixautorefname{Anhang}%
  \def\chapterautorefname{Kapitel}%
  \def\sectionautorefname{Abschnitt}%
  \def\subsectionautorefname{Unterabschnitt}%
  \def\subsubsectionautorefname{Unterunterabschnitt}%
  \def\paragraphautorefname{Absatz}%
  \def\subparagraphautorefname{Unterabsatz}%
  \def\FancyVerbLineautorefname{Zeile}%
  \def\theoremautorefname{Theorem}%
  \def\pageautorefname{Seite}%
}
\def\HyLang@italian{%
  \def\equationautorefname{Equazione}%
  \def\footnoteautorefname{nota}%
  \def\itemautorefname{punto}%
  \def\figureautorefname{Figura}%
  \def\tableautorefname{Tabella}%
  \def\partautorefname{Parte}%
  \def\appendixautorefname{Appendice}%
  \def\chapterautorefname{Capitolo}%
  \def\sectionautorefname{sezione}%
  \def\subsectionautorefname{sottosezione}%
  \def\subsubsectionautorefname{sottosottosezione}%
  \def\paragraphautorefname{paragrafo}%
  \def\subparagraphautorefname{sottoparagrafo}%
  \def\FancyVerbLineautorefname{linea}%
  \def\theoremautorefname{Teorema}%
  \def\pageautorefname{Pag.\@}%
}
\def\HyLang@magyar{%
  \def\equationautorefname{Egyenlet}%
  \def\footnoteautorefname{l\'abjegyzet}%
  \def\itemautorefname{Elem}%
  \def\figureautorefname{\'Abra}%
  \def\tableautorefname{T\'abl\'azat}%
  \def\partautorefname{R\'esz}%
  \def\appendixautorefname{F\"uggel\'ek}%
  \def\chapterautorefname{fejezet}%
  \def\sectionautorefname{szakasz}%
  \def\subsectionautorefname{alszakasz}%
  \def\subsubsectionautorefname{alalszakasz}%
  \def\paragraphautorefname{bekezd\'es}%
  \def\subparagraphautorefname{albekezd\'es}%
  \def\FancyVerbLineautorefname{sor}%
  \def\theoremautorefname{T\'etel}%
  \def\pageautorefname{oldal}%
}
\def\HyLang@portuges{%
  \def\equationautorefname{Equa\c c\~ao}%
  \def\footnoteautorefname{Nota de rodap\'e}%
  \def\itemautorefname{Item}%
  \def\figureautorefname{Figura}%
  \def\tableautorefname{Tabela}%
  \def\partautorefname{Parte}%
  \def\appendixautorefname{Ap\^endice}%
  \def\chapterautorefname{Cap\'itulo}%
  \def\sectionautorefname{Se\c c\~ao}%
  \def\subsectionautorefname{Subse\c c\~ao}%
  \def\subsubsectionautorefname{Subsubse\c c\~ao}%
  \def\paragraphautorefname{par\'agrafo}%
  \def\subparagraphautorefname{subpar\'agrafo}%
  \def\FancyVerbLineautorefname{linha}%
  \def\theoremautorefname{Teorema}%
  \def\pageautorefname{P\'agina}%
}
%    \end{macrocode}
%
%    Next commented section for Russian is provided by Olga Lapko.
%
%    Next follow the checked reference names with commented variants and
%    explanations. All they are abbreviated and they won't create a
%    grammatical problems in the \emph{middle} of sentences.
%
%    The most weak points in these abbreviations are the
%    |\equationautorefname|, |\theoremautorefname| and the
%    |\FancyVerbLineautorefname|. But those three, and also the
%    |\footnoteautorefname| are not \emph{too} often referenced.
%    Another rather weak point is the |\appendixautorefname|.
%    \begin{macrocode}
\def\HyLang@russian{%
%    \end{macrocode}
%    The abbreviated reference to the equation:
%    it is not for ``the good face of the book'', but maybe it will be
%    better to get the company for the |\theoremautorefname|?
%    \begin{macrocode}
  \def\equationautorefname{\cyr\cyrv\cyrery\cyrr.}%
%    \end{macrocode}
%    The name of the equation reference has common form for both
%    nominative and accusative but changes in other forms, like
%    ``of |\autoref{auto}|'' etc. The full name must follow full
%    name of the |\theoremautorefname|.
%    \begin{macrocode}
%  \def\equationautorefname{%
%    \cyr\cyrv\cyrery\cyrr\cyra\cyrzh\cyre\cyrn\cyri\cyre
%  }%
%    \end{macrocode}
%
%    The variant of footnote has abbreviation form of the synonym
%    of the word ``footnote''. This variant of abbreviated synonym
%    has alternative status (maybe obsolete?).
%    \begin{macrocode}
  \def\footnoteautorefname{%
    \cyr\cyrp\cyro\cyrd\cyrs\cyrt\cyrr.\ \cyrp\cyrr\cyri\cyrm.%
  }%
%    \end{macrocode}
%    Commented form of the full synonym for ``footnote''.
%    It has common form for both nominative and accusative but
%    changes in other forms, like ``of |\autoref{auto}|''
%    \begin{macrocode}
%  \def\footnoteautorefname{%
%    \cyr\cyrp\cyro\cyrd\cyrs\cyrt\cyrr\cyro\cyrch\cyrn\cyro\cyre\ %
%    \cyrp\cyrr\cyri\cyrm\cyre\cyrch\cyra\cyrn\cyri\cyre
%  }%
%    \end{macrocode}
%    Commented forms of the ``footnote'': have different forms, the
%    same is for the nominative and accusative. (The others needed?)
%    \begin{macrocode}
%  \def\Nomfootnoteautorefname{\cyr\cyrs\cyrn\cyro\cyrs\cyrk\cyra}%
%  \def\Accfootnoteautorefname{\cyr\cyrs\cyrn\cyro\cyrs\cyrk\cyru}%
%    \end{macrocode}
%
%    Name of the list item, can be confused with the paragraph
%    reference name, but reader could understand meaning from context(?).
%    Commented variant has common form for both nominative and accusative
%    but changes in other forms, like ``of |\autoref{auto}|'' etc.
%    \begin{macrocode}
  \def\itemautorefname{\cyr\cyrp.}%
%  \def\itemautorefname{\cyr\cyrp\cyru\cyrn\cyrk\cyrt}%
%    \end{macrocode}
%
%    Names of the figure and table have stable (standard) abbreviation
%    forms. No problem in the middle of sentence.
%    \begin{macrocode}
  \def\figureautorefname{\cyr\cyrr\cyri\cyrs.}%
  \def\tableautorefname{\cyr\cyrt\cyra\cyrb\cyrl.}%
%    \end{macrocode}
%
%    Names of the part, chapter, section(s) have stable (standard)
%    abbreviation forms. No problem in the middle of sentence.
%    \begin{macrocode}
  \def\partautorefname{\cyr\cyrch.}%
  \def\chapterautorefname{\cyr\cyrg\cyrl.}%
  \def\sectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
%    \end{macrocode}
%
%    Name of the appendix can use this abbreviation, but it is not
%    standard for books, i.e, not for ``the good face of the book''.
%    Commented variant has common form for both nominative and
%    accusative but changes in other forms, like ``of
%    |\autoref{auto}|'' etc.
%    \begin{macrocode}
  \def\appendixautorefname{\cyr\cyrp\cyrr\cyri\cyrl.}%
%  \def\appendixautorefname{%
%    \cyr\cyrp\cyrr\cyri\cyrl\cyro\cyrzh\cyre\cyrn\cyri\cyre
%  }%
%    \end{macrocode}
%
%    The sectioning command have stable (almost standard) and common
%    abbreviation form for all levels (the meaning of these references
%    visible from the section number). No problem.
%    \begin{macrocode}
  \def\subsectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
  \def\subsubsectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
%    \end{macrocode}
%
%    The names of references to paragraphs also have stable
%    (almost standard) and common abbreviation form for all
%    levels (the meaning of these references is visible from
%    the section number). No problem in the middle of sentence.
%    \begin{macrocode}
  \def\paragraphautorefname{\cyr\cyrp.}%
  \def\subparagraphautorefname{\cyr\cyrp.}%
%    \end{macrocode}
%    Commented variant can be used in books but since it
%    has common form for both nominative and accusative but it
%    changes in other forms, like ``of |\autoref{auto}|'' etc.
%    \begin{macrocode}
%  \def\paragraphautorefname{\cyr\cyrp\cyru\cyrn\cyrk\cyrt}%
%  \def\subparagraphautorefname{\cyr\cyrp\cyru\cyrn\cyrk\cyrt}%
%    \end{macrocode}
%
%    The name of verbatim line. Here could be a standard of the
%    abbreviation (used very rare). But the author preprint
%    publications (which have not any editor or corrector)
%    can use this abbreviation for the page reference. So the
%    meaning of the line reference can be read as reference to
%    the page.
%    \begin{macrocode}
  \def\FancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr.}%
%    \end{macrocode}
%    Commented names of the ``verbatim line'': have different forms,
%    also the nominative and accusative.
%    \begin{macrocode}
%  \def\NomFancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr\cyro\cyrk\cyra}%
%  \def\AccFancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr\cyro\cyrk\cyru}%
%    \end{macrocode}
%    The alternative, ve-e-e-ery professional abbreviation,
%    was used in typography markup for typesetters.
%    \begin{macrocode}
%  \def\FancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr\cyrk.}%
%    \end{macrocode}
%
%    The names of theorem: if we want have ``the good face of
%    the book'', so the theorem reference must have the full name
%    (like equation reference). But \ldots
%    \begin{macrocode}
  \def\theoremautorefname{\cyr\cyrt\cyre\cyro\cyrr.}%
%    \end{macrocode}
%    Commented forms of the ``theorem'': have different forms, also
%    the nominative and accusative.
%    \begin{macrocode}
% \def\Nomtheoremautorefname{\cyr\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyra}%
% \def\Acctheoremautorefname{\cyr\cyrt\cyre\cyro\cyrr\cyre\cyrm\cyru}%
%    \end{macrocode}
%
%    Name of the page stable (standard) abbreviation form. No problem.
%    \begin{macrocode}
  \def\pageautorefname{\cyr\cyrs.}%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\HyLang@spanish{%
  \def\equationautorefname{Ecuaci\'on}%
  \def\footnoteautorefname{Nota a pie de p\'agina}%
  \def\itemautorefname{Elemento}%
  \def\figureautorefname{Figura}%
  \def\tableautorefname{Tabla}%
  \def\partautorefname{Parte}%
  \def\appendixautorefname{Ap\'endice}%
  \def\chapterautorefname{Cap\'itulo}%
  \def\sectionautorefname{Secci\'on}%
  \def\subsectionautorefname{Subsecci\'on}%
  \def\subsubsectionautorefname{Subsubsecci\'on}%
  \def\paragraphautorefname{P\'arrafo}%
  \def\subparagraphautorefname{Subp\'arrafo}%
  \def\FancyVerbLineautorefname{L\'inea}%
  \def\theoremautorefname{Teorema}%
  \def\pageautorefname{P\'agina}%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\HyLang@catalan{%
\def\equationautorefname{Equaci\'o}%
\def\footnoteautorefname{Nota al peu de p\`agina}%
\def\itemautorefname{Element}%
\def\figureautorefname{Figura}%
\def\tableautorefname{Taula}%
\def\partautorefname{Part}%
\def\appendixautorefname{Ap\`endix}%
\def\chapterautorefname{Cap\'itol}%
\def\sectionautorefname{Secci\'o}%
\def\subsectionautorefname{Subsecci\'o}%
\def\subsubsectionautorefname{Subsubsecci\'o}%
\def\paragraphautorefname{Par\`agraf}%
\def\subparagraphautorefname{Subpar\`agraf}%
\def\FancyVerbLineautorefname{L\'inia}%
\def\theoremautorefname{Teorema}%
\def\pageautorefname{P\`agina}%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\HyLang@vietnamese{%
  \def\equationautorefname{Ph\uhorn{}\ohorn{}ng tr\`inh}%
  \def\footnoteautorefname{Ch\'u th\'ich}%
  \def\itemautorefname{m\d{u}c}%
  \def\figureautorefname{H\`inh}%
  \def\tableautorefname{B\h{a}ng}%
  \def\partautorefname{Ph\`\acircumflex{}n}%
  \def\appendixautorefname{Ph\d{u} l\d{u}c}%
  \def\chapterautorefname{ch\uhorn{}\ohorn{}ng}%
  \def\sectionautorefname{m\d{u}c}%
  \def\subsectionautorefname{m\d{u}c}%
  \def\subsubsectionautorefname{m\d{u}c}%
  \def\paragraphautorefname{\dj{}o\d{a}n}%
  \def\subparagraphautorefname{\dj{}o\d{a}n}%
  \def\FancyVerbLineautorefname{d\`ong}%
  \def\theoremautorefname{\DJ{}\d{i}nh l\'y}%
  \def\pageautorefname{Trang}%
}
%    \end{macrocode}
% Greek, see github issue 52
%    \begin{macrocode}
\def\HyLang@greek{%
    \def\equationautorefname{\textEpsilon\textxi\acctonos\textiota\textsigma\textomega\textsigma\texteta}%
    \def\footnoteautorefname{\textupsilon\textpi\textomicron\textsigma\texteta\textmu\textepsilon\acctonos\textiota\textomega\textsigma\texteta}%
    \def\itemautorefname{\textalpha\textnu\texttau\textiota\textkappa\textepsilon\acctonos\textiota\textmu\textepsilon\textnu\textomicron}%
    \def\figureautorefname{\textSigma\textchi\acctonos\texteta\textmu\textalpha}%
    \def\tableautorefname{\textPi\acctonos\textiota\textnu\textalpha\textkappa\textalpha}%
    \def\partautorefname{\textMu\acctonos\textepsilon\textrho\textomicron\textvarsigma}%
    \def\appendixautorefname{\textPi\textalpha\textrho\acctonos\textalpha\textrho\texttau\texteta\textmu\textalpha}%
    \def\chapterautorefname{\textkappa\textepsilon\textphi\acctonos\textalpha\textlambda\textalpha\textiota\textomicron}%
    \def\sectionautorefname{\textepsilon\textnu\acctonos\textomicron\texttau\texteta\texttau\textalpha}%
    \def\subsectionautorefname{\textupsilon\textpi\textomicron\textepsilon\textnu\acctonos\textomicron\texttau\texteta\texttau\textalpha}%
    \def\subsubsectionautorefname{\textupsilon\textpi\textomicron-\textupsilon\textpi\textomicron\textepsilon\textnu\acctonos\textomicron\texttau\texteta\texttau\textalpha}%
    \def\paragraphautorefname{\textpi\textalpha\textrho\acctonos\textalpha\textgamma\textrho\textalpha\textphi\textomicron\textvarsigma}%
    \def\subparagraphautorefname{\textupsilon\textpi\textomicron\textpi\textalpha\textrho\acctonos\textalpha\textgamma\textrho\textalpha\textphi\textomicron\textvarsigma}%
    \def\FancyVerbLineautorefname{\textgamma\textrho\textalpha\textmu\textmu\acctonos\texteta}%
    \def\theoremautorefname{\textTheta\textepsilon\acctonos\textomega\textrho\texteta\textmu\textalpha}%
    \def\pageautorefname{\textsigma\textepsilon\textlambda\acctonos\textiota\textdelta\textalpha}%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\HyLang@dutch{%
    \def\equationautorefname{Vergelijking}%
    \def\footnoteautorefname{voetnoot}%
    \def\itemautorefname{punt}%
    \def\figureautorefname{Figuur}%
    \def\tableautorefname{Tabel}%
    \def\partautorefname{Deel}%
    \def\appendixautorefname{Bijlage}%
    \def\chapterautorefname{hoofdstuk}%
    \def\sectionautorefname{paragraaf}%
    \def\subsectionautorefname{deelparagraaf}%
    \def\subsubsectionautorefname{deel-deelparagraaf}%
    \def\paragraphautorefname{alinea}%
    \def\subparagraphautorefname{deelalinea}%
    \def\FancyVerbLineautorefname{regel}%
    \def\theoremautorefname{Stelling}%
    \def\pageautorefname{pagina}%
}
\def\HyLang@norsk{%
    \def\equationautorefname{Ligning}%
    \def\footnoteautorefname{fotnote}%
    \def\itemautorefname{element}%
    \def\figureautorefname{Figur}%
    \def\tableautorefname{Tabell}%
    \def\partautorefname{Del}%
    \def\appendixautorefname{Tillegg}%
    \def\chapterautorefname{kapittel}%
    \def\sectionautorefname{seksjon}%
    \def\subsectionautorefname{underseksjon}%
    \def\subsubsectionautorefname{under-underseksjon}%
    \def\paragraphautorefname{avsnitt}%
    \def\subparagraphautorefname{underavsnitt}%
    \def\FancyVerbLineautorefname{Linje}%
    \def\theoremautorefname{Teorem}%
    \def\pageautorefname{side}%
}
\def\HyLang@danish{%
  \def\equationautorefname{Ligning}%
  \def\footnoteautorefname{fodnote}%
  \def\itemautorefname{element}%
  \def\figureautorefname{Figur}%
  \def\tableautorefname{Tabel}%
  \def\partautorefname{Del}%
  \def\appendixautorefname{Bilag}%
  \def\chapterautorefname{kapitel}%
  \def\sectionautorefname{sektion}%
  \def\subsectionautorefname{under-sektion}%
  \def\subsubsectionautorefname{under-under-sektion}%
  \def\paragraphautorefname{afsnit}%
  \def\subparagraphautorefname{underafsnit}%
  \def\FancyVerbLineautorefname{linje}%
  \def\theoremautorefname{Teorem}%
  \def\pageautorefname{side}%
}
\def\HyLang@swedish{%
  \def\equationautorefname{Ekvation}%
  \def\footnoteautorefname{fotnot}%
  \def\itemautorefname{punkt}%
  \def\figureautorefname{Figur}%
  \def\tableautorefname{Tabell}%
  \def\partautorefname{Del}%
  \def\appendixautorefname{Bilaga}%
  \def\chapterautorefname{kapitel}%
  \def\sectionautorefname{avsnitt}%
  \def\subsectionautorefname{underavsnitt}%
  \def\subsubsectionautorefname{under-underavsnitt}%
  \def\paragraphautorefname{paragraf}%
  \def\subparagraphautorefname{underparagraf}%
  \def\FancyVerbLineautorefname{linje}%
  \def\theoremautorefname{Teorem}%
  \def\pageautorefname{sida}%
}
%    \end{macrocode}
%
%    Instead of package babel's definition of \cmd{\addto} the
%    implementation of package varioref is used. Additionally
%    argument |#1| is checked for \cmd{\relax}.
%    change 2026-06-17: do not execute \cmd{HyLang@XXX} here, gh/425
%    \begin{macrocode}
\def\HyLang@addto#1#2{%
  \@temptokena{#2}%
  \ifx#1\relax
    \let#1\@empty
  \fi
  \ifx#1\@undefined
    \edef#1{\the\@temptokena}%
  \else
    \toks@\expandafter{#1}%
    \edef#1{\the\toks@\the\@temptokena}%
  \fi
  \@temptokena{}\toks@\@temptokena
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\HyLang@DeclareLang#1#2#3{%
  \ifcsname extras#1\endcsname
    \expandafter\HyLang@addto
        \csname extras#1\expandafter\endcsname
        \csname HyLang@#2\endcsname
    \begingroup
      \edef\x{\endgroup
        #3%
      }%
    \x
    \@namedef{HyLang@#1@done}{}%
  \fi
  \begingroup
    \edef\x##1##2{%
      \noexpand\ifx##2\relax
        \errmessage{No definitions for language #2' found!}%
      \noexpand\fi
      \endgroup
      \noexpand\define@key{Hyp}{#1}[]{%
        \noexpand\@ifundefined{HyLang@#1@done}{%
          \noexpand\HyLang@addto{\noexpand##1}{\noexpand##2}%
%    \end{macrocode}
% Execute the command here to setup the language if babel is not used: gh/425
%    \begin{macrocode}
          \noexpand\UseName{HyLang@#2}%
          #3%
          \noexpand\@namedef{HyLang@#1@done}{}%
        }{}%
      }%
    }%
  \expandafter\x\csname extras#1\expandafter\endcsname
                \csname HyLang@#2\endcsname
}
\HyLang@DeclareLang{english}{english}{}
\HyLang@DeclareLang{UKenglish}{english}{}
\HyLang@DeclareLang{british}{english}{}
\HyLang@DeclareLang{USenglish}{english}{}
\HyLang@DeclareLang{american}{english}{}
\HyLang@DeclareLang{german}{german}{}
\HyLang@DeclareLang{austrian}{german}{}
\HyLang@DeclareLang{ngerman}{german}{}
\HyLang@DeclareLang{naustrian}{german}{}
\HyLang@DeclareLang{nswissgerman}{german}{}
\HyLang@DeclareLang{swissgerman}{german}{}
\HyLang@DeclareLang{russian}{russian}{\noexpand\hypersetup{unicode}}
\HyLang@DeclareLang{brazil}{portuges}{}
\HyLang@DeclareLang{brazilian}{portuges}{}
\HyLang@DeclareLang{portuguese}{portuges}{}
\HyLang@DeclareLang{spanish}{spanish}{}
\HyLang@DeclareLang{catalan}{catalan}{}
\HyLang@DeclareLang{afrikaans}{afrikaans}{}
\HyLang@DeclareLang{french}{french}{}
\HyLang@DeclareLang{frenchb}{french}{}
\HyLang@DeclareLang{francais}{french}{}
\HyLang@DeclareLang{acadian}{french}{}
\HyLang@DeclareLang{canadien}{french}{}
\HyLang@DeclareLang{italian}{italian}{}
\HyLang@DeclareLang{magyar}{magyar}{}
\HyLang@DeclareLang{hungarian}{magyar}{}
\HyLang@DeclareLang{greek}{greek}{}
\HyLang@DeclareLang{dutch}{dutch}{}
\HyLang@DeclareLang{norsk}{norsk}{}
\HyLang@DeclareLang{norwegian}{norsk}{}
\HyLang@DeclareLang{danish}{danish}{}
\HyLang@DeclareLang{swedish}{swedish}{}
%    \end{macrocode}
%    More work is needed in case of options |vietnamese| and |vietnam|.
%    \begin{macrocode}
\DeclareVoidOption{vietnamese}{%
  \HyLang@addto\extrasvietnamese\HyLang@vietnamese
  \Hy@AtEndOfPackage{%
    \@ifundefined{T@PU}{}{%
      \input{puvnenc.def}%
    }%
  }%
}
\DeclareVoidOption{vietnam}{%
  \HyLang@addto\extrasvietnam\HyLang@vietnamese
  \Hy@AtEndOfPackage{%
    \@ifundefined{T@PU}{}{%
      \input{puvnenc.def}%
    }%
  }%
}
%    \end{macrocode}
%    Similar for option |arabic| that just loads the additions
%    to PU encoding for Arabi.
%    \begin{macrocode}
\DeclareVoidOption{arabic}{%
  \Hy@AtEndOfPackage{%
    \@ifundefined{T@PU}{}{%
      \input{puarenc.def}%
    }%
  }%
}
%    \end{macrocode}
%
% \section{Options to change appearance of links}\label{appearance}
% Colouring links at the \LaTeX\ level is useful for debugging, perhaps.
%    \begin{macrocode}
\define@key{Hyp}{colorlinks}[true]{%
  \Hy@boolkey{colorlinks}{#1}%
}
\DeclareVoidOption{hidelinks}{%
  \Hy@colorlinksfalse
  \Hy@ocgcolorlinksfalse
  \Hy@frenchlinksfalse
  \def\Hy@colorlink##1{\begingroup}%
  \def\Hy@endcolorlink{\endgroup}%
  \def\@pdfborder{0 0 0}%
  \let\@pdfborderstyle\@empty
}
\define@key{Hyp}{ocgcolorlinks}[true]{%
  \Hy@boolkey{ocgcolorlinks}{#1}%
}
\Hy@AtBeginDocument{%
  \begingroup
    \@ifundefined{OBJ@OCG@view}{%
      \ifHy@ocgcolorlinks
        \Hy@Warning{%
          Driver does not support `ocgcolorlinks',\MessageBreak
          using `colorlinks' instead%
        }%
      \fi
    }{}%
  \endgroup
}
\define@key{Hyp}{frenchlinks}[true]{%
  \Hy@boolkey{frenchlinks}{#1}%
}
%    \end{macrocode}
%
% \section{Bookmarking}
%
%    \begin{macrocode}
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname chapter\endcsname\relax
  \def\toclevel@part{0}%
\else
  \def\toclevel@part{-1}%
\fi
\def\toclevel@chapter{0}
\def\toclevel@section{1}
\def\toclevel@subsection{2}
\def\toclevel@subsubsection{3}
\def\toclevel@paragraph{4}
\def\toclevel@subparagraph{5}
\def\toclevel@figure{0}
\def\toclevel@table{0}
%    \end{macrocode}
%
%    \begin{macrocode}
\define@key{Hyp}{bookmarks}[true]{%
  \Hy@boolkey{bookmarks}{#1}%
}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Hyp}{bookmarksopen}[true]{%
  \Hy@boolkey{bookmarksopen}{#1}%
}
%    \end{macrocode}
%
%    The depth of the outlines is controlled by option
%    \verb|bookmarksdepth|.
%    The option acts globally and distinguishes three cases:
%    \begin{itemize}
%    \item \verb|bookmarksdepth|: Without value hyperref uses
%      counter \texttt{tocdepth} (compatible behaviour and default).
%    \item \verb|bookmarksdepth=<number>|: the depth is set to
%      \verb|<number>|.
%    \item \verb|bookmarksdepth=<name>|: The \verb|<name>| must
%      not start with a number or minus sign. It is a document
%      division name (part, chapter, section, \dots). Internally
%      the value of macro \verb|\toclevel@<name>| is used.
%    \end{itemize}
%    \begin{macrocode}
\let\Hy@bookmarksdepth\c@tocdepth
\define@key{Hyp}{bookmarksdepth}[]{%
  \begingroup
    \edef\x{#1}%
    \ifx\x\empty
      \global\let\Hy@bookmarksdepth\c@tocdepth
    \else
      \@ifundefined{toclevel@\x}{%
        \@onelevel@sanitize\x
        \edef\y{\expandafter\@car\x\@nil}%
        \ifcase 0\expandafter\ifx\y-1\fi
                 \expandafter\ifnum\expandafter`\y>47 %
                   \expandafter\ifnum\expandafter`\y<58 1\fi\fi\relax
          \Hy@Warning{Unknown document division name (\x)}%
        \else
          \setbox\z@=\hbox{%
            \count@=\x
            \xdef\Hy@bookmarksdepth{\the\count@}%
          }%
        \fi
      }{%
        \setbox\z@=\hbox{%
          \count@=\csname toclevel@\x\endcsname
          \xdef\Hy@bookmarksdepth{\the\count@}%
        }%
      }%
    \fi
  \endgroup
}
%    \end{macrocode}
%
% `bookmarksopenlevel' to specify the open level. From Heiko Oberdiek.
%    \begin{macrocode}
\define@key{Hyp}{bookmarksopenlevel}{%
  \def\@bookmarksopenlevel{#1}%
}
\def\@bookmarksopenlevel{\maxdimen}
% `bookmarkstype' to specify which `toc' file to mimic
\define@key{Hyp}{bookmarkstype}{%
  \def\Hy@bookmarkstype{#1}%
}
\def\Hy@bookmarkstype{toc}
%    \end{macrocode}
% Richard Curnow <richard@curnow.demon.co.uk> suggested this
% functionality. It adds section numbers etc to bookmarks.
%    \begin{macrocode}
\define@key{Hyp}{bookmarksnumbered}[true]{%
  \Hy@boolkey{bookmarksnumbered}{#1}%
}
%    \end{macrocode}
%
%    Option CJKbookmarks enables the patch for
%    CJK bookmarks.
%    \begin{macrocode}
\define@key{Hyp}{CJKbookmarks}[true]{%
  \Hy@boolkey{CJKbookmarks}{#1}%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\Hy@temp#1{%
  \expandafter\Hy@@temp\csname @#1color\endcsname{#1}%
}
\def\Hy@@temp#1#2#3{%
  \define@key{Hyp}{#2color}{%
    \HyColor@HyperrefColor{##1}#1%
  }%
  \def#1{#3}%
}
\Hy@temp{link}{red}
\Hy@temp{anchor}{black}
\Hy@temp{cite}{green}
\Hy@temp{file}{cyan}
\Hy@temp{url}{magenta}
\Hy@temp{menu}{red}
\Hy@temp{run}{\@filecolor}
\define@key{Hyp}{pagecolor}{%
  \Hy@WarningPageColor
}
\def\Hy@WarningPageColor{%
  \Hy@WarningNoLine{Option `pagecolor' is not available anymore}%
  \global\let\Hy@WarningPageColor\relax
}
\define@key{Hyp}{allcolors}{%
  \HyColor@HyperrefColor{#1}\@linkcolor
  \HyColor@HyperrefColor{#1}\@anchorcolor
  \HyColor@HyperrefColor{#1}\@citecolor
  \HyColor@HyperrefColor{#1}\@filecolor
  \HyColor@HyperrefColor{#1}\@urlcolor
  \HyColor@HyperrefColor{#1}\@menucolor
  \HyColor@HyperrefColor{#1}\@runcolor
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\hyperbaseurl#1{\def\@baseurl{#1}}
\define@key{Hyp}{baseurl}{\hyperbaseurl{#1}}
\let\@baseurl\@empty
\def\hyperlinkfileprefix#1{\def\Hy@linkfileprefix{#1}}
\define@key{Hyp}{linkfileprefix}{\hyperlinkfileprefix{#1}}
\hyperlinkfileprefix{file:}
%    \end{macrocode}
%
% \section{PDF-specific options}\label{pdfopt}
%
%    \begin{macro}{\@pdfpagetransition}
%    The value of option |pdfpagetransition| is stored in
%    \cmd{\@pdfpagetransition}. Its initial value is set
%    to \cmd{\relax} in order to be able to differentiate
%    between a not used option and an option with an empty
%    value.
%    \begin{macrocode}
\let\@pdfpagetransition\relax
\define@key{Hyp}{pdfpagetransition}{%
  \def\@pdfpagetransition{#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\@pdfpageduration}
%    The value of option |pdfpageduration| is stored in
%    \cmd{\@pdfpageduration}. Its initial value is set
%    to \cmd{\relax} in order to be able to differentiate
%    between a not used option and an option with an empty
%    value.
%    \begin{macrocode}
\let\@pdfpageduration\relax
\define@key{Hyp}{pdfpageduration}{%
  \def\@pdfpageduration{#1}%
  \Hy@Match\@pdfpageduration{}{%
    ^(|[0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)$%
  }{}{%
    \Hy@Warning{%
      Invalid value `\@pdfpageduration'\MessageBreak
      of option `pdfpageduration'\MessageBreak
      is replaced by an empty value%
    }%
    \let\@pdfpageduration\@empty
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%
%    The value of the |bordercolor| options are not processed
%    by the color package. Therefore the value consists of
%    space separated rgb numbers in the range 0 until 1.
%
%    Package |xcolor| provides |\XC@bordercolor| since version 1.1.
%    If the two spaces in the color specification are missing,
%    then the value is processed as color specification from
%    package |xcolor| by using |\XC@bordercolor| (since
%    xcolor 2004/05/09 v1.11, versions 2005/03/24 v2.02 until
%    2006/11/28 v2.10 do not work because of a bug that is
%    fixed in 2007/01/21 v2.11).
%    \begin{macrocode}
\def\Hy@ColorList{cite,file,link,menu,run,url}
\@for\Hy@temp:=\Hy@ColorList\do{%
  \edef\Hy@temp{%
    \noexpand\define@key{Hyp}{\Hy@temp bordercolor}{%
      \noexpand\HyColor@HyperrefBorderColor
          {##1}%
          \expandafter\noexpand\csname @\Hy@temp bordercolor\endcsname
          {hyperref}%
          {\Hy@temp bordercolor}%
    }%
  }%
  \Hy@temp
}
\define@key{Hyp}{pagebordercolor}{%
  \Hy@WarningPageBorderColor
}
\def\Hy@WarningPageBorderColor{%
  \Hy@WarningNoLine{Option `pagebordercolor' is not available anymore}%
  \global\let\Hy@WarningPageBorderColor\relax
}
\define@key{Hyp}{allbordercolors}{%
  \def\Hy@temp##1##2{%
    \HyColor@HyperrefBorderColor{#1}##1{hyperref}{##2bordercolor}%
  }%
  \Hy@temp\@citebordercolor{cite}%
  \Hy@temp\@filebordercolor{file}%
  \Hy@temp\@linkbordercolor{link}%
  \Hy@temp\@menubordercolor{menu}%
  \Hy@temp\@runbordercolor{run}%
  \Hy@temp\@urlbordercolor{url}%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\define@key{Hyp}{pdfhighlight}{\def\@pdfhighlight{#1}}
\Hy@DefNameKey{pdfhighlight}{%
  \do{/I}{Invert}%
  \do{/N}{None}%
  \do{/O}{Outline}%
  \do{/P}{Push}%
}
\def\Hy@setpdfhighlight{%
  \ifx\@pdfhighlight\@empty
  \else
    /H\@pdfhighlight
  \fi
}
\define@key{Hyp}{pdfborder}{%
  \let\Hy@temp\@pdfborder
  \def\@pdfborder{#1}%
  \Hy@Match\@pdfborder{}{%
    ^\HyPat@NonNegativeReal/ %
     \HyPat@NonNegativeReal/ %
     \HyPat@NonNegativeReal/%
     ( ?\[\HyPat@NonNegativeReal/( \HyPat@NonNegativeReal/)*])?$%
  }{}{%
    \Hy@Warning{%
      Invalid value `\@pdfborder'\MessageBreak
      for option `pdfborder'.\MessageBreak
      Option setting is ignored%
    }%
    \let\@pdfborder\Hy@temp
  }%
}
\define@key{Hyp}{pdfborderstyle}{%
  \let\Hy@temp\@pdfborderstyle
  \def\@pdfborderstyle{#1}%
  \Hy@Match\@pdfborderstyle{}{%
    ^%
    ( */Type */Border%
    | */W +\HyPat@NonNegativeReal/%
    | */S */[SDBIU]%
    | */D *\[ *(\HyPat@NonNegativeReal/( \HyPat@NonNegativeReal/)?)?]%
    )* *$%
  }{}{%
    \Hy@Warning{%
      Invalid value `\@pdfborderstyle'\MessageBreak
      for option `pdfborderstyle'.\MessageBreak
      Option setting is ignored%
    }%
    \let\@pdfborderstyle\Hy@temp
  }%
}
\def\Hy@setpdfborder{%
  \ifx\@pdfborder\@empty
  \else
    /Border[\@pdfborder]%
  \fi
  \ifx\@pdfborderstyle\@empty
  \else
    /BS<<\@pdfborderstyle>>%
  \fi
}
\Hy@DefNameKey{pdfpagemode}{%
  \do{UseNone}{}%
  \do{UseOutlines}{}%
  \do{UseThumbs}{}%
  \do{FullScreen}{}%
  \do{UseOC}{PDF 1.5}%
  \do{UseAttachments}{PDF 1.6}%
}
\Hy@DefNameKey{pdfnonfullscreenpagemode}{%
  \do{UseNone}{}%
  \do{UseOutlines}{}%
  \do{UseThumbs}{}%
  \do{FullScreen}{}%
  \do{UseOC}{PDF 1.5}%
  \do{UseAttachments}{PDF 1.6}%
}
\Hy@DefNameKey{pdfdirection}{%
  \do{L2R}{Left to right}%
  \do{R2L}{Right to left}%
}
\Hy@DefNameKey{pdfviewarea}{%
  \do{MediaBox}{}%
  \do{CropBox}{}%
  \do{BleedBox}{}%
  \do{TrimBox}{}%
  \do{ArtBox}{}%
}
\Hy@DefNameKey{pdfviewclip}{%
  \do{MediaBox}{}%
  \do{CropBox}{}%
  \do{BleedBox}{}%
  \do{TrimBox}{}%
  \do{ArtBox}{}%
}
\Hy@DefNameKey{pdfprintarea}{%
  \do{MediaBox}{}%
  \do{CropBox}{}%
  \do{BleedBox}{}%
  \do{TrimBox}{}%
  \do{ArtBox}{}%
}
\Hy@DefNameKey{pdfprintclip}{%
  \do{MediaBox}{}%
  \do{CropBox}{}%
  \do{BleedBox}{}%
  \do{TrimBox}{}%
  \do{ArtBox}{}%
}
\Hy@DefNameKey{pdfprintscaling}{%
  \do{AppDefault}{}%
  \do{None}{}%
}
\Hy@DefNameKey{pdfduplex}{%
  \do{Simplex}{}%
  \do{DuplexFlipShortEdge}{}%
  \do{DuplexFlipLongEdge}{}%
}
\Hy@DefNameKey{pdfpicktraybypdfsize}{%
  \do{true}{}%
  \do{false}{}%
}
\define@key{Hyp}{pdfprintpagerange}{%
  \def\@pdfprintpagerange{#1}%
}
\Hy@DefNameKey{pdfnumcopies}{%
  \do{2}{two copies}%
  \do{3}{three copies}%
  \do{4}{four copies}%
  \do{5}{five copies}%
}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Hyp}{pdfusetitle}[true]{%
  \Hy@boolkey{pdfusetitle}{#1}%
}
\def\HyXeTeX@CheckUnicode{%
  \ifxetex
    \ifHy@unicode
    \else
      \Hy@WarningNoLine{%
        XeTeX driver only supports unicode.\MessageBreak
        Enabling option `unicode'%
      }%
      \kvsetkeys{Hyp}{unicode}%
    \fi
  \else
    \let\HyXeTeX@CheckUnicode\relax
  \fi
}
\def\HyPsd@PrerenderUnicode#1{%
  \begingroup
    \expandafter\ifx\csname PrerenderUnicode\endcsname\relax
    \else
      \sbox0{%
        \let\GenericInfo\@gobbletwo
        \let\GenericWarning\@gobbletwo
        \let\GenericError\@gobblefour
        \PrerenderUnicode{#1}%
       }%
    \fi
  \endgroup
}
\define@key{Hyp}{pdftitle}{%
  \AddToDocumentProperties[hyperref]{pdftitle}{#1}%
  \HyXeTeX@CheckUnicode
  \HyPsd@PrerenderUnicode{#1}%
  \pdfstringdef\@pdftitle{#1}%
}
\define@key{Hyp}{pdfauthor}{%
  \AddToDocumentProperties[hyperref]{pdfauthor}{#1}%
  \HyXeTeX@CheckUnicode
  \HyPsd@PrerenderUnicode{#1}%
  \pdfstringdef\@pdfauthor{#1}%
}
\define@key{Hyp}{pdfproducer}{%
  \AddToDocumentProperties[hyperref]{pdfproducer}{#1}%
  \HyXeTeX@CheckUnicode
  \HyPsd@PrerenderUnicode{#1}%
  \pdfstringdef\@pdfproducer{#1}%
}
\define@key{Hyp}{pdfcreator}{%
  \AddToDocumentProperties[hyperref]{pdfcreator}{#1}%
  \HyXeTeX@CheckUnicode
  \HyPsd@PrerenderUnicode{#1}%
  \pdfstringdef\@pdfcreator{#1}%
}
\define@key{Hyp}{addtopdfcreator}{%
 \HyXeTeX@CheckUnicode
 \HyPsd@PrerenderUnicode{#1}%
 \pdfstringdef\@pdfcreator{\@pdfcreator, #1}%
}
\define@key{Hyp}{pdfcreationdate}{%
  \begingroup
    \Hy@unicodefalse
    \pdfstringdef\@pdfcreationdate{#1}%
  \endgroup
}
\define@key{Hyp}{pdfmoddate}{%
  \begingroup
    \Hy@unicodefalse
    \pdfstringdef\@pdfmoddate{#1}%
  \endgroup
}
\define@key{Hyp}{pdfsubject}{%
  \AddToDocumentProperties[hyperref]{pdfsubject}{#1}%
  \HyXeTeX@CheckUnicode
  \HyPsd@PrerenderUnicode{#1}%
  \pdfstringdef\@pdfsubject{#1}%
}
\define@key{Hyp}{pdfkeywords}{%
  \AddToDocumentProperties[hyperref]{pdfkeywords}{#1}%
  \HyXeTeX@CheckUnicode
  \HyPsd@PrerenderUnicode{#1}%
  \pdfstringdef\@pdfkeywords{#1}%
}
\define@key{Hyp}{pdftrapped}{%
  \lowercase{\edef\Hy@temp{#1}}%
  \ifx\Hy@temp\HyInfo@trapped@true
    \def\@pdftrapped{True}%
  \else
    \ifx\Hy@temp\HyInfo@trapped@false
      \def\@pdftrapped{False}%
    \else
      \ifx\Hy@temp\HyInfo@trapped@unknown
        \def\@pdftrapped{Unknown}%
      \else
        \ifx\Hy@temp\@empty
        \else
          \Hy@Warning{%
            Unsupported value `#1'\MessageBreak
            for option `pdftrapped'%
          }%
        \fi
        \def\@pdftrapped{}%
      \fi
    \fi
  \fi
}
\def\HyInfo@trapped@true{true}
\def\HyInfo@trapped@false{false}
\def\HyInfo@trapped@unknown{unknown}
\def\HyInfo@TrappedUnsupported{%
  \ifx\@pdftrapped\@empty
  \else
    \Hy@WarningNoLine{`pdftrapped' is not supported by this driver}%
    \gdef\HyInfo@TrappedUnsupported{}%
  \fi
}
\define@key{Hyp}{pdfinfo}{%
  \kvsetkeys{pdfinfo}{#1}%
}
\def\Hy@temp#1{%
  \lowercase{\Hy@temp@A{#1}}{#1}%
}
\def\Hy@temp@A#1#2{%
  \define@key{pdfinfo}{#2}{%
    \hypersetup{pdf#1={##1}}%
  }%
}
\Hy@temp{Title}
\Hy@temp{Author}
\Hy@temp{Keywords}
\Hy@temp{Subject}
\Hy@temp{Creator}
\Hy@temp{Producer}
\Hy@temp{CreationDate}
\Hy@temp{ModDate}
\Hy@temp{Trapped}
\newif\ifHyInfo@AddonUnsupported
\kv@set@family@handler{pdfinfo}{%
  \HyInfo@AddonHandler{#1}{#2}%
}
\let\HyInfo@do\relax
\def\HyInfo@AddonHandler#1#2{%
  \ifx\kv@value\relax
    \Hy@Warning{%
      Option `pdfinfo': ignoring key `\kv@key' without value%
    }%
  \else
    \EdefEscapeName\HyInfo@KeyEscaped{\kv@key}%
    \EdefUnescapeName\HyInfo@Key{\HyInfo@KeyEscaped}%
    \expandafter\ifx\csname KV@pdfinfo@\HyInfo@Key\endcsname\relax
      \ifHyInfo@AddonUnsupported
        \Hy@Warning{%
          This driver does not support additional\MessageBreak
          information entries, therefore\MessageBreak
          `\kv@key' is ignored%
        }%
      \else
        \def\HyInfo@tmp##1{%
          \kv@define@key{pdfinfo}{##1}{%
            \HyXeTeX@CheckUnicode
            \HyPsd@PrerenderUnicode{####1}%
            \pdfstringdef\HyInfo@Value{####1}%
            \global\expandafter
            \let\csname HyInfo@Value@##1\endcsname
                \HyInfo@Value
          }%
        }%
        \expandafter\HyInfo@tmp\expandafter{\HyInfo@Key}%
        \global\expandafter
        \let\csname KV@pdfinfo@\HyInfo@Key\expandafter\endcsname
            \csname KV@pdfinfo@\HyInfo@Key\endcsname
        \xdef\HyInfo@AddonList{%
          \HyInfo@AddonList
          \HyInfo@do{\HyInfo@Key}%
        }%
        \expandafter\kv@parse@normalized\expandafter{%
          \HyInfo@Key={#2}%
        }{%
          \kv@processor@default{pdfinfo}%
        }%
      \fi
    \else
      \expandafter\kv@parse@normalized\expandafter{%
        \HyInfo@Key={#2}%
      }{%
        \kv@processor@default{pdfinfo}%
      }%
    \fi
  \fi
}
\def\HyInfo@GenerateAddons{%
  \ifHyInfo@AddonUnsupported
    \def\HyInfo@Addons{}%
  \else
    \begingroup
      \toks@{}%
      \def\HyInfo@do##1{%
        \EdefEscapeName\HyInfo@Key{##1}%
        \edef\x{%
          \toks@{%
            \the\toks@
            /\HyInfo@Key(\csname HyInfo@Value@##1\endcsname)%
          }%
        }%
        \x
      }%
      \HyInfo@AddonList
      \edef\x{\endgroup
        \def\noexpand\HyInfo@Addons{\the\toks@}%
      }%
    \x
  \fi
}
\global\let\HyInfo@AddonList\@empty
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Hyp}{pdfview}{\calculate@pdfview#1 \\}
\define@key{Hyp}{pdflinkmargin}{\setpdflinkmargin{#1}}
\let\setpdflinkmargin\@gobble
\def\calculate@pdfview#1 #2\\{%
  \def\@pdfview{#1}%
  \ifx\\#2\\%
    \def\@pdfviewparams{ -32768}%
  \else
    \def\@pdfviewparams{ #2}%
  \fi
}
\def\Hy@number#1{%
  \the\numexpr#1\relax
  }%
\define@key{Hyp}{pdfstartpage}{%
  \ifx\\#1\\%
    \let\@pdfstartpage\@empty
  \else
    \edef\@pdfstartpage{\Hy@number{#1}}%
  \fi
}%
\define@key{Hyp}{pdfstartview}{%
  \ifx\\#1\\%
    \let\@pdfstartview\@empty
  \else
    \def\@pdfstartview{/#1}%
  \fi
}
\def\HyPat@NonNegativeReal/{%
  \ *([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+) *%
}
\define@key{Hyp}{pdfremotestartview}{%
  \ifx\\#1\\%
    \def\@pdfremotestartview{/Fit}%
  \else
    \edef\@pdfremotestartview{#1}%
    \Hy@Match\@pdfremotestartview{}{%
      ^(XYZ(%
            ()| %
            (null|-?\HyPat@NonNegativeReal/) %
            (null|-?\HyPat@NonNegativeReal/) %
            (null|\HyPat@NonNegativeReal/)%
          )|% end of "XYZ"
        Fit(%
            ()|%
            B|%
            (H|V|BH|BV)(%
                ()| %
                (null|\HyPat@NonNegativeReal/)%
              )|%
            R %
                \HyPat@NonNegativeReal/ %
                \HyPat@NonNegativeReal/ %
                \HyPat@NonNegativeReal/ %
                \HyPat@NonNegativeReal/%
          )% end of "Fit"
      )$%
    }{}{%
      \Hy@Warning{%
         Invalid value `\@pdfremotestartview'\MessageBreak
         of `pdfremotestartview'\MessageBreak
         is replaced by `Fit'%
      }%
      \let\@pdfremotestartview\@empty
    }%
    \ifx\@pdfremotestartview\@empty
      \def\@pdfremotestartview{/Fit}%
    \else
      \edef\@pdfremotestartview{/\@pdfremotestartview}%
    \fi
  \fi
}
\define@key{Hyp}{pdfpagescrop}{\edef\@pdfpagescrop{#1}}
\define@key{Hyp}{pdftoolbar}[true]{%
  \Hy@boolkey{pdftoolbar}{#1}%
}
\define@key{Hyp}{pdfmenubar}[true]{%
  \Hy@boolkey{pdfmenubar}{#1}%
}
\define@key{Hyp}{pdfwindowui}[true]{%
  \Hy@boolkey{pdfwindowui}{#1}%
}
\define@key{Hyp}{pdffitwindow}[true]{%
  \Hy@boolkey{pdffitwindow}{#1}%
}
\define@key{Hyp}{pdfcenterwindow}[true]{%
  \Hy@boolkey{pdfcenterwindow}{#1}%
}
\define@key{Hyp}{pdfdisplaydoctitle}[true]{%
  \Hy@boolkey{pdfdisplaydoctitle}{#1}%
}
\define@key{Hyp}{pdfa}[true]{%
 \IfDocumentMetadataTF
  {
    \PackageWarning{hyperref}{%
     \string\DocumentMetadata\space detected.\MessageBreak
     The 'pdfa' key will be ignored.\MessageBreak
     Please set the PDF/A standard in \string\DocumentMetadata\MessageBreak
     with the 'pdfstandard' key.}
  }
  {\Hy@boolkey{pdfa}{#1}}%
}

\define@key{Hyp}{pdfnewwindow}[true]{%
  \def\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
    \Hy@pdfnewwindowsetfalse
  \else
    \Hy@pdfnewwindowsettrue
    \Hy@boolkey{pdfnewwindow}{#1}%
  \fi
}
\def\Hy@SetNewWindow{%
  \ifHy@pdfnewwindowset
    /NewWindow %
    \ifHy@pdfnewwindow true\else false\fi
  \fi
}
\Hy@DefNameKey{pdfpagelayout}{%
  \do{SinglePage}{}%
  \do{OneColumn}{}%
  \do{TwoColumnLeft}{}%
  \do{TwoColumnRight}{}%
  \do{TwoPageLeft}{PDF 1.5}%
  \do{TwoPageRight}{PDF 1.5}%
}
\define@key{Hyp}{pdflang}{%
  \edef\@pdflang{#1}%
  \def\Hy@temp{\relax}%
  \ifx\@pdflang\Hy@temp
    \let\@pdflang\relax
  \fi
  \ifx\@pdflang\relax
  \else
    \ifx\@pdflang\@empty
    \else
%    \end{macrocode}
%    Test according to ABNF of RFC 3066.
%    \begin{macrocode}
      \Hy@Match\@pdflang{icase}{%
        ^%
        [a-z]{1,8}%
        (-[a-z0-9]{1,8})*%
        $%
      }{%
%    \end{macrocode}
%    Test according to ABNF of RFC 5646.
%    \begin{macrocode}
        \Hy@Match\@pdflang{icase}{%
          ^%
          (%
          % langtag
            (% language
              [a-z]{2,3}%
              ([a-z]{3}(-[a-z]{3}){0,2})?% extlang
              |[a-z]{4}% reserved for future use
              |[a-z]{5,8}% registered language subtag
            )%
            (-[a-z]{4})?% script
            (-([a-z]{2}|[0-9]{3}))?% region
            (-([a-z]{5,8}|[0-9][a-z0-9]{3}))*% variant
            (-[0-9a-wyz](-[a-z0-9]{2,8})+)*% extension
            (-x(-[a-z0-9]{1,8})+)?% privateuse
          % privateuse
            |x-([a-z0-9]{1,8})+%
          % grandfathered/irregular
            |en-GB-oed%
            |i-(ami|bnn|default|enochian|hak|klingon|lux|%
                mingo|navajo|pwn|tao|tay|tsu)%
            |sgn-(BE-FR|BE-NL|CH-DE)%
          % grandfathered/regular
            |art-lojban%
            |cel-gaulish%
            |no-(bok|nyn)%
            |zh-(guoyu|hakka|min|min-nan|xiang)%
          )%
          $%
        }{%
%    \end{macrocode}
%    Test for unique extensions.
%    \begin{macrocode}
          \Hy@Match{-\@pdflang}{icase}{-[a-wyz0-9]-}{%
            \Hy@Match\@pdflang{icase}{^x-}{}{%
              % remove privateuse
              \edef\Hy@temp{-\@pdflang}%
              \Hy@Match\Hy@temp{icase}{%
                ^%
                (%
                  (-[a-wyz0-9]|-[a-z0-9]{2,8})*%
                )%
                -x-%
              }{%
                \edef\Hy@temp{%
                  \expandafter\strip@prefix\pdflastmatch1%
                }%
              }{}%
              \Hy@Match\Hy@temp{icase}{%
                (-[a-wyz0-9]-).*\@backslashchar1%
              }{%
                \Hy@Warning{%
                  Invalid language identifier `#1'\MessageBreak
                  for option `pdflang', because it violates\MessageBreak
                  well-formedness defined in RFC 4646\MessageBreak
                  by duplicate singleton subtags%
                }%
                \let\@pdflang\relax
              }{}%
            }%
          }{}%
%    \end{macrocode}
%    User-assigned country codes are forbidden in language tags (RFC 3066).
%    \begin{macrocode}
          \ifx\@pdflang\relax
          \else
            \Hy@Match\@pdflang{icase}{%
              ^%
              [a-zA-Z]{2}-%
              (%
                aa|AA|%
                [qQ][m-zM-Z]|%
                [xX][a-zA-Z]|%
                zz|ZZ%
              )%
              (-|$)%
            }{%
              \Hy@Warning{%
                Invalid language identifier `#1'\MessageBreak
                for option `pdflang' because of invalid country code%
                \MessageBreak
                in second subtag (RFC 3066)%
              }%
              \let\@pdflang\relax
            }{}%
          \fi
        }{%
          \Hy@Warning{%
            Invalid language identifier `#1'\MessageBreak
            for option `pdflang', because it violates\MessageBreak
            well-formedness defined in RFC 5646%
          }%
          \let\@pdflang\relax
        }%
      }{%
        \Hy@Warning{%
          Invalid language identifier `#1'\MessageBreak
          for option `pdflang' (RFC 3066)%
        }%
        \let\@pdflang\relax
      }%
    \fi
  \fi
}
\define@key{Hyp}{pdfpagelabels}[true]{%
  \Hy@boolkey{pdfpagelabels}{#1}%
}
\define@key{Hyp}{pdfescapeform}[true]{%
  \Hy@boolkey{pdfescapeform}{#1}%
}
%    \end{macrocode}
% Default values:
%    \begin{macrocode}
\def\@linkbordercolor{1 0 0}
\def\@urlbordercolor{0 1 1}
\def\@menubordercolor{1 0 0}
\def\@filebordercolor{0 .5 .5}
\def\@runbordercolor{0 .7 .7}
\def\@citebordercolor{0 1 0}
\def\@pdfhighlight{/I}
\let\@pdftitle\@empty
\let\@pdfauthor\@empty
\let\@pdfproducer\relax
\def\@pdfcreator{LaTeX with hyperref}
\let\@pdfcreationdate\@empty
\let\@pdfmoddate\@empty
\let\@pdfsubject\@empty
\let\@pdfkeywords\@empty
\let\@pdftrapped\@empty
\let\@pdfpagescrop\@empty
\def\@pdfstartview{/Fit}
\def\@pdfremotestartview{/Fit}
\def\@pdfstartpage{1}
\let\@pdfprintpagerange\@empty
\let\@pdflang\relax
\let\PDF@SetupDoc\@empty
\let\PDF@FinishDoc\@empty
\let\phantomsection\@empty
\let\special@paper\@empty
\def\HyperDestNameFilter#1{#1}
\Hy@AtBeginDocument{%
  \begingroup
    \edef\x{\ifdim\stockheight>\z@ \stockheight\else\paperheight\fi}%
    \dimen@=\x\relax
    \ifdim\dimen@>\z@
    \else
      \dimen@=11in\relax
      \Hy@WarningNoLine{%
        Height of page (\expandafter\string\x) %
        is invalid (\the\x),\MessageBreak
        using 11in%
      }%
    \fi
    \dimen@=0.99626401\dimen@
    \xdef\Hy@pageheight{\strip@pt\dimen@}%
  \endgroup
}
\def\HyInd@EncapChar{\|}
%    \end{macrocode}
%
% Allow the user to use |\ExecuteOptions| in the cfg file even though
% this package does not use the normal option mechanism.
% Use |\hyper@normalise| as a scratch macro, since it is going to
% be defined in a couple of lines anyway.
%    \begin{macrocode}
\let\hyper@normalise\ExecuteOptions
\let\ExecuteOptions\hypersetup
\Hy@RestoreCatcodes
\InputIfFileExists{hyperref.cfg}{}{}
\Hy@SetCatcodes
\let\ExecuteOptions\hyper@normalise
\ifx\Hy@MaybeStopNow\relax
\else
  \Hy@stoppedearlytrue
  \expandafter\Hy@MaybeStopNow
\fi
\Hy@stoppedearlyfalse
%    \end{macrocode}
% To add flexibility, we will not use the ordinary processing of
% package options, but put them through the \emph{keyval} package.
% This section was written by David Carlisle.
%
%    \begin{macrocode}
\SetupKeyvalOptions{family=Hyp}
\DeclareLocalOptions{%
  a4paper,a5paper,b5paper,letterpaper,legalpaper,executivepaper%
}
%    \end{macrocode}
%
%    Add option |tex4ht| if package |tex4ht| is loaded.
%    \begin{macrocode}
\@ifpackagewith{hyperref}{tex4ht}{%
}{%
  \@ifpackageloaded{tex4ht}{%
    \PassOptionsToPackage{tex4ht}{hyperref}%
  }{%
    \@ifundefined{HCode}{%
    }{%
      \begingroup
        \def\Hy@pkg{tex4ht}%
        \def\Hy@temp@A#1\RequirePackage[#2]#3#4\Hy@NIL{%
          \def\Hy@param{#2#3}%
          \ifx\Hy@param\@empty
            \expandafter\@gobble
          \else
            \def\Hy@param{#3}%
            \ifx\Hy@param\Hy@pkg
              \PassOptionsToPackage{#2}{tex4ht}%
              \expandafter\expandafter\expandafter\@gobble
            \else
              \expandafter\expandafter\expandafter\@firstofone
            \fi
          \fi
          {\Hy@temp@A#4\Hy@NIL}%
        }%
        \expandafter
        \Hy@temp@A\@documentclasshook\RequirePackage[]{}\Hy@NIL
      \endgroup
      \PassOptionsToPackage{tex4ht}{hyperref}%
    }%
  }%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\let\ReadBookmarks\relax
\ProcessKeyvalOptions{Hyp}
%    \end{macrocode}
%
%    After processing options.
%
% \subsection{Package xspace support}
%
%    \begin{macrocode}
\def\Hy@xspace@end{}
\@ifundefined{xspaceaddexceptions}{%
  \Hy@AtBeginDocument{%
    \@ifundefined{xspaceaddexceptions}{%
    }{%
      \def\Hy@xspace@end{%
        \@gobble{end for xspace}%
      }%
      \xspaceaddexceptions{%
        \Hy@xspace@end,\hyper@linkend,\hyper@anchorend
      }%
    }%
  }%
}{%
  \def\Hy@xspace@end{%
    \@gobble{end for xspace}%
  }%
  \xspaceaddexceptions{\Hy@xspace@end,\hyper@linkend,\hyper@anchorend}%
}
%    \end{macrocode}
%
% \subsection{Option draft}
%
%    \begin{macrocode}
\Hy@AtBeginDocument{%
  \ifHy@draft
    \let\hyper@@anchor\@gobble
    \gdef\hyper@link#1#2#3{#3\Hy@xspace@end}%
    \def\hyper@anchorstart#1#2{#2\Hy@xspace@end}%
    \def\hyper@anchorend{\Hy@xspace@end}%
    \let\hyper@linkstart\@gobbletwo
    \def\hyper@linkend{\Hy@xspace@end}%
    \def\hyper@linkurl#1#2{#1\Hy@xspace@end}%
    \def\hyper@linkfile#1#2#3{#1\Hy@xspace@end}%
    \def\hyper@link@[#1]#2#3#4{#4\Hy@xspace@end}%
    \def\Acrobatmenu#1#2{\leavevmode#2\Hy@xspace@end}%
    \let\PDF@SetupDoc\@empty
    \let\PDF@FinishDoc\@empty
    \let\ReadBookmarks\relax
    \let\WriteBookmarks\relax
    \Hy@WarningNoLine{Draft mode on}%
  \fi
  \Hy@DisableOption{draft}%
  \Hy@DisableOption{nolinks}%
  \Hy@DisableOption{final}%
}
%    \end{macrocode}
%
% \subsection{PDF/A}
% If an A-standard has been set in \cs{DocumentMetadata} hyperref should set the pdfa
% key too.
%    \begin{macrocode}
\ExplSyntaxOn
\IfDocumentMetadataT
 {
   \tl_if_empty:eTF{\GetDocumentProperties{document/pdfstandard}}
    {
      \Hy@pdfafalse
    }
    {
      \Hy@pdfatrue
    }
 }
\ExplSyntaxOff
\Hy@DisableOption{pdfa}
%    \end{macrocode}
%
%    \begin{macrocode}
\ifHy@pdfa
  \ifnum \Hy@pdf@majorminor@version< 104
  \kvsetkeys{Hyp}{pdfversion=1.4}%
  \fi
  \Hy@DisableOption{pdfversion}%
  \def\Hy@Acrobatmenu#1#2{%
    \leavevmode
    \begingroup
      \edef\x{#1}%
      \@onelevel@sanitize\x
      \ifx\x\Hy@NextPage
        \let\y=Y%
      \else
        \ifx\x\Hy@PrevPage
          \let\y=Y%
        \else
          \ifx\x\Hy@FirstPage
            \let\y=Y%
          \else
            \ifx\x\Hy@LastPage
              \let\y=Y%
            \else
              \let\y=N%
            \fi
          \fi
        \fi
      \fi
    \expandafter\endgroup
    \ifx\y Y%
    \else
      \Hy@Error{%
        PDF/A: Named action `#1' is not permitted%
      }\@ehc
      {#2}%
      \expandafter\@gobble
    \fi
  }%
  \def\Hy@temp#1{%
    \expandafter\def\csname Hy@#1\endcsname{#1}%
    \expandafter\@onelevel@sanitize\csname Hy@#1\endcsname
  }%
  \Hy@temp{NextPage}%
  \Hy@temp{PrevPage}%
  \Hy@temp{FirstPage}%
  \Hy@temp{LastPage}%
\else
  \def\Hy@Acrobatmenu#1#2{\leavevmode}%
\fi
%    \end{macrocode}
%
% \subsection{Patch for babel's
%    \texorpdfstring{\cs{texttilde}}{\\texttilde}}
%    Babel does not define \cmd{\texttilde} in NFSS2 manner,
%    so the NFSS2 definitions of PD1 or PU encoding is not
%    compatible. To fix this, \cmd{\texttilde} is defined
%    in babel manner.
%
%    change 2020-10-10: no trace of \cs{texttilde} can be found in the
%    three languages spanish, galician and estonian so the patch has been removed
%    as outdated.
%
%    \begin{macrocode}
\def\Hy@wrapper@babel#1#2{%
  \begingroup
    \Hy@safe@activestrue
    \set@display@protect
    \edef\x{#2}%
    \@onelevel@sanitize\x
    \toks@{#1}%
    \edef\x{\endgroup\the\toks@{\x}}%
  \x
}
\def\Hy@WrapperDef#1{%
  \begingroup
    \escapechar=\m@ne
    \xdef\Hy@gtemp{%
      \expandafter\noexpand\csname HyWrap@\string#1\endcsname
    }%
  \endgroup
  \edef#1{%
    \noexpand\Hy@wrapper@babel
    \expandafter\noexpand\Hy@gtemp
  }%
  \expandafter\def\Hy@gtemp
}
%    \end{macrocode}
%
%    \begin{macrocode}
\ifHy@hyperfigures
  \Hy@Info{Hyper figures ON}%
\else
  \Hy@Info{Hyper figures OFF}%
\fi
\ifHy@nesting
  \Hy@Info{Link nesting ON}%
\else
  \Hy@Info{Link nesting OFF}%
\fi
\ifHy@hyperindex
  \Hy@Info{Hyper index ON}%
\else
  \Hy@Info{Hyper index OFF}%
\fi
\ifHy@plainpages
  \Hy@Info{Plain pages ON}%
\else
  \Hy@Info{Plain pages OFF}%
\fi
\ifHy@backref
  \Hy@Info{Backreferencing ON}%
\else
  \Hy@Info{Backreferencing OFF}%
\fi
\ifHy@implicit
  \Hy@InfoNoLine{Implicit mode ON; LaTeX internals redefined}%
\else
  \Hy@InfoNoLine{Implicit mode OFF; no redefinition of LaTeX internals}%
  \def\MaybeStopEarly{%
    \Hy@Message{Stopped early}%
    \Hy@AtBeginDocument{%
      \PDF@FinishDoc
      \gdef\PDF@FinishDoc{}%
    }%
    \endinput
  }%
  \Hy@AtBeginDocument{%
    \let\autoref\ref
    \let\autopageref\pageref
    \ifx\@pdfpagemode\@empty
      \gdef\@pdfpagemode{UseNone}%
    \fi
    \global\Hy@backreffalse
  }%
  \Hy@AtEndOfPackage{%
    \global\let\ReadBookmarks\relax
    \global\let\WriteBookmarks\relax
  }%
\fi
\Hy@DisableOption{implicit}
%    \end{macrocode}
%
% \subsubsection{Driver loading}
% Ensure that |\stockwidth| and |\stockheight| are defined
%    \begin{macrocode}
\@ifundefined{stockwidth}{\newdimen\stockwidth}{}
\@ifundefined{stockheight}{\newdimen\stockheight}{}
%    \end{macrocode}
%
%    \begin{macrocode}
\Hy@AtEndOfPackage{%
  \@ifpackageloaded{tex4ht}{%
    \def\Hy@driver{htex4ht}%
    \Hy@texhttrue
  }{}%
%    \end{macrocode}
%    Some drivers can be detected. Check for these drivers,
%    whether the given driver option is ok. Otherwise force
%    the right driver or use the default driver.
%    \begin{macrocode}
  \ifx\Hy@driver\@empty
  \else
     \ifx\pdfextension\@undefined
       \def\Hy@temp{hpdftex}%
     \else
       \def\Hy@temp{hluatex}%
     \fi
    \ifpdf
      \ifx\Hy@driver\Hy@temp
      \else
        \Hy@WarningNoLine{%
          Wrong driver `\Hy@driver.def';\MessageBreak
          pdfTeX is running in PDF mode.\MessageBreak
          Forcing driver `\Hy@temp.def'%
        }%
        \let\Hy@driver\Hy@temp
      \fi
    \else
      \ifx\Hy@driver\Hy@temp
        \Hy@WarningNoLine{%
          Wrong driver `\Hy@driver.def';\MessageBreak
          pdfTeX is not running in PDF mode.\MessageBreak
          Using default driver%
        }%
        \let\Hy@driver\@empty
      \fi
    \fi
  \fi
  \ifHy@texht
  \else
    \ifx\Hy@driver\@empty
    \else
      \def\Hy@temp{hxetex}%
      \ifxetex
        \ifx\Hy@driver\Hy@temp
        \else
          \Hy@WarningNoLine{%
            Wrong driver `\Hy@driver.def';\MessageBreak
            XeTeX is running.\MessageBreak
            Forcing driver `\Hy@temp.def' for XeTeX%
          }%
          \let\Hy@driver\Hy@temp
        \fi
      \fi
    \fi
  \fi
  \ifx\Hy@driver\@empty
  \else
   \def\Hy@temp{hhitex}%
   \ifhint
     \ifx\Hy@driver\Hy@temp
     \else
        \Hy@WarningNoLine{%
          Wrong driver `\Hy@driver.def';\MessageBreak
          hitex is running.\MessageBreak
          Forcing driver `\Hy@temp.def'%
        }%
        \let\Hy@driver\Hy@temp
     \fi
    \fi
  \fi
  \ifx\Hy@driver\@empty
  \else
    \def\Hy@temp{hvtexhtm}%
    \ifnum\ifvtex\OpMode\else\m@ne\fi=10 %
      \ifx\Hy@driver\Hy@temp
      \else
        \Hy@WarningNoLine{%
          Wrong driver `\Hy@driver.def';\MessageBreak
          VTeX is running in HTML mode.\MessageBreak
          Forcing driver `\Hy@temp.def'%
        }%
        \let\Hy@driver\Hy@temp
      \fi
    \else
      \ifx\Hy@driver\Hy@temp
        \Hy@WarningNoLine{%
          Wrong driver `\Hy@driver.def';\MessageBreak
          VTeX is not running in HTML mode.\MessageBreak
          Using default driver%
        }%
        \let\Hy@driver\@empty
      \fi
    \fi
  \fi
%    \end{macrocode}
%    If the driver is not given, find the right driver or
%    use the default driver.
%    \begin{macrocode}
  \let\HyOpt@DriverType\@empty
  \ifx\HyOpt@CustomDriver\@empty
    \ifx\Hy@driver\@empty
      \def\HyOpt@DriverType{ (autodetected)}%
      \providecommand*{\Hy@defaultdriver}{hdvips}%
      \ifpdf
        \ifx\pdfextension\@undefined
          \def\Hy@driver{hpdftex}%
        \else
          \def\Hy@driver{hluatex}%
        \fi
      \else
        \ifxetex
          \def\Hy@driver{hxetex}%
        \else
          \ifnum\ifvtex\OpMode\else\m@ne\fi=10 %
            \def\Hy@driver{hvtexhtm}%
            \def\MaybeStopEarly{%
              \Hy@Message{Stopped early}%
              \Hy@AtBeginDocument{%
                \PDF@FinishDoc
                \gdef\PDF@FinishDoc{}%
              }%
              \endinput
            }%
          \else
            \ifhint
              \def\Hy@driver{hhitex}
            \else
              \ifnum\ifvtex\OpMode\else\m@ne\fi=\@ne
                \def\Hy@driver{hvtex}%
              \else
                \ifnum\ifvtex\OpMode\else\m@ne\fi=\tw@
                  \def\Hy@driver{hvtex}%
                \else
                  \ifx\HyOpt@DriverFallback\@empty
                    \let\Hy@driver\Hy@defaultdriver
                    \def\HyOpt@DriverType{ (default)}%
                  \else
                    \begingroup
                      \toks@\expandafter{\HyOpt@DriverFallback}%
                      \edef\x{\endgroup
                        \noexpand\kvsetkeys{Hyp}{\the\toks@}%
                      }%
                    \x
                    \ifx\Hy@driver\@empty
                      \let\Hy@driver\Hy@defaultdriver
                      \def\HyOpt@DriverType{ (default)}%
                    \else
                      \def\HyOpt@DriverType{ (fallback)}%
                    \fi
                  \fi
                \fi
              \fi
            \fi
          \fi
        \fi
      \fi
      \ifx\Hy@driver\Hy@defaultdriver
        \def\Hy@temp{hdviwind}%
        \ifx\Hy@temp\Hy@driver
          \kvsetkeys{Hyp}{colorlinks}%
          \PassOptionsToPackage{dviwindo}{color}%
        \fi
      \fi
    \fi
  \else
    \def\HyOpt@DriverType{ (custom)}%
    \let\Hy@driver\HyOpt@CustomDriver
  \fi
  \Hy@InfoNoLine{Driver\HyOpt@DriverType: \Hy@driver}%
  \chardef\Hy@VersionChecked=0 %
  \input{\Hy@driver.def}%
  \ifcase\Hy@VersionChecked
    \Hy@VersionCheck{\Hy@driver.def}%
  \fi
  \let\@unprocessedoptions\relax
  \Hy@RestoreCatcodes
  \Hy@DisableOption{tex4ht}%
  \Hy@DisableOption{pdftex}%
  \Hy@DisableOption{nativepdf}%
  \Hy@DisableOption{dvipdfm}%
  \Hy@DisableOption{dvipdfmx}%
  \Hy@DisableOption{dvipdfmx-outline-open}%
  \Hy@DisableOption{pdfmark}%
  \Hy@DisableOption{dvips}%
  \Hy@DisableOption{hypertex}%
  \Hy@DisableOption{vtex}%
  \Hy@DisableOption{vtexpdfmark}%
  \Hy@DisableOption{dviwindo}%
  \Hy@DisableOption{dvipsone}%
  \Hy@DisableOption{textures}%
  \Hy@DisableOption{latex2html}%
  \Hy@DisableOption{ps2pdf}%
  \Hy@DisableOption{xetex}%
  \Hy@DisableOption{driverfallback}%
  \Hy@DisableOption{customdriver}%
  \Hy@DisableOption{pdfversion}%
}
%    \end{macrocode}
%    Support for open outlines is enabled for Xe\TeX\ >= 0.9995.
%    I don't know, if older versions also support this.
%    AFAIK older dvipdfmx versions will break, thus the
%    switch cannot be turned on by default.
%    \begin{macrocode}
\newif\ifHy@DvipdfmxOutlineOpen
\ifxetex
  \ifdim\number\XeTeXversion\XeTeXrevision in<0.9995in %
  \else
    \chardef\SpecialDvipdfmxOutlineOpen\@ne
    \Hy@DvipdfmxOutlineOpentrue
  \fi
\fi
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname SpecialDvipdfmxOutlineOpen\endcsname\relax
\else
  \ifnum\SpecialDvipdfmxOutlineOpen>\z@
    \Hy@DvipdfmxOutlineOpentrue
  \fi
\fi
%    \end{macrocode}
%
% \subsubsection{Bookmarks}
%    \begin{macrocode}
\def\WriteBookmarks{0}
\def\@bookmarkopenstatus#1{%
  \ifHy@bookmarksopen
%    \end{macrocode}
%    The purpose of the |\@firstofone|-number-space-construct
%    is that no |\relax| will be inserted by \TeX{} before the |\else|:
%    \begin{macrocode}
    \ifnum#1<\expandafter\@firstofone\expandafter
             {\number\@bookmarksopenlevel} % explicit space
    \else
      -%
    \fi
  \else
    -%
  \fi
}
\ifHy@bookmarks
  \Hy@Info{Bookmarks ON}%
  \ifx\@pdfpagemode\@empty
    \def\@pdfpagemode{UseOutlines}%
  \fi
\else
  \let\@bookmarkopenstatus\@gobble
  \Hy@Info{Bookmarks OFF}%
  \Hy@AtEndOfPackage{%
    \global\let\ReadBookmarks\relax
    \global\let\WriteBookmarks\relax
  }%
  \ifx\@pdfpagemode\@empty
    \def\@pdfpagemode{UseNone}%
  \fi
\fi
\Hy@DisableOption{bookmarks}
%    \end{macrocode}
%
%    Add wrapper for setting standard catcodes (babel's shorthands).
%    \begin{macrocode}
\def\Hy@CatcodeWrapper#1{%
  \let\Hy@EndWrap\@empty
  \def\TMP@EnsureCode##1##2{%
    \edef\Hy@EndWrap{%
      \Hy@EndWrap
      \catcode##1 \the\catcode##1\relax
    }%
    \catcode##1 ##2\relax
  }%
  \TMP@EnsureCode{10}{12}% ^^J
  \TMP@EnsureCode{33}{12}% !
  \TMP@EnsureCode{34}{12}% "
  \TMP@EnsureCode{36}{3}% $ (math)
  \TMP@EnsureCode{38}{4}% & (alignment)
  \TMP@EnsureCode{39}{12}% '
  \TMP@EnsureCode{40}{12}% (
  \TMP@EnsureCode{41}{12}% )
  \TMP@EnsureCode{42}{12}% *
  \TMP@EnsureCode{43}{12}% +
  \TMP@EnsureCode{44}{12}% ,
  \TMP@EnsureCode{45}{12}% -
  \TMP@EnsureCode{46}{12}% .
  \TMP@EnsureCode{47}{12}% /
  \TMP@EnsureCode{58}{12}% :
  \TMP@EnsureCode{59}{12}% ;
  \TMP@EnsureCode{60}{12}% <
  \TMP@EnsureCode{61}{12}% =
  \TMP@EnsureCode{62}{12}% >
  \TMP@EnsureCode{63}{12}% ?
  \TMP@EnsureCode{91}{12}% [
  \TMP@EnsureCode{93}{12}% ]
  \TMP@EnsureCode{94}{7}% ^ (superscript)
  \TMP@EnsureCode{95}{8}% _ (subscript)
  \TMP@EnsureCode{96}{12}% `
  \TMP@EnsureCode{124}{12}% |
  \TMP@EnsureCode{126}{13}% ~ (active)
  #1\relax
  \Hy@EndWrap
}
%    \end{macrocode}
%
%    |\HyColor@UseColor| expects a macro as argument. It contains
%    the color specification.
%    \begin{macrocode}
\Hy@AtBeginDocument{%
  \ifHy@ocgcolorlinks
    \kvsetkeys{Hyp}{colorlinks}%
    \ifHy@pdfa
      \Hy@Warning{%
        PDF/A: Optional Content Groups are prohibited,\MessageBreak
        using `colorlinks' instead of `ocgcolorlinks'%
      }%
      \Hy@ocgcolorlinksfalse
    \fi
  \fi
  \ifHy@ocgcolorlinks
  \else
    \Hy@DisableOption{ocgcolorlinks}%
  \fi
  \ifHy@colorlinks
    \def\@pdfborder{0 0 0}%
    \let\@pdfborderstyle\@empty
    \Hy@CatcodeWrapper{%
      \RequirePackage{color}%
     }%
    \def\Hy@colorlink#1{%
      \begingroup
      \HyColor@UseColor#1%
    }%
    \def\Hy@endcolorlink{\endgroup}%
    \Hy@Info{Link coloring ON}%
  \else
    \ifHy@frenchlinks
      \def\Hy@colorlink#1{\begingroup\fontshape{\scdefault}\selectfont}%
      \def\Hy@endcolorlink{\endgroup}%
      \Hy@Info{French linking ON}%
    \else
%    \end{macrocode}
%    for grouping consistency:
%    \begin{macrocode}
      \def\Hy@colorlink#1{\begingroup}%
      \def\Hy@endcolorlink{\endgroup}%
      \Hy@Info{Link coloring OFF}%
    \fi
  \fi
  \Hy@DisableOption{colorlinks}%
  \Hy@DisableOption{frenchlinks}%
  \ifHy@texht
  \else
%    \end{macrocode}
%    With active links we have to redefine the starred versions
%   to avoid that they get links from the include |\@setref|:
%    \begin{macrocode}
    \ifHy@implicit
      \let \T@Ref\HyRef@Ref
      \def\@refstar#1{%
        \NR@ref@showkeys{#1}%
        \HyRef@StarSetRef{#1}\@firstoffive
      }
      \def\@pagerefstar#1{%
        \NR@ref@showkeys{#1}%
        \HyRef@StarSetRef{#1}\@secondoffive
      }
      \def\@namerefstar#1{%
        \NR@ref@showkeys{#1}%
        \HyRef@StarSetRef{#1}\@thirdoffive
      }
      \def\@Refstar#1{%
        \NR@ref@showkeys{#1}%
        \HyRef@StarSetRef{#1}\HyRef@MakeUppercaseFirstOfFive
      }%
     \else
     \fi
  \fi
}
\Hy@AtBeginDocument{%
  \ifx\ReadBookmarks\relax
  \else
    \Hy@CatcodeWrapper\ReadBookmarks
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\ifHy@backref
  \RequirePackage{backref}%
\else
  \let\Hy@backout\@gobble
\fi
\Hy@DisableOption{backref}
\Hy@DisableOption{pagebackref}
%    \end{macrocode}
%    \begin{macrocode}
\Hy@activeanchorfalse
%    \end{macrocode}
%
% \section{User hypertext macros}\label{usermacros}
%
% We need to normalise all user commands taking a URL argument;
% Within the argument the following special definitions apply:
% |\#|, |\%|, |~| produce |#|, |%|, |~| respectively.
% for consistency |\~| produces |~| as well.
% At the \emph{top level only} ie not within the argument of another
% command, you can use |#| and |%| unescaped, to produce themselves.
% even if, say, |#| is entered as |#| it will be converted to |\#|
% so it does not die if written to an aux file etc. |\#| will write
% as |#| locally while making |\special|s. The catcode |:| is set to other
% to avoid problems with expl3 syntax.
%    \begin{macrocode}
\begingroup
  \endlinechar=-1 %
  \catcode`\^^A=14 %
  \catcode`\^^M\active
  \catcode`\%\active
  \catcode`\#\active
  \catcode`\_\active
  \catcode`\$\active
  \catcode`\&\active
  \gdef\hyper@normalise{^^A
    \begingroup
    \@makeother{:}^^A
    \catcode`\^^M\active
    \def^^M{ }^^A
    \catcode`\%\active
    \let%\@percentchar
    \let\%\@percentchar
    \catcode`\#\active
    \def#{\hyper@hash}^^A
    \def\#{\hyper@hash}^^A
    \@makeother\&^^A
    \edef&{\string&}^^A
    \edef\&{\string&}^^A
    \edef\textunderscore{\string_}^^A
    \let\_\textunderscore
    \catcode`\_\active
    \let_\textunderscore
    \let~\hyper@tilde
    \let\~\hyper@tilde
    \let\textasciitilde\hyper@tilde
    \let\\\@backslashchar
    \edef${\string$}^^A
    \Hy@safe@activestrue
    \hyper@n@rmalise
  }^^A
  \catcode`\#=6 ^^A
  \gdef\Hy@ActiveCarriageReturn{^^M}^^A
  \gdef\hyper@n@rmalise#1#2{^^A
    \def\Hy@tempa{#2}^^A
    \ifx\Hy@tempa\Hy@ActiveCarriageReturn
      \Hy@ReturnAfterElseFi{^^A
        \hyper@@normalise{#1}^^A
      }^^A
    \else
      \Hy@ReturnAfterFi{^^A
        \hyper@@normalise{#1}{#2}^^A
      }^^A
    \fi
  }^^A
  \gdef\hyper@@normalise#1#2{^^A
    \edef\Hy@tempa{^^A
      \endgroup
      \noexpand#1{\Hy@RemovePercentCr#2%^^M\@nil}^^A
    }^^A
    \Hy@tempa
  }^^A
  \gdef\Hy@RemovePercentCr#1%^^M#2\@nil{^^A
    #1^^A
    \ifx\limits#2\limits
    \else
      \Hy@ReturnAfterFi{^^A
        \Hy@RemovePercentCr #2\@nil
      }^^A
    \fi
  }^^A
\endgroup
\providecommand*\hyper@chars{%
  \let\#\hyper@hash
  \let\%\@percentchar
  \Hy@safe@activestrue
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\hyperlink#1#2{%
  \hyper@@link{}{#1}{#2}%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\Hy@VerboseLinkStart#1#2{%
  \ifHy@verbose
    \begingroup
      \Hy@safe@activestrue
      \xdef\Hy@VerboseGlobalTemp{(#1) `#2'}%
      \Hy@Info{Reference \Hy@VerboseGlobalTemp}%
      \xdef\Hy@VerboseGlobalTemp{%
        \Hy@VerboseGlobalTemp, %
        line \the\inputlineno
      }%
    \endgroup
    \let\Hy@VerboseLinkInfo\Hy@VerboseGlobalTemp
    \@onelevel@sanitize\Hy@VerboseLinkInfo
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\def\Hy@VerboseLinkInfo{<VerboseLinkInfo>}
\def\Hy@VerboseLinkStop{%
  \ifHy@verbose
    \begingroup
      \edef\x{\endgroup
        \write\m@ne{%
          Package `hyperref' Info: %
          End of reference \Hy@VerboseLinkInfo.%
        }%
      }%
    \x
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\def\Hy@VerboseAnchor#1{%
  \ifHy@verbose
    \begingroup
      \Hy@safe@activestrue
      \Hy@Info{Anchor `\HyperDestNameFilter{#1}'}%
    \endgroup
  \fi
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\Hy@AllowHyphens{%
  \relax
  \ifhmode
    \penalty\@M
    \hskip\z@skip
  \fi
}
%    \end{macrocode}
%
%    \begin{macrocode}
\DeclareRobustCommand*{\href}[1][]{%
  \begingroup
  \setkeys{href}{#1}%
  \@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}%
}
\def\Hy@href#{%
  \hyper@normalise\href@
}
\begingroup
  \catcode`\$=6 %
  \catcode`\#=12 %
  \gdef\href@$1{\expandafter\href@split$1##\\}%
  \gdef\href@split$1#$2#$3\\$4{%
    \hyper@@link{$1}{$2}{$4}%
    \endgroup
  }%
\endgroup
%    \end{macrocode}
%    Option `page'.
%    \begin{macrocode}
\define@key{href}{page}{%
  \def\Hy@href@page{#1}%
}
\let\Hy@href@page\@empty
\newcount\c@Hy@tempcnt
\def\theHy@tempcnt{\the\c@Hy@tempcnt}
\def\Hy@MakeRemoteAction{%
  \ifx\Hy@href@page\@empty
    \def\Hy@href@page{0}%
  \else
    \setcounter{Hy@tempcnt}{\Hy@href@page}%
    \ifnum\c@Hy@tempcnt<\@ne
      \Hy@Warning{%
        Invalid page number (\theHy@tempcnt)\MessageBreak
        for remote PDF file.\MessageBreak
        Using page 1%
      }%
      \def\Hy@href@page{0}%
    \else
      \global\advance\c@Hy@tempcnt\m@ne
      \edef\Hy@href@page{\theHy@tempcnt}%
    \fi
  \fi
%    \end{macrocode}
%    If a next action is set, then also a new window
%    should be opened. Otherwise AR reclaims that it
%    closes the current file with discarding the next actions.
%    \begin{macrocode}
  \ifx\Hy@href@nextactionraw\@empty
  \else
    \Hy@pdfnewwindowsettrue
    \Hy@pdfnewwindowtrue
  \fi
}
%    \end{macrocode}
%    Option `pdfremotestartview'.
%    \begin{macrocode}
\define@key{href}{pdfremotestartview}{%
  \setkeys{Hyp}{pdfremotestartview={#1}}%
}
%    \end{macrocode}
%    Option `pdfnewwindow'.
%    \begin{macrocode}
\let\KV@href@pdfnewwindow\KV@Hyp@pdfnewwindow
\let\KV@href@pdfnewwindow@default\KV@Hyp@pdfnewwindow@default
%    \end{macrocode}
%    Option `ismap'.
%    \begin{macrocode}
\newif\ifHy@href@ismap
\define@key{href}{ismap}[true]{%
  \@ifundefined{Hy@href@ismap#1}{%
    \Hy@Error{%
      Invalid value (#1) for key `ismap'.\MessageBreak
      Permitted values are `true' or `false'.\MessageBreak
      Ignoring `ismap'%
    }\@ehc
  }{%
    \csname Hy@href@ismap#1\endcsname
  }%
}
%    \end{macrocode}
%    Option `nextactionraw'.
%    \begin{macrocode}
\let\Hy@href@nextactionraw\@empty
\define@key{href}{nextactionraw}{%
  \edef\Hy@href@nextactionraw{#1}%
  \ifx\Hy@href@nextactionraw\@empty
  \else
    \Hy@Match\Hy@href@nextactionraw{}{%
      ^(\HyPat@ObjRef/|<<.*/S[ /].+>>|%
       \[( ?\HyPat@ObjRef/|<<.*/S[ /].+>>)+ ?])$%
    }{}{%
      \Hy@Warning{Invalid value for `nextactionraw':\MessageBreak
        \Hy@href@nextactionraw\MessageBreak
        The action is discarded%
      }%
    }%
    \ifx\Hy@href@nextactionraw\@empty
    \else
      \edef\Hy@href@nextactionraw{/Next \Hy@href@nextactionraw}%
    \fi
  \fi
}
\def\HyPat@ObjRef/{.+}
%    \end{macrocode}
%    Load package |url.sty| and save the meaning of
%    the original \cmd{\url} in \cmd{\HyOrg@url}.
%    \begin{macrocode}
\RequirePackage{url}
\let\HyOrg@url\url
\def\Hurl{\begingroup \Url}
\DeclareRobustCommand*{\nolinkurl}{\hyper@normalise\nolinkurl@}
\def\nolinkurl@#1{\Hurl{#1}}
\DeclareRobustCommand*{\url}{\hyper@normalise\url@}
\def\url@#1{\hyper@linkurl{\Hurl{#1}}{#1}}
%    \end{macrocode}
%
%    \begin{macrocode}
\DeclareRobustCommand*{\hyperimage}{\hyper@normalise\hyper@image}
\providecommand\hyper@image[2]{#2}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\hypertarget#1#2{%
  \ifHy@nesting
    \hyper@@anchor{#1}{#2}%
  \else
    \hyper@@anchor{#1}{\relax}#2%
  \fi
}
%    \end{macrocode}
% |\hyperref| is more complicated, as it includes the concept of a
% category of link, used to make the name. This is not really used in this
% package.  |\hyperdef| sets up an anchor in the same way. They each have
% three  parameters of category, linkname, and marked text, and |\hyperref|
% also has a first parameter of URL.
% If there is an optional first parameter to |\hyperdef|,
% it is the name of a \LaTeX\ label which can be used in
% a short form of |\hyperref| later, to avoid
% remembering the name and category.
%    \begin{macrocode}
\DeclareRobustCommand*{\hyperref}{%
  \@ifnextchar[{\Hy@babelnormalise\label@hyperref}\@hyperref
}
\def\Hy@babelnormalise#1[#2]{%
  \begingroup
    \Hy@safe@activestrue
    \let\protect\@unexpandable@protect
    \edef\Hy@tempa{%
      \endgroup
      \noexpand#1[{#2}]%
    }%
  \Hy@tempa
}
\def\@hyperref{\hyper@normalise\@@hyperref}
\def\@@hyperref#1#2#3{%
  \edef\ref@one{\ifx\\#2\\\else#2.\fi#3}%
  \expandafter\tryhyper@link\ref@one\\{#1}%
}
\def\tryhyper@link#1\\#2{%
  \hyper@@link{#2}{#1}%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\hyperdef{\@ifnextchar[{\label@hyperdef}{\@hyperdef}}
\def\@hyperdef#1#2#3{%, category, name, text
  \ifx\\#1\\%
    \def\Hy@AnchorName{#2}%
  \else
    \def\Hy@AnchorName{#1.#2}%
  \fi
  \ifHy@nesting
    \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{#3}%
  \else
    \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{\relax}#3%
  \fi
}
%    \end{macrocode}
% We also have a need to give a \LaTeX\ \emph{label} to a
% hyper reference, to ease the pain of referring to it later.
% \verb|\hyperrefundefinedlink| may be redefined by a user
% to add colour or other formatting.
%    \begin{macrocode}
\let\hyperrefundefinedlink\@firstofone
\def\label@hyperref[#1]{%
  \expandafter\label@@hyperref\csname r@#1\endcsname{#1}%
}%
\def\label@@hyperref#1#2#3{%
  \ifx#1\relax
    \protect\G@refundefinedtrue
    \@latex@warning{%
      Hyper reference `#2' on page \thepage \space undefined%
    }%
    \begingroup
      \hyperrefundefinedlink{#3}%
    \endgroup
  \else
    \hyper@@link{\expandafter\@fifthoffive#1}%
      {\expandafter\@fourthoffive#1\@empty\@empty}{#3}%
  \fi
}
\def\label@hyperdef[#1]#2#3#4{% label name, category, name,
                                % anchor text
  \@bsphack
  \ifx\\#2\\%
    \def\Hy@AnchorName{#3}%
  \else
    \def\Hy@AnchorName{#2.#3}%
  \fi
  \if@filesw
    \protected@write\@auxout{}{%
      \string\newlabel{#1}{{}{}{}{\Hy@AnchorName}{}}%
    }%
  \fi
  \@esphack
  \ifHy@nesting
    \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{#4}%
  \else
    \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{\relax}#4%
  \fi
}
%    \end{macrocode}
%
% \begin{macro}{\hyperget}
% To create manually bookmarks one need the destination name.
% If there is a label, the name can be retrieved with commands from refcount.
% Such a destination name must take |\HyperDestNameFilter| into account
% \begin{verbatim}
% \HyperDestNameFilter{\getrefbykeydefault{label}{anchor}{Doc-Start}}
% \end{verbatim}
%
% To make this easier, we define |\hyperget|
%    \begin{macrocode}
\ExplSyntaxOn
\cs_new:Npn \hyperget #1 #2
  {
    \use:c { __hyp_get_#1:n } { #2}
  }

\cs_new:Npn \__hyp_get_anchor:n  #1
  {
    \HyperDestNameFilter
     {
       \cs_if_exist:cTF {r@#1}
        {
          \tl_item:cn {r@#1}{4}
        }
        {
          Doc-Start
        }
     }
  }
\cs_new:Npn \__hyp_get_pageanchor:n  #1
  {
    \HyperDestNameFilter
     {
       \cs_if_exist:cTF {r@#1}
        {
          page. \tl_item:cn {r@#1}{2}
        }
        {
          Doc-Start
        }
     }
  }
\cs_new:Npn \__hyp_get_currentanchor:n  #1
  {
    \HyperDestNameFilter { \@currentHref }
  }
\ExplSyntaxOff
%    \end{macrocode}
% \end{macro}

% \subsection{Link box support for XeTeX and dvipdfmx}
% 
%    \begin{macrocode}
\newdimen\XeTeXLinkMargin
\setlength{\XeTeXLinkMargin}{2pt}
\newcommand\XeTeXLinkBox[1]{}
\newcommand*{\XeTeXLink@space}{}

\newcommand\Hy@setup@XeTeXLinkBox@dvipdfmx
 {\font\XeTeXLink@font=pzdr at 1sp\relax
  \renewcommand*{\XeTeXLink@space}{%
    \begingroup
      \XeTeXLink@font
      \@xxxii
    \endgroup
   }%
   \renewcommand{\XeTeXLinkBox}[1]{%
    \begingroup
      \leavevmode
      \sbox\z@{##1}%
      \begingroup
        \dimen@=\dp\z@
        \advance\dimen@\XeTeXLinkMargin
        \setbox\tw@=\llap{%
          \hb@xt@\XeTeXLinkMargin{%
            \lower\dimen@\hbox{\XeTeXLink@space}%
            \hss
          }%
        }%
        \dp\tw@=\dp\z@
        \ht\tw@=\ht\z@
        \copy\tw@
      \endgroup
      \copy\z@
      \dimen@=\ht\z@
      \advance\dimen@\XeTeXLinkMargin
      \setbox\tw@=\rlap{%
        \hb@xt@\XeTeXLinkMargin{%
          \hss
          \raise\dimen@\hbox{\XeTeXLink@space}%
        }%
      }%
      \dp\tw@=\dp\z@
      \ht\tw@=\ht\z@
      \copy\tw@
    \endgroup
  }}

\newcommand\Hy@setup@XeTeXLinkBox@default{%
 \renewcommand*{\XeTeXLinkBox}[1]{%
    \begingroup
      \leavevmode
      \sbox\z@{##1}%
      \copy\z@
    \endgroup
  }}
\ExplSyntaxOn
\AddToHook{begindocument}{%
  \bool_lazy_or:nnTF{\sys_if_engine_xetex_p:}{\str_if_eq_p:on{\c_sys_backend_str}{dvipdfmx}}
    {\Hy@setup@XeTeXLinkBox@dvipdfmx}
    {\Hy@setup@XeTeXLinkBox@default}}
\ExplSyntaxOff  
%    \end{macrocode}
%
% \section{Underlying basic hypertext macros}\label{coremacros}
%
% Links have an optional type, a filename (possibly a URL),
% an internal name, and some marked text. (Caution: the internal
% name may contain babel shorthand characters.)
% If the second parameter is empty, its an internal link,
% otherwise we need to open another file or a URL.
% A link start has a type, and a URL.
%    \begin{macrocode}
\def\hyper@@link{\let\Hy@reserved@a\relax
  \@ifnextchar[{\hyper@link@}{\hyper@link@[link]}%
}
% #1: type
% #2: URL
% #3: destination name
% #4: text
\def\hyper@link@[#1]#2#3#4{%
  \Hy@ifempty{#4}{% link text
    \Hy@Warning{Suppressing empty link}%
  }{%
    \begingroup
      \protected@edef\Hy@tempa{#2}%
      \edef\Hy@tempb{#3}%
      \ifx\Hy@tempa\@empty
        \ifx\Hy@tempb\@empty
          \Hy@Warning{Suppressing link with empty target}%
          \toks@{%
            \endgroup
            \@secondoftwo
          }%
        \else
          \toks@{%
            \endgroup
            \hyper@link{#1}%
          }%
        \fi
      \else
        \toks@{%
          \endgroup
          \expandafter\hyper@readexternallink#2\\{#1}%
        }%
      \fi
      \Hy@safe@activesfalse
      \toks@\expandafter{%
        \the\expandafter\toks@
        \expandafter{\Hy@tempb}{#4}%
      }%
    \the\toks@
  }%
}
%    \end{macrocode}
% The problem here is that the first (URL) parameter may be a
% local \texttt{file:} reference
% (in which case some browsers treat it differently)
% or a genuine URL, in which case we'll have to activate
% a real Web browser.
% Note that a simple name is also a URL, as that is interpreted
% as a relative file name. We have to worry about |#| signs in a local
% file as well.
%
%    \begin{macrocode}
\def\hyper@readexternallink#1\\#2#3#4{%
  \begingroup
    \let\\\relax
  \expandafter\endgroup
  \expandafter\@@hyper@@readexternallink#1\\{#2}{#3}{#4}%
}
\def\@@hyper@@readexternallink#1\\#2#3#4{%
%    \end{macrocode}
% Parameters are:
% \begin{enumerate}
% \item The URL or file name
% \item The type
% \item The internal name
% \item The link string
% \end{enumerate}
% We need to get the 1st parameter properly expanded,
% so we delimit the arguments rather than passing it inside a group.
%    \begin{macrocode}
  \@hyper@readexternallink{#2}{#3}{#4}#1::\\{#1}%
}
%    \end{macrocode}
% Now (potentially), we are passed:
% 1) The link type
% 2) The internal name,
% 3) the link string,
% 4) the URL type (http, mailto, file etc),
% 5) the URL details
% 6) anything after a real : in the URL
% 7) the whole URL again
%    \begin{macrocode}
\def\@pdftempwordfile{file}%
\def\@pdftempwordrun{run}%
\def\@hyper@readexternallink#1#2#3#4:#5:#6\\#7{%
%    \end{macrocode}
% If there are no colons at all (|#6| is blank), its a local
% file; if the URL type (|#4|) is blank, its probably a Mac filename,
% so treat it like a \texttt{file:} URL. The only flaw is if
% its a relative Mac path, with several colon-separated elements ---
% then we lose. Such names must be prefixed with an explicit |dvi:|
%    \begin{macrocode}
  \ifx\\#6\\%
    \@hyper@linkfile file:#7\\{#3}{#2}{#7}%
  \else
    \ifx\\#4\\%
      \@hyper@linkfile file:#7\\{#3}{#2}{#7}%
    \else
%    \end{macrocode}
% If the URL type is `file', pass it for local opening
%    \begin{macrocode}
      \def\@pdftempa{#4}%
      \ifx\@pdftempa\@pdftempwordfile
        \@hyper@linkfile#7\\{#3}{#2}{#7}%
      \else
%    \end{macrocode}
% if it starts `run:', its to launch an application.
%    \begin{macrocode}
        \ifx\@pdftempa\@pdftempwordrun
          \ifHy@pdfa
            \Hy@Error{%
              PDF/A: Launch action is prohibited%
            }\@ehc
            \begingroup
              \leavevmode
              #2%
            \endgroup
          \else
            \@hyper@launch#7\\{#3}{#2}%
          \fi
        \else
%    \end{macrocode}
% otherwise its a URL
%    \begin{macrocode}
          \hyper@linkurl{#3}{#7\ifx\\#2\\\else\hyper@hash#2\fi}%
        \fi
      \fi
    \fi
  \fi
}
%    \end{macrocode}
%  By default, turn |run:| into |file:|
%    \begin{macrocode}
\def\@hyper@launch run:#1\\#2#3{% filename, anchor text, linkname
  \hyper@linkurl{#2}{%
    \Hy@linkfileprefix
    #1%
    \ifx\\#3\\%
    \else
      \hyper@hash
      #3%
    \fi
  }%
}
%    \end{macrocode}
% D P Story <story@uakron.edu> pointed out that relative paths
% starting .. fell over. Switched to using |\filename@parse| to
% solve this.
%    \begin{macrocode}
\def\@hyper@linkfile file:#1\\#2#3#4{%
     %file url,link string, name, original uri
  \filename@parse{#1}%
  \ifx\filename@ext\relax
    \edef\filename@ext{\XR@ext}%
  \fi
  \def\use@file{\filename@area\filename@base.\filename@ext}%
  \Hy@IfStringEndsWith\filename@ext\XR@ext{%
    \hyper@linkfile{#2}{\use@file}{#3}%
  }{%
    \ifx\@baseurl\@empty
      \hyper@linkurl{#2}{%
        #4\ifx\\#3\\\else\hyper@hash#3\fi
      }%
    \else
      \hyper@linkurl{#2}{\use@file\ifx\\#3\\\else\hyper@hash#3\fi}%
    \fi
  }%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\Hy@IfStringEndsWith#1#2{%
  \begingroup
    \edef\x{#1}%
    \@onelevel@sanitize\x
    \edef\x{.\x$}%
    \edef\y{#2}%
    \@onelevel@sanitize\y
    \edef\y{.\y$}%
    \expandafter\def\expandafter\z\expandafter##\expandafter1\y##2\@nil{%
      \endgroup
      \ifx\relax##2\relax
        \expandafter\@secondoftwo
      \else
        \expandafter\@firstoftwo
      \fi
    }%
  \expandafter\expandafter\expandafter\z\expandafter\x\y\@nil
}
%    \end{macrocode}
%    \begin{macrocode}
\def\Hy@StringLocalhost{localhost}
\@onelevel@sanitize\Hy@StringLocalhost
\def\Hy@CleanupFile#1{%
  \edef#1{#1}%
  \expandafter\Hy@@CleanupFile#1\hbox///\hbox\@nil{#1}%
}
\def\Hy@@CleanupFile#1//#2/#3\hbox#4\@nil#5{%
  \begingroup
    \toks@{\endgroup}%
    \def\x{#1}%
    \ifx\x\@empty
      \def\x{#2}%
      \ifx\x\@empty
        \toks@{\endgroup\def#5{/#3}}%
      \else
        \@onelevel@sanitize\x
        \ifx\x\Hy@StringLocalhost
          \toks@{\endgroup\def#5{/#3}}%
        \fi
      \fi
    \fi
  \the\toks@
}
%    \end{macrocode}
% Anchors have a name, and marked text.
% We have to be careful with the marked text, as if we break
% off part of something to put a |\special| around it, all hell breaks
% loose. Therefore, we check the category code of the first token,
% and only proceed if its safe. Tanmoy sorted this out.
%
% A curious case arises if the original parameter
% was in braces. That means that |#2| comes here a multiple
% letters, and the |noexpand| just looks at the first one,
% putting the rest in the output. Yuck.
%    \begin{macrocode}
\long\def\hyper@@anchor#1#2{\@hyper@@anchor#1\relax#2\relax}
\long\def\@hyper@@anchor#1\relax#2#3\relax{%
  \ifx\\#1\\%
    #2\Hy@Warning{Ignoring empty anchor}%
  \else
    \def\anchor@spot{#2#3}%
    \let\put@me@back\@empty
    \ifx\relax#2\relax
    \else
      \ifHy@nesting
      \else
        \ifcat a\noexpand#2\relax
        \else
          \ifcat 0\noexpand#2 \relax
          \else
%            \typeout{Anchor start is not alphanumeric %
%              on input line\the\inputlineno%
%            }%
            \let\anchor@spot\@empty
            \def\put@me@back{#2#3}%
          \fi
        \fi
      \fi
    \fi
    \ifHy@activeanchor
      \anchor@spot
    \else
      \hyper@anchor{#1}%
    \fi
    \expandafter\put@me@back
  \fi
  \let\anchor@spot\@empty
}
\let\anchor@spot\@empty
%    \end{macrocode}
%
% \section{Option `destlabel'}
%
%    \begin{macrocode}
\ifHy@destlabel
%    \end{macrocode}
%
%    \begin{macro}{\hyper@newdestlabel}
%    \begin{macrocode}
  \def\hyper@newdestlabel#1#2{%
    \begingroup
      \Hy@safe@activestrue
      \edef\x{\endgroup
        \noexpand\@newl@bel{HyDL}{#1}{#2}%
      }%
    \x
  }%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\hyper@destlabel@hook}
%    \begin{macrocode}
  \providecommand*{\hyper@destlabel@hook}{}%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Hy@DestRename}
%    \begin{macrocode}
  \newcommand*{\Hy@DestRename}[2]{%
    \@ifundefined{HyDL!#1}{%
      \begingroup
        \Hy@safe@activestrue
        \edef\dest@name{#1}%
        \edef\label@name{#2}%
        \hyper@destlabel@hook
        \Hy@IsNotEmpty{dest@name}{%
          \Hy@IsNotEmpty{label@name}{%
            \global\expandafter
            \let\csname HyDL!#1\endcsname\@empty
            \if@filesw
              \protected@write\@auxout{}{%
                \string\hyper@newdestlabel
                {#1}%
                {\label@name}%
              }%
            \fi
          }%
        }%
      \endgroup
    }{}%
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyperDestRename}
%    \begin{macrocode}
  \newcommand*{\HyperDestRename}[2]{%
    \AtBeginDocument{%
      \Hy@DestRename{#1}{#2}%
    }%
  }%
  \AtBeginDocument{%
    \let\HyperDestRename\Hy@DestRename
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@IsNotEmpty}
%    \begin{macrocode}
  \def\Hy@IsNotEmpty#1{%
    \@ifundefined{#1}\@gobble{%
      \expandafter\ifx\csname#1\endcsname\@empty
        \expandafter\@gobble
      \else
        \expandafter\@firstofone
      \fi
    }%
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
  \Hy@GlobalAppendToMacro\label@hook{%
    \HyperDestRename\@currentHref\label@name
  }%
%    \end{macrocode}
%
%    \begin{macro}{\HyperDestLabelReplace}
%    \begin{macrocode}
  \def\HyperDestLabelReplace#1{%
    \@ifundefined{HyDL@#1}{%
      #1%
    }{%
      \csname HyDL@#1\endcsname
    }%
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyperDestNameFilter}
%    \begin{macrocode}
\let\HyperDestNameFilter\HyperDestLabelReplace
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
\else
%    \end{macrocode}
%    \begin{macro}{\hyper@newdestlabel}
%    \begin{macrocode}
  \let\hyper@newdestlabel\@gobbletwo
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyperDestLabelReplace}
%    \begin{macrocode}
  \let\HyperDestLabelReplace\@firstofone
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyperDestRename}
%    \begin{macrocode}
  \let\HyperDestRename\@gobbletwo
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\fi
%    \end{macrocode}
%
%    \begin{macrocode}
\Hy@DisableOption{destlabel}
%    \end{macrocode}
%
%    Provide a dummy default definition of \cs{hyper@newdestlabel}
%    inside the .aux files.
%    \begin{macrocode}
\AddToHook{include/before}
 {\immediate\write\@partaux{\string\providecommand\string\hyper@newdestlabel[2]{}}}
\AddToHook{begindocument}
 {\immediate\write\@mainaux{\string\providecommand\string\hyper@newdestlabel[2]{}}}
%    \end{macrocode}
%
% \section{Forms creation}
% Allow for creation of PDF or HTML forms. The effects here are
% limited somewhat by the need to support both output formats,
% so it may not be as clever as something which only wants
% to make PDF forms.
%
% I (Sebastian) could not have started this without the
% encouragement of T V Raman.
%
% \subsection{Field flags}
%
%    The field flags are organized in a bit set.
%    \begin{macrocode}
\RequirePackage{bitset}
%    \end{macrocode}
%
%    Each flag has a option name, an \cs{if} switch,
%    and a bit position. The default is always `false', the
%    flag is clear.
%    This is also the default of the switch created by \cs{newif}.
%
%    The names of the flags in the PDF specification (1.7)
%    are used as lowercase option names.
%    \begin{macro}{\HyField@NewFlag}
%    |#1|: type: |F| annot flags, |Ff| field flags\\
%    |#2|: PDF name\\
%    |#3|: PDF position
%    \begin{macrocode}
\def\HyField@NewFlag#1#2{%
  \lowercase{\HyField@NewOption{#2}}%
  \lowercase{\HyField@NewBitsetFlag{#2}}{#2}{#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@NewFlagOnly}
%    \begin{macrocode}
\def\HyField@NewFlagOnly#1#2{%
  \lowercase{\HyField@NewBitsetFlag{#2}}{#2}{#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@NewOption}
%    |#1|: option name
%    \begin{macrocode}
\def\HyField@NewOption#1{%
  \expandafter\newif\csname ifFld@#1\endcsname
  \define@key{Field}{#1}[true]{%
    \lowercase{\Field@boolkey{##1}}{#1}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@NewBitsetFlag}
%    Package `bitset' uses zero based positions, the
%    PDF specification starts with one.\\
%    |#1|: option\\
%    |#2|: PDF name\\
%    |#3|: type: |F| annot flags, |Ff| field flags\\
%    |#4|: PDF position
%    \begin{macrocode}
\def\HyField@NewBitsetFlag#1#2#3#4{%
  \begingroup
    \count@=#4\relax
    \advance\count@\m@ne
    \def\x##1{%
      \endgroup
      \expandafter\def\csname HyField@#3@#1\endcsname{##1}%
      \expandafter\ifx\csname HyField@#3@##1\endcsname\relax
        \expandafter\edef\csname HyField@#3@##1\endcsname{%
          (\number#4) #2%
        }%
      \else
        \expandafter\edef\csname HyField@#3@##1\endcsname{%
          \csname HyField@#3@##1\endcsname
          /#2%
        }%
      \fi
    }%
  \expandafter\x\expandafter{\the\count@}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@UseFlag}
%    The bit set is |HyField@#1|
%    \begin{macrocode}
\def\HyField@UseFlag#1#2{%
  \lowercase{\HyField@@UseFlag{#2}}{#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@@UseFlag}
%    \begin{macrocode}
\def\HyField@@UseFlag#1#2{%
  \bitsetSetValue{HyField@#2}{%
    \csname HyField@#2@#1\endcsname
  }{%
    \csname ifFld@#1\endcsname 1\else 0\fi
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@SetFlag}
%    The bit set is |HyField@#1|
%    \begin{macrocode}
\def\HyField@SetFlag#1#2{%
  \lowercase{\HyField@@SetFlag{#2}}{#1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@@SetFlag}
%    \begin{macrocode}
\def\HyField@@SetFlag#1#2{%
  \bitsetSetValue{HyField@#2}{%
    \csname HyField@#2@#1\endcsname
  }{1}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@PrintFlags}
%    \begin{macrocode}
\def\HyField@PrintFlags#1#2{%
  \ifHy@verbose
    \begingroup
      \let\Hy@temp\@empty
      \let\MessageBreak\relax
      \expandafter\@for\expandafter\x\expandafter:\expandafter=%
      \bitsetGetSetBitList{HyField@#1}\do{%
        \edef\Hy@temp{%
          \Hy@temp
          \csname HyField@#1@\x\endcsname\MessageBreak
        }%
      }%
    \edef\x{\endgroup
      \noexpand\Hy@Info{%
        Field flags: %
          \expandafter\ifx\@car#1\@nil S\else/\fi
          #1 %
          \bitsetGetDec{HyField@#1} %
          (0x\bitsetGetHex{HyField@#1}{32})\MessageBreak
        \Hy@temp
        for #2%
      }%
    }\x
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Declarations of field flags}
%
%    ``Table 8.70 Field flags common to all field types''
%    \begin{macrocode}
\HyField@NewFlag{Ff}{ReadOnly}{1}
\HyField@NewFlag{Ff}{Required}{2}
\HyField@NewFlag{Ff}{NoExport}{3}
%    \end{macrocode}
%    ``Table 8.75 Field flags specific to button fields''
%    \begin{macrocode}
\HyField@NewFlag{Ff}{NoToggleToOff}{15}
\HyField@NewFlag{Ff}{Radio}{16}
\HyField@NewFlag{Ff}{Pushbutton}{17}
\HyField@NewFlag{Ff}{RadiosInUnison}{26}
%    \end{macrocode}
%    ``Table 8.77 Field flags specific to text fields''
%    \begin{macrocode}
\HyField@NewFlag{Ff}{Multiline}{13}
\HyField@NewFlag{Ff}{Password}{14}
\HyField@NewFlag{Ff}{FileSelect}{21}% PDF 1.4
\HyField@NewFlag{Ff}{DoNotSpellCheck}{23}% PDF 1.4
\HyField@NewFlag{Ff}{DoNotScroll}{24}% PDF 1.4
\HyField@NewFlag{Ff}{Comb}{25}% PDF 1.4
\HyField@NewFlag{Ff}{RichText}{26}% PDF 1.5
%    \end{macrocode}
%    ``Table 8.79 field flags specific to choice fields''
%    \begin{macrocode}
\HyField@NewFlag{Ff}{Combo}{18}
\HyField@NewFlag{Ff}{Edit}{19}
\HyField@NewFlag{Ff}{Sort}{20}
\HyField@NewFlag{Ff}{MultiSelect}{22}% PDF 1.4
% \HyField@NewFlag{Ff}{DoNotSpellCheck}{23}% PDF 1.4
\HyField@NewFlag{Ff}{CommitOnSelChange}{27}% PDF 1.5
%    \end{macrocode}
%    Signature fields are not supported.
%
%    Until 6.76i hyperref uses field option `combo' to set
%    three flags `Combo', `Edit', and `Sort'. Option `popdown' sets
%    flag `Combo' only.
%    \begin{macrocode}
\newif\ifFld@popdown
\define@key{Field}{popdown}[true]{%
  \lowercase{\Field@boolkey{#1}}{popdown}%
}
%    \end{macrocode}
%
%    Annotation flags. The form objects are widget annotations.
%    There are two flags for readonly settings, the one in the annotation
%    flags is ignored, instead the other in the field flags is used.
%
%    Flag |Print| is not much useful, because hyperref do not
%    use the appearance entry of the annotations for most fields.
%    \begin{macrocode}
\HyField@NewFlag{F}{Invisible}{1}
\HyField@NewFlag{F}{Hidden}{2}% PDF 1.2
\HyField@NewFlag{F}{Print}{3}% PDF 1.2
\HyField@NewFlag{F}{NoZoom}{4}% PDF 1.2
\HyField@NewFlag{F}{NoRotate}{5}% PDF 1.3
\HyField@NewFlag{F}{NoView}{6}% PDF 1.3
\HyField@NewFlag{F}{Locked}{8}% PDF 1.4
\HyField@NewFlag{F}{ToggleNoView}{9}% PDF 1.5
\HyField@NewFlag{F}{LockedContents}{10}% PDF 1.7
%    \end{macrocode}
%
%    \begin{macrocode}
\ifHy@pdfa
  \def\HyField@PDFAFlagWarning#1#2{%
    \Hy@Warning{%
      PDF/A: Annotation flag `#1' must\MessageBreak
      be set to `#2'%
    }%
  }%
  \Fld@invisiblefalse
  \def\Fld@invisibletrue{%
    \HyField@PDFAFlagWarning{invisible}{false}%
  }%
  \Fld@hiddenfalse
  \def\Fld@hiddentrue{%
    \HyField@PDFAFlagWarning{hidden}{false}%
  }%
  \Fld@printtrue
  \def\Fld@printfalse{%
    \HyField@PDFAFlagWarning{print}{true}%
  }%
  \Fld@nozoomtrue
  \def\Fld@nozoomfalse{%
    \HyField@PDFAFlagWarning{nozoom}{true}%
  }%
  \Fld@norotatetrue
  \def\Fld@norotatefalse{%
    \HyField@PDFAFlagWarning{norotate}{true}%
  }%
  \Fld@noviewfalse
  \def\Fld@noviewtrue{%
    \HyField@PDFAFlagWarning{noview}{false}%
  }%
\fi
%    \end{macrocode}
%
%    Submit flags. Flag 1 Include/Exclude is not supported,
%    use option noexport instead.
%    \begin{macrocode}
\HyField@NewFlag{Submit}{IncludeNoValueFields}{2}
\HyField@NewFlagOnly{Submit}{ExportFormat}{3}
\HyField@NewFlag{Submit}{GetMethod}{4}
\HyField@NewFlag{Submit}{SubmitCoordinates}{5}
\HyField@NewFlagOnly{Submit}{XFDF}{6}
\HyField@NewFlag{Submit}{IncludeAppendSaves}{7}
\HyField@NewFlag{Submit}{IncludeAnnotations}{8}
\HyField@NewFlagOnly{Submit}{SubmitPDF}{9}
\HyField@NewFlag{Submit}{CanonicalFormat}{10}
\HyField@NewFlag{Submit}{ExclNonUserAnnots}{11}
\HyField@NewFlag{Submit}{ExclFKey}{12}
\HyField@NewFlag{Submit}{EmbedForm}{14}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Field}{export}{%
  \lowercase{\def\Hy@temp{#1}}%
  \@ifundefined{Fld@export@\Hy@temp}{%
    \@onelevel@sanitize\Hy@temp
    \Hy@Error{%
      Unknown export format `\Hy@temp'.\MessageBreak
      Known formats are `FDF', `HTML', `XFDF', and `PDF'%
    }\@ehc
  }{%
    \let\Fld@export\Hy@temp
  }%
}
\def\Fld@export{fdf}
\@namedef{Fld@export@fdf}{0}%
\@namedef{Fld@export@html}{1}%
\@namedef{Fld@export@xfdf}{2}%
\@namedef{Fld@export@pdf}{3}%
%    \end{macrocode}
%
% \subsubsection{Set submit flags}
%
%    \begin{macro}{\HyField@FlagsSubmit}
%    \begin{macrocode}
\def\HyField@FlagsSubmit{%
  \bitsetReset{HyField@Submit}%
  \ifcase\@nameuse{Fld@export@\Fld@export} %
    % FDF
    \HyField@UseFlag{Submit}{IncludeNoValueFields}%
    \HyField@UseFlag{Submit}{SubmitCoordinates}%
    \HyField@UseFlag{Submit}{IncludeAppendSaves}%
    \HyField@UseFlag{Submit}{IncludeAnnotations}%
    \HyField@UseFlag{Submit}{CanonicalFormat}%
    \HyField@UseFlag{Submit}{ExclNonUserAnnots}%
    \HyField@UseFlag{Submit}{ExclFKey}%
    \HyField@UseFlag{Submit}{EmbedForm}%
  \or % HTML
    \HyField@SetFlag{Submit}{ExportFormat}%
    \HyField@UseFlag{Submit}{IncludeNoValueFields}%
    \HyField@UseFlag{Submit}{GetMethod}%
    \HyField@UseFlag{Submit}{SubmitCoordinates}%
    \HyField@UseFlag{Submit}{CanonicalFormat}%
  \or % XFDF
    \HyField@SetFlag{Submit}{XFDF}%
    \HyField@UseFlag{Submit}{IncludeNoValueFields}%
    \HyField@UseFlag{Submit}{SubmitCoordinates}%
    \HyField@UseFlag{Submit}{CanonicalFormat}%
  \or % PDF
    \HyField@SetFlag{Submit}{SubmitPDF}%
    \HyField@UseFlag{Submit}{GetMethod}%
  \fi
  \HyField@PrintFlags{Submit}{submit button field}%
  \bitsetIsEmpty{HyField@Submit}{%
    \let\Fld@submitflags\@empty
  }{%
    \edef\Fld@submitflags{/Flags \bitsetGetDec{HyField@Submit}}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Set annot flags in fields}
%
%    \begin{macro}{\HyField@FlagsAnnot}
%    \begin{macrocode}
\def\HyField@FlagsAnnot#1{%
  \bitsetReset{HyField@F}%
  \HyField@UseFlag{F}{Invisible}%
  \HyField@UseFlag{F}{Hidden}%
  \HyField@UseFlag{F}{Print}%
  \HyField@UseFlag{F}{NoZoom}%
  \HyField@UseFlag{F}{NoRotate}%
  \HyField@UseFlag{F}{NoView}%
  \HyField@UseFlag{F}{Locked}%
  \HyField@UseFlag{F}{ToggleNoView}%
  \HyField@UseFlag{F}{LockedContents}%
  \HyField@PrintFlags{F}{#1}%
  \bitsetIsEmpty{HyField@F}{%
    \let\Fld@annotflags\@empty
  }{%
    \edef\Fld@annotflags{/F \bitsetGetDec{HyField@F}}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Pushbutton field}
%
%    \begin{macro}{\HyField@FlagsPushButton}
%    \begin{macrocode}
\def\HyField@FlagsPushButton{%
  \HyField@FlagsAnnot{push button field}%
  \bitsetReset{HyField@Ff}%
  \HyField@UseFlag{Ff}{ReadOnly}%
  \HyField@UseFlag{Ff}{Required}%
  \HyField@UseFlag{Ff}{NoExport}%
  \HyField@SetFlag{Ff}{Pushbutton}%
  \HyField@PrintFlags{Ff}{push button field}%
  \bitsetIsEmpty{HyField@Ff}{%
    \let\Fld@flags\@empty
  }{%
    \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Check box field}
%
%    \begin{macro}{\HyField@FlagsCheckBox}
%    \begin{macrocode}
\def\HyField@FlagsCheckBox{%
  \HyField@FlagsAnnot{check box field}%
  \bitsetReset{HyField@Ff}%
  \HyField@UseFlag{Ff}{ReadOnly}%
  \HyField@UseFlag{Ff}{Required}%
  \HyField@UseFlag{Ff}{NoExport}%
  \HyField@PrintFlags{Ff}{check box field}%
  \bitsetIsEmpty{HyField@Ff}{%
    \let\Fld@flags\@empty
  }{%
    \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Radio button field}
%
%    \begin{macro}{\HyField@FlagsRadioButton}
%    \begin{macrocode}
\def\HyField@FlagsRadioButton{%
  \HyField@FlagsAnnot{radio button field}%
  \bitsetReset{HyField@Ff}%
  \HyField@UseFlag{Ff}{ReadOnly}%
  \HyField@UseFlag{Ff}{Required}%
  \HyField@UseFlag{Ff}{NoExport}%
  \HyField@UseFlag{Ff}{NoToggleToOff}%
  \HyField@SetFlag{Ff}{Radio}%
  \HyField@UseFlag{Ff}{RadiosInUnison}%
  \HyField@PrintFlags{Ff}{radio button field}%
  \bitsetIsEmpty{HyField@Ff}{%
    \let\Fld@flags\@empty
  }{%
    \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Text fields}
%
%    \begin{macro}{\HyField@FlagsText}
%    \begin{macrocode}
\def\HyField@FlagsText{%
  \HyField@FlagsAnnot{text field}%
  \bitsetReset{HyField@Ff}%
  \HyField@UseFlag{Ff}{ReadOnly}%
  \HyField@UseFlag{Ff}{Required}%
  \HyField@UseFlag{Ff}{NoExport}%
  \HyField@UseFlag{Ff}{Multiline}%
  \HyField@UseFlag{Ff}{Password}%
  \HyField@UseFlag{Ff}{FileSelect}%
  \HyField@UseFlag{Ff}{DoNotSpellCheck}%
  \HyField@UseFlag{Ff}{DoNotScroll}%
  \ifFld@comb
    \ifcase0\ifFld@multiline
            \else\ifFld@password
            \else\ifFld@fileselect
            \else 1\fi\fi\fi\relax
      \Hy@Error{%
        Field option `comb' cannot used together with\MessageBreak
        `multiline', `password', or `fileselect'%
      }\@ehc
    \else
      \HyField@UseFlag{Ff}{Comb}%
    \fi
  \fi
  \HyField@UseFlag{Ff}{RichText}%
  \HyField@PrintFlags{Ff}{text field}%
  \bitsetIsEmpty{HyField@Ff}{%
    \let\Fld@flags\@empty
  }{%
    \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Choice fields}
%
%    \begin{macro}{\HyField@FlagsChoice}
%    \begin{macrocode}
\def\HyField@FlagsChoice{%
  \HyField@FlagsAnnot{choice field}%
  \bitsetReset{HyField@Ff}%
  \HyField@UseFlag{Ff}{ReadOnly}%
  \HyField@UseFlag{Ff}{Required}%
  \HyField@UseFlag{Ff}{NoExport}%
  \HyField@UseFlag{Ff}{Combo}%
  \ifFld@combo
    \HyField@UseFlag{Ff}{Edit}%
  \fi
  \HyField@UseFlag{Ff}{Sort}%
  \HyField@UseFlag{Ff}{MultiSelect}%
  \ifFld@combo
    \ifFld@edit
      \HyField@UseFlag{Ff}{DoNotSpellCheck}%
    \fi
  \fi
  \HyField@UseFlag{Ff}{CommitOnSelChange}%
  \HyField@PrintFlags{Ff}{choice field}%
  \bitsetIsEmpty{HyField@Ff}{%
    \let\Fld@flags\@empty
  }{%
    \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Choice field}
%
%    \begin{macro}{\HyField@PDFChoices}
%    |#1|: list of choices in key value syntax, key = exported name,
%    value = displayed text.\\
%    Input: \cs{Fld@default}, \cs{Fld@value}, \cs{ifFld@multiselect}\\
%    Result: \cs{Fld@choices} with entries: |/Opt|, |/DV|, |/V|, |/I|.
%    \begin{macrocode}
\def\HyField@PDFChoices#1{%
  \begingroup
    \global\let\Fld@choices\@empty
    \let\HyTmp@optlist\@empty
    \let\HyTmp@optitem\relax
    \count@=0 %
    \kv@parse{#1}{%
      \Hy@pdfstringdef\kv@key\kv@key
      \ifx\kv@value\relax
        \ifnum\Hy@pdf@majorminor@version<103 % implementation note 122, PDF spec 1.7
          \xdef\Fld@choices{\Fld@choices[(\kv@key)(\kv@key)]}%
        \else
          \xdef\Fld@choices{\Fld@choices(\kv@key)}%
        \fi
      \else
        \Hy@pdfstringdef\kv@value\kv@value
        \xdef\Fld@choices{\Fld@choices[(\kv@value)(\kv@key)]}%
      \fi
      \edef\HyTmp@optlist{%
        \HyTmp@optlist
        \HyTmp@optitem{\the\count@}{\kv@key}0%
      }%
      \advance\count@ by 1 %
      \@gobbletwo
    }%
    \xdef\Fld@choices{/Opt[\Fld@choices]}%
    \ifFld@multiselect
      \HyField@@PDFChoices{DV}\Fld@default
      \HyField@@PDFChoices{V}\Fld@value
    \else
      \ifx\Fld@default\relax
      \else
        \xdef\Fld@choices{\Fld@choices/DV(\Fld@default)}%
      \fi
      \ifx\Fld@value\relax
      \else        
        \xdef\Fld@choices{\Fld@choices/V(\Fld@value)}%
      \fi
    \fi
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@@PDFChoices}
%    \begin{macrocode}
\def\HyField@@PDFChoices#1#2{%
  \ifx#2\relax
  \else
    \count@=0 %
    \def\HyTmp@optitem##1##2##3{%
      \def\HyTmp@key{##2}%
      \ifx\HyTmp@key\Hy@gtemp
        \expandafter\def\expandafter\HyTmp@optlist\expandafter{%
          \HyTmp@optlist
          \HyTmp@optitem{##1}{##2}1%
        }%
        \let\HyTmp@found=Y%
      \else
        \expandafter\def\expandafter\HyTmp@optlist\expandafter{%
          \HyTmp@optlist
          \HyTmp@optitem{##1}{##2}##3%
        }%
      \fi
    }%
    \expandafter\comma@parse\expandafter{#2}{%
      \pdfstringdef\Hy@gtemp\comma@entry
      \let\HyTmp@found=N %
      \expandafter\let\expandafter\HyTmp@optlist\expandafter\@empty
      \HyTmp@optlist
      \ifx\HyTmp@found Y%
        \advance\count@ by 1 %
      \else
        \@onelevel@sanitize\comma@entry
        \PackageWarning{hyperref}{%
          \string\ChoiceBox: Ignoring value `\comma@entry',%
          \MessageBreak
          it cannot be found in the choices%
        }%
      \fi
      \@gobble
    }%
    \def\HyTmp@optitem##1##2##3{%
      \ifnum##3=1 %
        (##2)%
      \fi
    }%
    \ifcase\count@
    \or
      \xdef\Fld@choices{\Fld@choices/#1\HyTmp@optlist}%
    \else
      \xdef\Fld@choices{\Fld@choices/#1[\HyTmp@optlist]}%
      \ifx#1V%
        \def\HyTmp@optitem##1##2##3{%
          \ifnum##3=1 %
            \@firstofone{ ##1}%
          \fi
        }%
        \edef\HyTmp@optlist{\HyTmp@optlist}%
        \xdef\Fld@choices{%
          \Fld@choices
          /I[\expandafter\@firstofone\HyTmp@optlist]%
        }%
      \fi
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
% \subsection{Forms}
%
%    \begin{macro}{\HyField@SetKeys}
%    \begin{macrocode}
\def\HyField@SetKeys{%
  \kvsetkeys{Field}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
\newif\ifFld@checked
\newif\ifFld@disabled
\Fld@checkedfalse
\Fld@disabledfalse
\newcount\Fld@menulength
\newdimen\Field@Width
\newdimen\Fld@charsize
\Fld@charsize=10\p@
\def\Fld@maxlen{0}
\def\Fld@align{0}
\def\Fld@color{0 0 0 rg}
\def\Fld@bcolor{1 1 1}
\def\Fld@bordercolor{1 0 0}
\def\Fld@bordersep{1\p@}
\def\Fld@borderwidth{1}
\def\Fld@borderstyle{S}
\def\Fld@cbsymbol{4}
\def\Fld@radiosymbol{H}
\def\Fld@rotation{0}
\def\Form{\@ifnextchar[{\@Form}{\@Form[]}}
\def\endForm{\@endForm}
\newif\ifForm@html
\Form@htmlfalse
\def\Form@boolkey#1#2{%
  \csname Form@#2\ifx\relax#1\relax true\else#1\fi\endcsname
}
\define@key{Form}{action}{%
  \hyper@normalise\Hy@DefFormAction{#1}%
}
\def\Hy@DefFormAction{\def\Form@action}
\def\enc@@html{html}
\define@key{Form}{encoding}{%
  \def\Hy@tempa{#1}%
  \ifx\Hy@tempa\enc@@html
    \Form@htmltrue
    \def\Fld@export{html}%
  \else
    \Hy@Warning{%
       Form `encoding' key with \MessageBreak
       unknown value `#1'%
    }%
    \Form@htmlfalse
  \fi
}
\define@key{Form}{method}{%
  \lowercase{\def\Hy@temp{#1}}%
  \@ifundefined{Form@method@\Hy@temp}{%
    \@onelevel@sanitize\Hy@temp
    \Hy@Error{%
      Unknown method `\Hy@temp'.\MessageBreak
      Known values are `post' and `get'%
    }\@ehc
  }{%
    \let\Form@method\Hy@temp
    \ifcase\@nameuse{Form@method@\Hy@temp} %
      \Fld@getmethodfalse
    \else
      \Fld@getmethodtrue
    \fi
  }%
}
\def\Form@method{}
\@namedef{Form@method@post}{0}
\@namedef{Form@method@get}{1}
%    \end{macrocode}
%    \begin{macrocode}
\newif\ifHyField@NeedAppearances
\def\HyField@NeedAppearancesfalse{%
  \global\let\ifHyField@NeedAppearances\iffalse
}
\def\HyField@NeedAppearancestrue{%
  \global\let\ifHyField@NeedAppearances\iftrue
}
\HyField@NeedAppearancestrue
\define@key{Form}{NeedAppearances}[true]{%
  \edef\Hy@tempa{#1}%
  \ifx\Hy@tempa\Hy@true
    \HyField@NeedAppearancestrue
  \else
    \ifx\Hy@tempa\Hy@false
      \HyField@NeedAppearancesfalse
    \else
      \Hy@Error{%
        Unexpected value `\Hy@tempa'\MessageBreak
        of option `NeedAppearances' instead of\MessageBreak
        `true' or `false'%
      }\@ehc
    \fi
  \fi
}
\def\Field@boolkey#1#2{%
  \csname Fld@#2\ifx\relax#1\relax true\else#1\fi\endcsname
}
\ifHy@texht
  \newtoks\Field@toks
  \Field@toks={ }%
  \def\Field@addtoks#1#2{%
    \edef\@processme{\Field@toks{\the\Field@toks\space #1="#2"}}%
    \@processme
  }%
\else
  \def\Hy@WarnHTMLFieldOption#1{%
    \Hy@Warning{%
      HTML field option `#1'\MessageBreak
      is ignored%
    }%
  }%
\fi
\def\Fld@checkequals#1=#2=#3\\{%
  \def\@currDisplay{#1}%
  \ifx\\#2\\%
    \def\@currValue{#1}%
  \else
    \def\@currValue{#2}%
  \fi
  \expandafter\Hy@pdfstringdef\expandafter\@currValue\expandafter{\@currValue}%
}
\define@key{Field}{loc}{%
  \def\Fld@loc{#1}%
}
\define@key{Field}{checked}[true]{%
  \lowercase{\Field@boolkey{#1}}{checked}%
}
\define@key{Field}{disabled}[true]{%
  \lowercase{\Field@boolkey{#1}}{disabled}%
}
\ifHy@texht
  \define@key{Field}{accesskey}{%
    \Field@addtoks{accesskey}{#1}%
  }%
  \define@key{Field}{tabkey}{%
    \Field@addtoks{tabkey}{#1}%
  }%
\else
  \define@key{Field}{accesskey}{%
    \Hy@WarnHTMLFieldOption{accesskey}%
  }%
  \define@key{Field}{tabkey}{%
    \Hy@WarnHTMLFieldOption{tabkey}%
  }%
\fi
\define@key{Field}{name}{%
  \def\Fld@name{#1}%
}
\let\Fld@altname\relax
\define@key{Field}{altname}{%
  \def\Fld@altname{#1}%
}
\let\Fld@mappingname\relax
\define@key{Field}{mappingname}{%
  \def\Fld@mappingname{#1}%
}
\define@key{Field}{width}{%
  \def\Fld@width{#1}%
  \Field@Width#1\setbox0=\hbox{m}%
}
\define@key{Field}{maxlen}{%
  \def\Fld@maxlen{#1}%
}
\define@key{Field}{menulength}{%
  \Fld@menulength=#1\relax
}
\define@key{Field}{height}{%
  \def\Fld@height{#1}%
}
\define@key{Field}{charsize}{%
  \setlength{\Fld@charsize}{#1}%
}
\define@key{Field}{borderwidth}{%
  \Hy@defaultbp\Fld@borderwidth{#1}%
}
\def\Hy@defaultbp#1#2{%
  \begingroup
  \afterassignment\Hy@defaultbpAux
  \dimen@=#2bp\relax{#1}{#2}%
}
\def\Hy@defaultbpAux#1\relax#2#3{%
  \ifx!#1!%
    \endgroup
    \def#2{#3}%
  \else
    \edef\x{\endgroup
      \def\noexpand#2{%
        \strip@pt\dimexpr\dimen@*800/803\relax
      }%
    }\x
  \fi
}%
\define@key{Field}{borderstyle}{%
  \let\Hy@temp\Fld@borderstyle
  \def\Fld@borderstyle{#1}%
  \Hy@Match\Fld@borderstyle{}{%
    ^[SDBIU]$%
  }{}{%
    \Hy@Warning{%
      Invalid value `\@pdfborderstyle'\MessageBreak
      for option `pdfborderstyle'. Valid values:\MessageBreak
      \space\space S (Solid), D (Dashed), B (Beveled),\MessageBreak
      \space\space I (Inset), U (Underline)\MessageBreak
      Option setting is ignored%
    }%
    \let\Fld@borderstyle\Hy@temp
  }%
}
\define@key{Field}{bordersep}{%
  \def\Fld@bordersep{#1}%
}
\define@key{Field}{default}{%
  \Hy@pdfstringdef\Fld@default{#1}%
}
\define@key{Field}{align}{%
  \def\Fld@align{#1}%
}
\define@key{Field}{value}{%
  \Hy@pdfstringdef\Fld@value{#1}%
}
\define@key{Field}{checkboxsymbol}{%
  \Fld@DingDef\Fld@cbsymbol{#1}%
}
\define@key{Field}{radiosymbol}{%
  \Fld@DingDef\Fld@radiosymbol{#1}%
}
\def\Fld@DingDef#1#2{%
  \let\Fld@temp\@empty
  \Fld@@DingDef#2\ding{}\@nil
  \let#1\Fld@temp
}
\def\Fld@@DingDef#1\ding#2#3\@nil{%
  \expandafter\def\expandafter\Fld@temp\expandafter{%
    \Fld@temp
    #1%
  }%
  \ifx\\#3\\%
    \expandafter\@gobble
  \else
    \begingroup
      \lccode`0=#2\relax
    \lowercase{\endgroup
      \expandafter\def\expandafter\Fld@temp\expandafter{%
        \Fld@temp
        0%
      }%
    }%
    \expandafter\@firstofone
  \fi
  {%
    \Fld@@DingDef#3\@nil
  }%
}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Field}{rotation}{%
  \def\Fld@rotation{#1}%
}
%    \end{macrocode}
%    \begin{macrocode}
\define@key{Field}{backgroundcolor}{%
  \HyColor@FieldBColor{#1}\Fld@bcolor{hyperref}{backgroundcolor}%
}
\define@key{Field}{bordercolor}{%
  \HyColor@FieldBColor{#1}\Fld@bordercolor{hyperref}{bordercolor}%
}
\define@key{Field}{color}{%
  \HyColor@FieldColor{#1}\Fld@color{hyperref}{color}%
}
%    \end{macrocode}
%    \begin{macrocode}
\let\Fld@onclick@code\@empty
\let\Fld@format@code\@empty
\let\Fld@validate@code\@empty
\let\Fld@calculate@code\@empty
\let\Fld@keystroke@code\@empty
\let\Fld@onfocus@code\@empty
\let\Fld@onblur@code\@empty
\let\Fld@onmousedown@code\@empty
\let\Fld@onmouseup@code\@empty
\let\Fld@onenter@code\@empty
\let\Fld@onexit@code\@empty
\def\Hy@temp#1{%
  \expandafter\Hy@@temp\csname Fld@#1@code\endcsname{#1}%
}
\def\Hy@@temp#1#2{%
  \ifHy@pdfa
    \define@key{Field}{#2}{%
      \Hy@Error{%
        PDF/A: Additional action `#2' is prohibited%
      }\@ehc
    }%
  \else
    \define@key{Field}{#2}{%
      \def#1{##1}%
    }%
  \fi
}
\Hy@temp{keystroke}
\Hy@temp{format}
\Hy@temp{validate}
\Hy@temp{calculate}
\Hy@temp{onfocus}
\Hy@temp{onblur}
\Hy@temp{onmousedown}
\Hy@temp{onmouseup}
\Hy@temp{onenter}
\Hy@temp{onexit}
%    \end{macrocode}
%    \begin{macrocode}
\let\Fld@calculate@sortkey\@empty
\define@key{Field}{calculatesortkey}[1]{%
  \def\Fld@calculate@sortkey{#1}%
}
%    \end{macrocode}
%    \begin{macrocode}
\ifHy@texht
  \def\Hy@temp#1{%
    \define@key{Field}{#1}{%
      \Field@addtoks{#1}{##1}%
    }%
  }%
\else
  \def\Hy@temp#1{%
    \define@key{Field}{#1}{%
      \Hy@WarnHTMLFieldOption{#1}%
    }%
  }%
\fi
\Hy@temp{ondblclick}
\Hy@temp{onmouseover}
\Hy@temp{onmousemove}
\Hy@temp{onmouseout}
\Hy@temp{onkeydown}
\Hy@temp{onkeyup}
\Hy@temp{onselect}
\Hy@temp{onchange}
\Hy@temp{onkeypress}
\ifHy@texht
  \define@key{Field}{onclick}{%
    \Field@addtoks{onclick}{#1}%
  }%
\else
  \ifHy@pdfa
    \define@key{Field}{onclick}{%
      \Hy@Error{%
        PDF/A: Action `onclick' is prohibited%
      }\@ehc
    }%
  \else
    \define@key{Field}{onclick}{%
      \def\Fld@onclick@code{#1}%
    }%
  \fi
\fi
%    \end{macrocode}
%    \begin{macrocode}
\DeclareRobustCommand\TextField{%
  \@ifnextchar[{\@TextField}{\@TextField[]}%
}
\DeclareRobustCommand\ChoiceMenu{%
  \@ifnextchar[{\@ChoiceMenu}{\@ChoiceMenu[]}%
}
\DeclareRobustCommand\CheckBox{%
  \@ifnextchar[{\@CheckBox}{\@CheckBox[]}%
}
\DeclareRobustCommand\PushButton{%
  \@ifnextchar[{\@PushButton}{\@PushButton[]}%
}
\DeclareRobustCommand\Gauge{%
  \@ifnextchar[{\@Gauge}{\@Gauge[]}%
}
\DeclareRobustCommand\Submit{%
  \@ifnextchar[{\@Submit}{\@Submit[]}%
}
\DeclareRobustCommand\Reset{%
  \@ifnextchar[{\@Reset}{\@Reset[]}%
}
\def\LayoutTextField#1#2{% label, field
  \def\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
    #2%
  \else
    #1 #2%
  \fi
}
\def\LayoutChoiceField#1#2{% label, field
  \def\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
    #2%
  \else
    #1 #2%
  \fi
}
\def\LayoutCheckField#1#2{% label, field
  \def\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
    #2%
  \else
    #1 #2%
  \fi
}
\def\LayoutPushButtonField#1{% button
  #1%
}
\def\MakeRadioField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
\def\MakeCheckField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
\def\MakeTextField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
\def\MakeChoiceField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
\def\MakeButtonField#1{%
  \sbox0{%
    \hskip\Fld@borderwidth bp#1\hskip\Fld@borderwidth bp%
  }%
  \@tempdima\ht0 %
  \advance\@tempdima by \Fld@borderwidth bp %
  \advance\@tempdima by \Fld@borderwidth bp %
  \ht0\@tempdima
  \@tempdima\dp0 %
  \advance\@tempdima by \Fld@borderwidth bp %
  \advance\@tempdima by \Fld@borderwidth bp %
  \dp0\@tempdima
  \box0\relax
}
\def\DefaultHeightofSubmit{14pt}
\def\DefaultWidthofSubmit{2cm}
\def\DefaultHeightofReset{14pt}
\def\DefaultWidthofReset{2cm}
\def\DefaultHeightofCheckBox{\normalbaselineskip}
\def\DefaultWidthofCheckBox{\normalbaselineskip}
\def\DefaultHeightofChoiceMenu{\normalbaselineskip}
\def\DefaultWidthofChoiceMenu{\normalbaselineskip}
\def\DefaultHeightofText{\normalbaselineskip}
\def\DefaultHeightofTextMultiline{4\normalbaselineskip}
\def\DefaultWidthofText{3cm}
\def\DefaultOptionsofSubmit{print,name=Submit,noexport}
\def\DefaultOptionsofReset{print,name=Reset,noexport}
\def\DefaultOptionsofPushButton{print}
\def\DefaultOptionsofCheckBox{print}
\def\DefaultOptionsofText{print}
%    \end{macrocode}
%    Default options for the types of \cs{ChoiceMenu}.
%    \begin{macrocode}
\def\DefaultOptionsofListBox{print}
\def\DefaultOptionsofComboBox{print,edit,sort}
\def\DefaultOptionsofPopdownBox{print}
\def\DefaultOptionsofRadio{print,notoggletooff}
%    \end{macrocode}
%
% \section{Setup}
%    \begin{macrocode}
\ifHy@hyperfigures
  \Hy@Info{Hyper figures ON}%
\else
  \Hy@Info{Hyper figures OFF}%
\fi
\ifHy@nesting
  \Hy@Info{Link nesting ON}%
\else
  \Hy@Info{Link nesting OFF}%
\fi
\ifHy@hyperindex
  \Hy@Info{Hyper index ON}%
\else
  \Hy@Info{Hyper index OFF}%
\fi
\ifHy@backref
  \Hy@Info{backreferencing ON}%
\else
  \Hy@Info{backreferencing OFF}%
\fi
\ifHy@colorlinks
  \Hy@Info{Link coloring ON}%
\else
  \Hy@Info{Link coloring OFF}%
\fi
\ifHy@ocgcolorlinks
  \Hy@Info{Link coloring with OCG ON}%
\else
  \Hy@Info{Link coloring with OCG OFF}%
\fi
\ifHy@pdfa
  \Hy@Info{PDF/A mode ON}%
\else
  \Hy@Info{PDF/A mode OFF}%
\fi
%    \end{macrocode}
% \section{Low-level utility macros}
% We need unrestricted access to the |#|, |~| and |"| characters, so make
% them nice macros.
%    \begin{macrocode}
\edef\hyper@hash{\string#}
\edef\hyper@tilde{\string~}
\edef\hyper@quote{\string"}
%    \end{macrocode}
%    Support \cs{label} before |\begin{document}|.
%    \begin{macrocode}
\def\@currentHref{Doc-Start}
\let\Hy@footnote@currentHref\@empty
%    \end{macrocode}
% We give the start of document a special label; this is used
% in backreferencing-by-section, to allow for cites before
% any sectioning commands. Set up PDF info.
%    \begin{macrocode}
\Hy@AtBeginDocument{%
  \Hy@pdfstringtrue
  \PDF@SetupDoc
  \let\PDF@SetupDoc\@empty
  \Hy@DisableOption{pdfpagescrop}%
  \Hy@DisableOption{pdfpagemode}%
  \Hy@DisableOption{pdfnonfullscreenpagemode}%
  \Hy@DisableOption{pdfdirection}%
  \Hy@DisableOption{pdfviewarea}%
  \Hy@DisableOption{pdfviewclip}%
  \Hy@DisableOption{pdfprintarea}%
  \Hy@DisableOption{pdfprintclip}%
  \Hy@DisableOption{pdfprintscaling}%
  \Hy@DisableOption{pdfduplex}%
  \Hy@DisableOption{pdfpicktraybypdfsize}%
  \Hy@DisableOption{pdfprintpagerange}%
  \Hy@DisableOption{pdfnumcopies}%
  \Hy@DisableOption{pdfstartview}%
  \Hy@DisableOption{pdfstartpage}%
  \Hy@DisableOption{pdftoolbar}%
  \Hy@DisableOption{pdfmenubar}%
  \Hy@DisableOption{pdfwindowui}%
  \Hy@DisableOption{pdffitwindow}%
  \Hy@DisableOption{pdfcenterwindow}%
  \Hy@DisableOption{pdfdisplaydoctitle}%
  \Hy@DisableOption{pdfpagelayout}%
  \Hy@DisableOption{pdflang}%
  \Hy@DisableOption{baseurl}%
  \ifHy@texht\else\hyper@anchorstart{Doc-Start}\hyper@anchorend\fi
  \Hy@pdfstringfalse
}
%    \end{macrocode}

% \section{Localized nullifying of package}
% Sometimes we just don't want the wretched package interfering
% with us. Define an environment we can put in manually, or include
% in a style file, which stops the hypertext functions doing anything.
% This is used, for instance, in the Elsevier classes, to stop
% |hyperref| playing havoc in the front matter.
%    \begin{macrocode}
\def\NoHyper{%
  \def\hyper@link@[##1]##2##3##4{##4\Hy@xspace@end}%
  \def\hyper@@anchor##1##2{##2\Hy@xspace@end}%
  \global\let\hyper@livelink\hyper@link
  \gdef\hyper@link##1##2##3{##3\Hy@xspace@end}%
  \let\hyper@anchor\@gobble
  \let\hyper@anchorstart\@gobble
  \def\hyper@anchorend{\Hy@xspace@end}%
  \let\hyper@linkstart\@gobbletwo
  \def\hyper@linkend{\Hy@xspace@end}%
  \def\hyper@linkurl##1##2{##1\Hy@xspace@end}%
  \def\hyper@linkfile##1##2##3{##1\Hy@xspace@end}%
  \let\Hy@backout\@gobble
}
\def\stop@hyper{%
  \def\hyper@link@[##1]##2##3##4{##4\Hy@xspace@end}%
  \let\Hy@backout\@gobble
  \let\hyper@@anchor\@gobble
  \def\hyper@link##1##2##3{##3\Hy@xspace@end}%
  \let\hyper@anchor\@gobble
  \let\hyper@anchorstart\@gobble
  \def\hyper@anchorend{\Hy@xspace@end}%
  \let\hyper@linkstart\@gobbletwo
  \def\hyper@linkend{\Hy@xspace@end}%
  \def\hyper@linkurl##1##2{##1\Hy@xspace@end}%
  \def\hyper@linkfile##1##2##3{##1\Hy@xspace@end}%
}
\def\endNoHyper{%
  \global\let\hyper@link\hyper@livelink
}
%</package>
%    \end{macrocode}
%
% \section{Package nohyperref}
%
%    This package is introduced by Sebastian Rahtz.
%
%    Package nohyperref is a dummy package that defines
%    some low level and some top-level commands.
%    It is done for jadetex, which calls hyperref
%    low-level commands, but it would also be useful with people using
%    normal hyperref, who really do not want the package loaded at all.
%
%    Some low-level commands:
%    \begin{macrocode}
%<*nohyperref>
\let\hyper@@anchor\@gobble
\def\hyper@link#1#2#3{#3}%
\let\hyper@anchorstart\@gobble
\let\hyper@anchorend\@empty
\let\hyper@linkstart\@gobbletwo
\let\hyper@linkend\@empty
\def\hyper@linkurl#1#2{#1}%
\def\hyper@linkfile#1#2#3{#1}%
\def\hyper@link@[#1]#2#3{}%
\let\PDF@SetupDoc\@empty
\let\PDF@FinishDoc\@empty
\def\nohyperpage#1{#1}
%    \end{macrocode}
%    Some top-level commands:
%    \begin{macrocode}
\def\Acrobatmenu#1#2{\leavevmode#2}
\let\pdfstringdefDisableCommands\@gobbletwo
\let\texorpdfstring\@firstoftwo
\let\pdfbookmark\@undefined
\newcommand\pdfbookmark[3][]{}
\let\phantomsection\@empty
\let\hypersetup\@gobble
\let\hyperbaseurl\@gobble
\newcommand*{\href}[3][]{#3}
\let\hyperdef\@gobbletwo
\let\hyperlink\@gobble
\let\hypertarget\@gobble
\protected\def\hyperref{%
  \@ifnextchar[\@gobbleopt{\expandafter\@gobbletwo\@gobble}%
}
\long\def\@gobbleopt[#1]{}
\let\hyperpage\@empty
%    \end{macrocode}
%    \begin{macrocode}
%</nohyperref>
%    \end{macrocode}
%
% \section{The Mangling Of Aux and Toc Files}
% Some extra tests so that the hyperref package may be removed or added
% to a document without having to remove .aux and .toc files
% (this section is by David Carlisle)
% All the code is delayed to |\begin{document}|
% change 2026-02-22: removed code for different |\newlabel| definitions. 
% \section{Title strings}
%
%    If options |pdftitle| and |pdfauthor| are not used,
%    these data for the pdf information dictionary
%    can be extracted by the \cmd{\title} and \cmd{\author}.
%    \begin{macrocode}
%<*package>
\ifHy@pdfusetitle
  \let\HyOrg@title\title
  \let\HyOrg@author\author
  \def\title{\@ifnextchar[{\Hy@scanopttitle}{\Hy@scantitle}}%
  \def\Hy@scanopttitle[#1]{%
    \gdef\Hy@title{#1}%
    \HyOrg@title[{#1}]%
  }%
  \def\Hy@scantitle#1{%
    \gdef\Hy@title{#1}%
    \HyOrg@title{#1}%
  }%
  \def\author{\@ifnextchar[{\Hy@scanoptauthor}{\Hy@scanauthor}}%
  \def\Hy@scanoptauthor[#1]{%
    \gdef\Hy@author{#1}%
    \HyOrg@author[{#1}]%
  }%
  \def\Hy@scanauthor#1{%
    \gdef\Hy@author{#1}%
    \HyOrg@author{#1}%
  }%
%    \end{macrocode}
%
%    The case, that \cmd{\title}, or \cmd{\author} are given before
%    hyperref is loaded, is much more complicate, because
%    LaTeX initializes the macros \cmd{\@title} and \cmd{\@author} with
%    LaTeX error and warning messages.
%    \begin{macrocode}
  \begingroup
    \def\process@me#1\@nil#2{%
      \expandafter\let\expandafter\x\csname @#2\endcsname
      \edef\y{\expandafter\strip@prefix\meaning\x}%
      \def\c##1#1##2\@nil{%
        \ifx\\##1\\%
        \else
         \expandafter\gdef\csname Hy@#2\expandafter\endcsname
              \expandafter{\x}%
        \fi
      }%
      \expandafter\c\y\relax#1\@nil
    }%
    \expandafter\process@me\string\@latex@\@nil{title}%
    \expandafter\process@me\string\@latex@\@nil{author}%
  \endgroup
\fi
\Hy@DisableOption{pdfusetitle}
%    \end{macrocode}
%
%    Macro |\Hy@UseMaketitleInfos| is used in the driver files,
%    before the information entries are used.
%
%    The newline macro |\newline| or |\\| is much more
%    complicate. In the title a good replacement can be
%    a space, but can be already a space after |\\| in
%    the title string. So this space is removed by
%    scanning for the next non-empty argument.
%
%    In the macro |\author| the newline can perhaps
%    separate the different authors, so the newline
%    expands here to a comma with space.
%
%    The possible arguments such as space or the optional
%    argument after the newline macros are not detected.
%
%    A possible \thanks removes its argument.
%
%    \begin{macrocode}
\def\Hy@UseMaketitleString#1{%
  \@ifundefined{Hy@#1}{}{%
    \begingroup
      \let\Hy@saved@hook\pdfstringdefPreHook
      \pdfstringdefDisableCommands{%
        \expandafter\let\expandafter\\\csname Hy@newline@#1\endcsname
        \let\newline\\%
        \def\and{; }%
        \let\thanks\@gobble%
      }%
      \expandafter\ifx\csname @pdf#1\endcsname\@empty
        \expandafter\pdfstringdef\csname @pdf#1\endcsname{%
          \csname Hy@#1\endcsname\@empty
        }%
      \fi
      \global\let\pdfstringdefPreHook\Hy@saved@hook
    \endgroup
  }%
}
\def\Hy@newline@title#1{ #1}
\def\Hy@newline@author#1{, #1}
\def\Hy@UseMaketitleInfos{%
  \Hy@UseMaketitleString{title}%
  \Hy@UseMaketitleString{author}%
}
%    \end{macrocode}
%
% \section{Page numbers}
%    This stuff is done by Heiko Oberdiek.
%
% \section{Every page}
%
%    \begin{macrocode}
\let\Hy@EveryPageHook\@empty
\let\Hy@EveryPageBoxHook\@empty
\let\Hy@FirstPageHook\@empty
\AddToHook{shipout/before}{%
  \Hy@EveryPageHook
  \ifx\Hy@EveryPageBoxHook\@empty
  \else
    \setbox\ShipoutBox=\vbox{%
      \offinterlineskip
      \Hy@EveryPageBoxHook
      \box\ShipoutBox
    }%
  \fi
}
\Hy@iffileloaded{hpdftex.def}{%
  \AddToHook{shipout/before}{%
    \Hy@FirstPageHook
    \global\let\Hy@FirstPageHook\@empty
  }%
}{%
  \AddToHook{shipout/firstpage}{%
    \Hy@FirstPageHook
  }%
}
\g@addto@macro\Hy@FirstPageHook{%
  \PDF@FinishDoc
  \global\let\PDF@FinishDoc\@empty
}
%    \end{macrocode}
%
% \subsection{PDF /PageLabels}
%    Internal macros of this module are marked with |\HyPL@|.
%
%    \begin{macrocode}
\ifHy@pdfpagelabels
  \begingroup\expandafter\expandafter\expandafter\endgroup
  \expandafter\ifx\csname thepage\endcsname\relax
    \Hy@pdfpagelabelsfalse
    \Hy@WarningNoLine{%
      Option `pdfpagelabels' is turned off\MessageBreak
      because \string\thepage\space is undefined%
    }%
    \csname fi\endcsname
    \csname iffalse\expandafter\endcsname
  \fi
%    \end{macrocode}
%
%    \begin{macro}{\thispdfpagelabel}
%    The command \cmd{\thispdfpagelabel} allows to label a special
%    page without the redefinition of \cmd{\thepage} for the page.
%    \begin{macrocode}
  \def\thispdfpagelabel#1{%
    \gdef\HyPL@thisLabel{#1}%
  }%
  \global\let\HyPL@thisLabel\relax
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPL@Labels}
%    The page labels are collected in \cmd{\HyPL@Labels} and
%    set at the end of the document.
%    \begin{macrocode}
  \let\HyPL@Labels\@empty
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@abspage}
%    We have to know the the absolute page number and introduce
%    a new counter for that.
%    \begin{macrocode}
  \newcount\Hy@abspage
  \Hy@abspage=0 %
%    \end{macrocode}
%    \end{macro}
%    For comparisons with the values of the previous page, some
%    variables are needed:
%    \begin{macrocode}
  \def\HyPL@LastType{init}%
  \def\HyPL@LastNumber{0}%
  \let\HyPL@LastPrefix\@empty
%    \end{macrocode}
%    Definitions for the PDF names of the \LaTeX{} pendents.
%    \begin{macrocode}
  \def\HyPL@arabic{D}%
  \def\HyPL@Roman{R}%
  \def\HyPL@roman{r}%
  \def\HyPL@Alph{A}%
  \def\HyPL@alph{a}%
%    \end{macrocode}
%
%    \begin{macrocode}
  \let\HyPL@SlidesSetPage\@empty
  \@ifclassloaded{slides}{%
    \def\HyPL@SlidesSetPage{%
      \advance\c@page\@ne
      \ifnum\value{page}>\@ne
        \protected@edef\HyPL@SlidesOptionalPage{%
          \Hy@SlidesFormatOptionalPage{\thepage}%
        }%
      \else
        \let\HyPL@SlidesOptionalPage\@empty
      \fi
      \advance\c@page-\@ne
      \def\HyPL@page{%
        \csname the\Hy@SlidesPage\endcsname
        \HyPL@SlidesOptionalPage
      }%
    }%
  }{}%
%    \end{macrocode}
%
%    \begin{macro}{\HyPL@EveryPage}
%    If a page is shipout and the page number is known,
%    \cmd{\HyPL@EveryPage} has to be called. It stores the
%    current page label.
%    \begin{macrocode}
  \def\HyPL@EveryPage{%
    \begingroup
      \ifx\HyPL@thisLabel\relax
        \let\HyPL@page\thepage
        \HyPL@SlidesSetPage
      \else
        \let\HyPL@page\HyPL@thisLabel
        \global\let\HyPL@thisLabel\relax
      \fi
      \let\HyPL@Type\relax
      \ifnum\c@page>0 %
        \ifx\HyPL@SlidesSetPage\@empty
          \expandafter\HyPL@CheckThePage\HyPL@page\@nil
        \fi
      \fi
      \let\Hy@temp Y%
      \ifx\HyPL@Type\HyPL@LastType
      \else
        \let\Hy@temp N%
      \fi
      \ifx\HyPL@Type\relax
         \pdfstringdef\HyPL@Prefix{\HyPL@page}%
      \else
         \pdfstringdef\HyPL@Prefix\HyPL@Prefix
      \fi
      \ifx\HyPL@Prefix\HyPL@LastPrefix
      \else
        \let\Hy@temp N%
      \fi
      \if Y\Hy@temp
        \advance\c@page by -1 %
        \ifnum\HyPL@LastNumber=\the\c@page\relax
        \else
          \let\Hy@temp N%
        \fi
        \Hy@StepCount\c@page
      \fi
      \if N\Hy@temp
        \ifx\HyPL@Type\relax
          \HyPL@StorePageLabel{/P(\HyPL@Prefix)}%
        \else
          \HyPL@StorePageLabel{%
            \ifx\HyPL@Prefix\@empty
            \else
              /P(\HyPL@Prefix)%
            \fi
            /S/\csname HyPL\HyPL@Type\endcsname
            \ifnum\the\c@page=1 %
            \else
              \space/St \the\c@page
            \fi
          }%
        \fi
      \fi
      \xdef\HyPL@LastNumber{\the\c@page}%
      \global\let\HyPL@LastType\HyPL@Type
      \global\let\HyPL@LastPrefix\HyPL@Prefix
    \endgroup
    \Hy@GlobalStepCount\Hy@abspage
  }%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPL@CheckThePage}
%    Macro \cmd{\HyPL@CheckThePage} calls \cmd{\HyPL@@CheckThePage}
%    that does the job.
%    \begin{macrocode}
  \def\HyPL@CheckThePage#1\@nil{%
    \HyPL@@CheckThePage{#1}#1\csname\endcsname\c@page\@nil
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyPL@@CheckThePage}
%    The first check is, is \cmd{\thepage} is defined
%    such as in \LaTeX, e.\,g.: |\csname @arabic\endcsname\c@page|.
%    In the current implement
%    ation the check fails, if there is
%    another \cmd{\csname} before.
%
%    The second check tries to detect |\arabic{page}| at the
%    end of the definition text of \cmd{\thepage}.
%    \begin{macrocode}
  \def\HyPL@@CheckThePage#1#2\csname#3\endcsname\c@page#4\@nil{%
    \def\Hy@tempa{#4}%
    \def\Hy@tempb{\csname\endcsname\c@page}%
    \ifx\Hy@tempa\Hy@tempb
      \expandafter\ifx\csname HyPL#3\endcsname\relax
      \else
        \def\HyPL@Type{#3}%
        \def\HyPL@Prefix{#2}%
      \fi
    \else
      \begingroup
        \let\Hy@next\endgroup
        \let\HyPL@found\@undefined
        \def\arabic{\HyPL@Format{arabic}}%
        \def\Roman{\HyPL@Format{Roman}}%
        \def\roman{\HyPL@Format{roman}}%
        \def\Alph{\HyPL@Format{Alph}}%
        \def\alph{\HyPL@Format{alph}}%
        \protected@edef\Hy@temp{#1}%
        \ifx\HyPL@found\relax
          \toks@\expandafter{\Hy@temp}%
          \edef\Hy@next{\endgroup
            \noexpand\HyPL@@@CheckThePage\the\toks@
               \noexpand\HyPL@found\relax\noexpand\@nil
          }%
        \fi
      \Hy@next
    \fi
  }%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPL@Format}
%    The help macro \cmd{\HyPL@Format} is executed while
%    a \cmd{\protected@edef} in the second check
%    method of \cmd{\HyPL@@CheckPage}.
%    The first occurrences of, for example, |\arabic{page}| is
%    marked by \cmd{\HyPL@found} that is also defined by
%    \cmd{\csname}.
%    \begin{macrocode}
  \def\HyPL@Format#1#2{%
    \ifx\HyPL@found\@undefined
      \expandafter\ifx\csname c@#2\endcsname\c@page
        \expandafter\noexpand\csname HyPL@found\endcsname{#1}%
      \else
        \expandafter\noexpand\csname#1\endcsname{#2}%
      \fi
    \else
      \expandafter\noexpand\csname#1\endcsname{#2}%
    \fi
  }%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPL@@@CheckThePage}
%    If the second check method is successful,
%    \cmd{\HyPL@@@CheckThePage} scans the result of
%    \cmd{\HyPL@Format} and stores the found values.
%    \begin{macrocode}
  \def\HyPL@@@CheckThePage#1\HyPL@found#2#3\@nil{%
    \def\Hy@tempa{#3}%
    \def\Hy@tempb{\HyPL@found\relax}%
    \ifx\Hy@tempa\Hy@tempb
      \def\HyPL@Type{@#2}%
      \def\HyPL@Prefix{#1}%
    \fi
  }%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPL@StorePageLabel}
%    Dummy for drivers that does not support /PageLabel.
%    \begin{macrocode}
  \providecommand*{\HyPL@StorePageLabel}[1]{}%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPL@Useless}
%    The |/PageLabels| entry does not make sense,
%    if the absolute page numbers and the page labels are the
%    same. Then \cmd{\HyPL@Labels} has the meaning of \cmd{\HyPL@Useless}.
%    \begin{macrocode}
  \def\HyPL@Useless{0<</S/D>>}%
  \@onelevel@sanitize\HyPL@Useless
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyPL@SetPageLabels}
%    The page labels are written to the PDF cataloge.
%    The command \cmd{\Hy@PutCatalog} is defined in the
%    driver files.
%    \begin{macrocode}
  \def\HyPL@SetPageLabels{%
    \@onelevel@sanitize\HyPL@Labels
    \ifx\HyPL@Labels\@empty
    \else
      \ifx\HyPL@Labels\HyPL@Useless
      \else
        \Hy@PutCatalog{/PageLabels<</Nums[\HyPL@Labels]>>}%
      \fi
    \fi
  }%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
  \g@addto@macro\Hy@EveryPageHook{\HyPL@EveryPage}%
\fi
%    \end{macrocode}
%
%    Option `pdfpagelabels' has been used and is now disabled.
%    \begin{macrocode}
\Hy@DisableOption{pdfpagelabels}
%    \end{macrocode}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
% \subsubsection{pdfTeX and VTeX}
%
%    Because of pdfTeX's \cmd{\pdfcatalog} command
%    the /PageLabels entry can set at end of document
%    in the first run.
%
%    \begin{macro}{\Hy@PutCatalog}
%    \begin{macrocode}
%<*pdftex>
\pdf@ifdraftmode{%
  \let\Hy@PutCatalog\@gobble
}{%
  \let\Hy@PutCatalog\pdfcatalog
}
%</pdftex>
%    \end{macrocode}
%    The code for VTeX is more complicate, because it does
%    not allow the direct access to the /Catalog object.
%    The command scans its argument and looks
%    for a /PageLabels entry.
%
%    VTeX 6.59g is the first version, that
%    implements \verb|\special{!pdfpagelabels...}|.
%    For this version \cmd{\VTeXversion} reports 660.
%    \begin{macrocode}
%<*vtex>
\providecommand*{\XR@ext}{pdf}
\edef\Hy@VTeXversion{%
  \ifx\VTeXversion\@undefined
    \z@
  \else
    \ifx\VTeXversion\relax
      \z@
    \else
      \VTeXversion
    \fi
  \fi
}
\begingroup
  \ifnum\Hy@VTeXversion<660 %
    \gdef\Hy@PutCatalog#1{%
      \Hy@WarningNoLine{%
        VTeX 6.59g or above required for pdfpagelabels%
      }%
    }%
  \else
    \gdef\Hy@PutCatalog#1{%
      \Hy@vt@PutCatalog#1/PageLabels<<>>\@nil
    }%
    \gdef\Hy@vt@PutCatalog#1/PageLabels<<#2>>#3\@nil{%
      \ifx\\#2\\%
      \else
        \immediate\special{!pdfpagelabels #2}%
      \fi
    }%
  \fi
\endgroup
%</vtex>
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
%<*pdftex|vtex>
%    \end{macrocode}
%
%    \begin{macro}{\HyPL@StorePageLabel}
%    This macro adds the entry |#1| to \cmd{\HyPL@Labels}.
%    \begin{macrocode}
\ifHy@pdfpagelabels
  \def\HyPL@StorePageLabel#1{%
    \toks@\expandafter{\HyPL@Labels}%
    \xdef\HyPL@Labels{%
      \the\toks@
      \the\Hy@abspage<<#1>>%
    }%
  }%
%    \end{macrocode}
%    \end{macro}
%
%    The \texttt{enddocument/afteraux} hook is used to get behind the
%    final \cs{clearpage} and to avoid a \cs{clearpage}
%    in \cs{AtEndDocument}.
%    Then the PDF catalog entry for |\PageLabels| is set.
%    \begin{macrocode}
  \AddToHook{enddocument/afteraux}{%
    \HyPL@SetPageLabels
  }%
%    \end{macrocode}
%
%    \begin{macrocode}
\fi
%</pdftex|vtex>
%    \end{macrocode}
%
% \subsubsection{xetex}
%
%    \begin{macrocode}
%<*xetex>
\HyPsd@LoadUnicode
\Hy@unicodetrue
\ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@unicode
\else
  \let\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
\fi
\define@key{Hyp}{unicode}[true]{%
  \Hy@boolkey{unicode}{#1}%
  \ifHy@unicode
  \else
    \Hy@Warning{%
      XeTeX driver only supports `unicode=true'. Ignoring\MessageBreak
      option setting `unicode=false'%
    }%
    \Hy@unicodetrue
  \fi
}
\define@key{Hyp}{pdfencoding}{%
  \edef\HyPsd@temp{#1}%
  \ifx\HyPsd@temp\HyPsd@pdfencoding@unicode
    \let\HyPsd@pdfencoding\HyPsd@temp
  \else
    \ifx\HyPsd@temp\HyPsd@pdfencoding@auto
      \let\HyPsd@pdfencoding\HyPsd@temp
    \else
      \Hy@Warning{%
        XeTeX driver only supports\MessageBreak
        `pdfencoding=unicode|auto'. Ignoring option\MessageBreak
        setting `pdfencoding=\HyPsd@temp'%
      }%
    \fi
  \fi
}
\let\HyXeTeX@CheckUnicode\relax
%    \end{macrocode}
%    Since 2016 (x)dvipdfmx has a special to control the spacing of annotation borders.
%    So let's make use of it:
%    \begin{macrocode}
\def\setpdflinkmargin#1{%
  \begingroup
    \setlength{\dimen@}{#1}%
    \special{dvipdfmx:config g \strip@pt\dimen@}%
  \endgroup}
%</xetex>
%    \end{macrocode}
% set the pdf version
%    \begin{macrocode}
%<*dvipdfm|xetex>
\special{pdf:majorversion \Hy@pdf@majorversion}
\special{pdf:minorversion \Hy@pdf@minorversion}
%</dvipdfm|xetex>
%    \end{macrocode}
% \subsubsection{pdfmarkbase, dvipdfm, xetex}
%
%    \begin{macrocode}
%<*pdfmarkbase>
\begingroup
  \@ifundefined{headerps@out}{}{%
    \toks@\expandafter{\Hy@FirstPageHook}%
    \xdef\Hy@FirstPageHook{%
      \noexpand\headerps@out{%
        systemdict /pdfmark known%
        {%
          userdict /?pdfmark systemdict /exec get put%
        }{%
          userdict /?pdfmark systemdict /pop get put %
          userdict /pdfmark systemdict /cleartomark get put%
        }%
        ifelse%
      }%
      \the\toks@
    }%
  }%
\endgroup
%</pdfmarkbase>
%    \end{macrocode}
%
%    \begin{macro}{\Hy@PutCatalog}
%    \begin{macrocode}
%<dvipdfm|xetex>\def\Hy@PutCatalog#1{\@pdfm@mark{docview <<#1>>}}
%<*pdfmarkbase>
\def\Hy@PutCatalog#1{%
  \pdfmark{pdfmark=/PUT,Raw={\string{Catalog\string} <<#1>>}}%
}
%</pdfmarkbase>
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
%<*pdfmarkbase|dvipdfm|xetex>
\ifHy@pdfpagelabels
%    \end{macrocode}
%
%    \begin{macro}{\HyPL@StorePageLabel}
%    This macro writes a string to the .aux file.
%    \begin{macrocode}
  \def\HyPL@StorePageLabel#1{%
    \if@filesw
      \begingroup
        \edef\Hy@tempa{\the\Hy@abspage<<#1>>}%
        \immediate\write\@mainaux{%
          \string\HyPL@Entry{\Hy@tempa}%
        }%
      \endgroup
    \fi
  }%
%    \end{macrocode}
%    \end{macro}
%
%    Write a dummy definition of \cmd{\HyPL@Entry} for the case,
%    that the next run is done without hyperref.
%    A marker for the rerun warning is set and the /PageLabels
%    is written.
%    \begin{macrocode}
  \Hy@AtBeginDocument{%
    \if@filesw
      \immediate\write\@mainaux{%
        \string\providecommand\string*\string\HyPL@Entry[1]{}%
      }%
    \fi
    \ifx\HyPL@Labels\@empty
      \Hy@WarningNoLine{Rerun to get /PageLabels entry}%
    \else
      \HyPL@SetPageLabels
    \fi
    \let\HyPL@Entry\@gobble
  }%
%    \end{macrocode}
%
%    \begin{macro}{\HyPL@Entry}
%    \begin{macrocode}
  \def\HyPL@Entry#1{%
    \expandafter\gdef\expandafter\HyPL@Labels\expandafter{%
      \HyPL@Labels
      #1%
    }%
  }%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
\fi
%</pdfmarkbase|dvipdfm|xetex>
%    \end{macrocode}
%
%    \begin{macrocode}
%<*packageEnd>
%    \end{macrocode}
%
%    \begin{macrocode}
\ifx\MaybeStopEarly\relax
\else
  \Hy@stoppedearlytrue
  \expandafter\MaybeStopEarly
\fi
\Hy@stoppedearlyfalse
%    \end{macrocode}
%
% \section{Automated \LaTeX\ hypertext cross-references}\label{latexxref}
% Anything which can be referenced advances some counter; we overload
% this to put in a hypertext starting point (with no visible anchor),
% and make a note of that for later use in |\label|.
% This will fail badly if |\theH<name>|
% does not expand to a sensible reference. This means that classes
% or package which introduce new elements need to define
% an equivalent  |\theH<name>|  for every  |\the<name>|. We do make
% a trap to make |\theH<name>| be the same as |\arabic{<name>}|,
% if |\theH<name>| is not defined, but this is not necessarily a good idea.
% Alternatively, the `naturalnames' option uses whatever \LaTeX\
% provides, which may be usable. But then its up to you to make
% sure these are legal PDF and HTML names. The `hypertexnames=false' option
% just makes up arbitrary names.
%
% All the shenanigans is to make sure section numbers etc
% are always arabic, separated by dots. Who knows how people
% will set up |\@currentlabel|? If they put spaces in, or brackets
% (quite legal) then the hypertext processors will get upset.
%
% But this is flaky, and open to abuse. Styles like
% |subeqn| will mess it up, for starters. Appendices are an issue, too.
% We just hope to cover most situations. We can at least cope
% with the standard sectioning structure, allowing for |\part|
% and |\chapter|.
%
% Start with a fallback for equations
%    \begin{macrocode}
\def\Hy@CounterExists#1{%
  \begingroup\expandafter\expandafter\expandafter\endgroup
  \expandafter\ifx\csname c@#1\endcsname\relax
    \expandafter\@gobble
  \else
    \begingroup\expandafter\expandafter\expandafter\endgroup
    \expandafter\ifx\csname the#1\endcsname\relax
      \expandafter\expandafter\expandafter\@gobble
    \else
      \expandafter\expandafter\expandafter\@firstofone
    \fi
  \fi
}
%    \end{macrocode}
% change 2026-02-22: removed definitions provided for format before 
% 2024-11-01
% 
% Thanks to Greta Meyer (gbd@pop.cwru.edu) for making me realize
% that enumeration starts at 0 for every list! But |\item|
% occurs inside |\trivlist|, so check if its a real |\item| before
% incrementing counters.
%    \begin{macrocode}
\let\H@item\item
\newcounter{Item}
\def\item{%
  \@hyper@itemfalse
  \if@nmbrlist\@hyper@itemtrue\fi
  \H@item
}
%    \end{macrocode}
%
% Tanmoy asked for this default handling of undefined |\theH<name>|
% situations. It really isn't clear what would be ideal, whether to
% turn off hyperizing of unknown elements, to pick up the textual
% definition of the counter, or to default it to something like
% |\arabic{name}|. We take the latter course, slightly worriedly.
%    \begin{macrocode}
\let\H@refstepcounter\@kernel@refstepcounter
\edef\name@of@eq{equation}%
%    \end{macrocode}
% We do not want the handler for |\refstepcounter| to cut in
% during the processing of |\item| (we handle that separately),
% so we provide a bypass conditional.
% change 2022-04-22: removed test for the slide counter
% and for the equation name.
% change 2022-05-02: added the new boolean set by
% |\LinkTargetOn/\LinkTargetOff|
%
%    \begin{macrocode}
\newif\if@hyper@item
\newif\if@skiphyperref
\@hyper@itemfalse
\@skiphyperreffalse
\ExplSyntaxOn
\NewSocketPlug{refstepcounter}{hyperref}{\ifHy@pdfstring\else#1\fi}
\AssignSocketPlug{refstepcounter}{hyperref}
%    \end{macrocode}
% change 2024-11-05: cleveref relies on refstepcounter to update its data.
%    \begin{macrocode}
\AddToHook{package/cleveref/after}
 {
   \@ifpackagelater{cleveref}{2018/03/28}{}
    {
    \NewSocketPlug{refstepcounter}{hyperref/fixcleveref}
     {\ifHy@pdfstring\else
       #1%
       {\firstaid@cref@updatelabeldata{\@currentcounter}}%
      \fi}
     \AssignSocketPlug{refstepcounter}{hyperref/fixcleveref}
    }
 }
\NewSocketPlug{refstepcounter/target}{hyperref}
  {
    \bool_lazy_and:nnT
    { \l__hyp_target_create_bool }
    { ! \legacy_if_p:n{@skiphyperref} }
    {
      \legacy_if:nTF {@hyper@item}
        {
          \stepcounter{Item}%
          \hyper@refstepcounter{Item}%
          \@hyper@itemfalse
        }
        {
          \hyper@refstepcounter{\@currentcounter}%
        }
     }
   }
\AssignSocketPlug{refstepcounter/target}{hyperref}
\ExplSyntaxOff
\let\Hy@saved@refstepcounter\refstepcounter
%    \end{macrocode}
% AMS\LaTeX\ processes all equations twice; we want to make sure
% that the hyper stuff is not executed twice, so we use the AMS
% |\ifmeasuring@|, initialized if AMS math is not used.
% change 2025-06-20: test if the switch already exist, see tagging-project issue 920.
%    \begin{macrocode}
\ifcsname ifmeasuring@\endcsname
\else
 \expandafter\newif\csname ifmeasuring@\endcsname\measuring@false
\fi
\newcommand\Hy@ifnotmeasuring[1]{#1}
\AddToHook{package/amsmath/after}
 {
   \renewcommand\Hy@ifnotmeasuring[1]
    {\ifmeasuring@ \else #1\fi}
 }
%    \end{macrocode}
%
%    \begin{macro}{\hyper@refstepcounter}
%    changed 2026-02-22 to use \cs{MakeLinkTarget}
%    \begin{macrocode}
\def\hyper@refstepcounter#1{\ifHy@hypertexnames\MakeLinkTarget{#1}\else\MakeLinkTarget[#1]{}\fi}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@ProvideTheHCounter}
%    \cs{theH<counter>} is not set for counters that
%    are defined before `hyperref' is loaded.
%    In \cs{cl@@ckpt}, the clear counter list of
%    the artificial counter |@ckpt|, \LaTeX\ remembers
%    the defined counters (needed for \cs{include}). We check
%    the clear counter lists, whether our counter is present.
%    If we found it, then we add the parent counter value
%    to \cs{theH<counter>}. The \cs{@elt} list is
%    used in sanitized form for the comparison, because the list
%    might contain other stuff than \cs{@elt}s. Also it simplifies
%    the implementation, because \LaTeX', substring search
%    \cs{in@} can be used.
%    \begin{macrocode}
\def\HyCnt@ProvideTheHCounter#1{%
  \@ifundefined{theH#1}{%
    \expandafter\def\csname theH#1\endcsname{}%
    \def\Hy@temp{\@elt{#1}}%
    \@onelevel@sanitize\Hy@temp
    \let\HyOrg@elt\@elt
    \edef\@elt{%
      \noexpand\HyCnt@LookForParentCounter
      \expandafter\noexpand\csname theH#1\endcsname
    }%
    \cl@@ckpt
    \let\@elt\HyOrg@elt
    \expandafter
    \Hy@LocalAppendToMacro\csname theH#1\expandafter\endcsname
    \expandafter{%
      \expandafter\@arabic\csname c@#1\endcsname
    }%
  }{}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@LookForParentCounter}
%    \begin{macrocode}
\def\HyCnt@LookForParentCounter#1#2{%
  \expandafter\let\expandafter\Hy@temp@A\csname cl@#2\endcsname
  \@ifundefined{cl@#2}{%
  }{%
    \@onelevel@sanitize\Hy@temp@A
    \edef\Hy@temp@A{%
      \noexpand\in@{\Hy@temp}{\Hy@temp@A}%
    }\Hy@temp@A
    \ifin@
      \@ifundefined{theH#2}{%
        \expandafter\Hy@LocalAppendToMacro\expandafter#1%
        \expandafter{%
          \expandafter\@arabic\csname c@#2\endcsname.%
        }%
      }{%
        \expandafter\Hy@LocalAppendToMacro\expandafter#1%
        \expandafter{%
          \csname theH#2\endcsname.%
        }%
      }%
    \fi
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%    After \cmd{\appendix} ``chapter'' (or ``section'' for classes
%    without chapter) should be replaced
%    by ``appendix'' to get \cmd{\autoref} work.
%    Macro \cmd{\Hy@chapapp} contains the current valid
%    name like \cmd{\@chapapp}, which cannot be used,
%    because this string depends on the current language.
%
%    The ``french'' package defines counter \cmd{\thechapter}
%    by \cmd{\newcounter{chapter}}, if \cmd{\@ifundefined{chapter}}.
%    
%    change  2026-06-17: set the target prefix, issue gh/424
%    \begin{macrocode}
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname chapter\endcsname\relax
  \def\Hy@chapterstring{section}%
\else
  \def\Hy@chapterstring{chapter}%
\fi
\def\Hy@appendixstring{appendix}
\def\Hy@chapapp{\Hy@chapterstring}
\hypersetup{target-prefix={chapter}{\Hy@chapapp}}
\@ifundefined{appendix}{%
}{%
  \let\HyOrg@appendix\appendix
  \def\Hy@AlphNoErr#1{%
    \ifnum\value{#1}>26 %
      Alph\number\value{#1}%
    \else
      \ifnum\value{#1}<1 %
        Alph\number\value{#1}%
      \else
        \Alph{#1}%
      \fi
    \fi
  }%
  \def\appendix{%
    \@ifundefined{chapter}{%
      \gdef\theHsection{\Hy@AlphNoErr{section}}%      
    }{%
      \gdef\theHchapter{\Hy@AlphNoErr{chapter}}%
    }%
    \xdef\Hy@chapapp{\Hy@appendixstring}%
    \hypersetup{target-prefix={section}{\Hy@appendixstring}}%
    \HyOrg@appendix
  }%
}
%    \end{macrocode}
%    \begin{macro}{\Hy@Test@alph}
%    \begin{macrocode}
\def\Hy@Test@alph#1{%
  \ifcase#1\or
    a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
    k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or
    u\or v\or w\or x\or y\or z%
  \else
    \@ctrerr
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@Test@Alph}
%    \begin{macrocode}
\def\Hy@Test@Alph#1{%
  \ifcase#1\or
    A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
    K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or
    U\or V\or W\or X\or Y\or Z%
  \else
    \@ctrerr
  \fi
}
%    \end{macrocode}
%    \end{macro}
%   We define a hook to allow to overwrite the next destination name.
%    \begin{macrocode}
\NewHook{__hyp/target/setname }
\define@key{Hyp}{next-anchor}{%
    \AddToHookNext{__hyp/target/setname}%
       {\Hy@MakeCurrentHref{#1}}%
   }
%    \end{macrocode}
%    \begin{macro}{\hyper@makecurrent}
% Because of Babel mucking around, nullify |\textlatin| when making names.
% And |\@number| because of babel's lrbabel.def.
% change 2021-08-15: For new formats we add a hook which allows
% to overwrite the name of the next destination.
%    \begin{macrocode}
\def\hyper@makecurrent#1{%
  \begingroup
    \Hy@safe@activestrue
    \edef\Hy@param{#1}%
    \ifx\Hy@param\Hy@chapterstring
      \let\Hy@param\Hy@chapapp
    \fi
    \ifHy@hypertexnames
      \let\@number\@firstofone
      \def\@fnsymbol##1{fnsymbol\number##1}%
      \def\@arabic##1{\number##1}%
      \ifx\@alph\Hy@Test@alph
      \else
        \def\@alph{alph\number}%
      \fi
      \ifx\@Alph\Hy@Test@Alph
      \else
        \def\@Alph{Alph\number}%
      \fi
      \ifHy@naturalnames
        \let\textlatin\@firstofone
        \xdef\HyperGlobalCurrentHref{\csname the#1\endcsname}%
      \else
        \xdef\HyperGlobalCurrentHref{%
          \csname
            the%
            \expandafter\ifx\csname theH#1\endcsname\relax\else H\fi
            #1%
          \endcsname
        }%
      \fi
      \xdef\HyperGlobalCurrentHref{%
        \Hy@param.\expandafter\strip@prefix\meaning\HyperGlobalCurrentHref
      }%
    \else
      \Hy@GlobalStepCount\Hy@linkcounter
      \xdef\HyperGlobalCurrentHref{\Hy@param.\the\Hy@linkcounter}%
    \fi
  \endgroup
  \let\HyperLocalCurrentHref\HyperGlobalCurrentHref
  \ifHy@localanchorname
    \let\@currentHref\HyperLocalCurrentHref
  \else
    \global\let\@currentHref\HyperGlobalCurrentHref
  \fi
  \UseHook{__hyp/target/setname}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@MakeCurrentHref}
%    \begin{macrocode}
\def\Hy@MakeCurrentHref#1{%
  \edef\HyperLocalCurrentHref{#1}%
  \@onelevel@sanitize\HyperLocalCurrentHref
  \global\let\HyperGlobalCurrentHref\HyperLocalCurrentHref
  \let\HyperLocalCurrentHref\HyperGlobalCurrentHref
  \ifHy@localanchorname
    \let\@currentHref\HyperLocalCurrentHref
  \else
    \global\let\@currentHref\HyperGlobalCurrentHref
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@MakeCurrentHrefAuto}
% This command is e.g. used to create destinations for unnumbered sections and
% chapters. For new formats we add a hook which allows
% to overwrite the name of the next destination.
%    \begin{macrocode}
   \def\Hy@MakeCurrentHrefAuto#1{%
   \Hy@GlobalStepCount\Hy@linkcounter
   \Hy@MakeCurrentHref{#1.\the\Hy@linkcounter}%
   \UseHook{__hyp/target/setname}}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@currentHlabel}
%    \cs{@currrentHlabel} is only defined for compatibility with
%    package `hypdvips'.
%    \begin{macrocode}
\def\@currentHlabel{\@currentHref}
%    \end{macrocode}
%    \end{macro}
%
% \section{Package ifthen support}
%
%    Since version 6.75a this is done in package nameref.
%
%    For compatibility \cmd{\hypergetref} and
%    \cmd{\hypergetpageref} are still provided.
%    But they do not generate warnings, if the reference is
%    undefined.
%    \begin{macrocode}
\def\hypergetref#1{\getrefbykeydefault{#1}{}{??}}
\def\hypergetpageref#1{\getrefbykeydefault{#1}{page}{0}}
%    \end{macrocode}
%
% \section{Package varwidth support}
% 2023-11-07: varwidth needs a special configuration point to inserts its handler.
% We use a socket for this.
%
%    \begin{macrocode}
\AddToHook{package/varwidth/after}
 {
   \NewSocketPlug{hyp/raisedlink}{varwidth}{\@vwid@wrap{#1}}
   \appto\@vwid@setup{\AssignSocketPlug{hyp/raisedlink}{varwidth}}
 }
%    \end{macrocode}
% \section{Package titlesec and titletoc support}
%
%    This code is contributed by Javier Bezos
%    (Email: \Email{jbezos@arrakis.es}).
%
%    Package titlesec support:
%    \begin{macrocode}
\@ifpackageloaded{titlesec}{%
  \def\ttl@Hy@steplink#1{%
    \Hy@MakeCurrentHrefAuto{#1*}%
    \edef\ttl@Hy@saveanchor{%
      \noexpand\Hy@raisedlink{%
        \noexpand\hyper@anchorstart{\@currentHref}%
        \noexpand\hyper@anchorend
        \def\noexpand\ttl@Hy@SavedCurrentHref{\@currentHref}%
        \noexpand\ttl@Hy@PatchSaveWrite
      }%
    }%
  }%
  \def\ttl@Hy@PatchSaveWrite{%
    \begingroup
      \toks@\expandafter{\ttl@savewrite}%
      \edef\x{\endgroup
        \def\noexpand\ttl@savewrite{%
          \let\noexpand\@currentHref
              \noexpand\ttl@Hy@SavedCurrentHref
          \the\toks@
        }%
      }%
    \x
  }%
  \def\ttl@Hy@refstepcounter#1{%
    \let\ttl@b\Hy@raisedlink
    \def\Hy@raisedlink##1{%
      \def\ttl@Hy@saveanchor{\Hy@raisedlink{##1}}%
    }%
    \refstepcounter{#1}%
    \let\Hy@raisedlink\ttl@b
  }%
}{}
%    \end{macrocode}
%
% \section{Package longtable support}
%
%    Sometimes the anchor of the longtable goes to the previous
%    page. Thus the following patch separates the anchor setting
%    and counter incrementation by hyperref's \verb|\refstepcounter|
%    and the anchor setting is moved after \verb|\vskip\LTpre|.
%
%    Patch of \cmd{\LT@array}:
%    replace \cmd{\refstepcounter} by the original
%    \cmd{\H@refstepcounter} without anchor generation
%    \begin{macrocode}
\@ifpackageloaded{longtable}{%
\@ifundefined{hyper@nopatch@longtable}{%
  \begingroup
    \def\y{\LT@array}%
    \@ifundefined{scr@LT@array}{%
      \@ifundefined{adl@LT@array}{}{\def\y{\adl@LT@array}}%
    }{\def\y{\scr@LT@array}}%
    \long\def\x\refstepcounter#1#2\@sharp#3#4\@nil{%
      \expandafter\endgroup
      \expandafter\def\y[##1]##2{%
        \H@refstepcounter{#1}%
        \hyper@makecurrent{table}%
        \let\Hy@LT@currentHref\@currentHref
        #2\@sharp#####4%
      }%
    }%
  \expandafter\expandafter\expandafter\x\y[{#1}]{#2}\@nil
%    \end{macrocode}
%    Patch of \cmd{\LT@start}:
%    add anchor before first line after \verb|\vskip\LTpre|
%    \begin{macrocode}
  \begingroup
    \def\x#1\ifvoid\LT@foot#2\fi#3\@nil{%
      \endgroup
      \def\LT@start{%
        #1%
        \ifvoid\LT@foot#2\fi
        \let\@currentHref\Hy@LT@currentHref
        \Hy@raisedlink{%
          \hyper@anchorstart{\@currentHref}\hyper@anchorend
        }%
        #3%
      }%
    }%
  \expandafter\x\LT@start\@nil
 }{}
}{}
%    \end{macrocode}
%
% \section{Equations}\label{equations}
% We want to  make the whole equation a target anchor.
% Overload equation, temporarily reverting to original
% |\refstepcounter|. If, however, it is in AMS math, we do not
% do anything, as the tag mechanism is used there (see section \ref{ams}).
% change 2023-06-14: previously hyperref contained code that moved
% the equation incrementation inside the math environment to
% avoid specials outside and a wrong vertical spacing of equation environments.
% Since 2021/08/24 this code is now in amsmath directly and so has been removed here.
%
% This and more math related patches can be suppressed with
% |\hyper@nopatch@mathenv|
%    \begin{macrocode}
\let\new@refstepcounter\refstepcounter
\let\H@equation\equation
\let\H@endequation\endequation
%    \end{macrocode}
%
%    \begin{macrocode}
\@ifundefined{hyper@nopatch@mathenv}{%
%    \end{macrocode}
% If amsmath was loaded before the following does nothing.
% If amsmath is loaded later it will overwrite the definition again,
% which is what is wanted here.
% If it is not loaded the new definition of equation
% will be used.
%    \begin{macrocode}
  \@ifpackageloaded{amsmath}{}{%
    \def\equation{%
      \let\refstepcounter\H@refstepcounter
      \H@equation
      \hyper@makecurrent{equation}%
%    \end{macrocode}
%    \cs{mathopen} is needed in case the equation starts with
%    an unary minus, for example.
%    \begin{macrocode}
      \mathopen{%
        \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}%
      }%
      \let\refstepcounter\new@refstepcounter
    }%
    \def\endequation{%
      \ifx\Hy@raisedlink\@empty
        \hyper@anchorend
      \else
        \mathclose{\Hy@raisedlink{\hyper@anchorend}}%
      \fi
      \H@endequation
    }%
  }
}{}
%    \end{macrocode}
% My goodness, why can't \LaTeX{} be consistent? Why is |\eqnarray|
% set up differently from other objects?
%
% People (you know who you are, Thomas Beuth) sometimes make
% an eqnarray where \emph{all} the lines end with  |\notag|,
% so there is no suitable anchor at all. In this case, pass by
% on the other side.
%    \begin{macrocode}
\newif\if@eqnstar
\@eqnstarfalse
\let\H@eqnarray\eqnarray
\let\H@endeqnarray\endeqnarray
\@ifundefined{hyper@nopatch@mathenv}{%
  \def\eqnarray{%
    \let\Hy@reserved@a\relax
    \def\@currentHref{}%
    \H@eqnarray
    \if@eqnstar
    \else
      \ifx\\\@currentHref\\%
      \else
        \hyper@makecurrent{equation}%
        \mathopen{%
          \Hy@raisedlink{%
            \hyper@anchorstart{\@currentHref}\hyper@anchorend
          }%
        }%
      \fi
    \fi
  }
  \def\endeqnarray{%
    \H@endeqnarray
  }
}{}
%    \end{macrocode}
% This is quite heavy-handed, but it works for now. If its an |eqnarray*|
% we need to disable the hyperref actions. There may well be a cleaner
% way to trap this. Bill Moss found this.
%    \begin{macrocode}
\@namedef{eqnarray*}{%
  \protected\def\@eqncr{\nonumber\@seqncr}\@eqnstartrue\eqnarray
}
\@namedef{endeqnarray*}{%
  \nonumber\endeqnarray\@eqnstarfalse
}
%    \end{macrocode}
% Then again, we have the \emph{subeqnarray}
% package. Tanmoy provided some code for this:
%    \begin{macrocode}
\@ifundefined{subeqnarray}{}{%
  \let\H@subeqnarray\subeqnarray
  \let\H@endsubeqnarray\endsubeqnarray
  \def\subeqnarray{%
    \let\Hy@reserved@a\relax
    \H@subeqnarray
    \hyper@makecurrent{equation}%
    \hyper@anchorstart{\@currentHref}{}\hyper@anchorend
  }%
  \def\endsubeqnarray{%
    \H@endsubeqnarray
  }%
  \providecommand\theHsubequation{\theHequation\alph{subequation}}%
}
%    \end{macrocode}
% The aim of this macro is to produce a sanitized version of
% its argument, to make it a safe label.
%    \begin{macrocode}
\def\make@stripped@name#1{%
  \begingroup
    \escapechar\m@ne
    \global\let\newname\@empty
    \protected@edef\Hy@tempa{#1}%
    \edef\@tempb{%
      \noexpand\@tfor\noexpand\Hy@tempa:=%
        \expandafter\strip@prefix\meaning\Hy@tempa
    }%
    \@tempb\do{%
      \if{\Hy@tempa\else
        \if}\Hy@tempa\else
          \xdef\newname{\newname\Hy@tempa}%
        \fi
      \fi
    }%
  \endgroup
}
%    \end{macrocode}
%
% Support for amsmath's \texttt{subequations}:
% change 2023-06-14: we use hooks to no longer depend on
% amsmath being loaded before hyperref.
% Once amsmath sets the theH-representation itself this
% can go completely.
%    \begin{macrocode}
\AddToHook{cmd/subequations/before}
 {%
    \stepcounter{equation}%
    \protected@edef\theHparentequation{\theHequation}%
    \addtocounter{equation}{-1}%
 }

\AddToHook{cmd/subequations/after}
 {%
   \def\theHequation{\theHparentequation\alph{equation}}%
   \ignorespaces
 }
%    \end{macrocode}
%
% \section{Support for theorems}
%
% Hyperlink support in theorems has to resolve typically three problems:
% \begin{itemize}
% \item The \cs{refstepcounter} can be issued to early. The target it produces
% can be separated from the theorem and then the link if wrong (see testfiles thm-005-xx).
% It can also affect spacing.
% This means that it is better if this \cs{refstepcounter} doesn't produce a target.
%
% \item The natural place for the target (before the theorem label) is normally not printed
% directly but delayed to the next paragraph begin (through the \cs{item} code or by other means).
% and \cs{label} commands used directly at the begin of the environment are perhaps
% processed \emph{before} the target is created
% and so do not know the correct \cs{@currentHref} value. That means that if
% \cs{refstepcounter} does not produce a target, it should nevertheless update the target
% name.
%
% \item The target should be placed (in horizontal mode) before the theorem label to avoid
% side effects on spacing. For this a suitable place must be
% found depending on the actual theorem definition.
% \end{itemize}
%
% Theorems typically issue the \cs{refstepcounter} in \cs{@thm}.
% The first two points can therefore be resolved by patching this command
% and replacing the \cs{refstepcounter}.
%
% The last point is the most complicated. Simply moving at the point \cs{refstepcounter}
% is encountered into the next para hook doesn't work, as this can be in a header if there is page
% break. The next item hook doesn't work for the same reason,
% also not every theorem environment actually use \cs{item} (e.g. \texttt{amsthm} and ams-classes).
% Patching (or using a hook) \cs{@begintheorem} doesn't work either as \texttt{ntheorem}
% redefines this on the fly.
%
% For now we move the target creation into the item hook. This is not perfect,
% as it can end up in header or be to much to the right, but there is not really
% a better place.
%
% The patch will not apply to
% \texttt{cleveref}, this means that with cleveref there
% can be a page break between target and theorem but beside this
% it hopefully it does the right thing.
% \cs{@currentHref} is updated directly for labels set before
% the actual start of the paragraph. The target can be behind
% a target created from a following list, so we restore \cs{@currentHref}
% just in case.
% Later we could use sockets here (or hope that the packages take this over.
%
%    \begin{macrocode}
\newcommand\Hy@theorem@refstepcounter[1]
  {%
   \H@refstepcounter{#1}%
   \hyper@makecurrent{#1}%
   \global\let\Hy@dth@currentHref\@currentHref
   \Hy@theorem@makelinktarget{\Hy@dth@currentHref}%
  }
\newcommand\Hy@theorem@makelinktarget[1]
 {
   \AddToHookNext{cmd/item/before}
     {\AddToHookNext{para/begin}
       {\let\Hy@tempa\@currentHref
        \MakeLinkTarget*{#1}% \Hy@dth@currentHref
        \global\let\@currentHref\Hy@tempa
       }%
     }%
 }
%    \end{macrocode}
% amsthm doesn't issue an item in the theorem, we delay the target into
% \cs{deferred@thm@head} and hope that it always begins a paragraph.
%    \begin{macrocode}
\AddToHook{begindocument}
 {%
  \@ifundefined{deferred@thm@head}{}
   {%
    \let\Hy@deferred@thm@head\deferred@thm@head
    \def\deferred@thm@head#1{\Hy@deferred@thm@head{#1}}%
    \renewcommand\Hy@theorem@makelinktarget[1]
     {%
      \AddToHookNext{cmd/deferred@thm@head/before}
       {\AddToHookNext{para/begin}
         {\let\Hy@tempa\@currentHref
          \MakeLinkTarget*{#1}%
          \global\let\@currentHref\Hy@tempa
         }%
       }%
     }%
   }%
 }
\@ifundefined{hyper@nopatch@thm}{%
\AtBeginDocument{%
 \@ifpackageloaded{cleveref}
  {\AddToHook{cmd/@thm/before}{\ifhmode\unskip\fi}}
  {%
   \ifpatchable\@thm{\refstepcounter}
     {\patchcmd\@thm{\refstepcounter}{\Hy@theorem@refstepcounter}{}{}}
     {}%
  }}}{}
%    \end{macrocode}
%
% \section{Footnotes}\label{footnotes}
% The footnote mark is a hypertext link, and the text is a target.
% We separately number the footnotes sequentially through the
% text, separately from whatever labels the text assigns. Too hard
% to keep track of markers otherwise. If the raw forms |\footnotemark|
% and |\footnotetext| are used, force them to use un-hyper original.
% If |\hyper@nopatch@footnote| is defined we don't patch but assume
% that addings links to footnotes is handled elsewhere.
%    \begin{macrocode}
\@ifundefined{hyper@nopatch@footnote}{%
\ifHy@hyperfootnotes
  \@ifundefined{theHfootnote}
   {\newcounter{Hfootnote}}
   {\let\H@@theHfootnote\theHfootnote
    \let\theHfootnote\undefined
    \newcounter{Hfootnote}
    \let\theHfootnote\H@@theHfootnote
   }%
%    \end{macrocode}
% where is this used?
%    \begin{macrocode}
  \@ifundefined{theHHmpfootnote}{%
   \let\theHHmpfootnote\theHHfootnote
   }{}
  \let\H@@footnotetext\@footnotetext
  \let\H@@footnotemark\@footnotemark
  \def\@xfootnotenext[#1]{%
    \begingroup
      \csname c@\@mpfn\endcsname #1\relax
      \unrestored@protected@xdef\@thefnmark{\thempfn}%
    \endgroup
    \ifx\@footnotetext\@mpfootnotetext
      \expandafter\H@@mpfootnotetext
    \else
      \expandafter\H@@footnotetext
    \fi
  }%
  \def\@xfootnotemark[#1]{%
    \begingroup
      \c@footnote #1\relax
      \unrestored@protected@xdef\@thefnmark{\thefootnote}%
    \endgroup
    \H@@footnotemark
  }%
  \let\H@@mpfootnotetext\@mpfootnotetext
  \long\def\@mpfootnotetext#1{%
    \H@@mpfootnotetext{%
      \ifHy@nesting
        \expandafter\@firstoftwo
      \else
        \expandafter\@secondoftwo
      \fi
      {%
        \expandafter\hyper@@anchor\expandafter{%
          \Hy@footnote@currentHref
         }{\ignorespaces #1}%
      }{%
        \Hy@raisedlink{%
          \expandafter\hyper@@anchor\expandafter{%
            \Hy@footnote@currentHref
          }{\relax}%
        }%
%    \end{macrocode}
% Change 2025-09-29: set \cs{@currentHref} and \cs{@currentlabelname} for issue 402.
%    \begin{macrocode}
        \let\@currentHref\Hy@footnote@currentHref
        \let\@currentlabelname\@empty
        \ignorespaces #1%
      }%
    }%
  }%
  \long\def\@footnotetext#1{%
    \H@@footnotetext{%
      \ifHy@nesting
        \expandafter\@firstoftwo
      \else
        \expandafter\@secondoftwo
      \fi
      {%
        \expandafter\hyper@@anchor\expandafter{%
          \Hy@footnote@currentHref
        }{\ignorespaces #1}%
      }{%
        \Hy@raisedlink{%
          \expandafter\hyper@@anchor\expandafter{%
            \Hy@footnote@currentHref
          }{\relax}%
        }%
        \let\@currentHref\Hy@footnote@currentHref
        \let\@currentlabelname\@empty
        \ignorespaces #1%
      }%
    }%
  }%
%    \end{macrocode}
%    Redefine \verb+\@footnotemark+, borrowing its code (at the
%    cost of getting out of sync with latex.ltx), to take
%    advantage of its white space and hyphenation fudges. If we just
%    overload it, we can get variant documents (the word before the
%    footnote is treated differently). Thanks to David Carlisle and
%    Brian Ripley for confusing and helping me on this.
%    \begin{macrocode}
  \def\@footnotemark{%
    \leavevmode
    \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
    \stepcounter{Hfootnote}%
    \global\let\Hy@saved@currentHref\@currentHref
    \hyper@makecurrent{Hfootnote}%
    \global\let\Hy@footnote@currentHref\@currentHref
    \global\let\@currentHref\Hy@saved@currentHref
    \hyper@linkstart{link}{\Hy@footnote@currentHref}%
    \@makefnmark
    \hyper@linkend
    \ifhmode\spacefactor\@x@sf\fi
    \relax
  }%
%    \end{macrocode}
%
% Tabularx causes footnote problems, disable the linking if that is loaded.
% Since v6.82i footnotes are only disabled inside the environment
% `tabularx'.
%    \begin{macrocode}
  \@ifpackageloaded{tabularx}{%
    \let\HyOrg@TX@endtabularx\TX@endtabularx
    \def\Hy@tabularx@hook{%
      \let\@footnotetext\H@@footnotetext
      \let\@footnotemark\H@@footnotemark
      \let\@mpfootnotetext\H@@mpfootnotetext
    }%
    \begingroup
      \toks@\expandafter{\TX@endtabularx}%
      \xdef\Hy@gtemp{%
        \noexpand\Hy@tabularx@hook
        \the\toks@
      }%
    \endgroup
    \let\TX@endtabularx\Hy@gtemp
  }{}%
%    \end{macrocode}
%
%    Support for footnotes in p columns of longtable.
%    Here \verb+\footnote+ commands are split into
%    \verb+\footnotemark+ and a call of \verb+\footnotetext+
%    with the optional argument, that is not supported
%    by hyperref. The result is a link by \verb+\footnotemark+
%    without valid anchor
%    \begin{macrocode}
  \@ifpackageloaded{longtable}{%
    \CheckCommand{\LT@p@ftntext}[1]{%
      \edef\@tempa{%
        \the\LT@p@ftn
        \noexpand\footnotetext[\the\c@footnote]%
      }%
      \global\LT@p@ftn\expandafter{\@tempa{#1}}%
    }%
    \long\def\LT@p@ftntext#1{%
      \edef\@tempa{%
        \the\LT@p@ftn
        \begingroup
          \noexpand\c@footnote=\the\c@footnote\relax
          \noexpand\protected@xdef\noexpand\@thefnmark{%
            \noexpand\thempfn
          }%
          \noexpand\Hy@LT@footnotetext{%
            \Hy@footnote@currentHref
          }%
      }%
      \global\LT@p@ftn\expandafter{%
          \@tempa{#1}%
        \endgroup
      }%
    }%
    \long\def\Hy@LT@footnotetext#1#2{%
      \H@@footnotetext{%
        \ifHy@nesting
          \hyper@@anchor{#1}{#2}%
        \else
          \Hy@raisedlink{%
            \hyper@@anchor{#1}{\relax}%
          }%
          \def\@currentHref{#1}%
          \let\@currentlabelname\@empty
          #2%
        \fi
      }%
    }%
  }{}%
%    \end{macrocode}
%
%    Footnotes for fancyvrb (Fix by Manuel P\'egouri\'e-Gonnard).
%    \begin{macrocode}
  \@ifpackageloaded{fancyvrb}{%
    \def\V@@footnotetext{%
      \insert\footins\bgroup
      \csname reset@font\endcsname
      \footnotesize
      \interlinepenalty\interfootnotelinepenalty
      \splittopskip\footnotesep
      \splitmaxdepth\dp\strutbox
      \floatingpenalty \@MM
      \hsize\columnwidth
      \@parboxrestore
      \def\@currentcounter{footnote}%
      \protected@edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
      \@makefntext{}%
      \rule{\z@}{\footnotesep}%
      \bgroup
      \aftergroup\V@@@footnotetext
      \Hy@raisedlink{%
        \expandafter\hyper@@anchor\expandafter{%
          \Hy@footnote@currentHref
        }{\relax}%
      }%
      \let\@currentHref\Hy@footnote@currentHref
      \let\@currentlabelname\@empty
      \ignorespaces
    }%
  }{}%
%    \end{macrocode}
%
%    KOMA-Script or newer LaTeX defines \cs{footref} that uses both
%    \cs{ref} and \cs{@footnotemark} resulting in two links,
%    one of them wrong.
%    \begin{macrocode}
  \def\Hy@temp#1{%
    \begingroup
      \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
    \endgroup
    \@footnotemark
  }%
  \ifx\Hy@temp\footref
    \def\footref#1{%
    \begingroup
      \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
    \endgroup
    \H@@footnotemark
    }%
  \fi
%    \end{macrocode}
%
%    But the special footnotes
%    in |\maketitle| are much too hard to deal with
%    properly. Let them revert to plain behaviour.
%    The koma classes add an optional argument.
%    \begin{macrocode}
  \let\HyOrg@maketitle\maketitle
  \def\maketitle{%
    \let\Hy@saved@footnotemark\@footnotemark
    \let\Hy@saved@footnotetext\@footnotetext
    \let\@footnotemark\H@@footnotemark
    \let\@footnotetext\H@@footnotetext
    \@ifnextchar[\Hy@maketitle@optarg{% ]
      \HyOrg@maketitle
      \Hy@maketitle@end
    }%
  }%
  \def\Hy@maketitle@optarg[#1]{%
    \HyOrg@maketitle[{#1}]%
    \Hy@maketitle@end
  }%
  \def\Hy@maketitle@end{%
    \ifx\@footnotemark\H@@footnotemark
      \let\@footnotemark\Hy@saved@footnotemark
    \fi
    \ifx\@footnotetext\H@@footnotetext
      \let\@footnotetext\Hy@saved@footnotetext
    \fi
  }%
%    \end{macrocode}
%    \begin{macro}{\realfootnote}
%    Does anyone remember the function and purpose of \cmd{\realfootnote}?
%    \begin{macrocode}
  \def\realfootnote{%
    \@ifnextchar[\@xfootnote%]
     {\stepcounter{\@mpfn}%
      \protected@xdef\@thefnmark{\thempfn}%
      \H@@footnotemark\H@@footnotetext
    }%
  }%
%    \end{macrocode}
%    \begin{macrocode}
\fi
}{}
\Hy@DisableOption{hyperfootnotes}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
%</packageEnd>
%<*check>
\checklatex
\checkcommand\def\@xfootnotenext[#1]{%
  \begingroup
    \csname c@\@mpfn\endcsname #1\relax
    \unrestored@protected@xdef\@thefnmark{\thempfn}%
  \endgroup
  \@footnotetext
}
\checkcommand\def\@xfootnotemark[#1]{%
  \begingroup
    \c@footnote #1\relax
    \unrestored@protected@xdef\@thefnmark{\thefootnote}%
  \endgroup
  \@footnotemark
}
\checkcommand\def\@footnotemark{%
  \leavevmode
  \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
  \@makefnmark
  \ifhmode\spacefactor\@x@sf\fi
  \relax
}
%</check>
%<*packageEnd>
%    \end{macrocode}
%
% \section{Float captions}\label{captions}
% Make the float caption the hypertext anchor; curiously enough,
% we can't just copy the definition of |\@caption|. Its all to do
% with expansion. It screws up. Sigh.
%    \begin{macrocode}
\@ifundefined{hyper@nopatch@caption}{%
\def\caption{%
  \ifx\@captype\@undefined
    \@latex@error{\noexpand\caption outside float}\@ehd
    \expandafter\@gobble
  \else
    \H@refstepcounter\@captype
    \let\Hy@tempa\@caption
    \@ifundefined{float@caption}{%
    }{%
      \expandafter\ifx\csname @float@c@\@captype\endcsname
                      \float@caption
        \let\Hy@tempa\Hy@float@caption
      \fi
    }%
    \expandafter\@firstofone
  \fi
  {\@dblarg{\Hy@tempa\@captype}}%
}
\long\def\@caption#1[#2]#3{%
  \expandafter\ifx\csname if@capstart\expandafter\endcsname
                  \csname iftrue\endcsname
    \global\let\@currentHref\hc@currentHref
  \else
    \hyper@makecurrent{\@captype}%
  \fi
  \@ifundefined{NR@gettitle}{%
    \def\@currentlabelname{#2}%
  }{%
    \NR@gettitle{#2}%
  }%
  \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
    \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
  }%
  \begingroup
    \@parboxrestore
    \if@minipage
      \@setminipage
    \fi
    \normalsize
    \expandafter\ifx\csname if@capstart\expandafter\endcsname
                    \csname iftrue\endcsname
      \global\@capstartfalse
      \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces#3}%
    \else
      \@makecaption{\csname fnum@#1\endcsname}{%
        \ignorespaces
%    \end{macrocode}
% If we cannot have nesting, the anchor is empty.
%    \begin{macrocode}
        \ifHy@nesting
          \expandafter\hyper@@anchor\expandafter{\@currentHref}{#3}%
        \else
          \Hy@raisedlink{%
            \expandafter\hyper@@anchor\expandafter{%
              \@currentHref
            }{\relax}%
          }%
          #3%
        \fi
%    \end{macrocode}
% as the anchor are set manually here, we have to update the tagging info.
%    \begin{macrocode}
        \UseTaggingSocket{recordtarget}%
      }%
    \fi
    \par
  \endgroup
}}{}%end no patch
%    \end{macrocode}
%    Compatibility with float.sty: anchor setting at the top
%    of the float, if the float is controlled by float.sty.
%    Several \verb|\caption| commands inside one float are
%    not supported.
%
%    \cs{HyNew@float@makebox} is introduced as feature request
%    of Axel Sommerfeldt to make the life easier for his
%    package `caption'.
%    \begin{macrocode}
\let\Hy@float@caption\@caption
\newcommand{\HyNew@float@makebox}[1]{%
  \HyOrg@float@makebox{%
    #1\relax
    \ifx\Hy@float@currentHref\@undefined
    \else
      \expandafter\hyper@@anchor\expandafter{%
        \Hy@float@currentHref
      }{\relax}%
      \global\let\Hy@float@currentHref\@undefined
    \fi
  }%
}%
\@ifpackageloaded{float}{%
  \def\Hy@float@caption{%
    \ifx\Hy@float@currentHref\@undefined
      \hyper@makecurrent{\@captype}%
      \global\let\Hy@float@currentHref\@currentHref
    \else
      \let\@currentHref\Hy@float@currentHref
    \fi
    \float@caption
  }%
  \let\HyOrg@float@makebox\float@makebox
  \let\float@makebox\HyNew@float@makebox
}{}
%    \end{macrocode}
%
%    \begin{macrocode}
%</packageEnd>
%<*check>
\checklatex[1999/06/01 - 2000/06/01]
\checkcommand\def\caption{%
  \ifx\@captype\@undefined
    \@latex@error{\noexpand\caption outside float}\@ehd
    \expandafter\@gobble
  \else
    \refstepcounter\@captype
    \expandafter\@firstofone
  \fi
  {\@dblarg{\@caption\@captype}}%
}
\checkcommand\long\def\@caption#1[#2]#3{%
  \par
  \addcontentsline{\csname ext@#1\endcsname}{#1}{%
    \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
  }%
  \begingroup
    \@parboxrestore
    \if@minipage
      \@setminipage
    \fi
    \normalsize
    \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par
  \endgroup
}
%</check>
%<*packageEnd>
%    \end{macrocode}
%
% \section{Bibliographic references}\label{bib}
% This is not very robust, since many styles redefine these things.
% The package used to redefine |\@citex| and the like; then we tried
% adding the hyperref call explicitly into the .aux file.
% Now we redefine |\bibcite|; this still breaks some citation packages
% so we have to work around them. But this remains extremely dangerous.
% Any or all of \emph{achemso}
% and \emph{drftcite} may break.
%
% However, lets make an attempt to get \emph{natbib} right, because
% that's a powerful, important package.
% Patrick Daly (\Email{daly@linmpi.mpg.de}) has
% provided hooks for us, so all we need to do is activate them.
% 
% Change 2026-02-06: use a generic hook to allow the tagging code to 
% add its code without patching hyperref. 
%    \begin{macrocode}
\AddToHookWithArguments{cmd/hyper@natlinkstart/before}
  {%
    \Hy@backout{#1}%
%    \end{macrocode}
%  natbib passes the \cs{@extra@b@citeb} in the argument, and biblatex
%  the refsection, so we only need to add the prefix \texttt{cite.}.
%    \begin{macrocode}
      \hyper@linkstart{cite}{cite.#1}%
      \def\hyper@nat@current{#1}%
  } 
%    \end{macrocode}
%
%    \begin{macrocode}
\AddToHook{cmd/hyper@natlinkend/after}
   {\hyper@linkend}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\hyper@natlinkbreak#1#2{%
  \hyper@linkend#1\hyper@linkstart{cite}{cite.#2}%
}
\def\hyper@natanchorstart#1{%
  \Hy@raisedlink{\hyper@anchorstart{cite.#1}}%
}
\def\hyper@natanchorend{\hyper@anchorend}
%    \end{macrocode}
% Do not play games if we have natbib support.
% Macro \@extra@binfo added for chapterbib support. Chapterbib also
% wants \cs{@extra@binfo} in the hyper-link, but since the link tag is
% not expanded immediately, we use \cs{@extra@b@citeb}, so cites in a
% chapter will link to the bibliography in that chapter.
%    \begin{macrocode}
\@ifundefined{hyper@nopatch@bib}
 {%
   \@ifundefined{NAT@parse}{%
     \providecommand*\@extra@binfo{}%
     \providecommand*\@extra@b@citeb{}%
     \def\bibcite#1#2{%
       \@newl@bel{b}{#1\@extra@binfo}{%
         \hyper@@link[cite]{}{cite.#1\@extra@b@citeb}{#2}%
       }%
     }%
     \gdef\@extra@binfo{}%
%    \end{macrocode}
%    Package |babel| redefines \cmd{\bibcite} with
%    macro \cmd{\bbl@cite@choice}. It needs to be overwritten
%    to avoid the warning ``Label(s) may have changed.''.
%    \begin{macrocode}
     \let\Hy@bibcite\bibcite
     \begingroup
       \@ifundefined{bbl@cite@choice}{}{%
         \g@addto@macro\bbl@cite@choice{%
           \let\bibcite\Hy@bibcite
         }%
       }%
     \endgroup
%    \end{macrocode}
% |\@BIBLABEL| is working around a `feature' of Rev\TeX.
%    \begin{macrocode}
     \providecommand*{\@BIBLABEL}{\@biblabel}%
     \def\@lbibitem[#1]#2{%
       \@skiphyperreftrue
       \H@item[%
         \ifx\Hy@raisedlink\@empty
           \hyper@anchorstart{cite.#2\@extra@b@citeb}%
             \@BIBLABEL{#1}%
           \hyper@anchorend
         \else
           \Hy@raisedlink{%
             \hyper@anchorstart{cite.#2\@extra@b@citeb}\hyper@anchorend
           }%
           \@BIBLABEL{#1}%
         \fi
         \hfill
       ]%
       \@skiphyperreffalse
       \if@filesw
         \begingroup
           \let\protect\noexpand
           \immediate\write\@auxout{%
             \string\bibcite{#2}{#1}%
           }%
         \endgroup
       \fi
       \ignorespaces
     }%
%    \end{macrocode}
% Since |\bibitem| is doing its own labelling, call the raw
% version of |\item|, to avoid extra spurious labels
%    \begin{macrocode}
     \def\@bibitem#1{%
       \@skiphyperreftrue\H@item\@skiphyperreffalse
       \Hy@raisedlink{%
         \hyper@anchorstart{cite.#1\@extra@b@citeb}\relax\hyper@anchorend
       }%
       \if@filesw
         \begingroup
           \let\protect\noexpand
           \immediate\write\@auxout{%
             \string\bibcite{#1}{\the\value{\@listctr}}%
           }%
         \endgroup
       \fi
       \ignorespaces
     }%
  }{}%
}{}
%    \end{macrocode}
% If \cs{DocumentMetadata} is used hyperref can use the bibcite hooks.
%    \begin{macrocode}
\IfDocumentMetadataT
 {
   \AddToHook{package/hyperref/after}[latex-lab-testphase-bib]{}
   \RemoveFromHook{package/hyperref/after}[latex-lab-testphase-bib]
   \AddToHookWithArguments{bibcite/before}
     {%
       \hyper@linkstart{cite}{cite.#1\@extra@b@citeb}%
     }
   \AddToHookWithArguments{bibcite/after}{\hyper@linkend}
 }  
%    \end{macrocode}
%
%    \begin{macrocode}
%</packageEnd>
%<*check>
\checklatex
\checkcommand\def\@lbibitem[#1]#2{%
  \item[\@biblabel{#1}\hfill]%
  \if@filesw
    {%
      \let\protect\noexpand
      \immediate\write\@auxout{%
        \string\bibcite{#2}{#1}%
      }%
    }%
  \fi
  \ignorespaces
}
\checkcommand\def\@bibitem#1{%
  \item
  \if@filesw
    \immediate\write\@auxout{%
      \string\bibcite{#1}{\the\value{\@listctr}}%
    }%
  \fi
  \ignorespaces
}
%</check>
%<*packageEnd>
%    \end{macrocode}
%
% \subsection{Package harvard}
%
% Override Peter Williams' Harvard package; we have to
% a) make each of the citation types into a link; b) make
% each citation write a backref entry, and c) kick off a backreference
% section for each bibliography entry.
%
% The redefinitions have to be deferred to |\begin{document}|,
% because if harvard.sty is loaded and html.sty is present and
% detects pdf\TeX, then hyperref is already loaded at the begin
% of harvard.sty, and the |\newcommand| macros causes error
% messages.
%    \begin{macrocode}
\@ifpackageloaded{harvard}{%
  \Hy@AtBeginDocument{%
    \Hy@Info{*** compatibility with harvard **** }%
    \Hy@raiselinksfalse
    \def\harvardcite#1#2#3#4{%
      \global\@namedef{HAR@fn@#1}{\hyper@@link[cite]{}{cite.#1}{#2}}%
      \global\@namedef{HAR@an@#1}{\hyper@@link[cite]{}{cite.#1}{#3}}%
      \global\@namedef{HAR@yr@#1}{\hyper@@link[cite]{}{cite.#1}{#4}}%
      \global\@namedef{HAR@df@#1}{\csname HAR@fn@#1\endcsname}%
    }%
    \def\HAR@citetoaux#1{%
      \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi%
      \ifHy@backref
        \ifx\@empty\@currentlabel
        \else
          \@bsphack
          \if@filesw
            \protected@write\@auxout{}{%
              \string\@writefile{brf}{%
                \string\backcite{#1}{%
                  {\thepage}{\@currentlabel}{\@currentHref}%
                }%
              }%
            }%
          \fi
          \@esphack
        \fi
      \fi
    }%
    \def\harvarditem{%
      \@ifnextchar[{\@harvarditem}{\@harvarditem[\null]}%
    }%
    \def\@harvarditem[#1]#2#3#4#5\par{%
      \item[]%
      \hyper@anchorstart{cite.#4}\relax\hyper@anchorend
      \if@filesw
        \begingroup
          \def\protect##1{\string ##1\space}%
          \ifthenelse{\equal{#1}{\null}}%
            {\def\next{{#4}{#2}{#2}{#3}}}%
            {\def\next{{#4}{#2}{#1}{#3}}}%
          \immediate\write\@auxout{\string\harvardcite\codeof\next}%
       \endgroup
      \fi
      \protect\hspace*{-\labelwidth}%
      \protect\hspace*{-\labelsep}%
      \ignorespaces
      #5%
      \ifHy@backref
        \newblock
        \backref{\csname br@#4\endcsname}%
      \fi
      \par
    }%
%    \end{macrocode}
%    \begin{macro}{\HAR@checkcitations}
%    Package hyperref has added \cmd{\hyper@@link}, so
%    the original test \cmd{\HAR@checkcitations} will
%    fail every time and always will appear the ``Changed
%    labels'' warning. So we have to redefine
%    \cmd{\Har@checkcitations}:
%    \begin{macrocode}
    \long\def\HAR@checkcitations#1#2#3#4{%
      \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#2}}%
      \expandafter\ifx\csname HAR@fn@#1\endcsname\HAR@tempa
        \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#3}}%
        \expandafter\ifx\csname HAR@an@#1\endcsname\HAR@tempa
          \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#4}}%
          \expandafter\ifx\csname HAR@yr@#1\endcsname\HAR@tempa
          \else
            \@tempswatrue
          \fi
        \else
          \@tempswatrue
        \fi
      \else
        \@tempswatrue
      \fi
    }%
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
}{}
%    \end{macrocode}
%
% \subsection{Package chicago}
%    The links by \cmd{\citeN} and \cmd{\shortciteN} should
%    include the closing parentheses.
%
%    \begin{macrocode}
\@ifpackageloaded{chicago}{%
%    \end{macrocode}
%    \begin{macro}{\citeN}
%    \begin{macrocode}
  \def\citeN{%
    \def\@citeseppen{-1000}%
    \def\@cite##1##2{##1}%
    \def\citeauthoryear##1##2##3{##1 (##3\@cite@opt)}%
    \@citedata@opt
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\shortciteN}
%    \begin{macrocode}
  \def\shortciteN{%
    \def\@citeseppen{-1000}%
    \def\@cite##1##2{##1}%
    \def\citeauthoryear##1##2##3{##2 (##3\@cite@opt)}%
    \@citedata@opt
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\@citedata@opt}
%    \begin{macrocode}
  \def\@citedata@opt{%
    \let\@cite@opt\@empty
    \@ifnextchar [{%
      \@tempswatrue
      \@citedatax@opt
    }{%
      \@tempswafalse
      \@citedatax[]%
    }%
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\@citedatax@opt}
%    \begin{macrocode}
  \def\@citedatax@opt[#1]{%
    \def\@cite@opt{, #1}%
    \@citedatax[{#1}]%
  }%
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
}{}
%    \end{macrocode}
%
% \section{Page numbers}\label{pagenum}
%
%    The last page should not contain a /Dur key, because there
%    is no page after the last page. Therefore at the last page
%    there should be a command |\hypersetup{pdfpageduration={}}|.
%    This can be set with \cmd{\AtEndDocument}, but it can
%    be too late, if the last page is already finished, or too
%    early, if lots of float pages will follow.
%    Therefore currently nothing is done by hyperref.
%
% This where we supply a destination for each page.
%
% \marginpar{Experimental!}The name of destination
% is stored in the global command \cs{@currentHpage}, this allows it to retrieve
% it with an extended reference system like zref or the new property code from \LaTeX{}
% 2023-11-01.
%    \begin{macrocode}
\def\@currentHpage{Doc-Start}
%    \end{macrocode}
%    \begin{macrocode}
\@ifclassloaded{slides}{%
  \def\Hy@SlidesFormatOptionalPage#1{(#1)}%
  \def\Hy@PageAnchorSlidesPlain{%
    \advance\c@page\@ne
    \xdef\@currentHpage{page.\the\c@slide.\the\c@overlay.\the\c@note%
        \ifnum\c@page=\@ne
        \else
          .\the\c@page
        \fi}%
    \edef\Hy@TempPageAnchor{%
      \noexpand\hyper@@anchor{%
        \@currentHpage
      }%
    }%
    \advance\c@page-\@ne
  }%
  \def\Hy@PageAnchorSlide{%
    \advance\c@page\@ne
    \ifnum\c@page>\@ne
      \@ifundefined{theHpage}{%
        \protected@edef\Hy@TheSlideOptionalPage{%
          \Hy@SlidesFormatOptionalPage{\thepage}%
        }%
      }{%
        \protected@edef\Hy@TheSlideOptionalPage{%
          \Hy@SlidesFormatOptionalPage{\theHpage}%
        }%
      }%
    \else
      \def\Hy@TheSlideOptionalPage{}%
    \fi
    \advance\c@page-\@ne
    \pdfstringdef\@the@H@page{%
      \csname
        the%
        \@ifundefined{theH\Hy@SlidesPage}{}{H}%
        \Hy@SlidesPage
      \endcsname
      \Hy@TheSlideOptionalPage
    }%
    \@gobblethree
  }%
  \def\Hy@SlidesPage{slide}%
  \g@addto@macro\slide{%
    \def\Hy@SlidesPage{slide}%
  }%
  \g@addto@macro\overlay{%
    \def\Hy@SlidesPage{overlay}%
  }%
  \g@addto@macro\note{%
    \def\Hy@SlidesPage{note}%
  }%
}{%
  \def\Hy@PageAnchorSlidesPlain{}%
  \def\Hy@PageAnchorSlide{}%
}
\def\Hy@EveryPageAnchor{%
  \Hy@DistillerDestFix
  \ifHy@pageanchor
    \ifHy@hypertexnames
      \ifHy@plainpages
        \def\Hy@TempPageAnchor{\hyper@@anchor{page.\the\c@page}}%
        \xdef\@currentHpage{page.\the\c@page}%
        \Hy@PageAnchorSlidesPlain
      \else
        \begingroup
          \let\@number\@firstofone
          \Hy@unicodefalse
          \Hy@PageAnchorSlide
          \pdfstringdef\@the@H@page{\thepage}%
        \endgroup
        \EdefUnescapeString\@the@H@page{\@the@H@page}%
        \def\Hy@TempPageAnchor{\hyper@@anchor{page.\@the@H@page}}%
        \xdef\@currentHpage{page.\@the@H@page}%
      \fi
    \else
      \Hy@GlobalStepCount\Hy@pagecounter
      \def\Hy@TempPageAnchor{%
        \hyper@@anchor{page.\the\Hy@pagecounter}%
      }%
      \xdef\@currentHpage{page.\the\Hy@pagecounter}%
    \fi
    \vbox to 0pt{%
      \kern\voffset
      \kern\topmargin
      \kern-1bp\relax
      \hbox to 0pt{%
        \kern\hoffset
        \kern\ifodd\value{page}%
               \oddsidemargin
             \else
               \evensidemargin
             \fi
        \kern-1bp\relax
        \Hy@TempPageAnchor\relax
        \hss
      }%
      \vss
    }%
  \fi
}
\g@addto@macro\Hy@EveryPageBoxHook{%
  \Hy@EveryPageAnchor
}
%    \end{macrocode}
%
% \section{Table of contents}\label{toc}
% TV Raman noticed that people who add arbitrary material into the TOC
% generate a bad or null link. We avoid that by checking if the current
% destination is empty. But if `the most recent destination' is not
% what you expect, you will be in trouble.
% In newer \LaTeX\ releases this is defined to put a \verb|%| at the end of the
% line in the \texttt{toc}file.
%    \begin{macrocode}
\providecommand\protected@file@percent{}
%    \end{macrocode}
%
% Change 2026-02-06: Add support for \cs{DocumentMetadata}. We externalize the command
% to allow booksmark to be set without explicit toc-entry.% 
%    \begin{macrocode}
\def\Hy@addcontentsline@addbookmark#1#2#3%#1 toc type, #2 level, #3 content
  {%
   \ifHy@bookmarks
     \ifx\@currentHref\@empty
      \Hy@Warning{%
        No destination for bookmark of \string\addcontentsline,%
        \MessageBreak destination is added%
       }%
      \phantomsection
    \fi
    \begingroup
      \let\label\@gobble@om
      \let\index\@gobble@som
      \let\glossary\@gobble@om
      \expandafter\ifx\csname toclevel@#2\endcsname\relax
        \begingroup
          \def\Hy@tempa{#1}%
          \ifx\Hy@tempa\Hy@bookmarkstype
            \Hy@WarningNoLine{%
              bookmark level for unknown #2 defaults to 0%
            }%
          \else
            \Hy@Info{bookmark level for unknown #2 defaults to 0}%
          \fi
        \endgroup
        \expandafter\gdef\csname toclevel@#2\endcsname{0}%
      \fi
      \edef\Hy@toclevel{\csname toclevel@#2\endcsname}%
      \Hy@writebookmark{\csname the#2\endcsname}%
        {#3}%
        {\@currentHref}%
        {\Hy@toclevel}%
        {#1}%
      \ifHy@verbose
        \begingroup
          \def\Hy@tempa{#3}%
          \@onelevel@sanitize\Hy@tempa
          \let\temp@online\on@line
          \let\on@line\@empty
          \Hy@Info{%
            bookmark\temp@online:\MessageBreak
            thecounter {\csname the#2\endcsname}\MessageBreak
            text {\Hy@tempa}\MessageBreak
            reference {\@currentHref}\MessageBreak
            toclevel {\Hy@toclevel}\MessageBreak
            type {#1}%
          }%
        \endgroup
      \fi
     \endgroup
   \fi
  }
%    \end{macrocode}
% If the new sec template code is used, we map the command to the new interface:
%    \begin{macrocode}
\@ifundefined{addcontentslinebookmark}{}
 {
   \RenewCommandCopy\addcontentslinebookmark\Hy@addcontentsline@addbookmark
     \renewcommand\addcontentslinebookmarkOff
      {%
       \ifHy@bookmarks 
        \let\addcontentslinebookmarkReset\Hy@bookmarkstrue
       \else 
         \let\addcontentslinebookmarkReset\relax
       \fi  
       \Hy@bookmarksfalse
      } 
 }  
%    \end{macrocode}
% If \cs{DocumentMetadata} is not used, we must redefine \cs{addcontentsline} as in the 
% latex-lab code to ensure that the target is written:
%    \begin{macrocode}
\@ifundefined{hyper@nopatch@toc}{%
\def\addcontentsline#1#2#3{% #1=toc extension, #2= heading type, tag
    \addtocontents{#1}{%
      \protect\contentsline{#2}{#3}{\thepage}{\@currentHref}\protected@file@percent
    }}}{}
%    \end{macrocode}
%
% Then this addition works also if \cs{DocumentMetadata} is used. 
%    \begin{macrocode}
\AddToHookWithArguments{cmd/addcontentsline/before}[hyp]
  {%
    \Hy@addcontentsline@addbookmark
      {#1}
      {#2}
      {#3}%
  }   
%    \end{macrocode}
%
%    \begin{macro}{\contentsline}
%    The page number might be empty. In this case the link for the
%    page number is suppressed to avoid little link boxes.
%
%    change 2022-11-13: To avoid problems if |MakeUppercase| is used
%    around the entry we use special protected commands:
%
%    \begin{macrocode}
\protected\def\Hy@toclinkstart{\hyper@linkstart{link}{\Hy@tocdestname}}
\protected\def\Hy@toclinkend{\hyper@linkend}

\@ifundefined{hyper@nopatch@toc}{%
  \def\contentsline#1#2#3#4{%
    \begingroup
      \Hy@safe@activestrue
    \edef\x{\endgroup
      \def\noexpand\Hy@tocdestname{#4}%
    }\x
    \ifx\Hy@tocdestname\@empty
      \csname l@#1\endcsname{#2}{#3}%
    \else
      \ifcase\Hy@linktoc % none
        \csname l@#1\endcsname{#2}{#3}%
      \or % section
        \csname l@#1\endcsname{%
          \Hy@toclinkstart{#2}\Hy@toclinkend
        }{#3}%
      \or % page
        \def\Hy@temp{#3}%
        \ifx\Hy@temp\@empty
          \csname l@#1\endcsname{#2}{#3}%
        \else
          \csname l@#1\endcsname{{#2}}{%
            \Hy@toclinkstart{#3}\Hy@toclinkend
          }%
        \fi
      \else % all
        \def\Hy@temp{#3}%
        \ifx\Hy@temp\@empty
          \csname l@#1\endcsname{%
            \Hy@toclinkstart{#2}\Hy@toclinkend
          }{}%
        \else
          \csname l@#1\endcsname{%
            \Hy@toclinkstart{#2}\Hy@toclinkend
          }{%
            \Hy@toclinkstart{#3}\Hy@toclinkend
          }%
        \fi
      \fi
    \fi
  }
}{}
%    \end{macrocode}
%    \end{macro}
%
% If \cs{DocumentMetadata} is used we make use of the \cs{contentsline}-hooks to add links:
% 
%    \begin{macrocode}
\ExplSyntaxOn
\IfDocumentMetadataT
 {
   \AddToHookWithArguments{contentsline/text/before}[hyp]
     {
       \tl_if_blank:nF {#2}%text
        {
          \tl_if_blank:nF {#4}%destination
            {
              \int_case:nnF {\Hy@linktoc}
                {
                  {0}{} %none
                  {1}{\hyper@linkstart{link}{#4}} %section
                  {2}{} %page
                }
                {\hyper@linkstart{link}{#4}} %all
            }
          }
      }
    \AddToHookWithArguments{contentsline/text/after}[hyp]
      {
        \tl_if_blank:nF {#2}
         {
           \tl_if_blank:nF {#4}
             {
               \int_case:nnF {\Hy@linktoc}
                 {
                   {0}{} %none
                   {1}{\hyper@linkend} %section
                   {2}{} %page
                 }
                 {\hyper@linkend} %all
             } % none
           }
       }

    \AddToHookWithArguments{contentsline/page/before}[hyp]
      {
        \tl_if_blank:nF {#3}
         {
           \tl_if_blank:nF {#4} %
             {
               \int_case:nnF {\Hy@linktoc}
                 {
                   {0}{} %none
                   {1}{} %section
                   {2}{\hyper@linkstart{link}{#4}} %page
                 }
                 {\hyper@linkstart{link}{#4}} %all
             } % none
           }
       }
   \AddToHookWithArguments{contentsline/page/after}[hyp]
      {
        \tl_if_blank:nF {#3}
         {
           \tl_if_blank:nF {#4}
             {
               \int_case:nnF {\Hy@linktoc}
                 {
                   {0}{} %none
                   {1}{} %section
                   {2}{\hyper@linkend} %page
                 }
                 {\hyper@linkend} %all
             } % none
           }
       }  
%    \end{macrocode}
% Until the latex-lab file is cleaned up, we need to remove the hook code
%    \begin{macrocode}
  \AddToHook{package/hyperref/after}[latex-lab-testphase-toc]{}
  \RemoveFromHook{package/hyperref/after}[latex-lab-testphase-toc]
 }
\ExplSyntaxOff
%    \end{macrocode}
%    \begin{macrocode}
%</packageEnd>
%<*check>
\checklatex
\checkcommand\def\addcontentsline#1#2#3{%
  \addtocontents{#1}{\protect\contentsline{#2}{#3}{\thepage}}%
}
\checkcommand\def\contentsline#1{\csname l@#1\endcsname}
%</check>
%<*packageEnd>
%    \end{macrocode}
%
% \section{New counters}\label{counters}
% The whole theorem business makes up new counters on the fly;
% we are going to intercept this. Sigh. Do it at the level where
% new counters are defined.
% change 2024-02-14: use a csname to handle counter names with commands,
% see issue \#330
% change 2024-10-13: disable patches in new format 2024-11-01.
% change 2026-02-22: removed patches fully.
%
% \section{AMS\LaTeX\ compatibility}\label{ams}
% Oh, no, they don't use anything as simple as |\refstepcounter|
% in the AMS! We need to intercept some low-level operations
% of theirs. Damned if we are going to try and work out what
% they get up to. Just stick a label of `AMS' on the front, and use the
% label \emph{they} worked out. If that produces something invalid, I give
% up. They'll change all the code again anyway, I expect (SR).
%
% Version 6.77p uses a patch by Ross Moore.
%
% If |\hyper@nopatch@amsmath@tag| is defined we don't patch but assume
% that kernel code adds anchors to equations.
% change 2023-06-14: use a hook to make it independent of loading order.
%    \begin{macrocode}
\@ifundefined{hyper@nopatch@amsmath@tag}
   {%
    \AddToHook{package/amsmath/after}{%
      \def\Hy@make@anchor{%
        \Hy@MakeCurrentHrefAuto{AMS}%
        \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
      }%
      \def\Hy@make@df@tag@@#1{%
        \gdef\df@tag{%
          \maketag@@@{\Hy@make@anchor#1}%
          \def\@currentlabel{#1}%
        }%
      }%
      \def\Hy@make@df@tag@@@#1{%
        \gdef\df@tag{%
          \tagform@{\Hy@make@anchor#1}%
          \toks@\@xp{\p@equation{#1}}%
          \edef\@currentlabel{\the\toks@}%
        }%
      }%
      \let\HyOrg@make@df@tag@@\make@df@tag@@
      \let\HyOrg@make@df@tag@@@\make@df@tag@@@
      \let\make@df@tag@@\Hy@make@df@tag@@
      \let\make@df@tag@@@\Hy@make@df@tag@@@
    }{}
  }{}
%    \end{macrocode}
% This code I simply cannot remember what I was trying to achieve.
% The final result seems to do nothing anyway.
%\begin{verbatim}
%\let\H@tagform@\tagform@
%\def\tagform@#1{%
%  \maketag@@@{\hyper@@anchor{\@currentHref}%
%  {(\ignorespaces#1\unskip)}}%
%}
%\def\eqref#1{\textup{\H@tagform@{\ref{#1}}}}
%\end{verbatim}
%
% \subsection{\texorpdfstring{\cs{@addtoreset}}{\\@addtoreset} and
%             \texorpdfstring{\cs{numberwithin}}{\\numberwithin} patches}
%
%    \cs{@addtoreset} puts a counter to the reset list of
%    another counter. After a reset the counter starts
%    again with perhaps already used values. Therefore
%    the hyperref version of the counter print command
%    \cs{theHcounter} is redefined in order to add the
%    parent counter.
% change 2024-07-10: define |\HyOrg@addtoreset| always for cleveref
% compability with tagging code, see https://github.com/latex3/tagging-project/issues/2
%    \begin{macrocode}
\def\HyOrg@addtoreset#1#2{\expandafter\@cons\csname cl@#2\endcsname {{#1}}}
\@ifundefined{hyper@nopatch@counter}
  {
   \let\HyOrg@addtoreset\@addtoreset
   \def\@addtoreset#1#2{%
     \HyOrg@addtoreset{#1}{#2}%
     \expandafter\xdef\csname theH#1\endcsname{%
       \expandafter\noexpand
           \csname the\@ifundefined{theH#2}{}H#2\endcsname
       .\noexpand\the\noexpand\value{#1}%
     }%
   }
  }{}
%    \end{macrocode}
%
%    \begin{macro}{\numberwithin}
%    A appropriate definition of hyperref's companion counter
%    (\cmd{\theH...}) is added for correct link names.
%    \begin{macrocode}
%</packageEnd>
%<*check>
\checkpackage{amsmath}[1999/12/14 - 2000/06/06]
\checkcommand\newcommand{\numberwithin}[3][\arabic]{%
  \@ifundefined{c@#2}{\@nocounterr{#2}}{%
    \@ifundefined{c@#3}{\@nocnterr{#3}}{%
      \@addtoreset{#2}{#3}%
      \@xp\xdef\csname the#2\endcsname{%
        \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}%
      }%
    }%
  }%
}%
%</check>
%    \end{macrocode}
% change 2023-06-14: use hook to make independent of loading order
%    \begin{macrocode}
%<*packageEnd>
\@ifundefined{hyper@nopatch@counter}
  {
   \AddToHook{package/amsmath/after}{%
     \renewcommand*{\numberwithin}[3][\arabic]{%
       \@ifundefined{c@#2}{\@nocounterr{#2}}{%
         \@ifundefined{c@#3}{\@nocnterr{#3}}{%
           \HyOrg@addtoreset{#2}{#3}%
           \@xp\xdef\csname the#2\endcsname{%
             \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}%
           }%
           \@xp\xdef\csname theH#2\endcsname{%
             \@xp\@nx
             \csname the\@ifundefined{theH#3}{}H#3\endcsname
             .\@nx#1{#2}%
           }%
         }%
       }%
     }%
   }{}
  }{}
%    \end{macrocode}
%    \end{macro}
%
% \section{Included figures}
% Simply intercept the low level graphics package macro.
%    \begin{macrocode}
\ifHy@hyperfigures
  \let\Hy@Gin@setfile\Gin@setfile
  \def\Gin@setfile#1#2#3{%
    \hyperimage{#3}{\Hy@Gin@setfile{#1}{#2}{#3}}%
  }%
\fi
\Hy@DisableOption{hyperfigures}
%    \end{macrocode}
%
% \section{hyperindex entries}\label{hyperindex}
% Internal command names are prefixed with \cmd{\HyInd@}.
%
% Hyper-indexing works crudely, by forcing code onto the end of the index
% entry with the \verb+|+ feature; this puts a hyperlink around
% the printed page numbers. It will not proceed if the author has already
% used the \verb+|+ specifier for something like emboldening entries.
% That would make Makeindex fail (cannot have two \verb+|+ specifiers).
% The solution is for the author to use generic coding, and put in
% the requisite |\hyperpage| in his/her own macros along with the boldness.
%
% This section is poor stuff; it's open to all sorts of abuse. Sensible
% large projects will design their own indexing macros any bypass this.
%    \begin{macrocode}
\ifHy@hyperindex
  \def\HyInd@ParenLeft{(}%
  \def\HyInd@ParenRight{)}%
  \def\hyperxindexformat#1#2{%
    \let\HyOrg@hyperpage\hyperpage
    \let\hyperpage\@firstofone
    #1{\HyOrg@hyperpage{#2}}%
    \let\hyperpage\HyOrg@hyperpage
  }%
%    \end{macrocode}
% keep the old name for compability.
%    \begin{macrocode}
  \let\hyperindexformat\hyperxindexformat
  \Hy@nextfalse
  \@ifpackageloaded{multind}{\Hy@nexttrue}{}%
  \@ifpackageloaded{index}{\Hy@nexttrue}{}%
  \@ifpackageloaded{amsmidx}{\Hy@nexttrue}{}%
  \begingroup
    \lccode`\|=\expandafter`\HyInd@EncapChar\relax
    \lccode`\/=`\\\relax
  \lowercase{\endgroup
    \ifHy@next
      \let\HyInd@org@wrindex\@wrindex
      \def\@wrindex#1#2{\HyInd@@wrindex{#1}#2||\\}%
      \def\HyInd@@wrindex#1#2|#3|#4\\{%
        \ifx\\#3\\%
          \HyInd@org@wrindex{#1}{#2|hyperpage}%
        \else
          \HyInd@@@wrindex{#1}{#2}#3\\%
        \fi
      }%
      \def\HyInd@@@wrindex#1#2#3#4\\{%
        \def\Hy@temp@A{#3}%
        \ifcase0\ifx\Hy@temp@A\HyInd@ParenLeft 1\fi
                \ifx\Hy@temp@A\HyInd@ParenRight 1\fi
                \relax
          \HyInd@org@wrindex{#1}{%
            #2|hyperxindexformat{/#3#4}%
          }%
        \else
          \ifx\\#4\\%
            \ifx\Hy@temp@A\HyInd@ParenRight
              \HyInd@org@wrindex{#1}{#2|#3}%
            \else
              \HyInd@org@wrindex{#1}{#2|#3hyperpage}%
            \fi
          \else
            \HyInd@org@wrindex{#1}{%
              #2|#3hyperxindexformat{/#4}%
            }%
          \fi
        \fi
      }%
    \else
      \def\@wrindex#1{\@@wrindex#1||\\}%
      \def\@@wrindex#1|#2|#3\\{%
        \if@filesw
          \ifx\\#2\\%
            \protected@write\@indexfile{}{%
              \string\indexentry{#1|hyperpage}{\thepage}%
            }%
          \else
            \HyInd@@@wrindex{#1}#2\\%
          \fi
        \fi
        \endgroup
        \@esphack
      }%
      \def\HyInd@@@wrindex#1#2#3\\{%
        \def\Hy@temp@A{#2}%
        \ifcase0\ifx\Hy@temp@A\HyInd@ParenLeft 1\fi
                \ifx\Hy@temp@A\HyInd@ParenRight 1\fi
                \relax
          \protected@write\@indexfile{}{%
            \string\indexentry{%
              #1|hyperxindexformat{/#2#3}%
            }{\thepage}%
          }%
        \else
          \ifx\\#3\\%
            \ifx\Hy@temp@A\HyInd@ParenRight
              \HyInd@DefKey{#1}%
              \@ifundefined{HyInd@(\HyInd@key)}{%
                \let\Hy@temp\@empty
              }{%
                \expandafter\let\expandafter\Hy@temp
                \csname HyInd@(\HyInd@key)\endcsname
              }%
              \protected@write\@indexfile{}{%
                 \string\indexentry{#1|#2\Hy@temp}{\thepage}%
              }%
            \else
              \protected@write\@indexfile{}{%
                 \string\indexentry{#1|#2hyperpage}{\thepage}%
              }%
              \HyInd@DefKey{#1}%
              \expandafter
              \gdef\csname HyInd@(\HyInd@key)\endcsname{%
                hyperpage%
              }%
            \fi
          \else
            \protected@write\@indexfile{}{%
               \string\indexentry{%
                 #1|#2hyperxindexformat{/#3}%
               }{\thepage}%
            }%
            \ifx\Hy@temp@A\HyInd@ParenLeft
              \HyInd@DefKey{#1}%
              \expandafter
              \gdef\csname HyInd@(\HyInd@key)\endcsname{%
                hyperxindexformat{/#3}%
              }%
            \fi
          \fi
        \fi
      }%
      \def\HyInd@DefKey#1{%
        \begingroup
          \let\protect\@unexpandable@protect
          \edef\Hy@temp{#1}%
          \@onelevel@sanitize\Hy@temp
          \global\let\HyInd@key\Hy@temp
        \endgroup
      }%
    \fi
  }%
\fi
\Hy@DisableOption{hyperindex}
\Hy@DisableOption{encap}
%    \end{macrocode}
%
%    \begin{macro}{\nohyperpage}
%    The definition of \cs{nohyperpage} is just a precaution.
%    It is used to mark code that does not belong to a page
%    number, but \cs{nohyperpage} is never executed.
%    \begin{macrocode}
\def\nohyperpage#1{#1}
%    \end{macrocode}
%    \end{macro}
% This again is quite flaky, but allow for the common situation of a
% page range separated by en-rule. We split this into two different
% hyperlinked pages.
%    \begin{macrocode}
\def\hyperpage#1{%
  \HyInd@hyperpage#1\nohyperpage{}\@nil
}
\def\HyInd@hyperpage#1\nohyperpage#2#3\@nil{%
  \HyInd@@hyperpage{#1}%
  #2%
  \def\Hy@temp{#3}%
  \ifx\Hy@temp\@empty
  \else
    \Hy@ReturnAfterFi{%
      \HyInd@hyperpage#3\@nil
    }%
  \fi
}
\def\HyInd@@hyperpage#1{\@hyperpage#1----\\}
\def\@hyperpage#1--#2--#3\\{%
  \ifx\\#2\\%
    \@commahyperpage{#1}%
  \else
    \HyInd@pagelink{#1}--\HyInd@pagelink{#2}%
  \fi
}
\def\@commahyperpage#1{\@@commahyperpage#1, ,\\}
\def\@@commahyperpage#1, #2,#3\\{%
  \ifx\\#2\\%
    \HyInd@pagelink{#1}%
  \else
    \HyInd@pagelink{#1}, \HyInd@pagelink{#2}%
  \fi
}
%    \end{macrocode}
%
%    The argument of \cmd{\hyperpage} can be empty. And the
%    line breaking algorithm of Makeindex can introduce spaces.
%    So we have to remove them.
%    \begin{macrocode}
\def\HyInd@pagelink#1{%
  \begingroup
    \toks@={}%
    \HyInd@removespaces#1 \@nil
  \endgroup
}
\def\HyInd@removespaces#1 #2\@nil{%
  \toks@=\expandafter{\the\toks@#1}%
  \ifx\\#2\\%
    \edef\x{\the\toks@}%
    \ifx\x\@empty
    \else
      \hyperlink{page.\the\toks@}{\the\toks@}%
    \fi
  \else
    \Hy@ReturnAfterFi{%
      \HyInd@removespaces#2\@nil
    }%
  \fi
}
%    \end{macrocode}
%
% This breaks TeX4ht, so leave it to last.
% Emend |\@setref| to put out a hypertext link as well as its
% normal text (which is used as an anchor).
% (|\endinput| have to be on the same line like |\fi|, or you
% have to use |\expandafter| before.)
%
% change 2022-11-13: added an |\@empty| for issue\#261.
%    \begin{macrocode}
\ifHy@texht
  \expandafter\endinput
\fi
\let\real@setref\@setref
\def\@setref#1#2#3{% csname, extract group, refname
  \ifx#1\relax
    \protect\G@refundefinedtrue
    \nfss@text{\reset@font\bfseries ??}%
    \@latex@warning{%
      Reference `#3' on page \thepage \space undefined%
    }%
  \else
    \expandafter\Hy@setref@link#1\@empty\@empty\@empty\@nil{#2}%
  \fi
}
%    \end{macrocode}
%    \cmd{\Hy@setref@link} extracts the reference information entries,
%    because \cmd{\hyper@@link} does not expand arguments for the
%    automatic link type detection.
%    \begin{macrocode}
\def\Hy@setref@link#1#2#3#4#5#6\@nil#7{%
  \begingroup
    \toks0={\hyper@@link{#5}{#4}}%
    \toks1=\expandafter{#7{#1}{#2}{#3}{#4}{#5}}%
    \edef\x{\endgroup
      \the\toks0 {\the\toks1 }%
    }%
  \x
}
\def\@pagesetref#1#2#3{% csname, extract macro, ref
  \ifx#1\relax
    \protect\G@refundefinedtrue
    \nfss@text{\reset@font\bfseries ??}%
    \@latex@warning{%
      Reference `#3' on page \thepage \space undefined%
    }%
  \else
    \protect\hyper@@link
      {\expandafter\@fifthoffive#1}%
      {page.\expandafter\@secondoffive#1}%
      {\expandafter\@secondoffive#1}%
  \fi
}
%    \end{macrocode}
%
%    \begin{macrocode}
%</packageEnd>
%<*check>
\checklatex
\checkcommand\def\@setref#1#2#3{%
  \ifx#1\relax
    \protect\G@refundefinedtrue
    \nfss@text{\reset@font\bfseries ??}%
    \@latex@warning{%
      Reference `#3' on page \thepage\space undefined%
    }%
  \else
    \expandafter#2#1\null
  \fi
}
%</check>
%<*packageEnd>
%    \end{macrocode}
%
% Now some extended referencing. |\ref*| and |\pageref*| are not linked,
% and |\autoref| prefixes with a tag based on the type.
%    \begin{macrocode}
\def\HyRef@StarSetRef#1{%
  \begingroup
    \Hy@safe@activestrue
    \let\protect\@unexpandable@protect
    \edef\x{#1}%
    \@onelevel@sanitize\x
    \edef\x{\endgroup
      \noexpand\HyRef@@StarSetRef
        \expandafter\noexpand\csname r@\x\endcsname{\x}%
    }%
  \x
}
\def\HyRef@@StarSetRef#1#2#3{%
  \ifx#1\@undefined
    \let#1\relax
  \fi
  \real@setref#1#3{#2}%
}
\def\@refstar#1{%
  \HyRef@StarSetRef{#1}\@firstoffive
}
\def\@pagerefstar#1{%
  \HyRef@StarSetRef{#1}\@secondoffive
}
\def\@namerefstar#1{%
  \HyRef@StarSetRef{#1}\@thirdoffive
}
\def\@Refstar#1{%
  \HyRef@StarSetRef{#1}\HyRef@MakeUppercaseFirstOfFive
}%
\def\HyRef@MakeUppercaseFirstOfFive#1#2#3#4#5{%
  \MakeUppercase#1%
}%
\def\HyRef@Ref#1{%
  \hyperref[{#1}]{\Ref*{#1}}%
}%
\Hy@AtBeginDocument{%
  \@ifpackageloaded{varioref}{%
%    \end{macrocode}
%    This are the patches for a varioref newer after 2019-09
%    Older versions are no longer supported.
%    If |\hyper@nopatch@varioref| is defined we don't patch but assume
%    that varioref handles the hyperlinks.
%    \begin{macrocode}
  \@ifundefined{hyper@nopatch@varioref}
   {
   \renewcommand\Vref@star[2][]{%
     \begingroup
       \let\T@pageref\@pagerefstar
       \Ref*{#2}
       \vpageref[#1]{#2}%
     \endgroup
   }%
   \renewcommand\Vr@f[2][]{%
     \begingroup
       \let\T@pageref\@pagerefstar
       \hyperref[{#2}]{%
         \Ref*{#2}
         \vpageref[#1]{#2}%
       }%
     \endgroup
   }%
    \renewcommand\vr@f[2][]{%
      \begingroup
        \let\T@pageref\@pagerefstar
        \hyperref[{#2}]{%
          \ref*{#2}
          \vpageref[#1]{#2}%
        }%
       \endgroup
    }%
    \renewcommand\vref@star[2][]{%
      \begingroup
        \let\T@pageref\@pagerefstar
        \ref*{#2}
        \vpageref[#1]{#2}%
       \endgroup
    }%
   }{}%
  }{}%
}
%    \end{macrocode}
%    \begin{macrocode}
\DeclareRobustCommand*{\autopageref}{%
  \@ifstar{%
    \HyRef@autopagerefname\pageref*%
  }\HyRef@autopageref
}
\def\HyRef@autopageref#1{%
  \hyperref[{#1}]{\HyRef@autopagerefname\pageref*{#1}}%
}
\def\HyRef@autopagerefname{%
  \@ifundefined{pageautorefname}{%
    \@ifundefined{pagename}{%
      \Hy@Warning{No autoref name for `page'}%
    }{%
      \pagename\nobreakspace
    }%
  }{%
    \pageautorefname\nobreakspace
  }%
}
%    \end{macrocode}
%    \cs{leavevmode} is added to make package wrapfigure happy, if
%    \cs{autoref} starts a paragraph.
%    \begin{macrocode}
\NewDocumentCommand\autoref{s}
   {\leavevmode
    \IfBooleanTF{#1}{\HyRef@autoref\@gobbletwo}{\HyRef@autoref\hyper@@link}}
\def\HyRef@autoref#1#2{%
  \begingroup
    \Hy@safe@activestrue
    \expandafter\HyRef@autosetref\csname r@#2\endcsname{#2}{#1}%
  \endgroup
}
\def\HyRef@autosetref#1#2#3{% link command, csname, refname
  \HyRef@ShowKeysRef{#2}%
  \ifcase 0\ifx#1\relax 1\fi\ifx#1\Hy@varioref@undefined 1\fi\relax
    \edef\HyRef@thisref{%
      \expandafter\@fourthoffive#1\@empty\@empty\@empty
    }%
    \expandafter\HyRef@testreftype\HyRef@thisref.\\%
    \Hy@safe@activesfalse
    #3{%
      \expandafter\@fifthoffive#1\@empty\@empty\@empty
    }{%
      \expandafter\@fourthoffive#1\@empty\@empty\@empty
    }{%
      \HyRef@currentHtag
      \expandafter\@firstoffive#1\@empty\@empty\@empty
      \null
    }%
  \else
    \protect\G@refundefinedtrue
    \nfss@text{\reset@font\bfseries ??}%
    \@latex@warning{%
      Reference `#2' on page \thepage\space undefined%
    }%
  \fi
}
\def\HyRef@testreftype#1.#2\\{%
  \@ifundefined{#1autorefname}{%
    \@ifundefined{#1name}{%
      \HyRef@StripStar#1\\*\\\@nil{#1}%
      \@ifundefined{\HyRef@name autorefname}{%
        \@ifundefined{\HyRef@name name}{%
          \def\HyRef@currentHtag{}%
          \Hy@Warning{No autoref name for `#1'}%
        }{%
          \edef\HyRef@currentHtag{%
            \expandafter\noexpand\csname\HyRef@name name\endcsname
            \noexpand~%
          }%
        }%
      }{%
        \edef\HyRef@currentHtag{%
          \expandafter\noexpand
          \csname\HyRef@name autorefname\endcsname
          \noexpand~%
        }%
      }%
    }{%
      \edef\HyRef@currentHtag{%
        \expandafter\noexpand\csname#1name\endcsname
        \noexpand~%
      }%
    }%
  }{%
    \edef\HyRef@currentHtag{%
      \expandafter\noexpand\csname#1autorefname\endcsname
      \noexpand~%
    }%
  }%
}
\def\HyRef@StripStar#1*\\#2\@nil#3{%
  \def\HyRef@name{#2}%
  \ifx\HyRef@name\HyRef@CaseStar
    \def\HyRef@name{#1}%
  \else
    \def\HyRef@name{#3}%
  \fi
}
\def\HyRef@CaseStar{*\\}
\def\HyRef@currentHtag{}
%    \end{macrocode}
%
%    Support for package |showkeys|.
%    \begin{macro}{\HyRef@ShowKeysRef}
%    \begin{macrocode}
\let\HyRef@ShowKeysRef\@gobble
\def\HyRef@ShowKeysInit{%
  \@ifundefined{SK@@label}{}
   {%
    \ifx\SK@ref\@empty
    \else
      \def\HyRef@ShowKeysRef{%
        \SK@\SK@@ref
      }%
    \fi
   }%
}
\AddToHook{package/showkeys/after}{\HyRef@ShowKeysInit}
%    \end{macrocode}
%    \end{macro}
%
%    Defaults for the names that \cmd{\autoref} uses.
%    \begin{macrocode}
\providecommand*\AMSautorefname{\equationautorefname}
\providecommand*\Hfootnoteautorefname{\footnoteautorefname}
\providecommand*\Itemautorefname{\itemautorefname}
\providecommand*\itemautorefname{item}
\providecommand*\equationautorefname{Equation}
\providecommand*\footnoteautorefname{footnote}
\providecommand*\itemautorefname{item}
\providecommand*\figureautorefname{Figure}
\providecommand*\tableautorefname{Table}
\providecommand*\partautorefname{Part}
\providecommand*\appendixautorefname{Appendix}
\providecommand*\chapterautorefname{chapter}
\providecommand*\sectionautorefname{section}
\providecommand*\subsectionautorefname{subsection}
\providecommand*\subsubsectionautorefname{subsubsection}
\providecommand*\paragraphautorefname{paragraph}
\providecommand*\subparagraphautorefname{subparagraph}
\providecommand*\FancyVerbLineautorefname{line}
\providecommand*\theoremautorefname{Theorem}
\providecommand*\pageautorefname{page}
%    \end{macrocode}
%
%    \begin{macrocode}
%</packageEnd>
%    \end{macrocode}
%
% \section{Configuration files}
%
% \subsection{PS/PDF strings}
%
%    Some drivers write PS or PDF strings. These strings are delimited
%    by parentheses, therefore a lonely unmatched parenthesis must be
%    avoided to avoid PS or PDF syntax errors. Also the backslash character
%    itself has to be protected.
%
%    \begin{macro}{\Hy@pstringdef}
%    Therefore such strings should be passed through |\Hy@pstringdef|.
%    The first argument holds a macro for the result, the second
%    argument is the string that needs protecting.
%    Since version 1.30.0 pdf\TeX\ offers \cs{pdfescapestring}.
%    \begin{macrocode}
%<*pdftex|dvipdfm|xetex|vtex|pdfmarkbase|dviwindo>
\begingroup\expandafter\expandafter\expandafter\endgroup
\expandafter\ifx\csname pdf@escapestring\endcsname\relax
  \begingroup
    \catcode`\|=0 %
    \@makeother\\%
  |@firstofone{|endgroup
    |def|Hy@pstringdef#1#2{%
      |begingroup
        |edef~{|string~}%
        |xdef|Hy@gtemp{#2}%
      |endgroup
      |let#1|Hy@gtemp
      |@onelevel@sanitize#1%
      |edef#1{|expandafter|Hy@ExchangeBackslash#1\|@nil}%
      |edef#1{|expandafter|Hy@ExchangeLeftParenthesis#1(|@nil}%
      |edef#1{|expandafter|Hy@ExchangeRightParenthesis#1)|@nil}%
    }%
    |def|Hy@ExchangeBackslash#1\#2|@nil{%
      #1%
      |ifx|\#2|\%%
      |else
        \\%
        |Hy@ReturnAfterFi{%
          |Hy@ExchangeBackslash#2|@nil
        }%
      |fi
    }%
  }%
  \def\Hy@ExchangeLeftParenthesis#1(#2\@nil{%
    #1%
    \ifx\\#2\\%
    \else
      \@backslashchar(%
      \Hy@ReturnAfterFi{%
        \Hy@ExchangeLeftParenthesis#2\@nil
      }%
    \fi
  }%
  \def\Hy@ExchangeRightParenthesis#1)#2\@nil{%
    #1%
    \ifx\\#2\\%
    \else
      \@backslashchar)%
      \Hy@ReturnAfterFi{%
        \Hy@ExchangeRightParenthesis#2\@nil
      }%
    \fi
  }%
\else
  \def\Hy@pstringdef#1#2{%
    \begingroup
      \edef~{\string~}%
      \xdef\Hy@gtemp{\pdf@escapestring{#2}}%
    \endgroup
    \let#1\Hy@gtemp
  }%
\fi
%</pdftex|dvipdfm|xetex|vtex|pdfmarkbase|dviwindo>
%    \end{macrocode}
%    \end{macro}
%
% \subsection{pdftex}
%
%    \begin{macrocode}
%<*pdftex>
\providecommand*{\XR@ext}{pdf}
\Hy@setbreaklinks{true}
\def\HyPat@ObjRef{%
  [0-9]*[1-9][0-9]* 0 R%
}
%    \end{macrocode}
% This driver is for Han The Thanh's \TeX{} variant
% which produces PDF directly. This has new primitives
% to do PDF things, which usually translate almost directly to
% PDF code, so there is a lot of flexibility which we do not at
% present harness.
%
%    Set PDF version if requested by option \textsf{pdfversion}.
%    \begin{itemize}
%    \item pdf\TeX\ 1.10a, 2003-01-16: \cs{pdfoptionpdfminorversion}
%    \item pdf\TeX\ 1.30, 2005-08-081: \cs{pdfminorversion}
%    \end{itemize}
%    \begin{macrocode}
\def\Hy@pdfminorversion{\pdfoptionpdfminorversion}%
\def\Hy@pdfminorversion{\pdfminorversion}%
\ifHy@ocgcolorlinks
  \ifnum\Hy@pdfmajorminor@version<105 %
    \kvsetkeys{Hyp}{pdfversion=1.5}%
  \fi
\fi
\ifHy@setpdfversion
  \ifnum\Hy@pdf@majorminor@version<105 %
    \@ifundefined{pdfobjcompresslevel}{%
    }{%
      \ifHy@verbose
        \Hy@InfoNoLine{%
          PDF object streams are disabled, because they are%
          \MessageBreak
          not supported in requested PDF version %
          \Hy@pdf@majorversion.\Hy@pdf@minorversion
        }%
      \fi
      \pdfobjcompresslevel=\z@
    }%
  \fi
  \ifnum\Hy@pdfmajorminor@version=\Hy@pdf@majorminor@version\relax
  \else
    \let\Hy@temp\@empty
    \def\Hy@temp@A#1#2{%
      \ifnum#1>\z@
        \edef\Hy@temp{%
          \Hy@temp
          \space\space
          \the#1\space #2%
          \ifnum#1=\@ne\else s\fi
          \MessageBreak
        }%
      \fi
    }%
    \Hy@temp@A\pdflastobj{PDF object}%
    \Hy@temp@A\pdflastxform{form XObject}%
    \Hy@temp@A\pdflastximage{image XObject}%
    \Hy@temp@A\pdflastannot{annotation}%
    \@ifundefined{pdflastlink}{%
    }{%
       \Hy@temp@A\pdflastlink{link}%
    }%
    \ifx\Hy@temp\@empty
      \Hy@pdfmajorversion=\Hy@pdf@majorversion\relax
      \Hy@pdfminorversion=\Hy@pdf@minorversion\relax
    \else
      \let\Hy@temp@A\@empty
      \ifnum\Hy@pdf@majorminor@version=104 %
        \IfFileExists{pdf14.sty}{%
          \def\Hy@temp@A{%
            \MessageBreak
            Or \string\RequirePackage{pdf14} can be used%
            \MessageBreak
            before \string\documentclass\space as shortcut%
          }%
        }{}%
      \fi
      \Hy@WarningNoLine{%
        The PDF version number could not be set,\MessageBreak
        because some PDF objects are already written:%
        \MessageBreak
        \Hy@temp
        The version should be set as early as possible:%
        \MessageBreak
        \space\space
        \expandafter\string\Hy@pdfmajorversion=\Hy@pdf@majorversion, %
        \expandafter\string\Hy@pdfminorversion=\Hy@pdf@minorversion
        \string\relax
        \ifnum\Hy@pdf@majorminor@version<105 %
          \@ifundefined{pdfobjcompresslevel}{%
          }{%
            \MessageBreak
            \space\space
            \string\pdfobjcompresslevel=0\string\relax
          }%
        \fi
        \Hy@temp@A
      }%
    \fi
  \fi
  \PackageInfo{hyperref}{%
    \expandafter\string\Hy@pdfmajorversion.%
    \expandafter\string\Hy@pdfminorversion
    :=\number\Hy@pdf@majorversion.\number\Hy@pdf@minorversion\space
  }%
\fi
\edef\Hy@pdf@majorversion{\number\Hy@pdfmajorversion}%
\edef\Hy@pdf@minorversion{\number\Hy@pdfminorversion}%
\Hy@DisableOption{pdfversion}%
%    \end{macrocode}
%
%    \begin{macrocode}
\ifHy@ocgcolorlinks
  \pdf@ifdraftmode{}{%
    \immediate\pdfobj{%
      <<%
        /Type/OCG%
        /Name(View)%
        /Usage<<%
          /Print<<%
            /PrintState/OFF%
          >>%
          /View<<%
            /ViewState/ON%
          >>%
        >>%
      >>%
    }%
    \edef\OBJ@OCG@view{\the\pdflastobj\space 0 R}%
    \immediate\pdfobj{%
      <<%
        /Type/OCG%
        /Name(Print)%
        /Usage<<%
          /Print<<%
            /PrintState/ON%
          >>%
          /View<<%
            /ViewState/OFF%
          >>%
        >>%
      >>%
    }%
    \edef\OBJ@OCG@print{\the\pdflastobj\space 0 R}%
    \immediate\pdfobj{%
      [%
        \OBJ@OCG@view\space\OBJ@OCG@print
      ]%
    }%
    \edef\OBJ@OCGs{\the\pdflastobj\space 0 R}%
    \pdfcatalog{%
      /OCProperties<<%
        /OCGs \OBJ@OCGs
        /D<<%
          /OFF[\OBJ@OCG@print]%
          /AS[%
            <<%
              /Event/View%
              /OCGs \OBJ@OCGs
              /Category[/View]%
            >>%
            <<%
              /Event/Print%
              /OCGs \OBJ@OCGs
              /Category[/Print]%
            >>%
            <<%
              /Event/Export%
              /OCGs \OBJ@OCGs
              /Category[/Print]%
            >>%
          ]%
        >>%
      >>%
    }%
    \begingroup
      \edef\x{\endgroup
        \pdfpageresources{%
          \the\pdfpageresources
          /Properties<<%
            /OCView \OBJ@OCG@view
            /OCPrint \OBJ@OCG@print
          >>%
        }%
      }%
    \x
  }%
  \Hy@AtBeginDocument{%
    \def\Hy@colorlink#1{%
      \begingroup
        \ifHy@ocgcolorlinks
          \def\Hy@ocgcolor{#1}%
          \setbox0=\hbox\bgroup\color@begingroup
        \else
          \HyColor@UseColor#1%
        \fi
    }%
    \def\Hy@endcolorlink{%
      \ifHy@ocgcolorlinks
        \color@endgroup\egroup
        \mbox{%
          \pdfliteral page{/OC/OCPrint BDC}%
          \rlap{\copy0}%
          \pdfliteral page{EMC/OC/OCView BDC}%
          \begingroup
            \expandafter\HyColor@UseColor\Hy@ocgcolor
            \box0 %
          \endgroup
          \pdfliteral page{EMC}%
        }%
      \fi
      \endgroup
    }%
  }%
\else
  \Hy@DisableOption{ocgcolorlinks}%
\fi
%    \end{macrocode}
%
% First, allow for some changes and additions to pdftex  syntax:
%    \begin{macrocode}
\def\setpdflinkmargin#1{%
  \begingroup
    \setlength{\dimen@}{#1}%
  \expandafter\endgroup
  \expandafter\pdflinkmargin\the\dimen@\relax
}
\pdflinkmargin1pt %
%    \end{macrocode}
% First set up the default linking
%    \begin{macrocode}
\providecommand*\@pdfview{XYZ}
%    \end{macrocode}
% First define the anchors:
%    \begin{macrocode}
\Hy@WrapperDef\new@pdflink#1{%
  \ifhmode
    \@savsf\spacefactor
  \fi
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
  \Hy@DestName\Hy@pstringDest\@pdfview
  \Hy@RestoreLastskip
  \ifhmode
    \spacefactor\@savsf
  \fi
}
\let\pdf@endanchor\@empty
%    \end{macrocode}
%    \begin{macro}{\Hy@DestName}
%    Wrap the call of \verb|\pdfdest name| in \cs{Hy@DestName}.
%    Then it can easier be caught by package |hypdestopt|.
%    \begin{macrocode}
\def\Hy@DestName#1#2{%
  \pdfdest name{#1}#2\relax
}
%    \end{macrocode}
%    \end{macro}
%
% Now the links; the interesting part here is the set of attributes
% which define how the link looks. We probably want to add a border
% and color it, but there are other choices. This directly translates
% to PDF code, so consult the manual for how to change this. We will
% add an interface at some point.
%    \begin{macrocode}
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\def\Hy@undefinedname{UNDEFINED}
\def\find@pdflink#1#2{%
  \leavevmode
  \protected@edef\Hy@testname{#2}%
  \ifx\Hy@testname\@empty
    \Hy@Warning{%
      Empty destination name,\MessageBreak
      using `\Hy@undefinedname'%
    }%
    \let\Hy@testname\Hy@undefinedname
  \else
    \Hy@pstringdef\Hy@testname{%
      \expandafter\HyperDestNameFilter\expandafter{\Hy@testname}%
    }%
  \fi
  \Hy@StartlinkName{%
    \ifHy@pdfa /F 4\fi
    \Hy@setpdfborder
    \Hy@setpdfhighlight
    \ifx\CurrentBorderColor\relax
    \else
      /C[\CurrentBorderColor]%
    \fi
  }\Hy@testname
  \expandafter\Hy@colorlink\csname @#1color\endcsname
}
\def\Hy@StartlinkName#1#2{%
  \pdfstartlink attr{#1}goto name{#2}\relax
}
\def\close@pdflink{%
  \Hy@endcolorlink
  \Hy@VerboseLinkStop
  \pdfendlink
}
\def\hyper@anchor#1{%
  \new@pdflink{#1}\anchor@spot\pdf@endanchor
}
\def\hyper@anchorstart#1{%
  \new@pdflink{#1}%
  \Hy@activeanchortrue
}
\def\hyper@anchorend{%
  \pdf@endanchor
  \Hy@activeanchorfalse
}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \@ifundefined{@#1bordercolor}{%
    \let\CurrentBorderColor\relax
  }{%
    \edef\CurrentBorderColor{\csname @#1bordercolor\endcsname}%
  }%
  \find@pdflink{#1}{#2}%
}
\def\hyper@linkend{\close@pdflink}
\def\hyper@link#1#2#3{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \@ifundefined{@#1bordercolor}{%
    \let\CurrentBorderColor\relax
  }{%
    \edef\CurrentBorderColor{\csname @#1bordercolor\endcsname}%
  }%
  \find@pdflink{#1}{#2}#3\Hy@xspace@end
  \close@pdflink
}
\let\CurrentBorderColor\@linkbordercolor
\def\hyper@linkurl#1#2{%
  \begingroup
    \Hy@pstringdef\Hy@pstringURI{#2}%
    \hyper@chars
    \leavevmode
    \pdfstartlink
      attr{%
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \ifx\@urlbordercolor\relax
        \else
          /C[\@urlbordercolor]%
        \fi
      }%
      user{%
       /Subtype/Link%
       \ifHy@pdfa /F 4\fi
       /A<<%
         /Type/Action%
         /S/URI%
         /URI(\Hy@pstringURI)%
         \ifHy@href@ismap
           /IsMap true%
         \fi
         \Hy@href@nextactionraw
       >>%
      }%
      \relax
    \Hy@colorlink\@urlcolor#1\Hy@xspace@end
    \close@pdflink
  \endgroup
}
\def\hyper@linkfile#1#2#3{% anchor text, filename, linkname
  \begingroup
    \def\Hy@pstringF{#2}%
    \Hy@CleanupFile\Hy@pstringF
    \Hy@pstringdef\Hy@pstringF\Hy@pstringF
    \Hy@pstringdef\Hy@pstringD{#3}%
    \Hy@MakeRemoteAction
    \leavevmode
    \pdfstartlink
      attr{%
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \ifx\@filebordercolor\relax
        \else
          /C[\@filebordercolor]%
        \fi
      }%
      user {%
        /Subtype/Link%
        \ifHy@pdfa /F 4\fi
        /A<<%
          /F(\Hy@pstringF)%
          /S/GoToR%
          \Hy@SetNewWindow
%    \end{macrocode}
% If |#3| is empty, page 0; if its a number, Page number, otherwise
% a named destination.
% \begin{verbatim}
% \afterassignment\xxx\count@=0\foo!%
%
%\def\xxx#1!{%
%  \ifx\xxx#1\xxx
%     foo was an integer
%  \else
%     it wasnt
%  \fi}
% \end{verbatim}
%    \begin{macrocode}
          \ifx\\#3\\%
            /D[\Hy@href@page\@pdfremotestartview]%
          \else
            /D(\Hy@pstringD)%
          \fi
          \Hy@href@nextactionraw
        >>%
      }%
      \relax
    \Hy@colorlink\@filecolor#1\Hy@xspace@end
    \close@pdflink
  \endgroup
}
\def\@hyper@launch run:#1\\#2#3{% filename, anchor text linkname
  \begingroup
    \Hy@pstringdef\Hy@pstringF{#1}%
    \Hy@pstringdef\Hy@pstringP{#3}%
    \leavevmode
    \pdfstartlink
      attr{%
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \ifx\@runbordercolor\relax
        \else
          /C[\@runbordercolor]%
        \fi
      }%
      user {%
        /Subtype/Link%
        \ifHy@pdfa /F 4\fi
        /A<<%
          /F(\Hy@pstringF)%
          /S/Launch%
          \Hy@SetNewWindow
          \ifx\\#3\\%
          \else
            /Win<</P(\Hy@pstringP)/F(\Hy@pstringF)>>%
          \fi
          \Hy@href@nextactionraw
        >>%
      }%
      \relax
    \Hy@colorlink\@runcolor#2\Hy@xspace@end
    \close@pdflink
  \endgroup
}
%    \end{macrocode}
%    \begin{macro}{\PDF@SetupDox}
%    \begin{macrocode}
\def\PDF@SetupDoc{%
  \ifx\@pdfpagescrop\@empty
  \else
    \edef\process@me{%
      \pdfpagesattr={%
        /CropBox[\@pdfpagescrop]%
        \expandafter\ifx\expandafter\\\the\pdfpagesattr\\%
        \else
          ^^J\the\pdfpagesattr
        \fi
      }%
    }%
    \process@me
  \fi
  \Hy@pstringdef\Hy@pstringB{\@baseurl}%
  \pdfcatalog{%
    /PageMode/\@pdfpagemode
    \ifx\@baseurl\@empty
    \else
      /URI<</Base(\Hy@pstringB)>>%
    \fi
  }%
  \ifx\@pdfstartpage\@empty
  \else
    \ifx\@pdfstartview\@empty
    \else
      openaction goto page\@pdfstartpage{\@pdfstartview}%
    \fi
  \fi
  \edef\Hy@temp{%
    \ifHy@pdftoolbar\else /HideToolbar true\fi
    \ifHy@pdfmenubar\else /HideMenubar true\fi
    \ifHy@pdfwindowui\else /HideWindowUI true\fi
    \ifHy@pdffitwindow /FitWindow true\fi
    \ifHy@pdfcenterwindow /CenterWindow true\fi
    \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
    \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
    \Hy@UseNameKey{Direction}\@pdfdirection
    \Hy@UseNameKey{ViewArea}\@pdfviewarea
    \Hy@UseNameKey{ViewClip}\@pdfviewclip
    \Hy@UseNameKey{PrintArea}\@pdfprintarea
    \Hy@UseNameKey{PrintClip}\@pdfprintclip
    \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
    \Hy@UseNameKey{Duplex}\@pdfduplex
    \ifx\@pdfpicktraybypdfsize\@empty
    \else
      /PickTrayByPDFSize \@pdfpicktraybypdfsize
    \fi
    \ifx\@pdfprintpagerange\@empty
    \else
      /PrintPageRange[\@pdfprintpagerange]%
    \fi
    \ifx\@pdfnumcopies\@empty
    \else
      /NumCopies \@pdfnumcopies
    \fi
  }%
  \pdfcatalog{%
    \ifx\Hy@temp\@empty
    \else
      /ViewerPreferences<<\Hy@temp>>%
    \fi
    \Hy@UseNameKey{PageLayout}\@pdfpagelayout
    \ifx\@pdflang\relax
    \else
      /Lang(\@pdflang)%
    \fi
  }%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\PDF@FinishDoc}
%    \begin{macrocode}
\def\PDF@FinishDoc{%
  \pdf@ifdraftmode{}{%
    \Hy@UseMaketitleInfos
    \HyInfo@GenerateAddons
    \pdfinfo{%
      /Author(\@pdfauthor)%
      /Title(\@pdftitle)%
      /Subject(\@pdfsubject)%
      /Creator(\@pdfcreator)%
      \ifx\@pdfcreationdate\@empty
      \else
        /CreationDate(\@pdfcreationdate)%
      \fi
      \ifx\@pdfmoddate\@empty
      \else
        /ModDate(\@pdfmoddate)%
      \fi
      \ifx\@pdfproducer\relax
      \else
        /Producer(\@pdfproducer)%
      \fi
      /Keywords(\@pdfkeywords)%
      \ifx\@pdftrapped\@empty
      \else
        /Trapped/\@pdftrapped
      \fi
      \HyInfo@Addons
    }%
  }%
  \Hy@DisableOption{pdfauthor}%
  \Hy@DisableOption{pdftitle}%
  \Hy@DisableOption{pdfsubject}%
  \Hy@DisableOption{pdfcreator}%
  \Hy@DisableOption{addtopdfcreator}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfmoddate}%
  \Hy@DisableOption{pdfproducer}%
  \Hy@DisableOption{pdfkeywords}%
  \Hy@DisableOption{pdftrapped}%
  \Hy@DisableOption{pdfinfo}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\hyper@pagetransition}
%    \cmd{\@pdfpagetransition} is initialized with \cmd{\relax}. So
%    it indicates, if option pdfpagetransition is used. First previous
%    |/Trans| entries are removed. If a new |/Trans| key exists, it is
%    appended to \cmd{\pdfpageattr}.
%    \begin{macrocode}
\def\hyper@pagetransition{%
  \ifx\@pdfpagetransition\relax
  \else
    \expandafter\Hy@RemoveTransPageAttr
    \the\pdfpageattr^^J/Trans{}>>\END
    \ifx\@pdfpagetransition\@empty
    \else
      \edef\@processme{%
        \global\pdfpageattr{%
          \the\pdfpageattr
          ^^J/Trans << /S /\@pdfpagetransition\space >>%
        }%
      }%
      \@processme
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@RemoveTransPageAttr}
%    Macro \cmd{\Hy@RemoveTransPageAttr} removes a |/Trans|
%    entry from \cmd{\pdfpageattr}. It is called with
%    the end marker |^^J/Trans{}>>\END|. The trick is the
%    empty group that does not appear in legal
%    \cmd{\pdfpageattr} code. It appears in argument
%    |#2| and shows, whether the parameter text
%    catches a really |/Trans| object or the end marker.
%    \begin{macrocode}
\gdef\Hy@RemoveTransPageAttr#1^^J/Trans#2#3>>#4\END{%
  \ifx\\#2\\%
    \global\pdfpageattr{#1}%
  \else
    \Hy@RemoveTransPageAttr#1#4\END
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\hyper@pageduration}
%    \cmd{\@pdfpageduration} is initialized with \cmd{\relax}. So
%    it indicates, if option pdfpageduration is used. First previous
%    |/Dur| entries are removed. If a new |/Dur| key exists, it is
%    appended to \cmd{\pdfpageattr}.
%    \begin{macrocode}
\def\hyper@pageduration{%
  \ifx\@pdfpageduration\relax
  \else
    \expandafter
    \Hy@RemoveDurPageAttr\the\pdfpageattr^^J/Dur{} \END
    \ifx\@pdfpageduration\@empty
    \else
      \edef\@processme{%
        \global\pdfpageattr{%
          \the\pdfpageattr
          ^^J/Dur \@pdfpageduration\space
        }%
      }%
      \@processme
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Hy@RemoveDurPageAttr}
%    Macro \cmd{\Hy@RemoveDurPageAttr} removes a |/Dur|
%    entry from \cmd{\pdfpageattr}. It is called with
%    the end marker |^^J/Dur{} \END|. The trick is the
%    empty group that does not appear in legal
%    \cmd{\pdfpageattr} code. It appears in argument
%    |#2| and shows, whether the parameter text
%    catches a really |/Dur| object or the end marker.
%    \begin{macrocode}
\gdef\Hy@RemoveDurPageAttr#1^^J/Dur#2#3 #4\END{%
  \ifx\\#2\\%
    \global\pdfpageattr{#1}%
  \else
    \Hy@RemoveDurPageAttr#1#4\END
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%
%    \begin{macrocode}
\pdf@ifdraftmode{}{%
  \g@addto@macro\Hy@EveryPageHook{%
    \hyper@pagetransition
    \hyper@pageduration
  }%
}
%    \end{macrocode}
%
%    Also Xe\TeX\ support \cs{pdfpagewidth} and \cs{pdfpageheight},
%    but it does not provide \cs{pdfhorigin} and \cs{pdfvorigin}.
%    \begin{macrocode}
%</pdftex>
%<*pdftex|xetex>
\Hy@AtBeginDocument{%
  \ifHy@setpagesize
    \expandafter\@firstofone
  \else
    \expandafter\@gobble
  \fi
  {%
    \@ifclassloaded{seminar}{%
%<*pdftex>
      \setlength{\pdfhorigin}{1truein}%
      \setlength{\pdfvorigin}{1truein}%
%</pdftex>
      \ifportrait
        \ifdim\paperwidth=\z@
        \else
          \setlength{\pdfpagewidth}{\strip@pt\paperwidth truept}%
        \fi
        \ifdim\paperheight=\z@
        \else
          \setlength{\pdfpageheight}{\strip@pt\paperheight truept}%
        \fi
      \else
        \ifdim\paperheight=\z@
        \else
          \setlength{\pdfpagewidth}{\strip@pt\paperheight truept}%
        \fi
        \ifdim\paperwidth=\z@
        \else
          \setlength{\pdfpageheight}{\strip@pt\paperwidth truept}%
        \fi
      \fi
    }{%
      \ifnum\mag=\@m
        \ifdim\stockwidth>\z@
          \ifdim\stockheight>\z@
           \setlength{\pdfpagewidth}{\stockwidth}%
           \setlength{\pdfpageheight}{\stockheight}%
          \else
            \ifdim\paperwidth>\z@
              \ifdim\paperheight>\z@
                \setlength{\pdfpagewidth}{\paperwidth}%
                \setlength{\pdfpageheight}{\paperheight}%
              \fi
            \fi
          \fi
        \else
          \ifdim\stockwidth=\z@
            \ifdim\paperwidth>\z@
              \ifdim\paperheight>\z@
                \setlength{\pdfpagewidth}{\paperwidth}%
                \setlength{\pdfpageheight}{\paperheight}%
              \fi
            \fi
          \fi
        \fi
      \fi
    }%
  }%
  \Hy@DisableOption{setpagesize}%
}
%</pdftex|xetex>
%<*pdftex>
\def\Acrobatmenu#1#2{%
  \Hy@Acrobatmenu{#1}{#2}{%
    \leavevmode
    \EdefEscapeName\Hy@temp@menu{#1}%
    \pdfstartlink
      attr{%
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \ifx\@menubordercolor\relax
        \else
          /C[\@menubordercolor]%
        \fi
      }%
      user{%
        /Subtype/Link%
        \ifHy@pdfa /F 4\fi
        /A<<%
          /S/Named%
          /N/\Hy@temp@menu
          \Hy@href@nextactionraw
        >>%
      }%
      \relax
    \Hy@colorlink\@menucolor#2%
    \close@pdflink
  }%
}
%    \end{macrocode}
%
%
%    \begin{macrocode}
%</pdftex>
%    \end{macrocode}
%
% \subsection{hypertex}
%
% The Hyper\TeX\ specification (this is
% borrowed from an article by Arthur Smith)
% says that conformant viewers/translators
% must recognize the following set of |\special| commands:
% \begin{description}
% \item[href:] |html:<a href = "href_string">|
% \item[name:] |html:<a name = "name_string">|
% \item[end:] |html:</a>|
% \item[image:] |html:<img src = "href_string">|
% \item[base\_name:] |html:<base href = "href_string">|
% \end{description}
%
% The \emph{href}, \emph{name} and \emph{end} commands are used to do
% the basic hypertext operations of establishing links between sections
% of documents. The \emph{image} command is intended (as with current
% html viewers) to place an image of arbitrary graphical
% format on the page in the current location.  The \emph{base\_name}
% command is be used to communicate to the \emph{dvi} viewer the full (URL)
% location of the current document so that
% files specified by relative URL's may be retrieved correctly.
%
% The \emph{href} and \emph{name} commands must be paired with an
% \emph{end} command later in
% the \TeX{} file --- the \TeX{} commands between the two ends of a pair
% form an \emph{anchor} in the document. In the case of an \emph{href}
% command, the \emph{anchor} is to be highlighted in the
% \emph{dvi} viewer, and
% when clicked on will cause the scene to shift to the destination
% specified by \emph{href\_string}. The \emph{anchor} associated with a
% name command represents a possible location to which other hypertext
% links may refer, either as local references (of the form
% \texttt{href="\#name\_string"} with the \emph{name\_string}
% identical to the one in the name command) or as part of a URL (of the
% form \emph{URL\#name\_string}). Here \emph{href\_string} is a valid
% URL or local identifier, while name\_string could be any string at
% all: the only caveat is that `|"|' characters should be escaped with a
% backslash (|\|), and if it looks like a URL name it may cause
% problems.
%
%    \begin{macrocode}
%<*hypertex>
\providecommand*{\XR@ext}{dvi}
\let\PDF@FinishDoc\@empty
\def\PDF@SetupDoc{%
  \ifx\@baseurl\@empty
  \else
    \special{html:<base href="\@baseurl">}%
  \fi
}
\Hy@WrapperDef\hyper@anchor#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \let\protect=\string
    \hyper@chars
    \special{html:<a name=%
        \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
  \endgroup
  \Hy@activeanchortrue
  \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
  \special{html:</a>}%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\Hy@WrapperDef\hyper@anchorstart#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \hyper@chars
    \special{html:<a name=%
        \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
  \endgroup
  \Hy@activeanchortrue
}
\def\hyper@anchorend{%
  \special{html:</a>}%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\def\@urltype{url}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \expandafter\Hy@colorlink\csname @#1color\endcsname
  \def\Hy@tempa{#1}%
  \ifx\Hy@tempa\@urltype
    \special{html:<a href=\hyper@quote#2\hyper@quote>}%
  \else
    \begingroup
      \hyper@chars
      \special{html:<a href=%
          \hyper@quote\#\HyperDestNameFilter{#2}\hyper@quote>}%
    \endgroup
  \fi
}
\def\hyper@linkend{%
  \special{html:</a>}%
  \Hy@endcolorlink
}
\def\hyper@linkfile#1#2#3{%
  \hyper@linkurl{#1}{\Hy@linkfileprefix#2\ifx\\#3\\\else\##3\fi}%
}
\def\hyper@linkurl#1#2{%
%    \end{macrocode}
% If we want to raise up the final link |\special|, we need to
% get its height; ask me why \LaTeX\ constructs make this totally
% foul up, and make us revert to basic \TeX. I do not know.
%    \begin{macrocode}
  \leavevmode
  \ifHy@raiselinks
    \Hy@SaveSpaceFactor
    \Hy@SaveSavedSpaceFactor
    \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
    \Hy@RestoreSavedSpaceFactor
    \@linkdim\dp\@tempboxa
    \lower\@linkdim\hbox{%
      \hyper@chars
      \special{html:<a href=\hyper@quote#2\hyper@quote>}%
    }%
    \Hy@colorlink\@urlcolor
      \Hy@RestoreSpaceFactor
      #1%
      \Hy@SaveSpaceFactor
    \@linkdim\ht\@tempboxa
%    \end{macrocode}
% Because of the interaction with the dvihps processor, we have to subtract a
% little from the height. This is not clean, or checked. Check with Mark
% Doyle about what gives here. It may not be needed with
% the new dvips (Jan 1997).
%    \begin{macrocode}
    \advance\@linkdim by -6.5\p@
    \raise\@linkdim\hbox{\special{html:</a>}}%
    \Hy@endcolorlink
    \Hy@RestoreSpaceFactor
  \else
    \begingroup
      \hyper@chars
      \special{html:<a href=\hyper@quote#2\hyper@quote>}%
      \Hy@colorlink\@urlcolor#1\Hy@xspace@end
      \special{html:</a>}%
      \Hy@endcolorlink
    \endgroup
  \fi
}
%    \end{macrocode}
%    Very poor implementation of \cs{hyper@link} without considering |#1|.
%    \begin{macrocode}
\def\hyper@link#1#2#3{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \hyper@linkurl{#3}{\#\HyperDestNameFilter{#2}}%
}
%    \end{macrocode}
%
%    \begin{macrocode}
\def\hyper@image#1#2{%
  \begingroup
    \hyper@chars
    \special{html:<img src=\hyper@quote#1\hyper@quote>}%
  \endgroup
}
%</hypertex>
%<*dviwindo>
%    \end{macrocode}
% \subsection{dviwindo}
% [This was developed by David Carlisle].
% Within a file dviwindo hyperlinking is used, for external
% URL's a call to |\wwwbrowser| is made. (You can define
% this command before or after loading the hyperref package
% if the default |c:/netscape/netscape| is not suitable)
% Dviwindo could in fact handle external links to dvi files on
% the same machine without calling a web browser, but that would
% mean parsing the URL to recognise such, and this is currently
% not done.
%
% This was more or less blindly copied from the hypertex cfg.
% For dviwindo,  \LaTeX{} must specify the size of the active area
% for links. For some hooks this information is available
% but for some, the start and end of the link are
% specified separately in which case a fixed size area
% of 10000000sp wide by |\baselineskip| high is used.
%    \begin{macrocode}
\providecommand*{\XR@ext}{dvi}
\providecommand*\wwwbrowser{c:\string\netscape\string\netscape}
\Hy@WrapperDef\hyper@anchor#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \let\protect=\string
    \special{mark: #1}%
  \endgroup
  \Hy@activeanchortrue
  \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\Hy@WrapperDef\hyper@anchorstart#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \special{mark: #1}%
  \Hy@activeanchortrue
}
\def\hyper@anchorend{%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \expandafter\Hy@colorlink\csname @#1color\endcsname
  \special{button: %
    10000000 %
    \number\baselineskip\space
    #2%
  }%
}
\def\hyper@linkend{%
  \Hy@endcolorlink
}
\def\hyper@link#1#2#3{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \leavevmode
  \ifHy@raiselinks
    \Hy@SaveSpaceFactor
    \Hy@SaveSavedSpaceFactor
    \sbox\@tempboxa{\Hy@RestoreSpaceFactor#3}%
    \Hy@RestoreSavedSpaceFactor
    \@linkdim\dp\@tempboxa
    \lower\@linkdim\hbox{%
      \special{button: %
        \number\wd\@tempboxa\space
        \number\ht\@tempboxa\space
        #2%
      }%
      \expandafter\Hy@colorlink\csname @#1color\endcsname
      \Hy@RestoreSpaceFactor
      #3\Hy@xspace@end
      \Hy@SaveSpaceFactor
      \Hy@endcolorlink
    }%
    \@linkdim\ht\@tempboxa
    \advance\@linkdim by -6.5\p@
    \raise\@linkdim\hbox{}%
    \Hy@RestoreSpaceFactor
  \else
    \special{button: %
      \number\wd\@tempboxa\space
      \number\ht\@tempboxa\space
      #2%
    }%
    \expandafter\Hy@colorlink\csname @#1color\endcsname
    #3\Hy@xspace@end
    \Hy@endcolorlink
  \fi
}
\def\hyper@linkurl#1#2{%
  \begingroup
    \hyper@chars
    \leavevmode
    \ifHy@raiselinks
      \Hy@SaveSpaceFactor
      \Hy@SaveSavedSpaceFactor
      \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
      \Hy@RestoreSavedSpaceFactor
      \@linkdim\dp\@tempboxa
      \lower\@linkdim\hbox{%
        \special{button: %
          \number\wd\@tempboxa\space
          \number\ht\@tempboxa\space
          launch: \wwwbrowser\space
          #2%
        }%
        \Hy@colorlink\@urlcolor
          \Hy@RestoreSpaceFactor
          #1\Hy@xspace@end
          \Hy@SaveSpaceFactor
        \Hy@endcolorlink
      }%
      \@linkdim\ht\@tempboxa
      \advance\@linkdim by -6.5\p@
      \raise\@linkdim\hbox{}%
      \Hy@RestoreSpaceFactor
    \else
      \special{button: %
        \number\wd\@tempboxa\space
        \number\ht\@tempboxa\space
        launch: \wwwbrowser\space
        #2%
      }%
      \Hy@colorlink\@urlcolor
        #1\Hy@xspace@end
      \Hy@endcolorlink
    \fi
  \endgroup
}
\def\hyper@linkfile#1#2#3{%
  \begingroup
    \hyper@chars
    \leavevmode
    \ifHy@raiselinks
      \Hy@SaveSpaceFactor
      \Hy@SaveSavedSpaceFactor
      \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
      \Hy@RestoreSavedSpaceFactor
      \@linkdim\dp\@tempboxa
      \lower\@linkdim\hbox{%
        \special{button: %
          \number\wd\@tempboxa\space
          \number\ht\@tempboxa\space
          #3,%
          file: #2%
        }%
        \Hy@colorlink\@filecolor
          \Hy@RestoreSpaceFactor
          #1\Hy@xspace@end
          \Hy@SaveSpaceFactor
        \Hy@endcolorlink
      }%
      \@linkdim\ht\@tempboxa
      \advance\@linkdim by -6.5\p@
      \raise\@linkdim\hbox{}%
      \Hy@RestoreSpaceFactor
    \else
      \special{button: %
        \number\wd\@tempboxa\space
        \number\ht\@tempboxa\space
        #3,%
        file: #2%
      }%
      \Hy@colorlink\@filecolor
        #1\Hy@xspace@end
      \Hy@endcolorlink
    \fi
  \endgroup
}
\HyInfo@AddonUnsupportedtrue
\def\PDF@FinishDoc{%
  \Hy@UseMaketitleInfos
  \HyInfo@TrappedUnsupported
  \special{PDF: Keywords \@pdfkeywords}%
  \special{PDF: Title \@pdftitle}%
  \special{PDF: Creator \@pdfcreator}%
  \ifx\@pdfcreationdate\@empty
  \else
    \special{PDF: CreationDate \@pdfcreationdate}%
  \fi
  \ifx\@pdfmoddate\@empty
  \else
    \special{PDF: ModDate \@pdfmoddate}%
  \fi
  \special{PDF: Author \@pdfauthor}%
  \ifx\@pdfproducer\relax
  \else
    \special{PDF: Producer \@pdfproducer}%
  \fi
  \special{PDF: Subject \@pdfsubject}%
  \Hy@DisableOption{pdfauthor}%
  \Hy@DisableOption{pdftitle}%
  \Hy@DisableOption{pdfsubject}%
  \Hy@DisableOption{pdfcreator}%
  \Hy@DisableOption{addtopdfcreator}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfmoddate}%
  \Hy@DisableOption{pdfproducer}%
  \Hy@DisableOption{pdfkeywords}%
  \Hy@DisableOption{pdftrapped}%
  \Hy@DisableOption{pdfinfo}%
}
\def\PDF@SetupDoc{%
  \ifx\@baseurl\@empty
  \else
    \special{PDF: Base \@baseurl}%
  \fi
  \ifx\@pdfpagescrop\@empty\else
    \special{PDF: BBox \@pdfpagescrop}%
  \fi
  \def\Hy@temp{}%
  \ifx\@pdfstartpage\@empty
  \else
    \ifx\@pdfstartview\@empty
    \else
      \edef\Hy@temp{%
        ,Page=\@pdfstartpage
        ,View=\@pdfstartview
      }%
    \fi
  \fi
  \edef\Hy@temp{%
    \noexpand\pdfmark{%
      pdfmark=/DOCVIEW,%
      PageMode=/\@pdfpagemode
      \Hy@temp
    }%
  }%
  \Hy@temp
  \ifx\@pdfpagescrop\@empty
  \else
    \pdfmark{pdfmark=/PAGES,CropBox=\@pdfpagescrop}%
  \fi
  \edef\Hy@temp{%
    \ifHy@pdftoolbar\else /HideToolbar true\fi
    \ifHy@pdfmenubar\else /HideMenubar true\fi
    \ifHy@pdfwindowui\else /HideWindowUI true\fi
    \ifHy@pdffitwindow /FitWindow true\fi
    \ifHy@pdfcenterwindow /CenterWindow true\fi
    \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
    \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
    \Hy@UseNameKey{Direction}\@pdfdirection
    \Hy@UseNameKey{ViewArea}\@pdfviewarea
    \Hy@UseNameKey{ViewClip}\@pdfviewclip
    \Hy@UseNameKey{PrintArea}\@pdfprintarea
    \Hy@UseNameKey{PrintClip}\@pdfprintclip
    \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
    \Hy@UseNameKey{Duplex}\@pdfduplex
    \ifx\@pdfpicktraybypdfsize\@empty
    \else
      /PickTrayByPDFSize \@pdfpicktraybypdfsize
    \fi
    \ifx\@pdfprintpagerange\@empty
    \else
      /PrintPageRange[\@pdfprintpagerange]%
    \fi
    \ifx\@pdfnumcopies\@empty
    \else
      /NumCopies \@pdfnumcopies
    \fi
  }%
  \pdfmark{pdfmark=/PUT,%
    Raw={%
      \string{Catalog\string}<<%
        \ifx\Hy@temp\@empty
        \else
          /ViewerPreferences<<\Hy@temp>>%
        \fi
        \Hy@UseNameKey{PageLayout}\@pdfpagelayout
        \ifx\@pdflang\relax
        \else
          /Lang(\@pdflang)%
        \fi
      >>%
    }%
  }%
}
%</dviwindo>
%<*dvipdfm|xetex>
%    \end{macrocode}
% \subsection{dvipdfm/xetex dvi to PDF converter}
% Provided by Mark Wicks (mwicks@kettering.edu)
%
% (x)dvipdfmx replaces destination names by numbers. This makes it impossible
% to link from an external document with xr-hyper, so from version 7.00j on
% this is suppressed with a config special.
%    \begin{macrocode}
\special{dvipdfmx:config C 0x0010}
\providecommand*{\XR@ext}{pdf}
\Hy@setbreaklinks{true}
\def\HyPat@ObjRef{%
  @[^ ]+%
}
\newsavebox{\pdfm@box}
\def\@pdfm@mark#1{\special{pdf:#1}}
\Hy@WrapperDef\@pdfm@dest#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
    \def\x{XYZ}%
    \ifx\x\@pdfview
      \def\x{XYZ @xpos @ypos null}%
    \else
      \def\x{FitH}%
      \ifx\x\@pdfview
        \def\x{FitH @ypos}%
      \else
        \def\x{FitBH}%
        \ifx\x\@pdfview
          \def\x{FitBH @ypos}%
        \else
          \def\x{FitV}%
          \ifx\x\@pdfview
            \def\x{FitV @xpos}%
          \else
            \def\x{FitBV}%
            \ifx\x\@pdfview
              \def\x{FitBV @xpos}%
            \else
              \def\x{Fit}%
              \ifx\x\@pdfview
                \let\x\@pdfview
              \else
                \def\x{FitB}%
                \ifx\x\@pdfview
                  \let\x\@pdfview
                \else
                  \def\x{FitR}%
                  \ifx\x\@pdfview
                    \Hy@Warning{`pdfview=FitR' is not supported}%
                    \def\x{XYZ @xpos @ypos null}%
                  \else
                    \@onelevel@sanitize\@pdfview
                    \Hy@Warning{%
                      Unknown value `\@pdfview' for pdfview%
                    }%
                    \def\x{XYZ @xpos @ypos null}%
                  \fi
                \fi
              \fi
            \fi
          \fi
        \fi
      \fi
    \fi
    \@pdfm@mark{dest (\Hy@pstringDest) [@thispage /\x]}%
  \endgroup
  \Hy@RestoreLastskip
}
\providecommand*\@pdfview{XYZ}
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\def\hyper@anchor#1{%
  \@pdfm@dest{#1}%
}
\def\hyper@anchorstart#1{%
  \Hy@activeanchortrue
  \@pdfm@dest{#1}%
}
\def\hyper@anchorend{%
  \Hy@activeanchorfalse
}
%    \end{macrocode}
%    \begin{macrocode}
\newcounter{Hy@AnnotLevel}
%    \end{macrocode}
%    \begin{macrocode}
\ifHy@ocgcolorlinks
  \def\OBJ@OCG@view{@OCG@view}%
  \@pdfm@mark{%
    obj \OBJ@OCG@view <<%
      /Type/OCG%
      /Name(View)%
      /Usage<<%
        /Print<<%
          /PrintState/OFF%
        >>%
        /View<<%
          /ViewState/ON%
        >>%
      >>%
    >>%
  }%
  \@pdfm@mark{close \OBJ@OCG@view}%
  \def\OBJ@OCG@print{@OCG@print}%
  \@pdfm@mark{%
    obj \OBJ@OCG@print <<%
      /Type/OCG%
      /Name(Print)%
      /Usage<<%
        /Print<<%
          /PrintState/ON%
        >>%
        /View<<%
          /ViewState/OFF%
        >>%
      >>%
    >>%
  }%
  \@pdfm@mark{close \OBJ@OCG@print}%
  \def\OBJ@OCGs{@OCGs}%
  \@pdfm@mark{%
    obj \OBJ@OCGs [%
      \OBJ@OCG@view\space\OBJ@OCG@print
    ]%
  }%
  \@pdfm@mark{close \OBJ@OCGs}%
  \@pdfm@mark{%
    put @catalog <<%
      /OCProperties<<%
        /OCGs \OBJ@OCGs
        /D<<%
          /OFF[\OBJ@OCG@print]%
          /AS[%
            <<%
              /Event/View%
              /OCGs \OBJ@OCGs
              /Category[/View]%
            >>%
            <<%
              /Event/Print%
              /OCGs \OBJ@OCGs
              /Category[/Print]%
            >>%
            <<%
              /Event/Export%
              /OCGs \OBJ@OCGs
              /Category[/Print]%
            >>%
          ]%
        >>%
      >>%
    >>%
  }%
  \AddToHook{shipout/before}{%
    \setbox\ShipoutBox=\hbox{%
      \copy\ShipoutBox
      \@pdfm@mark{%
        put @resources <<%
          /Properties<<%
            /OCView \OBJ@OCG@view
            /OCPrint \OBJ@OCG@print
          >>%
        >>%
      }%
    }%
  }%
  \Hy@AtBeginDocument{%
    \def\Hy@colorlink#1{%
      \begingroup
        \ifHy@ocgcolorlinks
          \def\Hy@ocgcolor{#1}%
          \setbox0=\hbox\bgroup\color@begingroup
        \else
          \HyColor@UseColor#1%
        \fi
    }%
    \def\Hy@endcolorlink{%
      \ifHy@ocgcolorlinks
        \color@endgroup\egroup
        \mbox{%
          \@pdfm@mark{content /OC/OCPrint BDC}%
          \rlap{\copy0}%
          \@pdfm@mark{content EMC/OC/OCView BDC}%
          \begingroup
            \expandafter\HyColor@UseColor\Hy@ocgcolor
            \box0 %
          \endgroup
          \@pdfm@mark{content EMC}%
        }%
      \fi
      \endgroup
    }%
  }%
\else
  \Hy@DisableOption{ocgcolorlinks}%
\fi
%    \end{macrocode}
% Use primitive counter arithmetic here to avoid amsmath
% redefining |\stepcounter| (github issue/13)
%    \begin{macrocode}
\def\Hy@BeginAnnot#1{%
  \global\advance\c@Hy@AnnotLevel\@ne
  \ifnum\c@Hy@AnnotLevel=\@ne
    #1%
  \fi
}
\def\Hy@EndAnnot{%
  \ifnum\value{Hy@AnnotLevel}=\@ne
    \Hy@endcolorlink
    \@pdfm@mark{eann}%
  \fi
  \global\advance\c@Hy@AnnotLevel\m@ne
}
%    \end{macrocode}
%    \begin{macrocode}
\def\Hy@undefinedname{UNDEFINED}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \leavevmode
  \Hy@BeginAnnot{%
    \protected@edef\Hy@testname{#2}%
    \ifx\Hy@testname\@empty
      \Hy@Warning{%
        Empty destination name,\MessageBreak
        using `\Hy@undefinedname'%
      }%
      \let\Hy@testname\Hy@undefinedname
    \else
      \Hy@pstringdef\Hy@testname{%
        \expandafter\HyperDestNameFilter\expandafter{%
          \Hy@testname
        }%
      }%
    \fi
    \@pdfm@mark{%
      bann<<%
        /Type/Annot%
        /Subtype/Link%
        \ifHy@pdfa /F 4\fi
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \expandafter\ifx\csname @#1bordercolor\endcsname\relax
        \else
          /C[\csname @#1bordercolor\endcsname]%
        \fi
        /A<<%
          /S/GoTo%
          /D(\Hy@testname)%
          \Hy@href@nextactionraw
        >>%
      >>%
    }%
    \expandafter\Hy@colorlink\csname @#1color\endcsname
  }%
}
\def\hyper@linkend{\Hy@EndAnnot}%
\def\hyper@link#1#2#3{%
  \hyper@linkstart{#1}{#2}#3\Hy@xspace@end\hyper@linkend
}
%    \end{macrocode}
% 2025-05-20 added a group for issue \#380
%    \begin{macrocode}
\def\hyper@linkfile#1#2#3{%
  \leavevmode
  \begingroup
  \Hy@BeginAnnot{%
    \def\Hy@pstringF{#2}%
    \Hy@CleanupFile\Hy@pstringF
    \Hy@pstringdef\Hy@pstringF\Hy@pstringF
    \Hy@pstringdef\Hy@pstringD{#3}%
    \Hy@MakeRemoteAction
    \@pdfm@mark{%
      bann<<%
        /Type/Annot%
        /Subtype/Link%
        \ifHy@pdfa /F 4\fi
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \ifx\@filebordercolor\relax
        \else
          /C[\@filebordercolor]%
        \fi
        /A<<%
          /S/GoToR%
          /F(\Hy@pstringF)%
          /D%
          \ifx\\#3\\%
            [\Hy@href@page\@pdfremotestartview]%
          \else
            (\Hy@pstringD)%
          \fi
          \Hy@SetNewWindow
          \Hy@href@nextactionraw
        >>%
      >>%
    }%
    \Hy@colorlink\@filecolor
  }%
  #1\Hy@xspace@end
  \Hy@EndAnnot
  \endgroup
}
\def\@hyper@launch run:#1\\#2#3{% filename, anchor text linkname
  \leavevmode
  \Hy@BeginAnnot{%
    \Hy@pstringdef\Hy@pstringF{#1}%
    \Hy@pstringdef\Hy@pstringP{#3}%
    \@pdfm@mark{%
      bann<<%
        /Type/Annot%
        /Subtype/Link%
        \ifHy@pdfa /F 4\fi
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \ifx\@runbordercolor\relax
        \else
          /C[\@runbordercolor]%
        \fi
        /A<<%
          /F(\Hy@pstringF)%
          /S/Launch%
          \Hy@SetNewWindow
          \ifx\\#3\\%
          \else
            /Win<</P(\Hy@pstringP)/F(\Hy@pstringF)>>%
          \fi
          \Hy@href@nextactionraw
        >>%
      >>%
    }%
    \Hy@colorlink\@runcolor
  }%
  #2\Hy@xspace@end
  \Hy@EndAnnot
}
\def\hyper@linkurl#1#2{%
  \leavevmode
  \Hy@BeginAnnot{%
    \Hy@pstringdef\Hy@pstringURI{#2}%
    \@pdfm@mark{%
      bann<<%
        /Type/Annot%
        /Subtype/Link%
        \ifHy@pdfa /F 4\fi
        \Hy@setpdfborder
        \Hy@setpdfhighlight
        \ifx\@urlbordercolor\relax
        \else
          /C[\@urlbordercolor]%
        \fi
        /A<<%
          /S/URI%
          /URI(\Hy@pstringURI)%
          \ifHy@href@ismap
            /IsMap true%
          \fi
          \Hy@href@nextactionraw
        >>%
      >>%
    }%
    \Hy@colorlink\@urlcolor
  }%
  #1\Hy@xspace@end
  \Hy@EndAnnot
}
\def\Acrobatmenu#1#2{%
  \Hy@Acrobatmenu{#1}{#2}{%
    \Hy@BeginAnnot{%
      \EdefEscapeName\Hy@temp@menu{#1}%
      \@pdfm@mark{%
        bann<<%
          /Type/Annot%
          /Subtype/Link%
          \ifHy@pdfa /F 4\fi
          \Hy@setpdfborder
          \Hy@setpdfhighlight
          \ifx\@menubordercolor\relax
          \else
            /C[\@menubordercolor]%
          \fi
          /A<<%
            /S/Named%
            /N/\Hy@temp@menu
            \Hy@href@nextactionraw
          >>%
        >>%
      }%
      \Hy@colorlink\@menucolor
    }%
    #2\Hy@xspace@end
    \Hy@EndAnnot
  }%
}

\def\PDF@FinishDoc{%
  \Hy@UseMaketitleInfos
  \HyInfo@GenerateAddons
  \@pdfm@mark{%
    docinfo<<%
      /Title(\@pdftitle)%
      /Subject(\@pdfsubject)%
      /Creator(\@pdfcreator)%
      \ifx\@pdfcreationdate\@empty
      \else
        /CreationDate(\@pdfcreationdate)%
      \fi
      \ifx\@pdfmoddate\@empty
      \else
        /ModDate(\@pdfmoddate)%
      \fi
      /Author(\@pdfauthor)%
      \ifx\@pdfproducer\relax
      \else
        /Producer(\@pdfproducer)%
      \fi
      /Keywords(\@pdfkeywords)%
      \ifx\@pdftrapped\@empty
      \else
        /Trapped/\@pdftrapped
      \fi
      \HyInfo@Addons
    >>%
  }%
  \Hy@DisableOption{pdfauthor}%
  \Hy@DisableOption{pdftitle}%
  \Hy@DisableOption{pdfsubject}%
  \Hy@DisableOption{pdfcreator}%
  \Hy@DisableOption{addtopdfcreator}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfmoddate}%
  \Hy@DisableOption{pdfproducer}%
  \Hy@DisableOption{pdfkeywords}%
  \Hy@DisableOption{pdftrapped}%
  \Hy@DisableOption{pdfinfo}%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\PDF@SetupDoc{%
  \edef\Hy@temp{%
    \ifHy@pdftoolbar\else /HideToolbar true\fi
    \ifHy@pdfmenubar\else /HideMenubar true\fi
    \ifHy@pdfwindowui\else /HideWindowUI true\fi
    \ifHy@pdffitwindow /FitWindow true\fi
    \ifHy@pdfcenterwindow /CenterWindow true\fi
    \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
    \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
    \Hy@UseNameKey{Direction}\@pdfdirection
    \Hy@UseNameKey{ViewArea}\@pdfviewarea
    \Hy@UseNameKey{ViewClip}\@pdfviewclip
    \Hy@UseNameKey{PrintArea}\@pdfprintarea
    \Hy@UseNameKey{PrintClip}\@pdfprintclip
    \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
    \Hy@UseNameKey{Duplex}\@pdfduplex
    \ifx\@pdfpicktraybypdfsize\@empty
    \else
      /PickTrayByPDFSize \@pdfpicktraybypdfsize
    \fi
    \ifx\@pdfprintpagerange\@empty
    \else
      /PrintPageRange[\@pdfprintpagerange]%
    \fi
    \ifx\@pdfnumcopies\@empty
    \else
      /NumCopies \@pdfnumcopies
    \fi
  }%
  \Hy@pstringdef\Hy@pstringB{\@baseurl}%
  \@pdfm@mark{%
    docview<<%
      \ifx\@pdfstartpage\@empty
      \else
        \ifx\@pdfstartview\@empty
        \else
          /OpenAction[@page\@pdfstartpage\@pdfstartview]%
        \fi
      \fi
      \ifx\@baseurl\@empty
      \else
        /URI<</Base(\Hy@pstringB)>>%
      \fi
      /PageMode/\@pdfpagemode
      \ifx\Hy@temp\@empty
      \else
        /ViewerPreferences<<\Hy@temp>>%
      \fi
      \Hy@UseNameKey{PageLayout}\@pdfpagelayout
      \ifx\@pdflang\relax
      \else
        /Lang(\@pdflang)%
      \fi
    >>%
  }%
  \ifx\@pdfpagescrop\@empty
  \else
    \@pdfm@mark{put @pages <</CropBox[\@pdfpagescrop]>>}%
  \fi
}
%</dvipdfm|xetex>
%    \end{macrocode}
%
%    \begin{macrocode}
%<*dvipdfm|xetex>
%    \end{macrocode}
%    \begin{macro}{\hyper@pagetransition}
%    \begin{macrocode}
\def\hyper@pagetransition{%
  \ifx\@pdfpagetransition\relax
  \else
    \ifx\@pdfpagetransition\@empty
    \else
      \special{pdf:put @thispage %
        <</Trans<</S/\@pdfpagetransition>>>>%
      }%
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\hyper@pageduration}
%    \begin{macrocode}
\def\hyper@pageduration{%
  \ifx\@pdfpageduration\relax
  \else
    \ifx\@pdfpageduration\@empty
    \else
      \special{pdf:put @thispage %
        <</Dur \@pdfpageduration>>%
      }%
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\g@addto@macro\Hy@EveryPageBoxHook{%
  \hyper@pagetransition
  \hyper@pageduration
}
%    \end{macrocode}
%    \begin{macrocode}
%</dvipdfm|xetex>
%    \end{macrocode}
%
%    Xe\TeX\ uses pdf\TeX's method \cs{pdfpagewidth}
%    and \cs{pdfpageheight} for setting the paper size.
%    \begin{macrocode}
%<*dvipdfm>
\AddToHook{shipout/firstpage}{%
  \ifHy@setpagesize
    \begingroup
     \ifnum\mag=\@m
      \ifdim\stockwidth>\z@
        \ifdim\stockheight>\z@
         \special{papersize=\the\stockwidth,\the\stockheight}%
        \else
          \ifdim\paperwidth>\z@
            \ifdim\paperheight>\z@
              \special{papersize=\the\paperwidth,\the\paperheight}%
            \fi
          \fi
        \fi
      \else
        \ifdim\stockwidth=\z@
          \ifdim\paperwidth>\z@
            \ifdim\paperheight>\z@
              \special{papersize=\the\paperwidth,\the\paperheight}%
            \fi
          \fi
        \fi
      \fi
     \fi
    \endgroup
  \fi
  \Hy@DisableOption{setpagesize}%
}
%</dvipdfm>
%    \end{macrocode}
%
% \subsection{VTeX typesetting system}
% Provided by MicroPress, May 1998.
% They require VTeX version 6.02 or newer;
% see \url{http://www.micropress-inc.com/} for details.
%    \begin{macrocode}
%<*vtexhtml>
\providecommand*{\XR@ext}{htm}
\RequirePackage{vtexhtml}
\newif\if@Localurl
\let\PDF@FinishDoc\@empty
\def\PDF@SetupDoc{%
  \ifx\@baseurl\@empty
  \else
    \special{!direct <base href="\@baseurl">}%
  \fi
}
\def\@urltype{url}
\def\hyper@link#1#2#3{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \leavevmode
  \special{!direct <a href=%
      \hyper@quote\hyper@hash\HyperDestNameFilter{#2}\hyper@quote>}%
  #3\Hy@xspace@end
  \special{!direct </a>}%
}
\def\hyper@linkurl#1#2{%
  \begingroup
    \hyper@chars
    \leavevmode
    \MathBSuppress=1\relax
    \special{!direct <a href=%
        \hyper@quote\HyperDestNameFilter{#2}\hyper@quote>}%
    #1\Hy@xspace@end
    \MathBSuppress=0\relax
    \special{!direct </a>}%
  \endgroup
}
\def\hyper@linkfile#1#2#3{%
  \hyper@linkurl{#1}{\Hy@linkfileprefix#2\ifx\\#3\\\else\##3\fi}%
}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \def\Hy@tempa{#1}\ifx\Hy@tempa\@urltype
    \@Localurltrue
    \special{!direct <a href=\hyper@quote#2\hyper@quote>}%
  \else
    \@Localurlfalse
    \begingroup
      \hyper@chars
      \special{!aref \HyperDestNameFilter{#2}}%
    \endgroup
  \fi
}
\def\hyper@linkend{%
  \if@Localurl
    \special{!endaref}%
  \else
    \special{!direct </a>}%
  \fi
}
\Hy@WrapperDef\hyper@anchorstart#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \hyper@chars
    \special{!aname #1}%
    \special{!direct <a name=%
        \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
  \endgroup
  \Hy@activeanchortrue
}
\def\hyper@anchorend{%
  \special{!direct </a>}%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\Hy@WrapperDef\hyper@anchor#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \let\protect=\string
    \hyper@chars
    \leavevmode
    \special{!aname #1}%
    \special{!direct <a name=%
        \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
  \endgroup
  \Hy@activeanchortrue
  \bgroup\anchor@spot\egroup
  \special{!direct </a>}%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\def\@Form[#1]{%
  \Hy@Message{Sorry, TeXpider does not yet support FORMs}%
}
\let\@endForm\@empty
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
  \Hy@Message{Sorry, TeXpider does not yet support FORM gauges}%
}
\def\@TextField[#1]#2{% parameters, label
  \Hy@Message{Sorry, TeXpider does not yet support FORM text fields}%
}
\def\@CheckBox[#1]#2{% parameters, label
  \Hy@Message{Sorry, TeXpider does not yet support FORM checkboxes}%
}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
  \Hy@Message{Sorry, TeXpider does not yet support FORM choice menus}%
}
\def\@PushButton[#1]#2{% parameters, label
  \Hy@Message{Sorry, TeXpider does not yet support FORM pushbuttons}%
}
\def\@Reset[#1]#2{%
  \Hy@Message{Sorry, TeXpider does not yet support FORMs}%
}
\def\@Submit[#1]#2{%
  \Hy@Message{Sorry, TeXpider does not yet support FORMs}%
}
%</vtexhtml>
%    \end{macrocode}
%    \begin{macrocode}
%<*vtex>
%    \end{macrocode}
%    VTeX version 6.68 supports \cs{mediawidth} and \cs{mediaheight}.
%    The \cs{ifx} construct is better than a \cs{csname}, because
%    it avoids the definition and the hash table entry of a
%    previous undefined macro.
%    \begin{macrocode}
\ifcsname mediaheight\endcsname
  \ifHy@setpagesize
     \providecommand*{\VTeXInitMediaSize}{%
       \ifnum\mag=\@m
        \ifdim\stockwidth>\z@
          \ifdim\stockheight>\z@
           \setlength\mediaheight\stockheight
           \setlength\mediawidth\stockwidth
          \else
            \ifdim\paperwidth>\z@
              \ifdim\paperheight>\z@
                \setlength\mediaheight\paperheight
                \setlength\mediawidth\paperwidth
              \fi
            \fi
          \fi
        \else
          \ifdim\stockwidth=\z@
            \ifdim\paperwidth>\z@
              \ifdim\paperheight>\z@
                \setlength\mediaheight\paperheight
                \setlength\mediawidth\paperwidth
              \fi
            \fi
          \fi
        \fi
       \fi
     }%
     \Hy@AtBeginDocument{\VTeXInitMediaSize}%
  \fi
  \Hy@DisableOption{setpagesize}%
\fi
%    \end{macrocode}
%    Older versions of VTeX require |xyz| in lower case.
%    \begin{macrocode}
\providecommand*\@pdfview{xyz}
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\let\CurrentBorderColor\@linkbordercolor
\Hy@WrapperDef\hyper@anchor#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \let\protect=\string
    \hyper@chars
    \special{!aname \HyperDestNameFilter{#1};\@pdfview}%
  \endgroup
  \Hy@activeanchortrue
  \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\Hy@WrapperDef\hyper@anchorstart#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \hyper@chars
    \special{!aname \HyperDestNameFilter{#1};\@pdfview}%
  \endgroup
  \Hy@activeanchortrue
}
\def\hyper@anchorend{%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\def\@urltype{url}
\def\Hy@undefinedname{UNDEFINED}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \Hy@pstringdef\Hy@pstringURI{#2}%
  \expandafter\Hy@colorlink\csname @#1color\endcsname
  \@ifundefined{@#1bordercolor}{%
    \let\CurrentBorderColor\relax
  }{%
    \edef\CurrentBorderColor{%
      \csname @#1bordercolor\endcsname
    }%
  }%
  \def\Hy@tempa{#1}%
  \ifx\Hy@tempa\@urltype
    \special{!%
      aref <u=/Type/Action/S/URI/URI(\Hy@pstringURI)%
        \ifHy@href@ismap
          /IsMap true%
        \fi
        \Hy@href@nextactionraw
        >;%
      a=<%
        \ifHy@pdfa /F 4\fi
        \Hy@setpdfborder
        \ifx\CurrentBorderColor\relax
        \else
          /C [\CurrentBorderColor]%
        \fi
      >%
    }%
  \else
    \protected@edef\Hy@testname{#2}%
    \ifx\Hy@testname\@empty
      \Hy@Warning{%
        Empty destination name,\MessageBreak
        using `\Hy@undefinedname'%
      }%
      \let\Hy@testname\Hy@undefinedname
    \fi
    \special{!%
      aref \expandafter\HyperDestNameFilter
           \expandafter{\Hy@testname};%
      a=<%
        \ifHy@pdfa /F 4\fi
        \Hy@setpdfborder
        \ifx\CurrentBorderColor\relax
        \else
          /C [\CurrentBorderColor]%
        \fi
      >%
    }%
  \fi
}
\def\hyper@linkend{%
  \special{!endaref}%
  \Hy@endcolorlink
}
\def\hyper@linkfile#1#2#3{%
  \leavevmode
  \def\Hy@pstringF{#2}%
  \Hy@CleanupFile\Hy@pstringF
  \special{!%
    aref <%
    \ifnum\Hy@VTeXversion>753 \ifHy@pdfnewwindow n\fi\fi
    f=\Hy@pstringF>#3;%
    a=<%
      \ifHy@pdfa /F 4\fi
      \Hy@setpdfborder
      \ifx\@filebordercolor\relax
      \else
        /C [\@filebordercolor]%
      \fi
    >%
  }%
  \Hy@colorlink\@filecolor
    #1\Hy@xspace@end
  \Hy@endcolorlink
  \special{!endaref}%
}
\def\hyper@linkurl#1#2{%
  \begingroup
    \Hy@pstringdef\Hy@pstringURI{#2}%
    \hyper@chars
    \leavevmode
    \special{!%
      aref <u=/Type/Action/S/URI/URI(\Hy@pstringURI)%
        \ifHy@href@ismap
          /IsMap true%
        \fi
        \Hy@href@nextactionraw
        >;%
      a=<%
        \ifHy@pdfa /F 4\fi
        \Hy@setpdfborder
        \ifx\@urlbordercolor\relax
        \else
          /C [\@urlbordercolor]%
        \fi
      >%
    }%
    \Hy@colorlink\@urlcolor
      #1\Hy@xspace@end
    \Hy@endcolorlink
    \special{!endaref}%
  \endgroup
}
\def\hyper@link#1#2#3{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \@ifundefined{@#1bordercolor}{%
    \let\CurrentBorderColor\relax
  }{%
    \edef\CurrentBorderColor{\csname @#1bordercolor\endcsname}%
  }%
  \leavevmode
  \protected@edef\Hy@testname{#2}%
  \ifx\Hy@testname\@empty
    \Hy@Warning{%
      Empty destination name,\MessageBreak
      using `\Hy@undefinedname'%
    }%
    \let\Hy@testname\Hy@undefinedname
  \fi
  \special{!%
    aref \expandafter\HyperDestNameFilter
         \expandafter{\Hy@testname};%
    a=<%
      \ifHy@pdfa /F 4\fi
      \Hy@setpdfborder
      \ifx\CurrentBorderColor\relax
      \else
        /C [\CurrentBorderColor]%
      \fi
    >%
  }%
  \expandafter
  \Hy@colorlink\csname @#1color\endcsname
    #3\Hy@xspace@end
  \Hy@endcolorlink
  \special{!endaref}%
}
\def\hyper@image#1#2{%
  \hyper@linkurl{#2}{#1}%
}
\def\@hyper@launch run:#1\\#2#3{%
  \Hy@pstringdef\Hy@pstringF{#1}%
  \Hy@pstringdef\Hy@pstringP{#3}%
  \leavevmode
  \special{!aref %
    <u=%
      /Type/Action%
      /S/Launch%
      /F(\Hy@pstringF)%
      \Hy@SetNewWindow
      \ifx\\#3\\%
      \else
        /Win<</F(\Hy@pstringF)/P(\Hy@pstringP)>>%
      \fi
      \Hy@href@nextactionraw
    >;%
    a=<%
      \ifHy@pdfa /F 4\fi
      \Hy@setpdfborder
      \ifx\@runbordercolor\relax
      \else
        /C[\@runbordercolor]%
      \fi
    >%
  }%
  \Hy@colorlink\@runcolor
    #2\Hy@xspace@end
  \Hy@endcolorlink
  \special{!endaref}%
}
\def\Acrobatmenu#1#2{%
  \EdefEscapeName\Hy@temp@menu{#1}%
  \Hy@Acrobatmenu{#1}{#2}{%
    \special{!%
      aref <u=/S /Named /N /\Hy@temp@menu>;%
      a=<%
        \ifHy@pdfa /F 4\fi
        \Hy@setpdfborder
        \ifx\@menubordercolor\relax
        \else
          /C[\@menubordercolor]%
        \fi
      >%
    }%
    \Hy@colorlink\@menucolor
      #2\Hy@xspace@end
    \Hy@endcolorlink
    \special{!endaref}%
  }%
}
%    \end{macrocode}
%
%    The following code (transition effects) is
%    made by Alex Kostin.
%
%    The code below makes sense for V\TeX\ 7.02 or later.
%
%    Please never use |\@ifundefined{VTeXversion}{..}{..}| \emph{globally}.
%    \begin{macrocode}
\ifnum\Hy@VTeXversion<702 %
\else
  \def\hyper@pagetransition{%
    \ifx\@pdfpagetransition\relax
    \else
      \ifx\@pdfpagetransition\@empty
%    \end{macrocode}
%
%    Standard incantation.
%
%    1. Does an old entry have to be deleted?
%    2. If 1=yes, how to delete?
%    \begin{macrocode}
      \else
        \hvtex@parse@trans\@pdfpagetransition
      \fi
    \fi
  }%
%    \end{macrocode}
%
%    I have to write an ``honest'' parser to convert raw PDF code
%    into V\TeX\ |\special|. (AVK)
%
%    Syntax of V\TeX\ |\special{!trans <transition_effect>}|:
%\begin{verbatim}
%<transition_effect> ::= <transition_style>[,<transition_duration>]
%<transition_style> ::= <Blinds_effect> | <Box_effect> |
%                       <Dissolve_effect> | <Glitter_effect> |
%                       <Split_effect> | <Wipe_effect>
%<Blinds_effect> ::= B[<effect_dimension>]
%<Box_effect> ::= X[<effect_motion>]
%<Dissolve_effect> ::= D
%<Glitter_effect> ::= G[<effect_direction>]
%<Split_effect> ::= S[<effect_motion>][<effect_dimension>]
%<Wipe_effect> ::= W[<effect_direction>]
%<Replace_effect> ::= R
%<effect_direction> ::= <number>
%<effect_dimension> ::= H | V
%<effect_motion> ::= I | O
%<transition_duration> ::= <number>
%\end{verbatim}
%
%    Transition codes:
%    \begin{macrocode}
  \def\hvtex@trans@effect@Blinds{\def\hvtex@trans@code{B}}%
  \def\hvtex@trans@effect@Box{\def\hvtex@trans@code{X}}%
  \def\hvtex@trans@effect@Dissolve{\def\hvtex@trans@code{D}}%
  \def\hvtex@trans@effect@Glitter{\def\hvtex@trans@code{G}}%
  \def\hvtex@trans@effect@Split{\def\hvtex@trans@code{S}}%
  \def\hvtex@trans@effect@Wipe{\def\hvtex@trans@code{W}}%
  \def\hvtex@trans@effect@R{\def\hvtex@trans@code{R}}%
%    \end{macrocode}
%
%    Optional parameters:
%    \begin{macrocode}
  \def\hvtex@par@dimension{/Dm}%
  \def\hvtex@par@direction{/Di}%
  \def\hvtex@par@duration{/D}%
  \def\hvtex@par@motion{/M}%
%    \end{macrocode}
%
%    Tokenizer:
%    \begin{macrocode}
  \def\hvtex@gettoken{%
    \expandafter\hvtex@gettoken@\hvtex@buffer\@nil
  }%
%    \end{macrocode}
%
%    Notice that tokens in the input buffer must be space delimited.
%    \begin{macrocode}
  \def\hvtex@gettoken@#1 #2\@nil{%
    \edef\hvtex@token{#1}%
    \edef\hvtex@buffer{#2}%
  }%
  \def\hvtex@parse@trans#1{%
%    \end{macrocode}
%
%    Initializing code:
%    \begin{macrocode}
    \let\hvtex@trans@code\@empty
    \let\hvtex@param@dimension\@empty
    \let\hvtex@param@direction\@empty
    \let\hvtex@param@duration\@empty
    \let\hvtex@param@motion\@empty
    \edef\hvtex@buffer{#1\space}%
%    \end{macrocode}
%    First token is the PDF transition name without escape.
%    \begin{macrocode}
    \hvtex@gettoken
    \ifx\hvtex@token\@empty
%    \end{macrocode}
%    Leading space(s)?
%    \begin{macrocode}
      \ifx\hvtex@buffer\@empty
%    \end{macrocode}
%    The buffer is empty, nothing to do.
%    \begin{macrocode}
      \else
        \hvtex@gettoken
      \fi
    \fi
    \csname hvtex@trans@effect@\hvtex@token\endcsname
%    \end{macrocode}
%    Now is time to parse optional parameters.
%    \begin{macrocode}
    \hvtex@trans@params
  }%
%    \end{macrocode}
%
%    Reentrable macro to parse optional parameters.
%    \begin{macrocode}
  \def\hvtex@trans@params{%
    \ifx\hvtex@buffer\@empty
    \else
      \hvtex@gettoken
      \let\hvtex@trans@par\hvtex@token
      \ifx\hvtex@buffer\@empty
      \else
        \hvtex@gettoken
        \ifx\hvtex@trans@par\hvtex@par@duration
%    \end{macrocode}
%    /D is the effect duration in seconds. V\TeX\ special
%    takes it in milliseconds.
%    \begin{macrocode}
          \let\hvtex@param@duration\hvtex@token
        \else \ifx\hvtex@trans@par\hvtex@par@motion
%    \end{macrocode}
%    /M can be either /I or /O
%    \begin{macrocode}
          \expandafter\edef\expandafter\hvtex@param@motion
            \expandafter{\expandafter\@gobble\hvtex@token}%
        \else \ifx\hvtex@trans@par\hvtex@par@dimension
%    \end{macrocode}
%    /Dm can be either /H or /V
%    \begin{macrocode}
          \expandafter\edef\expandafter\hvtex@param@dimension
            \expandafter{\expandafter\@gobble\hvtex@token}%
        \else \ifx\hvtex@trans@par\hvtex@par@direction
%    \end{macrocode}
%
%    Valid values for /Di are 0, 270, 315 (the Glitter effect) or
%    0, 90, 180, 270 (the Wipe effect).
%    \begin{macrocode}
          \let\hvtex@param@direction\hvtex@token
        \fi\fi\fi\fi
      \fi
    \fi
    \ifx\hvtex@buffer\@empty
      \let\next\hvtex@produce@trans
    \else
      \let\next\hvtex@trans@params
    \fi
    \next
  }%
%    \end{macrocode}
%
%    Merge |<transition_effect>| and issue the special when possible.
%    Too lazy to validate optional parameters.
%    \begin{macrocode}
  \def\hvtex@produce@trans{%
    \let\vtex@trans@special\@empty
    \if S\hvtex@trans@code
      \edef\vtex@trans@special{\hvtex@trans@code
        \hvtex@param@dimension\hvtex@param@motion}%
    \else\if B\hvtex@trans@code
      \edef\vtex@trans@special{%
        \hvtex@trans@code\hvtex@param@dimension
      }%
    \else\if X\hvtex@trans@code
      \edef\vtex@trans@special{%
        \hvtex@trans@code\hvtex@param@motion
      }%
    \else\if W\hvtex@trans@code
      \edef\vtex@trans@special{%
        \hvtex@trans@code\hvtex@param@direction
      }%
    \else\if D\hvtex@trans@code
      \let\vtex@trans@special\hvtex@trans@code
    \else\if R\hvtex@trans@code
      \let\vtex@trans@special\hvtex@trans@code
    \else\if G\hvtex@trans@code
      \edef\vtex@trans@special{%
        \hvtex@trans@code\hvtex@param@direction
      }%
    \fi\fi\fi\fi\fi\fi\fi
    \ifx\vtex@trans@special\@empty
    \else
      \ifx\hvtex@param@duration\@empty
      \else
        \setlength{\dimen@}{\hvtex@param@duration\p@}%
%    \end{macrocode}
%    I'm not guilty of possible overflow.
%    \begin{macrocode}
        \multiply\dimen@\@m
        \edef\vtex@trans@special{%
          \vtex@trans@special,\strip@pt\dimen@
        }%
      \fi
%    \end{macrocode}
%
%    And all the mess is just for this.
%
%    \begin{macrocode}
      \special{!trans \vtex@trans@special}%
    \fi
  }%
%    \end{macrocode}
%    \begin{macrocode}
  \def\hyper@pageduration{%
    \ifx\@pdfpageduration\relax
    \else
      \ifx\@pdfpageduration\@empty
        \special{!duration-}%
      \else
        \special{!duration \@pdfpageduration}%
      \fi
    \fi
  }%
  \g@addto@macro\Hy@EveryPageBoxHook{%
    \hyper@pagetransition
    \hyper@pageduration
  }%
\fi
%    \end{macrocode}
%
%    Caution: In opposite to the other drivers,
%    the argument of |\special{!onopen #1}| is
%    a reference name. The VTeX's postscript
%    mode will work with a version higher than
%    7.0x.
%
%    The command \verb|\VTeXOS| is defined since version 7.45.
%    Magic values encode the operating system:\\
%    \begin{tabular}{@{}l@{: }l@{}}
%      1 & WinTel\\
%      2 & Linux\\
%      3 & OS/2\\
%      4 & MacOS\\
%      5 & MacOS/X\\
%    \end{tabular}
%    \begin{macrocode}
\ifx\@pdfproducer\relax
  \def\@pdfproducer{VTeX}%
  \ifnum\Hy@VTeXversion>\z@
    \count@\VTeXversion
    \divide\count@ 100 %
    \edef\@pdfproducer{\@pdfproducer\space v\the\count@}%
    \multiply\count@ -100 %
    \advance\count@\VTeXversion
    \edef\@pdfproducer{%
      \@pdfproducer
      .\ifnum\count@<10 0\fi\the\count@
      \ifx\VTeXOS\@undefined\else
        \ifnum\VTeXOS>0 %
          \ifnum\VTeXOS<6 %
            \space(%
            \ifcase\VTeXOS
            \or Windows\or Linux\or OS/2\or MacOS\or MacOS/X%
            \fi
            )%
          \fi
        \fi
      \fi
      ,\space
      \ifnum\OpMode=\@ne PDF\else PS\fi
      \space backend%
      \ifx\gexmode\@undefined\else
        \ifnum\gexmode>\z@\space with GeX\fi
      \fi
    }%
  \fi
\fi
%    \end{macrocode}
%
%    Current |!pdfinfo| key syntax:
%
%    \begin{tabular}{lll}
%     \hline
%      Key        & Field                    & Type   \\
%     \hline
%     \texttt{a} & \textbf{A}uthor          & String \\
%     \texttt{b} & Crop\textbf{B}ox         & String \\
%     \texttt{c} & \textbf{C}reator         & String \\
%     \texttt{k} & \textbf{K}eywords        & String \\
%     \texttt{l} & Page\textbf{L}ayout      & PS     \\
%     \texttt{p} & \textbf{P}ageMode        & PS     \\
%     \texttt{r} & P\textbf{r}oducer        & String \\
%     \texttt{s} & \textbf{S}ubject         & String \\
%     \texttt{t} & \textbf{T}itle           & String \\
%     \texttt{u} & \textbf{U}RI             & PS     \\
%     \texttt{v} & \textbf{V}iewPreferences & PS     \\
%    \hline
%    \end{tabular}
%
%    Note: PS objects that are dicts are in |<<<..>>>| (yuck; no choice).
%
%    \begin{macrocode}
\def\PDF@SetupDoc{%
  \ifx\@pdfpagescrop\@empty
  \else
    \special{!pdfinfo b=<\@pdfpagescrop>}%
  \fi
  \ifx\@pdfstartpage\@empty
  \else
    \ifx\@pdfstartview\@empty
    \else
      \special{!onopen Page\@pdfstartpage}%
    \fi
  \fi
  \special{!pdfinfo p=</\@pdfpagemode>}%
  \ifx\@baseurl\@empty
  \else
    \special{!pdfinfo u=<<</Base (\@baseurl)>>>}%
  \fi
  \special{!pdfinfo v=<<<%
    \ifHy@pdftoolbar\else /HideToolbar true\fi
    \ifHy@pdfmenubar\else /HideMenubar true\fi
    \ifHy@pdfwindowui\else /HideWindowUI true\fi
    \ifHy@pdffitwindow /FitWindow true\fi
    \ifHy@pdfcenterwindow /CenterWindow true\fi
    \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
    \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
    \Hy@UseNameKey{Direction}\@pdfdirection
    \Hy@UseNameKey{ViewArea}\@pdfviewarea
    \Hy@UseNameKey{ViewClip}\@pdfviewclip
    \Hy@UseNameKey{PrintArea}\@pdfprintarea
    \Hy@UseNameKey{PrintClip}\@pdfprintclip
    \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
    \Hy@UseNameKey{Duplex}\@pdfduplex
    \ifx\@pdfpicktraybypdfsize\@empty
    \else
      /PickTrayByPDFSize \@pdfpicktraybypdfsize
    \fi
    \ifx\@pdfprintpagerange\@empty
    \else
      /PrintPageRange[\@pdfprintpagerange]%
    \fi
    \ifx\@pdfnumcopies\@empty
    \else
      /NumCopies \@pdfnumcopies
    \fi
  >>>}%
  \ifx\@pdfpagelayout\@empty
  \else
    \special{!pdfinfo l=</\@pdfpagelayout\space>}%
  \fi
}%
\HyInfo@AddonUnsupportedtrue
\define@key{Hyp}{pdfcreationdate}{%
  \Hy@Warning{%
    VTeX does not support pdfcreationdate.\MessageBreak
    Therefore its setting is ignored%
  }%
}
\define@key{Hyp}{pdfmoddate}{%
  \Hy@Warning{%
    VTeX does not support pdfmoddate.\MessageBreak
    Therefore its setting is ignored%
  }%
}
\def\PDF@FinishDoc{%
  \Hy@UseMaketitleInfos
  \HyInfo@TrappedUnsupported
  \special{!pdfinfo a=<\@pdfauthor>}%
  \special{!pdfinfo t=<\@pdftitle>}%
  \special{!pdfinfo s=<\@pdfsubject>}%
  \special{!pdfinfo c=<\@pdfcreator>}%
  \ifx\@pdfproducer\relax
  \else
    \special{!pdfinfo r=<\@pdfproducer>}%
  \fi
  \special{!pdfinfo k=<\@pdfkeywords>}%
  \Hy@DisableOption{pdfauthor}%
  \Hy@DisableOption{pdftitle}%
  \Hy@DisableOption{pdfsubject}%
  \Hy@DisableOption{pdfcreator}%
  \Hy@DisableOption{addtopdfcreator}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfmoddate}%
  \Hy@DisableOption{pdfproducer}%
  \Hy@DisableOption{pdfkeywords}%
  \Hy@DisableOption{pdftrapped}%
  \Hy@DisableOption{pdfinfo}%
}
%</vtex>
%    \end{macrocode}
%
% \subsection{Fix for Adobe bug number 466320}
%    If a destination occurs at the very begin of a page,
%    the destination is moved to the previous page by
%    Adobe Distiller 5.
%    As workaround Adobe suggests:
%\begin{verbatim}
%/showpage {
%  //showpage
%  clippath stroke erasepage
%} bind def
%\end{verbatim}
%
%    But unfortunately this fix generates an empty page
%    at the end of the document. Therefore another fix
%    is used by writing some clipped text.
%    \begin{macrocode}
%<dviwindo>\def\literalps@out#1{\special{ps:#1}}%
%<packageEnd>\providecommand*{\Hy@DistillerDestFix}{}
%<*pdfmark|dviwindo>
\def\Hy@DistillerDestFix{%
  \begingroup
    \let\x\literalps@out
%    \end{macrocode}
%    The fix has to be passed unchanged through GeX, if
%    VTeX in PostScript mode with GeX is used.
%    \begin{macrocode}
    \ifnum \@ifundefined{OpMode}{0}{%
           \@ifundefined{gexmode}{0}{%
           \ifnum\gexmode>0 \OpMode\else 0\fi
           }}>1 %
      \def\x##1{%
        \immediate\special{!=##1}%
      }%
    \fi
    \x{%
      /product where{%
        pop %
        product(Distiller)search{%
          pop pop pop %
          version(.)search{%
            exch pop exch pop%
            (3011)eq{%
              gsave %
              newpath 0 0 moveto closepath clip%
              /Courier findfont 10 scalefont setfont %
              72 72 moveto(.)show %
              grestore%
            }if%
          }{pop}ifelse%
        }{pop}ifelse%
      }if%
    }%
  \endgroup
}
%</pdfmark|dviwindo>
%    \end{macrocode}
%
% \subsection{Direct pdfmark support}
%    Drivers that load |pdfmark.def| have to provide the
%    correct macro definitions of
%    \begin{center}
%      \begin{tabular}{@{}ll@{}}
%        |\@pdfproducer|& for document information\\
%        |\literalps@out|& PostScript output\\
%        |\headerps@out|& PostScript output that goes in the header area\\
%      \end{tabular}
%    \end{center}
%    and the correct definitions of the following PostScript procedures:
%    \begin{center}
%      \begin{tabular}{@{}ll@{}}
%        |H.S|& start of anchor, link or rect\\
%        |#1 H.A|& end of anchor, argument=baselineskip in pt\\
%        |#1 H.L|& end of link, argument=baselineskip in pt\\
%        |H.R|& end of rect\\
%        |H.B|& raw rect code\\
%      \end{tabular}
%    \end{center}
%
%    \begin{macrocode}
%<*pdfmark>
\Hy@breaklinks@unsupported
\def\HyPat@ObjRef{%
  \{[^{}]+\}%
}
\Hy@WrapperDef\hyper@anchor#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \pdfmark[\anchor@spot]{%
      pdfmark=/DEST,%
      linktype=anchor,%
      View=/\@pdfview \@pdfviewparams,%
      DestAnchor={#1}%
    }%
  \endgroup
  \Hy@RestoreLastskip
}
\@ifundefined{hyper@anchorstart}{}{\endinput}
\Hy@WrapperDef\hyper@anchorstart#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \literalps@out{H.S}%
  \Hy@AllowHyphens
  \xdef\hyper@currentanchor{#1}%
  \Hy@activeanchortrue
}
\def\hyper@anchorend{%
  \literalps@out{\strip@pt@and@otherjunk\baselineskip\space H.A}%
  \pdfmark{%
    pdfmark=/DEST,%
    linktype=anchor,%
    View=/\@pdfview \@pdfviewparams,%
    DestAnchor=\hyper@currentanchor,%
  }%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \ifHy@breaklinks
  \else
    \leavevmode
    \ifmmode
      \def\Hy@LinkMath{$}%
    \else
      \let\Hy@LinkMath\@empty
    \fi
    \Hy@SaveSpaceFactor
    \hbox\bgroup
    \Hy@RestoreSpaceFactor
    \Hy@LinkMath
  \fi
  \expandafter\Hy@colorlink\csname @#1color\endcsname
  \literalps@out{H.S}%
  \Hy@AllowHyphens
  \xdef\hyper@currentanchor{#2}%
  \gdef\hyper@currentlinktype{#1}%
}
\def\hyper@linkend{%
  \literalps@out{\strip@pt@and@otherjunk\baselineskip\space H.L}%
  \@ifundefined{@\hyper@currentlinktype bordercolor}{%
    \let\Hy@tempcolor\relax
  }{%
    \edef\Hy@tempcolor{%
      \csname @\hyper@currentlinktype bordercolor\endcsname
    }%
  }%
  \pdfmark{%
    pdfmark=/ANN,%
    linktype=link,%
    Subtype=/Link,%
    PDFAFlags=4,%
    Dest=\hyper@currentanchor,%
    AcroHighlight=\@pdfhighlight,%
    Border=\@pdfborder,%
    BorderStyle=\@pdfborderstyle,%
    Color=\Hy@tempcolor,%
    Raw=H.B%
  }%
  \Hy@endcolorlink
  \ifHy@breaklinks
  \else
    \Hy@LinkMath
    \Hy@SaveSpaceFactor
    \egroup
    \Hy@RestoreSpaceFactor
  \fi
}
%    \end{macrocode}
%
% We have to allow for |\baselineskip| having an optional
% stretch and shrink (you meet this in slide packages, for instance),
% so we need to strip off the junk. David Carlisle, of course,
% wrote this bit of code.
%    \begin{macrocode}
\begingroup
  \catcode`P=12 %
  \catcode`T=12 %
  \lowercase{\endgroup
  \gdef\rem@ptetc#1.#2PT#3!{#1\ifnum#2>\z@.#2\fi}%
}
\def\strip@pt@and@otherjunk#1{\expandafter\rem@ptetc\the#1!}
%    \end{macrocode}
%
%    \begin{macro}{\hyper@pagetransition}
%    \begin{macrocode}
\def\hyper@pagetransition{%
  \ifx\@pdfpagetransition\relax
  \else
    \ifx\@pdfpagetransition\@empty
      % 1. Does an old entry have to be deleted?
      % 2. If 1=yes, how to delete?
    \else
      \pdfmark{%
        pdfmark=/PUT,%
        Raw={%
          \string{ThisPage\string}%
          <</Trans << /S /\@pdfpagetransition\space >> >>%
        }%
      }%
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\hyper@pageduration}
%    \begin{macrocode}
\def\hyper@pageduration{%
  \ifx\@pdfpageduration\relax
  \else
    \ifx\@pdfpageduration\@empty
      % 1. Does an old entry have to be deleted?
      % 2. If 1=yes, how to delete?
    \else
      \pdfmark{%
        pdfmark=/PUT,%
        Raw={%
          \string{ThisPage\string}%
          <</Dur \@pdfpageduration>>%
        }%
      }%
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
\g@addto@macro\Hy@EveryPageBoxHook{%
  \hyper@pagetransition
  \hyper@pageduration
}
%    \end{macrocode}
%    \begin{macrocode}
\def\hyper@image#1#2{%
  \hyper@linkurl{#2}{#1}%
}
\def\Hy@undefinedname{UNDEFINED}
\def\hyper@link#1#2#3{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \@ifundefined{@#1bordercolor}{%
    \let\Hy@tempcolor\relax
  }{%
    \edef\Hy@tempcolor{\csname @#1bordercolor\endcsname}%
  }%
  \begingroup
    \protected@edef\Hy@testname{#2}%
    \ifx\Hy@testname\@empty
      \Hy@Warning{%
        Empty destination name,\MessageBreak
        using `\Hy@undefinedname'%
      }%
      \let\Hy@testname\Hy@undefinedname
    \fi
    \pdfmark[{#3}]{%
      Color=\Hy@tempcolor,%
      linktype={#1},%
      AcroHighlight=\@pdfhighlight,%
      Border=\@pdfborder,%
      BorderStyle=\@pdfborderstyle,%
      pdfmark=/ANN,%
      Subtype=/Link,%
      PDFAFlags=4,%
      Dest=\Hy@testname
    }%
  \endgroup
}
\newtoks\pdf@docset
\def\PDF@FinishDoc{%
  \Hy@UseMaketitleInfos
  \HyInfo@GenerateAddons
  \let\Hy@temp\@empty
  \ifx\@pdfcreationdate\@empty
  \else
    \def\Hy@temp{CreationDate=\@pdfcreationdate,}%
  \fi
  \ifx\@pdfmoddate\@empty
  \else
    \expandafter\def\expandafter\Hy@temp\expandafter{%
      \Hy@temp
      ModDate=\@pdfmoddate,%
    }%
  \fi
  \ifx\@pdfproducer\relax
  \else
    \expandafter\def\expandafter\Hy@temp\expandafter{%
      \Hy@temp
      Producer=\@pdfproducer,%
    }%
  \fi
  \expandafter
  \pdfmark\expandafter{%
    \Hy@temp
    pdfmark=/DOCINFO,%
    Title=\@pdftitle,%
    Subject=\@pdfsubject,%
    Creator=\@pdfcreator,%
    Author=\@pdfauthor,%
    Keywords=\@pdfkeywords,%
    Trapped=\@pdftrapped
  }%
  \ifx\HyInfo@Addons\@empty
  \else
    \pdfmark{%
      pdfmark=/DOCINFO,%
      Raw={\HyInfo@Addons}%
    }%
  \fi
  \Hy@DisableOption{pdfauthor}%
  \Hy@DisableOption{pdftitle}%
  \Hy@DisableOption{pdfsubject}%
  \Hy@DisableOption{pdfcreator}%
  \Hy@DisableOption{addtopdfcreator}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfmoddate}%
  \Hy@DisableOption{pdfproducer}%
  \Hy@DisableOption{pdfkeywords}%
  \Hy@DisableOption{pdftrapped}%
  \Hy@DisableOption{pdfinfo}%
}
\def\PDF@SetupDoc{%
  \def\Hy@temp{}%
  \ifx\@pdfstartpage\@empty
  \else
    \ifx\@pdfstartview\@empty
    \else
      \edef\Hy@temp{%
        ,Page=\@pdfstartpage
        ,View=\@pdfstartview
      }%
    \fi
  \fi
  \edef\Hy@temp{%
    \noexpand\pdfmark{%
      pdfmark=/DOCVIEW,%
      PageMode=/\@pdfpagemode
      \Hy@temp
    }%
  }%
  \Hy@temp
  \ifx\@pdfpagescrop\@empty
  \else
    \pdfmark{pdfmark=/PAGES,CropBox=\@pdfpagescrop}%
  \fi
  \edef\Hy@temp{%
    \ifHy@pdftoolbar\else /HideToolbar true\fi
    \ifHy@pdfmenubar\else /HideMenubar true\fi
    \ifHy@pdfwindowui\else /HideWindowUI true\fi
    \ifHy@pdffitwindow /FitWindow true\fi
    \ifHy@pdfcenterwindow /CenterWindow true\fi
    \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
    \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
    \Hy@UseNameKey{Direction}\@pdfdirection
    \Hy@UseNameKey{ViewArea}\@pdfviewarea
    \Hy@UseNameKey{ViewClip}\@pdfviewclip
    \Hy@UseNameKey{PrintArea}\@pdfprintarea
    \Hy@UseNameKey{PrintClip}\@pdfprintclip
    \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
    \Hy@UseNameKey{Duplex}\@pdfduplex
    \ifx\@pdfpicktraybypdfsize\@empty
    \else
      /PickTrayByPDFSize \@pdfpicktraybypdfsize
    \fi
    \ifx\@pdfprintpagerange\@empty
    \else
      /PrintPageRange[\@pdfprintpagerange]%
    \fi
    \ifx\@pdfnumcopies\@empty
    \else
      /NumCopies \@pdfnumcopies
    \fi
  }%
  \Hy@pstringdef\Hy@pstringB{\@baseurl}%
  \pdfmark{%
    pdfmark=/PUT,%
    Raw={%
      \string{Catalog\string}<<%
        \ifx\Hy@temp\@empty
        \else
          /ViewerPreferences<<\Hy@temp>>%
        \fi
        \Hy@UseNameKey{PageLayout}\@pdfpagelayout
        \ifx\@pdflang\relax
        \else
          /Lang(\@pdflang)%
        \fi
        \ifx\@baseurl\@empty
        \else
          /URI<</Base(\Hy@pstringB)>>%
        \fi
      >>%
    }%
  }%
}
%</pdfmark>
%<*pdfmarkbase>
%    \end{macrocode}
% We define a single macro, pdfmark, which uses the `keyval' system
% to define the various allowable keys; these are \emph{exactly}
% as listed in the pdfmark reference for Acrobat 3.0. The only addition
% is \texttt{pdfmark} which specifies the type of pdfmark to create
% (like ANN, LINK etc). The
% surrounding round and square brackets in the pdfmark commands
% are supplied, but you have to put in / characters as needed for the
% values.
%
%    \begin{macrocode}
\newif\ifHy@pdfmarkerror
\def\pdfmark{\@ifnextchar[{\pdfmark@}{\pdfmark@[]}}
\def\pdfmark@[#1]#2{%
  \Hy@pdfmarkerrorfalse
  \edef\@processme{\noexpand\pdf@toks={\the\pdf@defaulttoks}}%
  \@processme
  \let\pdf@type\relax
  \let\pdf@objdef\@empty
  \kvsetkeys{PDF}{#2}%
  \ifHy@pdfmarkerror
  \else
    \ifx\pdf@type\relax
       \Hy@WarningNoLine{no pdfmark type specified in #2!!}%
       \ifx\\#1\\%
       \else
         \pdf@rect{#1}%
       \fi
    \else
       \ifx\\#1\\%
         \literalps@out{%
           [%
           \ifx\pdf@objdef\@empty
           \else
             /_objdef\string{\pdf@objdef\string}%
           \fi
           \the\pdf@toks\space\pdf@type\space pdfmark%
         }%
       \else
         \@ifundefined{@\pdf@linktype color}{%
           \Hy@colorlink\@linkcolor
         }{%
           \expandafter\Hy@colorlink
                       \csname @\pdf@linktype color\endcsname
         }%
         \pdf@rect{#1}%
         \literalps@out{%
           [%
           \ifx\pdf@objdef\@empty
           \else
             /_objdef\string{\pdf@objdef\string}%
           \fi
           \the\pdf@toks\space\pdf@type\space pdfmark%
         }%
         \Hy@endcolorlink
       \fi
    \fi
  \fi
}
%    \end{macrocode}
% The complicated bit is working out the right enclosing rectangle of
% some piece of \TeX\ text, needed by the /Rect key. This solution originates
% with  Toby Thain (\texttt{tobyt@netspace.net.au}).
%
% For the case breaklinks is enabled, I have added two hooks,
% the first one for package setouterhbox, it provides
% a hopefully better method without setting the text twice.
% \begin{quote}
%  \verb|\usepackage[hyperref]{setouterhbox}|
% \end{quote}
% With the second hook, also you can set the text twice, e.g.:
% \begin{quote}
%  \verb|\long\def\Hy@setouterhbox#1#2{\long\def\my@temp{#2}}|\\
%  \verb|\def\Hy@breaklinksunhbox#1{\my@temp}|
% \end{quote}
%    \begin{macrocode}
\newsavebox{\pdf@box}
\providecommand*{\Hy@setouterhbox}{\sbox}
\providecommand*{\Hy@breaklinksunhbox}{\unhbox}
\def\Hy@DEST{/DEST}
\def\pdf@rect#1{%
  \begingroup
    \chardef\x=1 %
    \def\Hy@temp{#1}%
    \ifx\Hy@temp\@empty
      \chardef\x=0 %
    \else
      \def\y{\anchor@spot}%
      \ifx\Hy@temp\y
        \def\y{\relax}%
        \ifx\anchor@spot\y
          \chardef\x=0 %
        \fi
      \fi
    \fi
  \expandafter\endgroup
  \ifcase\x
    \literalps@out{H.S}%
    \literalps@out{H.R}%
  \else
    \leavevmode
    \Hy@SaveSpaceFactor
    \ifmmode
      \def\Hy@LinkMath{$}%
    \else
      \let\Hy@LinkMath\@empty
    \fi
    \ifHy@breaklinks
      \Hy@setouterhbox\pdf@box{%
        \Hy@RestoreSpaceFactor
        \Hy@LinkMath
        \Hy@AllowHyphens#1\Hy@xspace@end
        \Hy@LinkMath
        \Hy@SaveSpaceFactor
      }%
    \else
      \sbox\pdf@box{%
        \Hy@RestoreSpaceFactor
        \Hy@LinkMath
        #1\Hy@xspace@end
        \Hy@LinkMath
        \Hy@SaveSpaceFactor
      }%
    \fi
    \dimen@\ht\pdf@box
    \ifdim\dp\pdf@box=\z@
      \literalps@out{H.S}%
    \else
      \lower\dp\pdf@box\hbox{\literalps@out{H.S}}%
    \fi
%    \end{macrocode}
% If the text has to be horizontal mode stuff then just unbox
% the saved box like this, which saves executing it twice, which can
% mess up counters etc (thanks DPC\ldots).
%    \begin{macrocode}
    \ifHy@breaklinks
      \ifhmode
        \Hy@breaklinksunhbox\pdf@box
      \else
        \box\pdf@box
      \fi
    \else
      \expandafter\box\pdf@box
    \fi
%    \end{macrocode}
% but if it can have multiple paragraphs you'd need one of these,
% but in that case the measured box size would be wrong anyway.
%    \begin{quote}
%   |\ifHy@breaklinks#1\else\box\pdf@box\fi|\\
%   |\ifHy@breaklinks{#1}\else\box\pdf@box\fi|
%    \end{quote}
%    \begin{macrocode}
    \ifdim\dimen@=\z@
      \literalps@out{H.R}%
    \else
      \raise\dimen@\hbox{\literalps@out{H.R}}%
    \fi
    \Hy@RestoreSpaceFactor
  \fi
  \ifx\pdf@type\Hy@DEST
  \else
    \pdf@addtoksx{H.B}%
  \fi
}
%    \end{macrocode}
% All the supplied material is stored in a token list; since I do not
% feel sure I quite understand these, things may not work as expected
% with expansion. We'll have to experiment.
%    \begin{macrocode}
\newtoks\pdf@toks
\newtoks\pdf@defaulttoks
\pdf@defaulttoks={}%
\def\pdf@addtoks#1#2{%
  \edef\@processme{\pdf@toks{\the\pdf@toks/#2 #1}}%
  \@processme
}
\def\pdf@addtoksx#1{%
  \edef\@processme{\pdf@toks{\the\pdf@toks\space #1}}%
  \@processme
}
\def\PDFdefaults#1{%
  \pdf@defaulttoks={#1}%
}
%    \end{macrocode}
% This is the list of allowed keys. See the Acrobat manual for an
% explanation.
%    \begin{macrocode}
% what is the type of pdfmark?
\define@key{PDF}{pdfmark}{\def\pdf@type{#1}}
% what is the link type?
\define@key{PDF}{linktype}{\def\pdf@linktype{#1}}
\def\pdf@linktype{link}
% named object?
\define@key{PDF}{objdef}{\edef\pdf@objdef{#1}}
\let\pdf@objdef\@empty
% parameter is a stream of PDF
\define@key{PDF}{Raw}{\pdf@addtoksx{#1}}
% parameter is a name
\define@key{PDF}{Action}{\pdf@addtoks{#1}{Action}}
% parameter is a array
\define@key{PDF}{Border}{%
  \edef\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
  \else
    \pdf@addtoks{[#1]\Hy@BorderArrayPatch}{Border}% hash-ok
  \fi
}
\let\Hy@BorderArrayPatch\@empty
% parameter is a dictionary
\define@key{PDF}{BorderStyle}{%
  \edef\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
  \else
    \pdf@addtoks{<<#1>>}{BS}%
  \fi
}
% parameter is a array
\define@key{PDF}{Color}{%
  \ifx\relax#1\relax
  \else
    \pdf@addtoks{[#1]}{Color}% hash-ok
  \fi
}
% parameter is a string
\define@key{PDF}{Contents}{\pdf@addtoks{(#1)}{Contents}}
% parameter is a integer
\define@key{PDF}{Count}{\pdf@addtoks{#1}{Count}}
% parameter is a array
\define@key{PDF}{CropBox}{\pdf@addtoks{[#1]}{CropBox}}% hash-ok
% parameter is a string
\define@key{PDF}{DOSFile}{\pdf@addtoks{(#1)}{DOSFile}}
% parameter is a string or file
\define@key{PDF}{DataSource}{\pdf@addtoks{(#1)}{DataSource}}
% parameter is a destination
\define@key{PDF}{Dest}{%
  \Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
  \ifx\Hy@pstringDest\@empty
    \Hy@pdfmarkerrortrue
    \Hy@Warning{Destination with empty name ignored}%
  \else
    \pdf@addtoks{(\Hy@pstringDest) cvn}{Dest}%
  \fi
}
\define@key{PDF}{DestAnchor}{%
  \Hy@pstringdef\Hy@pstringDest{\HyperDestNameFilter{#1}}%
  \ifx\Hy@pstringDest\@empty
    \Hy@pdfmarkerrortrue
    \Hy@Warning{Destination with empty name ignored}%
  \else
    \pdf@addtoks{(\Hy@pstringDest) cvn}{Dest}%
  \fi
}
% parameter is a string
\define@key{PDF}{Dir}{\pdf@addtoks{(#1)}{Dir}}
% parameter is a string
\define@key{PDF}{File}{\pdf@addtoks{(#1)}{File}}
% parameter is a int
\define@key{PDF}{Flags}{\pdf@addtoks{#1}{Flags}}
\define@key{PDF}{PDFAFlags}{%
  \ifHy@pdfa
    \pdf@addtoks{#1}{F}%
  \fi
}
% parameter is a name
\define@key{PDF}{AcroHighlight}{%
  \begingroup
    \edef\x{#1}%
  \expandafter\endgroup\ifx\x\@empty
  \else
    \pdf@addtoks{#1}{H}%
  \fi
}
% parameter is a string
\define@key{PDF}{ID}{\pdf@addtoks{[#1]}{ID}}% hash-ok
% parameter is a string
\define@key{PDF}{MacFile}{\pdf@addtoks{(#1)}{MacFile}}
% parameter is a string
\define@key{PDF}{ModDate}{\pdf@addtoks{(#1)}{ModDate}}
% parameter is a string
\define@key{PDF}{Op}{\pdf@addtoks{(#1)}{Op}}
% parameter is a Boolean
\define@key{PDF}{Open}{\pdf@addtoks{#1}{Open}}
% parameter is a integer or name
\define@key{PDF}{Page}{\pdf@addtoks{#1}{Page}}
% parameter is a name
\define@key{PDF}{PageMode}{\pdf@addtoks{#1}{PageMode}}
% parameter is a string
\define@key{PDF}{Params}{\pdf@addtoks{(#1)}{Params}}
% parameter is a array
\define@key{PDF}{Rect}{\pdf@addtoks{[#1]}{Rect}}% hash-ok
% parameter is a integer
\define@key{PDF}{SrcPg}{\pdf@addtoks{#1}{SrcPg}}
% parameter is a name
\define@key{PDF}{Subtype}{\pdf@addtoks{#1}{Subtype}}
% parameter is a string
\define@key{PDF}{Title}{\pdf@addtoks{(#1)}{Title}}
% parameter is a string
\define@key{PDF}{Unix}{\pdf@addtoks{(#1)}{Unix}}
% parameter is a string
\define@key{PDF}{UnixFile}{\pdf@addtoks{(#1)}{UnixFile}}
% parameter is an array
\define@key{PDF}{View}{\pdf@addtoks{[#1]}{View}}% hash-ok
% parameter is a string
\define@key{PDF}{WinFile}{\pdf@addtoks{(#1)}{WinFile}}
%    \end{macrocode}
% These are the keys used in the DOCINFO section.
%    \begin{macrocode}
\define@key{PDF}{Author}{\pdf@addtoks{(#1)}{Author}}
\define@key{PDF}{Creator}{\pdf@addtoks{(#1)}{Creator}}
\define@key{PDF}{CreationDate}{\pdf@addtoks{(#1)}{CreationDate}}
\define@key{PDF}{ModDate}{\pdf@addtoks{(#1)}{ModDate}}
\define@key{PDF}{Producer}{\pdf@addtoks{(#1)}{Producer}}
\define@key{PDF}{Subject}{\pdf@addtoks{(#1)}{Subject}}
\define@key{PDF}{Keywords}{\pdf@addtoks{(#1)}{Keywords}}
\define@key{PDF}{ModDate}{\pdf@addtoks{(#1)}{ModDate}}
\define@key{PDF}{Base}{\pdf@addtoks{(#1)}{Base}}
\define@key{PDF}{URI}{\pdf@addtoks{#1}{URI}}
\define@key{PDF}{Trapped}{%
  \edef\Hy@temp{#1}%
  \ifx\Hy@temp\@empty
  \else
    \pdf@addtoks{/#1}{Trapped}%
  \fi
}

%</pdfmarkbase>
%<*pdfmark>
\def\Acrobatmenu#1#2{%
  \EdefEscapeName\Hy@temp@menu{#1}%
  \Hy@Acrobatmenu{#1}{#2}{%
    \pdfmark[{#2}]{%
      linktype=menu,%
      pdfmark=/ANN,%
      AcroHighlight=\@pdfhighlight,%
      Border=\@pdfborder,%
      BorderStyle=\@pdfborderstyle,%
      Color=\@menubordercolor,%
      Action={<</Subtype/Named/N/\Hy@temp@menu>>},%
      Subtype=/Link,%
      PDFAFlags=4%
    }%
  }%
}
%    \end{macrocode}
% And now for some useful examples:
%    \begin{macrocode}
\def\PDFNextPage{\@ifnextchar[{\PDFNextPage@}{\PDFNextPage@[]}}
\def\PDFNextPage@[#1]#2{%
  \pdfmark[{#2}]{%
    #1,%
    Border=\@pdfborder,%
    BorderStyle=\@pdfborderstyle,%
    Color=.2 .1 .5,%
    pdfmark=/ANN,%
    Subtype=/Link,%
    PDFAFlags=4,%
    Page=/Next%
  }%
}
\def\PDFPreviousPage{%
  \@ifnextchar[{\PDFPreviousPage@}{\PDFPreviousPage@[]}%
}
\def\PDFPreviousPage@[#1]#2{%
  \pdfmark[{#2}]{%
    #1,%
    Border=\@pdfborder,%
    BorderStyle=\@pdfborderstyle,%
    Color=.4 .4 .1,%
    pdfmark=/ANN,%
    Subtype=/Link,%
    PDFAFlags=4,%
    Page=/Prev%
  }%
}
\def\PDFOpen#1{%
  \pdfmark{#1,pdfmark=/DOCVIEW}%
}
%    \end{macrocode}
% This will only work if you use Distiller 2.1 or higher.
%    \begin{macrocode}
\def\hyper@linkurl#1#2{%
  \begingroup
    \Hy@pstringdef\Hy@pstringURI{#2}%
    \hyper@chars
    \leavevmode
    \pdfmark[{#1}]{%
      pdfmark=/ANN,%
      linktype=url,%
      AcroHighlight=\@pdfhighlight,%
      Border=\@pdfborder,%
      BorderStyle=\@pdfborderstyle,%
      Color=\@urlbordercolor,%
      Action={<<%
        /Subtype/URI%
        /URI(\Hy@pstringURI)%
        \ifHy@href@ismap
          /IsMap true%
        \fi
      >>},%
      Subtype=/Link,%
      PDFAFlags=4%
    }%
  \endgroup
}
\def\hyper@linkfile#1#2#3{%
  \begingroup
    \def\Hy@pstringF{#2}%
    \Hy@CleanupFile\Hy@pstringF
    \Hy@pstringdef\Hy@pstringF\Hy@pstringF
    \Hy@pstringdef\Hy@pstringD{#3}%
    \Hy@MakeRemoteAction
    \leavevmode
    \pdfmark[{#1}]{%
      pdfmark=/ANN,%
      Subtype=/Link,%
      PDFAFlags=4,%
      AcroHighlight=\@pdfhighlight,%
      Border=\@pdfborder,%
      BorderStyle=\@pdfborderstyle,%
      linktype=file,%
      Color=\@filebordercolor,%
      Action={%
        <<%
          /S/GoToR%
          \Hy@SetNewWindow
          /F(\Hy@pstringF)%
          /D%
          \ifx\\#3\\%
            [\Hy@href@page\@pdfremotestartview]%
          \else
            (\Hy@pstringD)cvn%
          \fi
          \Hy@href@nextactionraw
        >>%
      }%
    }%
  \endgroup
}
\def\@hyper@launch run:#1\\#2#3{%
  \begingroup
    \Hy@pstringdef\Hy@pstringF{#1}%
    \Hy@pstringdef\Hy@pstringP{#3}%
    \leavevmode
    \pdfmark[{#2}]{%
      pdfmark=/ANN,%
      Subtype=/Link,%
      PDFAFlags=4,%
      AcroHighlight=\@pdfhighlight,%
      Border=\@pdfborder,%
      BorderStyle=\@pdfborderstyle,%
      linktype=run,%
      Color=\@runbordercolor,%
      Action={%
        <<%
          /S/Launch%
          \Hy@SetNewWindow
          /F(\Hy@pstringF)%
          \ifx\\#3\\%
          \else
            /Win<</P(\Hy@pstringP)/F(\Hy@pstringF)>>%
          \fi
          \Hy@href@nextactionraw
        >>%
      }%
    }%
  \endgroup
}
%</pdfmark>
%    \end{macrocode}
% Unfortunately, some parts of the |pdfmark|
% PostScript code depend on vagaries
% of the dvi driver. We isolate here all the problems.
%
% \subsection{Rokicki's dvips}
% dvips thinks in 10ths of a big point, its
% coordinate space is resolution dependent,
% and its $y$ axis starts at the top of the
% page. Other drivers can and will be different!
%
% The work is done in |SDict|, because we add in some header
% definitions in a moment.
%    \begin{macrocode}
%<*dvips>
\providecommand*{\XR@ext}{pdf}
\let\Hy@raisedlink\@empty
\def\literalps@out#1{\special{ps:SDict begin #1 end}}%
\def\headerps@out#1{\special{! #1}}%
\input{pdfmark.def}%
\ifx\@pdfproducer\relax
  \def\@pdfproducer{dvips + Distiller}%
\fi
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\providecommand*\@pdfview{XYZ}
\providecommand*\@pdfviewparams{ H.V}
\def\Hy@BorderArrayPatch{BorderArrayPatch}
%    \end{macrocode}
%
%    \begin{macrocode}
\g@addto@macro\Hy@FirstPageHook{%
  \headerps@out{%
%    \end{macrocode}
% Unless I am going mad, this \emph{appears} to be the relationship
% between the default coordinate system (PDF), and dvips;
% \begin{verbatim}
% /DvipsToPDF { .01383701 div Resolution div } def
% /PDFToDvips { .01383701 mul Resolution mul } def
% \end{verbatim}
% the latter's coordinates are resolution dependent, but what that
% .01383701 is, who knows? well, almost everyone except me, I expect\ldots
% And yes, Maarten Gelderman \texttt{<mgelderman@econ.vu.nl>}
% points out that its 1/72.27 (the number of points to an inch, big points
% to inch is 1/72). This also suggests that the code would be more
% understandable (and exact) if 0.013 div would be replaced by 72.27 mul,
% so here we go. If this isn't right, I'll revert it.
%    \begin{macrocode}
    /DvipsToPDF{72.27 mul Resolution div} def%
    /PDFToDvips{72.27 div Resolution mul} def%
    /BPToDvips{72 div Resolution mul}def
%    \end{macrocode}
% The values inside the /Border array are not taken literally, but
% interpreted by ghostscript using the resolution of the dvi driver.
% I don't know how other distiller programs behaves in this manner.
%
% Note GhostScript changed its behaviour here and later versions do
% not need this scaling, so test the PostScript interpreter is GhostScript
% and if so check its version.
%
% If using gs and release $>$ 9.27 no-op, otherwise patch.
%    \begin{macrocode}
    product (Ghostscript) search {pop pop pop revision 927 gt}%
    {pop false} ifelse%
    {%
      /BorderArrayPatch{} def%
    }%
    {%
      /BorderArrayPatch{%
        [exch{%
          dup dup type/integertype eq exch type/realtype eq or%
          {BPToDvips}if%
        }forall]%
      }def%
    } ifelse
%    \end{macrocode}
% The rectangle around the links starts off
% \emph{exactly} the size of the box;
% we will to make it slightly bigger, 1 point on all sides.
%    \begin{macrocode}
    /HyperBorder {1 PDFToDvips} def%
    /H.V {pdf@hoff pdf@voff null} def%
    /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def%
%    \end{macrocode}
% |H.S| (start of anchor, link, or rect) stores
% the $x$ and $y$ coordinates of the current point, in PDF coordinates
%    \begin{macrocode}
    /H.S {%
      currentpoint %
      HyperBorder add /pdf@lly exch def %
      dup DvipsToPDF 72 add /pdf@hoff exch def %
      HyperBorder sub /pdf@llx exch def%
    } def%
%    \end{macrocode}
%
% The calculation of upper left $y$ is done without
% raising the point in \TeX,
% by simply adding on the current |\baselineskip| to the current $y$.
% This is usually too much, so we remove a notional 2 points.
%
% We have to see what the current baselineskip is, and convert it
% to the dvips coordinate system.
%
% Argument: baselineskip in pt.
% The $x$ and $y$ coordinates of the current point, minus the baselineskip
%    \begin{macrocode}
    /H.L {%
      2 sub dup%
      /HyperBasePt exch def %
      PDFToDvips /HyperBaseDvips exch def %
      currentpoint %
      HyperBaseDvips sub /pdf@ury exch def%
      /pdf@urx exch def%
    } def%
    /H.A {%
      H.L %
% |/pdf@voff| = the distance from the top of the page to a point
% |\baselineskip| above the current point in PDF coordinates
      currentpoint exch pop %
      vsize 72 sub exch DvipsToPDF %
      HyperBasePt sub % baseline skip
      sub /pdf@voff exch def%
    } def%
    /H.R {%
      currentpoint %
      HyperBorder sub /pdf@ury exch def %
      HyperBorder add /pdf@urx exch def %
% |/pdf@voff| = the distance from the top of the page to the current point, in
% PDF coordinates
      currentpoint exch pop vsize 72 sub %
      exch DvipsToPDF sub /pdf@voff exch def%
    } def%
  }%
}
\AddToHook{shipout/firstpage}{%
  \ifHy@setpagesize
    \begingroup
     \ifnum\mag=\@m
      \ifdim\stockwidth>\z@
        \ifdim\stockheight>\z@
         \special{papersize=\the\stockwidth,\the\stockheight}%
        \else
          \ifdim\paperwidth>\z@
            \ifdim\paperheight>\z@
              \special{papersize=\the\paperwidth,\the\paperheight}%
            \fi
          \fi
        \fi
      \else
        \ifdim\stockwidth=\z@
          \ifdim\paperwidth>\z@
            \ifdim\paperheight>\z@
              \special{papersize=\the\paperwidth,\the\paperheight}%
            \fi
          \fi
        \fi
      \fi
     \fi
    \endgroup
  \fi
  \Hy@DisableOption{setpagesize}%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\setpdflinkmargin#1{%
  \begingroup
    \setlength{\dimen@}{#1}%
    \literalps@out{%
      /HyperBorder{\strip@pt\dimen@\space PDFToDvips}def%
    }%
  \endgroup
}
%    \end{macrocode}
%    \begin{macrocode}
%</dvips>
%    \end{macrocode}
%
% \subsection{VTeX's vtexpdfmark driver}
%
% This part is derived from the dvips
% (many names reflect this).
%
% The origin seems to be the same as TeX's origin,
% 1 in from the left and 1 in downwards from the top.
% The direction of the $y$ axis is downwards,
% the opposite of the dvips case. Units seems
% to be pt or bp.
%
%    \begin{macrocode}
%<*vtexpdfmark>
\providecommand*{\XR@ext}{pdf}
\let\Hy@raisedlink\@empty
\def\literalps@out#1{\special{pS:#1}}%
\def\headerps@out#1{\immediate\special{pS:#1}}%
\input{pdfmark.def}%
\ifx\@pdfproducer\relax
  \ifnum\OpMode=\@ne
    \def\@pdfproducer{VTeX}%
  \else
    \def\@pdfproducer{VTeX + Distiller}%
  \fi
\fi
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\providecommand*\@pdfview{XYZ}
\providecommand*\@pdfviewparams{ H.V}
%    \end{macrocode}
%
%    \begin{macrocode}
\g@addto@macro\Hy@FirstPageHook{%
  \headerps@out{%
    /vsize {\Hy@pageheight} def%
%    \end{macrocode}
% The rectangle around the links starts off
% \emph{exactly} the size of the box;
% we will to make it slightly bigger, 1 point on all sides.
%    \begin{macrocode}
    /HyperBorder {1} def%
    /H.V {pdf@hoff pdf@voff null} def%
    /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def%
%    \end{macrocode}
%
% |H.S| (start of anchor, link, or rect) stores
% the $x$ and $y$ coordinates of the current point, in PDF coordinates:
% $\mathtt{pdf@lly}  = Y_c - \mathtt{HyperBorder}$,
% $\mathtt{pdf@hoff} = X_c + 72$,
% $\mathtt{pdf@llx}  = X_c - \mathtt{HyperBorder}$
%    \begin{macrocode}
    /H.S {%
      currentpoint %
      HyperBorder sub%
      /pdf@lly exch def %
      dup 72 add /pdf@hoff exch def %
      HyperBorder sub%
      /pdf@llx exch def%
    } def%
%    \end{macrocode}
% The $x$ and $y$ coordinates of the current point, minus the
% |\baselineskip|:
% $\mathtt{pdf@ury} = Y_c + \mathtt{HyperBasePt} + \mathtt{HyperBorder}$,
% $\mathtt{pdf@urx} = X_c + \mathtt{HyperBorder}$
%    \begin{macrocode}
    /H.L {%
      2 sub%
      /HyperBasePt exch def %
      currentpoint %
      HyperBasePt add HyperBorder add%
      /pdf@ury exch def %
      HyperBorder add%
      /pdf@urx exch def%
    } def%
    /H.A {%
      H.L %
      currentpoint exch pop %
      vsize 72 sub exch %
      HyperBasePt add add%
      /pdf@voff exch def%
    } def%
%    \end{macrocode}
% $\mathtt{pdf@ury} = Y_c + \mathtt{HyperBorder}$,
% $\mathtt{pdf@urx} = X_c + \mathtt{HyperBorder}$
%    \begin{macrocode}
    /H.R {%
      currentpoint %
      HyperBorder add%
      /pdf@ury exch def %
      HyperBorder add%
      /pdf@urx exch def %
      currentpoint exch pop vsize 72 sub add%
      /pdf@voff exch def%
    } def%
  }%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\setpdflinkmargin#1{%
  \begingroup
    \setlength{\dimen@}{#1}%
    \literalps@out{%
      /HyperBorder{\strip@pt\dimen@}def%
    }%
  \endgroup
}
%    \end{macrocode}
%    \begin{macrocode}
%</vtexpdfmark>
%    \end{macrocode}
%
% \subsection{Textures}
%
%    \begin{macrocode}
%<*textures>
\providecommand*{\XR@ext}{pdf}
%    \end{macrocode}
%
% At the suggestion of Jacques Distler (distler@golem.ph.utexas.edu), try
% to derive a suitable driver for Textures. This was initially a copy of
% dvips, with some guesses about Textures behaviour.
% Ross Moore (\Email{ross@maths.mq.edu.au}) has added modifications
% for better compatibility, and to support use of pdfmark.
%
% Start by defining a macro that expands to the end-of-line character.
% This will be used to format the appearance of PostScript code,
% to enhance readability, and avoid excessively long lines which
% might otherwise become broken to bad places.
%
%    \begin{macro}{\Hy@ps@CR}
%    The macro \verb|\Hy@ps@CR| contains the end-of-line character.
%    \begin{macrocode}
\begingroup
  \obeylines %
  \gdef\Hy@ps@CR{\noexpand
  }%
\endgroup %
%    \end{macrocode}
%    \end{macro}
%
% Textures has two types of \verb|\special| command for inserting
% PostScript code directly into the dvi output. The `postscript'
% way preserves TeX's idea of where on the page the \verb|\special|
% occurred, but it wraps the contents with a \verb|save|--\verb|restore|
% pair, and adjusts the user-space coordinate system for local drawing
% commands. The `rawpostscript' way simply inserts code, without regard
% for the location on the page.
%
% Thus, to put arbitrary PostScript coding at a fixed location requires
% using \emph{both} \verb|\special| constructions.
% It works by pushing the device-space coordinates onto the operand stack,
% where they can be used to transform back to the correct user-space
% coordinates for the whole page, within a `rawpostscript' \verb|\special|.
%
%    \begin{macrocode}
\def\literalps@out#1{%
  \special{postscript 0 0 transform}%
  \special{rawpostscript itransform moveto\Hy@ps@CR #1}%
}%
%
%    \end{macrocode}
%
% The `prepostscript' is a 3rd kind of \verb|\special|, used for
% inserting definitions into the dictionaries, before page-building
% begins. These are to be available for use on all pages.
%
%    \begin{macrocode}
\def\headerps@out#1{%
  \special{%
    prepostscript TeXdict begin\Hy@ps@CR
      #1\Hy@ps@CR
    end%
  }%
}%
%
%    \end{macrocode}
%
% To correctly support the \verb|pdfmark| method, for embedding
% PDF definitions with \verb|.ps| files in a non-intrusive way,
% an appropriate definition needs to be made \emph{before}
% the file \verb|pdfmark.def| is read. Other parameters are best
% set afterwards.
%
%    \begin{macrocode}
\g@addto@macro\Hy@FirstPageHook{%
  \headerps@out{%
    /betterpdfmark {%
      systemdict begin %
        dup /BP eq%
        {cleartomark gsave nulldevice [}%
        {dup /EP eq%
          {cleartomark cleartomark grestore}%
          {cleartomark}%
          ifelse%
        }ifelse %
      end%
    }def\Hy@ps@CR
    __pdfmark__ not{/pdfmark /betterpdfmark load def}if%
  }% end of \headerps@out
}% end of \AddToHook{shipout/firstpage}
%
\input{pdfmark.def}%
%
\ifx\@pdfproducer\relax
  \def\@pdfproducer{Textures + Distiller}%
\fi
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\providecommand*\@pdfview{XYZ}
\providecommand*\@pdfviewparams{ H.V}
%
%    \end{macrocode}
% These are called at the start and end of unboxed links;
% their job is to leave available PS variables called
% |pdf@llx pdf@lly pdf@urx pdf@ury|, which are the coordinates
% of the bounding rectangle of the link, and |pdf@hoff pdf@voff|
% which are the PDF page offsets.
% The Rect pair are called at the LL and UR corners of a box
% known to \TeX.
%    \begin{macrocode}
\Hy@AtBeginDocument{%
  \headerps@out{%
%    \end{macrocode}
% Textures lives in normal points, I think. So conversion from one
% coordinate system to another involves doing nothing.
%
%    \begin{macrocode}
    /vsize {\Hy@pageheight} def%
    /DvipsToPDF {} def%
    /PDFToDvips {} def%
    /BPToDvips {} def%
    /HyperBorder  { 1 PDFToDvips } def\Hy@ps@CR
    /H.V {pdf@hoff pdf@voff null} def\Hy@ps@CR
    /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def\Hy@ps@CR
    /H.S {%
      currentpoint %
      HyperBorder add /pdf@lly exch def %
      dup DvipsToPDF 72 add /pdf@hoff exch def %
      HyperBorder sub /pdf@llx exch def%
    } def\Hy@ps@CR
    /H.L {%
      2 sub %
      PDFToDvips /HyperBase exch def %
      currentpoint %
      HyperBase sub /pdf@ury exch def%
      /pdf@urx exch def%
    } def\Hy@ps@CR
    /H.A {%
      H.L %
      currentpoint exch pop %
      vsize 72 sub exch DvipsToPDF %
      HyperBase sub % baseline skip
      sub /pdf@voff exch def%
    } def\Hy@ps@CR
    /H.R {%
      currentpoint %
      HyperBorder sub /pdf@ury exch def %
      HyperBorder add /pdf@urx exch def %
      currentpoint exch pop vsize 72 sub %
      exch DvipsToPDF sub /pdf@voff exch def%
    } def\Hy@ps@CR
  }%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\setpdflinkmargin#1{%
  \begingroup
    \setlength{\dimen@}{#1}%
    \literalps@out{%
      /HyperBorder{\strip@pt\dimen@\space PDFToDvips}def%
    }%
  \endgroup
}
%    \end{macrocode}
%    \begin{macrocode}
\Hy@AtBeginDocument{%
  \ifHy@colorlinks
    \headerps@out{/PDFBorder{/Border [0 0 0]}def}%
  \fi
}
%    \end{macrocode}
%    Textures provides built-in support for HyperTeX specials
%    so this part combines code from  \verb|hypertex.def| with what
%    is established by loading \verb|pdfmark.def|, or any other driver.
%    \begin{macrocode}
\expandafter\let\expandafter\keepPDF@SetupDoc
  \csname PDF@SetupDoc\endcsname
\def\PDF@SetupDoc{%
  \ifx\@baseurl\@empty
  \else
    \special{html:<base href="\@baseurl">}%
  \fi
  \keepPDF@SetupDoc
}
\Hy@WrapperDef\hyper@anchor#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \let\protect=\string
    \special{html:<a name=%
        \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
  \endgroup
  \Hy@activeanchortrue
  \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
  \special{html:</a>}%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\Hy@WrapperDef\hyper@anchorstart#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \hyper@chars
    \special{html:<a name=%
        \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
  \endgroup
  \Hy@activeanchortrue
}
\def\hyper@anchorend{%
  \special{html:</a>}%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\def\@urltype{url}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \expandafter\Hy@colorlink\csname @#1color\endcsname
  \def\Hy@tempa{#1}%
  \ifx\Hy@tempa\@urltype
    \special{html:<a href=\hyper@quote#2\hyper@quote>}%
  \else
    \begingroup
      \hyper@chars
      \special{%
        html:<a href=%
        \hyper@quote\#\HyperDestNameFilter{#2}\hyper@quote>%
      }%
    \endgroup
  \fi
}
\def\hyper@linkend{%
  \special{html:</a>}%
  \Hy@endcolorlink
}
\def\hyper@linkfile#1#2#3{%
  \hyper@linkurl{#1}{%
    \Hy@linkfileprefix#2\ifx\\#3\\\else\##3\fi
  }%
}
\def\hyper@linkurl#1#2{%
  \leavevmode
  \ifHy@raiselinks
    \Hy@SaveSpaceFactor
    \Hy@SaveSavedSpaceFactor
    \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
    \Hy@RestoreSavedSpaceFactor
    \@linkdim\dp\@tempboxa
    \lower\@linkdim\hbox{%
      \hyper@chars
      \special{html:<a href=\hyper@quote#2\hyper@quote>}%
    }%
    \Hy@colorlink\@urlcolor
      \Hy@RestoreSpaceFactor
      #1\Hy@xspace@end
      \Hy@SaveSpaceFactor
      \@linkdim\ht\@tempboxa
      \advance\@linkdim by -6.5\p@
      \raise\@linkdim\hbox{\special{html:</a>}}%
    \Hy@endcolorlink
    \Hy@RestoreSpaceFactor
  \else
    \begingroup
      \hyper@chars
      \special{html:<a href=\hyper@quote#2\hyper@quote>}%
      \Hy@colorlink\@urlcolor#1\Hy@xspace@end
      \special{html:</a>}%
      \Hy@endcolorlink
    \endgroup
  \fi
}
%    \end{macrocode}
%    Very poor implementation of \cs{hyper@link} without considering |#1|.
%    \begin{macrocode}
\def\hyper@link#1#2#3{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \hyper@linkurl{#3}{\#\HyperDestNameFilter{#2}}%
}
\def\hyper@image#1#2{%
  \begingroup
    \hyper@chars
    \special{html:<img src=\hyper@quote#1\hyper@quote>}%
  \endgroup
}
%</textures>
%    \end{macrocode}
% \subsection{dvipsone}
%    \begin{macrocode}
% \subsection{dvipsone driver}
% Over-ride the default setup macro in pdfmark driver to use Y\&Y
% |\special| commands.
%<*dvipsone>
\providecommand*{\XR@ext}{pdf}
\let\Hy@raisedlink\@empty
\providecommand*\@pdfborder{0 0 1}
\providecommand*\@pdfborderstyle{}
\def\literalps@out#1{\special{ps:#1}}%
\def\headerps@out#1{\special{headertext=#1}}%
\input{pdfmark.def}%
\HyInfo@AddonUnsupportedtrue
\def\PDF@FinishDoc{%
  \Hy@UseMaketitleInfos
  \HyInfo@TrappedUnsupported
  \special{PDF: Keywords \@pdfkeywords}%
  \special{PDF: Title \@pdftitle}%
  \special{PDF: Creator \@pdfcreator}%
  \ifx\@pdfcreationdate\@empty
  \else
    \special{PDF: CreationDate \@pdfcreationdate}%
  \fi
  \ifx\@pdfmoddate\@empty
  \else
    \special{PDF: ModDate \@pdfmoddate}%
  \fi
  \special{PDF: Author \@pdfauthor}%
  \ifx\@pdfproducer\relax
  \else
    \special{PDF: Producer \@pdfproducer}%
  \fi
  \special{PDF: Subject \@pdfsubject}%
  \Hy@DisableOption{pdfauthor}%
  \Hy@DisableOption{pdftitle}%
  \Hy@DisableOption{pdfsubject}%
  \Hy@DisableOption{pdfcreator}%
  \Hy@DisableOption{addtopdfcreator}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfcreationdate}%
  \Hy@DisableOption{pdfmoddate}%
  \Hy@DisableOption{pdfproducer}%
  \Hy@DisableOption{pdfkeywords}%
  \Hy@DisableOption{pdftrapped}%
  \Hy@DisableOption{pdfinfo}%
}
\def\PDF@SetupDoc{%
  \def\Hy@temp{}%
  \ifx\@pdfstartpage\@empty
  \else
    \ifx\@pdfstartview\@empty
    \else
      \edef\Hy@temp{%
        ,Page=\@pdfstartpage
        ,View=\@pdfstartview
      }%
    \fi
  \fi
  \edef\Hy@temp{%
    \noexpand\pdfmark{%
      pdfmark=/DOCVIEW,%
      PageMode=/\@pdfpagemode
      \Hy@temp
    }%
  }%
  \Hy@temp
  \ifx\@pdfpagescrop\@empty
  \else
    \pdfmark{pdfmark=/PAGES,CropBox=\@pdfpagescrop}%
  \fi
  \edef\Hy@temp{%
    \ifHy@pdftoolbar\else /HideToolbar true\fi
    \ifHy@pdfmenubar\else /HideMenubar true\fi
    \ifHy@pdfwindowui\else /HideWindowUI true\fi
    \ifHy@pdffitwindow /FitWindow true\fi
    \ifHy@pdfcenterwindow /CenterWindow true\fi
    \ifHy@pdfdisplaydoctitle /DisplayDocTitle true\fi
    \Hy@UseNameKey{NonFullScreenPageMode}\@pdfnonfullscreenpagemode
    \Hy@UseNameKey{Direction}\@pdfdirection
    \Hy@UseNameKey{ViewArea}\@pdfviewarea
    \Hy@UseNameKey{ViewClip}\@pdfviewclip
    \Hy@UseNameKey{PrintArea}\@pdfprintarea
    \Hy@UseNameKey{PrintClip}\@pdfprintclip
    \Hy@UseNameKey{PrintScaling}\@pdfprintscaling
    \Hy@UseNameKey{Duplex}\@pdfduplex
    \ifx\@pdfpicktraybypdfsize\@empty
    \else
      /PickTrayByPDFSize \@pdfpicktraybypdfsize
    \fi
    \ifx\@pdfprintpagerange\@empty
    \else
      /PrintPageRange[\@pdfprintpagerange]%
    \fi
    \ifx\@pdfnumcopies\@empty
    \else
      /NumCopies \@pdfnumcopies
    \fi
  }%
  \Hy@pstringdef\Hy@pstringB{\@baseurl}%
  \pdfmark{%
    pdfmark=/PUT,%
    Raw={%
      \string{Catalog\string}<<%
        \ifx\Hy@temp\@empty
        \else
          /ViewerPreferences<<\Hy@temp>>%
        \fi
        \Hy@UseNameKey{PageLayout}\@pdfpagelayout
        \ifx\@pdflang\relax
        \else
          /Lang(\@pdflang)%
        \fi
        \ifx\@baseurl\@empty
        \else
          /URI<</Base(\Hy@pstringB)>>%
        \fi
      >>%
    }%
  }%
}
\providecommand*\@pdfview{XYZ}
\providecommand*\@pdfviewparams{ %
  gsave revscl currentpoint grestore %
  72 add exch pop null exch null%
}
\def\Hy@BorderArrayPatch{BorderArrayPatch}
%    \end{macrocode}
% These are called at the start and end of unboxed links;
% their job is to leave available PS variables called
% |pdf@llx pdf@lly pdf@urx pdf@ury|, which are the coordinates
% of the bounding rectangle of the link, and |pdf@hoff pdf@voff|
% which are the PDF page offsets. These latter are currently not
% used in the dvipsone setup.
% The Rect pair are called at the LL and UR corners of a box
% known to \TeX.
%    \begin{macrocode}
\g@addto@macro\Hy@FirstPageHook{%
  \headerps@out{%
%    \end{macrocode}
% dvipsone lives in scaled points; does this mean 65536 or 65781?
%    \begin{macrocode}
    /DvipsToPDF { 65781 div  } def%
    /PDFToDvips { 65781 mul } def%
    /BPToDvips{65781 mul}def%
    /HyperBorder  { 1 PDFToDvips } def%
    /H.B {/Rect[pdf@llx pdf@lly pdf@urx pdf@ury]} def%
%    \end{macrocode}
% The values inside the /Boder array are not taken literally, but
% interpreted by ghostscript using the resolution of the dvi driver.
% I don't know how other distiller programs behaves in this manner.
%    \begin{macrocode}
    /BorderArrayPatch{%
      [exch{%
        dup dup type/integertype eq exch type/realtype eq or%
        {BPToDvips}if%
      }forall]%
    }def%
%    \end{macrocode}
%
%    \begin{macrocode}
    /H.S {%
      currentpoint %
      HyperBorder add /pdf@lly exch def %
      dup DvipsToPDF 72 add /pdf@hoff exch def %
      HyperBorder sub /pdf@llx exch def%
    } def%
    /H.L {%
      2 sub %
      PDFToDvips /HyperBase exch def %
      currentpoint %
      HyperBase sub /pdf@ury exch def%
      /pdf@urx exch def%
    } def%
    /H.A {%
      H.L %
      currentpoint exch pop %
      HyperBase sub % baseline skip
      DvipsToPDF /pdf@voff exch def%
    } def%
    /H.R {%
      currentpoint %
      HyperBorder sub /pdf@ury exch def %
      HyperBorder add /pdf@urx exch def %
      currentpoint exch pop DvipsToPDF /pdf@voff exch def%
    } def%
  }%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\setpdflinkmargin#1{%
  \begingroup
    \setlength{\dimen@}{#1}%
    \literalps@out{%
      /HyperBorder{\strip@pt\dimen@\space PDFToDvips}def%
    }%
  \endgroup
}
%    \end{macrocode}
%    \begin{macrocode}
%</dvipsone>
%    \end{macrocode}
%
% \subsection{TeX4ht}
%    \begin{macrocode}
%<*tex4ht>
\providecommand*{\XR@ext}{html}
\let\Hy@raisedlink\@empty
\@ifpackageloaded{tex4ht}{%
  \Hy@InfoNoLine{tex4ht is already loaded}%
}{%
  \RequirePackage[htex4ht]{tex4ht}%
}
\hyperlinkfileprefix{}
\let\PDF@FinishDoc\@empty
\def\PDF@SetupDoc{%
  \ifx\@baseurl\@empty
  \else
    \special{t4ht=<base href="\@baseurl">}%
  \fi
}
\Hy@WrapperDef\hyper@anchor#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \let\protect=\string
    \special{t4ht=<a name=%
        \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
  \endgroup
  \Hy@activeanchortrue
  \Hy@colorlink\@anchorcolor\anchor@spot\Hy@endcolorlink
  \special{t4ht=</a>}%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\Hy@WrapperDef\hyper@anchorstart#1{%
  \Hy@SaveLastskip
  \Hy@VerboseAnchor{#1}%
  \begingroup
    \hyper@chars\special{t4ht=<a name=%
        \hyper@quote\HyperDestNameFilter{#1}\hyper@quote>}%
  \endgroup
  \Hy@activeanchortrue
}
\def\hyper@anchorend{%
  \special{t4ht=</a>}%
  \Hy@activeanchorfalse
  \Hy@RestoreLastskip
}
\def\@urltype{url}
\def\hyper@linkstart#1#2{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \expandafter\Hy@colorlink\csname @#1color\endcsname
  \def\Hy@tempa{#1}%
  \ifx\Hy@tempa\@urltype
    \special{t4ht=<a href=\hyper@quote#2\hyper@quote>}%
  \else
    \begingroup
      \hyper@chars
      \special{t4ht=<a href=%
          \hyper@quote\#\HyperDestNameFilter{#2}\hyper@quote>}%
    \endgroup
  \fi
}
\def\hyper@linkend{%
  \special{t4ht=</a>}%
  \Hy@endcolorlink
}
\def\hyper@linkfile#1#2#3{%
  \hyper@linkurl{#1}{\Hy@linkfileprefix#2\ifx\\#3\\\else\##3\fi}%
}
\def\hyper@linkurl#1#2{%
  \leavevmode
  \ifHy@raiselinks
    \Hy@SaveSpaceFactor
    \Hy@SaveSavedSpaceFactor
    \sbox\@tempboxa{\Hy@RestoreSpaceFactor#1}%
    \Hy@RestoreSavedSpaceFactor
    \@linkdim\dp\@tempboxa
    \lower\@linkdim\hbox{%
      \begingroup
        \hyper@chars
        \special{%
          t4ht=<a href=\hyper@quote#2\hyper@quote>%
        }%
      \endgroup
    }%
    \Hy@colorlink\@urlcolor
      \Hy@RestoreSpaceFactor
      #1\Hy@xspace@end
      \Hy@SaveSpaceFactor
    \Hy@endcolorlink
    \@linkdim\ht\@tempboxa
    \advance\@linkdim by -6.5\p@
    \raise\@linkdim\hbox{\special{t4ht=</a>}}%
    \Hy@RestoreSpaceFactor
 \else
   \begingroup
     \hyper@chars
     \special{t4ht=<a href=\hyper@quote#2\hyper@quote>}%
     \Hy@colorlink\@urlcolor
       #1\Hy@xspace@end
     \Hy@endcolorlink
     \special{t4ht=</a>}%
   \endgroup
 \fi
}
%    \end{macrocode}
%    Poor implementation of \cs{hyper@link} without considering |#1|.
%    \begin{macrocode}
\def\hyper@link#1#2#3{%
  \Hy@VerboseLinkStart{#1}{#2}%
  \hyper@linkurl{#3}{\#\HyperDestNameFilter{#2}}%
}
\def\hyper@image#1#2{%
  \begingroup
    \hyper@chars
    \special{t4ht=<img src=\hyper@quote#1\hyper@quote>}%
  \endgroup
}
\let\autoref\ref
\ifx \rEfLiNK \UnDef
  \def\rEfLiNK #1#2{#2}%
\fi
\let\backref\@gobble
%    \end{macrocode}
%    Fix for tex4ht.
%    \begin{macrocode}
\AtBeginDocument{%
  \expandafter
  \let\expandafter\Hy@OrgMakeLabel\csname Make:Label\endcsname
  \expandafter\def\csname Make:Label\endcsname#1#2{%
    \ifhmode
      \Hy@SaveSpaceFactor
    \else
      \global\Hy@SavedSpaceFactor=1000 %
    \fi
    \Hy@OrgMakeLabel{#1}{%
      \Hy@RestoreSpaceFactor
      #2\Hy@xspace@end%
      \Hy@SaveSpaceFactor
    }%
    \Hy@RestoreSpaceFactor
  }%
}
%</tex4ht>
%<*tex4htcfg>
\IfFileExists{\jobname.cfg}{\endinput}{}
\Preamble{html}
   \begin{document}%
\EndPreamble
\def\TeX{TeX}
\def\OMEGA{Omega}
\def\LaTeX{La\TeX}
\def\LaTeXe{\LaTeX2e}
\def\eTeX{e-\TeX}
\def\MF{Metafont}
\def\MP{MetaPost}
%</tex4htcfg>
%    \end{macrocode}
%
% \section{Driver-specific form support}
% \subsection{pdfmarks}
% change 2020-06-20: added /Euro to encoding
%    \begin{macrocode}
%<*pdfmark>
\long\def\@Form[#1]{%
\g@addto@macro\Hy@FirstPageHook{%
  \headerps@out{%
[%
  /_objdef{pdfDocEncoding}%
  /type/dict%
/OBJ pdfmark%
[%
  {pdfDocEncoding}%
  <<%
    /Type/Encoding%
    /Differences[%
      24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek/ring%
        /tilde %
      39/quotesingle %
      96/grave %
      128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin%
         /fraction/guilsinglleft/guilsinglright/minus/perthousand%
         /quotedblbase/quotedblleft/quotedblright/quoteleft%
         /quoteright/quotesinglbase/trademark/fi/fl/Lslash/OE/Scaron%
         /Ydieresis/Zcaron/dotlessi/lslash/oe/scaron/zcaron %
      160/Euro %
      164/currency %
      166/brokenbar %
      168/dieresis/copyright/ordfeminine %
      172/logicalnot/.notdef/registered/macron/degree/plusminus%
         /twosuperior/threesuperior/acute/mu %
      183/periodcentered/cedilla/onesuperior/ordmasculine %
      188/onequarter/onehalf/threequarters %
      192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE%
         /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave%
         /Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute%
         /Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave%
         /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls%
         /agrave/aacute/acircumflex/atilde/adieresis/aring/ae%
         /ccedilla/egrave/eacute/ecircumflex/edieresis/igrave%
         /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute%
         /ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute%
         /ucircumflex/udieresis/yacute/thorn/ydieresis%
    ]%
  >>%
/PUT pdfmark%
[%
   /_objdef{ZaDb}%
   /type/dict%
/OBJ pdfmark%
[%
  {ZaDb}%
  <<%
    /Type/Font%
    /Subtype/Type1%
    /Name/ZaDb%
    /BaseFont/ZapfDingbats%
  >>%
/PUT pdfmark%
[%
  /_objdef{Helv}%
  /type/dict%
/OBJ pdfmark%
[%
  {Helv}%
  <<%
    /Type/Font%
    /Subtype/Type1%
    /Name/Helv%
    /BaseFont/Helvetica%
    /Encoding{pdfDocEncoding}%
  >>%
/PUT pdfmark%
[%
  /_objdef{aform}%
  /type/dict%
/OBJ pdfmark%
[%
  /_objdef{afields}%
  /type/array%
/OBJ pdfmark%
[%
  /_objdef{corder}%
  /type/array%
/OBJ pdfmark%
{%
  [%
    /BBox[0 0 100 100]%
    /_objdef{Check}%
  /BP pdfmark %
  1 0 0 setrgbcolor%
  /ZapfDingbats 80 selectfont %
  20 20 moveto%
  (4)show%
  [/EP pdfmark%
  [%
    /BBox[0 0 100 100]%
    /_objdef{Cross}%
  /BP pdfmark %
  1 0 0 setrgbcolor%
  /ZapfDingbats 80 selectfont %
  20 20 moveto%
  (8)show%
  [/EP pdfmark%
  [%
    /BBox[0 0 250 100]%
    /_objdef{Submit}%
  /BP pdfmark %
  0.6 setgray %
  0 0 250 100 rectfill %
  1 setgray %
  2 2 moveto %
  2 98 lineto %
  248 98 lineto %
  246 96 lineto %
  4 96 lineto %
  4 4 lineto %
  fill %
  0.34 setgray %
  248 98 moveto %
  248 2 lineto %
  2 2 lineto %
  4 4 lineto %
  246 4 lineto %
  246 96 lineto %
  fill%
  /Helvetica 76 selectfont %
  0 setgray %
  8 22.5 moveto%
  (Submit)show%
  [/EP pdfmark%
  [%
    /BBox[0 0 250 100]%
    /_objdef{SubmitP}%
  /BP pdfmark %
  0.6 setgray %
  0 0 250 100 rectfill %
  0.34 setgray %
  2 2 moveto %
  2 98 lineto %
  248 98 lineto %
  246 96 lineto %
  4 96 lineto %
  4 4 lineto %
  fill %
  1 setgray %
  248 98 moveto %
  248 2 lineto %
  2 2 lineto %
  4 4 lineto %
  246 4 lineto %
  246 96 lineto %
  fill%
  /Helvetica 76 selectfont %
  0 setgray %
   10 20.5 moveto%
  (Submit)show%
  [/EP pdfmark%
} ?pdfmark%
[%
  {aform}%
  <<%
    /Fields{afields}%
    /DR<<%
      /Font<<%
        /ZaDb{ZaDb}%
        /Helv{Helv}%
      >>%
    >>%
    /DA(/Helv 10 Tf 0 g)%
    /CO{corder}%
    \ifHy@pdfa
    \else
      \ifHyField@NeedAppearances
        /NeedAppearances true%
      \fi
    \fi
  >>%
/PUT pdfmark%
[%
  {Catalog}%
  <<%
    /AcroForm{aform}%
  >>%
/PUT pdfmark%
}}%
  \kvsetkeys{Form}{#1}%
}
\let\@endForm\@empty
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
  \Hy@Message{Sorry, pdfmark drivers do not support FORM gauges}%
}
%    \end{macrocode}
%    \begin{macrocode}
\newcount\HyField@AnnotCount
\HyField@AnnotCount=\z@
\def\HyField@AdvanceAnnotCount{%
  \global\advance\HyField@AnnotCount\@ne
}
\def\HyField@TheAnnotCount{%
  \the\HyField@AnnotCount
}
%    \end{macrocode}
%    \begin{macrocode}
\edef\Fld@pageobjref{/P\string{ThisPage\string}}
%    \end{macrocode}
%    \begin{macrocode}
\def\HyField@AddToFields#1{%
  \pdfmark{%
    pdfmark=/APPEND,%
    Raw={%
      \string{afields\string}%
      \string{#1\HyField@TheAnnotCount\string}%
    }%
  }%
  \ifx\Fld@calculate@code\@empty
  \else
    \pdfmark{%
      pdfmark=/APPEND,%
      Raw={%
        \string{corder\string}%
        \string{#1\HyField@TheAnnotCount\string}%
      }%
    }%
  \fi
}
%    \end{macrocode}
%    \begin{macrocode}
\def\@TextField[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \let\Fld@default\@empty
  \let\Fld@value\@empty
  \def\Fld@width{\DefaultWidthofText}%
  \def\Fld@height{%
    \ifFld@multiline
      \DefaultHeightofTextMultiline
    \else
      \DefaultHeightofText
    \fi
  }%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofText,#1%
    }%
    \HyField@FlagsText
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \ifx\Fld@value\@empty\def\Fld@value{\Fld@default}\fi
    \HyField@AdvanceAnnotCount
    \LayoutTextField{#2}{%
      \leavevmode
      \Hy@escapeform\PDFForm@Text
      \pdfmark[\MakeTextField{\Fld@width}{\Fld@height}]{%
        pdfmark=/ANN,%
        objdef=text\HyField@TheAnnotCount,%
        Raw={\PDFForm@Text}%
      }%
    }%
    \HyField@AddToFields{text}%
  \endgroup
}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
  \def\Fld@name{#2}%
  \let\Fld@default\relax
  \let\Fld@value\relax
  \def\Fld@width{\DefaultWidthofChoiceMenu}%
  \def\Fld@height{\DefaultHeightofChoiceMenu}%
  \begingroup
    \Fld@menulength=0 %
    \@tempdima\z@
    \@for\@curropt:=#3\do{%
      \expandafter\Fld@checkequals\@curropt==\\%
      \Hy@StepCount\Fld@menulength
      \settowidth{\@tempdimb}{\@currDisplay}%
      \ifdim\@tempdimb>\@tempdima\@tempdima\@tempdimb\fi
    }%
    \advance\@tempdima by 15\p@
    \begingroup
      \HyField@SetKeys{#1}%
    \edef\x{\endgroup
      \noexpand\expandafter
      \noexpand\HyField@SetKeys
      \noexpand\expandafter{%
        \expandafter\noexpand\csname DefaultOptionsof%
          \ifFld@radio
            Radio%
          \else
            \ifFld@combo
              \ifFld@popdown
                PopdownBox%
              \else
                ComboBox%
              \fi
            \else
              ListBox%
            \fi
          \fi
        \endcsname
      }%
    }\x
    \HyField@SetKeys{#1}%
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \ifx\Fld@value\relax
      \let\Fld@value\Fld@default
    \fi
    \LayoutChoiceField{#2}{%
      \ifFld@radio
        \HyField@FlagsRadioButton
        \@@Radio{#3}%
      \else
        \begingroup
          \HyField@FlagsChoice
          \ifdim\Fld@width<\@tempdima
            \ifdim\@tempdima<1cm\@tempdima1cm\fi
            \edef\Fld@width{\the\@tempdima}%
          \fi
          \ifFld@combo
          \else
            \@tempdima=\the\Fld@menulength\Fld@charsize
            \advance\@tempdima by \Fld@borderwidth bp %
            \advance\@tempdima by \Fld@borderwidth bp %
            \edef\Fld@height{\the\@tempdima}%
          \fi
          \@@Listbox{#3}%
        \endgroup
      \fi
    }%
  \endgroup
}
\def\@@Radio#1{%
  \Fld@listcount=0 %
  \EdefEscapeName\Fld@default{\Fld@default}%
  \@for\@curropt:=#1\do{%
    \expandafter\Fld@checkequals\@curropt==\\%
    \EdefEscapeName\@currValue{\@currValue}%
    \Hy@StepCount\Fld@listcount
    \@currDisplay\space
    \Hy@escapeform\PDFForm@Radio
    \ifnum\Fld@listcount=1 %
      \HyField@AdvanceAnnotCount
    \fi
    \pdfmark[\MakeRadioField{\Fld@width}{\Fld@height}]{%
      pdfmark=/ANN,%
      objdef=\ifnum\Fld@listcount=1 radio\HyField@TheAnnotCount\fi,%
      Raw={%
        \PDFForm@Radio /AP <</N <</\@currValue\space {Check}>> >>%
      }%
    } % deliberate space between radio buttons
    \ifnum\Fld@listcount=1 %
      \HyField@AddToFields{radio}%
    \fi
  }%
}
\newcount\Fld@listcount
\def\@@Listbox#1{%
  \HyField@PDFChoices{#1}%
  \Hy@escapeform\PDFForm@List
  \HyField@AdvanceAnnotCount
  \pdfmark[\MakeChoiceField{\Fld@width}{\Fld@height}]{%
    pdfmark=/ANN,%
    objdef=list\HyField@TheAnnotCount,%
    Raw={\PDFForm@List}%
  }%
  \HyField@AddToFields{list}%
}
\def\@PushButton[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofPushButton,#1%
    }%
    \ifHy@pdfa
      \Hy@Error{%
        PDF/A: Push button with JavaScript is prohibited%
      }\@ehc
      \LayoutPushButtonField{%
        \leavevmode
        \MakeButtonField{#2}%
      }%
    \else
      \HyField@FlagsPushButton
      \ifFld@hidden\def\Fld@width{1sp}\fi
      \HyField@AdvanceAnnotCount
      \LayoutPushButtonField{%
        \leavevmode
        \Hy@escapeform\PDFForm@Push
        \pdfmark[\MakeButtonField{#2}]{%
          pdfmark=/ANN,%
          objdef=push\HyField@TheAnnotCount,%
          Raw={\PDFForm@Push}%
        }%
      }%
      \HyField@AddToFields{push}%
    \fi
  \endgroup
}
\def\@Submit[#1]#2{%
  \def\Fld@width{\DefaultWidthofSubmit}%
  \def\Fld@height{\DefaultHeightofSubmit}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofSubmit,#1%
    }%
    \HyField@FlagsPushButton
    \HyField@FlagsSubmit
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \Hy@escapeform\PDFForm@Submit
    \HyField@AdvanceAnnotCount
    \pdfmark[\MakeButtonField{#2}]{%
      pdfmark=/ANN,%
      objdef=submit\HyField@TheAnnotCount,%
      Raw={\PDFForm@Submit /AP<</N{Submit}/D{SubmitP}>>}%
    }%
    \HyField@AddToFields{submit}%
  \endgroup
}
\def\@Reset[#1]#2{%
  \def\Fld@width{\DefaultWidthofReset}%
  \def\Fld@height{\DefaultHeightofReset}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofReset,#1%
    }%
    \leavevmode
    \ifHy@pdfa
      \Hy@Error{%
        PDF/A: Reset action is prohibited%
      }\@ehc
      \MakeButtonField{#2}%
    \else
      \HyField@FlagsPushButton
      \ifFld@hidden\def\Fld@width{1sp}\fi
      \Hy@escapeform\PDFForm@Reset
      \HyField@AdvanceAnnotCount
      \pdfmark[\MakeButtonField{#2}]{%
        pdfmark=/ANN,%
        objdef=reset\HyField@TheAnnotCount,%
        Raw={\PDFForm@Reset}%
      }%
      \HyField@AddToFields{reset}%
    \fi
  \endgroup
}%
\def\@CheckBox[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \def\Fld@default{0}%
  \begingroup
    \def\Fld@width{\DefaultWidthofCheckBox}%
    \def\Fld@height{\DefaultHeightofCheckBox}%
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofCheckBox,#1%
    }%
    \HyField@FlagsCheckBox
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \HyField@AdvanceAnnotCount
    \LayoutCheckField{#2}{%
      \leavevmode
      \Hy@escapeform\PDFForm@Check
      \pdfmark[\MakeCheckField{\Fld@width}{\Fld@height}]{%
        pdfmark=/ANN,%
        objdef=check\HyField@TheAnnotCount,%
        Raw={\PDFForm@Check}%
      }%
    }%
    \HyField@AddToFields{check}%
  \endgroup
}
%</pdfmark>
%    \end{macrocode}
%
% \subsection{HyperTeX}
%    \begin{macrocode}
%<*hypertex>
\def\@Form[#1]{%
  \Hy@Message{Sorry, HyperTeX does not support FORMs}%
}
\let\@endForm\@empty
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
  \Hy@Message{Sorry, HyperTeX does not support FORM gauges}%
}
\def\@TextField[#1]#2{% parameters, label
  \Hy@Message{Sorry, HyperTeX does not support FORM text fields}%
}
\def\@CheckBox[#1]#2{% parameters, label
  \Hy@Message{Sorry, HyperTeX does not support FORM checkboxes}%
}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
  \Hy@Message{Sorry, HyperTeX does not support FORM choice menus}%
}
\def\@PushButton[#1]#2{% parameters, label
  \Hy@Message{Sorry, HyperTeX does not support FORM pushbuttons}%
}
\def\@Reset[#1]#2{%
  \Hy@Message{Sorry, HyperTeX does not support FORMs}%
}
\def\@Submit[#1]#2{%
  \Hy@Message{Sorry, HyperTeX does not support FORMs}%
}
%</hypertex>
%    \end{macrocode}
% \subsection{TeX4ht}
%    \begin{macrocode}
%<*tex4ht>
\def\@Form[#1]{%
  \kvsetkeys{Form}{#1}%
  \HCode{<form action="\Form@action" method="\Form@method">}%
}
\def\@endForm{\HCode{</form>}}
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
  \Hy@Message{Sorry, TeX4ht does not support gauges}%
}
\def\@TextField[#1]#2{% parameters, label
  \let\Hy@reserved@a\@empty
  \def\Fld@name{#2}%
  \let\Fld@default\@empty
  \bgroup
    \Field@toks={ }%
    \kvsetkeys{Field}{#1}%
    \HCode{<label for="\Fld@name">#2</label>}%
    \ifFld@password
      \@@PasswordField
    \else
      \@@TextField
    \fi
  \egroup
}
\def\@@PasswordField{%
  \HCode{%
    <input type="password" %
     id="\Fld@name" %
     name="\Fld@name" %
     \ifFld@hidden type="hidden" \fi
     value="\Fld@default" %
     \the\Field@toks
    >%
  }%
}
\def\@@TextField{%
  \ifFld@multiline
    \HCode{<textarea %
      \ifFld@readonly readonly \fi
      id="\Fld@name" %
      name="\Fld@name" %
      \ifFld@hidden type="hidden" \fi
      \the\Field@toks>%
    }%
    \Fld@default
    \HCode{</textarea>}%
  \else
    \HCode{<input type="textbox" %
      \ifFld@readonly readonly \fi
      id="\Fld@name" %
      name="\Fld@name" %
      \ifFld@hidden type="hidden" \fi
      value="\Fld@default" %
      \the\Field@toks>%
    }%
  \fi
}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
  \def\Fld@name{#2}%
  \let\Fld@default\@empty
  \let\Hy@reserved@a\relax
  \begingroup
    \expandafter\Fld@findlength#3\\%
    \Field@toks={ }%
    \kvsetkeys{Field}{#1}%
    #2%
    \ifFld@radio
      \expandafter\@@Radio#3\\%
    \else
      \expandafter\@@Menu#3\\%
    \fi
  \endgroup
}
\def\Fld@findlength#1\\{%
  \Fld@menulength=0 %
  \@for\@curropt:=#1\do{\Hy@StepCount\Fld@menulength}%
}
\def\@@Menu#1\\{%
  \HCode{<select size="\the\Fld@menulength" %
    name="\Fld@name" %
    \the\Field@toks>%
  }%
  \@for\@curropt:=#1\do{%
    \expandafter\Fld@checkequals\@curropt==\\%
    \HCode{<option %
      \ifx\@curropt\Fld@default selected \fi
      value="\@currValue">\@currDisplay</option>%
    }%
  }%
  \HCode{</select>}%
}
\def\@@Radio#1\\{%
  \@for\@curropt:=#1\do{%
    \expandafter\Fld@checkequals\@curropt==\\%
    \HCode{<input type="radio" %
      \ifx\@curropt\Fld@default checked \fi
      name="\Fld@name" %
      value="\@currValue" %
      \the\Field@toks>%
    }%
    \@currDisplay
  }%
}
\def\@PushButton[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \bgroup
    \Field@toks={ }%
    \kvsetkeys{Field}{#1}%
    \HCode{<input type="button" %
      name="\Fld@name" %
      value="#2" %
      \the\Field@toks>%
    }%
    \HCode{</button>}%
  \egroup
}
\def\@Submit[#1]#2{%
  \HCode{<button type="submit">#2</button>}%
}
\def\@Reset[#1]#2{%
  \HCode{<button type="reset">#2</button>}%
}
\def\@CheckBox[#1]#2{% parameters, label
  \let\Hy@reserved@a\@empty
  \def\Fld@name{#2}%
  \def\Fld@default{0}%
  \bgroup
    \Field@toks={ }%
    \kvsetkeys{Field}{#1}%
    \HCode{<input type="checkbox" %
      \ifFld@checked checked \fi
      \ifFld@disabled disabled \fi
      \ifFld@readonly readonly \fi
      name="\Fld@name" %
      \ifFld@hidden type="hidden" \fi
      value="\Fld@default" %
      \the\Field@toks>%
      #2%
    }%
  \egroup
}
%</tex4ht>
%    \end{macrocode}
%
% \subsection{pdfTeX}
%    \begin{macrocode}
%<*pdftex>
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
  \Hy@Message{Sorry, pdftex does not support FORM gauges}%
}
\def\MakeFieldObject#1#2{\sbox0{#1}%
  \immediate\pdfxform0 %
  \expandafter\edef\csname #2Object\endcsname{%
    \the\pdflastxform\space 0 R%
  }%
% \hbox to 0pt{\hskip-\maxdimen{\pdfrefxform \the\pdflastxform}}%
}%
\let\HyField@afields\@empty
\let\HyField@cofields\@empty
\@ifundefined{pdflastlink}
 {%
  \let\HyField@AddToFields\relax
  \PackageInfo{hyperref}{%
    You need pdfTeX 1.40.0 for setting the /Fields entry.%
    \MessageBreak
    Adobe Reader/Acrobat accepts an empty /Field array,%
    \MessageBreak
    but other PDF viewers might complain%
  }}%
 {%
  \let\HyField@AuxAddToFields\@gobble
  \let\HyField@AuxAddToCoFields\@gobbletwo
  \def\HyField@AfterAuxOpen{\Hy@AtBeginDocument}%
%    \end{macrocode}
%    Insertion sort for calculation field list.
%    In case of equal sort keys (for example, if `calculatesortkey`
%    is not used at all) the keys keep document calling order.
%    \begin{macrocode}
  \def\HyField@ABD@AuxAddToCoFields#1#2{%
    \begingroup
      \Hy@safe@activestrue
      \let\@secondoftwo\relax
      \ifx\HyField@cofields\@empty
        \xdef\HyField@cofields{%
          \@secondoftwo{#1}{ #2 0 R}%
        }%
      \else
        \let\@secondoftwo\relax
        \def\HyField@AddCoField##1##2##3{%
          \ifx##1\@empty
            \@secondoftwo{#1}{ #2 0 R}%
            \expandafter\@gobble
          \else
            \ifnum\pdfstrcmp{##2}{#1}>\z@
              \@secondoftwo{#1}{ #2 0 R}%
              \@secondoftwo{##2}{##3}%
              \expandafter\expandafter\expandafter\@gobble
            \else
              \@secondoftwo{##2}{##3}%
            \fi
          \fi
          \HyField@AddCoField
        }%
        \xdef\HyField@cofields{%
          \expandafter\HyField@AddCoField
          \HyField@cofields\@empty\@empty\@empty
        }%
      \fi
    \endgroup
  }%
  \Hy@AtBeginDocument{%
    \if@filesw
      \immediate\write\@mainaux{%
        \string\providecommand\string\HyField@AuxAddToFields[1]{}%
      }%
      \immediate\write\@mainaux{%
        \string\providecommand\string\HyField@AuxAddToCoFields[2]{}%
      }%
    \fi
    \let\HyField@AfterAuxOpen\@firstofone
    \def\HyField@AuxAddToFields#1{%
      \xdef\HyField@afields{%
        \ifx\HyField@afields\@empty
        \else
          \HyField@afields
          \space
        \fi
        #1 0 R%
      }%
    }%
    \let\HyField@AuxAddToCoFields\HyField@ABD@AuxAddToCoFields
  }%
  \def\HyField@AddToFields{%
    \expandafter\HyField@@AddToFields\expandafter{%
      \the\pdflastlink
    }%
    \ifx\Fld@calculate@code\@empty
    \else
      \begingroup
        \Hy@safe@activestrue
        \edef\Hy@temp{%
          \endgroup
          \if@filesw
            \write\@mainaux{%
              \string\HyField@AuxAddToCoFields{%
                \Fld@calculate@sortkey
              }{%
                \the\pdflastlink
              }%
            }%
          \fi
        }%
      \Hy@temp
    \fi
  }%
  \def\HyField@@AddToFields#1{%
    \HyField@AfterAuxOpen{%
      \if@filesw
        \write\@mainaux{%
          \string\HyField@AuxAddToFields{#1}%
        }%
      \fi
    }%
  }%
 }
\def\@Form[#1]{%
  \@ifundefined{textcolor}{\let\textcolor\@gobble}{}%
  \kvsetkeys{Form}{#1}%
  \pdf@ifdraftmode{}{%
    \Hy@FormObjects
    \ifnum\pdftexversion>13 %
      \pdfrefobj\OBJ@pdfdocencoding
      \pdfrefobj\OBJ@ZaDb
      \pdfrefobj\OBJ@Helv
    \fi
    \AddToHook{enddocument/afteraux}{%
      \immediate\pdfobj{%
        <<%
          /Fields[\HyField@afields]%
          \ifx\HyField@cofields\@empty
          \else
            /CO[\romannumeral-`\Q\HyField@cofields]%
          \fi
          /DR<<%
            /Font<<%
              /ZaDb \OBJ@ZaDb\space 0 R%
              /Helv \OBJ@Helv\space 0 R%
            >>%
          >>%
          /DA(/Helv 10 Tf 0 g)%
          \ifHy@pdfa
          \else
            \ifHyField@NeedAppearances
              /NeedAppearances true%
            \fi
          \fi
        >>%
      }%
      \edef\OBJ@acroform{\the\pdflastobj}%
      \pdfcatalog{/AcroForm \OBJ@acroform\space 0 R}%
    }%
  }%
  \MakeFieldObject{%
%    \end{macrocode}
%    Same as \verb|\ding{123}| of package pifont.
%    \begin{macrocode}
    \begingroup
      \fontfamily{pzd}%
      \fontencoding{U}%
      \fontseries{m}%
      \fontshape{n}%
      \selectfont
      \char123 %
    \endgroup
  }{Ding}%
  \MakeFieldObject{%
    \fbox{\textcolor{yellow}{\textsf{Submit}}}%
  }{Submit}%
  \MakeFieldObject{%
    \fbox{\textcolor{yellow}{\textsf{SubmitP}}}%
  }{SubmitP}%
}
\let\@endForm\@empty
%    \end{macrocode}
%    \begin{macrocode}
\let\HyAnn@AbsPageLabel\@empty
\let\Fld@pageobjref\@empty
\@ifundefined{pdfpageref}{%
}{%
  \@ifpackageloaded{zref-abspage}{%
    \newcount\HyAnn@Count
    \HyAnn@Count=\z@
    \def\HyAnn@AbsPageLabel{%
      \global\advance\HyAnn@Count by\@ne
      \zref@labelbyprops{HyAnn@\the\HyAnn@Count}{abspage}%
      \zref@refused{HyAnn@\the\HyAnn@Count}%
    }%
    \def\Fld@pageobjref{%
      \zref@ifrefundefined{HyAnn@\the\HyAnn@Count}{%
      }{%
        \zref@ifrefcontainsprop{HyAnn@\the\HyAnn@Count}{abspage}{%
          /P \pdfpageref
          \zref@extractdefault{HyAnn@\the\HyAnn@Count}{abspage}{1} %
          \space 0 R%
        }{%
        }%
      }%
    }%
  }{%
  }%
}
%    \end{macrocode}
%    \begin{macrocode}
\def\@TextField[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \let\Fld@default\@empty
  \let\Fld@value\@empty
  \def\Fld@width{\DefaultWidthofText}%
  \def\Fld@height{%
    \ifFld@multiline
      \DefaultHeightofTextMultiline
    \else
      \DefaultHeightofText
    \fi
  }%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofText,#1%
    }%
    \PDFForm@Name
    \HyField@FlagsText
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \ifx\Fld@value\@empty\def\Fld@value{\Fld@default}\fi
    \LayoutTextField{#2}{%
      \leavevmode
      \HyAnn@AbsPageLabel
      \Hy@escapeform\PDFForm@Text
      \pdfstartlink user {\PDFForm@Text}\relax
      \MakeTextField{\Fld@width}{\Fld@height}\pdfendlink
      \HyField@AddToFields
    }%
  \endgroup
}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
  \def\Fld@name{#2}%
  \let\Fld@default\relax
  \let\Fld@value\relax
  \def\Fld@width{\DefaultWidthofChoiceMenu}%
  \def\Fld@height{\DefaultHeightofChoiceMenu}%
  \begingroup
    \Fld@menulength=0 %
    \@tempdima\z@
    \@for\@curropt:=#3\do{%
      \expandafter\Fld@checkequals\@curropt==\\%
      \Hy@StepCount\Fld@menulength
      \settowidth{\@tempdimb}{\@currDisplay}%
      \ifdim\@tempdimb>\@tempdima\@tempdima\@tempdimb\fi
    }%
    \advance\@tempdima by 15\p@
    \begingroup
      \HyField@SetKeys{#1}%
    \edef\x{\endgroup
      \noexpand\expandafter
      \noexpand\HyField@SetKeys
      \noexpand\expandafter{%
        \expandafter\noexpand\csname DefaultOptionsof%
          \ifFld@radio
            Radio%
          \else
            \ifFld@combo
              \ifFld@popdown
                PopdownBox%
              \else
                ComboBox%
              \fi
            \else
              ListBox%
            \fi
          \fi
        \endcsname
      }%
    }\x
    \HyField@SetKeys{#1}%
    \PDFForm@Name
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \ifx\Fld@value\relax
      \let\Fld@value\Fld@default
    \fi
    \LayoutChoiceField{#2}{%
      \ifFld@radio
        \HyField@FlagsRadioButton
        \@@Radio{#3}%
      \else
        \begingroup
          \HyField@FlagsChoice
          \ifdim\Fld@width<\@tempdima
            \ifdim\@tempdima<1cm\@tempdima1cm\fi
            \edef\Fld@width{\the\@tempdima}%
          \fi
          \ifFld@combo
          \else
            \@tempdima=\the\Fld@menulength\Fld@charsize
            \advance\@tempdima by \Fld@borderwidth bp %
            \advance\@tempdima by \Fld@borderwidth bp %
            \edef\Fld@height{\the\@tempdima}%
          \fi
          \@@Listbox{#3}%
        \endgroup
      \fi
    }%
  \endgroup
}
\def\@@Radio#1{%
  \Fld@listcount=0 %
  \EdefEscapeName\Fld@default{\Fld@default}%
  \@for\@curropt:=#1\do{%
    \expandafter\Fld@checkequals\@curropt==\\%
    \EdefEscapeName\@currValue{\@currValue}%
    \Hy@StepCount\Fld@listcount
    \@currDisplay\space
    \leavevmode
    \HyAnn@AbsPageLabel
    \Hy@escapeform\PDFForm@Radio
    \pdfstartlink user {%
      \PDFForm@Radio
      /AP<<%
        /N<<%
%    \end{macrocode}
% Laurent.Guillope@math.univ-nantes.fr (Laurent Guillope)
% persuades me that this was wrong:
% |/\Fld@name\the\Fld@listcount|. But I leave it here to remind
% me that it is untested.
%    \begin{macrocode}
          /\@currValue\space \DingObject
        >>%
      >>%
    }%
    \relax
    \MakeRadioField{\Fld@width}{\Fld@height}\pdfendlink
    \ifnum\Fld@listcount=1 %
      \HyField@AddToFields
    \fi
    \space % deliberate space between radio buttons
  }%
}
\newcount\Fld@listcount
\def\@@Listbox#1{%
  \HyField@PDFChoices{#1}%
  \leavevmode
  \HyAnn@AbsPageLabel
  \Hy@escapeform\PDFForm@List
  \pdfstartlink user {\PDFForm@List}\relax
  \MakeChoiceField{\Fld@width}{\Fld@height}%
  \pdfendlink
  \HyField@AddToFields
}
\def\@PushButton[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofPushButton,#1%
    }%
    \PDFForm@Name
    \ifHy@pdfa
      \Hy@Error{%
        PDF/A: Push button with JavaScript is prohibited%
      }\@ehc
      \LayoutPushButtonField{%
        \leavevmode
        \MakeButtonField{#2}%
      }%
    \else
      \HyField@FlagsPushButton
      \ifFld@hidden\def\Fld@width{1sp}\fi
      \LayoutPushButtonField{%
        \leavevmode
        \HyAnn@AbsPageLabel
        \Hy@escapeform\PDFForm@Push
        \pdfstartlink user {\PDFForm@Push}\relax
        \MakeButtonField{#2}%
        \pdfendlink
        \HyField@AddToFields
      }%
    \fi
  \endgroup
}
\def\@Submit[#1]#2{%
  \def\Fld@width{\DefaultWidthofSubmit}%
  \def\Fld@height{\DefaultHeightofSubmit}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofSubmit,#1%
    }%
    \HyField@FlagsPushButton
    \HyField@FlagsSubmit
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \leavevmode
    \HyAnn@AbsPageLabel
    \Hy@escapeform\PDFForm@Submit
    \pdfstartlink user {%
      \PDFForm@Submit
      /AP<</N \SubmitObject/D \SubmitPObject>>%
    }%
    \relax
    \MakeButtonField{#2}%
    \pdfendlink
    \HyField@AddToFields
  \endgroup
}
\def\@Reset[#1]#2{%
  \def\Fld@width{\DefaultWidthofReset}%
  \def\Fld@height{\DefaultHeightofReset}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofReset,#1%
    }%
    \leavevmode
    \ifHy@pdfa
      \Hy@Error{%
        PDF/A: Reset action is prohibited%
      }\@ehc
      \MakeButtonField{#2}%
    \else
      \HyField@FlagsPushButton
      \ifFld@hidden\def\Fld@width{1sp}\fi
      \HyAnn@AbsPageLabel
      \Hy@escapeform\PDFForm@Reset
      \pdfstartlink user {\PDFForm@Reset}\relax
      \MakeButtonField{#2}%
      \pdfendlink
      \HyField@AddToFields
    \fi
  \endgroup
}
\def\@CheckBox[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \def\Fld@default{0}%
  \begingroup
    \def\Fld@width{\DefaultWidthofCheckBox}%
    \def\Fld@height{\DefaultHeightofCheckBox}%
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofCheckBox,#1%
    }%
    \PDFForm@Name
    \HyField@FlagsCheckBox
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \LayoutCheckField{#2}{%
      \leavevmode
      \HyAnn@AbsPageLabel
      \Hy@escapeform\PDFForm@Check
      \pdfstartlink user {\PDFForm@Check}\relax
      \MakeCheckField{\Fld@width}{\Fld@height}%
      \pdfendlink
      \HyField@AddToFields
    }%
  \endgroup
}
\def\Hy@FormObjects{%
  \pdfobj {%
    <<%
      /Type/Encoding%
      /Differences[%
        24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek%
          /ring/tilde %
        39/quotesingle %
        96/grave %
        128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin%
           /fraction/guilsinglleft/guilsinglright/minus/perthousand%
           /quotedblbase/quotedblleft/quotedblright/quoteleft%
           /quoteright/quotesinglbase/trademark/fi/fl/Lslash/OE%
           /Scaron/Ydieresis/Zcaron/dotlessi/lslash/oe/scaron/zcaron %
        160/Euro %
        164/currency %
        166/brokenbar %
        168/dieresis/copyright/ordfeminine %
        172/logicalnot/.notdef/registered/macron/degree/plusminus%
           /twosuperior/threesuperior/acute/mu %
        183/periodcentered/cedilla/onesuperior/ordmasculine %
        188/onequarter/onehalf/threequarters %
        192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE%
           /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave%
           /Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute%
           /Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave%
           /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls%
           /agrave/aacute/acircumflex/atilde/adieresis/aring/ae%
           /ccedilla/egrave/eacute/ecircumflex/edieresis/igrave%
           /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute%
           /ocircumflex/otilde/odieresis/divide/oslash/ugrave%
           /uacute/ucircumflex/udieresis/yacute/thorn/ydieresis%
      ]%
    >>%
  }%
  \xdef\OBJ@pdfdocencoding{\the\pdflastobj}%
  \pdfobj{%
    <<%
      /Type/Font%
      /Subtype/Type1%
      /Name/ZaDb%
      /BaseFont/ZapfDingbats%
    >>%
  }%
  \xdef\OBJ@ZaDb{\the\pdflastobj}%
  \pdfobj{%
    <<%
      /Type/Font%
      /Subtype/Type1%
      /Name/Helv%
      /BaseFont/Helvetica%
      /Encoding \OBJ@pdfdocencoding\space 0 R%
    >>%
  }%
  \xdef\OBJ@Helv{\the\pdflastobj}%
  \global\let\Hy@FormObjects\relax
}
%</pdftex>
%    \end{macrocode}
%
% \subsection{dvipdfm, xetex}
%    D. P. Story adapted the pdf\TeX{} forms part for dvipdfm, of which
%    version 0.12.7b or higher is required because of a bug.
%    \begin{macrocode}
%<*dvipdfm|xetex>
%    \end{macrocode}
%
%    \begin{macro}{\@Gauge}
%    \begin{macrocode}
\def\@Gauge[#1]#2#3#4{% parameters, label, minimum, maximum
  \Hy@Message{Sorry, dvipdfm/XeTeX does not support FORM gauges}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@Form}
%    \begin{macrocode}
\def\@Form[#1]{%
  \@ifundefined{textcolor}{\let\textcolor\@gobble}{}%
  \kvsetkeys{Form}{#1}%
  \Hy@FormObjects
  \@pdfm@mark{obj @afields []}%
  \@pdfm@mark{obj @corder []}%
  \@pdfm@mark{%
    obj @aform <<%
      /Fields @afields%
      /DR<<%
        /Font<<%
          /ZaDb @OBJZaDb%
          /Helv @OBJHelv%
        >>%
      >>%
      /DA(/Helv 10 Tf 0 g)%
      /CO @corder%
      \ifHy@pdfa
      \else
        \ifHyField@NeedAppearances
          /NeedAppearances true%
        \fi
      \fi
    >>%
  }%
  \@pdfm@mark{put @catalog <</AcroForm @aform>>}%
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\@endForm}
%    \begin{macrocode}
\let\@endForm\@empty
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\dvipdfm@setdim}
%    \cmd{\dvipdfm@setdim} sets dimensions for ann using
%    \cmd{\pdfm@box}.
%    \begin{macrocode}
\def\dvipdfm@setdim{%
  height \the\ht\pdfm@box\space
  width  \the\wd\pdfm@box\space
  depth  \the\dp\pdfm@box\space
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyField@AnnotCount}
%    \begin{macrocode}
\newcount\HyField@AnnotCount
\HyField@AnnotCount=\z@
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@AdvanceAnnotCount}
%    \begin{macrocode}
\def\HyField@AdvanceAnnotCount{%
  \global\advance\HyField@AnnotCount\@ne
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\HyField@TheAnnotCount}
%    \begin{macrocode}
\def\HyField@TheAnnotCount{%
  \the\HyField@AnnotCount
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Fld@pageobjref}
%    \begin{macrocode}
\def\Fld@pageobjref{/P @thispage}%
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HyField@AddToFields}
%    \begin{macrocode}
\def\HyField@AddToFields#1{%
  \@pdfm@mark{put @afields @#1\HyField@TheAnnotCount}%
  \ifx\Fld@calculate@code\@empty
  \else
    \@pdfm@mark{put @corder @#1\HyField@TheAnnotCount}%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@TextField}
%    \begin{macrocode}
\def\@TextField[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \let\Fld@default\@empty
  \let\Fld@value\@empty
  \def\Fld@width{\DefaultWidthofText}%
  \def\Fld@height{%
    \ifFld@multiline
      \DefaultHeightofTextMultiline
    \else
      \DefaultHeightofText
    \fi
  }%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofText,#1%
    }%
    \PDFForm@Name
    \HyField@FlagsText
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \ifx\Fld@value\@empty\def\Fld@value{\Fld@default}\fi
    \setbox\pdfm@box=\hbox{%
      \MakeTextField{\Fld@width}{\Fld@height}%
    }%
    \HyField@AdvanceAnnotCount
    \LayoutTextField{#2}{%
      \leavevmode
      \Hy@escapeform\PDFForm@Text
      \@pdfm@mark{%
        ann @text\HyField@TheAnnotCount\space
        \dvipdfm@setdim << \PDFForm@Text >>%
      }%
    }%
    \unhbox\pdfm@box
    \HyField@AddToFields{text}%
    % record in @afields array
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@ChoiceMenu}
%    \begin{macrocode}
\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
  \def\Fld@name{#2}%
  \let\Fld@default\relax
  \let\Fld@value\relax
  \def\Fld@width{\DefaultWidthofChoiceMenu}%
  \def\Fld@height{\DefaultHeightofChoiceMenu}%
  \begingroup
    \Fld@menulength=0 %
    \@tempdima\z@
    \@for\@curropt:=#3\do{%
      \expandafter\Fld@checkequals\@curropt==\\%
      \Hy@StepCount\Fld@menulength
      \settowidth{\@tempdimb}{\@currDisplay}%
      \ifdim\@tempdimb>\@tempdima\@tempdima\@tempdimb\fi
    }%
    \advance\@tempdima by 15\p@
    \begingroup
      \HyField@SetKeys{#1}%
    \edef\x{\endgroup
      \noexpand\expandafter
      \noexpand\HyField@SetKeys
      \noexpand\expandafter{%
        \expandafter\noexpand\csname DefaultOptionsof%
          \ifFld@radio
            Radio%
          \else
            \ifFld@combo
              \ifFld@popdown
                PopdownBox%
              \else
                ComboBox%
              \fi
            \else
              ListBox%
            \fi
          \fi
        \endcsname
      }%
    }\x
    \HyField@SetKeys{#1}%
    \PDFForm@Name
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \ifx\Fld@value\relax
      \let\Fld@value\Fld@default
    \fi
    \LayoutChoiceField{#2}{%
      \ifFld@radio
        \HyField@FlagsRadioButton
        \@@Radio{#3}%
      \else
        \begingroup
          \HyField@FlagsChoice
          \ifdim\Fld@width<\@tempdima
            \ifdim\@tempdima<1cm\@tempdima1cm\fi
            \edef\Fld@width{\the\@tempdima}%
          \fi
          \ifFld@combo
          \else
            \@tempdima=\the\Fld@menulength\Fld@charsize
            \advance\@tempdima by \Fld@borderwidth bp %
            \advance\@tempdima by \Fld@borderwidth bp %
            \edef\Fld@height{\the\@tempdima}%
          \fi
          \@@Listbox{#3}%
        \endgroup
      \fi
    }%
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@@Radio}
%    \begin{macrocode}
\def\@@Radio#1{%
  \Fld@listcount=0 %
  \EdefEscapeName\Fld@default{\Fld@default}%
  \setbox\pdfm@box=\hbox{%
    \MakeRadioField{\Fld@width}{\Fld@height}%
  }%
  \@for\@curropt:=#1\do{%
    \expandafter\Fld@checkequals\@curropt==\\%
    \EdefEscapeName\@currValue{\@currValue}%
    \Hy@StepCount\Fld@listcount
    \@currDisplay\space
    \leavevmode
    \Hy@escapeform\PDFForm@Radio
    \ifnum\Fld@listcount=1 %
      \HyField@AdvanceAnnotCount
    \fi
    \@pdfm@mark{%
      ann %
      \ifnum\Fld@listcount=1 %
        @radio\HyField@TheAnnotCount%
        \space
      \fi
      \dvipdfm@setdim
      <<%
        \PDFForm@Radio
        /AP<</N<</\@currValue /null>>>>%
      >>%
    }%
    \unhcopy\pdfm@box\space% deliberate space between radio buttons
    \ifnum\Fld@listcount=1 %
      \HyField@AddToFields{radio}%
    \fi
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Fld@listcount}
%    \begin{macrocode}
\newcount\Fld@listcount
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\@@Listbox}
%    \begin{macrocode}
\def\@@Listbox#1{%
  \HyField@PDFChoices{#1}%
  \setbox\pdfm@box=\hbox{%
    \MakeChoiceField{\Fld@width}{\Fld@height}%
  }%
  \leavevmode
  \Hy@escapeform\PDFForm@List
  \HyField@AdvanceAnnotCount
  \@pdfm@mark{%
    ann @list\HyField@TheAnnotCount\space
    \dvipdfm@setdim
    <<\PDFForm@List>>%
  }%
  \unhbox\pdfm@box
  \HyField@AddToFields{list}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@PushButton}
%    \begin{macrocode}
\def\@PushButton[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofPushButton,#1%
    }%
    \PDFForm@Name
    \ifHy@pdfa
      \Hy@Error{%
        PDF/A: Push button with JavaScript is prohibited%
      }\@ehc
      \LayoutPushButtonField{%
        \leavevmode
        \MakeButtonField{#2}%
      }%
    \else
      \setbox\pdfm@box=\hbox{\MakeButtonField{#2}}%
      \HyField@FlagsPushButton
      \ifFld@hidden\def\Fld@width{1sp}\fi
      \HyField@AdvanceAnnotCount
      \LayoutPushButtonField{%
        \leavevmode
        \Hy@escapeform\PDFForm@Push
        \@pdfm@mark{%
          ann @push\HyField@TheAnnotCount\space
          \dvipdfm@setdim
          <<\PDFForm@Push>>%
        }%
      }%
      \unhbox\pdfm@box
      \HyField@AddToFields{push}%
    \fi
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@Submit}
%    \begin{macrocode}
\def\@Submit[#1]#2{%
  \def\Fld@width{\DefaultWidthofSubmit}%
  \def\Fld@height{\DefaultHeightofSubmit}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofSubmit,#1%
    }%
    \HyField@FlagsPushButton
    \HyField@FlagsSubmit
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \setbox\pdfm@box=\hbox{\MakeButtonField{#2}}%
    \leavevmode
    \Hy@escapeform\PDFForm@Submit
    \HyField@AdvanceAnnotCount
    \@pdfm@mark{%
      ann @submit\HyField@TheAnnotCount\space
      \dvipdfm@setdim
      <<\PDFForm@Submit>>%
    }%
    \unhbox\pdfm@box%
    \HyField@AddToFields{submit}%
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@Reset}
%    \begin{macrocode}
\def\@Reset[#1]#2{%
  \def\Fld@width{\DefaultWidthofReset}%
  \def\Fld@height{\DefaultHeightofReset}%
  \begingroup
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofReset,#1%
    }%
    \leavevmode
    \ifHy@pdfa
      \Hy@Error{%
        PDF/A: Reset action is prohibited%
      }\@ehc
      \MakeButtonField{#2}%
    \else
      \HyField@FlagsPushButton
      \ifFld@hidden\def\Fld@width{1sp}\fi
      \setbox\pdfm@box=\hbox{\MakeButtonField{#2}}%
      \Hy@escapeform\PDFForm@Reset
      \HyField@AdvanceAnnotCount
      \@pdfm@mark{%
        ann @reset\HyField@TheAnnotCount\space
        \dvipdfm@setdim
        <<\PDFForm@Reset>>%
      }%
      \unhbox\pdfm@box
      \HyField@AddToFields{reset}%
    \fi
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@CheckBox}
%    \begin{macrocode}
\def\@CheckBox[#1]#2{% parameters, label
  \def\Fld@name{#2}%
  \def\Fld@default{0}%
  \begingroup
    \def\Fld@width{\DefaultWidthofCheckBox}%
    \def\Fld@height{\DefaultHeightofCheckBox}%
    \expandafter\HyField@SetKeys\expandafter{%
      \DefaultOptionsofCheckBox,#1%
    }%
    \PDFForm@Name
    \HyField@FlagsCheckBox
    \ifFld@hidden\def\Fld@width{1sp}\fi
    \setbox\pdfm@box=\hbox{%
      \MakeCheckField{\Fld@width}{\Fld@height}%
    }%
    \HyField@AdvanceAnnotCount
    \LayoutCheckField{#2}{%
      \leavevmode
      \Hy@escapeform\PDFForm@Check
      \@pdfm@mark{%
        ann @check\HyField@TheAnnotCount\space
        \dvipdfm@setdim
        <<\PDFForm@Check>>%
      }%
      \unhbox\pdfm@box
      \HyField@AddToFields{check}%
    }%
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macrocode}
\def\Hy@FormObjects{%
  \@pdfm@mark{obj @OBJpdfdocencoding%
    <<%
      /Type/Encoding%
      /Differences[%
         24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek/ring/tilde %
         39/quotesingle %
         96/grave %
        128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin%
          /fraction/guilsinglleft/guilsinglright/minus/perthousand%
          /quotedblbase/quotedblleft/quotedblright/quoteleft/quoteright%
          /quotesinglbase/trademark/fi/fl/Lslash/OE/Scaron/Ydieresis%
          /Zcaron/dotlessi/lslash/oe/scaron/zcaron %
        160/Euro %
        164/currency %
        166/brokenbar %
        168/dieresis/copyright/ordfeminine %
        172/logicalnot/.notdef/registered/macron/degree/plusminus%
           /twosuperior/threesuperior/acute/mu %
        183/periodcentered/cedilla/onesuperior/ordmasculine %
        188/onequarter/onehalf/threequarters %
        192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE%
           /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute%
           /Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex%
           /Otilde/Odieresis/multiply/Oslash/Ugrave/Uacute/Ucircumflex%
           /Udieresis/Yacute/Thorn/germandbls/agrave/aacute/acircumflex%
           /atilde/adieresis/aring/ae/ccedilla/egrave/eacute%
           /ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis%
           /eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis%
           /divide/oslash/ugrave/uacute/ucircumflex/udieresis/yacute%
           /thorn/ydieresis%
      ]%
    >>%
  }%
  \@pdfm@mark{obj @OBJZaDb%
    <<%
      /Type/Font%
      /Subtype/Type1%
      /Name/ZaDb%
      /BaseFont/ZapfDingbats%
    >>%
  }%
  \@pdfm@mark{obj @OBJHelv%
    <<%
      /Type/Font%
      /Subtype/Type1%
      /Name/Helv%
      /BaseFont/Helvetica%
      /Encoding @OBJpdfdocencoding%
    >>%
  }%
  \global\let\Hy@FormObjects\relax
}
%</dvipdfm|xetex>
%    \end{macrocode}
%
% \subsection{Common forms part}
%    \begin{macrocode}
%<*pdfform>
%    \end{macrocode}
%
%    \begin{macro}{\Fld@pageobjref}
%    \begin{macrocode}
\providecommand*{\Fld@pageobjref}{}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Hy@escapestring}
%    \begin{macrocode}
\@ifundefined{pdf@escapestring}
 {%
  \let\Hy@escapestring\@firstofone
  \def\Hy@escapeform#1{%
    \ifHy@pdfescapeform
      \def\Hy@escapestring##1{%
        \noexpand\Hy@escapestring{\noexpand##1}%
      }%
      \edef\Hy@temp{#1}%
      \expandafter\Hy@@escapeform\Hy@temp\Hy@escapestring{}\@nil
      \def\Hy@escapestring##1{%
        \@ifundefined{Hy@esc@\string##1}{%
          ##1%
          \ThisShouldNotHappen
        }{%
          \csname Hy@esc@\string##1\endcsname
        }%
      }%
    \else
      \let\Hy@escapestring\@firstofone
    \fi
  }%
  \def\Hy@@escapeform#1\Hy@escapestring#2#3\@nil{%
    \ifx\\#3\\%
    \else
      \expandafter
      \Hy@pstringdef\csname Hy@esc@\string#2\endcsname{#2}%
      \Hy@ReturnAfterFi{%
        \Hy@@escapeform#3\@nil
      }%
    \fi
  }%
 }{%
  \def\Hy@escapeform#1{%
    \ifHy@pdfescapeform
      \let\Hy@escapestring\pdfescapestring
    \else
      \let\Hy@escapestring\@firstofone
    \fi
  }%
  \Hy@escapeform{}%
 }
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\PDFForm@Name}
%    \begin{macrocode}
\def\PDFForm@Name{%
  \PDFForm@@Name\Fld@name
  \ifx\Fld@altname\relax
  \else
    \PDFForm@@Name\Fld@altname
  \fi
  \ifx\Fld@mappingname\relax
  \else
    \PDFForm@@Name\Fld@mappingname
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\PDFForm@@Name}
%    \begin{macrocode}
\def\PDFForm@@Name#1{%
  \begingroup
    \ifnum\Hy@pdf@majorminor@version<105 % implementation note 117, PDF spec 1.7
      \ifHy@unicode
        \Hy@unicodefalse
      \fi
    \fi
    \pdfstringdef\Hy@gtemp#1%
  \endgroup
  \let#1\Hy@gtemp
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\Fld@additionalactions}
%    \begin{macrocode}
\def\Fld@@additionalactions{%
%    \end{macrocode}
%    K input (keystroke) format
%    \begin{macrocode}
  \ifx\Fld@keystroke@code\@empty
  \else
    /K<</S/JavaScript/JS(\Hy@escapestring{\Fld@keystroke@code})>>%
  \fi
%    \end{macrocode}
%    F display format
%    \begin{macrocode}
  \ifx\Fld@format@code\@empty
  \else
    /F<</S/JavaScript/JS(\Hy@escapestring{\Fld@format@code})>>%
  \fi
%    \end{macrocode}
%    V validation
%    \begin{macrocode}
  \ifx\Fld@validate@code\@empty
  \else
    /V<</S/JavaScript/JS(\Hy@escapestring{\Fld@validate@code})>>%
  \fi
%    \end{macrocode}
%    C calculation
%    \begin{macrocode}
  \ifx\Fld@calculate@code\@empty
  \else
    /C<</S/JavaScript/JS(\Hy@escapestring{\Fld@calculate@code})>>%
  \fi
%    \end{macrocode}
%    Fo receiving the input focus
%    \begin{macrocode}
  \ifx\Fld@onfocus@code\@empty
  \else
    /Fo<</S/JavaScript/JS(\Hy@escapestring{\Fld@onfocus@code})>>%
  \fi
%    \end{macrocode}
%    Bl losing the input focus (blurred)
%    \begin{macrocode}
  \ifx\Fld@onblur@code\@empty
  \else
    /Bl<</S/JavaScript/JS(\Hy@escapestring{\Fld@onblur@code})>>%
  \fi
%    \end{macrocode}
%    D pressing the mouse button (down)
%    \begin{macrocode}
  \ifx\Fld@onmousedown@code\@empty
  \else
    /D<</S/JavaScript/JS(\Hy@escapestring{\Fld@onmousedown@code})>>%
  \fi
%    \end{macrocode}
%    U releasing the mouse button (up)
%    \begin{macrocode}
  \ifx\Fld@onmouseup@code\@empty
  \else
    /U<</S/JavaScript/JS(\Hy@escapestring{\Fld@onmouseup@code})>>%
  \fi
%    \end{macrocode}
%    E cursor enters the annotation's active area.
%    \begin{macrocode}
  \ifx\Fld@onenter@code\@empty
  \else
    /E<</S/JavaScript/JS(\Hy@escapestring{\Fld@onenter@code})>>%
  \fi
%    \end{macrocode}
%    X cursor exits the annotation's active area.
%    \begin{macrocode}
  \ifx\Fld@onexit@code\@empty
  \else
    /X<</S/JavaScript/JS(\Hy@escapestring{\Fld@onexit@code})>>%
  \fi
}
\def\Fld@additionalactions{%
  \if-\Fld@@additionalactions-%
  \else
    \ifHy@pdfa
    \else
      /AA<<\Fld@@additionalactions>>%
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\Fld@annotnames}
%    \begin{macrocode}
\def\Fld@annotnames{%
  /T(\Fld@name)%
  \ifx\Fld@altname\relax
  \else
    /TU(\Fld@altname)%
  \fi
  \ifx\Fld@mappingname\relax
  \else
    /TM(\Fld@mappingname)%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\PDFForm@Check}
%    \begin{macrocode}
\def\PDFForm@Check{%
  /Subtype/Widget%
  \Fld@annotflags
  \Fld@pageobjref
  \Fld@annotnames
  /FT/Btn%
  \Fld@flags
  /Q \Fld@align
  /BS<</W \Fld@borderwidth /S/\Fld@borderstyle>>%
  /AP<< /N <</Yes<<>>>> >>  %new string /Yes is from below
  /MK<<%
    \ifnum\Fld@rotation=\z@
    \else
      /R \Fld@rotation
    \fi
    \ifx\Fld@bordercolor\relax
    \else
      /BC[\Fld@bordercolor]%
    \fi
    \ifx\Fld@bcolor\relax
    \else
      /BG[\Fld@bcolor]%
    \fi
    /CA(\Hy@escapestring{\Fld@cbsymbol})%
  >>%
  /DA(/ZaDb \strip@pt\Fld@charsize\space Tf%
      \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
  /H/P%
  \ifFld@checked /V/Yes/AS/Yes\else /V/Off/AS/Off\fi
  \Fld@additionalactions
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\PDFForm@Push}
%    \begin{macrocode}
\ifHy@pdfa
\else
  \def\PDFForm@Push{%
    /Subtype/Widget%
    \Fld@annotflags
    \Fld@pageobjref
    \Fld@annotnames
    /FT/Btn%
    \Fld@flags
    /H/P%
    /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
    \ifcase0\ifnum\Fld@rotation=\z@   \else 1\fi
            \ifx\Fld@bordercolor\relax\else 1\fi
            \space
    \else
      /MK<<%
        \ifnum\Fld@rotation=\z@
        \else
          /R \Fld@rotation
        \fi
        \ifx\Fld@bordercolor\relax
        \else
          /BC[\Fld@bordercolor]%
        \fi
      >>%
    \fi
    /A<</S/JavaScript/JS(\Hy@escapestring{\Fld@onclick@code})>>%
    \Fld@additionalactions
  }%
\fi
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\PDFForm@List}
%    \begin{macrocode}
\def\PDFForm@List{%
  /Subtype/Widget%
  \Fld@annotflags
  \Fld@pageobjref
  \Fld@annotnames
  /FT/Ch%
  \Fld@flags
  /Q \Fld@align
  /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
  \ifcase0\ifnum\Fld@rotation=\z@   \else 1\fi
          \ifx\Fld@bordercolor\relax\else 1\fi
          \ifx\fld@bcolor\relax     \else 1\fi
          \space
  \else
    /MK<<%
      \ifnum\Fld@rotation=\z@
      \else
        /R \Fld@rotation
      \fi
      \ifx\Fld@bordercolor\relax
      \else
        /BC[\Fld@bordercolor]%
      \fi
      \ifx\Fld@bcolor\relax
      \else
        /BG[\Fld@bcolor]%
      \fi
    >>%
  \fi
  /DA(/Helv \strip@pt\Fld@charsize\space Tf%
      \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
  \Fld@choices
  \Fld@additionalactions
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\PDFForm@Radio}
%    \begin{macrocode}
\def\PDFForm@Radio{%
  /Subtype/Widget%
  \Fld@annotflags
  \Fld@pageobjref
  \Fld@annotnames
  /FT/Btn%
  \Fld@flags
  /H/P%
  /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
  /MK<<%
    \ifnum\Fld@rotation=\z@
    \else
      /R \Fld@rotation
    \fi
    \ifx\Fld@bordercolor\relax
    \else
      /BC[\Fld@bordercolor]%
    \fi
    \ifx\Fld@bcolor\relax
    \else
      /BG[\Fld@bcolor]%
    \fi
    /CA(\Hy@escapestring{\Fld@radiosymbol})%
  >>%
  /DA(/ZaDb \strip@pt\Fld@charsize\space Tf%
      \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
%    \end{macrocode}
%^^A  \ifx\@currValue\Fld@default %old code
%^^A    /V/\Fld@default
%^^A    /DV/\Fld@default
%^^A  \else
%^^A    /V/Off%
%^^A    /DV/Off%
%^^A  \fi
% New code, the default value is used for all buttons
%    \begin{macrocode}
  \ifx\Fld@default\@empty
    /V/Off%
    /DV/Off%
  \else
   /V/\Fld@default
   /DV/\Fld@default
  \fi
  \Fld@additionalactions
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\PDFForm@Text}
%    \begin{macrocode}
\def\PDFForm@Text{%
  /Subtype/Widget%
  \Fld@annotflags
  \Fld@pageobjref
  \Fld@annotnames
  /FT/Tx%
  \Fld@flags
  /Q \Fld@align
  /BS<</W \Fld@borderwidth\space /S /\Fld@borderstyle>>%
  \ifcase0\ifnum\Fld@rotation=\z@   \else 1\fi
          \ifx\Fld@bordercolor\relax\else 1\fi
          \ifx\Fld@bcolor\relax     \else 1\fi
          \space
  \else
    /MK<<%
      \ifnum\Fld@rotation=\z@
      \else
        /R \Fld@rotation
      \fi
      \ifx\Fld@bordercolor\relax
      \else
        /BC[\Fld@bordercolor]%
      \fi
      \ifx\Fld@bcolor\relax
      \else
        /BG[\Fld@bcolor]%
      \fi
    >>%
  \fi
  /DA(/Helv \strip@pt\Fld@charsize\space Tf%
      \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
  /DV(\Hy@escapestring{\Fld@default})%
  /V(\Hy@escapestring{\Fld@value})%
  \Fld@additionalactions
  \ifnum\Fld@maxlen>\z@/MaxLen \Fld@maxlen \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\PDFForm@Submit}
%    \begin{macrocode}
\def\PDFForm@Submit{%
  /Subtype/Widget%
  \Fld@annotflags
  \Fld@pageobjref
  \Fld@annotnames
  /FT/Btn%
  \Fld@flags
  /H/P%
  /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
  \ifcase0\ifnum\Fld@rotation=\z@   \else 1\fi
          \ifx\Fld@bordercolor\relax\else 1\fi
          \space
  \else
    /MK<<%
      \ifnum\Fld@rotation=\z@
      \else
        /R \Fld@rotation
      \fi
      \ifx\Fld@bordercolor\relax
      \else
        /BC[\Fld@bordercolor]%
      \fi
    >>%
  \fi
  /A<<%
    /S/SubmitForm%
    /F<<%
      /FS/URL%
      /F(\Hy@escapestring{\Form@action})%
    >>%
    \Fld@submitflags
  >>%
  \Fld@additionalactions
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\PDFForm@Reset}
%    \begin{macrocode}
\ifHy@pdfa
\else
  \def\PDFForm@Reset{%
    /Subtype/Widget%
    \Fld@annotflags
    \Fld@pageobjref
    \Fld@annotnames
    /FT/Btn%
    \Fld@flags
    /H/P%
    /DA(/Helv \strip@pt\Fld@charsize\space Tf 0 0 1 rg)%
    \ifcase0\ifnum\Fld@rotation=\z@   \else 1\fi
            \ifx\Fld@bordercolor\relax\else 1\fi
            \space
    \else
      /MK<<%
        \ifnum\Fld@rotation=\z@
        \else
          /R \Fld@rotation
        \fi
        \ifx\Fld@bordercolor\relax
        \else
          /BC[\Fld@bordercolor]%
        \fi
%      /CA (Clear)
%      /AC (Done)
      >>%
    \fi
    /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
    /A<</S/ResetForm>>%
    \Fld@additionalactions
  }%
\fi
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
%</pdfform>
%<*packageEnd>
%    \end{macrocode}
%
% \section{Bookmarks in the PDF file}
% This was originally developed by Yannis Haralambous
% (it was the separate |repere.sty|); it needed
% the |repere| or |makebook.pl| post-processor to work properly. Now
% redundant, as it is done entirely in \LaTeX{} macros.
%
% To write out the current section title, and its rationalized number,
% we have to intercept the |\@sect| command, which is rather
% dangerous. But how else to see the information we need?
% We do the \emph{same} for |\@ssect|, giving anchors to
% unnumbered sections. This allows things like bibliographies
% to get bookmarks when used with a manual |\addcontentsline|
% 
% change 2026-02-22: Use \cs{MakeLinkTarget}
%    \begin{macrocode}
\def\phantomsection{\MakeLinkTarget[section]{}}
%</packageEnd>
%    \end{macrocode}
%
% \subsection{Bookmarks}
%    \begin{macrocode}
%<*outlines>
%    \end{macrocode}
%
% This section was written by Heiko Oberdiek; the code replaces
% an earlier version by David Carlisle.
%
% The first part of bookmark code is in section \ref{sec:pdfstring}.
% Further documentation is available as paper and slides of the
% talk, that Heiko Oberdiek has given at the EuroTeX'99 meating
% in Heidelberg. See |paper.pdf| and |slides.pdf| in the
% |doc| directory of hyperref.
%
% When using the right-to-left typesetting based on \eTeX, the order
% of the |\BOOKMARK| commands written to the |\@outlinefile| could
% appear wrong, because of mis-feature of \eTeX's implementation (that
% it processes the shipped out lines left-to-right, instead of the
% order in which they appear in the document). The wrong order will
% appear when the file contains two bookmarks on the same line typeset
% right-to-left.
%
% To work around this problem, the |bookmark@seq@number| counter is
% used to write the bookmark's sequential number into a comment in the
% |\@outlinefile|, which could be used to post-process it to achieve
% the proper ordering of |\BOOKMARK| commands in that file.
%
%    \begin{macrocode}
\def\Hy@writebookmark#1#2#3#4#5{%
    % section number, text, label, level, file
  \ifx\WriteBookmarks\relax%
  \else
    \ifnum#4>\Hy@bookmarksdepth\relax
    \else
      \@@writetorep{#1}{#2}{#3}{#4}{#5}%
    \fi
  \fi
}
\def\Hy@currentbookmarklevel{0}
\def\Hy@numberline#1{#1 }
\def\@@writetorep#1#2#3#4#5{%
  \begingroup
    \edef\Hy@tempa{#5}%
    \ifx\Hy@tempa\Hy@bookmarkstype
      \edef\Hy@level{#4}%
      \ifx\Hy@levelcheck Y%
        \@tempcnta\Hy@level\relax
        \advance\@tempcnta by -1 %
        \ifnum\Hy@currentbookmarklevel<\@tempcnta
          \advance\@tempcnta by -\Hy@currentbookmarklevel\relax
          \advance\@tempcnta by 1 %
          \Hy@Warning{%
            Difference (\the\@tempcnta) between bookmark levels is %
            greater \MessageBreak than one, level fixed%
          }%
          \@tempcnta\Hy@currentbookmarklevel
          \advance\@tempcnta by 1 %
          \edef\Hy@level{\the\@tempcnta}%
        \fi
      \else
        \global\let\Hy@levelcheck Y%
      \fi
      \global\let\Hy@currentbookmarklevel\Hy@level
      \@tempcnta\Hy@level\relax
      \expandafter\xdef\csname Parent\Hy@level\endcsname{#3}%
      \advance\@tempcnta by -1 %
      \edef\Hy@tempa{#3}%
      \edef\Hy@tempb{\csname Parent\the\@tempcnta\endcsname}%
      \ifx\Hy@tempa\Hy@tempb
        \Hy@Warning{%
          The anchor of a bookmark and its parent's must not%
          \MessageBreak be the same. Added a new anchor%
        }%
        \phantomsection
      \fi
      \ifHy@bookmarksnumbered
        \let\numberline\Hy@numberline
        \let\booknumberline\Hy@numberline
        \let\partnumberline\Hy@numberline
        \let\chapternumberline\Hy@numberline
      \else
        \let\numberline\@gobble
        \let\booknumberline\@gobble
        \let\partnumberline\@gobble
        \let\chapternumberline\@gobble
      \fi
      \pdfstringdef\Hy@tempa{#2}%
      \HyPsd@SanitizeForOutFile\Hy@tempa
      \if@filesw
        \stepcounter{bookmark@seq@number}%
        \@ifundefined{@outlinefile}{%
        }{%
          \protected@write\@outlinefile{}{%
            \protect\BOOKMARK
              [\Hy@level][\@bookmarkopenstatus{\Hy@level}]{#3}%
              {\Hy@tempa}{\Hy@tempb}%
              \@percentchar\space\thebookmark@seq@number
          }%
        }%
      \fi
    \fi
  \endgroup
}
\newcounter{bookmark@seq@number}
%    \end{macrocode}
%    \begin{macrocode}
\begingroup
  \lccode`(=`{%
  \lccode`)=`}%
  \lccode`1=\z@
  \lccode`2=\z@
  \lccode`3=\z@
  \lccode`5=\z@
  \lccode`7=\z@
  \lccode`\#=\z@
  \lccode`\`=\z@
  \lccode`\{=\z@
  \lccode`\}=\z@
\lowercase{%
  \endgroup
  \def\HyPsd@SanitizeForOutFile#1{%
    \@onelevel@sanitize\Hy@tempa
    \escapechar`\\%
    \edef\Hy@tempa{%
      \expandafter\HyPsd@SanitizeOut@BraceLeft\Hy@tempa(\@nil
    }%
    \edef\Hy@tempa{%
      \expandafter\HyPsd@SanitizeOut@BraceRight\Hy@tempa)\@nil
    }%
  }%
  \def\HyPsd@SanitizeOut@BraceLeft#1(#2\@nil{%
    #1%
    \ifx\\#2\\%
      \expandafter\@gobble
    \else
      \expandafter\@firstofone
    \fi
    {%
      \string\173%
      \HyPsd@SanitizeOut@BraceLeft#2\@nil
    }%
  }%
  \def\HyPsd@SanitizeOut@BraceRight#1)#2\@nil{%
    #1%
    \ifx\\#2\\%
      \expandafter\@gobble
    \else
      \expandafter\@firstofone
    \fi
    {%
      \string\175%
      \HyPsd@SanitizeOut@BraceRight#2\@nil
    }%
  }%
}
%    \end{macrocode}
%    In the call of \cmd{\BOOKMARK} the braces around \verb|#4|
%    are omitted, because it is not likely, that the level number
%    contains \verb|]|.
%    \begin{macrocode}
\newcommand{\currentpdfbookmark}{%
  \pdfbookmark[\Hy@currentbookmarklevel]%
}
\newcommand{\subpdfbookmark}{%
  \@tempcnta\Hy@currentbookmarklevel
  \Hy@StepCount\@tempcnta
  \expandafter\pdfbookmark\expandafter[\the\@tempcnta]%
}
\newcommand{\belowpdfbookmark}[2]{%
  \@tempcnta\Hy@currentbookmarklevel
  \Hy@StepCount\@tempcnta
  \expandafter\pdfbookmark\expandafter[\the\@tempcnta]{#1}{#2}%
  \advance\@tempcnta by -1 %
  \xdef\Hy@currentbookmarklevel{\the\@tempcnta}%
}
%    \end{macrocode}
% Tobias Oetiker rightly points out that we need a way to
% force a bookmark entry. So we introduce |\pdfbookmark|,
% with two parameters, the title, and a symbolic name.
% By default this is at level 1, but we can reset that with the
% optional first argument.
%    \begin{macrocode}
\renewcommand\pdfbookmark[3][0]{%
  \Hy@writebookmark{}{#2}{#3.#1}{#1}{toc}%
  \hyper@anchorstart{#3.#1}\hyper@anchorend
}
\def\BOOKMARK{%
  \@ifnextchar[{\@BOOKMARK}{\@@BOOKMARK[1][-]}%
}
\def\@BOOKMARK[#1]{%
  \@ifnextchar[{\@@BOOKMARK[{#1}]}{\@@BOOKMARK[{#1}][-]}%
}
%    \end{macrocode}
% The macros for calculating structure of outlines
% are derived from those by  Petr Olsak used in the texinfopdf macros.
%
% \subsubsection{Rerun warning}
%
%    \begin{macro}{\Hy@OutlineRerunCheck}
%    \begin{macrocode}
\RequirePackage{rerunfilecheck}[2009/12/10]
\def\Hy@OutlineRerunCheck{%
  \RerunFileCheck{\jobname.out}{%
    \immediate\closeout\@outlinefile
  }{%
    Rerun to get outlines right\MessageBreak
    or use package `bookmark'%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
% \subsubsection{Driver stuff}
%
% The VTEX section was written originally by VTEX, but then
% amended by Denis Girou (\Email{denis.girou@idris.fr}),
% then by by Taco Hoekwater (\Email{taco.hoekwater@wkap.nl}. The problem
% is that VTEX, with its close integration of the PDF backend, does
% look at the contents of bookmarks, escaping |\| and the like.
%    \begin{macrocode}
%<*vtex>
%    \end{macrocode}
%    \begin{macrocode}
\newcount\@serial@counter\@serial@counter=1\relax
%    \end{macrocode}
%    \begin{macro}{\hv@pdf@char}
% Plain octal codes doesn't work with versions below 6.50.
% So for early versions hex numbers have to be used.
% It would be possible to program this instead of the
% large |\ifcase|, but I'm too lazy to sort that out now.
%    \begin{macrocode}
\begingroup
  \catcode`\'=12 %
  \ifnum\Hy@VTeXversion<650 %
    \catcode`\"=12 %
    \gdef\hv@pdf@char#1#2#3{%
      \char
      \ifcase'#1#2#3 %
         "00\or"01\or"02\or"03\or"04\or"05\or"06\or"07%
      \or"08\or"09\or"0A\or"0B\or"0C\or"0D\or"0E\or"0F%
      \or"10\or"11\or"12\or"13\or"14\or"15\or"16\or"17%
      \or"18\or"19\or"1A\or"1B\or"1C\or"1D\or"1E\or"1F%
      \or"20\or"21\or"22\or"23\or"24\or"25\or"26\or"27%
      \or"28\or"29\or"2A\or"2B\or"2C\or"2D\or"2E\or"2F%
      \or"30\or"31\or"32\or"33\or"34\or"35\or"36\or"37%
      \or"38\or"39\or"3A\or"3B\or"3C\or"3D\or"3E\or"3F%
      \or"40\or"41\or"42\or"43\or"44\or"45\or"46\or"47%
      \or"48\or"49\or"4A\or"4B\or"4C\or"4D\or"4E\or"4F%
      \or"50\or"51\or"52\or"53\or"54\or"55\or"56\or"57%
      \or"58\or"59\or"5A\or"5B\or"5C\or"5D\or"5E\or"5F%
      \or"60\or"61\or"62\or"63\or"64\or"65\or"66\or"67%
      \or"68\or"69\or"6A\or"6B\or"6C\or"6D\or"6E\or"6F%
      \or"70\or"71\or"72\or"73\or"74\or"75\or"76\or"77%
      \or"78\or"79\or"7A\or"7B\or"7C\or"7D\or"7E\or"7F%
      \or"80\or"81\or"82\or"83\or"84\or"85\or"86\or"87%
      \or"88\or"89\or"8A\or"8B\or"8C\or"8D\or"8E\or"8F%
      \or"90\or"91\or"92\or"93\or"94\or"95\or"96\or"97%
      \or"98\or"99\or"9A\or"9B\or"9C\or"9D\or"9E\or"9F%
      \or"A0\or"A1\or"A2\or"A3\or"A4\or"A5\or"A6\or"A7%
      \or"A8\or"A9\or"AA\or"AB\or"AC\or"AD\or"AE\or"AF%
      \or"B0\or"B1\or"B2\or"B3\or"B4\or"B5\or"B6\or"B7%
      \or"B8\or"B9\or"BA\or"BB\or"BC\or"BD\or"BE\or"BF%
      \or"C0\or"C1\or"C2\or"C3\or"C4\or"C5\or"C6\or"C7%
      \or"C8\or"C9\or"CA\or"CB\or"CC\or"CD\or"CE\or"CF%
      \or"D0\or"D1\or"D2\or"D3\or"D4\or"D5\or"D6\or"D7%
      \or"D8\or"D9\or"DA\or"DB\or"DC\or"DD\or"DE\or"DF%
      \or"E0\or"E1\or"E2\or"E3\or"E4\or"E5\or"E6\or"E7%
      \or"E8\or"E9\or"EA\or"EB\or"EC\or"ED\or"EE\or"EF%
      \or"F0\or"F1\or"F2\or"F3\or"F4\or"F5\or"F6\or"F7%
      \or"F8\or"F9\or"FA\or"FB\or"FC\or"FD\or"FE\or"FF%
      \fi
    }%
  \else
    \gdef\hv@pdf@char{\char'}%
  \fi
\endgroup
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\@@BOOKMARK}
%    \begin{macrocode}
\def\@@BOOKMARK[#1][#2]#3#4#5{%
  \expandafter\edef\csname @count@#3\endcsname{%
    \the\@serial@counter
  }%
  \edef\@mycount{\the\@serial@counter}%
  \Hy@StepCount\@serial@counter
  \edef\@parcount{%
    \expandafter\ifx\csname @count@#5\endcsname\relax
      0%
    \else
      \csname @count@#5\endcsname
    \fi
  }%
  \immediate\special{%
    !outline \HyperDestNameFilter{#3};p=\@parcount,i=\@mycount,%
    s=\ifx#2-c\else o\fi,t=#4%
  }%
}%
%    \end{macrocode}
%    \end{macro}
%    \begin{macro}{\ReadBookmarks}
%    \begin{macrocode}
\def\ReadBookmarks{%
  \begingroup
    \def\0{\hv@pdf@char 0}%
    \def\1{\hv@pdf@char 1}%
    \def\2{\hv@pdf@char 2}%
    \def\3{\hv@pdf@char 3}%
    \def\({(}%
    \def\){)}%
    \def\do##1{%
      \ifnum\catcode`##1=\active
        \@makeother##1%
      \else
        \ifnum\catcode`##1=6 %
          \@makeother##1%
        \fi
      \fi
    }%
    \dospecials
    \Hy@safe@activestrue
    \InputIfFileExists{\jobname.out}{}{}%
  \endgroup
  \ifx\WriteBookmarks\relax
  \else
    \if@filesw
      \newwrite\@outlinefile
      \Hy@OutlineRerunCheck
      \immediate\openout\@outlinefile=\jobname.out\relax
    \fi
  \fi
}
%    \end{macrocode}
%    \end{macro}
%    \begin{macrocode}
%</vtex>
%    \end{macrocode}
%    \begin{macrocode}
%<*!vtex>
\def\ReadBookmarks{%
  \pdf@ifdraftmode{}{%
    \begingroup
      \def\do##1{%
        \ifnum\catcode`##1=\active
          \@makeother##1%
        \else
          \ifnum\catcode`##1=6 %
            \@makeother##1%
          \fi
        \fi
      }%
      \dospecials
      \Hy@safe@activestrue
      \escapechar=`\\%
      \def\@@BOOKMARK[##1][##2]##3##4##5{%
        \calc@bm@number{##5}%
      }%
      \InputIfFileExists{\jobname.out}{}{}%
      \ifx\WriteBookmarks\relax
        \global\let\WriteBookmarks\relax
      \fi
      \def\@@BOOKMARK[##1][##2]##3##4##5{%
        \def\Hy@temp{##4}%
%<*pdftex>
        \Hy@pstringdef\Hy@pstringName{\HyperDestNameFilter{##3}}%
        \Hy@OutlineName{}\Hy@pstringName{%
          ##2\check@bm@number{##3}%
        }{%
          \expandafter\strip@prefix\meaning\Hy@temp
        }%
%</pdftex>
%<*pdfmark>
        \pdfmark{%
          pdfmark=/OUT,%
          Count={##2\check@bm@number{##3}},%
          Dest={##3},%
          Title=\expandafter\strip@prefix\meaning\Hy@temp
        }%
%</pdfmark>
%<*dvipdfm|xetex>
        \Hy@pstringdef\Hy@pstringName{\HyperDestNameFilter{##3}}%
        \@pdfm@mark{%
          outline \ifHy@DvipdfmxOutlineOpen
                    [%
                    \ifnum##21>\z@
                    \else
                      -%
                    \fi
                    ] %
                  \fi
                  ##1<<%
            /Title(\expandafter\strip@prefix\meaning\Hy@temp)%
            /A<<%
              /S/GoTo%
              /D(\Hy@pstringName)%
            >>%
          >>%
        }%
%</dvipdfm|xetex>
      }%
      \begingroup
        \def\WriteBookmarks{0}%
        \InputIfFileExists{\jobname.out}{}{}%
      \endgroup
      %{\escapechar\m@ne\InputIfFileExists{\jobname.out}{}{}}%
    \endgroup
  }%
  \ifx\WriteBookmarks\relax
  \else
    \if@filesw
      \newwrite\@outlinefile
      \Hy@OutlineRerunCheck
      \immediate\openout\@outlinefile=\jobname.out\relax
    \fi
  \fi
}
%<*pdftex>
\def\Hy@OutlineName#1#2#3#4{%
  \pdfoutline goto name{#2}count#3{#4}%
}
%</pdftex>
\def\check@bm@number#1{%
  \expandafter\ifx\csname B_#1\endcsname\relax
    0%
  \else
    \csname B_#1\endcsname
  \fi
}
\def\calc@bm@number#1{%
  \@tempcnta=\check@bm@number{#1}\relax
  \advance\@tempcnta by 1 %
  \expandafter\xdef\csname B_#1\endcsname{\the\@tempcnta}%
}
%</!vtex>
%    \end{macrocode}
%
%    \begin{macrocode}
\ifHy@implicit
\else
  \expandafter\endinput
\fi
%    \end{macrocode}
%
%    \begin{macrocode}
%</outlines>
%<*outlines|hypertex>
%    \end{macrocode}
%    \begin{macrocode}
\newlength\Hy@SectionHShift
\def\Hy@SectionAnchorHref#1{%
  \ifx\protect\@typeset@protect
    \Hy@@SectionAnchor{#1}%
  \fi
}
\DeclareRobustCommand*{\Hy@@SectionAnchor}[1]{%
  \leavevmode
  \hbox to 0pt{%
    \kern-\Hy@SectionHShift
    \Hy@raisedlink{%
      \hyper@anchorstart{#1}\hyper@anchorend
    }%
    \hss
  }%
}
\AddToNoCaseChangeList{\Hy@@SectionAnchor}
\@ifundefined{hyper@nopatch@sectioning}
{
\let\H@old@ssect\@ssect
\def\@ssect#1#2#3#4#5{%
  \Hy@MakeCurrentHrefAuto{section*}%
  \setlength{\Hy@SectionHShift}{#1}%
  \begingroup
    \toks@{\H@old@ssect{#1}{#2}{#3}{#4}}%
    \toks\tw@\expandafter{%
      \expandafter\Hy@SectionAnchorHref\expandafter{\@currentHref}%
      #5%
    }%
  \edef\x{\endgroup
    \the\toks@{\the\toks\tw@}%
  }\x
}
\let\H@old@schapter\@schapter
\def\@schapter#1{%
  \begingroup
    \let\@mkboth\@gobbletwo
    \Hy@MakeCurrentHrefAuto{\Hy@chapapp*}%
    \Hy@raisedlink{%
      \hyper@anchorstart{\@currentHref}\hyper@anchorend
    }%
  \endgroup
  \H@old@schapter{#1}%
}
%    \end{macrocode}
%    If there is no chapter number (\cmd{\frontmatter} or
%    \cmd{\backmatter}) then the counting by |\refstepcounter{chapter}|
%    is not executed, so there will be no destination for \cmd{addcontentsline}.
%    So \cmd{\@chapter} is overloaded to avoid this:
%    \begin{macrocode}
\@ifundefined{@chapter}{}{%
  \let\Hy@org@chapter\@chapter
  \def\@chapter{%
    \def\Hy@next{%
      \Hy@MakeCurrentHrefAuto{\Hy@chapapp*}%
      \Hy@raisedlink{%
        \hyper@anchorstart{\@currentHref}\hyper@anchorend
      }%
    }%
    \ifnum\c@secnumdepth>\m@ne
      \@ifundefined{if@mainmatter}%
      \iftrue{\csname if@mainmatter\endcsname}%
        \let\Hy@next\relax
      \fi
    \fi
    \Hy@next
    \Hy@org@chapter
  }%
}
%    \end{macrocode}
%    \begin{macrocode}
\let\H@old@part\@part
\@ifundefined{chapter}
  {\let\Hy@secnum@part\z@}
  {\let\Hy@secnum@part\m@ne}
\def\@part{%
  \ifnum\Hy@secnum@part>\c@secnumdepth
    \phantomsection
  \fi
  \H@old@part
}
%    \end{macrocode}
%    \begin{macrocode}
\let\H@old@spart\@spart
\def\@spart#1{%
  \Hy@MakeCurrentHrefAuto{part*}%
  \Hy@raisedlink{%
    \hyper@anchorstart{\@currentHref}\hyper@anchorend
  }%
  \H@old@spart{#1}%
}
\let\H@old@sect\@sect
\def\@sect#1#2#3#4#5#6[#7]#8{%
  \ifnum #2>\c@secnumdepth
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {%
    \Hy@MakeCurrentHrefAuto{section*}%
    \setlength{\Hy@SectionHShift}{#3}%
    \begingroup
      \toks@{\H@old@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]}%
      \toks\tw@\expandafter{%
        \expandafter\Hy@SectionAnchorHref\expandafter{\@currentHref}%
        #8%
      }%
    \edef\x{\endgroup
      \the\toks@{\the\toks\tw@}%
    }\x
  }{%
    \H@old@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}%
  }%
}
}{}
%    \end{macrocode}
%    \begin{macrocode}
%</outlines|hypertex>
%<*outlines>
%    \end{macrocode}
%
%    \begin{macrocode}
\expandafter\def\csname Parent-4\endcsname{}
\expandafter\def\csname Parent-3\endcsname{}
\expandafter\def\csname Parent-2\endcsname{}
\expandafter\def\csname Parent-1\endcsname{}
\expandafter\def\csname Parent0\endcsname{}
\expandafter\def\csname Parent1\endcsname{}
\expandafter\def\csname Parent2\endcsname{}
\expandafter\def\csname Parent3\endcsname{}
\expandafter\def\csname Parent4\endcsname{}
%    \end{macrocode}
%
%    \begin{macrocode}
%</outlines>
%    \end{macrocode}
%
% \section{Encoding definition files for encodings of PDF strings}
% This was contributed by
% Heiko Oberdiek.
%
% \subsection{PD1 encoding}
%    \begin{macrocode}
%<*pd1enc>
\DeclareFontEncoding{PD1}{}{}
%    \end{macrocode}
%    Accents
%    \begin{macrocode}
\DeclareTextAccent{\`}{PD1}{\textasciigrave}
\DeclareTextAccent{\'}{PD1}{\textacute}
\DeclareTextAccent{\^}{PD1}{\textasciicircum}
\DeclareTextAccent{\~}{PD1}{\texttilde}
\DeclareTextAccent{\"}{PD1}{\textasciidieresis}
\DeclareTextAccent{\r}{PD1}{\textring}
\DeclareTextAccent{\v}{PD1}{\textasciicaron}
\DeclareTextAccent{\.}{PD1}{\textdotaccent}
\DeclareTextAccent{\c}{PD1}{\textcedilla}
\DeclareTextAccent{\=}{PD1}{\textasciimacron}
\DeclareTextAccent{\b}{PD1}{\textmacronbelow}
\DeclareTextAccent{\d}{PD1}{\textdotbelow}
\DeclareTextCompositeCommand{\`}{PD1}{\@empty}{\textasciigrave}
\DeclareTextCompositeCommand{\'}{PD1}{\@empty}{\textacute}
\DeclareTextCompositeCommand{\^}{PD1}{\@empty}{\textasciicircum}
\DeclareTextCompositeCommand{\~}{PD1}{\@empty}{\texttilde}
\DeclareTextCompositeCommand{\"}{PD1}{\@empty}{\textasciidieresis}
\DeclareTextCompositeCommand{\r}{PD1}{\@empty}{\textring}
\DeclareTextCompositeCommand{\v}{PD1}{\@empty}{\textasciicaron}
\DeclareTextCompositeCommand{\.}{PD1}{\@empty}{\textdotaccent}
\DeclareTextCompositeCommand{\c}{PD1}{\@empty}{\textcedilla}
\DeclareTextCompositeCommand{\=}{PD1}{\@empty}{\textasciimacron}
\DeclareTextCompositeCommand{\b}{PD1}{\@empty}{\textmacronbelow}
\DeclareTextCompositeCommand{\d}{PD1}{\@empty}{\textdotbelow}
\DeclareTextCompositeCommand{\`}{PD1}{\ }{\textasciigrave}
\DeclareTextCompositeCommand{\'}{PD1}{\ }{\textacute}
\DeclareTextCompositeCommand{\^}{PD1}{\ }{\textasciicircum}
\DeclareTextCompositeCommand{\~}{PD1}{\ }{\texttilde}
\DeclareTextCompositeCommand{\"}{PD1}{\ }{\textasciidieresis}
\DeclareTextCompositeCommand{\r}{PD1}{\ }{\textring}
\DeclareTextCompositeCommand{\v}{PD1}{\ }{\textasciicaron}
\DeclareTextCompositeCommand{\.}{PD1}{\ }{\textdotaccent}
\DeclareTextCompositeCommand{\c}{PD1}{\ }{\textcedilla}
\DeclareTextCompositeCommand{\=}{PD1}{\ }{\textasciimacron}
\DeclareTextCompositeCommand{\b}{PD1}{\ }{\textmacronbelow}
\DeclareTextCompositeCommand{\d}{PD1}{\ }{\textdotbelow}
\DeclareTextCommand{\k}{PD1}[1]{\TextSymbolUnavailable{\k{#1}}#1}
\DeclareTextCommand{\t}{PD1}[1]{\TextSymbolUnavailable{\t{#1}}#1}
\DeclareTextCommand{\newtie}{PD1}[1]{%
  \TextSymbolUnavailable{\newtie{#1}}#1%
}
%    \end{macrocode}
%    Special white space escape characters
%    not for use in bookmarks but for other PDF strings.
%    \begin{macrocode}
% U+0009 (CHARACTER TABULATION)
\DeclareTextCommand{\textHT}{PD1}{\011}% U+0009
% U+000A (LINE FEED)
\DeclareTextCommand{\textLF}{PD1}{\012}% U+000A
% U+000D (CARRIAGE RETURN)
\DeclareTextCommand{\textCR}{PD1}{\015}% U+000D
%    \end{macrocode}
%    Accent glyph names
%    \begin{macrocode}
% U+02D8 BREVE; breve
\DeclareTextCommand{\textasciibreve}{PD1}{\030}% U+02D8
% U+02C7 CARON; caron
\DeclareTextCommand{\textasciicaron}{PD1}{\031}% U+02C7
% U+02C6 MODIFIER LETTER CIRCUMFLEX ACCENT; circumflex
\DeclareTextCommand{\textcircumflex}{PD1}{\032}% U+02C6
% U+02D9 DOT ABOVE; dotaccent
\DeclareTextCommand{\textdotaccent}{PD1}{\033}% U+02D9
% U+02DD DOUBLE ACUTE ACCENT; hungarumlaut
\DeclareTextCommand{\texthungarumlaut}{PD1}{\034}% U+02DD
% U+02DB OGONEK; ogonek
\DeclareTextCommand{\textogonek}{PD1}{\035}% U+02DB
% U+02DA RING ABOVE; ring
\DeclareTextCommand{\textring}{PD1}{\036}% U+02DA
% U+02DC SMALL TILDE; ilde, *tilde
\DeclareTextCommand{\texttilde}{PD1}{\037}% U+02DC
%    \end{macrocode}
%    \cs{040}: U+0020 SPACE; *space, spacehackarabic\\
%    \cs{041}: U+0021 EXCLAMATION MARK; exclam
%    \begin{macrocode}
% U+0022 QUOTATION MARK; quotedbl
\DeclareTextCommand{\textquotedbl}{PD1}{"}% \042 U+0022
% U+0023 NUMBER SIGN; numbersign
\DeclareTextCommand{\textnumbersign}{PD1}{\043}% U+0023
% U+0024 DOLLAR SIGN; dollar
\DeclareTextCommand{\textdollar}{PD1}{\044}% U+0024
% U+0025 PERCENT SIGN; percent
\DeclareTextCommand{\textpercent}{PD1}{\045}% U+0025
% U+0026 AMPERSAND; ampersand
\DeclareTextCommand{\textampersand}{PD1}{\046}% U+0026
%    \end{macrocode}
%    \cs{047}: U+0027 APOSTROPHE; quotesingle\\
%    \begin{macrocode}
% U+0028 LEFT PARENTHESIS; parenleft
\DeclareTextCommand{\textparenleft}{PD1}{\string\(}% \050 U+0028
% U+0029 RIGHT PARENTHESIS; parenright
\DeclareTextCommand{\textparenright}{PD1}{\string\)}% \051 U+0029
%    \end{macrocode}
%    \cs{052}: U+002A ASTERISK; asterisk\\
%    \cs{053}: U+002B PLUS SIGN; plus\\
%    \cs{054}: U+002C COMMA; comma\\
%    \cs{055}: U+002D HYPHEN-MINUS; hyphen\\
%    \cs{056}: U+002E FULL STOP; period
%    \begin{macrocode}
% U+002E FULL STOP; period
\DeclareTextCommand{\textdotbelow}{PD1}{.}% \056 U+002E
%    \end{macrocode}
%    \cs{057}: % U+002F SOLIDUS; slash\\
%    \cs{060}: U+0030 DIGIT ZERO; zero\\
%    \dots\\
%    \cs{071}: U+0039 DIGIT NINE; nine\\
%    \cs{072}: U+003A COLON; colon\\
%    \cs{073}: U+003B SEMICOLON; semicolon
%    \begin{macrocode}
% U+003C LESS-THAN SIGN; less
\DeclareTextCommand{\textless}{PD1}{<}% \074 U+003C
%    \end{macrocode}
%    \cs{075}: U+003D EQUALS SIGN; equal
%    \begin{macrocode}
% U+003E GREATER-THAN SIGN; greater
\DeclareTextCommand{\textgreater}{PD1}{>}% \076 U+003E
%    \end{macrocode}
%    \cs{077}: U+003F QUESTION MARK; question\\
%    \cs{100}: U+0040 COMMERCIAL AT; at\\
%    \cs{101}: U+0041 LATIN CAPITAL LETTER A; A\\
%    \dots\\
%    \cs{132}: U+005A LATIN CAPITAL LETTER Z; Z\\
%    \cs{133}: U+005B LEFT SQUARE BRACKET; bracketleft
%    \begin{macrocode}
% U+005C REVERSE SOLIDUS; backslash
\DeclareTextCommand{\textbackslash}{PD1}{\134}% U+005C
% "U+2216 SET MINUS" simulated by "U+005C REVERSE SOLIDUS"
\DeclareTextCommand{\textsetminus}{PD1}{\textbackslash}
%    \end{macrocode}
%    \cs{135}: U+005D RIGHT SQUARE BRACKET; bracketright
%    \begin{macrocode}
% U+005E CIRCUMFLEX ACCENT; asciicircum
\DeclareTextCommand{\textasciicircum}{PD1}{\136}% U+005E
% U+005F LOW LINE; underscore
\DeclareTextCommand{\textunderscore}{PD1}{\137}% U+005F
\DeclareTextCommand{\textmacronbelow}{PD1}{\137}% U+005F
% U+0060 GRAVE ACCENT; grave
\DeclareTextCommand{\textasciigrave}{PD1}{\140}% U+0060
%    \end{macrocode}
%    \cs{141}: U+0061 LATIN SMALL LETTER A; a\\
%    \dots\\
%    \cs{150}: U+0068 LATIN SMALL LETTER H; h
%    \begin{macrocode}
% U+0069 LATIN SMALL LETTER I; i
\DeclareTextCompositeCommand{\.}{PD1}{i}{i}% \151 U+0069
%    \end{macrocode}
%    \cs{152}: U+006A LATIN SMALL LETTER J; j\\
%    \dots\\
%    \cs{172}: U+007A LATIN SMALL LETTER Z; z
%    \begin{macrocode}
% U+007B LEFT CURLY BRACKET; braceleft
\DeclareTextCommand{\textbraceleft}{PD1}{\173}% U+007B
% U+007C VERTICAL LINE; *bar, verticalbar
\DeclareTextCommand{\textbar}{PD1}{|}% U+007C
% U+007D RIGHT CURLY BRACKET; braceright
\DeclareTextCommand{\textbraceright}{PD1}{\175}% U+007D
% U+007E TILDE; asciitilde
\DeclareTextCommand{\textasciitilde}{PD1}{\176}% U+007E
%    \end{macrocode}
%    Slot \cs{177} (0x7F) is undefined in PDFDocEncoding.
%    \begin{macrocode}
% U+2022 BULLET; bullet
\DeclareTextCommand{\textbullet}{PD1}{\200}% U+2022
% U+2020 DAGGER; dagger
\DeclareTextCommand{\textdagger}{PD1}{\201}% U+2020
% U+2021 DOUBLE DAGGER; daggerdbl; \ddagger (LaTeX)
\DeclareTextCommand{\textdaggerdbl}{PD1}{\202}% U+2021
\DeclareTextCommand{\textddagger}{PD1}{\textdaggerdbl}
% U+2026 HORIZONTAL ELLIPSIS; ellipsis
\DeclareTextCommand{\textellipsis}{PD1}{\203}% U+2026
% U+2014 EM DASH; emdash
\DeclareTextCommand{\textemdash}{PD1}{\204}% U+2014
% U+2013 EN DASH; endash
\DeclareTextCommand{\textendash}{PD1}{\205}% U+2013
% U+0192 LATIN SMALL LETTER F WITH HOOK; florin
\DeclareTextCommand{\textflorin}{PD1}{\206}% U+0192
% U+2044 FRACTION SLASH; fraction
\DeclareTextCommand{\textfractionsolidus}{PD1}{\207}% U+2044
% U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK; guilsinglleft
\DeclareTextCommand{\guilsinglleft}{PD1}{\210}% U+2039
% U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK; guilsinglright
\DeclareTextCommand{\guilsinglright}{PD1}{\211}% U+203A
% U+2212 MINUS SIGN; minus
\DeclareTextCommand{\textminus}{PD1}{\212}% U+2212
% U+2030 PER MILLE SIGN; perthousand
\DeclareTextCommand{\textperthousand}{PD1}{\213}% U+2030
% U+201E DOUBLE LOW-9 QUOTATION MARK; quotedblbase
\DeclareTextCommand{\quotedblbase}{PD1}{\214}% U+201E
% U+201C LEFT DOUBLE QUOTATION MARK; quotedblleft
\DeclareTextCommand{\textquotedblleft}{PD1}{\215}% U+201C
% U+201D RIGHT DOUBLE QUOTATION MARK; quotedblright
\DeclareTextCommand{\textquotedblright}{PD1}{\216}% U+201D
% U+2018 LEFT SINGLE QUOTATION MARK; quoteleft
\DeclareTextCommand{\textquoteleft}{PD1}{\217}% U+2018
% U+2019 RIGHT SINGLE QUOTATION MARK; quoteright
\DeclareTextCommand{\textquoteright}{PD1}{\220}% U+2019
% U+201A SINGLE LOW-9 QUOTATION MARK; quotesinglbase
\DeclareTextCommand{\quotesinglbase}{PD1}{\221}% U+201A
% U+2122 TRADE MARK SIGN; trademark
\DeclareTextCommand{\texttrademark}{PD1}{\222}% U+2122
% U+FB01 LATIN SMALL LIGATURE FI; fi
\DeclareTextCommand{\textfi}{PD1}{\223}% U+FB01
% U+FB02 LATIN SMALL LIGATURE FL; fl
\DeclareTextCommand{\textfl}{PD1}{\224}% U+FB02
% U+0141 LATIN CAPITAL LETTER L WITH STROKE; Lslash
\DeclareTextCommand{\L}{PD1}{\225}% U+0141
% U+0152 LATIN CAPITAL LIGATURE OE; OE
\DeclareTextCommand{\OE}{PD1}{\226}% U+0152
% U+0160 LATIN CAPITAL LETTER S WITH CARON; Scaron
\DeclareTextCompositeCommand{\v}{PD1}{S}{\227}% U+0160
% U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS; Ydieresis
\DeclareTextCompositeCommand{\"}{PD1}{Y}{\230}% U+0178
\DeclareTextCommand{\IJ}{PD1}{IJ}% ligature U+0049 U+004A
% U+017D LATIN CAPITAL LETTER Z WITH CARON; Zcaron
\DeclareTextCompositeCommand{\v}{PD1}{Z}{\231}% U+017D
% U+0131 LATIN SMALL LETTER DOTLESS I; dotlessi
\DeclareTextCommand{\i}{PD1}{\232}% U+0131
% U+0142 LATIN SMALL LETTER L WITH STROKE; lslash
\DeclareTextCommand{\l}{PD1}{\233}% U+0142
% U+0153 LATIN SMALL LIGATURE OE; oe
\DeclareTextCommand{\oe}{PD1}{\234}% U+0153
% U+0161 LATIN SMALL LETTER S WITH CARON; scaron
\DeclareTextCompositeCommand{\v}{PD1}{s}{\235}% U+0161
% U+017E LATIN SMALL LETTER Z WITH CARON; zcaron
\DeclareTextCompositeCommand{\v}{PD1}{z}{\236}% U+017E
%    \end{macrocode}
%    Slot \cs{237} (0x9F) is not defined in PDFDocEncoding.\\
%    The euro \cs{240} is inserted in version 1.3 of the pdf
%    specification.
%    \begin{macrocode}
% U+20AC EURO SIGN; *Euro, euro
\DeclareTextCommand{\texteuro}{PD1}{\240}% U+20AC
% U+00A1 INVERTED EXCLAMATION MARK; exclamdown
\DeclareTextCommand{\textexclamdown}{PD1}{\241}% U+00A1
% U+00A2 CENT SIGN; cent
\DeclareTextCommand{\textcent}{PD1}{\242}% U+00A2
% U+00A3 POUND SIGN; sterling
\DeclareTextCommand{\textsterling}{PD1}{\243}% U+00A3
% U+00A4 CURRENCY SIGN; currency
\DeclareTextCommand{\textcurrency}{PD1}{\244}% U+00A4
% U+00A5 YEN SIGN; yen
\DeclareTextCommand{\textyen}{PD1}{\245}% U+00A5
% U+00A6 BROKEN BAR; brokenbar
\DeclareTextCommand{\textbrokenbar}{PD1}{\246}% U+00A6
% U+00A7 SECTION SIGN; section
\DeclareTextCommand{\textsection}{PD1}{\247}% U+00A7
% U+00A8 DIAERESIS; dieresis
\DeclareTextCommand{\textasciidieresis}{PD1}{\250}% U+00A8
% U+00A9 COPYRIGHT SIGN; copyright
\DeclareTextCommand{\textcopyright}{PD1}{\251}% U+00A9
% U+00AA FEMININE ORDINAL INDICATOR; ordfeminine
\DeclareTextCommand{\textordfeminine}{PD1}{\252}% U+00AA
% U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK; guillemetleft
\DeclareTextCommand{\guillemotleft}{PD1}{\253}% U+00AB
\DeclareTextCommand{\guillemetleft}{PD1}{\253}% U+00AB
% U+00AC NOT SIGN; logicalnot
\DeclareTextCommand{\textlogicalnot}{PD1}{\254}% U+00AC
\DeclareTextCommand{\textlnot}{PD1}{\254}% logical not
%    \end{macrocode}
%    No glyph \cs{255} in PDFDocEncoding.
%    \begin{macrocode}
% U+00AE REGISTERED SIGN; registered
\DeclareTextCommand{\textregistered}{PD1}{\256}% U+00AE
% U+00AF MACRON; *macron, overscore
\DeclareTextCommand{\textasciimacron}{PD1}{\257}% U+00AF
% U+00B0 DEGREE SIGN; degree
\DeclareTextCommand{\textdegree}{PD1}{\260}% U+00B0
% U+00B1 PLUS-MINUS SIGN; plusminus
\DeclareTextCommand{\textplusminus}{PD1}{\261}% U+00B1
% U+00B2 SUPERSCRIPT TWO; twosuperior
\DeclareTextCommand{\texttwosuperior}{PD1}{\262}%* U+00B2
% U+00B3 SUPERSCRIPT THREE; threesuperior
\DeclareTextCommand{\textthreesuperior}{PD1}{\263}%* U+00B3
% U+00B4 ACUTE ACCENT; acute
\DeclareTextCommand{\textacute}{PD1}{\264}% U+00B4
% U+00B5 MICRO SIGN; mu, mu1
\DeclareTextCommand{\textmu}{PD1}{\265}% U+00B5
% U+00B6 PILCROW SIGN; paragraph
\DeclareTextCommand{\textparagraph}{PD1}{\266}% U+00B6
% U+00B7 MIDDLE DOT; middot, *periodcentered
\DeclareTextCommand{\textperiodcentered}{PD1}{\267}% U+00B7
% U+00B8 CEDILLA; cedilla
\DeclareTextCommand{\textcedilla}{PD1}{\270}% U+00B8
% U+00B9 SUPERSCRIPT ONE; onesuperior
\DeclareTextCommand{\textonesuperior}{PD1}{\271}%* U+00B9
% U+00BA MASCULINE ORDINAL INDICATOR; ordmasculine
\DeclareTextCommand{\textordmasculine}{PD1}{\272}% U+00BA
% U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK; guillemetright
\DeclareTextCommand{\guillemotright}{PD1}{\273}% U+00BB
\DeclareTextCommand{\guillemetright}{PD1}{\273}% U+00BB
% U+00BC VULGAR FRACTION ONE QUARTER; onequarter
\DeclareTextCommand{\textonequarter}{PD1}{\274}% U+00BC
% U+00BD VULGAR FRACTION ONE HALF; onehalf
\DeclareTextCommand{\textonehalf}{PD1}{\275}% U+00BD
% U+00BE VULGAR FRACTION THREE QUARTERS; threequarters
\DeclareTextCommand{\textthreequarters}{PD1}{\276}% U+00BE
% U+00BF INVERTED QUESTION MARK; questiondown
\DeclareTextCommand{\textquestiondown}{PD1}{\277}% U+00BF
% U+00C0 LATIN CAPITAL LETTER A WITH GRAVE; Agrave
\DeclareTextCompositeCommand{\`}{PD1}{A}{\300}% U+00C0
% U+00C1 LATIN CAPITAL LETTER A WITH ACUTE; Aacute
\DeclareTextCompositeCommand{\'}{PD1}{A}{\301}% U+00C1
% U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX; Acircumflex
\DeclareTextCompositeCommand{\^}{PD1}{A}{\302}% U+00C2
% U+00C3 LATIN CAPITAL LETTER A WITH TILDE; Atilde
\DeclareTextCompositeCommand{\~}{PD1}{A}{\303}% U+00C3
% U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS; Adieresis
\DeclareTextCompositeCommand{\"}{PD1}{A}{\304}% U+00C4
% U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE; Aring
\DeclareTextCompositeCommand{\r}{PD1}{A}{\305}% U+00C5
% U+00C6 LATIN CAPITAL LETTER AE; AE
\DeclareTextCommand{\AE}{PD1}{\306}% U+00C6
% U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA; Ccedilla
\DeclareTextCompositeCommand{\c}{PD1}{C}{\307}% U+00C7
% U+00C8 LATIN CAPITAL LETTER E WITH GRAVE; Egrave
\DeclareTextCompositeCommand{\`}{PD1}{E}{\310}% U+00C8
% U+00C9 LATIN CAPITAL LETTER E WITH ACUTE; Eacute
\DeclareTextCompositeCommand{\'}{PD1}{E}{\311}% U+00C9
% U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX; Ecircumflex
\DeclareTextCompositeCommand{\^}{PD1}{E}{\312}% U+00CA
% U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS; Edieresis
\DeclareTextCompositeCommand{\"}{PD1}{E}{\313}% U+00CB
% U+00CC LATIN CAPITAL LETTER I WITH GRAVE; Igrave
\DeclareTextCompositeCommand{\`}{PD1}{I}{\314}% U+00CC
% U+00CD LATIN CAPITAL LETTER I WITH ACUTE; Iacute
\DeclareTextCompositeCommand{\'}{PD1}{I}{\315}% U+00CD
% U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX; Icircumflex
\DeclareTextCompositeCommand{\^}{PD1}{I}{\316}% U+00CE
% U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS; Idieresis
\DeclareTextCompositeCommand{\"}{PD1}{I}{\317}% U+00CF
% U+00D0 LATIN CAPITAL LETTER ETH; Eth
\DeclareTextCommand{\DH}{PD1}{\320}% U+00D0
\DeclareTextCommand{\DJ}{PD1}{\320}% U+00D0
% U+00D1 LATIN CAPITAL LETTER N WITH TILDE; Ntilde
\DeclareTextCompositeCommand{\~}{PD1}{N}{\321}% U+00D1
% U+00D2 LATIN CAPITAL LETTER O WITH GRAVE; Ograve
\DeclareTextCompositeCommand{\`}{PD1}{O}{\322}% U+00D2
% U+00D3 LATIN CAPITAL LETTER O WITH ACUTE; Oacute
\DeclareTextCompositeCommand{\'}{PD1}{O}{\323}% U+00D3
% U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX; Ocircumflex
\DeclareTextCompositeCommand{\^}{PD1}{O}{\324}% U+00D4
% U+00D5 LATIN CAPITAL LETTER O WITH TILDE; Otilde
\DeclareTextCompositeCommand{\~}{PD1}{O}{\325}% U+00D5
% U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS; Odieresis
\DeclareTextCompositeCommand{\"}{PD1}{O}{\326}% U+00D6
% U+00D7 MULTIPLICATION SIGN; multiply
\DeclareTextCommand{\textmultiply}{PD1}{\327}% U+00D7
% U+00D8 LATIN CAPITAL LETTER O WITH STROKE; Oslash
\DeclareTextCommand{\O}{PD1}{\330}% U+00D8
% U+00D9 LATIN CAPITAL LETTER U WITH GRAVE; Ugrave
\DeclareTextCompositeCommand{\`}{PD1}{U}{\331}% U+00D9
% U+00DA LATIN CAPITAL LETTER U WITH ACUTE; Uacute
\DeclareTextCompositeCommand{\'}{PD1}{U}{\332}% U+00DA
% U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX; Ucircumflex
\DeclareTextCompositeCommand{\^}{PD1}{U}{\333}% U+00DB
% U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS; Udieresis
\DeclareTextCompositeCommand{\"}{PD1}{U}{\334}% U+00DC
% U+00DD LATIN CAPITAL LETTER Y WITH ACUTE; Yacute
\DeclareTextCompositeCommand{\'}{PD1}{Y}{\335}% U+00DD
% U+00DE LATIN CAPITAL LETTER THORN; Thorn; \TH, \Thorn (wasysym)
\DeclareTextCommand{\TH}{PD1}{\336}% U+00DE
\DeclareTextCommand{\textThorn}{PD1}{\336}%* U+00DE
% U+00DF LATIN SMALL LETTER SHARP S; germandbls
\DeclareTextCommand{\ss}{PD1}{\337}% U+00DF
% U+00E0 LATIN SMALL LETTER A WITH GRAVE; agrave
\DeclareTextCompositeCommand{\`}{PD1}{a}{\340}% U+00E0
% U+00E1 LATIN SMALL LETTER A WITH ACUTE; aacute
\DeclareTextCompositeCommand{\'}{PD1}{a}{\341}% U+00E1
% U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX; acircumflex
\DeclareTextCompositeCommand{\^}{PD1}{a}{\342}% U+00E2
% U+00E3 LATIN SMALL LETTER A WITH TILDE; atilde
\DeclareTextCompositeCommand{\~}{PD1}{a}{\343}% U+00E3
% U+00E4 LATIN SMALL LETTER A WITH DIAERESIS; adieresis
\DeclareTextCompositeCommand{\"}{PD1}{a}{\344}% U+00E4
% U+00E5 LATIN SMALL LETTER A WITH RING ABOVE; aring
\DeclareTextCompositeCommand{\r}{PD1}{a}{\345}% U+00E5
% U+00E6 LATIN SMALL LETTER AE; ae
\DeclareTextCommand{\ae}{PD1}{\346}% U+00E6
% U+00E7 LATIN SMALL LETTER C WITH CEDILLA; ccedilla
\DeclareTextCompositeCommand{\c}{PD1}{c}{\347}% U+00E7
% U+00E8 LATIN SMALL LETTER E WITH GRAVE; egrave
\DeclareTextCompositeCommand{\`}{PD1}{e}{\350}% U+00E8
% U+00E9 LATIN SMALL LETTER E WITH ACUTE; eacute
\DeclareTextCompositeCommand{\'}{PD1}{e}{\351}% U+00E9
% U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX; ecircumflex
\DeclareTextCompositeCommand{\^}{PD1}{e}{\352}% U+00EA
% U+00EB LATIN SMALL LETTER E WITH DIAERESIS; edieresis
\DeclareTextCompositeCommand{\"}{PD1}{e}{\353}% U+00EB
% U+00EC LATIN SMALL LETTER I WITH GRAVE; igrave
\DeclareTextCompositeCommand{\`}{PD1}{i}{\354}% U+00EC
\DeclareTextCompositeCommand{\`}{PD1}{\i}{\354}% U+00EC
% U+00ED LATIN SMALL LETTER I WITH ACUTE; iacute
\DeclareTextCompositeCommand{\'}{PD1}{i}{\355}% U+00ED
\DeclareTextCompositeCommand{\'}{PD1}{\i}{\355}% U+00ED
% U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX; icircumflex
\DeclareTextCompositeCommand{\^}{PD1}{i}{\356}% U+00EE
\DeclareTextCompositeCommand{\^}{PD1}{\i}{\356}% U+00EE
% U+00EF LATIN SMALL LETTER I WITH DIAERESIS; idieresis
\DeclareTextCompositeCommand{\"}{PD1}{i}{\357}% U+00EF
\DeclareTextCompositeCommand{\"}{PD1}{\i}{\357}% U+00EF
% U+00F0 LATIN SMALL LETTER ETH; eth
\DeclareTextCommand{\dh}{PD1}{\360}% U+00F0
% U+00F1 LATIN SMALL LETTER N WITH TILDE; ntilde
\DeclareTextCompositeCommand{\~}{PD1}{n}{\361}% U+00F1
% U+00F2 LATIN SMALL LETTER O WITH GRAVE; ograve
\DeclareTextCompositeCommand{\`}{PD1}{o}{\362}% U+00F2
% U+00F3 LATIN SMALL LETTER O WITH ACUTE; oacute
\DeclareTextCompositeCommand{\'}{PD1}{o}{\363}% U+00F3
% U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX; ocircumflex
\DeclareTextCompositeCommand{\^}{PD1}{o}{\364}% U+00F4
% U+00F5 LATIN SMALL LETTER O WITH TILDE; otilde
\DeclareTextCompositeCommand{\~}{PD1}{o}{\365}% U+00F5
% U+00F6 LATIN SMALL LETTER O WITH DIAERESIS; odieresis
\DeclareTextCompositeCommand{\"}{PD1}{o}{\366}% U+00F6
% U+00F7 DIVISION SIGN; divide
\DeclareTextCommand{\textdivide}{PD1}{\367}% U+00F7
% U+00F8 LATIN SMALL LETTER O WITH STROKE; oslash
\DeclareTextCommand{\o}{PD1}{\370}% U+00F8
% U+00F9 LATIN SMALL LETTER U WITH GRAVE; ugrave
\DeclareTextCompositeCommand{\`}{PD1}{u}{\371}% U+00F9
% U+00FA LATIN SMALL LETTER U WITH ACUTE; uacute
\DeclareTextCompositeCommand{\'}{PD1}{u}{\372}% U+00FA
% U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX; ucircumflex
\DeclareTextCompositeCommand{\^}{PD1}{u}{\373}% U+00FB
% U+00FC LATIN SMALL LETTER U WITH DIAERESIS; udieresis
\DeclareTextCompositeCommand{\"}{PD1}{u}{\374}% U+00FC
% U+00FD LATIN SMALL LETTER Y WITH ACUTE; yacute
\DeclareTextCompositeCommand{\'}{PD1}{y}{\375}% U+00FD
% U+00FE LATIN SMALL LETTER THORN; thorn; \th, \thorn (wasysym)
\DeclareTextCommand{\th}{PD1}{\376}% U+00FE
\DeclareTextCommand{\textthorn}{PD1}{\376}%* U+00FE
% U+00FF LATIN SMALL LETTER Y WITH DIAERESIS; ydieresis
\DeclareTextCompositeCommand{\"}{PD1}{y}{\377}% U+00FF
\DeclareTextCommand{\ij}{PD1}{ij}% ligature U+0069 U+006A
%    \end{macrocode}
%    Glyphs that consist of several characters.
%    \begin{macrocode}
\DeclareTextCommand{\SS}{PD1}{SS}%
\DeclareTextCommand{\textcelsius}{PD1}{\textdegree C}%
%    \end{macrocode}
%    Aliases (german.sty)
%    \begin{macrocode}
\DeclareTextCommand{\textglqq}{PD1}{\quotedblbase}%
\DeclareTextCommand{\textgrqq}{PD1}{\textquotedblleft}%
\DeclareTextCommand{\textglq}{PD1}{\quotesinglbase}%
\DeclareTextCommand{\textgrq}{PD1}{\textquoteleft}%
\DeclareTextCommand{\textflqq}{PD1}{\guillemetleft}%
\DeclareTextCommand{\textfrqq}{PD1}{\guillemetright}%
\DeclareTextCommand{\textflq}{PD1}{\guilsinglleft}%
\DeclareTextCommand{\textfrq}{PD1}{\guilsinglright}%
%    \end{macrocode}
%    Aliases (math names)
%    \begin{macrocode}
\DeclareTextCommand{\textneg}{PD1}{\textlogicalnot}%
\DeclareTextCommand{\texttimes}{PD1}{\textmultiply}%
\DeclareTextCommand{\textdiv}{PD1}{\textdivide}%
\DeclareTextCommand{\textpm}{PD1}{\textplusminus}%
\DeclareTextCommand{\textcdot}{PD1}{\textperiodcentered}%
\DeclareTextCommand{\textbeta}{PD1}{\ss}%
%    \end{macrocode}
% Polish aliases. PDF encoding does not have the characters, but it
% is useful to Poles to have the plain letters regardless. Requested by
%  Wojciech Myszka (\Email{W.Myszka@immt.pwr.wroc.pl}).
%    \begin{macrocode}
\DeclareTextCompositeCommand{\k}{PD1}{a}{a}% aogonek
\DeclareTextCompositeCommand{\'}{PD1}{c}{c}% cacute
\DeclareTextCompositeCommand{\k}{PD1}{e}{e}% eogonek
\DeclareTextCompositeCommand{\'}{PD1}{n}{n}% nacute
\DeclareTextCompositeCommand{\'}{PD1}{s}{s}% sacute
\DeclareTextCompositeCommand{\'}{PD1}{z}{z}% zacute
\DeclareTextCompositeCommand{\.}{PD1}{z}{z}% zdot
%    \end{macrocode}
%    \begin{macrocode}
\DeclareTextCompositeCommand{\k}{PD1}{A}{A}% Aogonek
\DeclareTextCompositeCommand{\'}{PD1}{C}{C}% Cacute
\DeclareTextCompositeCommand{\k}{PD1}{E}{E}% Eogonek
\DeclareTextCompositeCommand{\'}{PD1}{N}{N}% Nacute
\DeclareTextCompositeCommand{\'}{PD1}{S}{S}% Sacute
\DeclareTextCompositeCommand{\'}{PD1}{Z}{Z}% Zacute
\DeclareTextCompositeCommand{\.}{PD1}{Z}{Z}% Zdot
%    \end{macrocode}
%    \begin{macrocode}
%</pd1enc>
%    \end{macrocode}
%
% \subsection{PU encoding}
%    \begin{macrocode}
%<*puenc>
\DeclareFontEncoding{PU}{}{}
%    \end{macrocode}
%
% \subsubsection{NFSS2 accents}
%
%    \begin{macrocode}
% U+0300 COMBINING GRAVE ACCENT; gravecmb, *gravecomb
\DeclareTextCommand{\`}{PU}[1]{#1\83\000}% U+0300
% U+0301 COMBINING ACUTE ACCENT; acutecmb, *acutecomb
\DeclareTextCommand{\'}{PU}[1]{#1\83\001}% U+0301
% U+0302 COMBINING CIRCUMFLEX ACCENT; circumflexcmb
\DeclareTextCommand{\^}{PU}[1]{#1\83\002}% U+0302
% U+0303 COMBINING TILDE; tildecmb, *tildecomb
\DeclareTextCommand{\~}{PU}[1]{#1\83\003}% U+0303
% U+0304 COMBINING MACRON; macroncmb
\DeclareTextCommand{\=}{PU}[1]{#1\83\004}% U+0304
% U+0306 COMBINING BREVE; brevecmb
\DeclareTextCommand{\u}{PU}[1]{#1\83\006}% U+0306
\ifx\CYRDZE\@undefined \else
\DeclareTextCommand{\U}{PU}[1]{#1\83\006}% U+0306
\fi
% U+0307 COMBINING DOT ABOVE; dotaccentcmb
\DeclareTextCommand{\.}{PU}[1]{#1\83\007}% U+0307
% U+0308 COMBINING DIAERESIS; dieresiscmb
\DeclareTextCommand{\"}{PU}[1]{#1\83\010}% U+0308
% U+030A COMBINING RING ABOVE; ringcmb
\DeclareTextCommand{\r}{PU}[1]{#1\83\012}% U+030A
% U+030B COMBINING DOUBLE ACUTE ACCENT; hungarumlautcmb
\DeclareTextCommand{\H}{PU}[1]{#1\83\013}% U+030B
% U+030C COMBINING CARON; caroncmb
\DeclareTextCommand{\v}{PU}[1]{#1\83\014}% U+030C
%</puenc>
% U+030F COMBINING DOUBLE GRAVE ACCENT; dblgravecmb
%<puextra>\DeclareTextCommand{\G}{PU}[1]{#1\83\017}% U+030F
%<*puenc>
\ifx\CYRDZE\@undefined \else
\DeclareTextCommand{\C}{PU}[1]{#1\83\017}% U+030F
\fi
% U+0311 COMBINING INVERTED BREVE; breveinvertedcmb
\DeclareTextCommand{\textinvbreve}{PU}[1]{#1\83\021}% U+0311
\DeclareTextCommand{\newtie}{PU}[1]{#1\83\021}% U+0311
% U+0323 COMBINING DOT BELOW; dotbelowcmb, *dotbelowcomb
\DeclareTextCommand{\d}{PU}[1]{#1\83\043}% U+0323
% U+0324 COMBINING DIAERESIS BELOW; dieresisbelowcmb; \textsubumlaut (tipa)
\DeclareTextCommand{\textsubumlaut}{PU}[1]{#1\83\044}% U+0324
% U+0325 COMBINING RING BELOW; ringbelowcmb; \textsubring (tipa)
\DeclareTextCommand{\textsubring}{PU}[1]{#1\83\045}% U+0325
% U+0327 COMBINING CEDILLA; cedillacmb
\DeclareTextCommand{\c}{PU}[1]{#1\83\047}% U+0327
% U+0328 COMBINING OGONEK; ogonekcmb
\DeclareTextCommand{\k}{PU}[1]{#1\83\050}% U+0328
% U+032D COMBINING CIRCUMFLEX ACCENT BELOW;
%   \textsubcircum (tipa)
\DeclareTextCommand{\textsubcircum}{PU}[1]{#1\83\055}% U+032D
% U+032E COMBINING BREVE BELOW; brevebelowcmb
\DeclareTextCommand{\textsubbreve}{PU}[1]{#1\83\056}% U+032E
% U+0330 COMBINING TILDE BELOW; tildebelowcmb; \textsubtilde (tipa)
\DeclareTextCommand{\textsubtilde}{PU}[1]{#1\83\060}% U+0330
% U+0331 COMBINING MACRON BELOW; macronbelowcmb
\DeclareTextCommand{\b}{PU}[1]{#1\83\061}% U+0331
% U+0361 COMBINING DOUBLE INVERTED BREVE; breveinverteddoublecmb
\DeclareTextCommand{\t}{PU}[1]{#1\83\141}% U+0361
% U+20DD COMBINING ENCLOSING CIRCLE
\DeclareTextCommand{\textcircled}{PU}[1]{#1\9040\335}% U+20DD
%    \end{macrocode}
%
%    Double accents.
%    \begin{macrocode}
\DeclareTextCommand{\textacutemacron}{PU}[1]{#1\83\001\83\004}% U+0301 U+0304
\DeclareTextCommand{\textgravemacron}{PU}[1]{#1\83\000\83\004}% U+0300 U+0304
%    \end{macrocode}
%
%    \cs{@empty} is an artefact of the NFSS2 machinery, it
%    gets inserted for empty arguments and spaces.
%    \begin{macrocode}
\DeclareTextCompositeCommand{\`}{PU}{\@empty}{\textasciigrave}%
\DeclareTextCompositeCommand{\'}{PU}{\@empty}{\textacute}%
\DeclareTextCompositeCommand{\^}{PU}{\@empty}{\textasciicircum}%
\DeclareTextCompositeCommand{\~}{PU}{\@empty}{\texttilde}%
\DeclareTextCompositeCommand{\"}{PU}{\@empty}{\textasciidieresis}%
\DeclareTextCompositeCommand{\r}{PU}{\@empty}{\textring}%
\DeclareTextCompositeCommand{\v}{PU}{\@empty}{\textasciicaron}%
\DeclareTextCompositeCommand{\.}{PU}{\@empty}{\textdotaccent}%
\DeclareTextCompositeCommand{\c}{PU}{\@empty}{\textcedilla}%
\DeclareTextCompositeCommand{\u}{PU}{\@empty}{\textasciibreve}%
%</puenc>
%<puextra>\DeclareTextCompositeCommand{\G}{PU}{\@empty}{\textdoublegrave}%
%<*puenc>
\DeclareTextCompositeCommand{\=}{PU}{\@empty}{\textasciimacron}%
\DeclareTextCompositeCommand{\H}{PU}{\@empty}{\texthungarumlaut}%
\DeclareTextCompositeCommand{\k}{PU}{\@empty}{\textogonek}%
\DeclareTextCompositeCommand{\textinvbreve}{PU}{\@empty}{{ \83\021}}% U+0311
\DeclareTextCompositeCommand{\textsubumlaut}{PU}{\@empty}{{ \83\044}}% U+0324
\DeclareTextCompositeCommand{\textsubring}{PU}{\@empty}{\textringlow}%
\DeclareTextCompositeCommand{\textsubcircum}{PU}{\@empty}{\textcircumlow}%
\DeclareTextCompositeCommand{\textsubbreve}{PU}{\@empty}{{ \83\056}}% U+032E
\DeclareTextCompositeCommand{\textsubtilde}{PU}{\@empty}{\texttildelow}%
\DeclareTextCompositeCommand{\b}{PU}{\@empty}{\textmacronbelow}%
\DeclareTextCompositeCommand{\d}{PU}{\@empty}{\textdotbelow}%
\DeclareTextCompositeCommand{\t}{PU}{\@empty}{\texttie}%
\DeclareTextCompositeCommand{\newtie}{PU}{\@empty}{\textnewtie}%
\DeclareTextCompositeCommand{\textcircled}{PU}{\@empty}{\textbigcircle}%
\DeclareTextCompositeCommand{\textacutemacron}{PU}{\@empty}{{ \83\001\83\004}}% U+0301 U+0304
\DeclareTextCompositeCommand{\textgravemacron}{PU}{\@empty}{{ \83\000\83\004}}% U+0300 U+0304
%    \end{macrocode}
%    \begin{macrocode}
\DeclareTextCompositeCommand{\`}{PU}{\ }{\textasciigrave}%
\DeclareTextCompositeCommand{\'}{PU}{\ }{\textacute}%
\DeclareTextCompositeCommand{\^}{PU}{\ }{\textasciicircum}%
\DeclareTextCompositeCommand{\~}{PU}{\ }{\texttilde}%
\DeclareTextCompositeCommand{\"}{PU}{\ }{\textasciidieresis}%
\DeclareTextCompositeCommand{\r}{PU}{\ }{\textring}%
\DeclareTextCompositeCommand{\v}{PU}{\ }{\textasciicaron}%
\DeclareTextCompositeCommand{\.}{PU}{\ }{\textdotaccent}%
\DeclareTextCompositeCommand{\c}{PU}{\ }{\textcedilla}%
\DeclareTextCompositeCommand{\u}{PU}{\ }{\textasciibreve}%
%</puenc>
%<puextra>\DeclareTextCompositeCommand{\G}{PU}{\ }{\textdoublegrave}%
%<*puenc>
\DeclareTextCompositeCommand{\=}{PU}{\ }{\textasciimacron}%
\DeclareTextCompositeCommand{\H}{PU}{\ }{\texthungarumlaut}%
\DeclareTextCompositeCommand{\k}{PU}{\ }{\textogonek}%
\DeclareTextCompositeCommand{\textinvbreve}{PU}{\ }{{ \83\021}}% U+0311
\DeclareTextCompositeCommand{\textsubumlaut}{PU}{\ }{{ \83\044}}% U+0324
\DeclareTextCompositeCommand{\textsubring}{PU}{\ }{\textringlow}%
\DeclareTextCompositeCommand{\textsubcircum}{PU}{\ }{\textcircumlow}%
\DeclareTextCompositeCommand{\textsubbreve}{PU}{\ }{{ \83\056}}% U+032E
\DeclareTextCompositeCommand{\textsubtilde}{PU}{\ }{\texttildelow}%
\DeclareTextCompositeCommand{\b}{PU}{\ }{\textmacronbelow}%
\DeclareTextCompositeCommand{\d}{PU}{\ }{\textdotbelow}%
\DeclareTextCompositeCommand{\t}{PU}{\ }{\texttie}%
\DeclareTextCompositeCommand{\newtie}{PU}{\ }{\textnewtie}%
\DeclareTextCompositeCommand{\textcircled}{PU}{\ }{\textbigcircle}%
\DeclareTextCompositeCommand{\textacutemacron}{PU}{\ }{{ \83\001\83\004}}% U+0301 U+0304
\DeclareTextCompositeCommand{\textgravemacron}{PU}{\ }{{ \83\000\83\004}}% U+0300 U+0304
%    \end{macrocode}
%    Accents for capitals (see encoding TS1)
%    \begin{macrocode}
\DeclareTextCommand{\capitalcedilla}{PU}[1]{\c{#1}}%
\DeclareTextCommand{\capitalogonek}{PU}[1]{\k{#1}}%
\DeclareTextCommand{\capitalgrave}{PU}[1]{\`{#1}}%
\DeclareTextCommand{\capitalacute}{PU}[1]{\'{#1}}%
\DeclareTextCommand{\capitalcircumflex}{PU}[1]{\^{#1}}%
\DeclareTextCommand{\capitaltilde}{PU}[1]{\~{#1}}%
\DeclareTextCommand{\capitaldieresis}{PU}[1]{\"{#1}}%
\DeclareTextCommand{\capitalhungarumlaut}{PU}[1]{\H{#1}}%
\DeclareTextCommand{\capitalring}{PU}[1]{\r{#1}}%
\DeclareTextCommand{\capitalcaron}{PU}[1]{\v{#1}}%
\DeclareTextCommand{\capitalbreve}{PU}[1]{\u{#1}}%
\DeclareTextCommand{\capitalmacron}{PU}[1]{\={#1}}%
\DeclareTextCommand{\capitaldotaccent}{PU}[1]{\.{#1}}%
\DeclareTextCommand{\capitaltie}{PU}[1]{\t{#1}}%
\DeclareTextCommand{\capitalnewtie}{PU}[1]{\newtie{#1}}%
%    \end{macrocode}
%
% \subsubsection{Basic Latin: U+0000 to U+007F}
%
%    Special white space escape characters.
%    \begin{macrocode}
% U+0009 (CHARACTER TABULATION)
\DeclareTextCommand{\textHT}{PU}{\80\011}% U+0009
% U+000A (LINE FEED)
\DeclareTextCommand{\textLF}{PU}{\80\012}% U+000A
% U+000D (CARRIAGE RETURN)
\DeclareTextCommand{\textCR}{PU}{\80\015}% U+000D
%    \end{macrocode}
%    |\80\040|: U+0020 SPACE; space, spacehackarabic\\
%    |\80\041|: U+0021 EXCLAMATION MARK; exclam
%    \begin{macrocode}
% U+0022 QUOTATION MARK; quotedbl
\DeclareTextCommand{\textquotedbl}{PU}{"}% \80\042 U+0022
% U+0023 NUMBER SIGN; numbersign
\DeclareTextCommand{\textnumbersign}{PU}{\80\043}% U+0023
% U+0024 DOLLAR SIGN; dollar
\DeclareTextCommand{\textdollar}{PU}{\80\044}% U+0024
%* \textdollar -> \mathdollar
%* \textdollar -> \EyesDollar (marvosym)
% U+0025 PERCENT SIGN; percent
\DeclareTextCommand{\textpercent}{PU}{\80\045}% U+0025
% U+0026 AMPERSAND; ampersand
\DeclareTextCommand{\textampersand}{PU}{\80\046}% U+0026
%* \textampersand -> \binampersand (stmaryrd)
%* \textampersand -> \with (cmll)
% U+0027 APOSTROPHE; quotesingle
\DeclareTextCommand{\textquotesingle}{PU}{\80\047}% U+0027
% U+0028 LEFT PARENTHESIS; parenleft
\DeclareTextCommand{\textparenleft}{PU}{\80\050}% U+0028
% U+0029 RIGHT PARENTHESIS; parenright
\DeclareTextCommand{\textparenright}{PU}{\80\051}% U+0029
% U+002A ASTERISK; asterisk; (?)
\DeclareTextCommand{\textasteriskcentered}{PU}{\80\052}% U+002A
% U+002B PLUS SIGN; plus; \MVPlus (marvosym)
\DeclareTextCommand{\textMVPlus}{PU}{\80\053}%* U+002B
% U+002C COMMA; comma; \MVComma (marvosym)
\DeclareTextCommand{\textMVComma}{PU}{\80\054}%* U+002C
% U+002D HYPHEN-MINUS; hyphen; \MVMinus (marvosym)
\DeclareTextCommand{\textMVMinus}{PU}{\80\055}%* U+002D
% U+002E FULL STOP; period; \MVPeriod (marvosym)
\DeclareTextCommand{\textMVPeriod}{PU}{\80\056}%* U+002E
% U+002F SOLIDUS; slash; \MVDivision (marvosym)
\DeclareTextCommand{\textMVDivision}{PU}{\80\057}%* U+002F
% U+0030 DIGIT ZERO; zero; \MVZero (marvosym)
\DeclareTextCommand{\textMVZero}{PU}{\80\060}%* U+0030
% U+0031 DIGIT ONE; one; \MVOne (marvosym)
\DeclareTextCommand{\textMVOne}{PU}{\80\061}%* U+0031
% U+0032 DIGIT TWO; two; \MVTwo (marvosym)
\DeclareTextCommand{\textMVTwo}{PU}{\80\062}%* U+0032
% U+0033 DIGIT THREE; three; \MVThree (marvosym)
\DeclareTextCommand{\textMVThree}{PU}{\80\063}%* U+0033
% U+0034 DIGIT FOUR; four; \MVFour (marvosym)
\DeclareTextCommand{\textMVFour}{PU}{\80\064}%* U+0034
% U+0035 DIGIT FIVE; five; \MVFive (marvosym)
\DeclareTextCommand{\textMVFive}{PU}{\80\065}%* U+0035
% U+0036 DIGIT SIX; six; \MVSix (marvosym)
\DeclareTextCommand{\textMVSix}{PU}{\80\066}%* U+0036
% U+0037 DIGIT SEVEM; seven; \MVSeven (marvosym)
\DeclareTextCommand{\textMVSeven}{PU}{\80\067}%* U+0037
% U+0038 DIGIT EIGHT; eight; \MVEight (marvosym)
\DeclareTextCommand{\textMVEight}{PU}{\80\070}%* U+0038
% U+0039 DIGIT NINE; nine; \MVNine (marvosym)
\DeclareTextCommand{\textMVNine}{PU}{\80\071}%* U+0039
%    \end{macrocode}
%    |\80\072|: U+003A COLON; colon\\
%    |\80\073|: U+003B SEMICOLON; semicolon
%    \begin{macrocode}
% U+003C LESS-THAN SIGN; less
\DeclareTextCommand{\textless}{PU}{<}% \80\074 U+003C
%    \end{macrocode}
%    |\80\075|: U+003D EQUALS SIGN; equal
%    \begin{macrocode}
% U+003E GREATER-THAN SIGN; greater
\DeclareTextCommand{\textgreater}{PU}{>}% \80\076 U+003E
%    \end{macrocode}
%    |\80\077|: U+003F QUESTION MARK; question
%    \begin{macrocode}
% U+0040 COMMERCIAL AT; at; \MVAt (marvosym)
\DeclareTextCommand{\textMVAt}{PU}{\80\100}%* U+0040
%    \end{macrocode}
%    |\80\101|: U+0041 LATIN CAPITAL LETTER A; A\\
%    \dots\\
%    |\80\132|: U+005A LATIN CAPITAL LETTER Z; Z\\
%    |\80\133|: U+005B LEFT SQUARE BRACKET; bracketleft
%    \begin{macrocode}
% U+005C REVERSE SOLIDUS; backslash
\DeclareTextCommand{\textbackslash}{PU}{\80\134}% U+005C
%    \end{macrocode}
%    |\80\135|: U+005D RIGHT SQUARE BRACKET; bracketright
%    \begin{macrocode}
% U+005E CIRCUMFLEX ACCENT; asciicircum
\DeclareTextCommand{\textasciicircum}{PU}{\80\136}% U+005E
% U+005F LOW LINE; underscore
\DeclareTextCommand{\textunderscore}{PU}{\80\137}% U+005F
%* \textunderscore -> \mathunderscore (LaTeX)
% U+0060 GRAVE ACCENT; grave
\DeclareTextCommand{\textasciigrave}{PU}{\80\140}% U+0060
%    \end{macrocode}
%    |\80\141|: U+0061 LATIN SMALL LETTER A; a\\
%    \dots\\
%    |\80\150|: U+0068 LATIN SMALL LETTER H; h
%    \begin{macrocode}
% U+0069 LATIN SMALL LETTER I; i
\DeclareTextCompositeCommand{\.}{PU}{\i}{i}% \80\151 U+0069
\DeclareTextCompositeCommand{\.}{PU}{i}{i}% \80\151 U+0069
%    \end{macrocode}
%    |\80\152|: U+006A LATIN SMALL LETTER J; j\\
%    \dots\\
%    |\80\172|: U+007A LATIN SMALL LETTER Z; z
%    \begin{macrocode}
% U+007B LEFT CURLY BRACKET; braceleft
\DeclareTextCommand{\textbraceleft}{PU}{\80\173}% U+007B
% U+007C VERTICAL LINE; *bar, verticalbar
\DeclareTextCommand{\textbar}{PU}{|}% \80\174 U+007C
%* \textbar -> \textvertline (tipa)
% U+007D RIGHT CURLY BRACKET; braceright
\DeclareTextCommand{\textbraceright}{PU}{\80\175}% U+007D
% U+007E TILDE; asciitilde
\DeclareTextCommand{\textasciitilde}{PU}{\80\176}% U+007E
%    \end{macrocode}
%
% \subsubsection{Latin-1 Supplement: U+0080 to U+00FF}
%
%    |\80\240|: U+00A0 NO-BREAK SPACE; nbspace, nonbreakingspace
%    \begin{macrocode}
% U+00A1 INVERTED EXCLAMATION MARK; exclamdown
\DeclareTextCommand{\textexclamdown}{PU}{\80\241}% U+00A1
% U+00A2 CENT SIGN; cent
\DeclareTextCommand{\textcent}{PU}{\80\242}% U+00A2
% U+00A3 POUND SIGN; sterling
\DeclareTextCommand{\textsterling}{PU}{\80\243}% U+00A3
%* \textsterling -> \mathsterling (LaTeX)
%* \textsterling -> \pounds (LaTeX)
% U+00A4 CURRENCY SIGN; currency
\DeclareTextCommand{\textcurrency}{PU}{\80\244}% U+00A4
% U+00A5 YEN SIGN; yen
\DeclareTextCommand{\textyen}{PU}{\80\245}% U+00A5
% U+00A6 BROKEN BAR; brokenbar
\DeclareTextCommand{\textbrokenbar}{PU}{\80\246}% U+00A6
%* \textbrokenbar -> \brokenvert (wasysym)
% U+00A7 SECTION SIGN; section
\DeclareTextCommand{\textsection}{PU}{\80\247}% U+00A7
%* \textsection -> \mathsection (LaTeX)
%* \textsection -> \S (LaTeX)
% U+00A8 DIAERESIS; dieresis
\DeclareTextCommand{\textasciidieresis}{PU}{\80\250}% U+00A8
% U+00A9 COPYRIGHT SIGN; copyright
\DeclareTextCommand{\textcopyright}{PU}{\80\251}%* U+00A9
% U+00AA FEMININE ORDINAL INDICATOR; ordfeminine
\DeclareTextCommand{\textordfeminine}{PU}{\80\252}% U+00AA
% U+00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK; guillemetleft
\DeclareTextCommand{\guillemotleft}{PU}{\80\253}% U+00AB
\DeclareTextCommand{\guillemetleft}{PU}{\80\253}% U+00AB
% U+00AC NOT SIGN; logicalnot
\DeclareTextCommand{\textlogicalnot}{PU}{\80\254}% U+00AC
\DeclareTextCommand{\textlnot}{PU}{\80\254}% U+00AC
%    \end{macrocode}
%    |\80\255|: U+00AD SOFT HYPHEN; sfthyphen, softhyphen
%    \begin{macrocode}
% U+00AE REGISTERED SIGN; registered
\DeclareTextCommand{\textregistered}{PU}{\80\256}% U+00AE
% U+00AF MACRON; *macron, overscore
\DeclareTextCommand{\textasciimacron}{PU}{\80\257}% U+00AF
% U+00B0 DEGREE SIGN; degree
\DeclareTextCommand{\textdegree}{PU}{\80\260}% U+00B0
% U+00B1 PLUS-MINUS SIGN; plusminus
\DeclareTextCommand{\textplusminus}{PU}{\80\261}% U+00B1
% U+00B2 SUPERSCRIPT TWO; twosuperior
\DeclareTextCommand{\texttwosuperior}{PU}{\80\262}%* U+00B2
% U+00B3 SUPERSCRIPT THREE; threesuperior
\DeclareTextCommand{\textthreesuperior}{PU}{\80\263}%* U+00B3
% U+00B4 ACUTE ACCENT; acute
\DeclareTextCommand{\textacute}{PU}{\80\264}% U+00B4
\DeclareTextCommand{\textasciiacute}{PU}{\80\264}% U+00B4
% U+00B5 MICRO SIGN; mu, mu1
\DeclareTextCommand{\textmu}{PU}{\80\265}% U+00B5
% U+00B6 PILCROW SIGN; paragraph
\DeclareTextCommand{\textparagraph}{PU}{\80\266}% U+00B6
%* \textparagraph -> \mathparagraph (LaTeX)
% U+00B7 MIDDLE DOT; middot, *periodcentered
\DeclareTextCommand{\textperiodcentered}{PU}{\80\267}% U+00B7
%* \textperiodcentered -> \MultiplicationDot (marvosym)
%* \textperiodcentered -> \Squaredot (marvosym)
% U+00B8 CEDILLA; cedilla
\DeclareTextCommand{\textcedilla}{PU}{\80\270}% U+00B8
% U+00B9 SUPERSCRIPT ONE; onesuperior
\DeclareTextCommand{\textonesuperior}{PU}{\80\271}%* U+00B9
% U+00BA MASCULINE ORDINAL INDICATOR; ordmasculine
\DeclareTextCommand{\textordmasculine}{PU}{\80\272}% U+00BA
% U+00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK; guillemetright
\DeclareTextCommand{\guillemotright}{PU}{\80\273}% U+00BB
\DeclareTextCommand{\guillemetright}{PU}{\80\273}% U+00BB
% U+00BC VULGAR FRACTION ONE QUARTER; onequarter
\DeclareTextCommand{\textonequarter}{PU}{\80\274}% U+00BC
% U+00BD VULGAR FRACTION ONE HALF; onehalf
\DeclareTextCommand{\textonehalf}{PU}{\80\275}% U+00BD
% U+00BE VULGAR FRACTION THREE QUARTERS; threequarters
\DeclareTextCommand{\textthreequarters}{PU}{\80\276}% U+00BE
% U+00BF INVERTED QUESTION MARK; questiondown
\DeclareTextCommand{\textquestiondown}{PU}{\80\277}% U+00BF
% U+00C0 LATIN CAPITAL LETTER A WITH GRAVE; Agrave
\DeclareTextCompositeCommand{\`}{PU}{A}{\80\300}% U+00C0
% U+00C1 LATIN CAPITAL LETTER A WITH ACUTE; Aacute
\DeclareTextCompositeCommand{\'}{PU}{A}{\80\301}% U+00C1
% U+00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX; Acircumflex
\DeclareTextCompositeCommand{\^}{PU}{A}{\80\302}% U+00C2
% U+00C3 LATIN CAPITAL LETTER A WITH TILDE; Atilde
\DeclareTextCompositeCommand{\~}{PU}{A}{\80\303}% U+00C3
% U+00C4 LATIN CAPITAL LETTER A WITH DIAERESIS; Adieresis
\DeclareTextCompositeCommand{\"}{PU}{A}{\80\304}% U+00C4
% U+00C5 LATIN CAPITAL LETTER A WITH RING ABOVE; Aring
\DeclareTextCompositeCommand{\r}{PU}{A}{\80\305}% U+00C5
% U+00C6 LATIN CAPITAL LETTER AE; AE
\DeclareTextCommand{\AE}{PU}{\80\306}% U+00C6
% U+00C7 LATIN CAPITAL LETTER C WITH CEDILLA; Ccedilla
\DeclareTextCompositeCommand{\c}{PU}{C}{\80\307}% U+00C7
% U+00C8 LATIN CAPITAL LETTER E WITH GRAVE; Egrave
\DeclareTextCompositeCommand{\`}{PU}{E}{\80\310}% U+00C8
% U+00C9 LATIN CAPITAL LETTER E WITH ACUTE; Eacute
\DeclareTextCompositeCommand{\'}{PU}{E}{\80\311}% U+00C9
% U+00CA LATIN CAPITAL LETTER E WITH CIRCUMFLEX; Ecircumflex
\DeclareTextCompositeCommand{\^}{PU}{E}{\80\312}% U+00CA
% U+00CB LATIN CAPITAL LETTER E WITH DIAERESIS; Edieresis
\DeclareTextCompositeCommand{\"}{PU}{E}{\80\313}% U+00CB
% U+00CC LATIN CAPITAL LETTER I WITH GRAVE; Igrave
\DeclareTextCompositeCommand{\`}{PU}{I}{\80\314}% U+00CC
% U+00CD LATIN CAPITAL LETTER I WITH ACUTE; Iacute
\DeclareTextCompositeCommand{\'}{PU}{I}{\80\315}% U+00CD
% U+00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX; Icircumflex
\DeclareTextCompositeCommand{\^}{PU}{I}{\80\316}% U+00CE
% U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS; Idieresis
\DeclareTextCompositeCommand{\"}{PU}{I}{\80\317}% U+00CF
% U+00D0 LATIN CAPITAL LETTER ETH; Eth
\DeclareTextCommand{\DH}{PU}{\80\320}% U+00D0
% U+00D1 LATIN CAPITAL LETTER N WITH TILDE; Ntilde
\DeclareTextCompositeCommand{\~}{PU}{N}{\80\321}% U+00D1
% U+00D2 LATIN CAPITAL LETTER O WITH GRAVE; Ograve
\DeclareTextCompositeCommand{\`}{PU}{O}{\80\322}% U+00D2
% U+00D3 LATIN CAPITAL LETTER O WITH ACUTE; Oacute
\DeclareTextCompositeCommand{\'}{PU}{O}{\80\323}% U+00D3
% U+00D4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX; Ocircumflex
\DeclareTextCompositeCommand{\^}{PU}{O}{\80\324}% U+00D4
% U+00D5 LATIN CAPITAL LETTER O WITH TILDE; Otilde
\DeclareTextCompositeCommand{\~}{PU}{O}{\80\325}% U+00D5
% U+00D6 LATIN CAPITAL LETTER O WITH DIAERESIS; Odieresis
\DeclareTextCompositeCommand{\"}{PU}{O}{\80\326}% U+00D6
% U+00D7 MULTIPLICATION SIGN; multiply
\DeclareTextCommand{\textmultiply}{PU}{\80\327}% U+00D7
%* \textmultiply -> \vartimes (stmaryrd)
%* \textmultiply -> \MVMultiplication (marvosym)
% U+00D8 LATIN CAPITAL LETTER O WITH STROKE; Oslash
\DeclareTextCommand{\O}{PU}{\80\330}% U+00D8
% U+00D9 LATIN CAPITAL LETTER U WITH GRAVE; Ugrave
\DeclareTextCompositeCommand{\`}{PU}{U}{\80\331}% U+00D9
% U+00DA LATIN CAPITAL LETTER U WITH ACUTE; Uacute
\DeclareTextCompositeCommand{\'}{PU}{U}{\80\332}% U+00DA
% U+00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX; Ucircumflex
\DeclareTextCompositeCommand{\^}{PU}{U}{\80\333}% U+00DB
% U+00DC LATIN CAPITAL LETTER U WITH DIAERESIS; Udieresis
\DeclareTextCompositeCommand{\"}{PU}{U}{\80\334}% U+00DC
% U+00DD LATIN CAPITAL LETTER Y WITH ACUTE; Yacute
\DeclareTextCompositeCommand{\'}{PU}{Y}{\80\335}% U+00DD
% U+00DE LATIN CAPITAL LETTER THORN; Thorn; \TH, \Thorn (wasysym)
\DeclareTextCommand{\TH}{PU}{\80\336}% U+00DE
\DeclareTextCommand{\textThorn}{PU}{\80\336}%* U+00DE
% U+00DF LATIN SMALL LETTER SHARP S; germandbls
\DeclareTextCommand{\ss}{PU}{\80\337}% U+00DF
% U+00E0 LATIN SMALL LETTER A WITH GRAVE; agrave
\DeclareTextCompositeCommand{\`}{PU}{a}{\80\340}% U+00E0
% U+00E1 LATIN SMALL LETTER A WITH ACUTE; aacute
\DeclareTextCompositeCommand{\'}{PU}{a}{\80\341}% U+00E1
% U+00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX; acircumflex
\DeclareTextCompositeCommand{\^}{PU}{a}{\80\342}% U+00E2
% U+00E3 LATIN SMALL LETTER A WITH TILDE; atilde
\DeclareTextCompositeCommand{\~}{PU}{a}{\80\343}% U+00E3
% U+00E4 LATIN SMALL LETTER A WITH DIAERESIS; adieresis
\DeclareTextCompositeCommand{\"}{PU}{a}{\80\344}% U+00E4
% U+00E5 LATIN SMALL LETTER A WITH RING ABOVE; aring
\DeclareTextCompositeCommand{\r}{PU}{a}{\80\345}% U+00E5
% U+00E6 LATIN SMALL LETTER AE; ae
\DeclareTextCommand{\ae}{PU}{\80\346}% U+00E6
% U+00E7 LATIN SMALL LETTER C WITH CEDILLA; ccedilla
\DeclareTextCompositeCommand{\c}{PU}{c}{\80\347}% U+00E7
% U+00E8 LATIN SMALL LETTER E WITH GRAVE; egrave
\DeclareTextCompositeCommand{\`}{PU}{e}{\80\350}% U+00E8
% U+00E9 LATIN SMALL LETTER E WITH ACUTE; eacute
\DeclareTextCompositeCommand{\'}{PU}{e}{\80\351}% U+00E9
% U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX; ecircumflex
\DeclareTextCompositeCommand{\^}{PU}{e}{\80\352}% U+00EA
% U+00EB LATIN SMALL LETTER E WITH DIAERESIS; edieresis
\DeclareTextCompositeCommand{\"}{PU}{e}{\80\353}% U+00EB
% U+00EC LATIN SMALL LETTER I WITH GRAVE; igrave
\DeclareTextCompositeCommand{\`}{PU}{i}{\80\354}% U+00EC
\DeclareTextCompositeCommand{\`}{PU}{\i}{\80\354}% U+00EC
% U+00ED LATIN SMALL LETTER I WITH ACUTE; iacute
\DeclareTextCompositeCommand{\'}{PU}{i}{\80\355}% U+00ED
\DeclareTextCompositeCommand{\'}{PU}{\i}{\80\355}% U+00ED
% U+00EE LATIN SMALL LETTER I WITH CIRCUMFLEX; icircumflex
\DeclareTextCompositeCommand{\^}{PU}{i}{\80\356}% U+00EE
\DeclareTextCompositeCommand{\^}{PU}{\i}{\80\356}% U+00EE
% U+00EF LATIN SMALL LETTER I WITH DIAERESIS; idieresis
\DeclareTextCompositeCommand{\"}{PU}{i}{\80\357}% U+00EF
\DeclareTextCompositeCommand{\"}{PU}{\i}{\80\357}% U+00EF
% U+00F0 LATIN SMALL LETTER ETH; eth
\DeclareTextCommand{\dh}{PU}{\80\360}% U+00F0
%* \dh -> \eth (wsuipa, phonetic)
% U+00F1 LATIN SMALL LETTER N WITH TILDE; ntilde
\DeclareTextCompositeCommand{\~}{PU}{n}{\80\361}% U+00F1
% U+00F2 LATIN SMALL LETTER O WITH GRAVE; ograve
\DeclareTextCompositeCommand{\`}{PU}{o}{\80\362}% U+00F2
% U+00F3 LATIN SMALL LETTER O WITH ACUTE; oacute
\DeclareTextCompositeCommand{\'}{PU}{o}{\80\363}% U+00F3
% U+00F4 LATIN SMALL LETTER O WITH CIRCUMFLEX; ocircumflex
\DeclareTextCompositeCommand{\^}{PU}{o}{\80\364}% U+00F4
% U+00F5 LATIN SMALL LETTER O WITH TILDE; otilde
\DeclareTextCompositeCommand{\~}{PU}{o}{\80\365}% U+00F5
% U+00F6 LATIN SMALL LETTER O WITH DIAERESIS; odieresis
\DeclareTextCompositeCommand{\"}{PU}{o}{\80\366}% U+00F6
% U+00F7 DIVISION SIGN; divide
\DeclareTextCommand{\textdivide}{PU}{\80\367}% U+00F7
% U+00F8 LATIN SMALL LETTER O WITH STROKE; oslash
\DeclareTextCommand{\o}{PU}{\80\370}% U+00F8
% U+00F9 LATIN SMALL LETTER U WITH GRAVE; ugrave
\DeclareTextCompositeCommand{\`}{PU}{u}{\80\371}% U+00F9
% U+00FA LATIN SMALL LETTER U WITH ACUTE; uacute
\DeclareTextCompositeCommand{\'}{PU}{u}{\80\372}% U+00FA
% U+00FB LATIN SMALL LETTER U WITH CIRCUMFLEX; ucircumflex
\DeclareTextCompositeCommand{\^}{PU}{u}{\80\373}% U+00FB
% U+00FC LATIN SMALL LETTER U WITH DIAERESIS; udieresis
\DeclareTextCompositeCommand{\"}{PU}{u}{\80\374}% U+00FC
% U+00FD LATIN SMALL LETTER Y WITH ACUTE; yacute
\DeclareTextCompositeCommand{\'}{PU}{y}{\80\375}% U+00FD
% U+00FE LATIN SMALL LETTER THORN; thorn;
%   \th, \thorn (wasysym), \textthorn (tipa)
\DeclareTextCommand{\th}{PU}{\80\376}% U+00FE
\DeclareTextCommand{\textthorn}{PU}{\80\376}%* U+00FE
% U+00FF LATIN SMALL LETTER Y WITH DIAERESIS; ydieresis
\DeclareTextCompositeCommand{\"}{PU}{y}{\80\377}% U+00FF
%    \end{macrocode}
%
% \subsubsection{Latin Extended-A: U+0080 to U+017F}
%
%    \begin{macrocode}
% U+0100 LATIN CAPITAL LETTER A WITH MACRON; Amacron
\DeclareTextCompositeCommand{\=}{PU}{A}{\81\000}% U+0100
% U+0101 LATIN SMALL LETTER A WITH MACRON; amacron
\DeclareTextCompositeCommand{\=}{PU}{a}{\81\001}% U+0101
% U+0102 LATIN CAPITAL LETTER A WITH BREVE; Abreve
\DeclareTextCompositeCommand{\u}{PU}{A}{\81\002}% U+0102
% U+0103 LATIN SMALL LETTER A WITH BREVE; abreve
\DeclareTextCompositeCommand{\u}{PU}{a}{\81\003}% U+0103
% U+0104 LATIN CAPITAL LETTER A WITH OGONEK; Aogonek
\DeclareTextCompositeCommand{\k}{PU}{A}{\81\004}% U+0104
% U+0105 LATIN SMALL LETTER A WITH OGONEK; aogonek
\DeclareTextCompositeCommand{\k}{PU}{a}{\81\005}% U+0105
% U+0106 LATIN CAPITAL LETTER C WITH ACUTE; Cacute
\DeclareTextCompositeCommand{\'}{PU}{C}{\81\006}% U+0106
% U+0107 LATIN SMALL LETTER C WITH ACUTE; cacute
\DeclareTextCompositeCommand{\'}{PU}{c}{\81\007}% U+0107
% U+0108 LATIN CAPITAL LETTER C WITH CIRCUMFLEX; Ccircumflex
\DeclareTextCompositeCommand{\^}{PU}{C}{\81\010}% U+0108
% U+0109 LATIN SMALL LETTER C WITH CIRCUMFLEX; ccircumflex
\DeclareTextCompositeCommand{\^}{PU}{c}{\81\011}% U+0109
% U+010A LATIN CAPITAL LETTER C WITH DOT ABOVE; Cdot, Cdotaccent
\DeclareTextCompositeCommand{\.}{PU}{C}{\81\012}% U+010A
% U+010B LATIN SMALL LETTER C WITH DOT ABOVE; cdot, cdotaccent
\DeclareTextCompositeCommand{\.}{PU}{c}{\81\013}% U+010B
% U+010C LATIN CAPITAL LETTER C WITH CARON; Ccaron
\DeclareTextCompositeCommand{\v}{PU}{C}{\81\014}% U+010C
% U+010D LATIN SMALL LETTER C WITH CARON; ccaron
\DeclareTextCompositeCommand{\v}{PU}{c}{\81\015}% U+010D
% U+010E LATIN CAPITAL LETTER D WITH CARON; Dcaron
\DeclareTextCompositeCommand{\v}{PU}{D}{\81\016}% U+010E
% U+010F LATIN SMALL LETTER D WITH CARON; dcaron
\DeclareTextCompositeCommand{\v}{PU}{d}{\81\017}% U+010F
% U+0110 LATIN CAPITAL LETTER D WITH STROKE; Dcroat, Dslash
\DeclareTextCommand{\DJ}{PU}{\81\020}% U+0110
% U+0111 LATIN SMALL LETTER D WITH STROKE; dcroat, dmacron;
%   \textcrd (tipa)
\DeclareTextCommand{\dj}{PU}{\81\021}% U+0111
\DeclareTextCommand{\textcrd}{PU}{\81\021}% U+0111
%* \textcrd -> \crossd (wsuipa)
% An alternate glyph with the stroke through the bowl:
%* \textcrd -> \textbard (tipa)
%* \textcrd -> \bard (wsuipa)
% U+0112 LATIN CAPITAL LETTER E WITH MACRON; Emacron
\DeclareTextCompositeCommand{\=}{PU}{E}{\81\022}% U+0112
% U+0113 LATIN SMALL LETTER E WITH MACRON; emacron
\DeclareTextCompositeCommand{\=}{PU}{e}{\81\023}% U+0113
% U+0114 LATIN CAPITAL LETTER E WITH BREVE; Ebreve
\DeclareTextCompositeCommand{\u}{PU}{E}{\81\024}% U+0114
% U+0115 LATIN SMALL LETTER E WITH BREVE; ebreve
\DeclareTextCompositeCommand{\u}{PU}{e}{\81\025}% U+0115
% U+0116 LATIN CAPITAL LETTER E WITH DOT ABOVE; Edot, Edotaccent
\DeclareTextCompositeCommand{\.}{PU}{E}{\81\026}% U+0116
% U+0117 LATIN SMALL LETTER E WITH DOT ABOVE; edot, edotaccent
\DeclareTextCompositeCommand{\.}{PU}{e}{\81\027}% U+0117
% U+0118 LATIN CAPITAL LETTER E WITH OGONEK; Eogonek
\DeclareTextCompositeCommand{\k}{PU}{E}{\81\030}% U+0118
% U+0119 LATIN SMALL LETTER E WITH OGONEK; eogonek
\DeclareTextCompositeCommand{\k}{PU}{e}{\81\031}% U+0119
% U+011A LATIN CAPITAL LETTER E WITH CARON; Ecaron
\DeclareTextCompositeCommand{\v}{PU}{E}{\81\032}% U+011A
% U+011B LATIN SMALL LETTER E WITH CARON; ecaron
\DeclareTextCompositeCommand{\v}{PU}{e}{\81\033}% U+011B
% U+011C LATIN CAPITAL LETTER G WITH CIRCUMFLEX; Gcircumflex
\DeclareTextCompositeCommand{\^}{PU}{G}{\81\034}% U+011C
% U+011D LATIN SMALL LETTER G WITH CIRCUMFLEX; gcircumflex
\DeclareTextCompositeCommand{\^}{PU}{g}{\81\035}% U+011D
% U+011E LATIN CAPITAL LETTER G WITH BREVE; Gbreve
\DeclareTextCompositeCommand{\u}{PU}{G}{\81\036}% U+011E
% U+011F LATIN SMALL LETTER G WITH BREVE; gbreve
\DeclareTextCompositeCommand{\u}{PU}{g}{\81\037}% U+011F
% U+0120 LATIN CAPITAL LETTER G WITH DOT ABOVE; Gdot, Gdotaccent
\DeclareTextCompositeCommand{\.}{PU}{G}{\81\040}% U+0120
% U+0121 LATIN SMALL LETTER G WITH DOT ABOVE; gdot, gdotaccent
\DeclareTextCompositeCommand{\.}{PU}{g}{\81\041}% U+0121
% U+0122 LATIN CAPITAL LETTER G WITH CEDILLA; Gcedilla, Gcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{G}{\81\042}% U+0122
% U+0123 LATIN SMALL LETTER G WITH CEDILLA; gcedilla, gcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{g}{\81\043}% U+0123
% U+0124 LATIN CAPITAL LETTER H WITH CIRCUMFLEX; Hcircumflex
\DeclareTextCompositeCommand{\^}{PU}{H}{\81\044}% U+0124
% U+0125 LATIN SMALL LETTER H WITH CIRCUMFLEX; hcircumflex
\DeclareTextCompositeCommand{\^}{PU}{h}{\81\045}% U+0125
% U+0126 LATIN CAPITAL LETTER H WITH STROKE; Hbar
\DeclareTextCommand{\textHslash}{PU}{\81\046}% U+0126
% U+0127 LATIN SMALL LETTER H WITH STROKE; hbar; \hbar (AmS)
\DeclareTextCommand{\texthbar}{PU}{\81\047}%* U+0127
%* \texthbar -> \textcrh (tipa)
%* \texthbar -> \crossh (wsuipa)
%* \texthbar -> \planck (phonetic)
% U+0128 LATIN CAPITAL LETTER I WITH TILDE; Itilde
\DeclareTextCompositeCommand{\~}{PU}{I}{\81\050}% U+0128
% U+0129 LATIN SMALL LETTER I WITH TILDE; itilde
\DeclareTextCompositeCommand{\~}{PU}{i}{\81\051}% U+0129
\DeclareTextCompositeCommand{\~}{PU}{\i}{\81\051}% U+0129
% U+012A LATIN CAPITAL LETTER I WITH MACRON; Imacron
\DeclareTextCompositeCommand{\=}{PU}{I}{\81\052}% U+012A
% U+012B LATIN SMALL LETTER I WITH MACRON; imacron
\DeclareTextCompositeCommand{\=}{PU}{i}{\81\053}% U+012B
\DeclareTextCompositeCommand{\=}{PU}{\i}{\81\053}% U+012B
% U+012C LATIN CAPITAL LETTER I WITH BREVE; Ibreve
\DeclareTextCompositeCommand{\u}{PU}{I}{\81\054}% U+012C
% U+012D LATIN SMALL LETTER I WITH BREVE; ibreve
\DeclareTextCompositeCommand{\u}{PU}{i}{\81\055}% U+012D
\DeclareTextCompositeCommand{\u}{PU}{\i}{\81\055}% U+012D
% U+012E LATIN CAPITAL LETTER I WITH OGONEK; Iogonek
\DeclareTextCompositeCommand{\k}{PU}{I}{\81\056}% U+012E
% U+012F LATIN SMALL LETTER I WITH OGONEK; iogonek
\DeclareTextCompositeCommand{\k}{PU}{i}{\81\057}% U+012F
\DeclareTextCompositeCommand{\k}{PU}{\i}{\81\057}% U+012F
% U+0130 LATIN CAPITAL LETTER I WITH DOT ABOVE; Idot, Idotaccent
\DeclareTextCompositeCommand{\.}{PU}{I}{\81\060}% U+0130
% U+0131 LATIN SMALL LETTER DOTLESS I; dotlessi
\DeclareTextCommand{\i}{PU}{\81\061}% U+0131
% U+0132 LATIN CAPITAL LIGATURE IJ; IJ
\DeclareTextCommand{\IJ}{PU}{\81\062}% U+0132
% U+0133 LATIN SMALL LIGATURE IJ; ij
\DeclareTextCommand{\ij}{PU}{\81\063}% U+0133
% U+0134 LATIN CAPITAL LETTER J WITH CIRCUMFLEX; Jcircumflex
\DeclareTextCompositeCommand{\^}{PU}{J}{\81\064}% U+0134
% U+0135 LATIN SMALL LETTER J WITH CIRCUMFLEX; jcircumflex
\DeclareTextCompositeCommand{\^}{PU}{j}{\81\065}% U+0135
\DeclareTextCompositeCommand{\^}{PU}{\j}{\81\065}% U+0135
% U+0136 LATIN CAPITAL LETTER K WITH CEDILLA; Kcedilla, Kcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{K}{\81\066}% U+0136
% U+0137 LATIN SMALL LETTER K WITH CEDILLA; kcedilla, kcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{k}{\81\067}% U+0137
%    \end{macrocode}
%    The canonical name of U+0138, small letter kra, would be
%    \cs{textkgreenlandic}, following the glyph naming convention.
%    However |latex/base/inputenc.dtx| has chosen \cs{textkra}.
%    \begin{macrocode}
% U+0138 LATIN SMALL LETTER KRA; kgreenlandic
\DeclareTextCommand{\textkra}{PU}{\81\070}% U+0138
% U+0139 LATIN CAPITAL LETTER L WITH ACUTE; Lacute
\DeclareTextCompositeCommand{\'}{PU}{L}{\81\071}% U+0139
% U+013A LATIN SMALL LETTER L WITH ACUTE; lacute
\DeclareTextCompositeCommand{\'}{PU}{l}{\81\072}% U+013A
% U+013B LATIN CAPITAL LETTER L WITH CEDILLA; Lcedilla, Lcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{L}{\81\073}% U+013B
% U+013C LATIN SMALL LETTER L WITH CEDILLA; lcedilla, lcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{l}{\81\074}% U+013C
% U+013D LATIN CAPITAL LETTER L WITH CARON; Lcaron
\DeclareTextCompositeCommand{\v}{PU}{L}{\81\075}% U+013D
% U+013E LATIN SMALL LETTER L WITH CARON; lcaron
\DeclareTextCompositeCommand{\v}{PU}{l}{\81\076}% U+013E
%    \end{macrocode}
%    There seems to be no variants of letters `L' and `l' with
%    a dot above (reasonable). Therefore the \cs{.} accent
%    is reused instead of making a separate accent macro
%    \cs{textmiddledot}.
%    \begin{macrocode}
% U+013F LATIN CAPITAL LETTER L WITH MIDDLE DOT; Ldot, Ldotaccent
\DeclareTextCompositeCommand{\.}{PU}{L}{\81\077}% U+013F
% U+0140 LATIN SMALL LETTER L WITH MIDDLE DOT; ldot, ldotaccent
\DeclareTextCompositeCommand{\.}{PU}{l}{\81\100}% U+0140
% U+0141 LATIN CAPITAL LETTER L WITH STROKE; Lslash
\DeclareTextCommand{\L}{PU}{\81\101}% U+0141
% U+0142 LATIN SMALL LETTER L WITH STROKE; lslash
\DeclareTextCommand{\l}{PU}{\81\102}% U+0142
% U+0143 LATIN CAPITAL LETTER N WITH ACUTE; Nacute
\DeclareTextCompositeCommand{\'}{PU}{N}{\81\103}% U+0143
% U+0144 LATIN SMALL LETTER N WITH ACUTE; nacute
\DeclareTextCompositeCommand{\'}{PU}{n}{\81\104}% U+0144
% U+0145 LATIN CAPITAL LETTER N WITH CEDILLA; Ncedilla, Ncommaaccent
\DeclareTextCompositeCommand{\c}{PU}{N}{\81\105}% U+0145
% U+0146 LATIN SMALL LETTER N WITH CEDILLA; ncedilla, ncommaaccent
\DeclareTextCompositeCommand{\c}{PU}{n}{\81\106}% U+0146
% U+0147 LATIN CAPITAL LETTER N WITH CARON; Ncaron
\DeclareTextCompositeCommand{\v}{PU}{N}{\81\107}% U+0147
% U+0148 LATIN SMALL LETTER N WITH CARON; ncaron
\DeclareTextCompositeCommand{\v}{PU}{n}{\81\110}% U+0148
% U+0149 LATIN SMALL LETTER N PRECEDED BY APOSTROPHE; napostrophe, quoterightn
\DeclareTextCommand{\textnapostrophe}{PU}{\81\111}% U+0149
% U+014A LATIN CAPITAL LETTER ENG; Eng
\DeclareTextCommand{\NG}{PU}{\81\112}% U+014A
% U+014B LATIN SMALL LETTER ENG; eng
\DeclareTextCommand{\ng}{PU}{\81\113}% U+014B
%* \ng -> \eng (wsuipa)
%* \ng -> \engma (phonetic)
% U+014C LATIN CAPITAL LETTER O WITH MACRON; Omacron
\DeclareTextCompositeCommand{\=}{PU}{O}{\81\114}% U+014C
% U+014D LATIN SMALL LETTER O WITH MACRON; omacron
\DeclareTextCompositeCommand{\=}{PU}{o}{\81\115}% U+014D
% U+014E LATIN CAPITAL LETTER O WITH BREVE; Obreve
\DeclareTextCompositeCommand{\u}{PU}{O}{\81\116}% U+014E
% U+014F LATIN SMALL LETTER O WITH BREVE; obreve
\DeclareTextCompositeCommand{\u}{PU}{o}{\81\117}% U+014F
% U+0150 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE; Odblacute, Ohungarumlaut
\DeclareTextCompositeCommand{\H}{PU}{O}{\81\120}% U+0150
% U+0151 LATIN SMALL LETTER O WITH DOUBLE ACUTE; odblacute, ohungarumlaut
\DeclareTextCompositeCommand{\H}{PU}{o}{\81\121}% U+0151
% U+0152 LATIN CAPITAL LIGATURE OE; OE
\DeclareTextCommand{\OE}{PU}{\81\122}% U+0152
% U+0153 LATIN SMALL LIGATURE OE; oe
\DeclareTextCommand{\oe}{PU}{\81\123}% U+0153
% U+0154 LATIN CAPITAL LETTER R WITH ACUTE; Racute
\DeclareTextCompositeCommand{\'}{PU}{R}{\81\124}% U+0154
% U+0155 LATIN SMALL LETTER R WITH ACUTE; racute
\DeclareTextCompositeCommand{\'}{PU}{r}{\81\125}% U+0155
% U+0156 LATIN CAPITAL LETTER R WITH CEDILLA; Rcedilla, Rcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{R}{\81\126}% U+0156
% U+0157 LATIN SMALL LETTER R WITH CEDILLA; rcedilla, rcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{r}{\81\127}% U+0157
% U+0158 LATIN CAPITAL LETTER R WITH CARON; Rcaron
\DeclareTextCompositeCommand{\v}{PU}{R}{\81\130}% U+0158
% U+0159 LATIN SMALL LETTER R WITH CARON; rcaron
\DeclareTextCompositeCommand{\v}{PU}{r}{\81\131}% U+0159
% U+015A LATIN CAPITAL LETTER S WITH ACUTE; Sacute
\DeclareTextCompositeCommand{\'}{PU}{S}{\81\132}% U+015A
% U+015B LATIN SMALL LETTER S WITH ACUTE; sacute
\DeclareTextCompositeCommand{\'}{PU}{s}{\81\133}% U+015B
% U+015C LATIN CAPITAL LETTER S WITH CIRCUMFLEX; Scircumflex
\DeclareTextCompositeCommand{\^}{PU}{S}{\81\134}% U+015C
% U+015D LATIN SMALL LETTER S WITH CIRCUMFLEX; scircumflex
\DeclareTextCompositeCommand{\^}{PU}{s}{\81\135}% U+015D
% U+015E LATIN CAPITAL LETTER S WITH CEDILLA; Scedilla
\DeclareTextCompositeCommand{\c}{PU}{S}{\81\136}% U+015E
% U+015F LATIN SMALL LETTER S WITH CEDILLA; scedilla
\DeclareTextCompositeCommand{\c}{PU}{s}{\81\137}% U+015F
% U+0160 LATIN CAPITAL LETTER S WITH CARON; Scaron
\DeclareTextCompositeCommand{\v}{PU}{S}{\81\140}% U+0160
% U+0161 LATIN SMALL LETTER S WITH CARON; scaron
\DeclareTextCompositeCommand{\v}{PU}{s}{\81\141}% U+0161
% U+0162 LATIN CAPITAL LETTER T WITH CEDILLA; Tcedilla, Tcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{T}{\81\142}% U+0162
% U+0163 LATIN SMALL LETTER T WITH CEDILLA; tcedilla, tcommaaccent
\DeclareTextCompositeCommand{\c}{PU}{t}{\81\143}% U+0163
% U+0164 LATIN CAPITAL LETTER T WITH CARON; Tcaron
\DeclareTextCompositeCommand{\v}{PU}{T}{\81\144}% U+0164
% U+0165 LATIN SMALL LETTER T WITH CARON; tcaron
\DeclareTextCompositeCommand{\v}{PU}{t}{\81\145}% U+0165
% U+0166 LATIN CAPITAL LETTER T WITH STROKE; Tbar
\DeclareTextCommand{\textTslash}{PU}{\81\146}% U+0166
% U+0167 LATIN SMALL LETTER T WITH STROKE; tbar
\DeclareTextCommand{\texttslash}{PU}{\81\147}% U+0167
% U+0168 LATIN CAPITAL LETTER U WITH TILDE; Utilde
\DeclareTextCompositeCommand{\~}{PU}{U}{\81\150}% U+0168
% U+0169 LATIN SMALL LETTER U WITH TILDE; utilde
\DeclareTextCompositeCommand{\~}{PU}{u}{\81\151}% U+0169
% U+016A LATIN CAPITAL LETTER U WITH MACRON; Umacron
\DeclareTextCompositeCommand{\=}{PU}{U}{\81\152}% U+016A
% U+016B LATIN SMALL LETTER U WITH MACRON; umacron
\DeclareTextCompositeCommand{\=}{PU}{u}{\81\153}% U+016B
% U+016C LATIN CAPITAL LETTER U WITH BREVE; Ubreve
\DeclareTextCompositeCommand{\u}{PU}{U}{\81\154}% U+016C
% U+016D LATIN SMALL LETTER U WITH BREVE; ubreve
\DeclareTextCompositeCommand{\u}{PU}{u}{\81\155}% U+016D
% U+016E LATIN CAPITAL LETTER U WITH RING ABOVE; Uring
\DeclareTextCompositeCommand{\r}{PU}{U}{\81\156}% U+016E
% U+016F LATIN SMALL LETTER U WITH RING ABOVE; uring
\DeclareTextCompositeCommand{\r}{PU}{u}{\81\157}% U+016F
% U+0170 LATIN CAPITAL LETTER U WITH DOUBLE ACUTE; Udblacute, Uhungarumlaut
\DeclareTextCompositeCommand{\H}{PU}{U}{\81\160}% U+0170
% U+0171 LATIN SMALL LETTER U WITH DOUBLE ACUTE; udblacute, uhungarumlaut
\DeclareTextCompositeCommand{\H}{PU}{u}{\81\161}% U+0171
% U+0172 LATIN CAPITAL LETTER U WITH OGONEK; Uogonek
\DeclareTextCompositeCommand{\k}{PU}{U}{\81\162}% U+0172
% U+0173 LATIN SMALL LETTER U WITH OGONEK; uogonek
\DeclareTextCompositeCommand{\k}{PU}{u}{\81\163}% U+0173
% U+0174 LATIN CAPITAL LETTER W WITH CIRCUMFLEX; Wcircumflex
\DeclareTextCompositeCommand{\^}{PU}{W}{\81\164}% U+0174
% U+0175 LATIN SMALL LETTER W WITH CIRCUMFLEX; wcircumflex
\DeclareTextCompositeCommand{\^}{PU}{w}{\81\165}% U+0175
% U+0176 LATIN CAPITAL LETTER Y WITH CIRCUMFLEX; Ycircumflex
\DeclareTextCompositeCommand{\^}{PU}{Y}{\81\166}% U+0176
% U+0177 LATIN SMALL LETTER Y WITH CIRCUMFLEX; ycircumflex
\DeclareTextCompositeCommand{\^}{PU}{y}{\81\167}% U+0177
% U+0178 LATIN CAPITAL LETTER Y WITH DIAERESIS; Ydieresis
\DeclareTextCompositeCommand{\"}{PU}{Y}{\81\170}% U+0178
% U+0179 LATIN CAPITAL LETTER Z WITH ACUTE; Zacute
\DeclareTextCompositeCommand{\'}{PU}{Z}{\81\171}% U+0179
% U+017A LATIN SMALL LETTER Z WITH ACUTE; zacute
\DeclareTextCompositeCommand{\'}{PU}{z}{\81\172}% U+017A
% U+017B LATIN CAPITAL LETTER Z WITH DOT ABOVE; Zdot, Zdotaccent
\DeclareTextCompositeCommand{\.}{PU}{Z}{\81\173}% U+017B
% U+017C LATIN SMALL LETTER Z WITH DOT ABOVE; zdot, zdotaccent
\DeclareTextCompositeCommand{\.}{PU}{z}{\81\174}% U+017C
% U+017D LATIN CAPITAL LETTER Z WITH CARON; Zcaron
\DeclareTextCompositeCommand{\v}{PU}{Z}{\81\175}% U+017D
% U+017E LATIN SMALL LETTER Z WITH CARON; zcaron
\DeclareTextCompositeCommand{\v}{PU}{z}{\81\176}% U+017E
% U+017F LATIN SMALL LETTER LONG S; longs, slong
\DeclareTextCommand{\textlongs}{PU}{\81\177}% U+017F
%    \end{macrocode}
%
% \subsubsection{Latin Extended-B: U+0180 to U+024F}
%
%    \begin{macrocode}
% U+0180 LATIN SMALL LETTER B WITH STROKE; bstroke; \textcrb (tipa)
\DeclareTextCommand{\textcrb}{PU}{\81\200}% U+0180
%* \textcrb -> \crossb (wsuipa)
% An alternate glyph with the stroke through the bowl:
%* \textcrb -> \textbarb (tipa)
%* \textcrb -> \barb (wsuipa)
% U+0181 LATIN CAPITAL LETTER B WITH HOOK; Bhook; \hausaB (phonetic)
\DeclareTextCommand{\texthausaB}{PU}{\81\201}%* U+0181
% U+0188 LATIN SMALL LETTER C WITH HOOK; chook; \texthtc (tipa)
\DeclareTextCommand{\texthtc}{PU}{\81\210}% U+0188
% U+018A LATIN CAPITAL LETTER D WITH HOOK; Dhook; \hausaD (phonetic)
\DeclareTextCommand{\texthausaD}{PU}{\81\212}%* U+018A
% U+018E LATIN CAPITAL LETTER REVERSED E; Ereversed
\DeclareTextCommand{\textEreversed}{PU}{\81\216}% U+018E
\DeclareTextCommand{\textrevE}{PU}{\81\216}% U+018E
% U+0192 LATIN SMALL LETTER F WITH HOOK; florin
\DeclareTextCommand{\textflorin}{PU}{\81\222}% U+0192
%* \textflorin -> \Florin (marvosym)
% U+0195 LATIN SMALL LETTER HV; hv; \texthvlig (tipa)
\DeclareTextCommand{\texthvlig}{PU}{\81\225}% U+0195
%* \texthvlig -> \hv (wsuipa)
% U+0198 LATIN CAPITAL LETTER K WITH HOOK; Khook; \hausaK (phonetic)
\DeclareTextCommand{\texthausaK}{PU}{\81\230}%* U+0198
% U+0199 LATIN SMALL LETTER K WITH HOOK; khook; \texthtk (tipa)
\DeclareTextCommand{\texthtk}{PU}{\81\231}% U+0199
%* \texthtk -> \hausak (phonetic)
% U+019A LATIN SMALL LETTER L WITH BAR; lbar;
%   \textbarl (tipa), \barl (wsuipa)
\DeclareTextCommand{\textbarl}{PU}{\81\232}%* U+019A
% U+019B LATIN SMALL LETTER LAMBDA WITH STROKE/
%   LATIN SMALL LETTER BARRED LAMBDA; lambdastroke;
%   \textcrlambda (tipa)
\DeclareTextCommand{\textcrlambda}{PU}{\81\233}% U+019B
%* \textcrlambda -> \crossnilambda (wsuipa)
%* \textcrlambda -> \barlambda (phonetic)
%* \textcrlambda -> \lambdabar (txfonts/pxfonts)
%* \textcrlambda -> \lambdaslash (txfonts/pxfonts)
% U+019E LATIN SMALL LETTER N WITH LONG RIGHT LEG; nlegrightlong;
%   \textnrleg (tipx)
\DeclareTextCommand{\textPUnrleg}{PU}{\81\236}% U+019E
%* \textPUnrleg -> \textnrleg (tipx)
% U+01A5 LATIN SMALL LETTER P WITH HOOK; phook; \texthtp (tipa)
\DeclareTextCommand{\texthtp}{PU}{\81\245}% U+01A5
% U+01AB LATIN SMALL LETTER T WITH PALATAL HOOK; tpalatalhook;
%   \textlhookt (tipa)
\DeclareTextCommand{\textlhookt}{PU}{\81\253}% U+01AB
% U+01AD LATIN SMALL LETTER T WITH HOOK; thook; \texthtt (tipa)
\DeclareTextCommand{\texthtt}{PU}{\81\255}% U+01AD
% U+01B9 LATIN SMALL LETTER EZH REVERSED/
%   LATIN SMALL LETTER REVERSED YOGH; \textrevyogh (tipa)
\DeclareTextCommand{\textrevyogh}{PU}{\81\271}% U+01B9
% U+01BB LATIN LETTER TWO WITH STROKE; twostroke; \textcrtwo (tipa)
\DeclareTextCommand{\textcrtwo}{PU}{\81\273}% U+01BB
% U+01BE LATIN LETTER INVERTED GLOTTAL STOP WITH STROKE;
%   glottalinvertedstroke; \textcrinvglotstop (tipa)
\DeclareTextCommand{\textcrinvglotstop}{PU}{\81\276}% U+01BE
% U+01BF LATIN LETTER WYNN; wynn; \textwynn (tipa)
\DeclareTextCommand{\textwynn}{PU}{\81\277}% U+01BF
% U+01C0 LATIN LETTER DENTAL CLICK/LATIN LETTER PIPE; clickdental;
%   \textpipe (tipa)
\DeclareTextCommand{\textpipe}{PU}{\81\300}% U+01C0
%* \textpipe -> \textpipevar (tipx)
% U+01C1 LATIN LETTER LATERAL CLICK/LATIN LETTER
%   DOUBLE PIPE; clicklateral; \textdoublepipe (tipa)
\DeclareTextCommand{\textdoublepipe}{PU}{\81\301}% U+01C1
%* \textdoublepipe -> \textdoublepipevar (tipx)
% U+01C2 LATIN LETTER ALVEOLAR CLICK/LATIN LETTER PIPE DOUBLE BAR;
%   clickalveolar; \textdoublebarpipe (tipa)
\DeclareTextCommand{\textdoublebarpipe}{PU}{\81\302}% U+01C2
%* \textdoublebarpipe -> \textdoublebarpipevar (tipx)
% U+01CD LATIN CAPITAL LETTER A WITH CARON; Acaron
\DeclareTextCompositeCommand{\v}{PU}{A}{\81\315}% U+01CD
% U+01CE LATIN SMALL LETTER A WITH CARON; acaron
\DeclareTextCompositeCommand{\v}{PU}{a}{\81\316}% U+01CE
% U+01CF LATIN CAPITAL LETTER I WITH CARON; Icaron
\DeclareTextCompositeCommand{\v}{PU}{I}{\81\317}% U+01CF
% U+01D0 LATIN SMALL LETTER I WITH CARON; icaron
\DeclareTextCompositeCommand{\v}{PU}{\i}{\81\320}% U+01D0
\DeclareTextCompositeCommand{\v}{PU}{i}{\81\320}% U+01D0
% U+01D1 LATIN CAPITAL LETTER O WITH CARON; Ocaron
\DeclareTextCompositeCommand{\v}{PU}{O}{\81\321}% U+01D1
% U+01D2 LATIN SMALL LETTER O WITH CARON; ocaron
\DeclareTextCompositeCommand{\v}{PU}{o}{\81\322}% U+01D2
% U+01D3 LATIN CAPITAL LETTER U WITH CARON; Ucaron
\DeclareTextCompositeCommand{\v}{PU}{U}{\81\323}% U+01D3
% U+01D4 LATIN SMALL LETTER U WITH CARON; ucaron
\DeclareTextCompositeCommand{\v}{PU}{u}{\81\324}% U+01D4
% U+01DD LATIN SMALL LETTER TURNED E; eturned; \inve (wasysym)
\DeclareTextCommand{\textinve}{PU}{\81\335}%* U+01DD
% U+01E4 LATIN CAPITAL LETTER G WITH STROKE; Gstroke
\DeclareTextCommand{\textGslash}{PU}{\81\344}% U+01E4
% U+01E5 LATIN SMALL LETTER G WITH STROKE; gstroke
\DeclareTextCommand{\textgslash}{PU}{\81\345}% U+01E5
%* \textgslash -> \textcrg (tipa)
% U+01E6 LATIN CAPITAL LETTER G WITH CARON; Gcaron
\DeclareTextCompositeCommand{\v}{PU}{G}{\81\346}% U+01E6
% U+01E7 LATIN SMALL LETTER G WITH CARON; gcaron
\DeclareTextCompositeCommand{\v}{PU}{g}{\81\347}% U+01E7
% U+01E8 LATIN CAPITAL LETTER K WITH CARON; Kcaron
\DeclareTextCompositeCommand{\v}{PU}{K}{\81\350}% U+01E8
% U+01E9 LATIN SMALL LETTER K WITH CARON; kcaron
\DeclareTextCompositeCommand{\v}{PU}{k}{\81\351}% U+01E9
% U+01EA LATIN CAPITAL LETTER O WITH OGONEK; Oogonek
\DeclareTextCompositeCommand{\k}{PU}{O}{\81\352}% U+01EA
% U+01EB LATIN SMALL LETTER O WITH OGONEK; oogonek
\DeclareTextCompositeCommand{\k}{PU}{o}{\81\353}% U+01EB
% U+01F0 LATIN SMALL LETTER J WITH CARON; jcaron
\DeclareTextCompositeCommand{\v}{PU}{\j}{\81\360}% U+01F0
\DeclareTextCompositeCommand{\v}{PU}{j}{\81\360}% U+01F0
% U+01F4 LATIN CAPITAL LETTER G WITH ACUTE; Gacute
\DeclareTextCompositeCommand{\'}{PU}{G}{\81\364}% U+01F4
% U+01F5 LATIN SMALL LETTER G WITH ACUTE; gacute
\DeclareTextCompositeCommand{\'}{PU}{g}{\81\365}% U+01F5
% U+01F8 LATIN CAPITAL LETTER N WITH GRAVE
\DeclareTextCompositeCommand{\`}{PU}{N}{\81\370}% U+01F8
% U+01F9 LATIN SMALL LETTER N WITH GRAVE
\DeclareTextCompositeCommand{\`}{PU}{n}{\81\371}% U+01F9
% U+01FC LATIN CAPITAL LETTER AE WITH ACUTE; AEacute
\DeclareTextCompositeCommand{\'}{PU}{\AE}{\81\374}% U+01FC
% U+01FD LATIN SMALL LETTER AE WITH ACUTE; aeacute
\DeclareTextCompositeCommand{\'}{PU}{\ae}{\81\375}% U+01FD
% U+01FE LATIN CAPITAL LETTER O WITH STROKE AND ACUTE;
%   *Oslashacute, Ostrokeacut
\DeclareTextCompositeCommand{\'}{PU}{\O}{\81\376}% U+01FE
% U+01FF LATIN SMALL LETTER O WITH STROKE AND ACUTE;
%   *oslashacute, ostrokeacute
\DeclareTextCompositeCommand{\'}{PU}{\o}{\81\377}% U+01FF
%</puenc>
%<*puextra>
% U+0200 LATIN CAPITAL LETTER A WITH DOUBLE GRAVE; Adblgrave
\DeclareTextCompositeCommand{\G}{PU}{A}{\82\000}% U+0200
% U+0201 LATIN SMALL LETTER A WITH DOUBLE GRAVE; adblgrave
\DeclareTextCompositeCommand{\G}{PU}{a}{\82\001}% U+0201
% U+0204 LATIN CAPITAL LETTER E WITH DOUBLE GRAVE; Edblgrave
\DeclareTextCompositeCommand{\G}{PU}{E}{\82\004}% U+0204
% U+0205 LATIN SMALL LETTER E WITH DOUBLE GRAVE; edblgrave
\DeclareTextCompositeCommand{\G}{PU}{e}{\82\005}% U+0205
%</puextra>
%<*puenc>
% U+0206 LATIN CAPITAL LETTER E WITH INVERTED BREVE; Einvertedbreve
\DeclareTextCompositeCommand{\textinvbreve}{PU}{E}{\82\006}% U+0206
% U+0207 LATIN SMALL LETTER E WITH INVERTED BREVE; einvertedbreve
\DeclareTextCompositeCommand{\textinvbreve}{PU}{e}{\82\007}% U+0207
%</puenc>
%<*puextra>
% U+0208 LATIN CAPITAL LETTER I WITH DOUBLE GRAVE; Idblgrave
\DeclareTextCompositeCommand{\G}{PU}{I}{\82\010}% U+0208
% U+0209 LATIN SMALL LETTER I WITH DOUBLE GRAVE; idblgrave
\DeclareTextCompositeCommand{\G}{PU}{\i}{\82\011}% U+0209
\DeclareTextCompositeCommand{\G}{PU}{i}{\82\011}% U+0209
%</puextra>
%<*puenc>
% U+020A LATIN CAPITAL LETTER I WITH INVERTED BREVE; Iinvertedbreve
\DeclareTextCompositeCommand{\textinvbreve}{PU}{I}{\82\012}% U+020A
% U+020B LATIN SMALL LETTER I WITH INVERTED BREVE; iinvertedbreve
\DeclareTextCompositeCommand{\textinvbreve}{PU}{i}{\82\013}% U+020B
\DeclareTextCompositeCommand{\textinvbreve}{PU}{\i}{\82\013}% U+020B
%</puenc>
%<*puextra>
% U+020C LATIN CAPITAL LETTER O WITH DOUBLE GRAVE; Odblgrave
\DeclareTextCompositeCommand{\G}{PU}{O}{\82\014}% U+020C
% U+020D LATIN SMALL LETTER O WITH DOUBLE GRAVE; odblgrave
\DeclareTextCompositeCommand{\G}{PU}{o}{\82\015}% U+020D
%</puextra>
%<*puenc>
% U+020E LATIN CAPITAL LETTER O WITH INVERTED BREVE; Oinvertedbreve
\DeclareTextCompositeCommand{\textinvbreve}{PU}{O}{\82\016}% U+020E
% U+020F LATIN SMALL LETTER O WITH INVERTED BREVE; oinvertedbreve
\DeclareTextCompositeCommand{\textinvbreve}{PU}{o}{\82\017}% U+020F
%</puenc>
%<*puextra>
% U+0210 LATIN CAPITAL LETTER R WITH DOUBLE GRAVE; Rdblgrave
\DeclareTextCompositeCommand{\G}{PU}{R}{\82\020}% U+0210
% U+0211 LATIN SMALL LETTER R WITH DOUBLE GRAVE; rdblgrave
\DeclareTextCompositeCommand{\G}{PU}{r}{\82\021}% U+0211
% U+0214 LATIN CAPITAL LETTER U WITH DOUBLE GRAVE; Udblgrave
\DeclareTextCompositeCommand{\G}{PU}{U}{\82\024}% U+0214
% U+0215 LATIN SMALL LETTER U WITH DOUBLE GRAVE; udblgrave
\DeclareTextCompositeCommand{\G}{PU}{u}{\82\025}% U+0215
%</puextra>
%<*puenc>
% U+0216 LATIN CAPITAL LETTER U WITH INVERTED BREVE; Uinvertedbreve
\DeclareTextCompositeCommand{\textinvbreve}{PU}{U}{\82\026}% U+0216
% U+0217 LATIN SMALL LETTER U WITH INVERTED BREVE; uinvertedbreve
\DeclareTextCompositeCommand{\textinvbreve}{PU}{u}{\82\027}% U+0217
% U+021E LATIN CAPITAL LETTER H WITH CARON
\DeclareTextCompositeCommand{\v}{PU}{H}{\82\036}% U+021E
% U+021F LATIN SMALL LETTER H WITH CARON
\DeclareTextCompositeCommand{\v}{PU}{h}{\82\037}% U+021F
% U+0221 LATIN SMALL LETTER D WITH CURL; \textctd (tipa)
\DeclareTextCommand{\textctd}{PU}{\82\041}% U+0221
% U+0225 LATIN SMALL LETTER Z WITH HOOK; \textcommatailz (tipa)
\DeclareTextCommand{\textcommatailz}{PU}{\82\045}% U+0225
% U+0226 LATIN CAPITAL LETTER A WITH DOT ABOVE
\DeclareTextCompositeCommand{\.}{PU}{A}{\82\046}% U+0226
% U+0227 LATIN SMALL LETTER A WITH DOT ABOVE
\DeclareTextCompositeCommand{\.}{PU}{a}{\82\047}% U+0227
% U+0228 LATIN CAPITAL LETTER E WITH CEDILLA
\DeclareTextCompositeCommand{\c}{PU}{E}{\82\050}% U+0228
% U+0229 LATIN SMALL LETTER E WITH CEDILLA
\DeclareTextCompositeCommand{\c}{PU}{e}{\82\051}% U+0229
% U+022E LATIN CAPITAL LETTER O WITH DOT ABOVE
\DeclareTextCompositeCommand{\.}{PU}{O}{\82\056}% U+022E
% U+022F LATIN SMALL LETTER O WITH DOT ABOVE
\DeclareTextCompositeCommand{\.}{PU}{o}{\82\057}% U+022F
% U+0232 LATIN CAPITAL LETTER Y WITH MACRON
\DeclareTextCompositeCommand{\=}{PU}{Y}{\82\062}% U+0232
% U+0233 LATIN SMALL LETTER Y WITH MACRON
\DeclareTextCompositeCommand{\=}{PU}{y}{\82\063}% U+0233
% U+0235 LATIN SMALL LETTER N WITH CURL; \textctn (tipa)
\DeclareTextCommand{\textctn}{PU}{\82\065}% U+0235
% U+0236 LATIN SMALL LETTER T WITH CURL; \textctt (tipa)
\DeclareTextCommand{\textctt}{PU}{\82\066}% U+0236
% U+0237 LATIN SMALL LETTER DOTLESS J
\DeclareTextCommand{\j}{PU}{\82\067}% U+0237
% U+0238 LATIN SMALL LETTER DB DIGRAPH; \textdblig (tipx)
\DeclareTextCommand{\textPUdblig}{PU}{\82\070}% U+0238
%* \textPUdblig -> \textdblig (tipx)
% U+0239 LATIN SMALL LETTER QP DIGRAPH; \textqplig (tipx)
\DeclareTextCommand{\textPUqplig}{PU}{\82\071}% U+0239
%* \textPUqplig -> \textqplig (tipx)
% U+023C LATIN SMALL LETTER C WITH STROKE; \slashc (wsuipa)
\DeclareTextCommand{\textslashc}{PU}{\82\074}%* U+023C
%* \textslashc -> \textcentoldstyle (textcomp)
% With bar instead of stroke:
%* \textslashc -> \textbarc (tipa)
%    \end{macrocode}
%
% \subsubsection{IPA Extensions: U+0250 to U+02AF}
%
%    \begin{macrocode}
% U+0250 LATIN SMALL LETTER TURNED A; aturned; \textturna (tipa)
\DeclareTextCommand{\textturna}{PU}{\82\120}% U+0250
%* \textturna -> \inva (wasysym)
% U+0251 LATIN SMALL LETTER ALPHA/LATIN SMALL LETTER
%   SCRIPT A; ascript; \textscripta (tipa), \scripta (wsuipa)
\DeclareTextCommand{\textscripta}{PU}{\82\121}%* U+0251
%* \textscripta -> \vara (phonetic)
% U+0252 LATIN SMALL LETTER TURNED ALPHA; ascriptturned;
%   \textturnscripta (tipa)
\DeclareTextCommand{\textturnscripta}{PU}{\82\122}% U+0252
%* \textturnscripta -> \invscripta (wsuipa)
%* \textturnscripta -> \rotvara (phonetic)
% U+0253 LATIN CAPITAL LETTER B WITH HOOK; bhook; \texthtb (tipa)
\DeclareTextCommand{\texthtb}{PU}{\82\123}% U+0253
%* \texthtb -> \hookb (wsuipa)
%* \texthtb -> \hausab (phonetic)
% U+0254 LATIN SMALL LETTER OPEN O; oopen;
%   \textopeno (tipa), \openo (wasysym)
\DeclareTextCommand{\textopeno}{PU}{\82\124}%* U+0254
%* \textopeno -> \varopeno (phonetic)
% U+0255 LATIN SMALL LETTER C WITH CURL; ccurl; \textctc (tipa)
\DeclareTextCommand{\textctc}{PU}{\82\125}% U+0255
%* \textctc -> \curlyc (wsuipa)
% U+0256 LATIN SMALL LETTER D WITH TAIL; dtail; \textrtaild (tipa)
\DeclareTextCommand{\textrtaild}{PU}{\82\126}%* U+0256
%* \textrtaild -> \taild (wsuipa)
% U+0257 LATIN SMALL LETTER D WITH HOOK; dhook; \texthtd (tipa)
\DeclareTextCommand{\texthtd}{PU}{\82\127}% U+0257
%* \texthtd -> \hookd (wsuipa)
%* \texthtd -> \hausad (phonetic)
% U+0258 LATIN SMALL LETTER REVERSED E; ereversed;
%   \textreve (tipa), \reve (wsuipa)
\DeclareTextCommand{\textreve}{PU}{\82\130}%* U+0258
% U+0259 LATIN SMALL LETTER SCHWA; schwa;
%   \textschwa (tipa), \schwa (wsuipa, phonetic)
\DeclareTextCommand{\textschwa}{PU}{\82\131}%* U+0259
% U+025A LATIN SMALL LETTER SCHWA WITH HOOK; schwahook;
%   \textrhookschwa (tipa)
\DeclareTextCommand{\textrhookschwa}{PU}{\82\132}% U+025A
%* \textrhookschwa -> \er (wsuipa)
% U+025B LATIN SMALL LETTER OPEN E/LATIN SMALL LETTER EPSILON; eopen;
%   \niepsilon (wsuipa)
\DeclareTextCommand{\textniepsilon}{PU}{\82\133}%* U+025B
%* \textniepsilon -> \epsi (phonetic)
% U+025C LATIN SMALL LETTER REVERSED OPEN E; eopenreversed;
%   \textrevepsilon (tipa), \revepsilon (wsuipa)
\DeclareTextCommand{\textrevepsilon}{PU}{\82\134}%* U+025C
% U+025D LATIN SMALL LETTER REVERSED OPEN E WITH HOOK; eopenreversedhook;
%   \textrhookrevepsilon (tipa)
\DeclareTextCommand{\textrhookrevepsilon}{PU}{\82\135}%* U+025D
%* \textrhookrevepsilon -> \hookrevepsilon (wsuipa)
% U+025E LATIN SMALL LETTER CLOSED REVERSED OPEN E; eopenreversedclosed;
%   \textcloserevepsilon (tipa)
\DeclareTextCommand{\textcloserevepsilon}{PU}{\82\136}% U+025E
%* \textcloserevepsilon -> \closedrevepsilon (wsuipa)
% U+025F LATIN SMALL LETTER DOTLESS J WITH STROKE; jdotlessstroke;
%   \textbardotlessj (tipa)
\DeclareTextCommand{\textbardotlessj}{PU}{\82\137}% U+025F
%* \textbardotlessj -> \barj (phonetic)
% U+0260 LATIN SMALL LETTER G WITH HOOK; ghook; \texthtg (tipa)
\DeclareTextCommand{\texthtg}{PU}{\82\140}% U+0260
%* \texthtg -> \hookg (wsuipa)
% U+0261 LATIN SMALL LETTER SCRIPT G; gscript;
%   \textscriptg (tipa), \scriptg (wsuipa)
\DeclareTextCommand{\textscriptg}{PU}{\82\141}%* U+0261
%* \textscriptg -> \varg (phonetic)
% U+0262 LATIN LETTER SMALL CAPITAL G; \textscg (tipa), \scg (wsuipa)
\DeclareTextCommand{\textscg}{PU}{\82\142}%* U+0262
% U+0263 LATIN SMALL LETTER GAMMA; gammalatinsmall;
%   \ipagamma (wsuipa), \vod (phonetic)
\DeclareTextCommand{\textipagamma}{PU}{\82\143}%* U+0263
%* \textipagamma -> \vod (pnonetic)
% U+0264 LATIN SMALL LETTER RAMS HORN; ramshorn;
%   \babygamma (wsuipa)
\DeclareTextCommand{\textbabygamma}{PU}{\82\144}%* U+0264
% U+0265 LATIN SMALL LETTER TURNED H; hturned; \textturnh (tipa)
\DeclareTextCommand{\textturnh}{PU}{\82\145}% U+0265
%* \textturnh -> \invh (wsuipa)
%* \textturnh -> \udesc (phonetic)
% U+0266 LATIN SMALL LETTER H WITH HOOK; hhook; \texthth (tipa)
\DeclareTextCommand{\texthth}{PU}{\82\146}% U+0266
%* \texthth -> \hookh (wsuipa)
%* \texthth -> \voicedh (phonetic)
% U+0267 LATIN SMALL LETTER HENG WITH HOOK; henghook; \texththeng (tipa)
\DeclareTextCommand{\texththeng}{PU}{\82\147}% U+0267
%* \texththeng -> \hookheng (wsuipa)
% U+0268 LATIN SMALL LETTER I WITH STROKE;
%   \textbari (tipa), \bari (wsuipa)
\DeclareTextCommand{\textbari}{PU}{\82\150}%* U+0268
%* \textbari -> \ibar (phonetic)
% U+0269 LATIN SMALL LETTER IOTA; iotalatin; \niiota (wsuipa)
\DeclareTextCommand{\textniiota}{PU}{\82\151}%* U+0269
%* \textniiota -> \vari (phonetic)
% U+026A LATIN LETTER SMALL CAPITAL I; \textsci (tipa), \sci (wsuipa)
\DeclareTextCommand{\textsci}{PU}{\82\152}%* U+026A
% U+026B LATIN SMALL LETTER L WITH MIDDLE TILDE; lmiddletilde;
%   \textltilde (tipa)
\DeclareTextCommand{\textltilde}{PU}{\82\153}% U+026B
%* \textltilde -> \tildel (wsuipa)
% U+026C LATIN SMALL LETTER L WITH BELT; lbelt; \textbeltl (tipa)
\DeclareTextCommand{\textbeltl}{PU}{\82\154}% U+026C
%* \textbeltl -> \latfric (wsuipa)
% U+026D LATIN SMALL LETTER L WITH RETROFLEX HOOK;
%   lhookretroflex; \textrtaill (tipa)
\DeclareTextCommand{\textrtaill}{PU}{\82\155}% U+026D
%* \textrtaill -> \taill (wsuipa)
% U+026E LATIN SMALL LETTER LEZH; lezh; \textlyoghlig (tipa)
\DeclareTextCommand{\textlyoghlig}{PU}{\82\156}% U+026E
%* \textlyoghlig -> \lz (wsuipa)
% U+026F LATIN SMALL LETTER TURNED M; mturned; \textturnm (tipa)
\DeclareTextCommand{\textturnm}{PU}{\82\157}% U+026F
%* \textturnm -> \invm (wsuipa)
%* \textturnm -> \rotm (phonetic)
% U+0270 LATIN SMALL LETTER TURNED M WITH LONG LEG; mlonglegturned;
%   \textturnmrleg (tipa)
\DeclareTextCommand{\textturnmrleg}{PU}{\82\160}% U+0270
%* \textturnmrleg -> \legm (wsuipa)
% U+0271 LATIN SMALL LETTER M WITH HOOK; mhook; \textltailm (tipa)
\DeclareTextCommand{\textltailm}{PU}{\82\161}% U+0271
%* \textltailm -> \labdentalnas (wsuipa)
%* \textltailm -> \emgma (phonetic)
% U+0272 LATIN SMALL LETTER N WITH LEFT HOOK; nhookleft; \textltailn (tipa)
\DeclareTextCommand{\textltailn}{PU}{\82\162}% U+0272
%* \textltailn -> \nj (wsuipa)
%* \textltailn -> \enya (phonetic)
% U+0273 LATIN SMALL LETTER N WITH RETROFLEX HOOK;
%   nhookretroflex; \textrtailn (tipa)
\DeclareTextCommand{\textrtailn}{PU}{\82\163}% U+0273
%* \textrtailn -> \tailn (wsuipa)
% U+0274 LATIN LETTER SMALL CAPITAL N; \textscn (tipa), \scn (wsuipa)
\DeclareTextCommand{\textscn}{PU}{\82\164}%* U+0274
% U+0275 LATIN CAPITAL LETTER O WITH MIDDLE TILDE/
%   LATIN CAPITAL LETTER BARRED O; obarred;
%   \textbaro (tipa), \baro (wsuipa)
% But \baro from stmaryrd is different!
\DeclareTextCommand{\textbaro}{PU}{\82\165}% U+0275
% U+0276 LATIN LETTER SMALL CAPITAL OE; \textscoelig (tipa)
\DeclareTextCommand{\textscoelig}{PU}{\82\166}% U+0276
% U+0277 LATIN SMALL LETTER CLOSED OMEGA; omegalatinclosed;
%   \textcloseomega (tipa)
\DeclareTextCommand{\textcloseomega}{PU}{\82\167}% U+0277
%* \textcloseomega -> \closedniomega (wsuipa)
%* \textcloseomega -> \varomega (phonetic)
% U+0278 LATIN SMALL LETTER PHI; philatin; \niphi (wsuipa)
\DeclareTextCommand{\textniphi}{PU}{\82\170}%* U+0278
% U+0279 LATIN SMALL LETTER TURNED R; rturned; \textturnr (tipa)
\DeclareTextCommand{\textturnr}{PU}{\82\171}% U+0279
%* \textturnr -> \invr (wsuipa)
%* \textturnr -> \rotr (phonetic)
% U+027A LATIN SMALL LETTER TURNED R WITH LONG LEG;
%   rlonglegturned; \textturnlonglegr (tipa)
\DeclareTextCommand{\textturnlonglegr}{PU}{\82\172}% U+027A
%* \textturnlonglegr -> \invlegr (wsuipa)
% U+027B LATIN SMALL LETTER TURNED R WITH HOOK; rhookturned;
%   \textturnrrtail (tipa)
\DeclareTextCommand{\textturnrrtail}{PU}{\82\173}% U+027B
%* \textturnrrtail -> \tailinvr (wsuipa)
% U+027C LATIN SMALL LETTER R WITH LONG LEG; rlongleg; \textlonglegr (tipa)
\DeclareTextCommand{\textlonglegr}{PU}{\82\174}%* U+027C
%* \textlonglegr -> \legr (wsuipa)
% U+027D LATIN SMALL LETTER R WITH TAIL; rhook; \textrtailr (tipa)
\DeclareTextCommand{\textrtailr}{PU}{\82\175}% U+027D
%* \textrtailr -> \tailr (wsuipa)
% U+027E LATIN SMALL LETTER R WITH FISHHOOK; rfishhook;
%   \textfishhookr (tipa)
\DeclareTextCommand{\textfishhookr}{PU}{\82\176}% U+027E
%* \textfishhookr -> \flapr (wsuipa)
%* \textfishhookr -> \flap (phonetic)
% U+027F LATIN SMALL LETTER REVERSED R WITH FISHHOOK; rfishhookreversed;
%   \textlhtlongi (tipa)
\DeclareTextCommand{\textlhtlongi}{PU}{\82\177}% U+027F
% U+0280 LATIN LETTER SMALL CAPITAL R; \textscr (tipa), \scr (wsuipa)
\DeclareTextCommand{\textscr}{PU}{\82\200}%* U+0280
% U+0281 LATIN LETTER SMALL CAPITAL INVERTED R; Rsmallinverted;
%   \textinvscr (tipa), \invscr (wsuipa)
\DeclareTextCommand{\textinvscr}{PU}{\82\201}%* U+0281
% U+0282 LATIN SMALL LETTER S WITH HOOK; shook; \textrtails (tipa)
\DeclareTextCommand{\textrtails}{PU}{\82\202}% U+0282
%* \textrtails -> \tails (wsuipa)
% U+0283 LATIN SMALL LETTER ESH; esh; \textesh (tipa), \esh (wsuipa)
\DeclareTextCommand{\textesh}{PU}{\82\203}%* U+0283
% U+0284 LATIN SMALL LETTER DOTLESS J WITH STROKE AND HOOK;
%   dotlessjstrokehook; \texthtbardotlessj (tipa)
\DeclareTextCommand{\texthtbardotlessj}{PU}{\82\204}% U+0284
% U+0285 LATIN SMALL LETTER SQUAT REVERSED ESH; eshsquatreversed;
%   \textvibyi (tipa)
\DeclareTextCommand{\textvibyi}{PU}{\82\205}% U+0285
% U+0286 LATIN SMALL LETTER ESH WITH CURL; eshcurl; \textctesh (tipa)
\DeclareTextCommand{\textctesh}{PU}{\82\206}% U+0286
%* \textctesh -> \curlyesh (wsuipa)
% U+0287 LATIN SMALL LETTER TURNED T; tturned; \textturnt (tipa)
\DeclareTextCommand{\textturnt}{PU}{\82\207}% U+0287
%* \textturnt -> \clickt (wsuipa)
% U+0288 LATIN SMALL LETTER T WITH RETROFLEX HOOK; tretroflexhook;
%   \textrtailt (tipa)
\DeclareTextCommand{\textrtailt}{PU}{\82\210}% U+0288
%* \textrtailt -> \tailt (wsuipa)
% U+0289 LATIN SMALL LETTER U BAR; ubar;
%   \textbaru (tipa), \baru (wsuipa)
\DeclareTextCommand{\textbaru}{PU}{\82\211}%* U+0289
%* \textbaru -> \ubar (phonetic)
% U+028A LATIN SMALL LETTER UPSILON; \niupsilon (wsuipa)
\DeclareTextCommand{\textniupsilon}{PU}{\82\212}%* U+028A
%* \textniupsilon -> \rotOmega (phonetic)
% U+028B LATIN SMALL LETTER V WITH HOOK/LATIN SMALL LETTER SCRIPT V;
%   vhook; \textscriptv (tipa), \scriptv (wsuipa)
\DeclareTextCommand{\textscriptv}{PU}{\82\213}%* U+028B
% U+028C LATIN SMALL LETTER TURNED V; vturned; \textturnv (tipa)
\DeclareTextCommand{\textturnv}{PU}{\82\214}%* U+028C
%* \textturnv -> \invv (wsuipa)
%* \textturnv -> \pwedge (phonetic)
% U+028D LATIN SMALL LETTER TURNED W; wturned; \textturnw (tipa)
\DeclareTextCommand{\textturnw}{PU}{\82\215}%* U+028D
%* \textturnw -> \invw (wsuipa)
%* \textturnw -> \rotw (phonetic)
% U+028E LATIN SMALL LETTER TURNED Y; yturned; \textturny (tipa)
\DeclareTextCommand{\textturny}{PU}{\82\216}%* U+028E
%* \textturny -> \invy (wsuipa)
%* \textturny -> \roty (phonetic)
% U+028F LATIN LETTER SMALL CAPITAL Y; \textscy (tipa), \scy (wsuipa)
\DeclareTextCommand{\textscy}{PU}{\82\217}%* U+028F
% U+0290 LATIN SMALL LETTER Z WITH RETROFLEX HOOK; zretroflexhook;
%   \textrtailz (tipa)
\DeclareTextCommand{\textrtailz}{PU}{\82\220}% U+0290
%* \textrtailz -> \tailz (wsuipa)
% U+0291 LATIN SMALL LETTER Z WITH CURL; zcurl; \textctz (tipa)
\DeclareTextCommand{\textctz}{PU}{\82\221}% U+0291
%* \textctz -> \curlyz (wsuipa)
% U+0292 LATIN SMALL LETTER EZH/LATIN SMALL LETTER YOGH; ezh;
%   \textyogh (tipa), \yogh (wsuipa)
\DeclareTextCommand{\textyogh}{PU}{\82\222}%* U+0292
% U+0293 LATIN SMALL LETTER EZH WITH CURL/LATIN SMALL LETTER YOGH CURL;
%   ezhcurl; \textctyogh (tipa)
\DeclareTextCommand{\textctyogh}{PU}{\82\223}% U+0293
%* \textctyogh -> \curlyyogh (wsuipa)
% U+0294 LATIN LETTER GLOTTAL STOP; glottalstop;
%   \textglotstop (tipa), \glotstop (wsuipa)
\DeclareTextCommand{\textglotstop}{PU}{\82\224}%* U+0294
%* \textglotstop -> \ejective (wsuipa)
%* \textglotstop -> \glottal (phonetic)
% U+0295 LATIN LETTER PHARYNGEAL VOICED FRICATIVE/
%   LATIN LETTER REVERSED GLOTTAL STOP; glottalstopreversed;
%   \textrevglotstop (tipa), \revglotstop (wsuipa)
\DeclareTextCommand{\textrevglotstop}{PU}{\82\225}%* U+0295
%* \textrevglotstop -> \reveject (wsuipa)
% U+0296 LATIN LETTER INVERTED GLOTTAL STOP; glottalstopinverted;
%   \textinvglotstop (tipa), \invglotstop (wsuipa)
\DeclareTextCommand{\textinvglotstop}{PU}{\82\226}%* U+0296
% U+0297 LATIN LETTER STRETCHED C; cstretched; \textstretchc (tipa)
\DeclareTextCommand{\textstretchc}{PU}{\82\227}% U+0297
%* \textstretchc -> \clickc (wsuipa)
%* \textstretchc -> \textstretchcvar (tipx)
% U+0298 LATIN LETTER BILABIAL CLICK; bilabialclick;
%   \textbullseye (tipa)
\DeclareTextCommand{\textbullseye}{PU}{\82\230}% U+0298
%* \textbullseye -> \clickb (wsuipa)
%* \textbullseye -> \textObullseye (tipx)
% U+0299 LATIN LETTER SMALL CAPITAL B; \textscb (tipa)
\DeclareTextCommand{\textscb}{PU}{\82\231}% U+0299
% U+029A LATIN SMALL LETTER CLOSED OPEN E; eopenclosed;
%   \textcloseepsilon (tipa)
\DeclareTextCommand{\textcloseepsilon}{PU}{\82\232}% U+029A
% U+029B LATIN LETTER SMALL CAPITAL G WITH HOOK; Gsmallhook;
%   \texthtscg (tipa)
\DeclareTextCommand{\texthtscg}{PU}{\82\233}% U+029B
% U+029C LATIN LETTER SMALL CAPITAL H; \textsch (tipa)
\DeclareTextCommand{\textsch}{PU}{\82\234}% U+029C
% U+029D LATIN SMALL LETTER J WITH CROSSED-TAIL; jcrossedtail; \textcdj (tipa)
\DeclareTextCommand{\textctj}{PU}{\82\235}% U+029D
%* \textctj -> \textctjvar (tipx)
% U+029E LATIN SMALL LETTER TURNED K; kturned; \textturnk (tipa)
\DeclareTextCommand{\textturnk}{PU}{\82\236}% U+029E
%* \textturnk -> \textturnsck (tipx)
% U+029F LATIN LETTER SMALL CAPITAL L; \textscl (tipa)
\DeclareTextCommand{\textscl}{PU}{\82\237}% U+029F
% U+02A0 LATIN SMALL LETTER Q WITH HOOK; qhook; \texthtq (tipa)
\DeclareTextCommand{\texthtq}{PU}{\82\240}% U+02A0
% U+02A1 LATIN LETTER GLOTTAL STOP WITH STROKE; glottalstopstroke;
%   \textbarglotstop (tipa)
\DeclareTextCommand{\textbarglotstop}{PU}{\82\241}% U+02A1
% U+02A2 LATIN LETTER REVERSED GLOTTAL STOP WITH STROKE/
%   LATIN LETTER REVERSED GLOTTAL STOP BAR; glottalstopstrokereversed;
%   \textbarrevglotstop (tipa)
\DeclareTextCommand{\textbarrevglotstop}{PU}{\82\242}% U+02A2
% U+02A3 LATIN SMALL LETTER DZ DIGRAPH; dzaltone; \textdzlig (tipa)
\DeclareTextCommand{\textdzlig}{PU}{\82\243}% U+02A3
%* \textdzlig -> \dz (wsupipa)
% U+02A4 LATIN SMALL LETTER DEZH DIGRAPH; dezh; \textdyoghlig (tipa)
\DeclareTextCommand{\textdyoghlig}{PU}{\82\244}% U+02A4
% U+02A5 LATIN SMALL LETTER DZ DIGRAPH WITH CURL; dzcurl;
%   \textdctzlig (tipa)
\DeclareTextCommand{\textdctzlig}{PU}{\82\245}% U+02A5
% U+02A6 LATIN SMALL LETTER TS DIGRAPH; ts; \texttslig (tipa)
\DeclareTextCommand{\texttslig}{PU}{\82\246}% U+02A6
% U+02A7 LATIN SMALL LETTER TESH DIGRAPH; tesh; \textteshlig (tipa)
\DeclareTextCommand{\textteshlig}{PU}{\82\247}% U+02A7
%* \textteshlig -> \tesh (wsuipa)
% U+02A8 LATIN SMALL LETTER TC DIGRAPH WITH CURL; tccurl;
%   \texttctclig (tipa)
\DeclareTextCommand{\texttctclig}{PU}{\82\250}% U+02A8
% U+02AE LATIN SMALL LETTER TURNED H WITH FISHHOOK;
%   \textlhtlongy (tipa)
\DeclareTextCommand{\textlhtlongy}{PU}{\82\256}% U+02AE
% U+02AF LATIN SMALL LETTER TURNED H WITH FISHHOOK AND TAIL;
%   \textvibyy (tipa)
\DeclareTextCommand{\textvibyy}{PU}{\82\257}% U+02AF
%    \end{macrocode}
%
% \subsubsection{Spacing Modifier Letters: U+02B0 to U+02FF}
%
%    \begin{macrocode}
% U+02BD MODIFIER LETTER REVERSED COMMA;
%   commareversedmod, afii64937; \textrevapostrophe (tipa)
\DeclareTextCommand{\textrevapostrophe}{PU}{\82\275}% U+02BD
% U+02C0 MODIFIER LETTER GLOTTAL STOP; glottalstopmod;
%   \textraiseglotstop (tipa)
\DeclareTextCommand{\textraiseglotstop}{PU}{\82\300}% U+02C0
% U+02C2 MODIFIER LETTER LEFT ARROWHEAD; arrowheadleftmod;
%   \textlptr (tipa)
\DeclareTextCommand{\textlptr}{PU}{\82\302}% U+02C2
% U+02C3 MODIFIER LETTER RIGHT ARROWHEAD; arrowheadrightmod;
%   \textrptr (tipa)
\DeclareTextCommand{\textrptr}{PU}{\82\303}% U+02C3
% U+02C7 CARON; caron
\DeclareTextCommand{\textasciicaron}{PU}{\82\307}% U+02C7
% U+02C8 MODIFIER LETTER VERTICAL LINE; verticallinemod;
%   \textprimstress (tipa)
\DeclareTextCommand{\textprimstress}{PU}{\82\310}% U+02C8
% U+02CC MODIFIER LETTER LOW VERTICAL LINE; verticallinelowmod;
%   \textsecstress (tipa)
\DeclareTextCommand{\textsecstress}{PU}{\82\314}% U+02CC
% U+02D0 MODIFIER LETTER TRIANGULAR COLON; colontriangularmod;
%   \textlengthmark (tipa)
\DeclareTextCommand{\textlengthmark}{PU}{\82\320}% U+02D0
% U+02D1 MODIFIER LETTER HALF TRIANGULAR COLON; colontriangularhalfmod;
%   \texthalflength (tipa)
\DeclareTextCommand{\texthalflength}{PU}{\82\321}% U+02D1
% U+02D8 BREVE; breve
\DeclareTextCommand{\textasciibreve}{PU}{\82\330}% U+02D8
% U+02D9 DOT ABOVE; dotaccent
\DeclareTextCommand{\textdotaccent}{PU}{\82\331}% U+02D9
% U+02DA RING ABOVE; ring
\DeclareTextCommand{\textring}{PU}{\82\332}% U+02DA
% U+02DB OGONEK; ogonek
\DeclareTextCommand{\textogonek}{PU}{\82\333}% U+02DB
% U+02DC SMALL TILDE; ilde, *tilde
\DeclareTextCommand{\texttilde}{PU}{\82\334}% U+02DC
% U+02DD DOUBLE ACUTE ACCENT; hungarumlaut
\DeclareTextCommand{\texthungarumlaut}{PU}{\82\335}% U+02DD
\DeclareTextCommand{\textacutedbl}{PU}{\82\335}% U+02DD
% U+02F3 MODIFIER LETTER LOW RING
\DeclareTextCommand{\textringlow}{PU}{\82\363}% U+02F3
% U+02F5 MODIFIER LETTER MIDDLE DOUBLE GRAVE ACCENT
\DeclareTextCommand{\textgravedbl}{PU}{\82\365}% U+02F5
% U+02F7 MODIFIER LETTER LOW TILDE
\DeclareTextCommand{\texttildelow}{PU}{\82\367}% U+02F7
% U+02F9 MODIFIER LETTER BEGIN HIGH TONE; \textopencorner (tipa)
\DeclareTextCommand{\textopencorner}{PU}{\82\371}% U+02F9
% U+02FA MODIFIER LETTER END HIGH TONE; \textcorner (tipa)
\DeclareTextCommand{\textcorner}{PU}{\82\372}% U+02FA
%    \end{macrocode}
%
% \subsubsection{Combining Diacritical Marks: U+0300 to U+036F}
%
%    \begin{macrocode}
% U+030F COMBINING DOUBLE GRAVE ACCENT; dblgravecmb
\DeclareTextCommand{\textdoublegrave}{PU}{ \83\017}% U+030F
% U+0311 COMBINING INVERTED BREVE; breveinvertedcmb
\DeclareTextCommand{\textnewtie}{PU}{ \83\021}% U+0311
% U+0323 COMBINING DOT BELOW; dotbelowcmb, *dotbelowcomb
\DeclareTextCommand{\textdotbelow}{PU}{ \83\043}% U+0323
% U+0331 COMBINING MACRON BELOW; macronbelowcmb
\DeclareTextCommand{\textmacronbelow}{PU}{ \83\061}% U+0331
% U+0361 COMBINING DOUBLE INVERTED BREVE; breveinverteddoublecmb
\DeclareTextCommand{\texttie}{PU}{ \83\141}% U+0361
%    \end{macrocode}
%
% \subsubsection{Greek and Coptic: U+0370 to U+03FF}
% Greek is only loaded if \cs{textBeta} is defined.
%    \begin{macrocode}
\ifx\textBeta\@undefined \else
\input{puenc-greek.def}
\fi
%</puenc>
%    \end{macrocode}
%
% \subsubsection{Cyrillic: U+0400 to U+04FF}
%
%    Thanks to Vladimir Volovich (\Email{vvv@vvv.vsu.ru}) for
%    the help with the Cyrillic glyph names.
%    Cyrillic only loaded if \cs{CYRDZE} is defined.
%    \begin{macrocode}
%<*puenc>
\ifx\CYRDZE\@undefined \else
% U+0400 CYRILLIC CAPITAL LETTER IE WITH GRAVE
\DeclareTextCompositeCommand{\`}{PU}{\CYRE}{\84\000}% U+0400
% U+0401 CYRILLIC CAPITAL LETTER IO; Iocyrillic, *afii10023
\DeclareTextCommand{\CYRYO}{PU}{\84\001}% U+0401
\DeclareTextCompositeCommand{\"}{PU}{\CYRE}{\84\001}% U+0401
% U+0402 CYRILLIC CAPITAL LETTER DJE; Djecyrillic, *afii10051
\DeclareTextCommand{\CYRDJE}{PU}{\84\002}% U+0402
% U+0403 CYRILLIC CAPITAL LETTER GJE; Gjecyrillic, *afii10052
\DeclareTextCompositeCommand{\'}{PU}{\CYRG}{\84\003}% U+0403
% U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE; Ecyrillic, *afii10053
\DeclareTextCommand{\CYRIE}{PU}{\84\004}% U+0404
% U+0405 CYRILLIC CAPITAL LETTER DZE; Dzecyrillic, *afii10054
\DeclareTextCommand{\CYRDZE}{PU}{\84\005}% U+0405
% U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I;
%   Icyrillic, *afii10055
\DeclareTextCommand{\CYRII}{PU}{\84\006}% U+0406
% U+0407 CYRILLIC CAPITAL LETTER YI; Yicyrillic, *afii10056
\DeclareTextCommand{\CYRYI}{PU}{\84\007}% U+0407
\DeclareTextCompositeCommand{\"}{PU}{\CYRII}{\84\007}% U+0407
% U+0408 CYRILLIC CAPITAL LETTER JE; Jecyrillic, *afii10057
\DeclareTextCommand{\CYRJE}{PU}{\84\010}% U+0408
% U+0409 CYRILLIC CAPITAL LETTER LJE; Ljecyrillic, *afii10058
\DeclareTextCommand{\CYRLJE}{PU}{\84\011}% U+0409
% U+040A CYRILLIC CAPITAL LETTER NJE; Njecyrillic, *afii10059
\DeclareTextCommand{\CYRNJE}{PU}{\84\012}% U+040A
% U+040B CYRILLIC CAPITAL LETTER TSHE; Tshecyrillic, *afii10060
\DeclareTextCommand{\CYRTSHE}{PU}{\84\013}% U+040B
% U+040C CYRILLIC CAPITAL LETTER KJE; Kjecyrillic, *afii10061
\DeclareTextCompositeCommand{\'}{PU}{\CYRK}{\84\014}% U+040C
% U+040D CYRILLIC CAPITAL LETTER I WITH GRAVE
\DeclareTextCompositeCommand{\`}{PU}{\CYRI}{\84\015}% U+040D
% U+040E CYRILLIC CAPITAL LETTER SHORT U; Ushortcyrillic, *afii10062
\DeclareTextCommand{\CYRUSHRT}{PU}{\84\016}% U+040E
\DeclareTextCompositeCommand{\U}{PU}{\CYRU}{\84\016}% U+040E
% U+040F CYRILLIC CAPITAL LETTER DZHE; Dzhecyrillic, *afii10145
\DeclareTextCommand{\CYRDZHE}{PU}{\84\017}% U+040F
% U+0410 CYRILLIC CAPITAL LETTER A; Acyrillic, *afii10017
\DeclareTextCommand{\CYRA}{PU}{\84\020}% U+0410
% U+0411 CYRILLIC CAPITAL LETTER BE; Becyrillic, *afii10018
\DeclareTextCommand{\CYRB}{PU}{\84\021}% U+0411
% U+0412 CYRILLIC CAPITAL LETTER VE; Vecyrillic, *afii10019
\DeclareTextCommand{\CYRV}{PU}{\84\022}% U+0412
% U+0413 CYRILLIC CAPITAL LETTER GHE; Gecyrillic, *afii10020
\DeclareTextCommand{\CYRG}{PU}{\84\023}% U+0413
% U+0414 CYRILLIC CAPITAL LETTER DE; Decyrillic, *afii10021
\DeclareTextCommand{\CYRD}{PU}{\84\024}% U+0414
% U+0415 CYRILLIC CAPITAL LETTER IE; Iecyrillic, *afii10022
\DeclareTextCommand{\CYRE}{PU}{\84\025}% U+0415
% U+0416 CYRILLIC CAPITAL LETTER ZHE; Zhecyrillic, *afii10024
\DeclareTextCommand{\CYRZH}{PU}{\84\026}% U+0416
% U+0417 CYRILLIC CAPITAL LETTER ZE; Zecyrillic, *afii10025
\DeclareTextCommand{\CYRZ}{PU}{\84\027}% U+0417
% U+0418 CYRILLIC CAPITAL LETTER I; Iicyrillic, *afii10026
\DeclareTextCommand{\CYRI}{PU}{\84\030}% U+0418
% U+0419 CYRILLIC CAPITAL LETTER SHORT I; Iishortcyrillic, *afii10027
\DeclareTextCommand{\CYRISHRT}{PU}{\84\031}% U+0419
\DeclareTextCompositeCommand{\U}{PU}{\CYRI}{\84\031}% U+0419
% U+041A CYRILLIC CAPITAL LETTER KA; Kacyrillic, *afii10028
\DeclareTextCommand{\CYRK}{PU}{\84\032}% U+041A
% U+041B CYRILLIC CAPITAL LETTER EL; Elcyrillic, *afii10029
\DeclareTextCommand{\CYRL}{PU}{\84\033}% U+041B
% U+041C CYRILLIC CAPITAL LETTER EM; Emcyrillic, *afii10030
\DeclareTextCommand{\CYRM}{PU}{\84\034}% U+041C
% U+041D CYRILLIC CAPITAL LETTER EN; Encyrillic, *afii10031
\DeclareTextCommand{\CYRN}{PU}{\84\035}% U+041D
% U+041E CYRILLIC CAPITAL LETTER O; Ocyrillic, *afii10032
\DeclareTextCommand{\CYRO}{PU}{\84\036}% U+041E
% U+041F CYRILLIC CAPITAL LETTER PE; Pecyrillic, *afii10033
\DeclareTextCommand{\CYRP}{PU}{\84\037}% U+041F
% U+0420 CYRILLIC CAPITAL LETTER ER; Ercyrillic, *afii10034
\DeclareTextCommand{\CYRR}{PU}{\84\040}% U+0420
% U+0421 CYRILLIC CAPITAL LETTER ES; Escyrillic, *afii10035
\DeclareTextCommand{\CYRS}{PU}{\84\041}% U+0421
% U+0422 CYRILLIC CAPITAL LETTER TE; Tecyrillic, *afii10036
\DeclareTextCommand{\CYRT}{PU}{\84\042}% U+0422
% U+0423 CYRILLIC CAPITAL LETTER U; Ucyrillic, *afii10037
\DeclareTextCommand{\CYRU}{PU}{\84\043}% U+0423
% U+0424 CYRILLIC CAPITAL LETTER EF; Efcyrillic, *afii10038
\DeclareTextCommand{\CYRF}{PU}{\84\044}% U+0424
% U+0425 CYRILLIC CAPITAL LETTER HA; Khacyrillic, *afii10039
\DeclareTextCommand{\CYRH}{PU}{\84\045}% U+0425
% U+0426 CYRILLIC CAPITAL LETTER TSE; Tsecyrillic, *afii10040
\DeclareTextCommand{\CYRC}{PU}{\84\046}% U+0426
% U+0427 CYRILLIC CAPITAL LETTER CHE; Checyrillic, *afii10041
\DeclareTextCommand{\CYRCH}{PU}{\84\047}% U+0427
% U+0428 CYRILLIC CAPITAL LETTER SHA; Shacyrillic, *afii10042
\DeclareTextCommand{\CYRSH}{PU}{\84\050}% U+0428
% U+0429 CYRILLIC CAPITAL LETTER SHCHA; Shchacyrillic, *afii10043
\DeclareTextCommand{\CYRSHCH}{PU}{\84\051}% U+0429
% U+042A CYRILLIC CAPITAL LETTER HARD SIGN;
%   Hardsigncyrillic, *afii10044
\DeclareTextCommand{\CYRHRDSN}{PU}{\84\052}% U+042A
% U+042B CYRILLIC CAPITAL LETTER YERU; Yericyrillic, *afii10045
\DeclareTextCommand{\CYRERY}{PU}{\84\053}% U+042B
% U+042C CYRILLIC CAPITAL LETTER SOFT SIGN;
%   Softsigncyrillic, *afii10046
\DeclareTextCommand{\CYRSFTSN}{PU}{\84\054}% U+042C
% U+042D CYRILLIC CAPITAL LETTER E; Ereversedcyrillic, *afii10047
\DeclareTextCommand{\CYREREV}{PU}{\84\055}% U+042D
% U+042E CYRILLIC CAPITAL LETTER YU; IUcyrillic, *afii10048
\DeclareTextCommand{\CYRYU}{PU}{\84\056}% U+042E
% U+042F CYRILLIC CAPITAL LETTER YA; IAcyrillic, *afii10049
\DeclareTextCommand{\CYRYA}{PU}{\84\057}% U+042F
% U+0430 CYRILLIC SMALL LETTER A; acyrillic, *afii10065
\DeclareTextCommand{\cyra}{PU}{\84\060}% U+0430
% U+0431 CYRILLIC SMALL LETTER BE; *afii10066, becyrillic
\DeclareTextCommand{\cyrb}{PU}{\84\061}% U+0431
% U+0432 CYRILLIC SMALL LETTER VE; *afii10067, vecyrillic
\DeclareTextCommand{\cyrv}{PU}{\84\062}% U+0432
% U+0433 CYRILLIC SMALL LETTER GHE; *afii10068, gecyrillic
\DeclareTextCommand{\cyrg}{PU}{\84\063}% U+0433
% U+0434 CYRILLIC SMALL LETTER DE; *afii10069, decyrillic
\DeclareTextCommand{\cyrd}{PU}{\84\064}% U+0434
% U+0435 CYRILLIC SMALL LETTER IE; *afii10070, iecyrillic
\DeclareTextCommand{\cyre}{PU}{\84\065}% U+0435
% U+0436 CYRILLIC SMALL LETTER ZHE; *afii10072, zhecyrillic
\DeclareTextCommand{\cyrzh}{PU}{\84\066}% U+0436
% U+0437 CYRILLIC SMALL LETTER ZE; *afii10073, zecyrillic
\DeclareTextCommand{\cyrz}{PU}{\84\067}% U+0437
% U+0438 CYRILLIC SMALL LETTER I; *afii10074, iicyrillic
\DeclareTextCommand{\cyri}{PU}{\84\070}% U+0438
% U+0439 CYRILLIC SMALL LETTER SHORT I; *afii10075, iishortcyrillic
\DeclareTextCommand{\cyrishrt}{PU}{\84\071}% U+0439
\DeclareTextCompositeCommand{\U}{PU}{\cyri}{\84\071}% U+0439
% U+043A CYRILLIC SMALL LETTER KA; *afii10076, kacyrillic
\DeclareTextCommand{\cyrk}{PU}{\84\072}% U+043A
% U+043B CYRILLIC SMALL LETTER EL; *afii10077, elcyrillic
\DeclareTextCommand{\cyrl}{PU}{\84\073}% U+043B
% U+043C CYRILLIC SMALL LETTER EM; *afii10078, emcyrillic
\DeclareTextCommand{\cyrm}{PU}{\84\074}% U+043C
% U+043D CYRILLIC SMALL LETTER EN; *afii10079, encyrillic
\DeclareTextCommand{\cyrn}{PU}{\84\075}% U+043D
% U+043E CYRILLIC SMALL LETTER O; *afii10080, ocyrillic
\DeclareTextCommand{\cyro}{PU}{\84\076}% U+043E
% U+043F CYRILLIC SMALL LETTER PE; *afii10081, pecyrillic
\DeclareTextCommand{\cyrp}{PU}{\84\077}% U+043F
% U+0440 CYRILLIC SMALL LETTER ER; *afii10082, ercyrillic
\DeclareTextCommand{\cyrr}{PU}{\84\100}% U+0440
% U+0441 CYRILLIC SMALL LETTER ES; *afii10083, escyrillic
\DeclareTextCommand{\cyrs}{PU}{\84\101}% U+0441
% U+0442 CYRILLIC SMALL LETTER TE; *afii10084, tecyrillic
\DeclareTextCommand{\cyrt}{PU}{\84\102}% U+0442
% U+0443 CYRILLIC SMALL LETTER U; *afii10085, ucyrillic
\DeclareTextCommand{\cyru}{PU}{\84\103}% U+0443
% U+0444 CYRILLIC SMALL LETTER EF; *afii10086, efcyrillic
\DeclareTextCommand{\cyrf}{PU}{\84\104}% U+0444
% U+0445 CYRILLIC SMALL LETTER HA; *afii10087, khacyrillic
\DeclareTextCommand{\cyrh}{PU}{\84\105}% U+0445
% U+0446 CYRILLIC SMALL LETTER TSE; *afii10088, tsecyrillic
\DeclareTextCommand{\cyrc}{PU}{\84\106}% U+0446
% U+0447 CYRILLIC SMALL LETTER CHE; *afii10089, checyrillic
\DeclareTextCommand{\cyrch}{PU}{\84\107}% U+0447
% U+0448 CYRILLIC SMALL LETTER SHA; *afii10090, shacyrillic
\DeclareTextCommand{\cyrsh}{PU}{\84\110}% U+0448
% U+0449 CYRILLIC SMALL LETTER SHCHA; *afii10091, shchacyrillic
\DeclareTextCommand{\cyrshch}{PU}{\84\111}% U+0449
% U+044A CYRILLIC SMALL LETTER HARD SIGN; *afii10092, hardsigncyrillic
\DeclareTextCommand{\cyrhrdsn}{PU}{\84\112}% U+044A
%* \cyrhrdsn -> \hardsign (tipa)
% U+044B CYRILLIC SMALL LETTER YERU; *afii10093, yericyrillic
\DeclareTextCommand{\cyrery}{PU}{\84\113}% U+044B
% U+044C CYRILLIC SMALL LETTER SOFT SIGN; *afii10094, softsigncyrillic
\DeclareTextCommand{\cyrsftsn}{PU}{\84\114}% U+044C
%* \cyrsftsn -> \softsign (tipa)
% U+044D CYRILLIC SMALL LETTER E; *afii10095, ereversedcyrillic
\DeclareTextCommand{\cyrerev}{PU}{\84\115}% U+044D
% U+044E CYRILLIC SMALL LETTER YU; *afii10096, iucyrillic
\DeclareTextCommand{\cyryu}{PU}{\84\116}% U+044E
% U+044F CYRILLIC SMALL LETTER YA; *afii10097, iacyrillic
\DeclareTextCommand{\cyrya}{PU}{\84\117}% U+044F
% U+0450 CYRILLIC SMALL LETTER IE WITH GRAVE
\DeclareTextCompositeCommand{\`}{PU}{\cyre}{\84\120}% U+0450
% U+0451 CYRILLIC SMALL LETTER IO; *afii10071, iocyrillic
\DeclareTextCommand{\cyryo}{PU}{\84\121}% U+0451
\DeclareTextCompositeCommand{\"}{PU}{\cyre}{\84\121}% U+0451
% U+0452 CYRILLIC SMALL LETTER DJE; *afii10099, djecyrillic
\DeclareTextCommand{\cyrdje}{PU}{\84\122}% U+0452
% U+0453 CYRILLIC SMALL LETTER GJE; *afii10100, gjecyrillic
\DeclareTextCompositeCommand{\'}{PU}{\cyrg}{\84\123}% U+0453
% U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE; *afii10101, ecyrillic
\DeclareTextCommand{\cyrie}{PU}{\84\124}% U+0454
% U+0455 CYRILLIC SMALL LETTER DZE; *afii10102, dzecyrillic
\DeclareTextCommand{\cyrdze}{PU}{\84\125}% U+0455
% U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I;
%   *afii10103, icyrillic
\DeclareTextCommand{\cyrii}{PU}{\84\126}% U+0456
% U+0457 CYRILLIC SMALL LETTER YI; *afii10104, yicyrillic
\DeclareTextCommand{\cyryi}{PU}{\84\127}% U+0457
\DeclareTextCompositeCommand{\"}{PU}{\cyrii}{\84\127}% U+0457
% U+0458 CYRILLIC SMALL LETTER JE; *afii10105, jecyrillic
\DeclareTextCommand{\cyrje}{PU}{\84\130}% U+0458
% U+0459 CYRILLIC SMALL LETTER LJE; *afii10106, ljecyrillic
\DeclareTextCommand{\cyrlje}{PU}{\84\131}% U+0459
% U+045A CYRILLIC SMALL LETTER NJE; *afii10107, njecyrillic
\DeclareTextCommand{\cyrnje}{PU}{\84\132}% U+045A
% U+045B CYRILLIC SMALL LETTER TSHE; *afii10108, tshecyrillic
\DeclareTextCommand{\cyrtshe}{PU}{\84\133}% U+045B
% U+045C CYRILLIC SMALL LETTER KJE; *afii10109, kjecyrillic
\DeclareTextCompositeCommand{\'}{PU}{\cyrk}{\84\134}% U+045C
% U+045D CYRILLIC SMALL LETTER I WITH GRAVE
\DeclareTextCompositeCommand{\`}{PU}{\cyri}{\84\135}% U+045D
% U+045E CYRILLIC SMALL LETTER SHORT U; *afii10110, ushortcyrillic
\DeclareTextCommand{\cyrushrt}{PU}{\84\136}% U+045E
\DeclareTextCompositeCommand{\U}{PU}{\curu}{\84\136}% U+045E
% U+045F CYRILLIC SMALL LETTER DZHE; *afii10193, dzhecyrillic
\DeclareTextCommand{\cyrdzhe}{PU}{\84\137}% U+045F
% U+0460 CYRILLIC CAPITAL LETTER OMEGA; Omegacyrillic
\DeclareTextCommand{\CYROMEGA}{PU}{\84\140}% U+0460
% U+0461 CYRILLIC SMALL LETTER OMEGA; omegacyrillic
\DeclareTextCommand{\cyromega}{PU}{\84\141}% U+0461
% U+0462 CYRILLIC CAPITAL LETTER YAT; Yatcyrillic, *afii10146
\DeclareTextCommand{\CYRYAT}{PU}{\84\142}% U+0462
% U+0463 CYRILLIC SMALL LETTER YAT; *afii10194, yatcyrillic
\DeclareTextCommand{\cyryat}{PU}{\84\143}% U+0463
% U+0464 CYRILLIC CAPITAL LETTER IOTIFIED E; Eiotifiedcyrillic
\DeclareTextCommand{\CYRIOTE}{PU}{\84\144}% U+0464
% U+0465 CYRILLIC SMALL LETTER IOTIFIED E; eiotifiedcyrillic
\DeclareTextCommand{\cyriote}{PU}{\84\145}% U+0465
% U+0466 CYRILLIC CAPITAL LETTER LITTLE YUS; Yuslittlecyrillic
\DeclareTextCommand{\CYRLYUS}{PU}{\84\146}% U+0466
% U+0467 CYRILLIC SMALL LETTER LITTLE YUS; yuslittlecyrillic
\DeclareTextCommand{\cyrlyus}{PU}{\84\147}% U+0467
% U+0468 CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS; Yuslittleiotifiedcyrillic
\DeclareTextCommand{\CYRIOTLYUS}{PU}{\84\150}% U+0468
% U+0469 CYRILLIC SMALL LETTER IOTIFIED LITTLE YUS; yuslittleiotifiedcyrillic
\DeclareTextCommand{\cyriotlyus}{PU}{\84\151}% U+0469
% U+046A CYRILLIC CAPITAL LETTER BIG YUS; Yusbigcyrillic
\DeclareTextCommand{\CYRBYUS}{PU}{\84\152}% U+046A
% U+046B CYRILLIC SMALL LETTER BIG YUS; yusbigcyrillic
\DeclareTextCommand{\cyrbyus}{PU}{\84\153}% U+046B
% U+046C CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS; Yusbigiotifiedcyrillic
\DeclareTextCommand{\CYRIOTBYUS}{PU}{\84\154}% U+046C
% U+046D CYRILLIC SMALL LETTER IOTIFIED BIG YUS; yusbigiotifiedcyrillic
\DeclareTextCommand{\cyriotbyus}{PU}{\84\155}% U+046D
% U+046E CYRILLIC CAPITAL LETTER KSI; Ksicyrillic
\DeclareTextCommand{\CYRKSI}{PU}{\84\156}% U+046E
% U+046F CYRILLIC SMALL LETTER KSI; ksicyrillic
\DeclareTextCommand{\cyrksi}{PU}{\84\157}% U+046F
% U+0470 CYRILLIC CAPITAL LETTER PSI; Psicyrillic
\DeclareTextCommand{\CYRPSI}{PU}{\84\160}% U+0470
% U+0471 CYRILLIC SMALL LETTER PSI; psicyrillic
\DeclareTextCommand{\cyrpsi}{PU}{\84\161}% U+0471
% U+0472 CYRILLIC CAPITAL LETTER FITA; Fitacyrillic, *afii10147
\DeclareTextCommand{\CYRFITA}{PU}{\84\162}% U+0472
% U+0473 CYRILLIC SMALL LETTER FITA; *afii10195, fitacyrillic
\DeclareTextCommand{\cyrfita}{PU}{\84\163}% U+0473
% U+0474 CYRILLIC CAPITAL LETTER IZHITSA; Izhitsacyrillic, *afii10148
\DeclareTextCommand{\CYRIZH}{PU}{\84\164}% U+0474
% U+0475 CYRILLIC SMALL LETTER IZHITSA; *afii10196, izhitsacyrillic
\DeclareTextCommand{\cyrizh}{PU}{\84\165}% U+0475
% U+0476 CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE
%   GRAVE ACCENT; Izhitsadblgravecyrillic
\DeclareTextCompositeCommand{\C}{PU}{\CYRIZH}{\84\166}% U+0476
% U+0477 CYRILLIC SMALL LETTER IZHITSA WITH DOUBLE
%   GRAVE ACCENT; izhitsadblgravecyrillic
\DeclareTextCompositeCommand{\C}{PU}{\cyrizh}{\84\167}% U+0477
% U+0478 CYRILLIC CAPITAL LETTER UK; Ukcyrillic
\DeclareTextCommand{\CYRUK}{PU}{\84\170}% U+0478
% U+0479 CYRILLIC SMALL LETTER UK; ukcyrillic
\DeclareTextCommand{\cyruk}{PU}{\84\171}% U+0479
% U+047A CYRILLIC CAPITAL LETTER ROUND OMEGA; Omegaroundcyrillic
\DeclareTextCommand{\CYROMEGARND}{PU}{\84\172}% U+047A
% U+047B CYRILLIC SMALL LETTER ROUND OMEGA; omegaroundcyrillic
\DeclareTextCommand{\cyromegarnd}{PU}{\84\173}% U+047B
% U+047C CYRILLIC CAPITAL LETTER OMEGA WITH TITLO; Omegatitlocyrillic
\DeclareTextCommand{\CYROMEGATITLO}{PU}{\84\174}% U+047C
% U+047D CYRILLIC SMALL LETTER OMEGA WITH TITLO; omegatitlocyrillic
\DeclareTextCommand{\cyromegatitlo}{PU}{\84\175}% U+047D
% U+047E CYRILLIC CAPITAL LETTER OT; Otcyrillic
\DeclareTextCommand{\CYROT}{PU}{\84\176}% U+047E
% U+047F CYRILLIC SMALL LETTER OT; otcyrillic
\DeclareTextCommand{\cyrot}{PU}{\84\177}% U+047F
% U+0480 CYRILLIC CAPITAL LETTER KOPPA; Koppacyrillic
\DeclareTextCommand{\CYRKOPPA}{PU}{\84\200}% U+0480
% U+0481 CYRILLIC SMALL LETTER KOPPA; koppacyrillic
\DeclareTextCommand{\cyrkoppa}{PU}{\84\201}% U+0481
% U+0482 CYRILLIC THOUSANDS SIGN; thousandcyrillic
\DeclareTextCommand{\cyrthousands}{PU}{\84\202}% U+0482
%    \end{macrocode}
%    |\84\203|: U+0483 COMBINING CYRILLIC TITLO; titlocyrilliccmb\\
%    |\84\204|: U+0484 COMBINING CYRILLIC PALATALIZATION; palatalizationcyrilliccmb\\
%    |\84\205|: U+0485 COMBINING CYRILLIC DASIA PNEUMATA; dasiapneumatacyrilliccmb\\
%    |\84\206|: U+0486 COMBINING CYRILLIC PSILI PNEUMATA; psilipneumatacyrilliccmb\\
%    |\84\207|: U+0487 COMBINING CYRILLIC POKRYTIE\\
%    |\84\210|: U+0488 COMBINING CYRILLIC HUNDRED THOUSANDS SIGN\\
%    |\84\211|: U+0489 COMBINING CYRILLIC MILLIONS SIGN
%    \begin{macrocode}
% U+048A CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
\DeclareTextCommand{\CYRISHRTDSC}{PU}{\84\212}% U+048A
% U+048B CYRILLIC SMALL LETTER SHORT I WITH TAIL
\DeclareTextCommand{\cyrishrtdsc}{PU}{\84\213}% U+048B
% U+048C CYRILLIC CAPITAL LETTER SEMISOFT SIGN
\DeclareTextCommand{\CYRSEMISFTSN}{PU}{\84\214}% U+048C
% U+048D CYRILLIC SMALL LETTER SEMISOFT SIGN
\DeclareTextCommand{\cyrsemisftsn}{PU}{\84\215}% U+048D
% U+048E CYRILLIC CAPITAL LETTER ER WITH TICK
\DeclareTextCommand{\CYRRTICK}{PU}{\84\216}% U+048E
% U+048F CYRILLIC SMALL LETTER ER WITH TICK
\DeclareTextCommand{\cyrrtick}{PU}{\84\217}% U+048F
% U+0490 CYRILLIC CAPITAL LETTER GHE WITH UPTURN; Gheupturncyrillic, *afii10050
\DeclareTextCommand{\CYRGUP}{PU}{\84\220}% U+0490
% U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN; *afii10098, gheupturncyrillic
\DeclareTextCommand{\cyrgup}{PU}{\84\221}% U+0491
% U+0492 CYRILLIC CAPITAL LETTER GHE WITH STROKE; Ghestrokecyrillic
\DeclareTextCommand{\CYRGHCRS}{PU}{\84\222}% U+0492
% U+0493 CYRILLIC SMALL LETTER GHE WITH STROKE; ghestrokecyrillic
\DeclareTextCommand{\cyrghcrs}{PU}{\84\223}% U+0493
% U+0494 CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK;
%   Ghemiddlehookcyrillic
\DeclareTextCommand{\CYRGHK}{PU}{\84\224}% U+0494
% U+0495 CYRILLIC SMALL LETTER GHE WITH MIDDLE HOOK;
%   ghemiddlehookcyrillic
\DeclareTextCommand{\cyrghk}{PU}{\84\225}% U+0495
% U+0496 CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER;
%   Zhedescendercyrillic
\DeclareTextCommand{\CYRZHDSC}{PU}{\84\226}% U+0496
% U+0497 CYRILLIC SMALL LETTER ZHE WITH DESCENDER;
%   zhedescendercyrillic
\DeclareTextCommand{\cyrzhdsc}{PU}{\84\227}% U+0497
% U+0498 CYRILLIC CAPITAL LETTER ZE WITH DESCENDER; Zedescendercyrillic
\DeclareTextCommand{\CYRZDSC}{PU}{\84\230}% U+0498
\DeclareTextCompositeCommand{\c}{PU}{\CYRZ}{\84\230}% U+0498
% U+0499 CYRILLIC SMALL LETTER ZE WITH DESCENDER; zedescendercyrillic
\DeclareTextCommand{\cyrzdsc}{PU}{\84\231}% U+0499
\DeclareTextCompositeCommand{\c}{PU}{\cyrz}{\84\231}% U+0499
% U+049A CYRILLIC CAPITAL LETTER KA WITH DESCENDER; Kadescendercyrillic
\DeclareTextCommand{\CYRKDSC}{PU}{\84\232}% U+049A
% U+049B CYRILLIC SMALL LETTER KA WITH DESCENDER; kadescendercyrillic
\DeclareTextCommand{\cyrkdsc}{PU}{\84\233}% U+049B
% U+049C CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE;
%   Kaverticalstrokecyrillic
\DeclareTextCommand{\CYRKVCRS}{PU}{\84\234}% U+049C
% U+049D CYRILLIC SMALL LETTER KA WITH VERTICAL STROKE;
%   kaverticalstrokecyrillic
\DeclareTextCommand{\cyrkvcrs}{PU}{\84\235}% U+049D
% U+049E CYRILLIC CAPITAL LETTER KA WITH STROKE; Kastrokecyrillic
\DeclareTextCommand{\CYRKHCRS}{PU}{\84\236}% U+049E
% U+049F CYRILLIC SMALL LETTER KA WITH STROKE; kastrokecyrillic
\DeclareTextCommand{\cyrkhcrs}{PU}{\84\237}% U+049F
% U+04A0 CYRILLIC CAPITAL LETTER BASHKIR KA; Kabashkircyrillic
\DeclareTextCommand{\CYRKBEAK}{PU}{\84\240}% U+04A0
% U+04A1 CYRILLIC SMALL LETTER BASHKIR KA; kabashkircyrillic
\DeclareTextCommand{\cyrkbeak}{PU}{\84\241}% U+04A1
% U+04A2 CYRILLIC CAPITAL LETTER EN WITH DESCENDER; Endescendercyrillic
\DeclareTextCommand{\CYRNDSC}{PU}{\84\242}% U+04A2
% U+04A3 CYRILLIC SMALL LETTER EN WITH DESCENDER; endescendercyrillic
\DeclareTextCommand{\cyrndsc}{PU}{\84\243}% U+04A3
% U+04A4 CYRILLIC CAPITAL LIGATURE EN GHE; Enghecyrillic
\DeclareTextCommand{\CYRNG}{PU}{\84\244}% U+04A4
% U+04A5 CYRILLIC SMALL LIGATURE EN GHE; enghecyrillic
\DeclareTextCommand{\cyrng}{PU}{\84\245}% U+04A5
% U+04A6 CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK; Pemiddlehookcyrillic
\DeclareTextCommand{\CYRPHK}{PU}{\84\246}% U+04A6
% U+04A7 CYRILLIC SMALL LETTER PE WITH MIDDLE HOOK; pemiddlehookcyrillic
\DeclareTextCommand{\cyrphk}{PU}{\84\247}% U+04A7
% U+04A8 CYRILLIC CAPITAL LETTER ABKHASIAN HA; Haabkhasiancyrillic
\DeclareTextCommand{\CYRABHHA}{PU}{\84\250}% U+04A8
% U+04A9 CYRILLIC SMALL LETTER ABKHASIAN HA; haabkhasiancyrillic
\DeclareTextCommand{\cyrabhha}{PU}{\84\251}% U+04A9
% U+04AA CYRILLIC CAPITAL LETTER ES WITH DESCENDER; Esdescendercyrillic
\DeclareTextCommand{\CYRSDSC}{PU}{\84\252}% U+04AA
\DeclareTextCompositeCommand{\k}{PU}{\CYRS}{\84\252}% U+04AA
% U+04AB CYRILLIC SMALL LETTER ES WITH DESCENDER; esdescendercyrillic
\DeclareTextCommand{\cyrsdsc}{PU}{\84\253}% U+04AB
\DeclareTextCompositeCommand{\k}{PU}{\cyrs}{\84\253}% U+04AB
% U+04AC CYRILLIC CAPITAL LETTER TE WITH DESCENDER; Tedescendercyrillic
\DeclareTextCommand{\CYRTDSC}{PU}{\84\254}% U+04AC
% U+04AD CYRILLIC SMALL LETTER TE WITH DESCENDER; tedescendercyrillic
\DeclareTextCommand{\cyrtdsc}{PU}{\84\255}% U+04AD
% U+04AE CYRILLIC CAPITAL LETTER STRAIGHT U; Ustraightcyrillic
\DeclareTextCommand{\CYRY}{PU}{\84\256}% U+04AE
% U+04AF CYRILLIC SMALL LETTER STRAIGHT U; ustraightcyrillic
\DeclareTextCommand{\cyry}{PU}{\84\257}% U+04AF
% U+04B0 CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE; Ustraightstrokecyrillic
\DeclareTextCommand{\CYRYHCRS}{PU}{\84\260}% U+04B0
% U+04B1 CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE; ustraightstrokecyrillic
\DeclareTextCommand{\cyryhcrs}{PU}{\84\261}% U+04B1
% U+04B2 CYRILLIC CAPITAL LETTER HA WITH DESCENDER; Hadescendercyrillic
\DeclareTextCommand{\CYRHDSC}{PU}{\84\262}% U+04B2
% U+04B3 CYRILLIC SMALL LETTER HA WITH DESCENDER; hadescendercyrillic
\DeclareTextCommand{\cyrhdsc}{PU}{\84\263}% U+04B3
% U+04B4 CYRILLIC CAPITAL LIGATURE TE TSE; Tetsecyrillic
\DeclareTextCommand{\CYRTETSE}{PU}{\84\264}% U+04B4
% U+04B5 CYRILLIC SMALL LIGATURE TE TSE; tetsecyrillic
\DeclareTextCommand{\cyrtetse}{PU}{\84\265}% U+04B5
% U+04B6 CYRILLIC CAPITAL LETTER CHE WITH DESCENDER;
%   Chedescendercyrillic
\DeclareTextCommand{\CYRCHRDSC}{PU}{\84\266}% U+04B6
% U+04B7 CYRILLIC SMALL LETTER CHE WITH DESCENDER; chedescendercyrillic
\DeclareTextCommand{\cyrchrdsc}{PU}{\84\267}% U+04B7
% U+04B8 CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE;
%   Cheverticalstrokecyrillic
\DeclareTextCommand{\CYRCHVCRS}{PU}{\84\270}% U+04B8
% U+04B9 CYRILLIC SMALL LETTER CHE WITH VERTICAL STROKE;
%   cheverticalstrokecyrillic
\DeclareTextCommand{\cyrchvcrs}{PU}{\84\271}% U+04B9
% U+04BA CYRILLIC CAPITAL LETTER SHHA; Shhacyrillic
\DeclareTextCommand{\CYRSHHA}{PU}{\84\272}% U+04BA
% U+04BB CYRILLIC SMALL LETTER SHHA; shhacyrillic
\DeclareTextCommand{\cyrshha}{PU}{\84\273}% U+04BB
% U+04BC CYRILLIC CAPITAL LETTER ABKHASIAN CHE; Cheabkhasiancyrillic
\DeclareTextCommand{\CYRABHCH}{PU}{\84\274}% U+04BC
% U+04BD CYRILLIC SMALL LETTER ABKHASIAN CHE; cheabkhasiancyrillic
\DeclareTextCommand{\cyrabhch}{PU}{\84\275}% U+04BD
% U+04BE CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER; Chedescenderabkhasiancyrillic
\DeclareTextCommand{\CYRABHCHDSC}{PU}{\84\276}% U+04BE
\DeclareTextCompositeCommand{\k}{PU}{\CYRABHCH}{\84\276}% U+04BE
% U+04BF CYRILLIC SMALL LETTER ABKHASIAN CHE WITH DESCENDER; chedescenderabkhasiancyrillic
\DeclareTextCommand{\cyrabhchdsc}{PU}{\84\277}% U+04BF
\DeclareTextCompositeCommand{\k}{PU}{\cyrabhch}{\84\277}% U+04BF
% U+04C0 CYRILLIC LETTER PALOCHKA; palochkacyrillic
\DeclareTextCommand{\CYRpalochka}{PU}{\84\300}% U+04C0
% U+04C1 CYRILLIC CAPITAL LETTER ZHE WITH BREVE; Zhebrevecyrillic
\DeclareTextCompositeCommand{\U}{PU}{\CYRZH}{\84\301}% U+04C1
% U+04C2 CYRILLIC SMALL LETTER ZHE WITH BREVE; zhebrevecyrillic
\DeclareTextCompositeCommand{\U}{PU}{\cyrzh}{\84\302}% U+04C2
% U+04C3 CYRILLIC CAPITAL LETTER KA WITH HOOK; Kahookcyrillic
\DeclareTextCommand{\CYRKHK}{PU}{\84\303}% U+04C3
% U+04C4 CYRILLIC SMALL LETTER KA WITH HOOK; kahookcyrillic
\DeclareTextCommand{\cyrkhk}{PU}{\84\304}% U+04C4
% U+04C5 CYRILLIC CAPITAL LETTER EL WITH TAIL
\DeclareTextCommand{\CYRLDSC}{PU}{\84\305}% U+04C5
% U+04C6 CYRILLIC SMALL LETTER EL WITH TAIL
\DeclareTextCommand{\cyrldsc}{PU}{\84\306}% U+04C6
% U+04C7 CYRILLIC CAPITAL LETTER EN WITH HOOK; Enhookcyrillic
\DeclareTextCommand{\CYRNHK}{PU}{\84\307}% U+04C7
% U+04C8 CYRILLIC SMALL LETTER EN WITH HOOK; enhookcyrillic
\DeclareTextCommand{\cyrnhk}{PU}{\84\310}% U+04C8
% U+04CB CYRILLIC CAPITAL LETTER KHAKASSIAN CHE; Chekhakassiancyrillic
\DeclareTextCommand{\CYRCHLDSC}{PU}{\84\313}% U+04CB
% U+04CC CYRILLIC SMALL LETTER KHAKASSIAN CHE; chekhakassiancyrillic
\DeclareTextCommand{\cyrchldsc}{PU}{\84\314}% U+04CC
% U+04CD CYRILLIC CAPITAL LETTER EM WITH TAIL
\DeclareTextCommand{\CYRMDSC}{PU}{\84\315}% U+04CD
% U+04CE CYRILLIC SMALL LETTER EM WITH TAIL
\DeclareTextCommand{\cyrmdsc}{PU}{\84\316}% U+04CE
%    \end{macrocode}
%    |\84\317|: U+04CF CYRILLIC SMALL LETTER PALOCHKA
%    \begin{macrocode}
% U+04D0 CYRILLIC CAPITAL LETTER A WITH BREVE; Abrevecyrillic
\DeclareTextCompositeCommand{\U}{PU}{\CYRA}{\84\320}% U+04D0
% U+04D1 CYRILLIC SMALL LETTER A WITH BREVE; abrevecyrillic
\DeclareTextCompositeCommand{\U}{PU}{\cyra}{\84\321}% U+04D1
% U+04D2 CYRILLIC CAPITAL LETTER A WITH DIAERESIS; Adieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRA}{\84\322}% U+04D2
% U+04D3 CYRILLIC SMALL LETTER A WITH DIAERESIS; adieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyra}{\84\323}% U+04D3
% U+04D4 CYRILLIC CAPITAL LIGATURE A IE; Aiecyrillic
\DeclareTextCommand{\CYRAE}{PU}{\84\324}% U+04D4
% U+04D5 CYRILLIC SMALL LIGATURE A IE; aiecyrillic
\DeclareTextCommand{\cyrae}{PU}{\84\325}% U+04D5
% U+04D6 CYRILLIC CAPITAL LETTER IE WITH BREVE; Iebrevecyrillic
\DeclareTextCompositeCommand{\U}{PU}{\CYRE}{\84\326}% U+04D6
% U+04D7 CYRILLIC SMALL LETTER IE WITH BREVE; iebrevecyrillic
\DeclareTextCompositeCommand{\U}{PU}{\cyre}{\84\327}% U+04D7
% U+04D8 CYRILLIC CAPITAL LETTER SCHWA; Schwacyrillic
\DeclareTextCommand{\CYRSCHWA}{PU}{\84\330}% U+04D8
% U+04D9 CYRILLIC SMALL LETTER SCHWA; *afii10846, schwacyrillic
\DeclareTextCommand{\cyrschwa}{PU}{\84\331}% U+04D9
% U+04DA CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS;
%   Schwadieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRSCHWA}{\84\332}% U+04DA
% U+04DB CYRILLIC SMALL LETTER SCHWA WITH DIAERESIS;
%   schwadieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyrschwa}{\84\333}% U+04DB
% U+04DC CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS; Zhedieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRZH}{\84\334}% U+04DC
% U+04DD CYRILLIC SMALL LETTER ZHE WITH DIAERESIS; zhedieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyrzh}{\84\335}% U+04DD
% U+04DE CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS; Zedieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRZ}{\84\336}% U+04DE
% U+04DF CYRILLIC SMALL LETTER ZE WITH DIAERESIS; zedieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyrz}{\84\337}% U+04DF
% U+04E0 CYRILLIC CAPITAL LETTER ABKHASIAN DZE; Dzeabkhasiancyrillic
\DeclareTextCommand{\CYRABHDZE}{PU}{\84\340}% U+04E0
% U+04E1 CYRILLIC SMALL LETTER ABKHASIAN DZE; dzeabkhasiancyrillic
\DeclareTextCommand{\cyrabhdze}{PU}{\84\341}% U+04E1
% U+04E2 CYRILLIC CAPITAL LETTER I WITH MACRON; Imacroncyrillic
\DeclareTextCompositeCommand{\=}{PU}{\CYRI}{\84\342}% U+04E2
% U+04E3 CYRILLIC SMALL LETTER I WITH MACRON; imacroncyrillic
\DeclareTextCompositeCommand{\=}{PU}{\cyri}{\84\343}% U+04E3
% U+04E4 CYRILLIC CAPITAL LETTER I WITH DIAERESIS; Idieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRI}{\84\344}% U+04E4
% U+04E5 CYRILLIC SMALL LETTER I WITH DIAERESIS; idieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyri}{\84\345}% U+04E5
% U+04E6 CYRILLIC CAPITAL LETTER O WITH DIAERESIS; Odieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRO}{\84\346}% U+04E6
% U+04E7 CYRILLIC SMALL LETTER O WITH DIAERESIS; odieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyro}{\84\347}% U+04E7
% U+04E8 CYRILLIC CAPITAL LETTER BARRED O; Obarredcyrillic
\DeclareTextCommand{\CYROTLD}{PU}{\84\350}% U+04E8
% U+04E9 CYRILLIC SMALL LETTER BARRED O; obarredcyrillic
\DeclareTextCommand{\cyrotld}{PU}{\84\351}% U+04E9
% U+04EA CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS;
%   Obarreddieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYROTLD}{\84\352}% U+04EA
% U+04EB CYRILLIC SMALL LETTER BARRED O WITH DIAERESIS;
%   obarreddieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyrotld}{\84\353}% U+04EB
% U+04EC CYRILLIC CAPITAL LETTER E WITH DIAERESIS
\DeclareTextCompositeCommand{\"}{PU}{\CYREREV}{\84\354}% U+04EC
% U+04ED CYRILLIC SMALL LETTER E WITH DIAERESIS
\DeclareTextCompositeCommand{\"}{PU}{\cyrerev}{\84\355}% U+04ED
% U+04EE CYRILLIC CAPITAL LETTER U WITH MACRON; Umacroncyrillic
\DeclareTextCompositeCommand{\=}{PU}{\CYRU}{\84\356}% U+04EE
% U+04EF CYRILLIC SMALL LETTER U WITH MACRON; umacroncyrillic
\DeclareTextCompositeCommand{\=}{PU}{\cyru}{\84\357}% U+04EF
% U+04F0 CYRILLIC CAPITAL LETTER U WITH DIAERESIS; Udieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRU}{\84\360}% U+04F0
% U+04F1 CYRILLIC SMALL LETTER U WITH DIAERESIS; udieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyru}{\84\361}% U+04F1
% U+04F2 CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE; Uhungarumlautcyrillic
\DeclareTextCompositeCommand{\H}{PU}{\CYRU}{\84\362}% U+04F2
% U+04F3 CYRILLIC SMALL LETTER U WITH DOUBLE ACUTE; uhungarumlautcyrillic
\DeclareTextCompositeCommand{\H}{PU}{\cyru}{\84\363}% U+04F3
% U+04F4 CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS; Chedieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRCH}{\84\364}% U+04F4
% U+04F5 CYRILLIC SMALL LETTER CHE WITH DIAERESIS; chedieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyrch}{\84\365}% U+04F5
% U+04F6 CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
\DeclareTextCommand{\CYRGDSC}{PU}{\84\366}% U+04F6
% U+04F7 CYRILLIC SMALL LETTER GHE WITH DESCENDER
\DeclareTextCommand{\cyrgdsc}{PU}{\84\367}% U+04F7
% U+04F8 CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS; Yerudieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\CYRERY}{\84\370}% U+04F8
% U+04F9 CYRILLIC SMALL LETTER YERU WITH DIAERESIS; yerudieresiscyrillic
\DeclareTextCompositeCommand{\"}{PU}{\cyrery}{\84\371}% U+04F9
%    \end{macrocode}
%    |\84\372|: U+04FA CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK\\
%    |\84\373|: U+04FB CYRILLIC SMALL LETTER GHE WITH STROKE AND HOOK
%    \begin{macrocode}
% U+04FC CYRILLIC CAPITAL LETTER HA WITH HOOK
\DeclareTextCommand{\CYRHHK}{PU}{\84\374}% U+04FC
% U+04FD CYRILLIC SMALL LETTER HA WITH HOOK
\DeclareTextCommand{\cyrhhk}{PU}{\84\375}% U+04FD
\fi
%    \end{macrocode}
%    |\84\376|: U+04FE CYRILLIC CAPITAL LETTER HA WITH STROKE\\
%    |\84\377|: U+04FF CYRILLIC SMALL LETTER HA WITH STROKE
%
% \subsubsection{Hebrew: U+0590 to U+05FF}
%
%    Macro names are taken from \texttt{he8enc.def}.
%    hebrew is only loaded if \cs{hebdalet} is defined
%    \begin{macrocode}
\ifx\hebdalet\@undefined\else
% U+05C3 HEBREW PUNCTUATION SOF PASUQ
\DeclareTextCommand{\sofpasuq}{PU}{\85\303}% U+05C3
% U+05D0 HEBREW LETTER ALEF
\DeclareTextCommand{\hebalef}{PU}{\85\320}% U+05D0
% U+05D1 HEBREW LETTER BET
\DeclareTextCommand{\hebbet}{PU}{\85\321}% U+05D1
% U+05D2 HEBREW LETTER GIMEL
\DeclareTextCommand{\hebgimel}{PU}{\85\322}% U+05D2
% U+05D3 HEBREW LETTER DALET
\DeclareTextCommand{\hebdalet}{PU}{\85\323}% U+05D3
% U+05D4 HEBREW LETTER HE
\DeclareTextCommand{\hebhe}{PU}{\85\324}% U+05D4
% U+05D5 HEBREW LETTER VAV
\DeclareTextCommand{\hebvav}{PU}{\85\325}% U+05D5
% U+05D6 HEBREW LETTER ZAYIN
\DeclareTextCommand{\hebzayin}{PU}{\85\326}% U+05D6
% U+05D7 HEBREW LETTER HET
\DeclareTextCommand{\hebhet}{PU}{\85\327}% U+05D7
% U+05D8 HEBREW LETTER TET
\DeclareTextCommand{\hebtet}{PU}{\85\330}% U+05D8
% U+05D9 HEBREW LETTER YOD
\DeclareTextCommand{\hebyod}{PU}{\85\331}% U+05D9
% U+05DA HEBREW LETTER FINAL KAF
\DeclareTextCommand{\hebfinalkaf}{PU}{\85\332}% U+05DA
% U+05DB HEBREW LETTER KAF
\DeclareTextCommand{\hebkaf}{PU}{\85\333}% U+05DB
% U+05DC HEBREW LETTER LAMED
\DeclareTextCommand{\heblamed}{PU}{\85\334}% U+05DC
% U+05DD HEBREW LETTER FINAL MEM
\DeclareTextCommand{\hebfinalmem}{PU}{\85\335}% U+05DD
% U+05DE HEBREW LETTER MEM
\DeclareTextCommand{\hebmem}{PU}{\85\336}% U+05DE
% U+05DF HEBREW LETTER FINAL NUN
\DeclareTextCommand{\hebfinalnun}{PU}{\85\337}% U+05DF
% U+05E0 HEBREW LETTER NUN
\DeclareTextCommand{\hebnun}{PU}{\85\340}% U+05E0
% U+05E1 HEBREW LETTER SAMEKH
\DeclareTextCommand{\hebsamekh}{PU}{\85\341}% U+05E1
% U+05E2 HEBREW LETTER AYIN
\DeclareTextCommand{\hebayin}{PU}{\85\342}% U+05E2
% U+05E3 HEBREW LETTER FINAL PE
\DeclareTextCommand{\hebfinalpe}{PU}{\85\343}% U+05E3
% U+05E4 HEBREW LETTER PE
\DeclareTextCommand{\hebpe}{PU}{\85\344}% U+05E4
% U+05E5 HEBREW LETTER FINAL TSADI
\DeclareTextCommand{\hebfinaltsadi}{PU}{\85\345}% U+05E5
% U+05E6 HEBREW LETTER TSADI
\DeclareTextCommand{\hebtsadi}{PU}{\85\346}% U+05E6
% U+05E7 HEBREW LETTER QOF
\DeclareTextCommand{\hebqof}{PU}{\85\347}% U+05E7
% U+05E8 HEBREW LETTER RESH
\DeclareTextCommand{\hebresh}{PU}{\85\350}% U+05E8
% U+05E9 HEBREW LETTER SHIN
\DeclareTextCommand{\hebshin}{PU}{\85\351}% U+05E9
%* \hebshin -> \hebsin (he8)
% U+05EA HEBREW LETTER TAV
\DeclareTextCommand{\hebtav}{PU}{\85\352}% U+05EA
% U+05F0 HEBREW LIGATURE YIDDISH DOUBLE VAV
\DeclareTextCommand{\doublevav}{PU}{\85\360}% U+05F0
% U+05F1 HEBREW LIGATURE YIDDISH VAV YOD
\DeclareTextCommand{\vavyod}{PU}{\85\361}% U+05F1
% U+05F2 HEBREW LIGATURE YIDDISH DOUBLE YOD
\DeclareTextCommand{\doubleyod}{PU}{\85\362}% U+05F2
\fi
%    \end{macrocode}
%
% \subsubsection{Thai: U+0E00 to U+0E7F}
%
%    \begin{macrocode}
% U+0E3F THAI CURRENCY SYMBOL BAHT; bahtthai
\DeclareTextCommand{\textbaht}{PU}{\9016\077}% U+0E3F
%    \end{macrocode}
%
% \subsubsection{Phonetic Extensions: U+1D00 to U+1D7F}
%
%    \begin{macrocode}
% U+1D00 LATIN LETTER SMALL CAPITAL A; \textsca (tipa)
\DeclareTextCommand{\textsca}{PU}{\9035\000}% U+1D00
% U+1D05 LATIN LETTER SMALL CAPITAL D; \scd (wsuipa)
\DeclareTextCommand{\textscd}{PU}{\9035\005}%* U+1D05
% U+1D07 LATIN LETTER SMALL CAPITAL E; \textsce (tipa)
\DeclareTextCommand{\textsce}{PU}{\9035\007}% U+1D07
% U+1D0A LATIN LETTER SMALL CAPITAL J; \textscj (tipa)
\DeclareTextCommand{\textscj}{PU}{\9035\012}% U+1D0A
% U+1D0B LATIN LETTER SMALL CAPITAL K; \textsck (tipx)
\DeclareTextCommand{\textPUsck}{PU}{\9035\013}% U+1D0B
%* \textPUsck -> \textsck (tipx)
% U+1D0D LATIN LETTER SMALL CAPITAL M; \textscm (tipx)
\DeclareTextCommand{\textPUscm}{PU}{\9035\015}% U+1D0D
%* \textPUscm -> \textscm (tipx)
% U+1D18 LATIN LETTER SMALL CAPITAL P; \textscp (tipx)
\DeclareTextCommand{\textPUscp}{PU}{\9035\030}% U+1D18
%* \textPUscp -> \textscp (tipx)
% U+1D19 LATIN LETTER SMALL CAPITAL REVERSED R; \textrevscr (tipx)
\DeclareTextCommand{\textPUrevscr}{PU}{\9035\031}% U+1D19
%* \textPUrevscr -> \textrevscr (tipx)
% U+1D1C LATIN LETTER SMALL CAPITAL U; \textscu (tipa), \scu (wsuipa)
\DeclareTextCommand{\textscu}{PU}{\9035\034}%* U+1D1C
% U+1D62 LATIN SUBSCRIPT SMALL LETTER I
\DeclareTextCommand{\textiinferior}{PU}{\9035\142}%* U+1D62
% U+1D63 LATIN SUBSCRIPT SMALL LETTER R
\DeclareTextCommand{\textrinferior}{PU}{\9035\143}%* U+1D63
% U+1D64 LATIN SUBSCRIPT SMALL LETTER U
\DeclareTextCommand{\textuinferior}{PU}{\9035\144}%* U+1D64
% U+1D65 LATIN SUBSCRIPT SMALL LETTER V
\DeclareTextCommand{\textvinferior}{PU}{\9035\145}%* U+1D65
% U+1D66 GREEK SUBSCRIPT SMALL LETTER BETA
\DeclareTextCommand{\textbetainferior}{PU}{\9035\146}%* U+1D66
% U+1D67 GREEK SUBSCRIPT SMALL LETTER GAMMA
\DeclareTextCommand{\textgammainferior}{PU}{\9035\147}%* U+1D67
% U+1D68 GREEK SUBSCRIPT SMALL LETTER RHO
\DeclareTextCommand{\textrhoinferior}{PU}{\9035\150}%* U+1D68
% U+1D69 GREEK SUBSCRIPT SMALL LETTER PHI
\DeclareTextCommand{\textphiinferior}{PU}{\9035\151}%* U+1D69
% U+1D6A GREEK SUBSCRIPT SMALL LETTER CHI
\DeclareTextCommand{\textchiinferior}{PU}{\9035\152}%* U+1D6A
% U+1D7B LATIN SMALL CAPITAL LETTER I WITH STROKE;
%   \barsci (wsuipa)
\DeclareTextCommand{\textbarsci}{PU}{\9035\173}%* U+1D7B
% U+1D7D LATIN SMALL LETTER P WITH STROKE; \barp (wsuipa)
\DeclareTextCommand{\textbarp}{PU}{\9035\175}%* U+1D7D
% U+1D7E LATIN SMALL CAPITAL LETTER U WITH STROKE;
%   \barscu (wsuipa)
\DeclareTextCommand{\textbarscu}{PU}{\9035\176}%* U+1D7E
%    \end{macrocode}
%
% \subsubsection{Phonetic Extensions Supplement: U+1D80 to U+1DBF}
%
%    \begin{macrocode}
% U+1D8F LATIN SMALL LETTER A WITH RETROFLEX HOOK; \textrhooka (tipx)
\DeclareTextCommand{\textPUrhooka}{PU}{\9035\217}% U+1D8F
%* \textPUrhooka -> \textrhooka (tipx)
% U+1D91 LATIN SMALL LETTER D WITH HOOK AND TAIL; \texthtrtaild (tipa)
\DeclareTextCommand{\texthtrtaild}{PU}{\9035\221}%* U+1D91
% U+1D92 LATIN SMALL LETTER E WITH RETROFLEX HOOK; \textrhooke (tipx)
\DeclareTextCommand{\textPUrhooke}{PU}{\9035\222}% U+1D92
%* \textPUrhooke -> \textrhooke (tipx)
% U+1D93 LATIN SMALL LETTER OPEN E WITH RETROFLEX HOOK;
%   \textrhookepsilon (tipx)
\DeclareTextCommand{\textPUrhookepsilon}{PU}{\9035\223}% U+1D93
%* \textPUrhookepsilon -> \textrhookepsilon (tipx)
% U+1D97 LATIN SMALL LETTER OPEN O WITH RETROFLEX HOOK;
%   \textrhookopeno (tipx)
\DeclareTextCommand{\textPUrhookopeno}{PU}{\9035\227}% U+1D97
%* \textPUrhookopeno -> \textrhookopeno (tipx)
%    \end{macrocode}
%
% \subsubsection{Latin Extended Additional: U+1E00 to U+1EFF}
%
%    \begin{macrocode}
% U+1E00 LATIN CAPITAL LETTER A WITH RING BELOW; Aringbelow
\DeclareTextCompositeCommand{\textsubring}{PU}{A}{\9036\000}% U+1E00
% U+1E01 LATIN SMALL LETTER A WITH RING BELOW; aringbelow
\DeclareTextCompositeCommand{\textsubring}{PU}{a}{\9036\001}% U+1E01
% U+1E02 LATIN CAPITAL LETTER B WITH DOT ABOVE; Bdotaccent
\DeclareTextCompositeCommand{\.}{PU}{B}{\9036\002}% U+1E02
% U+1E03 LATIN SMALL LETTER B WITH DOT ABOVE; bdotaccent
\DeclareTextCompositeCommand{\.}{PU}{b}{\9036\003}% U+1E03
% U+1E04 LATIN CAPITAL LETTER B WITH DOT BELOW; Bdotbelow
\DeclareTextCompositeCommand{\d}{PU}{B}{\9036\004}% U+1E04
% U+1E05 LATIN SMALL LETTER B WITH DOT BELOW; bdotbelow
\DeclareTextCompositeCommand{\d}{PU}{b}{\9036\005}% U+1E05
% U+1E06 LATIN CAPITAL LETTER B WITH LINE BELOW; Blinebelow
\DeclareTextCompositeCommand{\b}{PU}{B}{\9036\006}% U+1E06
% U+1E07 LATIN SMALL LETTER B WITH LINE BELOW; blinebelow
\DeclareTextCompositeCommand{\b}{PU}{b}{\9036\007}% U+1E07
% U+1E0A LATIN CAPITAL LETTER D WITH DOT ABOVE; Ddotaccent
\DeclareTextCompositeCommand{\.}{PU}{D}{\9036\012}% U+1E0A
% U+1E0B LATIN SMALL LETTER D WITH DOT ABOVE; ddotaccent
\DeclareTextCompositeCommand{\.}{PU}{d}{\9036\013}% U+1E0B
% U+1E0C LATIN CAPITAL LETTER D WITH DOT BELOW; Ddotbelow
\DeclareTextCompositeCommand{\d}{PU}{D}{\9036\014}% U+1E0C
% U+1E0D LATIN SMALL LETTER D WITH DOT BELOW; ddotbelow
\DeclareTextCompositeCommand{\d}{PU}{d}{\9036\015}% U+1E0D
% U+1E0E LATIN CAPITAL LETTER D WITH LINE BELOW; Dlinebelow
\DeclareTextCompositeCommand{\b}{PU}{D}{\9036\016}% U+1E0E
% U+1E0F LATIN SMALL LETTER D WITH LINE BELOW; dlinebelow
\DeclareTextCompositeCommand{\b}{PU}{d}{\9036\017}% U+1E0F
% U+1E10 LATIN CAPITAL LETTER D WITH CEDILLA; Dcedilla
\DeclareTextCompositeCommand{\c}{PU}{D}{\9036\020}% U+1E10
% U+1E11 LATIN SMALL LETTER D WITH CEDILLA; dcedilla
\DeclareTextCompositeCommand{\c}{PU}{d}{\9036\021}% U+1E11
% U+1E12 LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW; Dcircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{D}{\9036\022}% U+1E12
% U+1E13 LATIN SMALL LETTER D WITH CIRCUMFLEX BELOW; dcircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{d}{\9036\023}% U+1E13
% U+1E14 LATIN CAPITAL LETTER E WITH MACRON AND GRAVE;
%   Emacrongrave
\DeclareTextCompositeCommand{\textgravemacron}{PU}{E}{\9036\024}% U+1E14
% U+1E15 LATIN SMALL LETTER E WITH MACRON AND GRAVE;
%   emacrongrave
\DeclareTextCompositeCommand{\textgravemacron}{PU}{e}{\9036\025}% U+1E15
% U+1E16 LATIN CAPITAL LETTER E WITH MACRON AND ACUTE;
%   Emacronacute
\DeclareTextCompositeCommand{\textacutemacron}{PU}{E}{\9036\026}% U+1E16
% U+1E17 LATIN SMALL LETTER E WITH MACRON AND ACUTE;
%   emacronacute
\DeclareTextCompositeCommand{\textacutemacron}{PU}{e}{\9036\027}% U+1E17
% U+1E18 LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW; Ecircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{E}{\9036\030}% U+1E18
% U+1E19 LATIN SMALL LETTER E WITH CIRCUMFLEX BELOW; ecircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{e}{\9036\031}% U+1E19
% U+1E1A LATIN CAPITAL LETTER E WITH TILDE BELOW; Etildebelow
\DeclareTextCompositeCommand{\textsubtilde}{PU}{E}{\9036\032}% U+1E1A
% U+1E1B LATIN SMALL LETTER E WITH TILDE BELOW; etildebelow
\DeclareTextCompositeCommand{\textsubtilde}{PU}{e}{\9036\033}% U+1E1B
% U+1E1E LATIN CAPITAL LETTER F WITH DOT ABOVE; Fdotaccent
\DeclareTextCompositeCommand{\.}{PU}{F}{\9036\036}% U+1E1E
% U+1E1F LATIN SMALL LETTER F WITH DOT ABOVE; fdotaccent
\DeclareTextCompositeCommand{\.}{PU}{f}{\9036\037}% U+1E1F
% U+1E20 LATIN CAPITAL LETTER G WITH MACRON; Gmacron
\DeclareTextCompositeCommand{\=}{PU}{G}{\9036\040}% U+1E20
% U+1E21 LATIN SMALL LETTER G WITH MACRON; gmacron
\DeclareTextCompositeCommand{\=}{PU}{g}{\9036\041}% U+1E21
% U+1E22 LATIN CAPITAL LETTER H WITH DOT ABOVE; Hdotaccent
\DeclareTextCompositeCommand{\.}{PU}{H}{\9036\042}% U+1E22
% U+1E23 LATIN SMALL LETTER H WITH DOT ABOVE; hdotaccent
\DeclareTextCompositeCommand{\.}{PU}{h}{\9036\043}% U+1E23
% U+1E24 LATIN CAPITAL LETTER H WITH DOT BELOW; Hdotbelow
\DeclareTextCompositeCommand{\d}{PU}{H}{\9036\044}% U+1E24
% U+1E25 LATIN SMALL LETTER H WITH DOT BELOW; hdotbelow
\DeclareTextCompositeCommand{\d}{PU}{h}{\9036\045}% U+1E25
% U+1E26 LATIN CAPITAL LETTER H WITH DIAERESIS; Hdieresis
\DeclareTextCompositeCommand{\"}{PU}{H}{\9036\046}% U+1E26
% U+1E27 LATIN SMALL LETTER H WITH DIAERESIS; hdieresis
\DeclareTextCompositeCommand{\"}{PU}{h}{\9036\047}% U+1E27
% U+1E28 LATIN CAPITAL LETTER H WITH CEDILLA; Hcedilla
\DeclareTextCompositeCommand{\c}{PU}{H}{\9036\050}% U+1E28
% U+1E29 LATIN SMALL LETTER H WITH CEDILLA; hcedilla
\DeclareTextCompositeCommand{\c}{PU}{h}{\9036\051}% U+1E29
% U+1E2A LATIN CAPITAL LETTER H WITH BREVE BELOW; Hbrevebelow
\DeclareTextCompositeCommand{\textsubbreve}{PU}{H}{\9036\052}% U+1E2A
% U+1E2B LATIN SMALL LETTER H WITH BREVE BELOW; hbrevebelow
\DeclareTextCompositeCommand{\textsubbreve}{PU}{h}{\9036\053}% U+1E2B
% U+1E2C LATIN CAPITAL LETTER I WITH TILDE BELOW; Itildebelow
\DeclareTextCompositeCommand{\textsubtilde}{PU}{I}{\9036\054}% U+1E2C
% U+1E2D LATIN SMALL LETTER I WITH TILDE BELOW; itildebelow
\DeclareTextCompositeCommand{\textsubtilde}{PU}{i}{\9036\055}% U+1E2D
% U+1E30 LATIN CAPITAL LETTER K WITH ACUTE; Kacute
\DeclareTextCompositeCommand{\'}{PU}{K}{\9036\060}% U+1E30
% U+1E31 LATIN SMALL LETTER K WITH ACUTE; kacute
\DeclareTextCompositeCommand{\'}{PU}{k}{\9036\061}% U+1E31
% U+1E32 LATIN CAPITAL LETTER K WITH DOT BELOW; Kdotbelow
\DeclareTextCompositeCommand{\d}{PU}{K}{\9036\062}% U+1E32
% U+1E33 LATIN SMALL LETTER K WITH DOT BELOW; kdotbelow
\DeclareTextCompositeCommand{\d}{PU}{k}{\9036\063}% U+1E33
% U+1E34 LATIN CAPITAL LETTER K WITH LINE BELOW; Klinebelow
\DeclareTextCompositeCommand{\b}{PU}{K}{\9036\064}% U+1E34
% U+1E35 LATIN SMALL LETTER K WITH LINE BELOW; klinebelow
\DeclareTextCompositeCommand{\b}{PU}{k}{\9036\065}% U+1E35
% U+1E36 LATIN CAPITAL LETTER L WITH DOT BELOW; Ldotbelow
\DeclareTextCompositeCommand{\d}{PU}{L}{\9036\066}% U+1E36
% U+1E37 LATIN SMALL LETTER L WITH DOT BELOW; ldotbelow
\DeclareTextCompositeCommand{\d}{PU}{l}{\9036\067}% U+1E37
% U+1E3A LATIN CAPITAL LETTER L WITH LINE BELOW; Llinebelow
\DeclareTextCompositeCommand{\b}{PU}{L}{\9036\072}% U+1E3A
% U+1E3B LATIN SMALL LETTER L WITH LINE BELOW; llinebelow
\DeclareTextCompositeCommand{\b}{PU}{l}{\9036\073}% U+1E3B
% U+1E3C LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW; Lcircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{L}{\9036\074}% U+1E3C
% U+1E3D LATIN SMALL LETTER L WITH CIRCUMFLEX BELOW; lcircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{l}{\9036\075}% U+1E3D
% U+1E3E LATIN CAPITAL LETTER M WITH ACUTE; Macute
\DeclareTextCompositeCommand{\'}{PU}{M}{\9036\076}% U+1E3E
% U+1E3F LATIN SMALL LETTER M WITH ACUTE; macute
\DeclareTextCompositeCommand{\'}{PU}{m}{\9036\077}% U+1E3F
% U+1E40 LATIN CAPITAL LETTER M WITH DOT ABOVE; Mdotaccent
\DeclareTextCompositeCommand{\.}{PU}{M}{\9036\100}% U+1E40
% U+1E41 LATIN SMALL LETTER M WITH DOT ABOVE; mdotaccent
\DeclareTextCompositeCommand{\.}{PU}{m}{\9036\101}% U+1E41
% U+1E42 LATIN CAPITAL LETTER M WITH DOT BELOW; Mdotbelow
\DeclareTextCompositeCommand{\d}{PU}{M}{\9036\102}% U+1E42
% U+1E43 LATIN SMALL LETTER M WITH DOT BELOW; mdotbelow
\DeclareTextCompositeCommand{\d}{PU}{m}{\9036\103}% U+1E43
% U+1E44 LATIN CAPITAL LETTER N WITH DOT ABOVE; Ndotaccent
\DeclareTextCompositeCommand{\.}{PU}{N}{\9036\104}% U+1E44
% U+1E45 LATIN SMALL LETTER N WITH DOT ABOVE; ndotaccent
\DeclareTextCompositeCommand{\.}{PU}{n}{\9036\105}% U+1E45
% U+1E46 LATIN CAPITAL LETTER N WITH DOT BELOW; Ndotbelow
\DeclareTextCompositeCommand{\d}{PU}{N}{\9036\106}% U+1E46
% U+1E47 LATIN SMALL LETTER N WITH DOT BELOW; ndotbelow
\DeclareTextCompositeCommand{\d}{PU}{n}{\9036\107}% U+1E47
% U+1E48 LATIN CAPITAL LETTER N WITH LINE BELOW; Nlinebelow
\DeclareTextCompositeCommand{\b}{PU}{N}{\9036\110}% U+1E48
% U+1E49 LATIN SMALL LETTER N WITH LINE BELOW; nlinebelow
\DeclareTextCompositeCommand{\b}{PU}{n}{\9036\111}% U+1E49
% U+1E4A LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW; Ncircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{N}{\9036\112}% U+1E4A
% U+1E4B LATIN SMALL LETTER N WITH CIRCUMFLEX BELOW; ncircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{n}{\9036\113}% U+1E4B
% U+1E50 LATIN CAPITAL LETTER O WITH MACRON AND GRAVE;
%   Omacrongrave
\DeclareTextCompositeCommand{\textgravemacron}{PU}{O}{\9036\120}% U+1E50
% U+1E51 LATIN SMALL LETTER O WITH MACRON AND GRAVE;
%   omacrongrave
\DeclareTextCompositeCommand{\textgravemacron}{PU}{o}{\9036\121}% U+1E51
% U+1E52 LATIN CAPITAL LETTER O WITH MACRON AND ACUTE;
%   Omacronacute
\DeclareTextCompositeCommand{\textacutemacron}{PU}{O}{\9036\122}% U+1E52
% U+1E53 LATIN SMALL LETTER O WITH MACRON AND ACUTE;
%   omacronacute
\DeclareTextCompositeCommand{\textacutemacron}{PU}{o}{\9036\123}% U+1E53
% U+1E54 LATIN CAPITAL LETTER P WITH ACUTE; Pacute
\DeclareTextCompositeCommand{\'}{PU}{P}{\9036\124}% U+1E54
% U+1E55 LATIN SMALL LETTER P WITH ACUTE; pacute
\DeclareTextCompositeCommand{\'}{PU}{p}{\9036\125}% U+1E55
% U+1E56 LATIN CAPITAL LETTER P WITH DOT ABOVE; Pdotaccent
\DeclareTextCompositeCommand{\.}{PU}{P}{\9036\126}% U+1E56
% U+1E57 LATIN SMALL LETTER P WITH DOT ABOVE; pdotaccent
\DeclareTextCompositeCommand{\.}{PU}{p}{\9036\127}% U+1E57
% U+1E58 LATIN CAPITAL LETTER R WITH DOT ABOVE; Rdotaccent
\DeclareTextCompositeCommand{\.}{PU}{R}{\9036\130}% U+1E58
% U+1E59 LATIN SMALL LETTER R WITH DOT ABOVE; rdotaccent
\DeclareTextCompositeCommand{\.}{PU}{r}{\9036\131}% U+1E59
% U+1E5A LATIN CAPITAL LETTER R WITH DOT BELOW; Rdotbelow
\DeclareTextCompositeCommand{\d}{PU}{R}{\9036\132}% U+1E5A
% U+1E5B LATIN SMALL LETTER R WITH DOT BELOW; rdotbelow
\DeclareTextCompositeCommand{\d}{PU}{r}{\9036\133}% U+1E5B
% U+1E5E LATIN CAPITAL LETTER R WITH LINE BELOW; Rlinebelow
\DeclareTextCompositeCommand{\b}{PU}{R}{\9036\136}% U+1E5E
% U+1E5F LATIN SMALL LETTER R WITH LINE BELOW; rlinebelow
\DeclareTextCompositeCommand{\b}{PU}{r}{\9036\137}% U+1E5F
% U+1E60 LATIN CAPITAL LETTER S WITH DOT ABOVE; Sdotaccent
\DeclareTextCompositeCommand{\.}{PU}{S}{\9036\140}% U+1E60
% U+1E61 LATIN SMALL LETTER S WITH DOT ABOVE; sdotaccent
\DeclareTextCompositeCommand{\.}{PU}{s}{\9036\141}% U+1E61
% U+1E62 LATIN CAPITAL LETTER S WITH DOT BELOW; Sdotbelow
\DeclareTextCompositeCommand{\d}{PU}{S}{\9036\142}% U+1E62
% U+1E63 LATIN SMALL LETTER S WITH DOT BELOW; sdotbelow
\DeclareTextCompositeCommand{\d}{PU}{s}{\9036\143}% U+1E63
% U+1E6A LATIN CAPITAL LETTER T WITH DOT ABOVE; Tdotaccent
\DeclareTextCompositeCommand{\.}{PU}{T}{\9036\152}% U+1E6A
% U+1E6B LATIN SMALL LETTER T WITH DOT ABOVE; tdotaccent
\DeclareTextCompositeCommand{\.}{PU}{t}{\9036\153}% U+1E6B
% U+1E6C LATIN CAPITAL LETTER T WITH DOT BELOW; Tdotbelow
\DeclareTextCompositeCommand{\d}{PU}{T}{\9036\154}% U+1E6C
% U+1E6D LATIN SMALL LETTER T WITH DOT BELOW; tdotbelow
\DeclareTextCompositeCommand{\d}{PU}{t}{\9036\155}% U+1E6D
% U+1E6E LATIN CAPITAL LETTER T WITH LINE BELOW; Tlinebelow
\DeclareTextCompositeCommand{\b}{PU}{T}{\9036\156}% U+1E6E
% U+1E6F LATIN SMALL LETTER T WITH LINE BELOW; tlinebelow
\DeclareTextCompositeCommand{\b}{PU}{t}{\9036\157}% U+1E6F
% U+1E70 LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW; Tcircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{T}{\9036\160}% U+1E70
% U+1E71 LATIN SMALL LETTER T WITH CIRCUMFLEX BELOW; tcircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{t}{\9036\161}% U+1E71
% U+1E72 LATIN CAPITAL LETTER U WITH DIAERESIS BELOW; Udieresisbelow
\DeclareTextCompositeCommand{\textsubumlaut}{PU}{U}{\9036\162}% U+1E72
% U+1E73 LATIN SMALL LETTER U WITH DIAERESIS BELOW; udieresisbelow
\DeclareTextCompositeCommand{\textsubumlaut}{PU}{u}{\9036\163}% U+1E73
% U+1E74 LATIN CAPITAL LETTER U WITH TILDE BELOW; Utildebelow
\DeclareTextCompositeCommand{\textsubtilde}{PU}{U}{\9036\164}% U+1E74
% U+1E75 LATIN SMALL LETTER U WITH TILDE BELOW; utildebelow
\DeclareTextCompositeCommand{\textsubtilde}{PU}{u}{\9036\165}% U+1E75
% U+1E76 LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW; Ucircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{U}{\9036\166}% U+1E76
% U+1E77 LATIN SMALL LETTER U WITH CIRCUMFLEX BELOW; ucircumflexbelow
\DeclareTextCompositeCommand{\textsubcircum}{PU}{u}{\9036\167}% U+1E77
% U+1E7C LATIN CAPITAL LETTER V WITH TILDE; Vtilde
\DeclareTextCompositeCommand{\~}{PU}{V}{\9036\174}% U+1E7C
% U+1E7D LATIN SMALL LETTER V WITH TILDE; vtilde
\DeclareTextCompositeCommand{\~}{PU}{v}{\9036\175}% U+1E7D
% U+1E7E LATIN CAPITAL LETTER V WITH DOT BELOW; Vdotbelow
\DeclareTextCompositeCommand{\d}{PU}{V}{\9036\176}% U+1E7E
% U+1E7F LATIN SMALL LETTER V WITH DOT BELOW; vdotbelow
\DeclareTextCompositeCommand{\d}{PU}{v}{\9036\177}% U+1E7F
% U+1E80 LATIN CAPITAL LETTER W WITH GRAVE; Wgrave
\DeclareTextCompositeCommand{\`}{PU}{W}{\9036\200}% U+1E80
% U+1E81 LATIN SMALL LETTER W WITH GRAVE; wgrave
\DeclareTextCompositeCommand{\`}{PU}{w}{\9036\201}% U+1E81
% U+1E82 LATIN CAPITAL LETTER W WITH ACUTE; Wacute
\DeclareTextCompositeCommand{\'}{PU}{W}{\9036\202}% U+1E82
% U+1E83 LATIN SMALL LETTER W WITH ACUTE; wacute
\DeclareTextCompositeCommand{\'}{PU}{w}{\9036\203}% U+1E83
% U+1E84 LATIN CAPITAL LETTER W WITH DIAERESIS; Wdieresis
\DeclareTextCompositeCommand{\"}{PU}{W}{\9036\204}% U+1E84
% U+1E85 LATIN SMALL LETTER W WITH DIAERESIS; wdieresis
\DeclareTextCompositeCommand{\"}{PU}{w}{\9036\205}% U+1E85
% U+1E86 LATIN CAPITAL LETTER W WITH DOT ABOVE; Wdotaccent
\DeclareTextCompositeCommand{\.}{PU}{W}{\9036\206}% U+1E86
% U+1E87 LATIN SMALL LETTER W WITH DOT ABOVE; wdotaccent
\DeclareTextCompositeCommand{\.}{PU}{w}{\9036\207}% U+1E87
% U+1E88 LATIN CAPITAL LETTER W WITH DOT BELOW; wdotbelow
\DeclareTextCompositeCommand{\d}{PU}{W}{\9036\210}% U+1E88
% U+1E89 LATIN SMALL LETTER W WITH DOT BELOW; wdotbelow
\DeclareTextCompositeCommand{\d}{PU}{w}{\9036\211}% U+1E89
% U+1E8A LATIN CAPITAL LETTER X WITH DOT ABOVE; Xdotaccent
\DeclareTextCompositeCommand{\.}{PU}{X}{\9036\212}% U+1E8A
% U+1E8B LATIN SMALL LETTER X WITH DOT ABOVE; xdotaccent
\DeclareTextCompositeCommand{\.}{PU}{x}{\9036\213}% U+1E8B
% U+1E8C LATIN CAPITAL LETTER X WITH DIAERESIS; Xdieresis
\DeclareTextCompositeCommand{\"}{PU}{X}{\9036\214}% U+1E8C
% U+1E8D LATIN SMALL LETTER X WITH DIAERESIS; xdieresis
\DeclareTextCompositeCommand{\"}{PU}{x}{\9036\215}% U+1E8D
% U+1E8E LATIN CAPITAL LETTER Y WITH DOT ABOVE; Ydotaccent
\DeclareTextCompositeCommand{\.}{PU}{Y}{\9036\216}% U+1E8E
% U+1E8F LATIN SMALL LETTER Y WITH DOT ABOVE; ydotaccent
\DeclareTextCompositeCommand{\.}{PU}{y}{\9036\217}% U+1E8F
% U+1E90 LATIN CAPITAL LETTER Z WITH CIRCUMFLEX; Zcircumflex
\DeclareTextCompositeCommand{\^}{PU}{Z}{\9036\220}% U+1E90
% U+1E91 LATIN SMALL LETTER Z WITH CIRCUMFLEX; zcircumflex
\DeclareTextCompositeCommand{\^}{PU}{z}{\9036\221}% U+1E91
% U+1E92 LATIN CAPITAL LETTER Z WITH DOT BELOW; Zdotbelow
\DeclareTextCompositeCommand{\d}{PU}{Z}{\9036\222}% U+1E92
% U+1E93 LATIN SMALL LETTER Z WITH DOT BELOW; zdotbelow
\DeclareTextCompositeCommand{\d}{PU}{z}{\9036\223}% U+1E93
% U+1E94 LATIN CAPITAL LETTER Z WITH LINE BELOW; Zlinebelow
\DeclareTextCompositeCommand{\b}{PU}{Z}{\9036\224}% U+1E94
% U+1E95 LATIN SMALL LETTER Z WITH LINE BELOW; zlinebelow
\DeclareTextCompositeCommand{\b}{PU}{z}{\9036\225}% U+1E95
% U+1E96 LATIN SMALL LETTER H WITH LINE BELOW; hlinebelow
\DeclareTextCompositeCommand{\b}{PU}{h}{\9036\226}% U+1E96
% U+1E97 LATIN SMALL LETTER T WITH DIAERESIS; tdieresis
\DeclareTextCompositeCommand{\"}{PU}{t}{\9036\227}% U+1E97
% U+1E98 LATIN SMALL LETTER W WITH RING ABOVE; wring
\DeclareTextCompositeCommand{\r}{PU}{w}{\9036\230}% U+1E98
% U+1E99 LATIN SMALL LETTER Y WITH RING ABOVE; yring
\DeclareTextCompositeCommand{\r}{PU}{y}{\9036\231}% U+1E99
% U+1E9B LATIN SMALL LETTER LONG S WITH DOT ABOVE; slongdotaccent
\DeclareTextCompositeCommand{\.}{PU}{\textlongs}{\9036\233}% U+1E9B
% U+1EA0 LATIN CAPITAL LETTER A WITH DOT BELOW; Adotbelow
\DeclareTextCompositeCommand{\d}{PU}{A}{\9036\240}% U+1EA0
% U+1EA1 LATIN SMALL LETTER A WITH DOT BELOW; adotbelow
\DeclareTextCompositeCommand{\d}{PU}{a}{\9036\241}% U+1EA1
% U+1EB8 LATIN CAPITAL LETTER E WITH DOT BELOW; Edotbelow
\DeclareTextCompositeCommand{\d}{PU}{E}{\9036\270}% U+1EB8
% U+1EB9 LATIN SMALL LETTER E WITH DOT BELOW; edotbelow
\DeclareTextCompositeCommand{\d}{PU}{e}{\9036\271}% U+1EB9
% U+1EBC LATIN CAPITAL LETTER E WITH TILDE; Etilde
\DeclareTextCompositeCommand{\~}{PU}{E}{\9036\274}% U+1EBC
% U+1EBD LATIN SMALL LETTER E WITH TILDE; etilde
\DeclareTextCompositeCommand{\~}{PU}{e}{\9036\275}% U+1EBD
% U+1ECA LATIN CAPITAL LETTER I WITH DOT BELOW; Idotbelow
\DeclareTextCompositeCommand{\d}{PU}{I}{\9036\312}% U+1ECA
% U+1ECB LATIN SMALL LETTER I WITH DOT BELOW; idotbelow
\DeclareTextCompositeCommand{\d}{PU}{i}{\9036\313}% U+1ECB
% U+1ECC LATIN CAPITAL LETTER O WITH DOT BELOW; Odotbelow
\DeclareTextCompositeCommand{\d}{PU}{O}{\9036\314}% U+1ECC
% U+1ECD LATIN SMALL LETTER O WITH DOT BELOW; odotbelow
\DeclareTextCompositeCommand{\d}{PU}{o}{\9036\315}% U+1ECD
% U+1EE4 LATIN CAPITAL LETTER U WITH DOT BELOW; Udotbelow
\DeclareTextCompositeCommand{\d}{PU}{U}{\9036\344}% U+1EE4
% U+1EE5 LATIN SMALL LETTER U WITH DOT BELOW; udotbelow
\DeclareTextCompositeCommand{\d}{PU}{u}{\9036\345}% U+1EE5
% U+1EF2 LATIN CAPITAL LETTER Y WITH GRAVE; Ygrave
\DeclareTextCompositeCommand{\`}{PU}{Y}{\9036\362}% U+1EF2
% U+1EF3 LATIN SMALL LETTER Y WITH GRAVE; ygrave
\DeclareTextCompositeCommand{\`}{PU}{y}{\9036\363}% U+1EF3
% U+1EF4 LATIN CAPITAL LETTER Y WITH DOT BELOW; Ydotbelow
\DeclareTextCompositeCommand{\d}{PU}{Y}{\9036\364}% U+1EF4
% U+1EF5 LATIN SMALL LETTER Y WITH DOT BELOW; ydotbelow
\DeclareTextCompositeCommand{\d}{PU}{y}{\9036\365}% U+1EF5
% U+1EF8 LATIN CAPITAL LETTER Y WITH TILDE; Ytilde
\DeclareTextCompositeCommand{\~}{PU}{Y}{\9036\370}% U+1EF8
% U+1EF9 LATIN SMALL LETTER Y WITH TILDE; ytilde
\DeclareTextCompositeCommand{\~}{PU}{y}{\9036\371}% U+1EF9
%    \end{macrocode}
%
% \subsubsection{General Punctuation: U+2000 to U+206F}
%
%    \begin{macrocode}
% U+200C ZERO WIDTH NON-JOINER; *afii61664, zerowidthnonjoiner
\DeclareTextCommand{\textcompwordmark}{PU}{\9040\014}% U+200C
% U+2013 EN DASH; endash
\DeclareTextCommand{\textendash}{PU}{\9040\023}% U+2013
% U+2014 EM DASH; emdash
\DeclareTextCommand{\textemdash}{PU}{\9040\024}% U+2014
% U+2016 DOUBLE VERTICAL LINE; dblverticalbar
\DeclareTextCommand{\textbardbl}{PU}{\9040\026}% U+2016
%* \textbardbl -> \textdoublevertline (tipa)
% U+2018 LEFT SINGLE QUOTATION MARK; quoteleft
\DeclareTextCommand{\textquoteleft}{PU}{\9040\030}% U+2018
% U+2019 RIGHT SINGLE QUOTATION MARK; quoteright
\DeclareTextCommand{\textquoteright}{PU}{\9040\031}% U+2019
% U+201A SINGLE LOW-9 QUOTATION MARK; quotesinglbase
\DeclareTextCommand{\quotesinglbase}{PU}{\9040\032}% U+201A
% U+201C LEFT DOUBLE QUOTATION MARK; quotedblleft
\DeclareTextCommand{\textquotedblleft}{PU}{\9040\034}% U+201C
% U+201D RIGHT DOUBLE QUOTATION MARK; quotedblright
\DeclareTextCommand{\textquotedblright}{PU}{\9040\035}% U+201D
% U+201E DOUBLE LOW-9 QUOTATION MARK; quotedblbase
\DeclareTextCommand{\quotedblbase}{PU}{\9040\036}% U+201E
% U+2020 DAGGER; dagger
\DeclareTextCommand{\textdagger}{PU}{\9040\040}%* U+2020
%* \textdagger -> \dag (LaTeX)
% U+2021 DOUBLE DAGGER; daggerdbl; \ddagger (LaTeX)
\DeclareTextCommand{\textdaggerdbl}{PU}{\9040\041}% U+2021
%* \textdaggerdbl -> \ddagger (LaTeX)
%* \textdaggerdbl -> \ddag (LaTeX)
% U+2022 BULLET; bullet
\DeclareTextCommand{\textbullet}{PU}{\9040\042}%* U+2022
% U+2025 TWO DOT LEADER; \hdotfor (MnSymbol)
\DeclareTextCommand{\texthdotfor}{PU}{\9040\045}%* U+2025
% U+2026 HORIZONTAL ELLIPSIS; ellipsis
\DeclareTextCommand{\textellipsis}{PU}{\9040\046}% U+2026
%* \textellipsis -> \mathellipsis
% U+2030 PER MILLE SIGN; perthousand
\DeclareTextCommand{\textperthousand}{PU}{\9040\060}% U+2030
% U+2031 PER TEN THOUSAND SIGN
\DeclareTextCommand{\textpertenthousand}{PU}{\9040\061}% U+2031
% U+2032 PRIME; minute; \prime (MnSymbol)
\DeclareTextCommand{\textprime}{PU}{\9040\062}%* U+2032
% U+2033 DOUBLE PRIME; \second (mathabx)
\DeclareTextCommand{\textsecond}{PU}{\9040\063}%* U+2033
% U+2034 TRIPLE PRIME; \third (mathabx)
\DeclareTextCommand{\textthird}{PU}{\9040\064}%* U+2034
% U+2035 REVERSED PRIME; \backprime (AmS)
\DeclareTextCommand{\textbackprime}{PU}{\9040\065}%* U+2035
% U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK; guilsinglleft
\DeclareTextCommand{\guilsinglleft}{PU}{\9040\071}% U+2039
% U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK; guilsinglright
\DeclareTextCommand{\guilsinglright}{PU}{\9040\072}% U+203A
% U+203B REFERENCE MARK; referencemark
\DeclareTextCommand{\textreferencemark}{PU}{\9040\073}% U+203B
% U+203D INTERROBANG
\DeclareTextCommand{\textinterrobang}{PU}{\9040\075}% U+203D
% U+2044 FRACTION SLASH; fraction
\DeclareTextCommand{\textfractionsolidus}{PU}{\9040\104}% U+2044
% U+2045 LEFT SQUARE BRACKET WITH QUILL
\DeclareTextCommand{\textlquill}{PU}{\9040\105}% U+2045
% U+2046 RIGHT SQUARE BRACKET WITH QUILL
\DeclareTextCommand{\textrquill}{PU}{\9040\106}% U+2046
% U+2052 COMMERCIAL MINUS SIGN
\DeclareTextCommand{\textdiscount}{PU}{\9040\122}% U+2052
% U+2056 THREE DOT PUNCTUATION; \lefttherefore (MnSymbol)
\DeclareTextCommand{\textlefttherefore}{PU}{\9040\126}%* U+2056
% U+2057 QUADRUPLE PRIME; \fourth (mathabx)
\DeclareTextCommand{\textfourth}{PU}{\9040\127}%* U+2057
% U+2058 FOUR DOT PUNCTUATION; \diamonddots (MnSymbol)
\DeclareTextCommand{\textdiamonddots}{PU}{\9040\130}%* U+2058
%    \end{macrocode}
%
% \subsubsection{Superscripts and Subscripts: U+2070 to U+209F}
%
%    \begin{macrocode}
% U+2070 SUPERSCRIPT ZERO; zerosuperior
\DeclareTextCommand{\textzerosuperior}{PU}{\9040\160}%* U+2070
% U+2071 SUPERSCRIPT LATIN SMALL LETTER I
\DeclareTextCommand{\textisuperior}{PU}{\9040\161}%* U+2071
% U+2074 SUPERSCRIPT FOUR; foursuperior
\DeclareTextCommand{\textfoursuperior}{PU}{\9040\164}%* U+2074
% U+2075 SUPERSCRIPT FIVE; fivesuperior
\DeclareTextCommand{\textfivesuperior}{PU}{\9040\165}%* U+2075
% U+2076 SUPERSCRIPT SIX; sixsuperior
\DeclareTextCommand{\textsixsuperior}{PU}{\9040\166}%* U+2076
% U+2077 SUPERSCRIPT SEVEN; sevensuperior
\DeclareTextCommand{\textsevensuperior}{PU}{\9040\167}%* U+2077
% U+2078 SUPERSCRIPT EIGHT; eightsuperior
\DeclareTextCommand{\texteightsuperior}{PU}{\9040\170}%* U+2078
% U+2079 SUPERSCRIPT NINE; ninesuperior
\DeclareTextCommand{\textninesuperior}{PU}{\9040\171}%* U+2079
% U+207A SUPERSCRIPT PLUS SIGN; plussuperior
\DeclareTextCommand{\textplussuperior}{PU}{\9040\172}%* U+207A
% U+207B SUPERSCRIPT MINUS
\DeclareTextCommand{\textminussuperior}{PU}{\9040\173}%* U+207B
% U+207C SUPERSCRIPT EQUALS SIGN; equalsuperior
\DeclareTextCommand{\textequalsuperior}{PU}{\9040\174}%* U+207C
% U+207D SUPERSCRIPT LEFT PARENTHESIS; parenleftsuperior
\DeclareTextCommand{\textparenleftsuperior}{PU}{\9040\175}%* U+207D
% U+207E SUPERSCRIPT RIGHT PARENTHESIS; parenrightsuperior
\DeclareTextCommand{\textparenrightsuperior}{PU}{\9040\176}%* U+207E
% U+207F SUPERSCRIPT LATIN SMALL LETTER N; nsuperior
\DeclareTextCommand{\textnsuperior}{PU}{\9040\177}%* U+207F
% U+2080 SUBSCRIPT ZERO; zeroinferior
\DeclareTextCommand{\textzeroinferior}{PU}{\9040\200}%* U+2080
% U+2081 SUBSCRIPT ONE; oneinferior
\DeclareTextCommand{\textoneinferior}{PU}{\9040\201}%* U+2081
% U+2082 SUBSCRIPT TWO; twoinferior
\DeclareTextCommand{\texttwoinferior}{PU}{\9040\202}%* U+2082
% U+2083 SUBSCRIPT THREE; threeinferior
\DeclareTextCommand{\textthreeinferior}{PU}{\9040\203}%* U+2083
% U+2084 SUBSCRIPT FOUR; fourinferior
\DeclareTextCommand{\textfourinferior}{PU}{\9040\204}%* U+2084
% U+2085 SUBSCRIPT FIVE; fiveinferior
\DeclareTextCommand{\textfiveinferior}{PU}{\9040\205}%* U+2085
% U+2086 SUBSCRIPT SIX; sixinferior
\DeclareTextCommand{\textsixinferior}{PU}{\9040\206}%* U+2086
% U+2087 SUBSCRIPT SEVEN; seveninferior
\DeclareTextCommand{\textseveninferior}{PU}{\9040\207}%* U+2087
% U+2088 SUBSCRIPT EIGHT; eightinferior
\DeclareTextCommand{\texteightinferior}{PU}{\9040\210}%* U+2088
% U+2089 SUBSCRIPT NINE; nineinferior
\DeclareTextCommand{\textnineinferior}{PU}{\9040\211}%* U+2089
% U+208A SUBSCRIPT PLUS SIGN
\DeclareTextCommand{\textplusinferior}{PU}{\9040\212}%* U+208A
% U+208B SUBSCRIPT MINUS
\DeclareTextCommand{\textminusinferior}{PU}{\9040\213}%* U+208B
% U+208C SUBSCRIPT EQUALS SIGN
\DeclareTextCommand{\textequalsinferior}{PU}{\9040\214}%* U+208C
% U+208D SUBSCRIPT LEFT PARENTHESIS; parenleftinferior
\DeclareTextCommand{\textparenleftinferior}{PU}{\9040\215}%* U+208D
% U+208E SUBSCRIPT RIGHT PARENTHESIS; parenrightinferior
\DeclareTextCommand{\textparenrightinferior}{PU}{\9040\216}%* U+208E
% U+2090 LATIN SUBSCRIPT SMALL LETTER A
\DeclareTextCommand{\textainferior}{PU}{\9040\220}%* U+2090
% U+2091 LATIN SUBSCRIPT SMALL LETTER E
\DeclareTextCommand{\texteinferior}{PU}{\9040\221}%* U+2091
% U+2092 LATIN SUBSCRIPT SMALL LETTER O
\DeclareTextCommand{\textoinferior}{PU}{\9040\222}%* U+2092
% U+2093 LATIN SUBSCRIPT SMALL LETTER X
\DeclareTextCommand{\textxinferior}{PU}{\9040\223}%* U+2093
% U+2094 LATIN SUBSCRIPT SMALL LETTER SCHWA
\DeclareTextCommand{\textschwainferior}{PU}{\9040\224}%* U+2094
% U+2095 LATIN SUBSCRIPT SMALL LETTER H
\DeclareTextCommand{\texthinferior}{PU}{\9040\225}%* U+2095
% U+2096 LATIN SUBSCRIPT SMALL LETTER K
\DeclareTextCommand{\textkinferior}{PU}{\9040\226}%* U+2096
% U+2097 LATIN SUBSCRIPT SMALL LETTER L
\DeclareTextCommand{\textlinferior}{PU}{\9040\227}%* U+2097
% U+2098 LATIN SUBSCRIPT SMALL LETTER M
\DeclareTextCommand{\textminferior}{PU}{\9040\230}%* U+2098
% U+2099 LATIN SUBSCRIPT SMALL LETTER N
\DeclareTextCommand{\textninferior}{PU}{\9040\231}%* U+2099
% U+209A LATIN SUBSCRIPT SMALL LETTER P
\DeclareTextCommand{\textpinferior}{PU}{\9040\232}%* U+209A
% U+209B LATIN SUBSCRIPT SMALL LETTER S
\DeclareTextCommand{\textsinferior}{PU}{\9040\233}%* U+209B
% U+209C LATIN SUBSCRIPT SMALL LETTER T
\DeclareTextCommand{\texttinferior}{PU}{\9040\234}%* U+209C
%    \end{macrocode}
%
% \subsubsection{Currency Symbols: U+20A0 to U+20CF}
%
%    \begin{macrocode}
% U+20A1 COLON SIGN; *colonmonetary, colonsign
\DeclareTextCommand{\textcolonmonetary}{PU}{\9040\241}% U+20A1
% U+20A4 LIRA SIGN; afii08941, *lira
\DeclareTextCommand{\textlira}{PU}{\9040\244}% U+20A4
% U+20A6 NAIRA SIGN
\DeclareTextCommand{\textnaira}{PU}{\9040\246}% U+20A6
% U+20A7 PESETA SIGN; peseta
\DeclareTextCommand{\textpeseta}{PU}{\9040\247}% U+20A7
% U+20A9 WON SIGN; won
\DeclareTextCommand{\textwon}{PU}{\9040\251}% U+20A9
% U+20AB DONG SIGN; dong
\DeclareTextCommand{\textdong}{PU}{\9040\253}% U+20AB
% U+20AC EURO SIGN; *Euro, euro
\DeclareTextCommand{\texteuro}{PU}{\9040\254}% U+20AC
%* \texteuro -> \EurDig (marvosym)
%* \texteuro -> \EURdig (marvosym)
%* \texteuro -> \EurHv (marvosym)
%* \texteuro -> \EURhv (marvosym)
%* \texteuro -> \EurCr (marvosym)
%* \texteuro -> \EURcr (marvosym)
%* \texteuro -> \EurTm (marvosym)
%* \texteuro -> \EURtm (marvosym)
%* \texteuro -> \Eur (marvosym)
% U+20B0 GERMAN PENNY SIGN; \Deleatur (marvosym)
\DeclareTextCommand{\textDeleatur}{PU}{\9040\260}%* U+20B0
%* \textDeleatur -> \Denarius (marvosym)
% U+20B1 PESO SIGN
\DeclareTextCommand{\textpeso}{PU}{\9040\261}% U+20B1
% U+20B2 GUARANI SIGN
\DeclareTextCommand{\textguarani}{PU}{\9040\262}% U+20B2
%    \end{macrocode}
%
% \subsubsection{Letterlike Symbols: U+2100 to U+214F}
%
%    \begin{macrocode}
% U+2103 DEGREE CELSIUS; centigrade
\DeclareTextCommand{\textcelsius}{PU}{\9041\003}% U+2103
% U+210F PLANCK CONSTANT OVER TWO PI; \hslash (AmS)
\DeclareTextCommand{\texthslash}{PU}{\9041\017}%* U+210F
% U+2111 BLACK-LETTER CAPITAL I (=imaginary part); Ifraktur; \Im (LaTeX)
\DeclareTextCommand{\textIm}{PU}{\9041\021}%* U+2111
% U+2113 SCRIPT SMALL L (=ell, liter); afii61289, lsquare; \ell (LaTeX)
\DeclareTextCommand{\textell}{PU}{\9041\023}%* U+2113
% U+2116 NUMERO SIGN; *afii61352, numero
\DeclareTextCommand{\textnumero}{PU}{\9041\026}% U+2116
% U+2117 SOUND RECORDING COPYRIGHT
\DeclareTextCommand{\textcircledP}{PU}{\9041\027}% U+2117
% U+2118 SCRIPT CAPITAL P (=Weierstrass elliptic function);
%   weierstrass; \wp (LaTeX)
\DeclareTextCommand{\textwp}{PU}{\9041\030}%* U+2118
% U+211C BLACK-LETTER CAPITAL R (=real part); Rfraktur; \Re (LaTeX)
\DeclareTextCommand{\textRe}{PU}{\9041\034}%* U+211C
% U+211E PRESCRIPTION TAKE; prescription
\DeclareTextCommand{\textrecipe}{PU}{\9041\036}% U+211E
% U+2120 SERVICE MARK
\DeclareTextCommand{\textservicemark}{PU}{\9041\040}% U+2120
% U+2122 TRADE MARK SIGN; trademark
\DeclareTextCommand{\texttrademark}{PU}{\9041\042}% U+2122
% U+2126 OHM SIGN; Ohm, Omega
\DeclareTextCommand{\textohm}{PU}{\9041\046}% U+2126
% U+2127 INVERTED OHM SIGN
\DeclareTextCommand{\textmho}{PU}{\9041\047}%* U+2127
%* \textmho -> \agemO (wasysym)
% U+2129 TURNED GREEK SMALL LETTER IOTA; \riota (phonetic)
\DeclareTextCommand{\textriota}{PU}{\9041\051}%* U+2129
% U+212B ANGSTROM SIGN; angstrom
\DeclareTextCommand{\textangstrom}{PU}{\9041\053}% U+212B
% U+212E ESTIMATED SYMBOL; estimated
\DeclareTextCommand{\textestimated}{PU}{\9041\056}% U+212E
%* \textestimated -> \EstimatedSign (marvosym)
%* \textestimated -> \Ecommerce (marvosym)
% U+2132 TURNED CAPITAL F; \Finv (AmS)
\DeclareTextCommand{\textFinv}{PU}{\9041\062}%* U+2132
% U+2135 ALEF SYMBOL; aleph; \aleph (LaTeX)
\DeclareTextCommand{\textaleph}{PU}{\9041\065}%* U+2135
% U+2136 BET SYMBOL; \beth (AmS, MnSymbol)
\DeclareTextCommand{\textbeth}{PU}{\9041\066}%* U+2136
% U+2137 GIMEL SYMBOL; \gimel (AmS, MnSymbol)
\DeclareTextCommand{\textgimel}{PU}{\9041\067}%* U+2137
% U+2138 DALET SYMBOL; \daleth (AmS, MnSymbol)
\DeclareTextCommand{\textdaleth}{PU}{\9041\070}%* U+2138
% U+213B FACSIMILE SIGN; \fax (marvosym)
\DeclareTextCommand{\textfax}{PU}{\9041\073}%* U+213B
% U+2141 TURNED SANS-SERIF CAPITAL G (=game); \Game
\DeclareTextCommand{\textGame}{PU}{\9041\101}%* U+2141
% U+214B TURNED AMPERSAND; \invamp (txfonts/pxfonts)
\DeclareTextCommand{\textinvamp}{PU}{\9041\113}% U+214B
%* \textinvamp -> \bindnasrepma (stmaryrd)
%* \textinvamp -> \parr (cmll)
%    \end{macrocode}
%
% \subsubsection{Number Forms: U+2150 to U+218F}
%
%    \begin{macrocode}
% U+2150 VULGAR FRACTION ONE SEVENTH
\DeclareTextCommand{\textoneseventh}{PU}{\9041\120}% U+2150
% U+2151 VULGAR FRACTION ONE NINTH
\DeclareTextCommand{\textoneninth}{PU}{\9041\121}% U+2151
% U+2152 VULGAR FRACTION ONE TENTH
\DeclareTextCommand{\textonetenth}{PU}{\9041\122}% U+2152
% U+2153 VULGAR FRACTION ONE THIRD; onethird
\DeclareTextCommand{\textonethird}{PU}{\9041\123}% U+2153
% U+2154 VULGAR FRACTION TWO THIRDS; twothirds
\DeclareTextCommand{\texttwothirds}{PU}{\9041\124}% U+2154
% U+2155 VULGAR FRACTION ONE FIFTH
\DeclareTextCommand{\textonefifth}{PU}{\9041\125}% U+2155
% U+2156 VULGAR FRACTION TWO FIFTHS
\DeclareTextCommand{\texttwofifths}{PU}{\9041\126}% U+2156
% U+2157 VULGAR FRACTION THREE FIFTHS
\DeclareTextCommand{\textthreefifths}{PU}{\9041\127}% U+2157
% U+2158 VULGAR FRACTION FOUR FIFTHS
\DeclareTextCommand{\textfourfifths}{PU}{\9041\130}% U+2158
% U+2159 VULGAR FRACTION ONE SIXTH
\DeclareTextCommand{\textonesixth}{PU}{\9041\131}% U+2159
% U+215A VULGAR FRACTION FIVE SIXTHS
\DeclareTextCommand{\textfivesixths}{PU}{\9041\132}% U+215A
% U+215B VULGAR FRACTION ONE EIGHTH; oneeighth
\DeclareTextCommand{\textoneeighth}{PU}{\9041\133}% U+215B
% U+215C VULGAR FRACTION THREE EIGHTHS; threeeighths
\DeclareTextCommand{\textthreeeighths}{PU}{\9041\134}% U+215C
% U+215D VULGAR FRACTION FIVE EIGHTHS; fiveeighths
\DeclareTextCommand{\textfiveeighths}{PU}{\9041\135}% U+215D
% U+215E VULGAR FRACTION SEVEN EIGHTHS; seveneighths
\DeclareTextCommand{\textseveneighths}{PU}{\9041\136}% U+215E
% U+2184 LATIN SMALL LETTER REVERSED C
\DeclareTextCommand{\textrevc}{PU}{\9041\204}% U+2184
% U+2189 VULGAR FRACTION ZERO THIRDS
\DeclareTextCommand{\textzerothirds}{PU}{\9041\211}% U+2189
%    \end{macrocode}
%
% \subsubsection{Arrows: U+2190 to U+21FF}
%
%    \begin{macrocode}
% U+2190 LEFTWARDS ARROW; arrowleft
\DeclareTextCommand{\textleftarrow}{PU}{\9041\220}%* U+2190
% U+2191 UPWARDS ARROW; arrowup
\DeclareTextCommand{\textuparrow}{PU}{\9041\221}%* U+2191
% U+2192 RIGHTWARDS ARROW; arrowright
\DeclareTextCommand{\textrightarrow}{PU}{\9041\222}%* U+2192
%* \textrightarrow -> \MVRightArrow (marvosym)
%* \textrightarrow -> \MVRightarrow (marvosym)
% U+2193 DOWNWARDS ARROW; arrowdown
\DeclareTextCommand{\textdownarrow}{PU}{\9041\223}%* U+2193
%* \textdownarrow -> \MVArrowDown (marvosym)
%* \textdownarrow -> \Force (marvosym)
% U+2194 LEFT RIGHT ARROW; arrowboth; \leftrightarrow (LaTeX)
\DeclareTextCommand{\textleftrightarrow}{PU}{\9041\224}%* U+2194
% U+2195 UP DOWN ARROW; arrowupdn; \updownarrow (LaTeX)
\DeclareTextCommand{\textupdownarrow}{PU}{\9041\225}%* U+2195
% U+2196 NORTH WEST ARROW; arrowupleft; \nwarrow (LaTeX)
\DeclareTextCommand{\textnwarrow}{PU}{\9041\226}%* U+2196
% U+2197 NORTH EAST ARROW; arrowupright; \nearrow (LaTeX)
\DeclareTextCommand{\textnearrow}{PU}{\9041\227}%* U+2197
%* \textnearrow -> \textglobrise (tipa)
% U+2198 SOUTH EAST ARROW; arrowdownright; \searrow (LaTeX)
\DeclareTextCommand{\textsearrow}{PU}{\9041\230}%* U+2198
%* \textsearrow -> \textglobfall (tipa)
% U+2199 SOUTH WEST ARROW; arrowdownleft; \swarrow (LaTeX)
\DeclareTextCommand{\textswarrow}{PU}{\9041\231}%* U+2199
% U+219A LEFTWARDS ARROW WITH STROKE; \nleftarrow (AmS)
\DeclareTextCommand{\textnleftarrow}{PU}{\9041\232}%* U+219A
% U+219B RIGHTWARDS ARROW WITH STROKE; \nrightarrow (AmS)
\DeclareTextCommand{\textnrightarrow}{PU}{\9041\233}%* U+219B
% U+219E LEFTWARDS TWO HEADED ARROW; \twoheadleftarrow (AmS)
\DeclareTextCommand{\texttwoheadleftarrow}{PU}{\9041\236}%* U+219E
% \ntwoheadleftarrow (txfonts/pxfonts)
\DeclareTextCommand{\textntwoheadleftarrow}{PU}{\9041\236\83\070}%* U+219E U+0338
% U+219F UPWARDS TWO HEADED ARROW; \twoheaduparrow (MnSymbol)
\DeclareTextCommand{\texttwoheaduparrow}{PU}{\9041\237}%* U+219F
% U+21A0 RIGHTWARDS TWO HEADED ARROW;
%   \twoheadrightarrow (AmS)
\DeclareTextCommand{\texttwoheadrightarrow}{PU}{\9041\240}%* U+21A0
% \ntwoheadrightarrow (txfonts/pxfonts)
\DeclareTextCommand{\textntwoheadrightarrow}{PU}{\9041\240\83\070}%* U+21A0 U+0338
% U+21A1 DOWNWARDS TWO HEADED ARROW; \twoheaddownarrow (MnSymbol)
\DeclareTextCommand{\texttwoheaddownarrow}{PU}{\9041\241}%* U+21A1
% U+21A2 LEFTWARDS ARROW WITH TAIL; \leftarrowtail (AmS)
\DeclareTextCommand{\textleftarrowtail}{PU}{\9041\242}%* U+21A2
% U+21A3 RIGHTWARDS ARROW WITH TAIL; \rightarrowtail (AmS)
\DeclareTextCommand{\textrightarrowtail}{PU}{\9041\243}%* U+21A3
% U+21A6 RIGHTWARDS ARROW FROM BAR; \mapsto (LaTeX)
\DeclareTextCommand{\textmapsto}{PU}{\9041\246}%* U+21A6
% U+21A9 LEFTWARDS ARROW WITH HOOK; \hookleftarrow (LaTeX)
\DeclareTextCommand{\texthookleftarrow}{PU}{\9041\251}%* U+21A9
% U+21AA RIGHTWARDS ARROW WITH HOOK; \hookrightarrow (LaTeX)
\DeclareTextCommand{\texthookrightarrow}{PU}{\9041\252}%* U+21AA
% U+21AB LEFTWARDS ARROW WITH LOOP; \looparrowleft (AmS)
\DeclareTextCommand{\textlooparrowleft}{PU}{\9041\253}%* U+21AB
% U+21AC RIGHTWARDS ARROW WITH LOOP; \looparrowright (AmS)
\DeclareTextCommand{\textlooparrowright}{PU}{\9041\254}%* U+21AC
% U+21AE LEFT RIGHT ARROW WITH STROKE; \nleftrightarrow (AmS)
\DeclareTextCommand{\textnleftrightarrow}{PU}{\9041\256}%* U+21AE
% U+21AF DOWNWARDS ZIGZAG ARROW; \lightning (stmaryrd)
\DeclareTextCommand{\textlightning}{PU}{\9041\257}%* U+21AF
%* \textlightning -> \Lightning (marvosym)
% U+21B5 DOWNWARDS ARROW WITH CORNER LEFTWARDS;
%   \dlsh (mathabx)
\DeclareTextCommand{\textdlsh}{PU}{\9041\265}%* U+21B5
% U+21B6 ANTICLOCKWISE TOP SEMICIRCLE ARROW;
%   \curvearrowleft (AmS)
\DeclareTextCommand{\textcurvearrowleft}{PU}{\9041\266}%* U+21B6
% U+21B7 CLOCKWISE TOP SEMICIRCLE ARROW; \curvearrowright (AmS)
\DeclareTextCommand{\textcurvearrowright}{PU}{\9041\267}%* U+21B7
% U+21BC LEFTWARDS HARPOON WITH BARB UPWARDS; harpoonleftbarbup;
%   \leftharpoonup (LaTeX)
\DeclareTextCommand{\textleftharpoonup}{PU}{\9041\274}%* U+21BC
% U+21BD LEFTWARDS HARPOON WITH BARB DOWNWARDS;
%   \leftharpoondown (LaTeX)
\DeclareTextCommand{\textleftharpoondown}{PU}{\9041\275}%* U+21BD
% U+21BE UPWARDS HARPOON WITH BARB RIGHTWARDS;
%   \upharpoonright (AmS)
\DeclareTextCommand{\textupharpoonright}{PU}{\9041\276}%* U+21BE
% U+21BF UPWARDS HARPOON WITH BARB LEFTWARDS;
%   \upharpoonleft (AmS)
\DeclareTextCommand{\textupharpoonleft}{PU}{\9041\277}%* U+21BF
% U+21C0 RIGHTWARDS HARPOON WITH BARB UPWARDS; harpoonrightbarbup
%   \rightharpoonup (LaTeX)
\DeclareTextCommand{\textrightharpoonup}{PU}{\9041\300}%* U+21C0
% U+21C1 RIGHTWARDS HARPOON WITH BARB DOWNWARDS;
%   \rightharpoondown (LaTeX)
\DeclareTextCommand{\textrightharpoondown}{PU}{\9041\301}%* U+21C1
% U+21C2 DOWNWARDS HARPOON WITH BARB RIGHTWARDS;
%   \downharpoonright (AmS)
\DeclareTextCommand{\textdownharpoonright}{PU}{\9041\302}%* U+21C2
% U+21C3 DOWNWARDS HARPOON WITH BARB LEFTWARDS;
%   \downharpoonleft (AmS)
\DeclareTextCommand{\textdownharpoonleft}{PU}{\9041\303}%* U+21C3
% U+21C4 RIGHTWARDS ARROW OVER LEFTWARDS ARROW;
%   arrowrightoverleft; \rightleftarrows (MnSymbol)
\DeclareTextCommand{\textrightleftarrows}{PU}{\9041\304}%* U+21C4
% U+21C5 UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW; arrowupleftofdown;
%   \updownarrows (MnSymbol)
\DeclareTextCommand{\textupdownarrows}{PU}{\9041\305}%* U+21C5
% U+21C6 LEFTWARDS ARROW OVER RIGHTWARDS ARROW; arrowleftoverright;
%   \leftrightarrows (AmS)
\DeclareTextCommand{\textleftrightarrows}{PU}{\9041\306}%* U+21C6
% U+21C7 LEFTWARDS PAIRED ARROWS; \leftleftarrows (AmS)
\DeclareTextCommand{\textleftleftarrows}{PU}{\9041\307}%* U+21C7
% U+21C8 UPWARDS PAIRED ARROWS; \upuparrows (AmS)
\DeclareTextCommand{\textupuparrows}{PU}{\9041\310}%* U+21C8
% U+21C9 RIGHTWARDS PAIRED ARROWS; \rightrightarrows (AmS)
\DeclareTextCommand{\textrightrightarrows}{PU}{\9041\311}%* U+21C9
% U+21CA DOWNWARDS PAIRED ARROWS; \downdownarrows (AmS)
\DeclareTextCommand{\textdowndownarrows}{PU}{\9041\312}%* U+21CA
% U+21CB LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON;
%   \leftrightharpoons (AmS);
\DeclareTextCommand{\textleftrightharpoons}{PU}{\9041\313}%* U+21CB
% U+21CC RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON;
%   \rightleftharpoons (LaTeX, AmS)
\DeclareTextCommand{\textrightleftharpoons}{PU}{\9041\314}%* U+21CC
% U+21CD LEFTWARDS DOUBLE ARROW WITH STROKE; arrowleftdblstroke;
%   \nLeftarrow (AmS)
\DeclareTextCommand{\textnLeftarrow}{PU}{\9041\315}%* U+21CD
% U+21CE LEFT RIGHT DOUBLE ARROW WITH STROKE; \nLeftrightarrow (AmS)
\DeclareTextCommand{\textnLeftrightarrow}{PU}{\9041\316}%* U+21CE
% U+21CF RIGHTWARDS DOUBLE ARROW WITH STROKE; arrowrightdblstroke;
%  \nRightarrow (AmS)
\DeclareTextCommand{\textnRightarrow}{PU}{\9041\317}%* U+21CF
% U+21D0 LEFTWARDS DOUBLE ARROW; arrowdblleft, arrowleftdbl;
%   \Leftarrow (LaTeX)
\DeclareTextCommand{\textLeftarrow}{PU}{\9041\320}%* U+21D0
% U+21D1 UPWARDS DOUBLE ARROW; arrowdblup; \Uparrow (LaTeX)
\DeclareTextCommand{\textUparrow}{PU}{\9041\321}%* U+21D1
% U+21D2 RIGHTWARDS DOUBLE ARROW; arrowdblright, dblarrowright;
%   \Rightarrow (LaTeX)
\DeclareTextCommand{\textRightarrow}{PU}{\9041\322}%* U+21D2
%* \textRightarrow -> \Conclusion (marvosym)
% U+21D3 DOWNWARDS DOUBLE ARROW; arrowdbldown; \Downarrow (LaTeX)
\DeclareTextCommand{\textDownarrow}{PU}{\9041\323}%* U+21D3
% U+21D4 LEFT RIGHT DOUBLE ARROW; arrowdblboth;
%   \Leftrightarrow (LaTeX)
\DeclareTextCommand{\textLeftrightarrow}{PU}{\9041\324}%* U+21D4
%* textLeftrightarrow -> \Equivalence (marvosym)
% U+21D5 UP DOWN DOUBLE ARROW; \Updownarrow (LaTeX)
\DeclareTextCommand{\textUpdownarrow}{PU}{\9041\325}%* U+21D5
% U+21D6 NORTH WEST DOUBLE ARROW; \Nwarrow (MnSymbol)
\DeclareTextCommand{\textNwarrow}{PU}{\9041\326}%* U+21D6
% U+21D7 NORTH EAST DOUBLE ARROW; \Nearrow (MnSymbol)
\DeclareTextCommand{\textNearrow}{PU}{\9041\327}%* U+21D7
% U+21D8 SOUTH EAST DOUBLE ARROW; \Searrow (MnSymbol)
\DeclareTextCommand{\textSearrow}{PU}{\9041\330}%* U+21D8
% U+21D9 SOUTH WEST DOUBLE ARROW; \Swarrow (MnSymbol)
\DeclareTextCommand{\textSwarrow}{PU}{\9041\331}%* U+21D9
% U+21DA LEFTWARDS TRIPLE ARROW; \Lleftarrow (AmS)
\DeclareTextCommand{\textLleftarrow}{PU}{\9041\332}%* U+21DA
% U+21DB RIGHTWARDS TRIPLE ARROW; \Rrightarrow (MnSymbol)
\DeclareTextCommand{\textRrightarrow}{PU}{\9041\333}%* U+21DB
% U+21DC LEFTWARDS SQUIGGLE ARROW; \leftsquigarrow (mathabx)
\DeclareTextCommand{\textleftsquigarrow}{PU}{\9041\334}%* U+21DC
% U+21DD RIGHTWARDS SQUIGGLE ARROW; \rightsquigarrow (mathabx)
\DeclareTextCommand{\textrightsquigarrow}{PU}{\9041\335}%* U+21DD
% U+21E0 LEFTWARDS DASHED ARROW; arrowdashleft;
%   \dashleftarrow (AmS)
\DeclareTextCommand{\textdashleftarrow}{PU}{\9041\340}%* U+21E0
%* \textdashleftarrow -> \dashedleftarrow (MnSymbol)
% U+21E1 UPWARDS DASHED ARROW; arrowdashup; \dasheduparrow (MnSymbol)
\DeclareTextCommand{\textdasheduparrow}{PU}{\9041\341}%* U+21E1
% U+21E2 RIGHTWARDS DASHED ARROW; arrowdashright; \dashrightarrow (AmS)
\DeclareTextCommand{\textdashrightarrow}{PU}{\9041\342}%* U+21E2
%* \textdashrightarrow -> \dashedrightarrow (MnSymbol)
% U+21E3 DOWNWARDS DASHED ARROW; arrowdashdown; \dasheddownarrow (MnSymbol)
\DeclareTextCommand{\textdasheddownarrow}{PU}{\9041\343}%* U+21E3
% U+21E8 RIGHTWARDS WHITE ARROW; \pointer (wasysym)
\DeclareTextCommand{\textpointer}{PU}{\9041\350}%* U+21E8
% U+21F5 DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW;
%   \downuparrows (MnSymbol)
\DeclareTextCommand{\textdownuparrows}{PU}{\9041\365}%* U+21F5
% U+21FD LEFTWARDS OPEN-HEADED ARROW; \leftarrowtriangle (stmaryrd)
\DeclareTextCommand{\textleftarrowtriangle}{PU}{\9041\375}%* U+21FD
% U+21FE RIGHTWARDS OPEN-HEADED ARROW; \rightarrowtriangle (stmaryrd)
\DeclareTextCommand{\textrightarrowtriangle}{PU}{\9041\376}%* U+21FE
% U+21FF LEFT RIGHT OPEN-HEADED ARROW; \leftrightarrowtriangle (stmaryrd)
\DeclareTextCommand{\textleftrightarrowtriangle}{PU}{\9041\377}%* U+21FF
%    \end{macrocode}
%
% \subsubsection{Mathematical Operators: U+2200 to U+22FF}
%
%    \begin{macrocode}
% U+2200 FOR ALL; forall; \forall (LaTeX)
\DeclareTextCommand{\textforall}{PU}{\9042\000}%* U+2200
% U+2201 COMPLEMENT; \complement (AmS)
\DeclareTextCommand{\textcomplement}{PU}{\9042\001}%* U+2201
% U+2202 PARTIAL DIFFERENTIAL; partialdiff; \partial (LaTeX)
\DeclareTextCommand{\textpartial}{PU}{\9042\002}%* U+2202
% U+2203 THERE EXISTS; existential; \exists (LaTeX)
\DeclareTextCommand{\textexists}{PU}{\9042\003}%* U+2203
% U+2204 THERE DOES NOT EXIST; \nexists (AmS)
\DeclareTextCommand{\textnexists}{PU}{\9042\004}%* U+2204
% U+2205 EMPTY SET; emptyset; \emptyset (LaTeX), \varnothing (AmS)
\DeclareTextCommand{\textemptyset}{PU}{\9042\005}%* U+2205
%* \textemptyset -> \varnothing (AmS)
% U+2206 INCREMENT; increment, Deta; \triangle (LaTeX)
\DeclareTextCommand{\texttriangle}{PU}{\9042\006}%* U+2206
% U+2207 NABLA; nabla, gradient; \nabla (LaTeX)
\DeclareTextCommand{\textnabla}{PU}{\9042\007}%* U+2207
% U+2208 ELEMENT OF; element; \in (LaTeX)
\DeclareTextCommand{\textinsymbol}{PU}{\9042\010}%* U+2208
% U+2209 NOT AN ELEMENT OF; notelement, notelementof; \notin (LaTeX)
\DeclareTextCommand{\textnotin}{PU}{\9042\011}%* U+2209
% U+220A SMALL ELEMENT OF; \smallin (mathdesign)
\DeclareTextCommand{\textsmallin}{PU}{\9042\012}%* U+220A
% U+220B CONTAINS AS MEMBER; suchthat; \ni (LaTeX)
\DeclareTextCommand{\textni}{PU}{\9042\013}%* U+220B
%* \textni -> \owns (mathabx)
% U+220C DOES NOT CONTAIN AS MEMBER; \notowner (mathabx)
\DeclareTextCommand{\textnotowner}{PU}{\9042\014}%* U+220C
%* \textnotowner -> \notni (txfonts/pxfonts)
% U+220D SMALL CONTAINS AS MEMBER; \smallowns (mathdesign)
\DeclareTextCommand{\textsmallowns}{PU}{\9042\015}%* U+220D
% U+220F N-ARY PRODUCT; \prod (LaTeX)
\DeclareTextCommand{\textprod}{PU}{\9042\017}%* U+220F
% U+2210 N-ARY COPRODUCT; \amalg (LaTeX)
\DeclareTextCommand{\textamalg}{PU}{\9042\020}%* U+2210
% U+2211 N-ARY SUMMATION; summation; \sum (LaTeX)
\DeclareTextCommand{\textsum}{PU}{\9042\021}%* U+2211
% U+2212 MINUS SIGN; minus
\DeclareTextCommand{\textminus}{PU}{\9042\022}% U+2212
% U+2213 MINUS-OR-PLUS SIGN; minusplus; \mp (LaTeX)
\DeclareTextCommand{\textmp}{PU}{\9042\023}%* U+2213
% U+2214 DOT PLUS; \dotplus (AmS)
\DeclareTextCommand{\textdotplus}{PU}{\9042\024}%* U+2214
% U+2215 DIVISION SLASH; divisionslash; \Divides (marvosym)
\DeclareTextCommand{\textDivides}{PU}{\9042\025}%* U+2215
% \DividesNot (marvosym)
\DeclareTextCommand{\textDividesNot}{PU}{\9042\025\9040\322}%* U+2215 U+20D2
% U+2216 SET MINUS; \setminus (LaTeX)
\DeclareTextCommand{\textsetminus}{PU}{\9042\026}%* U+2216
% U+2217 ASTERISK OPERATOR; asteriskmath; \ast (LaTeX)
\DeclareTextCommand{\textast}{PU}{\9042\027}%* U+2217
% U+2218 RING OPERATOR; \circ (LaTeX)
\DeclareTextCommand{\textcirc}{PU}{\9042\030}%* U+2218
% U+2219 BULLET OPERATOR; bulletoperator; \bullet (LaTeX)
\DeclareTextCommand{\textbulletoperator}{PU}{\9042\031}% U+2219
% U+221A SQUARE ROOT; radical
\DeclareTextCommand{\textsurd}{PU}{\9042\032}%* U+221A
% U+221D PROPORTIONAL TO; proportional; \propto (LaTeX)
\DeclareTextCommand{\textpropto}{PU}{\9042\035}%* U+221D
%* \textpropto -> \varprop (wasysym)
% U+221E INFINITY; infinity; \infty (LaTeX)
\DeclareTextCommand{\textinfty}{PU}{\9042\036}%* U+221E
% U+2220 ANGLE; angle; \angle (LaTeX)
\DeclareTextCommand{\textangle}{PU}{\9042\040}%* U+2220
% U+2221 MEASURED ANGLE; \measuredangle (mathabx, MnSymbol)
\DeclareTextCommand{\textmeasuredangle}{PU}{\9042\041}%* U+2221
% U+2222 SPHERICAL ANGLE; \sphericalangle (AmS)
\DeclareTextCommand{\textsphericalangle}{PU}{\9042\042}%* U+2222
%* \textsphericalangle -> \varangle (wasysym)
%* \textsphericalangle -> \Anglesign (marvosym)
%* \textsphericalangle -> \AngleSign (marvosym)
% U+2223 DIVIDES; divides; \mid (LaTeX)
\DeclareTextCommand{\textmid}{PU}{\9042\043}%* U+2223
% U+2224 DOES NOT DIVIDE; \nmid (AmS)
\DeclareTextCommand{\textnmid}{PU}{\9042\044}%* U+2224
%* \textnmid -> \notdivides (mathabx)
% U+2225 PARALLEL TO; parallel; \parallel (LaTeX)
\DeclareTextCommand{\textparallel}{PU}{\9042\045}%* U+2225
% U+2226 NOT PARALLEL TO; notparallel; \nparallel (AmS)
\DeclareTextCommand{\textnparallel}{PU}{\9042\046}%* U+2226
%* \textnparallel -> nUpdownline (MnSymbol)
% U+2227 LOGICAL AND; logicaland; \wedge (LaTeX)
\DeclareTextCommand{\textwedge}{PU}{\9042\047}%* U+2227
% \owedge (stmaryrd)
\DeclareTextCommand{\textowedge}{PU}{\9042\047\9040\335}%* U+2227 U+20DD
%* \textowedge -> \varowedge (stmaryrd)
% U+2228 LOGICAL OR; logicalor; \vee (LaTeX)
\DeclareTextCommand{\textvee}{PU}{\9042\050}%* U+2228
% \ovee (stmaryrd)
\DeclareTextCommand{\textovee}{PU}{\9042\050\9040\335}%* U+2228 U+20DD
%* \textovee -> \varovee (stmaryrd)
% U+2229 INTERSECTION; intersection; \cap (LaTeX)
\DeclareTextCommand{\textcap}{PU}{\9042\051}%* U+2229
% U+222A UNION; union; \cup (LaTeX)
\DeclareTextCommand{\textcup}{PU}{\9042\052}%* U+222A
% U+222B INTEGRAL; integral; \int (LaTeX)
\DeclareTextCommand{\textint}{PU}{\9042\053}%* U+222B
%* \textint -> \varint (wasysym)
% U+222C DOUBLE INTEGRAL; dblintegral; \iint (AmS)
\DeclareTextCommand{\textiint}{PU}{\9042\054}%* U+222C
% U+222D TRIPLE INTEGRAL; \iiint (AmS)
\DeclareTextCommand{\textiiint}{PU}{\9042\055}%* U+222D
% U+222E CONTOUR INTEGRAL; contourintegral; \oint (LaTeX)
\DeclareTextCommand{\textoint}{PU}{\9042\056}%* U+222E
%* \textoint -> \varoint (wasysym)
% U+222F SURFACE INTEGRAL; \oiint (wasysym)
\DeclareTextCommand{\textoiint}{PU}{\9042\057}%* U+222F
% U+2232 CLOCKWISE CONTOUR INTEGRAL;
%   \ointclockwise (txfonts/pxfonts)
\DeclareTextCommand{\textointclockwise}{PU}{\9042\062}%* U+2232
% U+2233 ANTICLOCKWISE CONTOUR INTEGRAL; \ointctrclockwise (txfonts/pxfonts)
\DeclareTextCommand{\textointctrclockwise}{PU}{\9042\063}%* U+2233
% U+2234 THEREFORE; therefore; \therefore (AmS)
\DeclareTextCommand{\texttherefore}{PU}{\9042\064}%* U+2234
%* \texttherefore -> uptherefore (MnSymbol)
% U+2235 BECAUSE; because; \because (AmS)
\DeclareTextCommand{\textbecause}{PU}{\9042\065}%* U+2235
%* \textbecause -> \downtherefore (MnSymbol)
% U+2236 RATIO; \vdotdot (MnSymbol)
\DeclareTextCommand{\textvdotdot}{PU}{\9042\066}%* U+2236
% U+2237 PROPORTION; \squaredots (MnSymbol)
\DeclareTextCommand{\textsquaredots}{PU}{\9042\067}%* U+2237
% U+2238 DOT MINUS; \dotminus (MnSymbol)
\DeclareTextCommand{\textdotminus}{PU}{\9042\070}%* U+2238
%* \textdotminus -> \textdotdiv (mathabx)
% U+2239 EXCESS; \eqcolon (txfonts/pxfonts)
\DeclareTextCommand{\texteqcolon}{PU}{\9042\071}%* U+2239
% U+223C TILDE OPERATOR; similar; \sim (LaTeX)
\DeclareTextCommand{\textsim}{PU}{\9042\074}%* U+223C
%* \textsim -> \AC (wasysym)
% U+223D REVERSED TILDE; reversedtilde; \backsim (AmS)
\DeclareTextCommand{\textbacksim}{PU}{\9042\075}%* U+223D
% \nbacksim (txfonts/pxfonts)
\DeclareTextCommand{\textnbacksim}{PU}{\9042\075\83\070}%* U+223D U+0338
% U+2240 WREATH PRODUCT; \wr (LaTeX)
\DeclareTextCommand{\textwr}{PU}{\9042\100}%* U+2240
%* \textwr -> \wreath (MnSymbol)
% U+2241 NOT TILDE; \nsim (AmS)
\DeclareTextCommand{\textnsim}{PU}{\9042\101}%* U+2241
% U+2242 MINUS TILDE; \eqsim (MnSymbol)
\DeclareTextCommand{\texteqsim}{PU}{\9042\102}%* U+2242
% \neqsim (MnSymbol)
\DeclareTextCommand{\textneqsim}{PU}{\9042\102\83\070}%* U+2242 U+0338
% U+2243 ASYMPTOTICALLY EQUAL TO; asymptoticallyequal; \simeq (LaTeX)
\DeclareTextCommand{\textsimeq}{PU}{\9042\103}%* U+2243
% U+2244 NOT ASYMPTOTICALLY EQUAL TO; \nsimeq (txfonts/pxfonts)
\DeclareTextCommand{\textnsimeq}{PU}{\9042\104}%* U+2244
% U+2245 APPROXIMATELY EQUAL TO; approximatelyequal; \cong (LaTeX)
\DeclareTextCommand{\textcong}{PU}{\9042\105}%* U+2245
% U+2247 NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO;
%   \ncong (AmS)
\DeclareTextCommand{\textncong}{PU}{\9042\107}%* U+2247
% U+2248 ALMOST EQUAL TO; approxequal; \approx (LaTeX)
\DeclareTextCommand{\textapprox}{PU}{\9042\110}%* U+2248
% U+2249 NOT ALMOST EQUAL TO; \napprox (txfonts/pxfonts0
\DeclareTextCommand{\textnapprox}{PU}{\9042\111}%* U+2249
%* \textnapprox -> \nthickapprox (txfonts/pxfonts)
% U+224A ALMOST EQUAL OR EQUAL TO; \approxeq (AmS)
\DeclareTextCommand{\textapproxeq}{PU}{\9042\112}%* U+224A
% \napproxeq (txfonts/pxfonts)
\DeclareTextCommand{\textnapproxeq}{PU}{\9042\112\83\070}%* U+224A U+0338
% U+224B TRIPLE TILDE; \triplesim (MnSymbol)
\DeclareTextCommand{\texttriplesim}{PU}{\9042\113}%* U+224B
%* \texttriplesim -> \VHF (wasysym)
% \ntriplesim (MnSymbol)
\DeclareTextCommand{\textntriplesim}{PU}{\9042\113\83\070}%* U+224B U+0338
% U+224C ALL EQUAL TO; allequal; \backcong (MnSymbol)
\DeclareTextCommand{\textbackcong}{PU}{\9042\114}%* U+224C
% \nbackcong (MnSymbol)
\DeclareTextCommand{\textnbackcong}{PU}{\9042\114\83\070}%* U+224C U+0338
% U+224D EQUIVALENT TO; \asymp (LaTeX)
\DeclareTextCommand{\textasymp}{PU}{\9042\115}%* U+224D
% \nasymp (txfonts/pxfonts)
\DeclareTextCommand{\textnasymp}{PU}{\9042\115\83\070}%* U+224D U+0338
%* \textnasymp -> \notasymp (mathabx)
% U+224E GEOMETRICALLY EQUIVALENT TO; \Bumpeq (AmS)
\DeclareTextCommand{\textBumpeq}{PU}{\9042\116}%* U+224E
% \nBumpeq (txfonts/pxfonts)
\DeclareTextCommand{\textnBumpeq}{PU}{\9042\116\83\070}%* U+224E U+0338
% U+224F DIFFERENCE BETWEEN; \bumpeq (AmS)
\DeclareTextCommand{\textbumpeq}{PU}{\9042\117}%* U+224F
% \nbumpeq (txfonts/pxfonts)
\DeclareTextCommand{\textnbumpeq}{PU}{\9042\117\83\070}%* U+224F U+0338
% U+2250 APPROACHES THE LIMIT; approaches; \doteq (LaTeX)
\DeclareTextCommand{\textdoteq}{PU}{\9042\120}%* U+2250
% \ndoteq (MnSymbol)
\DeclareTextCommand{\textndoteq}{PU}{\9042\120\83\070}%* U+2250 U+0338
% U+2251 GEOMETRICALLY EQUAL TO; geometricallyequal;
%   \doteqdot (AmS)
\DeclareTextCommand{\textdoteqdot}{PU}{\9042\121}%* U+2251
%* \textdoteqdot -> \Doteq (MnSymbol)
% \nDoteq (MnSymbol)
\DeclareTextCommand{\textnDoteq}{PU}{\9042\121\83\070}%* U+2251 U+0338
% U+2252 APPROXIMATELY EQUAL TO OR THE IMAGE OF; approxequalorimage;
%   \fallingdotseq (AmS)
\DeclareTextCommand{\textfallingdoteq}{PU}{\9042\122}%* U+2252
% \nfallingdotseq (MnSymbol)
\DeclareTextCommand{\textnfallingdoteq}{PU}{\9042\122\83\070}%* U+2252 U+0338
% U+2253 IMAGE OF OR APPROXIMATELY EQUAL TO; imageorapproximatelyequal;
%   \risingdotseq (AmS)
\DeclareTextCommand{\textrisingdoteq}{PU}{\9042\123}%* U+2253
% \nrisingdoteq (MnSymbol)
\DeclareTextCommand{\textnrisingdoteq}{PU}{\9042\123\83\070}%* U+2253 U+0338
% U+2254 COLON EQUALS; \colonequals (colonequals)
\DeclareTextCommand{\textcolonequals}{PU}{\9042\124}%* U+2254
% U+2255 EQUALS COLON; \equalscolon (colonequals)
\DeclareTextCommand{\textequalscolon}{PU}{\9042\125}%* U+2255
% U+2256 RING IN EQUAL TO; \eqcirc (AmS)
\DeclareTextCommand{\texteqcirc}{PU}{\9042\126}%* U+2256
% \neqcirc (MnSymbol)
\DeclareTextCommand{\textneqcirc}{PU}{\9042\126\83\070}%* U+2256 U+0338
% U+2257 RING EQUAL TO; \circeq (AmS)
\DeclareTextCommand{\textcirceq}{PU}{\9042\127}%* U+2257
% \ncirceq (MnSymbol)
\DeclareTextCommand{\textncirceq}{PU}{\9042\127\83\070}%* U+2257 U+0338
% U+2259 ESTIMATES; \hateq (MnSymbol)
\DeclareTextCommand{\texthateq}{PU}{\9042\131}%* U+2259
%* \texthateq -> \corresponds (mathabx)
%* \texthateq -> \Corresponds (marvosym)
% \nhateq (MnSymbol)
\DeclareTextCommand{\textnhateq}{PU}{\9042\131\83\070}%* U+2259 U+0338
% U+225C DELTA EQUAL TO; \triangleeq (AmS)
\DeclareTextCommand{\texttriangleeq}{PU}{\9042\134}%* U+225C
% U+2260 NOT EQUAL TO; notequal; \ne (LaTeX), \neq (LaTeX)
\DeclareTextCommand{\textneq}{PU}{\9042\140}%* U+2260
\DeclareTextCommand{\textne}{PU}{\9042\140}%* U+2260
%* \textneq -> \nequal (MnSymbol)
% U+2261 IDENTICAL TO; equivalence; \equiv (LaTeX)
\DeclareTextCommand{\textequiv}{PU}{\9042\141}%* U+2261
%* \textequiv -> \Congruent (marvosym)
% U+2262 NOT IDENTICAL TO; notidentical; \nequiv (txfonts/pxfonts)
\DeclareTextCommand{\textnequiv}{PU}{\9042\142}%* U+2262
%* \textnequiv -> \NotCongruent (marvosym)
%* \textnequiv -> \notequiv (mathabx)
% U+2264 LESS-THAN OR EQUAL TO; lessequal; \le (LaTeX), \leq (LaTeX)
\DeclareTextCommand{\textleq}{PU}{\9042\144}%* U+2264
\DeclareTextCommand{\textle}{PU}{\9042\144}%* U+2264
%* \textleq -> \LessOrEqual (marvosym)
% U+2265 GREATER-THAN OR EQUAL TO; greaterequal;
%   \ge (LaTeX), \geq (LaTeX)
\DeclareTextCommand{\textgeq}{PU}{\9042\145}%* U+2265
\DeclareTextCommand{\textge}{PU}{\9042\145}%* U+2265
%* \textgeq -> \LargerOrEqual (marvosym)
% U+2266 LESS-THAN OVER EQUAL TO; lessoverequal; \leqq (AmS)
\DeclareTextCommand{\textleqq}{PU}{\9042\146}%* U+2266
% \nleqq (txfonts/pxfonts)
\DeclareTextCommand{\textnleqq}{PU}{\9042\146\83\070}%* U+2266 U+0338
% U+2267 GREATER-THAN OVER EQUAL TO; greateroverequal; \geqq (AmS)
\DeclareTextCommand{\textgeqq}{PU}{\9042\147}%* U+2267
% \ngeqq (txfonts/pxfonts)
\DeclareTextCommand{\textngeqq}{PU}{\9042\147\83\070}%* U+2267 U+0338
% U+2268 LESS-THAN BUT NOT EQUAL TO; \lneqq (AmS)
\DeclareTextCommand{\textlneqq}{PU}{\9042\150}%* U+2268
% U+2269 GREATER-THAN BUT NOT EQUAL TO; \gneqq (AmS)
\DeclareTextCommand{\textgneqq}{PU}{\9042\151}%* U+2269
% U+226A MUCH LESS-THAN; muchless; \ll (LaTeX)
\DeclareTextCommand{\textll}{PU}{\9042\152}%* U+226A
% \nll (txfonts/pxfonts)
\DeclareTextCommand{\textnll}{PU}{\9042\152\83\070}%* U+226A U+0338
% U+226B MUCH GREATER-THAN; muchgreater; \gg (LaTeX)
\DeclareTextCommand{\textgg}{PU}{\9042\153}%* U+226B
% \ngg (txfonts/pxfonts)
\DeclareTextCommand{\textngg}{PU}{\9042\153\83\070}%* U+226B U+0338
% U+226C BETWEEN; \between (AmS)
\DeclareTextCommand{\textbetween}{PU}{\9042\154}%* U+226C
% U+226E NOT LESS-THAN; notless; \nless (AmS)
\DeclareTextCommand{\textnless}{PU}{\9042\156}%* U+226E
% U+226F NOT GREATER-THAN; notgreater; \ngtr (AmS)
\DeclareTextCommand{\textngtr}{PU}{\9042\157}%* U+226F
% U+2270 NEITHER LESS-THAN NOR EQUAL TO; notlessnorequal;
%   \nleq (AmS)
\DeclareTextCommand{\textnleq}{PU}{\9042\160}%* U+2270
% U+2271 NEITHER GREATER-THAN NOR EQUAL TO; notgreaternorequal; \ngeq (AmS)
\DeclareTextCommand{\textngeq}{PU}{\9042\161}%* U+2271
% U+2272 LESS-THAN OR EQUIVALENT TO; lessorequivalent; \lesssim (AmS)
\DeclareTextCommand{\textlesssim}{PU}{\9042\162}%* U+2272
%* \textlesssim -> \apprle (wasysym)
% U+2273 GREATER-THAN OR EQUIVALENT TO; greaterorequivalent; \gtrsim (AmS)
\DeclareTextCommand{\textgtrsim}{PU}{\9042\163}%* U+2273
%* \textgtrsim -> \apprge (wasysym)
% U+2274 NEITHER LESS-THAN NOR EQUIVALENT TO; \nlesssim (txfonts/pxfonts)
\DeclareTextCommand{\textnlesssim}{PU}{\9042\164}%* U+2274
% U+2275 NEITHER GREATER-THAN NOR EQUIVALENT TO; \ngtrsim (txfonts/pxfonts)
\DeclareTextCommand{\textngtrsim}{PU}{\9042\165}%* U+2275
% U+2276 LESS-THAN OR GREATER-THAN; lessorgreater; \lessgtr (AmS)
\DeclareTextCommand{\textlessgtr}{PU}{\9042\166}%* U+2276
% U+2277 GREATER-THAN OR LESS-THAN; greaterorless; \gtrless (AmS)
\DeclareTextCommand{\textgtrless}{PU}{\9042\167}%* U+2277
% U+2278 NEITHER LESS-THAN NOR GREATER-THAN; \ngtrless (txfonts/pxfonts)
\DeclareTextCommand{\textngtrless}{PU}{\9042\170}%* U+2278
% U+2279 NEITHER GREATER-THAN NOR LESS-THAN; \nlessgtr (txfonts/pxfonts)
\DeclareTextCommand{\textnlessgtr}{PU}{\9042\171}%* U+2279
% U+227A PRECEDES; precedes; \prec (LaTeX)
\DeclareTextCommand{\textprec}{PU}{\9042\172}%* U+227A
% U+227B SUCCEEDS; succeeds; \succ (LaTeX)
\DeclareTextCommand{\textsucc}{PU}{\9042\173}%* U+227B
% U+227C PRECEDES OR EQUAL TO; \preccurlyeq (AmS)
\DeclareTextCommand{\textpreccurlyeq}{PU}{\9042\174}%* U+227C
% U+227D SUCCEEDS OR EQUAL TO; \succcurlyeq (AmS)
\DeclareTextCommand{\textsucccurlyeq}{PU}{\9042\175}%* U+227D
% U+227E PRECEDES OR EQUIVALENT TO; \precsim (AmS)
\DeclareTextCommand{\textprecsim}{PU}{\9042\176}%* U+227E
% \nprecsim (txfonts/pxfonts)
\DeclareTextCommand{\textnprecsim}{PU}{\9042\176\83\070}%* U+227E U+0338
% U+227F SUCCEEDS OR EQUIVALENT TO; \succsim (AmS)
\DeclareTextCommand{\textsuccsim}{PU}{\9042\177}%* U+227F
% \nsuccsim (txfonts/pxfonts)
\DeclareTextCommand{\textnsuccsim}{PU}{\9042\177\83\070}%* U+227F U+0338
% U+2280 DOES NOT PRECEDE; notprecedes; \nprec (AmS)
\DeclareTextCommand{\textnprec}{PU}{\9042\200}%* U+2280
% U+2281 DOES NOT SUCCEED; notsucceeds; \nsucc (AmS)
\DeclareTextCommand{\textnsucc}{PU}{\9042\201}%* U+2281
% U+2282 SUBSET OF; propersubset; \subset (LaTeX)
\DeclareTextCommand{\textsubset}{PU}{\9042\202}%* U+2282
% U+2283 SUPERSET OF; propersuperset; \supset (LaTeX)
\DeclareTextCommand{\textsupset}{PU}{\9042\203}%* U+2283
% U+2284 NOT A SUBSET OF; notsubset; \nsubset (mathabx)
\DeclareTextCommand{\textnsubset}{PU}{\9042\204}%* U+2284
% U+2285 NOT A SUPERSET OF; notsuperset; \nsupset (mathabx)
\DeclareTextCommand{\textnsupset}{PU}{\9042\205}%* U+2285
% U+2286 SUBSET OF OR EQUAL TO; reflexsubset; \subseteq (LaTeX)
\DeclareTextCommand{\textsubseteq}{PU}{\9042\206}%* U+2286
% U+2287 SUPERSET OF OR EQUAL TO; reflexsuperset; \supseteq (LaTeX)
\DeclareTextCommand{\textsupseteq}{PU}{\9042\207}%* U+2287
% U+2288 NEITHER A SUBSET OF NOR EQUAL TO; \nsubseteq (AmS)
\DeclareTextCommand{\textnsubseteq}{PU}{\9042\210}%* U+2288
% U+2289 NEITHER A SUPERSET OF NOR EQUAL TO; \nsupseteq (AmS)
\DeclareTextCommand{\textnsupseteq}{PU}{\9042\211}%* U+2289
% U+228A SUBSET OF WITH NOT EQUAL TO; subsetnotequal; \subsetneq (AmS)
\DeclareTextCommand{\textsubsetneq}{PU}{\9042\212}%* U+228A
% U+228B SUPERSET OF WITH NOT EQUAL TO; supersetnotequal; \supsetneq (AmS)
\DeclareTextCommand{\textsupsetneq}{PU}{\9042\213}%* U+228B
% U+228D MULTISET MULTIPLICATION; \cupdot (MnSymbol)
\DeclareTextCommand{\textcupdot}{PU}{\9042\215}%* U+228D
% U+228E MULTISET UNION; \cupplus (MnSymbol)
\DeclareTextCommand{\textcupplus}{PU}{\9042\216}%* U+228E
% U+228F SQUARE IMAGE OF; \sqsubset (latexsym, ...)
\DeclareTextCommand{\textsqsubset}{PU}{\9042\217}%* U+228F
% \nsqsubset (txfonts/pxfonts)
\DeclareTextCommand{\textnsqsubset}{PU}{\9042\217\83\070}%* U+228F U+0338
% U+2290 SQUARE ORIGINAL OF; \sqsupset (latexsym, ...)
\DeclareTextCommand{\textsqsupset}{PU}{\9042\220}%* U+2290
% \nsqsupset (txfonts/pxfonts)
\DeclareTextCommand{\textnsqsupset}{PU}{\9042\220\83\070}%* U+2290 U+0338
% U+2291 SQUARE IMAGE OF OR EQUAL TO; \sqsubseteq (LaTeX)
\DeclareTextCommand{\textsqsubseteq}{PU}{\9042\221}%* U+2291
% \nsqsubseteq (txfonts/pxfonts)
\DeclareTextCommand{\textnsqsubseteq}{PU}{\9042\221\83\070}%* U+2291 U+0338
% U+2292 SQUARE ORIGINAL OF OR EQUAL TO; \sqsupseteq (LaTeX)
\DeclareTextCommand{\textsqsupseteq}{PU}{\9042\222}%* U+2292
% \nsqsupseteq (txfonts/pxfonts)
\DeclareTextCommand{\textnsqsupseteq}{PU}{\9042\222\83\070}%* U+2292 U+0338
% U+2293 SQUARE CAP; \sqcap (LaTeX)
\DeclareTextCommand{\textsqcap}{PU}{\9042\223}%* U+2293
% U+2294 SQUARE CUP; \sqcup (LaTeX)
\DeclareTextCommand{\textsqcup}{PU}{\9042\224}%* U+2294
% U+2295 CIRCLED PLUS; circleplus; \oplus (LaTeX)
\DeclareTextCommand{\textoplus}{PU}{\9042\225}%* U+2295
%* \textoplus -> \varoplus (stmaryrd)
% U+2296 CIRCLED MINUS; minuscircle; \ominus (LaTeX)
\DeclareTextCommand{\textominus}{PU}{\9042\226}%* U+2296
%* \textominus -> \varominus (stmaryrd)
% U+2297 CIRCLED TIMES; circlemultiply; \otimes (LaTeX)
\DeclareTextCommand{\textotimes}{PU}{\9042\227}%* U+2297
%* \textotimes -> \varotimes (stmaryrd)
% U+2298 CIRCLED DIVISION SLASH; \oslash (LaTeX)
\DeclareTextCommand{\textoslash}{PU}{\9042\230}%* U+2298
%* \textoslash -> \varoslash (stmaryrd)
% U+2299 CIRCLED DOT OPERATOR; circle(d?)ot; \odot (LaTeX)
\DeclareTextCommand{\textodot}{PU}{\9042\231}%* U+2299
%* \textodot -> \varodot (stmaryrd)
% U+229A CIRCLED RING OPERATOR; \circledcirc (AmS)
\DeclareTextCommand{\textcircledcirc}{PU}{\9042\232}%* U+229A
%* \textcircledcirc -> \ocirc (mathabx)
%* \textcircledcirc -> \varocircle (stmaryrd)
% U+229B CIRCLED ASTERISK OPERATOR; \circledast (AmS)
\DeclareTextCommand{\textcircledast}{PU}{\9042\233}%* U+229B
%* \textcircledast -> \varoast (stmaryrd)
%* \textcircledast -> \oasterisk (mathabx)
% U+229D CIRCLED DASH; \circleddash (AmS)
\DeclareTextCommand{\textcircleddash}{PU}{\9042\235}%* U+229D
% U+229E SQUARED PLUS; \boxplus (AmS)
\DeclareTextCommand{\textboxplus}{PU}{\9042\236}%* U+229E
% U+229F SQUARED MINUS; \boxminus (AmS)
\DeclareTextCommand{\textboxminus}{PU}{\9042\237}%* U+229F
% U+22A0 SQUARED TIMES; \boxtimes (AmS)
\DeclareTextCommand{\textboxtimes}{PU}{\9042\240}%* U+22A0
% U+22A1 SQUARED DOT OPERATOR; \boxdot (AmS)
\DeclareTextCommand{\textboxdot}{PU}{\9042\241}%* U+22A1
% U+22A2 RIGHT TACK; \vdash (LaTeX)
\DeclareTextCommand{\textvdash}{PU}{\9042\242}%* U+22A2
%* \textvdash -> \rightvdash (MnSymbol)
% U+22A3 LEFT TACK; tackleft; \dashv (LaTeX)
\DeclareTextCommand{\textdashv}{PU}{\9042\243}%* U+22A3
%* \textdashv -> \leftvdash (MnSymbol)
% \ndashv (mathabx)
\DeclareTextCommand{\textndashv}{PU}{\9042\243\83\070}%* U+22A3 U+0338
%* \textndashv -> \nleftvdash (MnSymbol)
% U+22A4 DOWN TACK (=top); tackdown; \top (LaTeX)
\DeclareTextCommand{\texttop}{PU}{\9042\244}%* U+22A4
%* \texttop -> \downvdash (MnSymbol)
% \ndownvdash (MnSymbol)
\DeclareTextCommand{\textndownvdash}{PU}{\9042\244\83\070}%* U+22A4 U+0338
% U+22A5 UP TACK (=base, bottom); \bot (LaTeX)
\DeclareTextCommand{\textbot}{PU}{\9042\245}%* U+22A5
%* \textbot -> \upvdash (MnSymbol)
% \nupvdash (MnSymbol)
\DeclareTextCommand{\textnupvdash}{PU}{\9042\245\83\070}%* U+22A5 U+0338
%* \textnupvdash -> \nperp (MnSymbol)
% U+22A8 TRUE; \vDash (AmS)
\DeclareTextCommand{\textvDash}{PU}{\9042\250}%* U+22A8
%* \textvDash -> \models (LaTeX)
%* \textvDash -> \rightmodels (MnSymbol)
% U+22A9 FORCES; \Vdash (AmS)
\DeclareTextCommand{\textVdash}{PU}{\9042\251}%* U+22A9
%* \textVdash -> \rightVdash (MnSymbol)
% U+22AA TRIPLE VERTICAL BAR RIGHT TURNSTILE; \Vvdash (AmS)
\DeclareTextCommand{\textVvdash}{PU}{\9042\252}%* U+22AA
% \nVvash (mathabx)
\DeclareTextCommand{\textnVvash}{PU}{\9042\252\83\070}%* U+22AA U+0338
% U+22AB DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE;
%   \VDash (mathabx)
\DeclareTextCommand{\textVDash}{PU}{\9042\253}%* U+22AB
%* \textVDash -> \rightModels (MnSymbol)
% U+22AC DOES NOT PROVE; \nvdash (AmS)
\DeclareTextCommand{\textnvdash}{PU}{\9042\254}%* U+22AC
%* \textnvdash -> \nrightvdash (MnSymbol)
% U+22AD NOT TRUE; \nvDash (AmS)
\DeclareTextCommand{\textnvDash}{PU}{\9042\255}%* U+22AD
%* \textnvDash -> \nrightmodels (MnSymbol)
%* \textnvDash -> \nmodels (MnSymbol)
% U+22AE DOES NOT FORCE; \nVdash (txfonts/pxfonts)
\DeclareTextCommand{\textnVdash}{PU}{\9042\256}%* U+22AE
%* \textnVdash -> \nrightVdash (MnSymbol)
% U+22AF NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE; \nVDash (AmS)
\DeclareTextCommand{\textnVDash}{PU}{\9042\257}%* U+22AF
%* \textnVDash -> \nrightModels (MnSymbol)
% U+22B2 NORMAL SUBGROUP OF; \lhd (latexsym, ...)
\DeclareTextCommand{\textlhd}{PU}{\9042\262}%* U+22B2
%* \textlhd -> \lessclosed (MnSymbol)
% U+22B3 CONTAINS AS NORMAL SUBGROUP; \rhd (latexsym, ...)
\DeclareTextCommand{\textrhd}{PU}{\9042\263}%* U+22B3
%* \textrhd -> \gtrclosed (MnSymbol)
% U+22B4 NORMAL SUBGROUP OF OR EQUAL TO; \unlhd (latexsym, ...)
\DeclareTextCommand{\textunlhd}{PU}{\9042\264}%* U+22B4
%* \textunlhd -> \leqclosed (MnSymbol)
%* \textunlhd -> \trianglelefteq (MnSymbol)
% U+22B5 CONTAINS AS NORMAL SUBGROUP OR EQUAL TO; \unrhd (latexsym, ...)
\DeclareTextCommand{\textunrhd}{PU}{\9042\265}%* U+22B5
%* \textunrhd -> \geqclosed (MnSymbol)
%* \textunrhd -> \trianglerighteq (MnSymbol)
% U+22B6 ORIGINAL OF; \multimapdotbothA (txfonts/pxfonts)
\DeclareTextCommand{\textmultimapdotbothA}{PU}{\9042\266}%* U+22B6
% U+22B7 IMAGE OF; \multimapdotbothB (txfonts/pxfonts)
\DeclareTextCommand{\textmultimapdotbothB}{PU}{\9042\267}%* U+22B7
% U+22B8 MULTIMAP; \multimap (AmS, txfonts/pxfonts)
\DeclareTextCommand{\textmultimap}{PU}{\9042\270}%* U+22B8
% U+22BB XOR; \veebar (AmS)
\DeclareTextCommand{\textveebar}{PU}{\9042\273}%* U+22BB
% U+22BC NAND; \barwedge (mathabx)
\DeclareTextCommand{\textbarwedge}{PU}{\9042\274}%* U+22BC
% U+22C6 STAR OPERATOR; \star (LaTeX)
\DeclareTextCommand{\textstar}{PU}{\9042\306}%* U+22C6
% U+22C7 DIVISION TIMES; \divideontimes (AmS)
\DeclareTextCommand{\textdivideontimes}{PU}{\9042\307}%* U+22C7
% U+22C8 BOWTIE; \bowtie (LaTeX)
\DeclareTextCommand{\textbowtie}{PU}{\9042\310}%* U+22C8
%* \textbowtie -> \Bowtie (wasysym)
% U+22C9 LEFT NORMAL FACTOR SEMIDIRECT PRODUCT; \ltimes (AmS)
\DeclareTextCommand{\textltimes}{PU}{\9042\311}%* U+22C9
% U+22CA RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT;
%   \rtimes (AmS)
\DeclareTextCommand{\textrtimes}{PU}{\9042\312}%* U+22CA
% U+22CB LEFT SEMIDIRECT PRODUCT; \leftthreetimes (AmS)
\DeclareTextCommand{\textleftthreetimes}{PU}{\9042\313}%* U+22CB
% U+22CC RIGHT SEMIDIRECT PRODUCT; \rightthreetimes (AmS)
\DeclareTextCommand{\textrightthreetimes}{PU}{\9042\314}%* U+22CC
% U+22CD REVERSED TILDE EQUALS; \backsimeq (AmS)
\DeclareTextCommand{\textbacksimeq}{PU}{\9042\315}%* U+22CD
% \nbacksimeq (txfonts/pxfonts)
\DeclareTextCommand{\textnbacksimeq}{PU}{\9042\315\83\070}%* U+22CD U+0338
% U+22CE CURLY LOGICAL OR; curlyor; \curlyvee (AmS)
\DeclareTextCommand{\textcurlyvee}{PU}{\9042\316}%* U+22CE
%* \textcurlyvee -> \varcurlyvee (stmaryrd)
% U+22CF CURLY LOGICAL AND; curlyand; \curlywedge (AmS)
\DeclareTextCommand{\textcurlywedge}{PU}{\9042\317}%* U+22CF
%* \textcurlywedge -> \varcurlywedge (stmaryrd)
% U+22D0 DOUBLE SUBSET; \Subset (AmS)
\DeclareTextCommand{\textSubset}{PU}{\9042\320}%* U+22D0
% \nSubset (txfonts/pxfonts)
\DeclareTextCommand{\textnSubset}{PU}{\9042\320\83\070}%* U+22D0 U+0338
% U+22D1 DOUBLE SUPERSET; \Supset (AmS)
\DeclareTextCommand{\textSupset}{PU}{\9042\321}%* U+22D1
% \nSupset (txfonts/pxfonts)
\DeclareTextCommand{\textnSupset}{PU}{\9042\321\83\070}%* U+22D1 U+0338
% U+22D2 DOUBLE INTERSECTION; \Cap (AmS)
\DeclareTextCommand{\textCap}{PU}{\9042\322}%* U+22D2
%* \textCap -> \doublecap (mathabx)
% U+22D3 DOUBLE UNION; \Cup (AmS)
\DeclareTextCommand{\textCup}{PU}{\9042\323}%* U+22D3
%* \textCup -> \doublecup (mathabx)
% U+22D4 PITCHFORK; \pitchfork (mathabx)
\DeclareTextCommand{\textpitchfork}{PU}{\9042\324}%* U+22D4
% U+22D6 LESS-THAN WITH DOT; \lessdot (AmS)
\DeclareTextCommand{\textlessdot}{PU}{\9042\326}%* U+22D6
% U+22D7 GREATER-THAN WITH DOT; \gtrdot (AmS)
\DeclareTextCommand{\textgtrdot}{PU}{\9042\327}%* U+22D7
% U+22D8 VERY MUCH LESS-THAN; \lll (AmS)
\DeclareTextCommand{\textlll}{PU}{\9042\330}%* U+22D8
% U+22D9 VERY MUCH GREATER-THAN; \ggg (AmS)
\DeclareTextCommand{\textggg}{PU}{\9042\331}%* U+22D9
% U+22DA LESS-THAN EQUAL TO OR GREATER-THAN; lessequalorgreater;
%   \lesseqgtr (AmS)
\DeclareTextCommand{\textlesseqgtr}{PU}{\9042\332}%* U+22DA
% U+22DB GREATER-THAN EQUAL TO OR LESS-THAN; greaterequalorless;
%   \gtreqless (AmS)
\DeclareTextCommand{\textgtreqless}{PU}{\9042\333}%* U+22DB
% U+22DE EQUAL TO OR PRECEDES; \curlyeqprec (MnSymbol)
\DeclareTextCommand{\textcurlyeqprec}{PU}{\9042\336}%* U+22DE
% \ncurlyeqprec (mathabx)
\DeclareTextCommand{\textncurlyeqprec}{PU}{\9042\336\83\070}%* U+22DE U+0338
% U+22DF EQUAL TO OR SUCCEEDS; \curlyeqsucc (MnSymbol)
\DeclareTextCommand{\textcurlyeqsucc}{PU}{\9042\337}%* U+22DF
% \ncurlyeqsucc (mathabx)
\DeclareTextCommand{\textncurlyeqsucc}{PU}{\9042\337\83\070}%* U+22DF U+0338
% U+22E0 DOES NOT PRECEDE OR EQUAL; \npreccurlyeq (txfonts/pxfonts)
\DeclareTextCommand{\textnpreccurlyeq}{PU}{\9042\340}%* U+22E0
% U+22E1 DOES NOT SUCCEED OR EQUAL; \nsucccurlyeq (txfonts/pxfonts)
\DeclareTextCommand{\textnsucccurlyeq}{PU}{\9042\341}%* U+22E1
% U+22E2 NOT SQUARE IMAGE OF OR EQUAL TO; \nsqsubseteq (txfonts/pxfonts)
\DeclareTextCommand{\textnqsubseteq}{PU}{\9042\342}%* U+22E2
% U+22E3 NOT SQUARE ORIGINAL OF OR EQUAL TO; \nsqsupseteq (txfonts/pxfonts)
\DeclareTextCommand{\textnqsupseteq}{PU}{\9042\343}%* U+22E3
% U+22E4 SQUARE IMAGE OF OR NOT EQUAL TO; \sqsubsetneq (mathabx)
\DeclareTextCommand{\textsqsubsetneq}{PU}{\9042\344}%* U+22E4
%* \textsqsubsetneq -> \varsqsubsetneq (mathabx)
% U+22E5 SQUARE ORIGINAL OF OR NOT EQUAL TO; \sqsupsetneq (mathabx)
\DeclareTextCommand{\textsqsupsetneq}{PU}{\9042\345}%* U+22E5
%* \textsqsupsetneq -> \varsqsupsetneq (mathabx)
% U+22E6 LESS-THAN BUT NOT EQUIVALENT TO; \lnsim (AmS)
\DeclareTextCommand{\textlnsim}{PU}{\9042\346}%* U+22E6
% U+22E7 GREATER-THAN BUT NOT EQUIVALENT TO; \gnsim (AmS)
\DeclareTextCommand{\textgnsim}{PU}{\9042\347}%* U+22E7
% U+22E8 PRECEDES BUT NOT EQUIVALENT TO; \precnsim (AmS)
\DeclareTextCommand{\textprecnsim}{PU}{\9042\350}%* U+22E8
% U+22E9 SUCCEEDS BUT NOT EQUIVALENT TO; \succnsim (AmS)
\DeclareTextCommand{\textsuccnsim}{PU}{\9042\351}%* U+22E9
% U+22EA NOT NORMAL SUBGROUP OF; \ntriangleleft (AmS)
\DeclareTextCommand{\textntriangleleft}{PU}{\9042\352}%* U+22EA
%* \textntriangleleft -> \nlessclosed (MnSymbol)
% U+22EB DOES NOT CONTAIN AS NORMAL SUBGROUP; \ntriangleright (AmS)
\DeclareTextCommand{\textntriangleright}{PU}{\9042\353}%* U+22EB
%* \textntriangleright -> \ngtrclosed (MnSymbol)
% U+22EC NOT NORMAL SUBGROUP OF OR EQUAL TO;
%   \ntrianglelefteq (AmS)
\DeclareTextCommand{\textntrianglelefteq}{PU}{\9042\354}%* U+22EC
% U+22ED DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL;
%   \ntrianglerighteq (AmS)
\DeclareTextCommand{\textntrianglerighteq}{PU}{\9042\355}%* U+22ED
%* \textntrianglerighteq -> textngeqclosed
% U+22EE VERTICAL ELLIPSIS; ellipsisvertical; \vdots (LaTeX)
\DeclareTextCommand{\textvdots}{PU}{\9042\356}%* U+22EE
% U+22EF MIDLINE HORIZONTAL ELLIPSIS; \cdots (LaTeX)
\DeclareTextCommand{\textcdots}{PU}{\9042\357}%* U+22EF
% U+22F0 UP RIGHT DIAGONAL ELLIPSIS; \udots (MnSymbol)
\DeclareTextCommand{\textudots}{PU}{\9042\360}%* U+22F0
% U+22F1 DOWN RIGHT DIAGONAL ELLIPSIS; \ddots (LaTeX)
\DeclareTextCommand{\textddots}{PU}{\9042\361}%* U+22F1
% U+22F6 ELEMENT OF WITH OVERBAR; \barin (mathabx)
\DeclareTextCommand{\textbarin}{PU}{\9042\366}%* U+22F6
%    \end{macrocode}
%
% \subsubsection{Miscellaneous Technical: U+2300 to U+23FF}
%
%    \begin{macrocode}
% U+2300 DIAMETER SIGN; \diameter (mathabx,wasysym)
\DeclareTextCommand{\textdiameter}{PU}{\9043\000}%* U+2300
% U+2310 REVERSED NOT SIGN; \backneg (MnSymbol)
\DeclareTextCommand{\textbackneg}{PU}{\9043\020}%* U+2310
% U+2311 SQUARE LOZENGE; \wasylozenge (wasysym)
\DeclareTextCommand{\textwasylozenge}{PU}{\9043\021}%* U+2311
% U+2319 TURNED NOT SIGN; \invbackneg (MnSymbol)
\DeclareTextCommand{\textinvbackneg}{PU}{\9043\031}%* U+2319
% U+231A WATCH; \clock (wasysym)
\DeclareTextCommand{\textclock}{PU}{\9043\032}%* U+231A
%* \textclock -> \Clocklogo (marvosym)
%* \textclock -> \ClockLogo (marvosym)
% U+231C TOP LEFT CORNER; \ulcorner (AmS)
\DeclareTextCommand{\textulcorner}{PU}{\9043\034}%* U+231C
% U+231D TOP RIGHT CORNER; \urcorner (AmS)
\DeclareTextCommand{\texturcorner}{PU}{\9043\035}%* U+231D
% U+231E BOTTOM LEFT CORNER; \llcorner (AmS)
\DeclareTextCommand{\textllcorner}{PU}{\9043\036}%* U+231E
% U+231F BOTTOM RIGHT CORNER; \lrcorner (AmS)
\DeclareTextCommand{\textlrcorner}{PU}{\9043\037}%* U+231F
% U+2322 FROWN; \frown (LaTeX)
\DeclareTextCommand{\textfrown}{PU}{\9043\042}%* U+2322
% U+2323 SMILE; \smile (LaTeX)
\DeclareTextCommand{\textsmile}{PU}{\9043\043}%* U+2323
% U+2328 KEYBOARD; \Keyboard (marvosym)
\DeclareTextCommand{\textKeyboard}{PU}{\9043\050}%* U+2328
% U+2329 LEFT-POINTING ANGLE BRACKET; angleleft; \langle (LaTeX)
\DeclareTextCommand{\textlangle}{PU}{\9043\051}%* U+2329
% U+232A RIGHT-POINTING ANGLE BRACKET; angleright; \rangle (LaTeX)
\DeclareTextCommand{\textrangle}{PU}{\9043\052}%* U+232A
% U+2339 APL FUNCTIONAL SYMBOL QUAD DIVIDE; \APLinv (wasysym)
\DeclareTextCommand{\textAPLinv}{PU}{\9043\071}%* U+2339
% U+233C APL FUNCTIONAL SYMBOL QUAD CIRCLE; \Tumbler (marvosym)
\DeclareTextCommand{\textTumbler}{PU}{\9043\074}%* U+233C
% U+233D APL FUNCTIONAL SYMBOL CIRCLE STILE; \baro (stmaryrd)
\DeclareTextCommand{\textstmaryrdbaro}{PU}{\9043\075}% U+233D
%* \textstmaryrdbaro -> \baro (stmaryrd)
% U+233F APL FUNCTIONAL SYMBOL SLASH BAR; \notslash (wasysym)
\DeclareTextCommand{\textnotslash}{PU}{\9043\077}%* U+233F
% U+2340 APL FUNCTIONAL SYMBOL BACKSLASH BAR;
%   \notbackslash (wasysym)
\DeclareTextCommand{\textnotbackslash}{PU}{\9043\100}%* U+2340
% U+2342 APL FUNCTIONAL SYMBOL QUAD BACKSLASH; \boxbackslash (mathabx)
\DeclareTextCommand{\textboxbackslash}{PU}{\9043\102}%* U+2342
% U+2347 APL FUNCTIONAL SYMBOL QUAD LEFTWARDS ARROW;
%   \APLleftarrowbox (wasysym)
\DeclareTextCommand{\textAPLleftarrowbox}{PU}{\9043\107}%* U+2347
% U+2348 APL FUNCTIONAL SYMBOL QUAD RIGHTWARDS ARROW;
%   \APLrightarrowbox (wasysym)
\DeclareTextCommand{\textAPLrightarrowbox}{PU}{\9043\110}%* U+2348
% U+2350 APL FUNCTIONAL SYMBOL QUAD UPWARDS ARROW; \APLuparrowbox (wasysym)
\DeclareTextCommand{\textAPLuparrowbox}{PU}{\9043\120}%* U+2350
% U+2357 APL FUNCTIONAL SYMBOL QUAD DOWNWARDS ARROW;
%   \APLdownarrowbox (wasysym)
\DeclareTextCommand{\textAPLdownarrowbox}{PU}{\9043\127}%* U+2357
% U+235E APL FUNCTIONAL SYMBOL QUOTE QUAD;
%   \APLinput (wasysym)
\DeclareTextCommand{\textAPLinput}{PU}{\9043\136}%* U+235E
% U+2370 APL FUNCTIONAL SYMBOL QUAD QUESTION; \Request (china2e)
\DeclareTextCommand{\textRequest}{PU}{\9043\160}%* U+2370
% U+2393 DIRECT CURRENT SYMBOL FORM TWO; \Beam (marvosym)
\DeclareTextCommand{\textBeam}{PU}{\9043\223}%* U+2393
% U+2394 SOFTWARE-FUNCTION SYMBOL; \hexagon (wasysym)
\DeclareTextCommand{\texthexagon}{PU}{\9043\224}%* U+2394
% U+2395 APL FUNCTIONAL SYMBOL QUAD; \APLbox (wasysym)
\DeclareTextCommand{\textAPLbox}{PU}{\9043\225}%* U+2395
% U+23ED BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;
%   \ForwardToIndex (marvosym)
\DeclareTextCommand{\textForwardToIndex}{PU}{\9043\355}%* U+23ED
% U+23EE BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR;
%   \RewindToIndex (marvosym)
\DeclareTextCommand{\textRewindToIndex}{PU}{\9043\356}%* U+23EE
%    \end{macrocode}
%
% \subsubsection{Control Pictures: U+2400 to U+243F}
%
%    \begin{macrocode}
% U+2422 BLANK SYMBOL
\DeclareTextCommand{\textblank}{PU}{\9044\042}% U+2422
% U+2423 OPEN BOX; blank
\DeclareTextCommand{\textvisiblespace}{PU}{\9044\043}% U+2423
%    \end{macrocode}
%
% \subsubsection{Optical Character Recognition: U+2440 to U+245F}
%
%    \begin{macrocode}
% U+244A OCR DOUBLE BACKSLASH; \bbslash (stmaryrd)
\DeclareTextCommand{\textbbslash}{PU}{\9044\112}%* U+244A
%* \textbbslash -> \varparallelinv (txfonts/pxfonts)
%    \end{macrocode}
%
% \subsubsection{Enclosed Alphanumerics: U+2460 to U+24FF}
%
%    \begin{macrocode}
% U+2460 CIRCLED DIGIT ONE; onecircle
\DeclareTextCompositeCommand{\textcircled}{PU}{1}{\9044\140}% U+2460
% U+2461 CIRCLED DIGIT TWO; twocircle
\DeclareTextCompositeCommand{\textcircled}{PU}{2}{\9044\141}% U+2461
% U+2462 CIRCLED DIGIT THREE; threecircle
\DeclareTextCompositeCommand{\textcircled}{PU}{3}{\9044\142}% U+2462
% U+2463 CIRCLED DIGIT FOUR; fourcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{4}{\9044\143}% U+2463
% U+2464 CIRCLED DIGIT FIVE; fivecircle
\DeclareTextCompositeCommand{\textcircled}{PU}{5}{\9044\144}% U+2464
% U+2465 CIRCLED DIGIT SIX; sixcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{6}{\9044\145}% U+2465
% U+2466 CIRCLED DIGIT SEVEN; sevencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{7}{\9044\146}% U+2466
% U+2467 CIRCLED DIGIT EIGHT; eightcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{8}{\9044\147}% U+2467
% U+2468 CIRCLED DIGIT NINE; ninecircle
\DeclareTextCompositeCommand{\textcircled}{PU}{9}{\9044\150}% U+2468
% U+2469 CIRCLED NUMBER TEN; tencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{10}{\9044\151}% U+2469
% U+246A CIRCLED NUMBER ELEVEN; elevencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{11}{\9044\152}% U+246A
% U+246B CIRCLED NUMBER TWELVE; twelvecircle
\DeclareTextCompositeCommand{\textcircled}{PU}{12}{\9044\153}% U+246B
% U+246C CIRCLED NUMBER THIRTEEN; thirteencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{13}{\9044\154}% U+246C
% U+246D CIRCLED NUMBER FOURTEEN; fourteencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{14}{\9044\155}% U+246D
% U+246E CIRCLED NUMBER FIFTEEN; fifteencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{15}{\9044\156}% U+246E
% U+246F CIRCLED NUMBER SIXTEEN; sixteencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{16}{\9044\157}% U+246F
% U+2470 CIRCLED NUMBER SEVENTEEN; seventeencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{17}{\9044\160}% U+2470
% U+2471 CIRCLED NUMBER EIGHTEEN; eighteencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{18}{\9044\161}% U+2471
% U+2472 CIRCLED NUMBER NINETEEN; nineteencircle
\DeclareTextCompositeCommand{\textcircled}{PU}{19}{\9044\162}% U+2472
% U+2473 CIRCLED NUMBER TWENTY; twentycircle
\DeclareTextCompositeCommand{\textcircled}{PU}{20}{\9044\163}% U+2473
% U+24B6 CIRCLED LATIN CAPITAL LETTER A; Acircle
\DeclareTextCompositeCommand{\textcircled}{PU}{A}{\9044\266}% U+24B6
% \CircledA (marvosym)
\DeclareTextCommand{\textCircledA}{PU}{\9044\266}%* U+24B6
%* \textCircledA -> \CleaningA
% U+24B7 CIRCLED LATIN CAPITAL LETTER B; Bcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{B}{\9044\267}% U+24B7
% U+24B8 CIRCLED LATIN CAPITAL LETTER C; Ccircle
\DeclareTextCompositeCommand{\textcircled}{PU}{C}{\9044\270}% U+24B8
% U+24B9 CIRCLED LATIN CAPITAL LETTER D; Dcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{D}{\9044\271}% U+24B9
% U+24BA CIRCLED LATIN CAPITAL LETTER E; Ecircle
\DeclareTextCompositeCommand{\textcircled}{PU}{E}{\9044\272}% U+24BA
% U+24BB CIRCLED LATIN CAPITAL LETTER F; Fcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{F}{\9044\273}% U+24BB
% \CleaningF (marvosym)
\DeclareTextCommand{\textCleaningF}{PU}{\9044\273}%* U+24BB
% \CleaningFF (marvosym)
\DeclareTextCommand{\textCleaningFF}{PU}{\9044\273\83\062}%* U+24BB U+0332
% U+24BC CIRCLED LATIN CAPITAL LETTER G; Gcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{G}{\9044\274}% U+24BC
% U+24BD CIRCLED LATIN CAPITAL LETTER H; Hcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{H}{\9044\275}% U+24BD
% U+24BE CIRCLED LATIN CAPITAL LETTER I; Icircle
\DeclareTextCompositeCommand{\textcircled}{PU}{I}{\9044\276}% U+24BE
% U+24BF CIRCLED LATIN CAPITAL LETTER J; Jcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{J}{\9044\277}% U+24BF
% U+24C0 CIRCLED LATIN CAPITAL LETTER K; Kcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{K}{\9044\300}% U+24C0
% U+24C1 CIRCLED LATIN CAPITAL LETTER L; Lcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{L}{\9044\301}% U+24C1
% U+24C2 CIRCLED LATIN CAPITAL LETTER M; Mcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{M}{\9044\302}% U+24C2
% U+24C3 CIRCLED LATIN CAPITAL LETTER N; Ncircle
\DeclareTextCompositeCommand{\textcircled}{PU}{N}{\9044\303}% U+24C3
% U+24C4 CIRCLED LATIN CAPITAL LETTER O; Ocircle
\DeclareTextCompositeCommand{\textcircled}{PU}{O}{\9044\304}% U+24C4
% U+24C5 CIRCLED LATIN CAPITAL LETTER P; Pcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{P}{\9044\305}% U+24C5
% \CleaningP (marvosym)
\DeclareTextCommand{\textCleaningP}{PU}{\9044\305}%* U+24C5
% \CleaningPP (marvosym)
\DeclareTextCommand{\textCleaningPP}{PU}{\9044\305\83\062}%* U+24C5 U+0332
% U+24C6 CIRCLED LATIN CAPITAL LETTER Q; Qcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{Q}{\9044\306}% U+24C6
% U+24C7 CIRCLED LATIN CAPITAL LETTER R; Rcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{R}{\9044\307}% U+24C7
% U+24C8 CIRCLED LATIN CAPITAL LETTER S; Scircle
\DeclareTextCompositeCommand{\textcircled}{PU}{S}{\9044\310}% U+24C8
% U+24C9 CIRCLED LATIN CAPITAL LETTER T; Tcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{T}{\9044\311}% U+24C9
% U+24CA CIRCLED LATIN CAPITAL LETTER U; Ucircle
\DeclareTextCompositeCommand{\textcircled}{PU}{U}{\9044\312}% U+24CA
% U+24CB CIRCLED LATIN CAPITAL LETTER V; Vcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{V}{\9044\313}% U+24CB
% U+24CC CIRCLED LATIN CAPITAL LETTER W; Wcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{W}{\9044\314}% U+24CC
% U+24CD CIRCLED LATIN CAPITAL LETTER X; Xcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{X}{\9044\315}% U+24CD
% U+24CE CIRCLED LATIN CAPITAL LETTER Y; Ycircle
\DeclareTextCompositeCommand{\textcircled}{PU}{Y}{\9044\316}% U+24CE
% U+24CF CIRCLED LATIN CAPITAL LETTER Z; Zcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{Z}{\9044\317}% U+24CF
% U+24D0 CIRCLED LATIN SMALL LETTER A; acircle
\DeclareTextCompositeCommand{\textcircled}{PU}{a}{\9044\320}% U+24D0
% U+24D1 CIRCLED LATIN SMALL LETTER B; bcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{b}{\9044\321}% U+24D1
% U+24D2 CIRCLED LATIN SMALL LETTER C; ccircle
\DeclareTextCompositeCommand{\textcircled}{PU}{c}{\9044\322}% U+24D2
% U+24D3 CIRCLED LATIN SMALL LETTER D; dcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{d}{\9044\323}% U+24D3
% U+24D4 CIRCLED LATIN SMALL LETTER E; ecircle
\DeclareTextCompositeCommand{\textcircled}{PU}{e}{\9044\324}% U+24D4
% U+24D5 CIRCLED LATIN SMALL LETTER F; fcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{f}{\9044\325}% U+24D5
% U+24D6 CIRCLED LATIN SMALL LETTER G; gcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{g}{\9044\326}% U+24D6
% U+24D7 CIRCLED LATIN SMALL LETTER H; hcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{h}{\9044\327}% U+24D7
% U+24D8 CIRCLED LATIN SMALL LETTER I; icircle
\DeclareTextCompositeCommand{\textcircled}{PU}{i}{\9044\330}% U+24D8
% U+24D9 CIRCLED LATIN SMALL LETTER J; jcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{j}{\9044\331}% U+24D9
% U+24DA CIRCLED LATIN SMALL LETTER K; kcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{k}{\9044\332}% U+24DA
% U+24DB CIRCLED LATIN SMALL LETTER L; lcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{l}{\9044\333}% U+24DB
% U+24DC CIRCLED LATIN SMALL LETTER M; mcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{m}{\9044\334}% U+24DC
% U+24DD CIRCLED LATIN SMALL LETTER N; ncircle
\DeclareTextCompositeCommand{\textcircled}{PU}{n}{\9044\335}% U+24DD
% U+24DE CIRCLED LATIN SMALL LETTER O; ocircle
\DeclareTextCompositeCommand{\textcircled}{PU}{o}{\9044\336}% U+24DE
% U+24DF CIRCLED LATIN SMALL LETTER P; pcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{p}{\9044\337}% U+24DF
% U+24E0 CIRCLED LATIN SMALL LETTER Q; qcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{q}{\9044\340}% U+24E0
% U+24E1 CIRCLED LATIN SMALL LETTER R; rcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{r}{\9044\341}% U+24E1
% U+24E2 CIRCLED LATIN SMALL LETTER S; scircle
\DeclareTextCompositeCommand{\textcircled}{PU}{s}{\9044\342}% U+24E2
% U+24E3 CIRCLED LATIN SMALL LETTER T; tcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{t}{\9044\343}% U+24E3
% U+24E4 CIRCLED LATIN SMALL LETTER U; ucircle
\DeclareTextCompositeCommand{\textcircled}{PU}{u}{\9044\344}% U+24E4
% U+24E5 CIRCLED LATIN SMALL LETTER V; vcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{v}{\9044\345}% U+24E5
% U+24E6 CIRCLED LATIN SMALL LETTER W; wcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{w}{\9044\346}% U+24E6
% U+24E7 CIRCLED LATIN SMALL LETTER X; xcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{x}{\9044\347}% U+24E7
% U+24E8 CIRCLED LATIN SMALL LETTER Y; ycircle
\DeclareTextCompositeCommand{\textcircled}{PU}{y}{\9044\350}% U+24E8
% U+24E9 CIRCLED LATIN SMALL LETTER Z; zcircle
\DeclareTextCompositeCommand{\textcircled}{PU}{z}{\9044\351}% U+24E9
% U+24EA CIRCLED DIGIT ZERO
\DeclareTextCompositeCommand{\textcircled}{PU}{0}{\9044\352}% U+24EA
%    \end{macrocode}
%
% \subsubsection{Box Drawing: U+2500 to 257F}
%
%    \begin{macrocode}
% U+2504 BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL; \CuttingLine (marvosym)
\DeclareTextCommand{\textCuttingLine}{PU}{\9045\004}%* U+2504
%* \textCuttingLine -> \Kutline (marvosym)
%* \textCuttingLine -> \CutLine (marvosym)
%* \textCuttingLine -> \Cutline (marvosym)
%    \end{macrocode}
%
% \subsubsection{Geometric Shapes: U+25A0 to U+25FF}
%
%    \begin{macrocode}
% U+25B2 BLACK UP-POINTING TRIANGLE; \UParrow (wasysym)
\DeclareTextCommand{\textUParrow}{PU}{\9045\262}%* U+25B2
%* \textUParrow -> \MoveUp (marvosym)
% U+25B3 WHITE UP-POINTING TRIANGLE; whiteuppointingtriangle;
%   \bigtriangleup (LaTeX)
\DeclareTextCommand{\textbigtriangleup}{PU}{\9045\263}%* U+25B3
%* \textbigtriangleup -> \APLup (wasysym)
%* \textbigtriangleup -> \Bleech (marvosym)
% U+25B6 BLACK RIGHT-POINTING TRIANGLE; \Forward (marvosym)
\DeclareTextCommand{\textForward}{PU}{\9045\266}%* U+25B6
% U+25B7 WHITE RIGHT-POINTING TRIANGLE (= z notation range restriction);
%   whiterightpointingtriangle; \triangleright (LaTeX)
\DeclareTextCommand{\texttriangleright}{PU}{\9045\267}%* U+25B7
% U+25BA BLACK RIGHT-POINTING POINTER; \RHD (wasysym)
\DeclareTextCommand{\textRHD}{PU}{\9045\272}%* U+25BA
% U+25BC BLACK DOWN-POINTING TRIANGLE; \DOWNarrow (wasysym)
\DeclareTextCommand{\textDOWNarrow}{PU}{\9045\274}%* U+25BC
%* \textDOWNarrow -> \MoveDown (marvosym)
% U+25BD WHITE DOWN-POINTING TRIANGLE; whitedownpointingtriangle;
%   \bigtriangledown (LaTeX)
\DeclareTextCommand{\textbigtriangledown}{PU}{\9045\275}%* U+25BD
%* \textbigtriangledown -> \APLdown (wasysym)
% U+25C0 BLACK LEFT-POINTING TRIANGLE; \Rewind (marvosym)
\DeclareTextCommand{\textRewind}{PU}{\9045\300}%* U+25C0
% U+25C1 WHITE RIGHT-POINTING TRIANGLE (= z notation domain restriction);
%   whiteleftpointingtriangle; \triangleleft (LaTeX)
\DeclareTextCommand{\texttriangleleft}{PU}{\9045\301}%* U+25C1
% U+25C4 BLACK LEFT-POINTING POINTER; \LHD (wasysym)
\DeclareTextCommand{\textLHD}{PU}{\9045\304}%* U+25C4
% U+25C7 WHITE DIAMOND; whitediamond; \diamond (LaTeX)
\DeclareTextCommand{\textdiamond}{PU}{\9045\307}%* U+25C7
%* \textdiamond -> \Diamond (wasysym)
% U+25CA LOZENGE; lozenge; \lozenge (AmS)
\DeclareTextCommand{\textlozenge}{PU}{\9045\312}%* U+25CA
% U+25D6 LEFT HALF BLACK CIRCLE; \LEFTCIRCLE (wasysym)
\DeclareTextCommand{\textLEFTCIRCLE}{PU}{\9045\326}%* U+25D6
% U+25D7 RIGHT HALF BLACK CIRCLE; \RIGHTCIRCLE (wasysym)
\DeclareTextCommand{\textRIGHTCIRCLE}{PU}{\9045\327}%* U+25D7
% U+25E6 WHITE BULLET; *openbullet, whitebullet
\DeclareTextCommand{\textopenbullet}{PU}{\9045\346}%* U+25E6
% U+25EB WHITE SQUARE WITH VERTICAL BISECTING LINE;
%   \boxbar (stmaryrd)
\DeclareTextCommand{\textboxbar}{PU}{\9045\353}%* U+25EB
% U+25EF LARGE CIRCLE; largecircle
\DeclareTextCommand{\textbigcircle}{PU}{\9045\357}%* U+25EF
%* \textbigcircle -> \varbigcirc (stmaryrd)
%
%    \end{macrocode}
%
% \subsubsection{Miscellaneous Symbols: U+2600 to U+26FF}
%
%    \begin{macrocode}
% U+2601 CLOUD; \Cloud (ifsym)
\DeclareTextCommand{\textCloud}{PU}{\9046\001}%* U+2601
% U+2605 BLACK STAR; \FiveStar (bbding)
\DeclareTextCommand{\textFiveStar}{PU}{\9046\005}%* U+2605
% U+2606 WHITE STAR; \FiveStarOpen (bbding)
\DeclareTextCommand{\textFiveStarOpen}{PU}{\9046\006}%* U+2606
% U+260E BLACK TELEPHONE; telephoneblack; \Phone (bbding)
\DeclareTextCommand{\textPhone}{PU}{\9046\016}%* U+260E
%* \textPhone -> \Telefon (marvosym)
% U+2610 BALLOT BOX; \boxempty (stmaryrd)
\DeclareTextCommand{\textboxempty}{PU}{\9046\020}%* U+2610
%* \textboxempty -> \Box (wasysym)
% U+2611 BALLOT BOX WITH CHECK; \Checkedbox (marvosym)
\DeclareTextCommand{\textCheckedbox}{PU}{\9046\021}%* U+2611
%* \textCheckedbox -> \CheckedBox (marvosym)
% U+2612 BALLOT BOX WITH X; \Crossedbox (marvosym)
\DeclareTextCommand{\textCrossedbox}{PU}{\9046\022}%* U+2612
%* \textCrossedbox -> \XBox (wasysym)
%* \textCrossedbox -> \CrossedBox (marvosym)
% U+2615 HOT BEVERAGE; \Coffeecup (marvosym)
\DeclareTextCommand{\textCoffeecup}{PU}{\9046\025}%* U+2615
% U+261A BLACK LEFT POINTING INDEX; \HandCuffLeft (bbding)
\DeclareTextCommand{\textHandCuffLeft}{PU}{\9046\032}%* U+261A
% U+261B BLACK RIGHT POINTING INDEX; \HandCuffRight (bbding)
\DeclareTextCommand{\textHandCuffRight}{PU}{\9046\033}%* U+261B
% U+261C WHITE LEFT POINTING INDEX; \HandLeft (bbding)
\DeclareTextCommand{\textHandLeft}{PU}{\9046\034}%* U+261C
%* \textHandLeft -> \rightpointleft (fourier)
% U+261E WHITE RIGHT POINTING INDEX; \HandRight (bbding)
\DeclareTextCommand{\textHandRight}{PU}{\9046\036}%* U+261E
%* \textHandRight -> \leftpointright (fourier)
%* \textHandRight -> \PointingHand (marvosym)
%* \textHandRight -> \Pointinghand (marvosym)
% U+2622 RADIOACTIVE SIGN; \Radioactivity (marvosym)
\DeclareTextCommand{\textRadioactivity}{PU}{\9046\042}%* U+2622
%* \textRadioactivity -> \Radiation (ifsym)
% U+2623 BIOHAZARD SIGN; \Biohazard (marvosym)
\DeclareTextCommand{\textBiohazard}{PU}{\9046\043}%* U+2623
% U+2625 ANKH; \Ankh (marvosym)
\DeclareTextCommand{\textAnkh}{PU}{\9046\045}%* U+2625
% U+262F YIN YANG; \YinYang (marvosym)
\DeclareTextCommand{\textYinYang}{PU}{\9046\057}%* U+262F
%* \textYinYang -> \Yinyang (marvosym)
%* \textYinYang -> \YingYang (marvosym)
%* \textYinYang -> \Yingyang (marvosym)
% U+2639 WHITE FROWNING FACE; \frownie (wasysym)
\DeclareTextCommand{\textfrownie}{PU}{\9046\071}%* U+2639
%* \textfrownie -> \Frowny (marvosym)
% U+263A WHITE SMILING FACE; \smiley (wasysym)
\DeclareTextCommand{\textsmiley}{PU}{\9046\072}%* U+263A
%* \textsmiley -> \Smiley (marvosym)
% U+263B BLACK SMILING FACE; \blacksmiley (wasysym)
\DeclareTextCommand{\textblacksmiley}{PU}{\9046\073}%* U+263B
% U+263C WHITE SUN WITH RAYS; \sun (wasysym)
\DeclareTextCommand{\textsun}{PU}{\9046\074}%* U+263C
%* \textsun -> \Sun (marvosym)
% U+263D FIRST QUARTER MOON; \leftmoon (wasysym, mathabx)
\DeclareTextCommand{\textleftmoon}{PU}{\9046\075}%* U+263D
% U+263E LAST QUARTER MOON; \rightmoon (wasysym, mathabx)
\DeclareTextCommand{\textrightmoon}{PU}{\9046\076}%* U+263E
% U+263F MERCURY; \mercury (wasysym)
\DeclareTextCommand{\textmercury}{PU}{\9046\077}%* U+263F
%* \textmercury -> \Mercury (marvosym)
% U+2640 FEMALE SIGN; female; \female (wasysym)
\DeclareTextCommand{\textPUfemale}{PU}{\9046\100}% U+2640
%* \textPUfemale -> \textfemale (tipx)
%* \textPUfemale -> \female (wasysym)
%* \textPUfemale -> \venus (wasysym)
%* \textPUfemale -> \Venus (marvosym)
%* \textPUfemale -> \Female (marvosym)
% U+2641 EARTH; \earth (wasysym)
\DeclareTextCommand{\textearth}{PU}{\9046\101}%* U+2641
%* \textearth -> \Earth (marvosym)
% U+2642 MALE SIGN; male, mars; \male (wasysym)
\DeclareTextCommand{\textmale}{PU}{\9046\102}%* U+2642
%* \textmale -> \mars (wasysym)
%* \textmale -> \Mars (marvosym)
%* \textmale -> \Male (marvosym)
% U+2643 JUPITER; \jupiter (wasysym)
\DeclareTextCommand{\textjupiter}{PU}{\9046\103}%* U+2643
%* \textjupiter -> \Jupiter (marvosym)
% U+2644 SATURN; \saturn (wasysym)
\DeclareTextCommand{\textsaturn}{PU}{\9046\104}%* U+2644
%* \textsaturn -> \Saturn (marvosym)
% U+2645 URANUS; \uranus (wasysym)
\DeclareTextCommand{\texturanus}{PU}{\9046\105}%* U+2645
%* \texturanus -> \Uranus (marvosym)
% U+2646 NEPTUNE; \neptune (wasysym)
\DeclareTextCommand{\textneptune}{PU}{\9046\106}%* U+2646
%* \textneptune -> \Neptune (marvosym)
% U+2647 PLUTO; \pluto (wasysym)
\DeclareTextCommand{\textpluto}{PU}{\9046\107}%* U+2647
%* \textpluto -> \Pluto (marvosym)
% U+2648 ARIES; \aries (wasysym)
\DeclareTextCommand{\textaries}{PU}{\9046\110}%* U+2648
%* \textaries -> \Aries (marvosym)
% U+2649 TAURUS; \taurus (wasysym)
\DeclareTextCommand{\texttaurus}{PU}{\9046\111}%* U+2649
%* \texttaurus -> \Taurus (marvosym)
% U+264A GEMINI; \gemini (wasysym)
\DeclareTextCommand{\textgemini}{PU}{\9046\112}%* U+264A
%* \textgemini -> \Gemini (marvosym)
% U+264B CANCER; \cancer (wasysym)
\DeclareTextCommand{\textcancer}{PU}{\9046\113}%* U+264B
%* \textcancer -> \Cancer (marvosym)
% U+264C LEO; \leo (wasysym)
\DeclareTextCommand{\textleo}{PU}{\9046\114}%* U+264C
%* \textleo -> \Leo (marvosym)
% U+264D VIRGO; \virgo (wasysym)
\DeclareTextCommand{\textvirgo}{PU}{\9046\115}%* U+264D
%* \textvirgo -> \Virgo (marvosym)
% U+264E LIBRA; \libra (wasysym)
\DeclareTextCommand{\textlibra}{PU}{\9046\116}%* U+264E
%* \textlibra -> \Libra (marvosym)
% U+264F SCORPIO; \scorpio (wasysym)
\DeclareTextCommand{\textscorpio}{PU}{\9046\117}%* U+264F
%* \textscorpio -> \Scorpio (marvosym)
% U+2650 SAGITTARIUS; \sagittarius (wasysym)
\DeclareTextCommand{\textsagittarius}{PU}{\9046\120}%* U+2650
%* \textsagittarius -> \Sagittarius (marvosym)
% U+2651 CAPRICORN; \capricornus (wasysym)
\DeclareTextCommand{\textcapricornus}{PU}{\9046\121}%* U+2651
%* \textcapricornus -> \Capricorn (marvosym)
% U+2652 AQUARIUS; \aquarius (wasysym)
\DeclareTextCommand{\textaquarius}{PU}{\9046\122}%* U+2652
%* \textaquarius -> \Aquarius (marvosym)
% U+2653 PISCES; \pisces (wasysym)
\DeclareTextCommand{\textpisces}{PU}{\9046\123}%* U+2653
%* \textpisces -> \Pisces (marvosym)
% U+2660 BLACK SPADE SUIT; spade, spadesuitblack; \spadesuit (LaTeX)
\DeclareTextCommand{\textspadesuitblack}{PU}{\9046\140}% U+2660
%* \textspadesuitblack -> \spadesuit (MnSymbol)
% U+2661 WHITE HEART SUIT; heartsuitwhite; \heartsuit (LaTeX)
\DeclareTextCommand{\textheartsuitwhite}{PU}{\9046\141}% U+2661
%* \textheartsuitwhite -> \Heart (marvosym)
%* \textheartsuitwhite -> \heartsuit (MnSymbol)
% U+2662 WHITE DIAMOND SUIT; diamondsuitwhite; \diamondsuit (LaTeX)
\DeclareTextCommand{\textdiamondsuitwhite}{PU}{\9046\142}% U+2662
%* \textdiamondsuitwhite -> \diamondsuit (MnSymbol)
% U+2663 BLACK CLUB SUIT; club, clubsuitblack; \clubsuit (LaTeX)
\DeclareTextCommand{\textclubsuitblack}{PU}{\9046\143}% U+2663
%* \textclubsuitblack -> \clubsuit (MnSymbol)
% U+2664 WHITE SPADE SUIT; spadesuitwhite
\DeclareTextCommand{\textspadesuitwhite}{PU}{\9046\144}% U+2664
% U+2665 BLACK HEART SUIT; heartsuitblack, heart
\DeclareTextCommand{\textheartsuitblack}{PU}{\9046\145}% U+2665
% U+2666 BLACK DIAMOND SUIT; diamond
\DeclareTextCommand{\textdiamondsuitblack}{PU}{\9046\146}% U+2666
% U+2667 WHITE CLUB SUIT; clubsuitwhite
\DeclareTextCommand{\textclubsuitwhite}{PU}{\9046\147}% U+2667
% U+2669 QUARTER NOTE; quarternote; \quarternote (wasysym, arev)
\DeclareTextCommand{\textquarternote}{PU}{\9046\151}%* U+2669
% U+266A EIGHTH NOTE; musicalnote; \textmusicalnote (textcomp)
\DeclareTextCommand{\textmusicalnote}{PU}{\9046\152}% U+266A
%* \textmusicalnote -> \eighthnote (wasysym, arev)
% U+266B BEAMED EIGHTH NOTES; eighthnotebeamed; \twonotes (wasysym)
\DeclareTextCommand{\texttwonotes}{PU}{\9046\153}%* U+266B
% U+266C BEAMED SIXTEENTH NOTES; beamedsixteenthnotes; \sixteenthnote (arev)
\DeclareTextCommand{\textsixteenthnote}{PU}{\9046\154}%* U+266C
% U+266D MUSIC FLAT SIGN; musicflatsign; \flat (LaTeX)
\DeclareTextCommand{\textflat}{PU}{\9046\155}%* U+266D
% U+266E MUSIC NATURAL SIGN; \natural (LaTeX)
\DeclareTextCommand{\textnatural}{PU}{\9046\156}%* U+266E
% U+266F MUSIC SHARP SIGN; musicsharpsign; \sharp (LaTeX)
\DeclareTextCommand{\textsharp}{PU}{\9046\157}%* U+266F
% U+2672 UNIVERSAL RECYCLING SYMBOL; \recycle (recycle)
\DeclareTextCommand{\textrecycle}{PU}{\9046\162}%* U+2672
%* \textrecycle -> \Recycling (marvosym)
% U+267F WHEELCHAIR SYMBOL; \Wheelchair (marvosym)
\DeclareTextCommand{\textWheelchair}{PU}{\9046\177}%* U+267F
% U+2691 BLACK FLAG; \Flag (ifsym)
\DeclareTextCommand{\textFlag}{PU}{\9046\221}%* U+2691
%* \textFlag -> \VarFlag (ifsym)
% U+2692 HAMMER AND PICK; \MineSign (marvosym)
\DeclareTextCommand{\textMineSign}{PU}{\9046\222}%* U+2692
% U+2694 CROSSED SWORDS; \dsmilitary (dictsym)
\DeclareTextCommand{\textdsmilitary}{PU}{\9046\224}%* U+2694
%* \textdsmilitary -> \textxswup (fourier)
% U+2695 STAFF OF AESCULAPIUS; \dsmedical (dictsym)
\DeclareTextCommand{\textdsmedical}{PU}{\9046\225}%* U+2695
% U+2696 SCALES; \dsjuridical (dictsym)
\DeclareTextCommand{\textdsjuridical}{PU}{\9046\226}%* U+2696
% U+2697 ALEMBIC; \dschemical (dictsym)
\DeclareTextCommand{\textdschemical}{PU}{\9046\227}%* U+2697
% U+2698 FLOWER; \dsbiological (dictsym)
\DeclareTextCommand{\textdsbiological}{PU}{\9046\230}%* U+2698
% U+269A STAFF OF HERMES; \dscommercial (dictsym)
\DeclareTextCommand{\textdscommercial}{PU}{\9046\232}%* U+269A
% U+269D OUTLINED WHITE STAR; \manstar (manfnt)
\DeclareTextCommand{\textmanstar}{PU}{\9046\235}%* U+269D
% U+26A0 WARNING SIGN; \danger (fourier)
\DeclareTextCommand{\textdanger}{PU}{\9046\240}%* U+26A0
% U+26A2 DOUBLED FEMALE SIGN; \FemaleFemale (marvosym)
\DeclareTextCommand{\textFemaleFemale}{PU}{\9046\242}%* U+26A2
% U+26A3 DOUBLED MALE SIGN; \MaleMale (marvosym)
\DeclareTextCommand{\textMaleMale}{PU}{\9046\243}%* U+26A3
% U+26A4 INTERLOCKED FEMALE AND MALE SIGN; \FemaleMale (marvosym)
\DeclareTextCommand{\textFemaleMale}{PU}{\9046\244}%* U+26A4
% U+26A5 MALE AND FEMALE SIGN; \Hermaphrodite (marvosym)
\DeclareTextCommand{\textHermaphrodite}{PU}{\9046\245}%* U+26A5
% U+26AA MEDIUM WHITE CIRCLE; \Neural (marvosym)
\DeclareTextCommand{\textNeutral}{PU}{\9046\252}%* U+26AA
% U+26AD MARRIAGE SYMBOL
\DeclareTextCommand{\textmarried}{PU}{\9046\255}% U+26AD
% U+26AE DIVORCE SYMBOL
\DeclareTextCommand{\textdivorced}{PU}{\9046\256}% U+26AE
% U+26B2 NEUTER; \textuncrfemale (tipx)
\DeclareTextCommand{\textPUuncrfemale}{PU}{\9046\262}% U+26B2
%* \textPUuncrfemale -> \textuncrfemale (tipx)
% U+26B9 SEXTILE; \hexstar (wasysym)
\DeclareTextCommand{\texthexstar}{PU}{\9046\271}%* U+26B9
% U+26BD SOCCER BALL; \Football (marvosym)
\DeclareTextCommand{\textSoccerBall}{PU}{\9046\275}% U+26BD
%* \textSoccerBall -> \Football (marvosym)
% U+26C5 SUN BEHIND CLOUD; \SunCloud (ifsym)
\DeclareTextCommand{\textSunCload}{PU}{\9046\305}%* U+26C5
% U+26C6 RAIN; \Rain (ifsym)
\DeclareTextCommand{\textRain}{PU}{\9046\306}%* U+26C6
% U+26D4 NO ENTRY; \noway (fourier)
\DeclareTextCommand{\textnoway}{PU}{\9046\324}%* U+26D4
% U+26F0 MOUNTAIN; \Mountain (ifsym)
\DeclareTextCommand{\textMountain}{PU}{\9046\360}%* U+26F0
% U+26FA TENT; \Tent (ifsym)
\DeclareTextCommand{\textTent}{PU}{\9046\372}%* U+26FA
%    \end{macrocode}
%
% \subsubsection{Dingbats: U+2700 to U+27BF}
%
%    \begin{macrocode}
% U+2701 UPPER BLADE SCISSORS; \ScissorRightBrokenBottom (bbding)
\DeclareTextCommand{\textScissorRightBrokenBottom}{PU}{\9047\001}% U+2701
%* \textScissorRightBrokenBottom -> \CutLeft (marvosym)
%* \textScissorRightBrokenBottom -> \Cutright (marvosym)
% U+2702 BLACK SCISSORS; \ScissorRight (bbding)
\DeclareTextCommand{\textScissorRight}{PU}{\9047\002}%* U+2702
%* \textScissorRight -> \RightScissors (marvosym)
%* \textScissorRight -> \Leftscissors (marvosym)
% U+2703 LOWER BLADE SCISSORS; \ScissorRightBrokenTop (bbding)
\DeclareTextCommand{\textScissorRightBrokenTop}{PU}{\9047\003}%* U+2703
% U+2704 WHITE SCISSORS; \ScissorHollowRight (bbding)
\DeclareTextCommand{\textScissorHollowRight}{PU}{\9047\004}%* U+2704
% U+2706 TELEPHONE LOCATION SIGN; \PhoneHandset (bbding)
\DeclareTextCommand{\textPhoneHandset}{PU}{\9047\006}%* U+2706
% U+2707 TAPE DRIVE; \Tape (bbding)
\DeclareTextCommand{\textTape}{PU}{\9047\007}%* U+2707
% U+2708 AIRPLANE; \Plane (bbding)
\DeclareTextCommand{\textPlane}{PU}{\9047\010}%* U+2708
% U+2709 ENVELOPE; \Envelope (bbding),
\DeclareTextCommand{\textEnvelope}{PU}{\9047\011}%* U+2709
%* \textEnvelope -> \Letter (marvosym)
% U+270C VICTORY HAND; \Peace (bbding)
\DeclareTextCommand{\textPeace}{PU}{\9047\014}%* U+270C
% U+270D WRITING HAND; \WritingHand (marvosym)
\DeclareTextCommand{\textWritingHand}{PU}{\9047\015}%* U+270D
%* \textWritingHand -> \Writinghand (marvosym)
% U+270E LOWER RIGHT PENCIL; \PencilRightDown (bbding)
\DeclareTextCommand{\textPencilRightDown}{PU}{\9047\016}%* U+270E
% U+270F PENCIL; \PencilRight (bbding)
\DeclareTextCommand{\textPencilRight}{PU}{\9047\017}%* U+270F
% U+2710 UPPER RIGHT PENCIL; \PencilRightUp (bbding)
\DeclareTextCommand{\textPencilRightUp}{PU}{\9047\020}%* U+2710
% U+2711 WHITE NIB; \NibRight (bbding)
\DeclareTextCommand{\textNibRight}{PU}{\9047\021}%* U+2711
% U+2712 BLACK NIB; \NibSolidRight (bbding)
\DeclareTextCommand{\textNibSolidRight}{PU}{\9047\022}%* U+2712
% U+2713 CHECK MARK; checkmark; \Checkmark (bbding)
\DeclareTextCommand{\textCheckmark}{PU}{\9047\023}%* U+2713
%* \textCheckmark -> \checkmark (MnSymbol)
% U+2714 HEAVY CHECK MARK; \CheckmarkBold (bbding)
\DeclareTextCommand{\textCheckmarkBold}{PU}{\9047\024}%* U+2714
% U+2715 MULTIPLICATION X; \XSolid (bbding)
\DeclareTextCommand{\textXSolid}{PU}{\9047\025}%* U+2715
% U+2716 HEAVY MULTIPLICATION X; \XSolidBold (bbding)
\DeclareTextCommand{\textXSolidBold}{PU}{\9047\026}%* U+2716
% U+2717 BALLOT X; \XSolidBrush (bbding)
\DeclareTextCommand{\textXSolidBrush}{PU}{\9047\027}%* U+2717
% U+2719 OUTLINED GREEK CROSS; \PlusOutline (bbding)
\DeclareTextCommand{\textPlusOutline}{PU}{\9047\031}%* U+2719
% U+271A HEAVY GREEK CROSS; \Plus (bbding)
\DeclareTextCommand{\textPlus}{PU}{\9047\032}%* U+271A
% U+271B OPEN CENTRE CROSS; \PlusThinCenterOpen (bbding)
\DeclareTextCommand{\textPlusThinCenterOpen}{PU}{\9047\033}%* U+271B
% U+271C HEAVY OPEN CENTRE CROSS; \PlusCenterOpen (bbding)
\DeclareTextCommand{\textPlusCenterOpen}{PU}{\9047\034}%* U+271C
% U+271D LATIN CROSS; \Cross (bbding)
\DeclareTextCommand{\textCross}{PU}{\9047\035}%* U+271D
% U+271E SHADOWED WHITE LATIN CROSS; \CrossOpenShadow (bbding)
\DeclareTextCommand{\textCrossOpenShadow}{PU}{\9047\036}%* U+271E
% U+271F OUTLINED LATIN CROSS; \CrossOutline (bbding)
\DeclareTextCommand{\textCrossOutline}{PU}{\9047\037}%* U+271F
% U+2720 MALTESE CROSS; \CrossMaltese (bbding)
\DeclareTextCommand{\textCrossMaltese}{PU}{\9047\040}%* U+2720
% U+2721 STAR OF DAVID; \DavidStar (bbding)
\DeclareTextCommand{\textDavidStar}{PU}{\9047\041}%* U+2721
%* \textDavidStar -> \davidstar (wasysym)
% U+2722 FOUR TEARDROP-SPOKED ASTERISK; \FourAsterisk (bbding)
\DeclareTextCommand{\textFourAsterisk}{PU}{\9047\042}%* U+2722
% U+2723 FOUR BALLOON-SPOKED ASTERISK; \JackStar (bbding)
\DeclareTextCommand{\textJackStar}{PU}{\9047\043}%* U+2723
% U+2724 HEAVY FOUR BALLOON-SPOKED ASTERISK; \JackStarBold (bbding)
\DeclareTextCommand{\textJackStarBold}{PU}{\9047\044}%* U+2724
% U+2725 FOUR CLUB-SPOKED ASTERISK; \CrossClowerTips (bbding)
\DeclareTextCommand{\textClowerTips}{PU}{\9047\045}%* U+2725
% U+2726 BLACK FOUR POINTED STAR; \FourStar (bbding)
\DeclareTextCommand{\textFourStar}{PU}{\9047\046}%* U+2726
% U+2727 WHITE FOUR POINTED STAR; \FourStarOpen (bbding)
\DeclareTextCommand{\textFourStarOpen}{PU}{\9047\047}%* U+2727
% U+272A CIRCLED WHITE STAR; \FiveStarOpenCircled (bbding)
\DeclareTextCommand{\textFiveStarOpenCircled}{PU}{\9047\052}%* U+272A
% U+272B OPEN CENTRE BLACK STAR; \FiveStarCenterOpen (bbding)
\DeclareTextCommand{\textFiveStarCenterOpen}{PU}{\9047\053}%* U+272B
% U+272C BLACK CENTRE WHITE STAR; \FiveStarOpenDotted (bbding)
\DeclareTextCommand{\textFiveStarOpenDotted}{PU}{\9047\054}%* U+272C
% U+272D OUTLINED BLACK STAR; \FiveStarOutline (bbding)
\DeclareTextCommand{\textFiveStarOutline}{PU}{\9047\055}%* U+272D
% U+272E HEAVY OUTLINED BLACK STAR; \FiveStarOutlineHeavy (bbding)
\DeclareTextCommand{\textFiveStarOutlineHeavy}{PU}{\9047\056}%* U+272E
% U+272F PINWHEEL STAR; \FiveStarConvex (bbding)
\DeclareTextCommand{\textFiveStarConvex}{PU}{\9047\057}%* U+272F
% U+2730 SHADOWED WHITE STAR; \FiveStarShadow (bbding)
\DeclareTextCommand{\textFiveStarShadow}{PU}{\9047\060}%* U+2730
% U+2731 HEAVY ASTERISK; \AsteriskBold (bbding)
\DeclareTextCommand{\textAsteriskBold}{PU}{\9047\061}%* U+2731
% U+2732 OPEN CENTRE ASTERISK; \AsteriskCenterOpen (bbding)
\DeclareTextCommand{\textAsteriskCenterOpen}{PU}{\9047\062}%* U+2732
% U+2734 EIGHT POINTED BLACK STAR; \EightStarTaper (bbding)
\DeclareTextCommand{\textEightStarTaper}{PU}{\9047\064}%* U+2734
% U+2735 EIGHT POINTED PINWHEEL STAR; \EightStarConvex (bbding)
\DeclareTextCommand{\textEightStarConvex}{PU}{\9047\065}%* U+2735
% U+2736 SIX POINTED BLACK STAR; \SixStar (bbding)
\DeclareTextCommand{\textSixStar}{PU}{\9047\066}%* U+2736
% U+2737 EIGHT POINTED RECTILINEAR BLACK STAR; \EightStar (bbding)
\DeclareTextCommand{\textEightStar}{PU}{\9047\067}%* U+2737
% U+2738 HEAVY EIGHT POINTED RECTILINEAR BLACK STAR; \EightStarBold (bbding)
\DeclareTextCommand{\textEightStarBold}{PU}{\9047\070}%* U+2738
% U+2739 TWELVE POINTED BLACK STAR; \TwelveStar (bbding)
\DeclareTextCommand{\textTwelveStar}{PU}{\9047\071}%* U+2739
% U+273A SIXTEEN POINTED ASTERISK; \SixteenStarLight (bbding)
\DeclareTextCommand{\textSixteenStarLight}{PU}{\9047\072}%* U+273A
% U+273B TEARDROP-SPOKED ASTERISK; \SixFlowerPetalRemoved (bbding)
\DeclareTextCommand{\textSixFlowerPetalRemoved}{PU}{\9047\073}%* U+273B
% U+273C OPEN CENTRE TEARDROP-SPOKED ASTERISK;
%   \SixFlowerOpenCenter (bbding)
\DeclareTextCommand{\textSixFlowerOpenCenter}{PU}{\9047\074}%* U+273C
% U+273D HEAVY TEARDROP-SPOKED ASTERISK; \Asterisk (bbding)
\DeclareTextCommand{\textAsterisk}{PU}{\9047\075}%* U+273D
% U+273E SIX PETALLED BLACK AND WHITE FLORETTE; \SixFlowerAlternate (bbding)
\DeclareTextCommand{\textSixFlowerAlternate}{PU}{\9047\076}%* U+273E
% U+273F BLACK FLORETTE; \FiveFlowerPetal (bbding)
\DeclareTextCommand{\textFiveFlowerPetal}{PU}{\9047\077}%* U+273F
% U+2740 WHITE FLORETTE; \FiveFlowerOpen (bbding)
\DeclareTextCommand{\textFiveFlowerOpen}{PU}{\9047\100}%* U+2740
% U+2741 EIGHT PETALLED OUTLINED BLACK FLORETTE; \EightFlowerPetal (bbding)
\DeclareTextCommand{\textEightFlowerPetal}{PU}{\9047\101}%* U+2741
% U+2742 CIRCLED OPEN CENTRE EIGHT POINTED STAR; \SunshineOpenCircled (bbding)
\DeclareTextCommand{\textSunshineOpenCircled}{PU}{\9047\102}%* U+2742
% U+2743 HEAVY TEARDROP-SPOKED PINWHEEL ASTERISK; \SixFlowerAltPetal (bbding)
\DeclareTextCommand{\textSixFlowerAltPetal}{PU}{\9047\103}%* U+2743
% U+2744 SNOWFLAKE; \SnowflakeChevron (bbding)
\DeclareTextCommand{\textSnowflakeChevron}{PU}{\9047\104}%* U+2744
% U+2745 TIGHT TRIFOLIATE SNOWFLAKE; \Snowflake (bbding)
\DeclareTextCommand{\textSnowflake}{PU}{\9047\105}%* U+2745
% U+2746 HEAVY CHEVRON SNOWFLAKE; \SnowflakeChevronBold (bbding)
\DeclareTextCommand{\textSnowflakeChevronBold}{PU}{\9047\106}%* U+2746
% U+2747 SPARKLE; \Sparkle (bbding)
\DeclareTextCommand{\textSparkle}{PU}{\9047\107}%* U+2747
% U+2748 HEAVY SPARKLE; \SparkleBold (bbding)
\DeclareTextCommand{\textSparkleBold}{PU}{\9047\110}%* U+2748
% U+2749 BALLOON-SPOKED ASTERISK; \AsteriskRoundedEnds (bbding)
\DeclareTextCommand{\textAsteriskRoundedEnds}{PU}{\9047\111}%* U+2749
% U+274A EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;
%   \EightFlowerPetalRemoved (bbding)
\DeclareTextCommand{\textEightFlowerPetalRemoved}{PU}{\9047\112}%* U+274A
% U+274B HEAVY EIGHT TEARDROP-SPOKED PROPELLER ASTERISK;
%   \EightAsterisk (bbding)
\DeclareTextCommand{\textEightAsterisk}{PU}{\9047\113}%* U+274B
% U+274D SHADOWED WHITE CIRCLE; \CircleShadow (bbding)
\DeclareTextCommand{\textCircleShadow}{PU}{\9047\115}%* U+274D
% U+274F LOWER RIGHT DROP-SHADOWED WHITE SQUARE;
%   \SquareShadowBottomRight (bbding)
\DeclareTextCommand{\textSquareShadowBottomRight}{PU}{\9047\117}%* U+274F
% U+2750 UPPER RIGHT DROP-SHADOWED WHITE SQUARE;
%   \SquareShadowTopRight (bbding)
\DeclareTextCommand{\textSquareTopRight}{PU}{\9047\120}%* U+2750
% U+2751 LOWER RIGHT SHADOWED WHITE SQUARE;
%   \SquareCastShadowBottomRight (bbding)
\DeclareTextCommand{\textSquareCastShadowBottomRight}{PU}{\9047\121}%* U+2751
% U+2752 UPPER RIGHT SHADOWED WHITE SQUARE;
%   \SquareCastShadowTopRight (bbding)
\DeclareTextCommand{\textSquareCastShadowTopRight}{PU}{\9047\122}%* U+2752
% U+2756 BLACK DIAMOND MINUS WHITE X; \OrnamentDiamondSolid (bbding)
\DeclareTextCommand{\textDiamondSolid}{PU}{\9047\126}%* U+2756
% U+2758 LIGHT VERTICAL BAR; \RectangleThin (bbding)
\DeclareTextCommand{\textRectangleThin}{PU}{\9047\130}%* U+2758
% U+2759 MEDIUM VERTICAL BAR; \Rectangle (bbding)
\DeclareTextCommand{\textRectangle}{PU}{\9047\131}%* U+2759
% U+275A HEAVY VERTICAL BAR; \RectangleBold (bbding)
\DeclareTextCommand{\textRectangleBold}{PU}{\9047\132}%* U+275A
%    \end{macrocode}
%
% \subsubsection{Miscellaneous Mathematical Symbols-A: U+27C0 to U+27EF}
%
%    \begin{macrocode}
% U+27C2 PERPENDICULAR; perpendicular; \perp (LaTeX)
\DeclareTextCommand{\textperp}{PU}{\9047\302}%* U+27C2
% \notperp (mathabx)
\DeclareTextCommand{\textnotperp}{PU}{\9047\302\83\070}%* U+27C2 U+0338
% U+27C7 OR WITH DOT INSIDE; \veedot (MnSymbol)
\DeclareTextCommand{\textveedot}{PU}{\9047\307}%* U+27C7
% U+27D1 AND WITH DOT; \wedgedot (MnSymbol)
\DeclareTextCommand{\textwedgedot}{PU}{\9047\321}%* U+27D1
% U+27DC LEFT MULTIMAP; \leftspoon (MnSymbol)
\DeclareTextCommand{\textleftspoon}{PU}{\9047\334}%* U+27DC
% U+27E6 MATHEMATICAL LEFT WHITE SQUARE BRACKET
\DeclareTextCommand{\textlbrackdbl}{PU}{\9047\346}%* U+27E6
%* \textlbrackdbl -> \llbracket (stmaryrd)
% U+27E7 MATHEMATICAL RIGHT WHITE SQUARE BRACKET
\DeclareTextCommand{\textrbrackdbl}{PU}{\9047\347}%* U+27E7
%* \textrbrackdbl -> \rrbracket (stmaryrd)
%    \end{macrocode}
%
% \subsubsection{Supplemental Arrows-A: U+27F0 to U+27FF}
%
%    \begin{macrocode}
% U+27F2 ANTICLOCKWISE GAPPED CIRCLE ARROW;
%   \circlearrowleft (AmS)
\DeclareTextCommand{\textcirclearrowleft}{PU}{\9047\362}%* U+27F2
% U+27F3 CLOCKWISE GAPPED CIRCLE ARROW; \circlearrowright (AmS)
\DeclareTextCommand{\textcirclearrowright}{PU}{\9047\363}%* U+27F3
% U+27F5 LONG LEFTWARDS ARROW; \longleftarrow (AmS)
\DeclareTextCommand{\textlongleftarrow}{PU}{\9047\365}%* U+27F5
% U+27F6 LONG RIGHTWARDS ARROW; \longrightarrow (AmS)
\DeclareTextCommand{\textlongrightarrow}{PU}{\9047\366}%* U+27F6
% U+27F7 LONG LEFT RIGHT ARROW; \longleftrightarrow (AmS)
\DeclareTextCommand{\textlongleftrightarrow}{PU}{\9047\367}%* U+27F7
% U+27F8 LONG LEFTWARDS DOUBLE ARROW; \Longleftarrow (AmS)
\DeclareTextCommand{\textLongleftarrow}{PU}{\9047\370}%* U+27F8
% U+27F9 LONG RIGHTWARDS DOUBLE ARROW; \Longrightarrow (AmS)
\DeclareTextCommand{\textLongrightarrow}{PU}{\9047\371}%* U+27F9
% U+27FA LONG LEFT RIGHT DOUBLE ARROW; \Longleftrightarrow (AmS)
\DeclareTextCommand{\textLongleftrightarrow}{PU}{\9047\372}%* U+27FA
% U+27FC LONG RIGHTWARDS ARROW FROM BAR; \longmapsto (AmS)
\DeclareTextCommand{\textlongmapsto}{PU}{\9047\374}%* U+27FC
% U+27FD LONG LEFTWARDS DOUBLE ARROW FROM BAR; \Longmapsfrom (stmaryrd)
\DeclareTextCommand{\textLongmapsfrom}{PU}{\9047\375}%* U+27FD
% U+27FE LONG RIGHTWARDS DOUBLE ARROW FROM BAR; \Longmapsto (stmaryrd)
\DeclareTextCommand{\textLongmapsto}{PU}{\9047\376}%* U+27FE
%    \end{macrocode}
%
% \subsubsection{Supplemental Arrows-B: U+2900 to U+297F}
%
%    \begin{macrocode}
% U+2921 NORTH WEST AND SOUTH EAST ARROW; \nwsearrow (MnSymbol)
\DeclareTextCommand{\textnwsearrow}{PU}{\9051\041}%* U+2921
% U+2922 NORTH EAST AND SOUTH WEST ARROW; \neswarrow (MnSymbol)
\DeclareTextCommand{\textneswarrow}{PU}{\9051\042}%* U+2922
% U+2923 NORTH WEST ARROW WITH HOOK; \lhooknwarrow (MnSymbol)
\DeclareTextCommand{\textlhooknwarrow}{PU}{\9051\043}%* U+2923
% U+2924 NORTH EAST ARROW WITH HOOK; \rhooknearrow (MnSymbol)
\DeclareTextCommand{\textrhooknearrow}{PU}{\9051\044}%* U+2924
% U+2925 SOUTH EAST ARROW WITH HOOK; \lhooksearrow (MnSymbol)
\DeclareTextCommand{\textlhooksearrow}{PU}{\9051\045}%* U+2925
% U+2926 SOUTH WEST ARROW WITH HOOK; \rhookswarrow (MnSymbol)
\DeclareTextCommand{\textrhookswarrow}{PU}{\9051\046}%* U+2926
% U+2933 WAVE ARROW POINTING DIRECTLY RIGHT; \leadsto (wasysym)
\DeclareTextCommand{\textleadsto}{PU}{\9051\063}%* U+2933
% U+2934 ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS;
%   \rcurvearrowne (MnSymbol)
\DeclareTextCommand{\textrcurvearrowne}{PU}{\9051\064}%* U+2934
% U+2935 ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS;
%   \lcurvearrowse (MnSymbol)
\DeclareTextCommand{\textlcurvearrowse}{PU}{\9051\065}%* U+2935
% U+2936 ARROW POINTING DOWNWARDS THEN CURVING LEFTWARDS;
%   \lcurvearrowsw (MnSymbol)
\DeclareTextCommand{\textlcurvearrowsw}{PU}{\9051\066}%* U+2936
% U+2937 ARROW POINTING DOWNWARDS THEN CURVING RIGHTWARDS;
%   \rcurvearrowse (MnSymbol)
\DeclareTextCommand{\textrcurvearrowse}{PU}{\9051\067}%* U+2937
% U+2938 RIGHT-SIDE ARC CLOCKWISE ARROW; \lcurvearrowdown (MnSymbol)
\DeclareTextCommand{\textlcurvearrowdown}{PU}{\9051\070}%* U+2938
%* \textlcurvearrowdown -> \RightTorque (marvosym)
%* \textlcurvearrowdown -> \Righttorque (marvosym)
% U+2939 LEFT-SIDE ARC ANTICLOCKWISE ARROW;
%   \rcurvearrowdown (MnSymbol)
\DeclareTextCommand{\textrcurvearrowdown}{PU}{\9051\071}%* U+2939
%* \textrcurvearrowdown -> \LeftTorque (marvosym)
%* \textrcurvearrowdown -> \Lefttorque (marvosym)
% U+293A TOP ARC ANTICLOCKWISE ARROW; \rcurvearrowleft (MnSymbol)
\DeclareTextCommand{\textrcurvearrowleft}{PU}{\9051\072}%* U+293A
% U+293B BOTTOM ARC ANTICLOCKWISE ARROW;
%   \rcurvearrowright (MnSymbol)
\DeclareTextCommand{\textrcurvearrowright}{PU}{\9051\073}%* U+293B
% U+294A LEFT BARB UP RIGHT BARB DOWN HARPOON; \leftrightharpoon (mathabx)
\DeclareTextCommand{\textleftrightharpoon}{PU}{\9051\112}%* U+294A
% U+294B LEFT BARB DOWN RIGHT BARB UP HARPOON; \rightleftharpoon (mathabx)
\DeclareTextCommand{\textrightleftharpoon}{PU}{\9051\113}%* U+294B
% U+294C UP BARB RIGHT DOWN BARB LEFT HARPOON;
%   \updownharpoonrightleft (MnSymbol)
\DeclareTextCommand{\textupdownharpoonrightleft}{PU}{\9051\114}%* U+294C
% U+294D UP BARB LEFT DOWN BARB RIGHT HARPOON;
%   \updownharpoonleftright (MnSymbol)
\DeclareTextCommand{\textupdownharpoonleftright}{PU}{\9051\115}%* U+294D
% U+2962 LEFTWARDS HARPOON WITH BARB UP ABOVE LEFTWARDS
%   HARPOON WITH BARB DOWN; \leftleftharpoons (mathabx)
\DeclareTextCommand{\textleftleftharpoons}{PU}{\9051\142}%* U+2962
% U+2963 UPWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS
%   HARPOON WITH BARB RIGHT; \upupharpoons (mathabx)
\DeclareTextCommand{\textupupharpoons}{PU}{\9051\143}%* U+2963
% U+2964 RIGHTWARDS HARPOON WITH BARB UP ABOVE RIGHTWARDS HARPOON
%   WITH BARB DOWN; \rightrightharpoons (mathabx)
\DeclareTextCommand{\textrightrightharpoons}{PU}{\9051\144}%* U+2964
% U+2965 DOWNWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON
%   WITH BARB RIGHT; \downdownharpoons (mathabx)
\DeclareTextCommand{\textdowndownharpoons}{PU}{\9051\145}%* U+2965
% U+296A LEFTWARDS HARPOON WITH BARB UP ABOVE LONG DASH;
%   \leftbarharpoon (mathabx)
\DeclareTextCommand{\textleftbarharpoon}{PU}{\9051\152}%* U+296A
% U+296B LEFTWARDS HARPOON WITH BARB DOWN BELOW
%   LONG DASH; \barleftharpoon (mathabx)
\DeclareTextCommand{\textbarleftharpoon}{PU}{\9051\153}%* U+296B
% U+296C RIGHTWARDS HARPOON WITH BARB UP ABOVE
%   LONG DASH; \rightbarharpoon (mathabx)
\DeclareTextCommand{\textrightbarharpoon}{PU}{\9051\154}%* U+296C
% U+296D RIGHTWARDS HARPOON WITH BARB DOWN BELOW
%   LONG DASH; \barrightharpoon (mathabx)
\DeclareTextCommand{\textbarrightharpoon}{PU}{\9051\155}%* U+296D
% U+296E UPWARDS HARPOON WITH BARB LEFT BESIDE DOWNWARDS HARPOON
%   WITH BARB RIGHT; \updownharpoons (mathabx)
\DeclareTextCommand{\textupdownharpoons}{PU}{\9051\156}%* U+296E
% U+296F DOWNWARDS HARPOON WITH BARB LEFT BESIDE UPWARDS HARPOON
%   WITH BARB RIGHT; \downupharpoons (mathabx)
\DeclareTextCommand{\textdownupharpoons}{PU}{\9051\157}%* U+296F
% U+297F DOWN FISH TAIL
\DeclareTextCommand{\textmoo}{PU}{\9051\177\83\066}%* U+297F U+0336
%    \end{macrocode}
%
% \subsubsection{Miscellaneous Mathematical Symbols-B: U+2980 to U+29FF}
%
%    \begin{macrocode}
% U+2987 Z NOTATION LEFT IMAGE BRACKET; \llparenthesis (stmaryrd)
\DeclareTextCommand{\textllparenthesis}{PU}{\9051\207}%* U+2987
% U+2988 Z NOTATION RIGHT IMAGE BRACKET; \rrparenthesis (stmaryrd)
\DeclareTextCommand{\textrrparenthesis}{PU}{\9051\210}%* U+2988
% U+29B0 REVERSED EMPTY SET; \invdiameter (wasysym)
\DeclareTextCommand{\textinvdiameter}{PU}{\9051\260}%* U+29B0
% U+29B6 CIRCLED VERTICAL BAR; \obar (stmaryrd)
\DeclareTextCommand{\textobar}{PU}{\9051\266}%* U+29B6
%* \textobar -> \textvarobar (stmaryrd)
% U+29B8 CIRCLED REVERSE SOLIDUS; \obslash (stmaryrd)
\DeclareTextCommand{\textobslash}{PU}{\9051\270}%* U+29B8
%* \textobslash -> \circledbslash (txfonts/pxfonts)
%* \textobslash -> \obackslash (mathabx)
%* \textobslash -> \varobslash (stmaryrd)
% U+29BA CIRCLE DIVIDED BY HORIZONTAL BAR AND TOP HALF
%   DIVIDED BY VERTICAL BAR; \obot (mathabx)
\DeclareTextCommand{\textobot}{PU}{\9051\272}%* U+29BA
%* \textobot -> \odplus (ulsy)
% U+29BB CIRCLE WITH SUPERIMPOSED X; \NoChemicalCleaning (marvosym)
\DeclareTextCommand{\textNoChemicalCleaning}{PU}{\9051\273}%* U+29BB
% U+29C0 CIRCLED LESS-THAN; \olessthan (stmaryrd)
\DeclareTextCommand{\textolessthan}{PU}{\9051\300}%* U+29C0
%* \textolessthan -> \varolessthan (stmaryrd)
% U+29C1 CIRCLED GREATER-THAN; \ogreaterthan (stmaryrd)
\DeclareTextCommand{\textogreaterthan}{PU}{\9051\301}%* U+29C1
%* \textogreaterthan -> \varogreaterthan (stmaryrd)
% U+29C4 SQUARED RISING DIAGONAL SLASH; \boxslash (mathabx, stmaryrd)
\DeclareTextCommand{\textboxslash}{PU}{\9051\304}%* U+29C4
% U+29C5 SQUARED FALLING DIAGONAL SLASH; \boxbslash (stmaryrd)
\DeclareTextCommand{\textboxbslash}{PU}{\9051\305}%* U+29C5
% U+29C6 SQUARED ASTERISK; \boxast (stmaryrd)
\DeclareTextCommand{\textboxast}{PU}{\9051\306}%* U+29C6
% U+29C7 SQUARED SMALL CIRCLE; \boxcircle (stmaryrd)
\DeclareTextCommand{\textboxcircle}{PU}{\9051\307}%* U+29C7
% U+29C8 SQUARED SQUARE; \boxbox (stmaryrd)
\DeclareTextCommand{\textboxbox}{PU}{\9051\310}%* U+29C8
% U+29D3 BLACK BOWTIE; \Valve (marvosym)
\DeclareTextCommand{\textValve}{PU}{\9051\323}%* U+29D3
% U+29DF DOUBLE-ENDED MULTIMAP; \multimapboth (txfonts/pxfonts)
\DeclareTextCommand{\textmultimapboth}{PU}{\9051\337}%* U+29DF
% U+29E2 SHUFFLE PRODUCT; \shuffle (shuffle)
\DeclareTextCommand{\textshuffle}{PU}{\9051\342}%* U+29E2
%    \end{macrocode}
%
% \subsubsection{Supplemental Mathematical Operators: U+2A00 to U+2AFF}
%
%    \begin{macrocode}
% U+2A04 N-ARY UNION OPERATOR WITH PLUS; \uplus (LaTeX)
\DeclareTextCommand{\textuplus}{PU}{\9052\004}%* U+2A04
% U+2A07 TWO LOGICAL AND OPERATOR; \bigdoublewedge (MnSymbol)
\DeclareTextCommand{\textbigdoublewedge}{PU}{\9052\007}%* U+2A07
% U+2A08 TWO LOGICAL OR OPERATOR; \bigdoublevee (MnSymbol)
\DeclareTextCommand{\textbigdoublevee}{PU}{\9052\010}%* U+2A08
% U+2A1D JOIN; \Join (latexsym, amsfonts, amssymb, mathabx, txfonts,
%   pxfonts, wasysym)
\DeclareTextCommand{\textJoin}{PU}{\9052\035}%* U+2A1D
% U+2A1F Z NOTATION SCHEMA COMPOSITION; \fatsemi (stmaryrd)
\DeclareTextCommand{\textfatsemi}{PU}{\9052\037}%* U+2A1F
% U+2A22 PLUS SIGN WITH SMALL CIRCLE ABOVE; \circplus (mathabx)
\DeclareTextCommand{\textcircplus}{PU}{\9052\042}%* U+2A22
% U+2A2A MINUS SIGN WITH DOT BELOW; \minusdot (MnSymbol)
\DeclareTextCommand{\textminusdot}{PU}{\9052\052}%* U+2A2A
%* \textminusdot -> \divdot (mathabx)
% U+2A30 MULTIPLICATION SIGN WITH DOT ABOVE; \dottimes (mathabx)
\DeclareTextCommand{\textdottimes}{PU}{\9052\060}%* U+2A30
% U+2A32 SEMIDIRECT PRODUCT WITH BOTTOM CLOSED;
%   \dtimes (mathdesign)
\DeclareTextCommand{\textdtimes}{PU}{\9052\062}%* U+2A32
% U+2A38 CIRCLED DIVISION SIGN; \odiv (mathabx)
\DeclareTextCommand{\textodiv}{PU}{\9052\070}%* U+2A38
% U+2A3C INTERIOR PRODUCT; \invneg (MnSymbol)
\DeclareTextCommand{\textinvneg}{PU}{\9052\074}%* U+2A3C
% U+2A4E DOUBLE SQUARE INTERSECTION; \sqdoublecap (mathabx)
\DeclareTextCommand{\textsqdoublecap}{PU}{\9052\116}%* U+2A4E
%* \textsqdoublecap -> \doublesqcap (MnSymbol)
% U+2A40 INTERSECTION WITH DOT; \capdot (MnSymbol)
\DeclareTextCommand{\textcapdot}{PU}{\9052\100}%* U+2A40
% U+2A4F DOUBLE SQUARE UNION; \sqdoublecup (mathabx)
\DeclareTextCommand{\textsqdoublecup}{PU}{\9052\117}%* U+2A4F
%* \textsqdoublecup -> \doublesqcup (MnSymbol)
% U+2A55 TWO INTERSECTING LOGICAL AND; \doublewedge (MnSymbol)
\DeclareTextCommand{\textdoublewedge}{PU}{\9052\125}%* U+2A55
% U+2A56 TWO INTERSECTING LOGICAL OR; \doublevee (MnSymbol
\DeclareTextCommand{\textdoublevee}{PU}{\9052\126}%* U+2A56
%* \textdoublevee -> \merge (stmaryrd)
% U+2A5E LOGICAL AND WITH DOUBLE OVERBAR;
%   \doublebarwedge (AmS)
\DeclareTextCommand{\textdoublebarwedge}{PU}{\9052\136}%* U+2A5E
% U+2A63 LOGICAL OR WITH DOUBLE UNDERBAR;
%   \veedoublebar (mahtabx)
\DeclareTextCommand{\textveedoublebar}{PU}{\9052\143}%* U+2A63
% U+2A66 EQUALS SIGN WITH DOT BELOW; \eqdot (MnSymbol)
\DeclareTextCommand{\texteqdot}{PU}{\9052\146}%* U+2A66
% \neqdot (MnSymbol)
\DeclareTextCommand{\textneqdot}{PU}{\9052\146\83\070}%* U+2A66 U+0338
% U+2A74 DOUBLE COLON EQUAL; \coloncolonequals (colonequals)
\DeclareTextCommand{\textcoloncolonequals}{PU}{\9052\164}%* U+2A74
% U+2A7D LESS-THAN OR SLANTED EQUAL TO; \leqslant (AmS)
\DeclareTextCommand{\textleqslant}{PU}{\9052\175}%* U+2A7D
% \nleqslant (txfonts/pxfonts)
\DeclareTextCommand{\textnleqslant}{PU}{\9052\175\83\070}%* U+2A7D U+0338
% U+2A7E GREATER-THAN OR SLANTED EQUAL TO; \geqslant (AmS)
\DeclareTextCommand{\textgeqslant}{PU}{\9052\176}%* U+2A7E
% \ngeqslang (txfonts/pxfonts)
\DeclareTextCommand{\textngeqslant}{PU}{\9052\176\83\070}%* U+2A7E U+0338
% U+2A85 LESS-THAN OR APPROXIMATE; \lessapprox (AmS)
\DeclareTextCommand{\textlessapprox}{PU}{\9052\205}%* U+2A85
% \nlessapprox (txfonts/pxfonts)
\DeclareTextCommand{\textnlessapprox}{PU}{\9052\205\83\070}%* U+2A85 U+0338
% U+2A86 GREATER-THAN OR APPROXIMATE; \gtrapprox (AmS)
\DeclareTextCommand{\textgtrapprox}{PU}{\9052\206}%* U+2A86
% \ngtrapprox (txfonts/pxfonts)
\DeclareTextCommand{\textngtrapprox}{PU}{\9052\206\83\070}%* U+2A86 U+0338
% U+2A87 LESS-THAN AND SINGLE-LINE NOT EQUAL TO; \lneq (AmS)
\DeclareTextCommand{\textlneq}{PU}{\9052\207}%* U+2A87
% U+2A88 GREATER-THAN AND SINGLE-LINE NOT EQUAL TO;
%   \gneq (AmS)
\DeclareTextCommand{\textgneq}{PU}{\9052\210}%* U+2A88
% U+2A89 LESS-THAN AND NOT APPROXIMATE; \lnapprox (AmS)
\DeclareTextCommand{\textlnapprox}{PU}{\9052\211}%* U+2A89
% U+2A8A GREATER-THAN AND NOT APPROXIMATE; \gnapprox (AmS)
\DeclareTextCommand{\textgnapprox}{PU}{\9052\212}%* U+2A8A
% U+2A8B LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN;
%   \lesseqqgtr (AmS)
\DeclareTextCommand{\textlesseqqgtr}{PU}{\9052\213}%* U+2A8B
% U+2A8C GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN;
%   \gtreqqless (AmS)
\DeclareTextCommand{\textgtreqqless}{PU}{\9052\214}%* U+2A8C
% U+2A95 SLANTED EQUAL TO OR LESS-THAN; \eqslantless (AmS)
\DeclareTextCommand{\texteqslantless}{PU}{\9052\225}%* U+2A95
% U+2A96 SLANTED EQUAL TO OR GREATER-THAN; \eqslantgtr (AmS)
\DeclareTextCommand{\texteqslantgtr}{PU}{\9052\226}%* U+2A96
% U+2AA6 LESS-THAN CLOSED BY CURVE; \leftslice (stmaryrd)
\DeclareTextCommand{\textleftslice}{PU}{\9052\246}%* U+2AA6
% U+2AA7 GREATER-THAN CLOSED BY CURVE; \rightslice (stmaryrd)
\DeclareTextCommand{\textrightslice}{PU}{\9052\247}%* U+2AA7
% U+2AAF PRECEDES ABOVE SINGLE-LINE EQUALS SIGN; \preceq (MnSymbol)
\DeclareTextCommand{\textpreceq}{PU}{\9052\257}%* U+2AAF
% \npreceq (txfonts/pxfonts)
\DeclareTextCommand{\textnpreceq}{PU}{\9052\257\83\070}%* U+2AAF U+0338
% U+2AB0 SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN; \succeq (MnSymbol)
\DeclareTextCommand{\textsucceq}{PU}{\9052\260}%* U+2AB0
% \nsucceq (txfonts/pxfonts)
\DeclareTextCommand{\textnsucceq}{PU}{\9052\260\83\070}%* U+2AB0 U+0338
% U+2AB1 PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO; \precneq (mathabx)
\DeclareTextCommand{\textprecneq}{PU}{\9052\261}%* U+2AB1
% U+2AB2 SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO; \succneq (mathabx)
\DeclareTextCommand{\textsuccneq}{PU}{\9052\262}%* U+2AB2
% U+2AB3 PRECEDES ABOVE EQUALS SIGN; \preceqq (txfonts/pxfonts)
\DeclareTextCommand{\textpreceqq}{PU}{\9052\263}%* U+2AB3
% \npreceqq (txfonts/pxfonts)
\DeclareTextCommand{\textnpreceqq}{PU}{\9052\263\83\070}%* U+2AB3 U+0338
% U+2AB4 SUCCEEDS ABOVE EQUALS SIGN; \succeqq (txfonts/pxfonts)
\DeclareTextCommand{\textsucceqq}{PU}{\9052\264}%* U+2AB4
% \nsucceqq (txfonts/pxfonts)
\DeclareTextCommand{\textnsucceqq}{PU}{\9052\264\83\070}%* U+2AB4 U+0338
% U+2AB5 PRECEDES ABOVE NOT EQUAL TO; \precneqq (txfonts/pxfonts)
\DeclareTextCommand{\textprecneqq}{PU}{\9052\265}%* U+2AB5
% U+2AB6 SUCCEEDS ABOVE NOT EQUAL TO; \succneqq (txfonts/pxfonts)
\DeclareTextCommand{\textsuccneqq}{PU}{\9052\266}%* U+2AB6
% U+2AB7 PRECEDES ABOVE ALMOST EQUAL TO; \precapprox (AmS)
\DeclareTextCommand{\textprecapprox}{PU}{\9052\267}%* U+2AB7
% \nprecapprox (txfonts/pxfonts)
\DeclareTextCommand{\textnprecapprox}{PU}{\9052\267\83\070}%* U+2AB7 U+0338
% U+2AB8 SUCCEEDS ABOVE ALMOST EQUAL TO; \succapprox (AmS)
\DeclareTextCommand{\textsuccapprox}{PU}{\9052\270}%* U+2AB8
% \nsuccapprox (txfonts/pxfonts)
\DeclareTextCommand{\textnsuccapprox}{PU}{\9052\270\83\070}%* U+2AB8 U+0338
% U+2AB9 PRECEDES ABOVE NOT ALMOST EQUAL TO; \precnapprox (AmS)
\DeclareTextCommand{\textprecnapprox}{PU}{\9052\271}%* U+2AB9
% U+2ABA SUCCEEDS ABOVE NOT ALMOST EQUAL TO; \succnapprox (AmS)
\DeclareTextCommand{\textsuccnapprox}{PU}{\9052\272}%* U+2ABA
% U+2AC5 SUBSET OF ABOVE EQUALS SIGN; \subseteqq (AmS)
\DeclareTextCommand{\textsubseteqq}{PU}{\9052\305}%* U+2AC5
% \nsubseteqq (txfonts/pxfonts, mathabx)
\DeclareTextCommand{\textnsubseteqq}{PU}{\9052\305\83\070}%* U+2AC5 U+0338
% U+2AC6 SUPERSET OF ABOVE EQUALS SIGN; \supseteqq (AmS)
\DeclareTextCommand{\textsupseteqq}{PU}{\9052\306}%* U+2AC6
% \nsupseteqq (mathabx)
\DeclareTextCommand{\textnsupseteqq}{PU}{\9052\306\83\070}%* U+2AC6 U+0338
% U+2AE3 DOUBLE VERTICAL BAR LEFT TURNSTILE
\DeclareTextCommand{\textdashV}{PU}{\9052\343}%* U+2AE3
%* \textdashV -> \leftVdash (MnSymbol)
% \ndashV (mathabx)
\DeclareTextCommand{\textndashV}{PU}{\9052\343\83\070}%* U+2AE3 U+0338
%* \textndashV -> \nleftVdash (MnSymbol)
% U+2AE4 VERTICAL BAR DOUBLE LEFT TURNSTILE; \Dashv (mathabx)
\DeclareTextCommand{\textDashv}{PU}{\9052\344}%* U+2AE4
%* \textDashv -> \leftmodels (MnSymbol)
% \nDashv (mathabx)
\DeclareTextCommand{\textnDashv}{PU}{\9052\344\83\070}%* U+2AE4 U+0338
%* \textnDashv -> \nleftmodels (MnSymbol)
% U+2AE5 DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE;
%   \DashV (mathabx)
\DeclareTextCommand{\textDashV}{PU}{\9052\345}%* U+2AE5
%* \textDashV -> \leftModels (MnSymbol)
% \nDashV (mathabx)
\DeclareTextCommand{\textnDashV}{PU}{\9052\345\83\070}%* U+2AE5 U+0338
%* \textnDashV -> \nleftModels (MnSymbol)
% U+2AEA DOUBLE DOWN TACK; \downmodels (MnSymbol)
\DeclareTextCommand{\textdownmodels}{PU}{\9052\352}%* U+2AEA
% \ndownmodels (MnSymbol)
\DeclareTextCommand{\textndownmodels}{PU}{\9052\352\83\070}%* U+2AEA U+0338
% U+2AEB DOUBLE UP TACK; \upmodels (MnSymbol)
\DeclareTextCommand{\textupmodels}{PU}{\9052\353}%* U+2AEB
% \nupmodels (MnSymbol)
\DeclareTextCommand{\textnupmodels}{PU}{\9052\353\83\070}%* U+2AEB U+0338
% U+2AEF VERTICAL LINE WITH CIRCLE ABOVE; \upspoon (MnSymbol)
\DeclareTextCommand{\textupspoon}{PU}{\9052\357}%* U+2AEF
% U+2AF4 TRIPLE VERTICAL BAR BINARY RELATION;
%   \interleave (stmaryrd)
\DeclareTextCommand{\textinterleave}{PU}{\9052\364}%* U+2AF4
% U+2AFD DOUBLE SOLIDUS OPERATOR; \sslash (stmaryrd)
\DeclareTextCommand{\textsslash}{PU}{\9052\375}%* U+2AFD
%* \textsslash -> \varparallel (txfonts\pxfonts)
%    \end{macrocode}
%
% \subsubsection{Miscellaneous Symbols and Arrows: U+2B00 to U+2BFF}
%
%    \begin{macrocode}
% U+2B20 WHITE PENTAGON; \pentagon (wasysym)
\DeclareTextCommand{\textpentagon}{PU}{\9053\040}%* U+2B20
% U+2B21 WHITE HEXAGON; \varhexagon (wasysym)
\DeclareTextCommand{\textvarhexagon}{PU}{\9053\041}%* U+2B21
%    \end{macrocode}
%
% \subsubsection{Latin Extended-C: U+2C60 to U+2C7F}
%
%    \begin{macrocode}
% U+2C7C LATIN SUBSCRIPT SMALL LETTER J
\DeclareTextCommand{\textjinferior}{PU}{\9054\174}%* U+2C7C
%    \end{macrocode}
%
% \subsubsection{Supplemental Punctuation: U+2E00 to U+2E7F}
%
%    \begin{macrocode}
% U+2E13 DOTTED OBELOS; \slashdiv (MnSymbol)
\DeclareTextCommand{\textslashdiv}{PU}{\9056\023}%* U+2E13
% U+2E18 INVERTED INTERROBANG; \textinterrobangdown (textcomp)
\DeclareTextCommand{\textinterrobangdown}{PU}{\9056\030}% U+2E18
% U+2E2D FIVE DOT MARK; \fivedots (MnSymbol)
\DeclareTextCommand{\textfivedots}{PU}{\9056\055}%* U+2E2D
%    \end{macrocode}
%
% \subsubsection{Modifier Tone Letters: U+A700 to U+A71F}
%
%    \begin{macrocode}
% U+A71B MODIFIER LETTER RAISED UP ARROW; \textupstep (tipa)
\DeclareTextCommand{\textupstep}{PU}{\9247\033}% U+A71B
% U+A71C MODIFIER LETTER RAISED DOWN ARROW;
%   \textdownstep (tipa)
\DeclareTextCommand{\textdownstep}{PU}{\9247\034}% U+A71C
%    \end{macrocode}
%
% \subsubsection{Latin Extended-D: U+A720 to U+A7FF}
%
%    \begin{macrocode}
% U+A727 LATIN SMALL LETTER HENG; \textheng (tipx)
\DeclareTextCommand{\textPUheng}{PU}{\9247\047}% U+A727
%* \textPUheng -> \textheng (tipx)
% U+A72C LATIN CAPITAL LETTER CUATRILLO; \textlhookfour (tipx)
\DeclareTextCommand{\textPUlhookfour}{PU}{\9247\054}% U+A72C
%* \textPUlhookfour -> \textlhookfour (tipx)
% U+A730 LATIN LETTER SMALL CAPITAL F; \textscf (tipx)
\DeclareTextCommand{\textPUscf}{PU}{\9247\060}% U+A730
%* \textPUscf -> \textscf (tipx)
% U+A735 LATIN SMALL LETTER AO; \textaolig (tipx)
\DeclareTextCommand{\textPUaolig}{PU}{\9247\065}% U+A735
%* \textPUaolig -> \textaolig (tipx)
% U+A74F LATIN SMALL LETTER OO; \oo (wsuipa)
\DeclareTextCommand{\textoo}{PU}{\9247\117}%* U+A74F
% U+A788 MODIFIER LETTER LOW CIRCUMFLEX ACCENT
\DeclareTextCommand{\textcircumlow}{PU}{\9247\210}% U+A788
%    \end{macrocode}
%
% \subsubsection{Alphabetic Presentation Forms: U+FB00 to U+FB4F}
%
%    \begin{macrocode}
% U+FB01 LATIN SMALL LIGATURE FI; fi
\DeclareTextCommand{\textfi}{PU}{\9373\001}% U+FB01
% U+FB02 LATIN SMALL LIGATURE FL; fl
\DeclareTextCommand{\textfl}{PU}{\9373\002}% U+FB02
%    \end{macrocode}
%
% \subsubsection{Musical Symbols: U+1D100 to U+1D1FF}
%
%    \begin{macrocode}
% U+1D13B MUSICAL SYMBOL WHOLE REST; \GaPa (harmony)
\DeclareTextCommand{\textGaPa}{PU}{\9330\064\9335\073}%* U+1D13B
% U+1D13C MUSICAL SYMBOL HALF REST; \HaPa (harmony)
\DeclareTextCommand{\textHaPa}{PU}{\9330\064\9335\074}%* U+1D13C
% U+1D13D MUSICAL SYMBOL QUARTER REST; \ViPa (harmony)
\DeclareTextCommand{\textViPa}{PU}{\9330\064\9335\075}%* U+1D13D
% U+1D13E MUSICAL SYMBOL EIGHTH REST; \AcPa (harmony)
\DeclareTextCommand{\textAcPa}{PU}{\9330\064\9335\076}%* U+1D13E
% U+1D13F MUSICAL SYMBOL SIXTEENTH REST; \SePa (harmony)
\DeclareTextCommand{\textSePa}{PU}{\9330\064\9335\077}%* U+1D13F
% U+1D140 MUSICAL SYMBOL THIRTY-SECOND REST; \ZwPa (harmony)
\DeclareTextCommand{\textZwPa}{PU}{\9330\064\9335\100}%* U+1D140
% U+1D15D MUSICAL SYMBOL WHOLE NOTE; \fullnote (wasysym)
\DeclareTextCommand{\textfullnote}{PU}{\9330\064\9335\135}%* U+1D15D
%* \textfullnote -> \Ganz (harmony)
% U+1D15E MUSICAL SYMBOL HALF NOTE; \halfnote (wasysym)
\DeclareTextCommand{\texthalfnote}{PU}{\9330\064\9335\136}%* U+1D15E
%* \texthalfnote -> \Halb (harmony)
% U+1D15F MUSICAL SYMBOL QUARTER NOTE; \Vier (harmony)
\DeclareTextCommand{\textVier}{PU}{\9330\064\9335\137}%* U+1D15F
% U+1D160 MUSICAL SYMBOL EIGHTH NOTE; \Acht (harmony)
\DeclareTextCommand{\textAcht}{PU}{\9330\064\9335\140}%* U+1D160
% U+1D161 MUSICAL SYMBOL SIXTEENTH NOTE; \Sech (harmony)
\DeclareTextCommand{\textSech}{PU}{\9330\064\9335\141}%* U+1D161
% U+1D162 MUSICAL SYMBOL THIRTY-SECOND NOTE; \Zwdr (harmony)
\DeclareTextCommand{\textZwdr}{PU}{\9330\064\9335\142}%* U+1D162
%    \end{macrocode}
%
% \subsubsection{Miscellaneous Symbols and Pictographs: U+1F300 to U+1F5FF}
%
%    \begin{macrocode}
% U+1F30D EARTH GLOBE EUROPE-AFRICA; \Mundus (marvosym)
\DeclareTextCommand{\textMundus}{PU}{\9330\074\9337\015}%* U+1F30D
% U+1F319 CRESCENT MOON; \Moon (marvosym)
\DeclareTextCommand{\textMoon}{PU}{\9330\074\9337\031}%* U+1F319
% U+1F468 MAN; \ManFace (marvosym)
\DeclareTextCommand{\textManFace}{PU}{\9330\075\9334\150}%* U+1F468
% U+1F469 WOMAN; \WomanFace (marvosym)
\DeclareTextCommand{\textWomanFace}{PU}{\9330\075\9334\151}%* U+1F469
%* \textWomanFace -> \Womanface (marvosym)
% U+1F4E0 FAX MACHINE; \Fax (marvosym)
\DeclareTextCommand{\textFax}{PU}{\9330\075\9334\340}%* U+1F4E0
%* \textFax -> \Faxmachine (marvosym)
% U+1F525 FIRE; \Fire (ifsym)
\DeclareTextCommand{\textFire}{PU}{\9330\075\9335\045}%* U+1F525
%    \end{macrocode}
%
% \subsubsection{Transport and Map Symbols: U+1F680 to U+1F6FF}
%
%    \begin{macrocode}
% U+1F6B2 BICYCLE; \Bicycle (marvosym)
\DeclareTextCommand{\textBicycle}{PU}{\9330\075\9336\262}%* U+1F6B2
% U+1F6B9 MENS SYMBOL; \Gentsroom (marvosym)
\DeclareTextCommand{\textGentsroom}{PU}{\9330\075\9336\271}%* U+1F6B9
% U+1F6BA WOMENS SYMBOL; \Ladiesroom (marvosym)
\DeclareTextCommand{\textLadiesroom}{PU}{\9330\075\9336\272}%* U+1F6BA
%    \end{macrocode}
%
% \subsubsection{Miscellaneous}
%
%    \begin{macrocode}
\DeclareTextCommand{\SS}{PU}{SS}%
% \textcopyleft (textcomp)
\DeclareTextCommand{\textcopyleft}{PU}{\9041\204\9040\335}% U+2184 U+20DD
% \ccnc (cclicenses)
\DeclareTextCommand{\textccnc}{PU}{\80\044\9040\340}%* U+0024 U+20E0
% \ccnd (cclicenses)
\DeclareTextCommand{\textccnd}{PU}{=\9040\335}%* U+003D U+20DD
% \ccsa (cclicenses)
\DeclareTextCommand{\textccsa}{PU}{\9047\362\9040\335}%* U+27F2 U+20DD
% \Info (marvosym, china2e)
\DeclareTextCommand{\textInfo}{PU}{\9330\065\9334\042\9040\336}%* U+1D422 U+20DE
% \CESign (marvosym)
\DeclareTextCommand{\textCESign}{PU}{\80\103\80\105}%* U+0043 U+0045
%* \textCESign -> \CEsign (marvosym)
%    \end{macrocode}
%
% \subsubsection{Aliases}
%
%    Aliases (german.sty)
%    \begin{macrocode}
\DeclareTextCommand{\textglqq}{PU}{\quotedblbase}%
\DeclareTextCommand{\textgrqq}{PU}{\textquotedblleft}%
\DeclareTextCommand{\textglq}{PU}{\quotesinglbase}%
\DeclareTextCommand{\textgrq}{PU}{\textquoteleft}%
\DeclareTextCommand{\textflqq}{PU}{\guillemetleft}%
\DeclareTextCommand{\textfrqq}{PU}{\guillemetright}%
\DeclareTextCommand{\textflq}{PU}{\guilsinglleft}%
\DeclareTextCommand{\textfrq}{PU}{\guilsinglright}%
%    \end{macrocode}
%    Aliases (math names)
%    \begin{macrocode}
\DeclareTextCommand{\textneg}{PU}{\textlogicalnot}%*
\DeclareTextCommand{\texttimes}{PU}{\textmultiply}%*
\DeclareTextCommand{\textdiv}{PU}{\textdivide}%*
\DeclareTextCommand{\textpm}{PU}{\textplusminus}%*
\DeclareTextCommand{\textcdot}{PU}{\textperiodcentered}%*
%    \end{macrocode}
%
%    \begin{macrocode}
%</puenc>
%    \end{macrocode}
%
% \subsection{PU encoding, additions for Vn\TeX}
%
%    This file is provided by Han The Thanh.
%
%    \begin{macrocode}
%<*puvnenc>
%    \end{macrocode}
%    \begin{macrocode}
\DeclareTextCommand{\abreve}{PU}{\81\003}% U+0103
\DeclareTextCommand{\acircumflex}{PU}{\80\342}% U+00E2
\DeclareTextCommand{\ecircumflex}{PU}{\80\352}% U+00EA
\DeclareTextCommand{\ocircumflex}{PU}{\80\364}% U+00F4
\DeclareTextCommand{\ohorn}{PU}{\81\241}% U+01A1
\DeclareTextCommand{\uhorn}{PU}{\81\260}% U+01B0
\DeclareTextCommand{\ABREVE}{PU}{\81\002}% U+0102
\DeclareTextCommand{\ACIRCUMFLEX}{PU}{\80\302}% U+00C2
\DeclareTextCommand{\ECIRCUMFLEX}{PU}{\80\312}% U+00CA
\DeclareTextCommand{\OCIRCUMFLEX}{PU}{\80\324}% U+00D4
\DeclareTextCommand{\OHORN}{PU}{\81\240}% U+01A0
\DeclareTextCommand{\UHORN}{PU}{\81\257}% U+01AF
%    \end{macrocode}
%    \begin{macrocode}
\DeclareTextCompositeCommand{\'}{PU}{a}{\80\341}% U+00E1
\DeclareTextCompositeCommand{\d}{PU}{a}{\9036\241}% U+1EA1
\DeclareTextCompositeCommand{\`}{PU}{a}{\80\340}% U+00E0
\DeclareTextCompositeCommand{\h}{PU}{a}{\9036\243}% U+1EA3
\DeclareTextCompositeCommand{\~}{PU}{a}{\80\343}% U+00E3
\DeclareTextCompositeCommand{\'}{PU}{\abreve}{\9036\257}% U+1EAF
\DeclareTextCompositeCommand{\d}{PU}{\abreve}{\9036\267}% U+1EB7
\DeclareTextCompositeCommand{\`}{PU}{\abreve}{\9036\261}% U+1EB1
\DeclareTextCompositeCommand{\h}{PU}{\abreve}{\9036\263}% U+1EB3
\DeclareTextCompositeCommand{\~}{PU}{\abreve}{\9036\265}% U+1EB5
\DeclareTextCompositeCommand{\'}{PU}{\acircumflex}{\9036\245}% U+1EA5
\DeclareTextCompositeCommand{\d}{PU}{\acircumflex}{\9036\255}% U+1EAD
\DeclareTextCompositeCommand{\`}{PU}{\acircumflex}{\9036\247}% U+1EA7
\DeclareTextCompositeCommand{\h}{PU}{\acircumflex}{\9036\251}% U+1EA9
\DeclareTextCompositeCommand{\~}{PU}{\acircumflex}{\9036\253}% U+1EAB
\DeclareTextCompositeCommand{\'}{PU}{e}{\80\351}% U+00E9
\DeclareTextCompositeCommand{\d}{PU}{e}{\9036\271}% U+1EB9
\DeclareTextCompositeCommand{\`}{PU}{e}{\80\350}% U+00E8
\DeclareTextCompositeCommand{\h}{PU}{e}{\9036\273}% U+1EBB
\DeclareTextCompositeCommand{\~}{PU}{e}{\9036\275}% U+1EBD
\DeclareTextCompositeCommand{\'}{PU}{\ecircumflex}{\9036\277}% U+1EBF
\DeclareTextCompositeCommand{\d}{PU}{\ecircumflex}{\9036\307}% U+1EC7
\DeclareTextCompositeCommand{\`}{PU}{\ecircumflex}{\9036\301}% U+1EC1
\DeclareTextCompositeCommand{\h}{PU}{\ecircumflex}{\9036\303}% U+1EC3
\DeclareTextCompositeCommand{\~}{PU}{\ecircumflex}{\9036\305}% U+1EC5
\DeclareTextCompositeCommand{\'}{PU}{i}{\80\355}% U+00ED
\DeclareTextCompositeCommand{\d}{PU}{i}{\9036\313}% U+1ECB
\DeclareTextCompositeCommand{\`}{PU}{i}{\80\354}% U+00EC
\DeclareTextCompositeCommand{\h}{PU}{i}{\9036\311}% U+1EC9
\DeclareTextCompositeCommand{\~}{PU}{i}{\81\051}% U+0129
\DeclareTextCompositeCommand{\'}{PU}{o}{\80\363}% U+00F3
\DeclareTextCompositeCommand{\d}{PU}{o}{\9036\315}% U+1ECD
\DeclareTextCompositeCommand{\`}{PU}{o}{\80\362}% U+00F2
\DeclareTextCompositeCommand{\h}{PU}{o}{\9036\317}% U+1ECF
\DeclareTextCompositeCommand{\~}{PU}{o}{\80\365}% U+00F5
\DeclareTextCompositeCommand{\'}{PU}{\ocircumflex}{\9036\321}% U+1ED1
\DeclareTextCompositeCommand{\d}{PU}{\ocircumflex}{\9036\331}% U+1ED9
\DeclareTextCompositeCommand{\`}{PU}{\ocircumflex}{\9036\323}% U+1ED3
\DeclareTextCompositeCommand{\h}{PU}{\ocircumflex}{\9036\325}% U+1ED5
\DeclareTextCompositeCommand{\~}{PU}{\ocircumflex}{\9036\327}% U+1ED7
\DeclareTextCompositeCommand{\'}{PU}{\ohorn}{\9036\333}% U+1EDB
\DeclareTextCompositeCommand{\d}{PU}{\ohorn}{\9036\343}% U+1EE3
\DeclareTextCompositeCommand{\`}{PU}{\ohorn}{\9036\335}% U+1EDD
\DeclareTextCompositeCommand{\h}{PU}{\ohorn}{\9036\337}% U+1EDF
\DeclareTextCompositeCommand{\~}{PU}{\ohorn}{\9036\341}% U+1EE1
\DeclareTextCompositeCommand{\'}{PU}{u}{\80\372}% U+00FA
\DeclareTextCompositeCommand{\d}{PU}{u}{\9036\345}% U+1EE5
\DeclareTextCompositeCommand{\`}{PU}{u}{\80\371}% U+00F9
\DeclareTextCompositeCommand{\h}{PU}{u}{\9036\347}% U+1EE7
\DeclareTextCompositeCommand{\~}{PU}{u}{\81\151}% U+0169
\DeclareTextCompositeCommand{\'}{PU}{\uhorn}{\9036\351}% U+1EE9
\DeclareTextCompositeCommand{\d}{PU}{\uhorn}{\9036\361}% U+1EF1
\DeclareTextCompositeCommand{\`}{PU}{\uhorn}{\9036\353}% U+1EEB
\DeclareTextCompositeCommand{\h}{PU}{\uhorn}{\9036\355}% U+1EED
\DeclareTextCompositeCommand{\~}{PU}{\uhorn}{\9036\357}% U+1EEF
\DeclareTextCompositeCommand{\'}{PU}{y}{\80\375}% U+00FD
\DeclareTextCompositeCommand{\d}{PU}{y}{\9036\365}% U+1EF5
\DeclareTextCompositeCommand{\`}{PU}{y}{\9036\363}% U+1EF3
\DeclareTextCompositeCommand{\h}{PU}{y}{\9036\367}% U+1EF7
\DeclareTextCompositeCommand{\~}{PU}{y}{\9036\371}% U+1EF9
\DeclareTextCompositeCommand{\'}{PU}{A}{\80\301}% U+00C1
\DeclareTextCompositeCommand{\d}{PU}{A}{\9036\240}% U+1EA0
\DeclareTextCompositeCommand{\`}{PU}{A}{\80\300}% U+00C0
\DeclareTextCompositeCommand{\h}{PU}{A}{\9036\242}% U+1EA2
\DeclareTextCompositeCommand{\~}{PU}{A}{\80\303}% U+00C3
\DeclareTextCompositeCommand{\'}{PU}{\ABREVE}{\9036\256}% U+1EAE
\DeclareTextCompositeCommand{\d}{PU}{\ABREVE}{\9036\266}% U+1EB6
\DeclareTextCompositeCommand{\`}{PU}{\ABREVE}{\9036\260}% U+1EB0
\DeclareTextCompositeCommand{\h}{PU}{\ABREVE}{\9036\262}% U+1EB2
\DeclareTextCompositeCommand{\~}{PU}{\ABREVE}{\9036\264}% U+1EB4
\DeclareTextCompositeCommand{\'}{PU}{\ACIRCUMFLEX}{\9036\244}% U+1EA4
\DeclareTextCompositeCommand{\d}{PU}{\ACIRCUMFLEX}{\9036\254}% U+1EAC
\DeclareTextCompositeCommand{\`}{PU}{\ACIRCUMFLEX}{\9036\246}% U+1EA6
\DeclareTextCompositeCommand{\h}{PU}{\ACIRCUMFLEX}{\9036\250}% U+1EA8
\DeclareTextCompositeCommand{\~}{PU}{\ACIRCUMFLEX}{\9036\252}% U+1EAA
\DeclareTextCompositeCommand{\'}{PU}{E}{\80\311}% U+00C9
\DeclareTextCompositeCommand{\d}{PU}{E}{\9036\270}% U+1EB8
\DeclareTextCompositeCommand{\`}{PU}{E}{\80\310}% U+00C8
\DeclareTextCompositeCommand{\h}{PU}{E}{\9036\272}% U+1EBA
\DeclareTextCompositeCommand{\~}{PU}{E}{\9036\274}% U+1EBC
\DeclareTextCompositeCommand{\'}{PU}{\ECIRCUMFLEX}{\9036\276}% U+1EBE
\DeclareTextCompositeCommand{\d}{PU}{\ECIRCUMFLEX}{\9036\306}% U+1EC6
\DeclareTextCompositeCommand{\`}{PU}{\ECIRCUMFLEX}{\9036\300}% U+1EC0
\DeclareTextCompositeCommand{\h}{PU}{\ECIRCUMFLEX}{\9036\302}% U+1EC2
\DeclareTextCompositeCommand{\~}{PU}{\ECIRCUMFLEX}{\9036\304}% U+1EC4
\DeclareTextCompositeCommand{\'}{PU}{I}{\80\315}% U+00CD
\DeclareTextCompositeCommand{\d}{PU}{I}{\9036\312}% U+1ECA
\DeclareTextCompositeCommand{\`}{PU}{I}{\80\314}% U+00CC
\DeclareTextCompositeCommand{\h}{PU}{I}{\9036\310}% U+1EC8
\DeclareTextCompositeCommand{\~}{PU}{I}{\81\050}% U+0128
\DeclareTextCompositeCommand{\'}{PU}{O}{\80\323}% U+00D3
\DeclareTextCompositeCommand{\d}{PU}{O}{\9036\314}% U+1ECC
\DeclareTextCompositeCommand{\`}{PU}{O}{\80\322}% U+00D2
\DeclareTextCompositeCommand{\h}{PU}{O}{\9036\316}% U+1ECE
\DeclareTextCompositeCommand{\~}{PU}{O}{\80\325}% U+00D5
\DeclareTextCompositeCommand{\'}{PU}{\OCIRCUMFLEX}{\9036\320}% U+1ED0
\DeclareTextCompositeCommand{\d}{PU}{\OCIRCUMFLEX}{\9036\330}% U+1ED8
\DeclareTextCompositeCommand{\`}{PU}{\OCIRCUMFLEX}{\9036\322}% U+1ED2
\DeclareTextCompositeCommand{\h}{PU}{\OCIRCUMFLEX}{\9036\324}% U+1ED4
\DeclareTextCompositeCommand{\~}{PU}{\OCIRCUMFLEX}{\9036\326}% U+1ED6
\DeclareTextCompositeCommand{\'}{PU}{\OHORN}{\9036\332}% U+1EDA
\DeclareTextCompositeCommand{\d}{PU}{\OHORN}{\9036\342}% U+1EE2
\DeclareTextCompositeCommand{\`}{PU}{\OHORN}{\9036\334}% U+1EDC
\DeclareTextCompositeCommand{\h}{PU}{\OHORN}{\9036\336}% U+1EDE
\DeclareTextCompositeCommand{\~}{PU}{\OHORN}{\9036\340}% U+1EE0
\DeclareTextCompositeCommand{\'}{PU}{U}{\80\332}% U+00DA
\DeclareTextCompositeCommand{\d}{PU}{U}{\9036\344}% U+1EE4
\DeclareTextCompositeCommand{\`}{PU}{U}{\80\331}% U+00D9
\DeclareTextCompositeCommand{\h}{PU}{U}{\9036\346}% U+1EE6
\DeclareTextCompositeCommand{\~}{PU}{U}{\81\150}% U+0168
\DeclareTextCompositeCommand{\'}{PU}{\UHORN}{\9036\350}% U+1EE8
\DeclareTextCompositeCommand{\d}{PU}{\UHORN}{\9036\360}% U+1EF0
\DeclareTextCompositeCommand{\`}{PU}{\UHORN}{\9036\352}% U+1EEA
\DeclareTextCompositeCommand{\h}{PU}{\UHORN}{\9036\354}% U+1EEC
\DeclareTextCompositeCommand{\~}{PU}{\UHORN}{\9036\356}% U+1EEE
\DeclareTextCompositeCommand{\'}{PU}{Y}{\80\335}% U+00DD
\DeclareTextCompositeCommand{\d}{PU}{Y}{\9036\364}% U+1EF4
\DeclareTextCompositeCommand{\`}{PU}{Y}{\9036\362}% U+1EF2
\DeclareTextCompositeCommand{\h}{PU}{Y}{\9036\366}% U+1EF6
\DeclareTextCompositeCommand{\~}{PU}{Y}{\9036\370}% U+1EF8
%    \end{macrocode}
%    \begin{macrocode}
%</puvnenc>
%    \end{macrocode}
%
% \subsection{PU encoding, additions for Arabi}
%
%    This file is provided and maintained by Youssef Jabri.
%
%    \begin{macrocode}
%<*puarenc>
%    \end{macrocode}
%    \begin{macrocode}
% U+0621;afii57409;ARABIC LETTER HAMZA
\DeclareTextCommand{\hamza}{PU}{\86\041}% U+0621
% U+0622;afii57410;ARABIC LETTER ALEF WITH MADDA ABOVE
\DeclareTextCommand{\alefmadda}{PU}{\86\042}% U+0622
% U+0623;afii57411;ARABIC LETTER ALEF WITH HAMZA ABOVE
\DeclareTextCommand{\alefhamza}{PU}{\86\043}% U+0623
% U+0624;afii57412;ARABIC LETTER WAW WITH HAMZA ABOVE
\DeclareTextCommand{\wawhamza}{PU}{\86\044}% U+0624
% U+0625;afii57413;ARABIC LETTER ALEF WITH HAMZA BELOW
\DeclareTextCommand{\aleflowerhamza}{PU}{\86\045}% U+0625
% U+0626;afii57414;ARABIC LETTER YEH WITH HAMZA ABOVE
\DeclareTextCommand{\yahamza}{PU}{\86\046}% U+0626
% U+0627;afii57415;ARABIC LETTER ALEF
\DeclareTextCommand{\alef}{PU}{\86\047}% U+0627
% U+0628;afii57416;ARABIC LETTER BEH
\DeclareTextCommand{\baa}{PU}{\86\050}% U+0628
% U+0629;afii57417;ARABIC LETTER TEH MARBUTA
\DeclareTextCommand{\T}{PU}{\86\051}% U+0629
% U+062A;afii57418;ARABIC LETTER TEH
\DeclareTextCommand{\taa}{PU}{\86\052}% U+062A
% U+062B;afii57419;ARABIC LETTER THEH
\DeclareTextCommand{\thaa}{PU}{\86\053}% U+062B
% U+062C;afii57420;ARABIC LETTER JEEM
\DeclareTextCommand{\jeem}{PU}{\86\054}% U+062C
% U+062D;afii57421;ARABIC LETTER HAH
\DeclareTextCommand{\Haa}{PU}{\86\055}% U+062D
% U+062E;afii57422;ARABIC LETTER KHAH
\DeclareTextCommand{\kha}{PU}{\86\056}% U+062E
% U+062F;afii57423;ARABIC LETTER DAL
\DeclareTextCommand{\dal}{PU}{\86\057}% U+062F
% U+0630;afii57424;ARABIC LETTER THAL
\DeclareTextCommand{\dhal}{PU}{\86\060}% U+0630
% U+0631;afii57425;ARABIC LETTER REH
\DeclareTextCommand{\ra}{PU}{\86\061}% U+0631
% U+0632;afii57426;ARABIC LETTER ZAIN
\DeclareTextCommand{\zay}{PU}{\86\062}% U+0632
% U+0633;afii57427;ARABIC LETTER SEEN
\DeclareTextCommand{\seen}{PU}{\86\063}% U+0633
% U+0634;afii57428;ARABIC LETTER SHEEN
\DeclareTextCommand{\sheen}{PU}{\86\064}% U+0634
% U+0635;afii57429;ARABIC LETTER SAD
\DeclareTextCommand{\sad}{PU}{\86\065}% U+0635
% U+0636;afii57430;ARABIC LETTER DAD
\DeclareTextCommand{\dad}{PU}{\86\066}% U+0636
% U+0637;afii57431;ARABIC LETTER TAH
\DeclareTextCommand{\Ta}{PU}{\86\067}% U+0637
% U+0638;afii57432;ARABIC LETTER ZAH
\DeclareTextCommand{\za}{PU}{\86\070}% U+0638
% U+0639;afii57433;ARABIC LETTER AIN
\DeclareTextCommand{\ayn}{PU}{\86\071}% U+0639
% U+063A;afii57434;ARABIC LETTER GHAIN
\DeclareTextCommand{\ghayn}{PU}{\86\072}% U+063A
% U+0640;afii57440;ARABIC TATWEEL
\DeclareTextCommand{\tatweel}{PU}{\86\100}% U+0640
% U+0641;afii57441;ARABIC LETTER FEH
\DeclareTextCommand{\fa}{PU}{\86\101}% U+0641
% U+0642;afii57442;ARABIC LETTER QAF
\DeclareTextCommand{\qaf}{PU}{\86\102}% U+0642
% U+0643;afii57443;ARABIC LETTER KAF
\DeclareTextCommand{\kaf}{PU}{\86\103}% U+0643
% U+0644;afii57444;ARABIC LETTER LAM
\DeclareTextCommand{\lam}{PU}{\86\104}% U+0644
% U+0645;afii57445;ARABIC LETTER MEEM
\DeclareTextCommand{\meem}{PU}{\86\105}% U+0645
% U+0646;afii57446;ARABIC LETTER NOON
\DeclareTextCommand{\nun}{PU}{\86\106}% U+0646
% U+0647;afii57470;ARABIC LETTER HEH
\DeclareTextCommand{\ha}{PU}{\86\107}% U+0647
% U+0648;afii57448;ARABIC LETTER WAW
\DeclareTextCommand{\waw}{PU}{\86\110}% U+0648
% U+0649;afii57449;ARABIC LETTER ALEF MAKSURA
\DeclareTextCommand{\alefmaqsura}{PU}{\86\111}% U+0649
% U+064A;afii57450;ARABIC LETTER YEH
\DeclareTextCommand{\ya}{PU}{\86\112}% U+064A
%    \end{macrocode}
%    \begin{macrocode}
% U+064B;afii57451;ARABIC FATHATAN
\DeclareTextCommand{\nasb}{PU}{\86\113}% U+064B
% U+064C;afii57452;ARABIC DAMMATAN
\DeclareTextCommand{\raff}{PU}{\86\114}% U+064C
% U+064D;afii57453;ARABIC KASRATAN
\DeclareTextCommand{\jarr}{PU}{\86\115}% U+064D
% U+064E;afii57454;ARABIC FATHA
\DeclareTextCommand{\fatha}{PU}{\86\116}% U+064E
% U+064F;afii57455;ARABIC DAMMA
\DeclareTextCommand{\damma}{PU}{\86\117}% U+064F
% U+0650;afii57456;ARABIC KASRA
\DeclareTextCommand{\kasra}{PU}{\86\120}% U+0650
% U+0651;afii57457;ARABIC SHADDA
\DeclareTextCommand{\shadda}{PU}{\86\121}% U+0651
% U+0652;afii57458;ARABIC SUKUN
\DeclareTextCommand{\sukun}{PU}{\86\122}% U+0652
%    \end{macrocode}
%    Farsi
%    \begin{macrocode}
% U+067E ARABIC LETTER PEH; afii57506
\DeclareTextCommand{\peh}{PU}{\86\176}% U+067E
% U+0686 ARABIC LETTER TCHEH; afii57507
\DeclareTextCommand{\tcheh}{PU}{\86\206}% U+0686
% U+0698 ARABIC LETTER JEH; afii57508
\DeclareTextCommand{\jeh}{PU}{\86\230}% U+0698
% U+06A9 ARABIC LETTER KEHEH
\DeclareTextCommand{\farsikaf}{PU}{\86\251}% U+06A9
% U+06AF ARABIC LETTER GAF; afii57509
\DeclareTextCommand{\gaf}{PU}{\86\257}% U+06AF
% U+06CC ARABIC LETTER FARSI YEH
\DeclareTextCommand{\farsiya}{PU}{\86\314}% U+06CC
%    \end{macrocode}
%    \begin{macrocode}
% U+200C ZERO WIDTH NON-JOINER; afii61664
\DeclareTextCommand{\ZWNJ}{PU}{\9040\014}% U+200C
% U+200D ZERO WIDTH JOINER; afii301
\DeclareTextCommand{\textEncodingNoboundary}{PU}{\9040\015}% U+200D
%    \end{macrocode}
%    \begin{macrocode}
%</puarenc>
%    \end{macrocode}
%
%    \begin{macrocode}
%<*psdextra>
\Hy@VersionCheck{psdextra.def}
\DeclareTextCommand{\textGamma}{PU}{\83\223}%* U+0393
\DeclareTextCommand{\textDelta}{PU}{\83\224}%* U+0394
\DeclareTextCommand{\textTheta}{PU}{\83\230}%* U+0398
\DeclareTextCommand{\textLambda}{PU}{\83\233}%* U+039B
\DeclareTextCommand{\textXi}{PU}{\83\236}%* U+039E
\DeclareTextCommand{\textPi}{PU}{\83\240}%* U+03A0
\DeclareTextCommand{\textSigma}{PU}{\83\243}%* U+03A3
\DeclareTextCommand{\textUpsilon}{PU}{\83\245}%* U+03A5
\DeclareTextCommand{\textPhi}{PU}{\83\246}%* U+03A6
\DeclareTextCommand{\textChi}{PU}{\83\247}% U+03A7
\DeclareTextCommand{\textPsi}{PU}{\83\250}%* U+03A8
\DeclareTextCommand{\textOmega}{PU}{\83\251}%* U+03A9
\DeclareTextCommand{\textalpha}{PU}{\83\261}%* U+03B1
\DeclareTextCommand{\textbeta}{PU}{\83\262}%* U+03B2
\DeclareTextCommand{\textgamma}{PU}{\83\263}%* U+03B3
\DeclareTextCommand{\textdelta}{PU}{\83\264}%* U+03B4
\DeclareTextCommand{\textepsilon}{PU}{\83\265}%* U+03B5
\DeclareTextCommand{\textzeta}{PU}{\83\266}%* U+03B6
\DeclareTextCommand{\texteta}{PU}{\83\267}%* U+03B7
\DeclareTextCommand{\texttheta}{PU}{\83\270}%* U+03B8
\DeclareTextCommand{\textiota}{PU}{\83\271}%* U+03B9
\DeclareTextCommand{\textkappa}{PU}{\83\272}%* U+03BA
\DeclareTextCommand{\textlambda}{PU}{\83\273}%* U+03BB
\DeclareTextCommand{\textmugreek}{PU}{\83\274}%* U+03BC
\DeclareTextCommand{\textnu}{PU}{\83\275}%* U+03BD
\DeclareTextCommand{\textxi}{PU}{\83\276}%* U+03BE
\DeclareTextCommand{\textpi}{PU}{\83\300}%* U+03C0
\DeclareTextCommand{\textrho}{PU}{\83\301}%* U+03C1
\DeclareTextCommand{\textvarsigma}{PU}{\83\302}%* U+03C2
\DeclareTextCommand{\textsigma}{PU}{\83\303}%* U+03C3
\DeclareTextCommand{\texttau}{PU}{\83\304}%* U+03C4
\DeclareTextCommand{\textupsilon}{PU}{\83\305}%* U+03C5
\DeclareTextCommand{\textphi}{PU}{\83\306}%* U+03C6
\DeclareTextCommand{\textchi}{PU}{\83\307}%* U+03C7
\DeclareTextCommand{\textpsi}{PU}{\83\310}%* U+03C8
\DeclareTextCommand{\textomega}{PU}{\83\311}%* U+03C9
\newcommand*{\psdmapshortnames}{%
  \let\MVPlus\textMVPlus
  \let\MVComma\textMVComma
  \let\MVMinus\textMVMinus
  \let\MVPeriod\textMVPeriod
  \let\MVDivision\textMVDivision
  \let\MVZero\textMVZero
  \let\MVOne\textMVOne
  \let\MVTwo\textMVTwo
  \let\MVThree\textMVThree
  \let\MVFour\textMVFour
  \let\MVFive\textMVFive
  \let\MVSix\textMVSix
  \let\MVSeven\textMVSeven
  \let\MVEight\textMVEight
  \let\MVNine\textMVNine
  \let\MVAt\textMVAt
  \let\copyright\textcopyright
  \let\twosuperior\texttwosuperior
  \let\threesuperior\textthreesuperior
  \let\onesuperior\textonesuperior
  \let\Thorn\textThorn
  \let\thorn\textthorn
  \let\hbar\texthbar
  \let\hausaB\texthausaB
  \let\hausaD\texthausaD
  \let\hausaK\texthausaK
  \let\barl\textbarl
  \let\inve\textinve
  \let\slashc\textslashc
  \let\scripta\textscripta
  \let\openo\textopeno
  \let\rtaild\textrtaild
  \let\reve\textreve
  \let\schwa\textschwa
  \let\niepsilon\textniepsilon
  \let\revepsilon\textrevepsilon
  \let\rhookrevepsilon\textrhookrevepsilon
  \let\scriptg\textscriptg
  \let\scg\textscg
  \let\ipagamma\textipagamma
  \let\babygamma\textbabygamma
  \let\bari\textbari
  \let\niiota\textniiota
  \let\sci\textsci
  \let\scn\textscn
  \let\niphi\textniphi
  \let\longlegr\textlonglegr
  \let\scr\textscr
  \let\invscr\textinvscr
  \let\esh\textesh
  \let\baru\textbaru
  \let\niupsilon\textniupsilon
  \let\scriptv\textscriptv
  \let\turnv\textturnv
  \let\turnw\textturnw
  \let\turny\textturny
  \let\scy\textscy
  \let\yogh\textyogh
  \let\glotstop\textglotstop
  \let\revglotstop\textrevglotstop
  \let\invglotstop\textinvglotstop
  \let\Gamma\textGamma
  \let\Delta\textDelta
  \let\Theta\textTheta
  \let\Lambda\textLambda
  \let\Xi\textXi
  \let\Pi\textPi
  \let\Sigma\textSigma
  \let\Upsilon\textUpsilon
  \let\Phi\textPhi
  \let\Psi\textPsi
  \let\Omega\textOmega
  \let\alpha\textalpha
  \let\beta\textbeta
  \let\gamma\textgamma
  \let\delta\textdelta
  \let\epsilon\textepsilon
  \let\zeta\textzeta
  \let\eta\texteta
  \let\theta\texttheta
  \let\iota\textiota
  \let\kappa\textkappa
  \let\lambda\textlambda
  \let\mu\textmu
  \let\mugreek\textmugreek
  \let\nu\textnu
  \let\xi\textxi
  \let\pi\textpi
  \let\rho\textrho
  \let\varsigma\textvarsigma
  \let\sigma\textsigma
  \let\tau\texttau
  \let\upsilon\textupsilon
  \let\phi\textphi
  \let\chi\textchi
  \let\psi\textpsi
  \let\omega\textomega
  \let\scd\textscd
  \let\scu\textscu
  \let\iinferior\textiinferior
  \let\rinferior\textrinferior
  \let\uinferior\textuinferior
  \let\vinferior\textvinferior
  \let\betainferior\textbetainferior
  \let\gammainferior\textgammainferior
  \let\rhoinferior\textrhoinferior
  \let\phiinferior\textphiinferior
  \let\chiinferior\textchiinferior
  \let\barsci\textbarsci
  \let\barp\textbarp
  \let\barscu\textbarscu
  \let\htrtaild\texthtrtaild
  \let\dagger\textdagger
  \let\bullet\textbullet
  \let\hdotfor\texthdotfor
  \let\prime\textprime
  \let\second\textsecond
  \let\third\textthird
  \let\backprime\textbackprime
  \let\lefttherefore\textlefttherefore
  \let\fourth\textfourth
  \let\diamonddots\textdiamonddots
  \let\zerosuperior\textzerosuperior
  \let\isuperior\textisuperior
  \let\foursuperior\textfoursuperior
  \let\fivesuperior\textfivesuperior
  \let\sixsuperior\textsixsuperior
  \let\sevensuperior\textsevensuperior
  \let\eightsuperior\texteightsuperior
  \let\ninesuperior\textninesuperior
  \let\plussuperior\textplussuperior
  \let\minussuperior\textminussuperior
  \let\equalsuperior\textequalsuperior
  \let\parenleftsuperior\textparenleftsuperior
  \let\parenrightsuperior\textparenrightsuperior
  \let\nsuperior\textnsuperior
  \let\zeroinferior\textzeroinferior
  \let\oneinferior\textoneinferior
  \let\twoinferior\texttwoinferior
  \let\threeinferior\textthreeinferior
  \let\fourinferior\textfourinferior
  \let\fiveinferior\textfiveinferior
  \let\sixinferior\textsixinferior
  \let\seveninferior\textseveninferior
  \let\eightinferior\texteightinferior
  \let\nineinferior\textnineinferior
  \let\plusinferior\textplusinferior
  \let\minusinferior\textminusinferior
  \let\equalsinferior\textequalsinferior
  \let\parenleftinferior\textparenleftinferior
  \let\parenrightinferior\textparenrightinferior
  \let\ainferior\textainferior
  \let\einferior\texteinferior
  \let\oinferior\textoinferior
  \let\xinferior\textxinferior
  \let\schwainferior\textschwainferior
  \let\hinferior\texthinferior
  \let\kinferior\textkinferior
  \let\linferior\textlinferior
  \let\minferior\textminferior
  \let\ninferior\textninferior
  \let\pinferior\textpinferior
  \let\sinferior\textsinferior
  \let\tinferior\texttinferior
  \let\Deleatur\textDeleatur
  \let\hslash\texthslash
  \let\Im\textIm
  \let\ell\textell
  \let\wp\textwp
  \let\Re\textRe
  \let\mho\textmho
  \let\riota\textriota
  \let\Finv\textFinv
  \let\aleph\textaleph
  \let\beth\textbeth
  \let\gimel\textgimel
  \let\daleth\textdaleth
  \let\fax\textfax
  \let\Game\textGame
  \let\leftarrow\textleftarrow
  \let\uparrow\textuparrow
  \let\rightarrow\textrightarrow
  \let\downarrow\textdownarrow
  \let\leftrightarrow\textleftrightarrow
  \let\updownarrow\textupdownarrow
  \let\nwarrow\textnwarrow
  \let\nearrow\textnearrow
  \let\searrow\textsearrow
  \let\swarrow\textswarrow
  \let\nleftarrow\textnleftarrow
  \let\nrightarrow\textnrightarrow
  \let\twoheadleftarrow\texttwoheadleftarrow
  \let\ntwoheadleftarrow\textntwoheadleftarrow
  \let\twoheaduparrow\texttwoheaduparrow
  \let\twoheadrightarrow\texttwoheadrightarrow
  \let\ntwoheadrightarrow\textntwoheadrightarrow
  \let\twoheaddownarrow\texttwoheaddownarrow
  \let\leftarrowtail\textleftarrowtail
  \let\rightarrowtail\textrightarrowtail
  \let\mapsto\textmapsto
  \let\hookleftarrow\texthookleftarrow
  \let\hookrightarrow\texthookrightarrow
  \let\looparrowleft\textlooparrowleft
  \let\looparrowright\textlooparrowright
  \let\nleftrightarrow\textnleftrightarrow
  \let\lightning\textlightning
  \let\dlsh\textdlsh
  \let\curvearrowleft\textcurvearrowleft
  \let\curvearrowright\textcurvearrowright
  \let\leftharpoonup\textleftharpoonup
  \let\leftharpoondown\textleftharpoondown
  \let\upharpoonright\textupharpoonright
  \let\upharpoonleft\textupharpoonleft
  \let\rightharpoonup\textrightharpoonup
  \let\rightharpoondown\textrightharpoondown
  \let\downharpoonright\textdownharpoonright
  \let\downharpoonleft\textdownharpoonleft
  \let\rightleftarrows\textrightleftarrows
  \let\updownarrows\textupdownarrows
  \let\leftrightarrows\textleftrightarrows
  \let\leftleftarrows\textleftleftarrows
  \let\upuparrows\textupuparrows
  \let\rightrightarrows\textrightrightarrows
  \let\downdownarrows\textdowndownarrows
  \let\leftrightharpoons\textleftrightharpoons
  \let\rightleftharpoons\textrightleftharpoons
  \let\nLeftarrow\textnLeftarrow
  \let\nLeftrightarrow\textnLeftrightarrow
  \let\nRightarrow\textnRightarrow
  \let\Leftarrow\textLeftarrow
  \let\Uparrow\textUparrow
  \let\Rightarrow\textRightarrow
  \let\Downarrow\textDownarrow
  \let\Leftrightarrow\textLeftrightarrow
  \let\Updownarrow\textUpdownarrow
  \let\Nwarrow\textNwarrow
  \let\Nearrow\textNearrow
  \let\Searrow\textSearrow
  \let\Swarrow\textSwarrow
  \let\Lleftarrow\textLleftarrow
  \let\Rrightarrow\textRrightarrow
  \let\leftsquigarrow\textleftsquigarrow
  \let\rightsquigarrow\textrightsquigarrow
  \let\dashleftarrow\textdashleftarrow
  \let\dasheduparrow\textdasheduparrow
  \let\dashrightarrow\textdashrightarrow
  \let\dasheddownarrow\textdasheddownarrow
  \let\pointer\textpointer
  \let\downuparrows\textdownuparrows
  \let\leftarrowtriangle\textleftarrowtriangle
  \let\rightarrowtriangle\textrightarrowtriangle
  \let\leftrightarrowtriangle\textleftrightarrowtriangle
  \let\forall\textforall
  \let\complement\textcomplement
  \let\partial\textpartial
  \let\exists\textexists
  \let\nexists\textnexists
  \let\emptyset\textemptyset
  \let\triangle\texttriangle
  \let\nabla\textnabla
  \let\in\textinsymbol
  \let\notin\textnotin
  \let\smallin\textsmallin
  \let\ni\textni
  \let\notowner\textnotowner
  \let\smallowns\textsmallowns
  \let\prod\textprod
  \let\amalg\textamalg
  \let\sum\textsum
  \let\mp\textmp
  \let\dotplus\textdotplus
  \let\Divides\textDivides
  \let\DividesNot\textDividesNot
  \let\setminus\textsetminus
  \let\ast\textast
  \let\circ\textcirc
  \let\surd\textsurd
  \let\propto\textpropto
  \let\infty\textinfty
  \let\angle\textangle
  \let\measuredangle\textmeasuredangle
  \let\sphericalangle\textsphericalangle
  \let\mid\textmid
  \let\nmid\textnmid
  \let\parallel\textparallel
  \let\nparallel\textnparallel
  \let\wedge\textwedge
  \let\owedge\textowedge
  \let\vee\textvee
  \let\ovee\textovee
  \let\cap\textcap
  \let\cup\textcup
  \let\int\textint
  \let\iint\textiint
  \let\iiint\textiiint
  \let\oint\textoint
  \let\oiint\textoiint
  \let\ointclockwise\textointclockwise
  \let\ointctrclockwise\textointctrclockwise
  \let\therefore\texttherefore
  \let\because\textbecause
  \let\vdotdot\textvdotdot
  \let\squaredots\textsquaredots
  \let\dotminus\textdotminus
  \let\eqcolon\texteqcolon
  \let\sim\textsim
  \let\backsim\textbacksim
  \let\nbacksim\textnbacksim
  \let\wr\textwr
  \let\nsim\textnsim
  \let\eqsim\texteqsim
  \let\neqsim\textneqsim
  \let\simeq\textsimeq
  \let\nsimeq\textnsimeq
  \let\cong\textcong
  \let\ncong\textncong
  \let\approx\textapprox
  \let\napprox\textnapprox
  \let\approxeq\textapproxeq
  \let\napproxeq\textnapproxeq
  \let\triplesim\texttriplesim
  \let\ntriplesim\textntriplesim
  \let\backcong\textbackcong
  \let\nbackcong\textnbackcong
  \let\asymp\textasymp
  \let\nasymp\textnasymp
  \let\Bumpeq\textBumpeq
  \let\nBumpeq\textnBumpeq
  \let\bumpeq\textbumpeq
  \let\nbumpeq\textnbumpeq
  \let\doteq\textdoteq
  \let\ndoteq\textndoteq
  \let\doteqdot\textdoteqdot
  \let\nDoteq\textnDoteq
  \let\fallingdoteq\textfallingdoteq
  \let\nfallingdoteq\textnfallingdoteq
  \let\risingdoteq\textrisingdoteq
  \let\nrisingdoteq\textnrisingdoteq
  \let\colonequals\textcolonequals
  \let\equalscolon\textequalscolon
  \let\eqcirc\texteqcirc
  \let\neqcirc\textneqcirc
  \let\circeq\textcirceq
  \let\ncirceq\textncirceq
  \let\hateq\texthateq
  \let\nhateq\textnhateq
  \let\triangleeq\texttriangleeq
  \let\neq\textneq
  \let\ne\textne
  \let\equiv\textequiv
  \let\nequiv\textnequiv
  \let\leq\textleq
  \let\le\textle
  \let\geq\textgeq
  \let\ge\textge
  \let\leqq\textleqq
  \let\nleqq\textnleqq
  \let\geqq\textgeqq
  \let\ngeqq\textngeqq
  \let\lneqq\textlneqq
  \let\gneqq\textgneqq
  \let\ll\textll
  \let\nll\textnll
  \let\gg\textgg
  \let\ngg\textngg
  \let\between\textbetween
  \let\nless\textnless
  \let\ngtr\textngtr
  \let\nleq\textnleq
  \let\ngeq\textngeq
  \let\lesssim\textlesssim
  \let\gtrsim\textgtrsim
  \let\nlesssim\textnlesssim
  \let\ngtrsim\textngtrsim
  \let\lessgtr\textlessgtr
  \let\gtrless\textgtrless
  \let\ngtrless\textngtrless
  \let\nlessgtr\textnlessgtr
  \let\prec\textprec
  \let\succ\textsucc
  \let\preccurlyeq\textpreccurlyeq
  \let\succcurlyeq\textsucccurlyeq
  \let\precsim\textprecsim
  \let\nprecsim\textnprecsim
  \let\succsim\textsuccsim
  \let\nsuccsim\textnsuccsim
  \let\nprec\textnprec
  \let\nsucc\textnsucc
  \let\subset\textsubset
  \let\supset\textsupset
  \let\nsubset\textnsubset
  \let\nsupset\textnsupset
  \let\subseteq\textsubseteq
  \let\supseteq\textsupseteq
  \let\nsubseteq\textnsubseteq
  \let\nsupseteq\textnsupseteq
  \let\subsetneq\textsubsetneq
  \let\supsetneq\textsupsetneq
  \let\cupdot\textcupdot
  \let\cupplus\textcupplus
  \let\sqsubset\textsqsubset
  \let\nsqsubset\textnsqsubset
  \let\sqsupset\textsqsupset
  \let\nsqsupset\textnsqsupset
  \let\sqsubseteq\textsqsubseteq
  \let\nsqsubseteq\textnsqsubseteq
  \let\sqsupseteq\textsqsupseteq
  \let\nsqsupseteq\textnsqsupseteq
  \let\sqcap\textsqcap
  \let\sqcup\textsqcup
  \let\oplus\textoplus
  \let\ominus\textominus
  \let\otimes\textotimes
  \let\oslash\textoslash
  \let\odot\textodot
  \let\circledcirc\textcircledcirc
  \let\circledast\textcircledast
  \let\circleddash\textcircleddash
  \let\boxplus\textboxplus
  \let\boxminus\textboxminus
  \let\boxtimes\textboxtimes
  \let\boxdot\textboxdot
  \let\vdash\textvdash
  \let\dashv\textdashv
  \let\ndashv\textndashv
  \let\top\texttop
  \let\ndownvdash\textndownvdash
  \let\bot\textbot
  \let\nupvdash\textnupvdash
  \let\vDash\textvDash
  \let\Vdash\textVdash
  \let\Vvdash\textVvdash
  \let\nVvash\textnVvash
  \let\VDash\textVDash
  \let\nvdash\textnvdash
  \let\nvDash\textnvDash
  \let\nVdash\textnVdash
  \let\nVDash\textnVDash
  \let\lhd\textlhd
  \let\rhd\textrhd
  \let\unlhd\textunlhd
  \let\unrhd\textunrhd
  \let\multimapdotbothA\textmultimapdotbothA
  \let\multimapdotbothB\textmultimapdotbothB
  \let\multimap\textmultimap
  \let\veebar\textveebar
  \let\barwedge\textbarwedge
  \let\star\textstar
  \let\divideontimes\textdivideontimes
  \let\bowtie\textbowtie
  \let\ltimes\textltimes
  \let\rtimes\textrtimes
  \let\leftthreetimes\textleftthreetimes
  \let\rightthreetimes\textrightthreetimes
  \let\backsimeq\textbacksimeq
  \let\nbacksimeq\textnbacksimeq
  \let\curlyvee\textcurlyvee
  \let\curlywedge\textcurlywedge
  \let\Subset\textSubset
  \let\nSubset\textnSubset
  \let\Supset\textSupset
  \let\nSupset\textnSupset
  \let\Cap\textCap
  \let\Cup\textCup
  \let\pitchfork\textpitchfork
  \let\lessdot\textlessdot
  \let\gtrdot\textgtrdot
  \let\lll\textlll
  \let\ggg\textggg
  \let\lesseqgtr\textlesseqgtr
  \let\gtreqless\textgtreqless
  \let\curlyeqprec\textcurlyeqprec
  \let\ncurlyeqprec\textncurlyeqprec
  \let\curlyeqsucc\textcurlyeqsucc
  \let\ncurlyeqsucc\textncurlyeqsucc
  \let\npreccurlyeq\textnpreccurlyeq
  \let\nsucccurlyeq\textnsucccurlyeq
  \let\nqsubseteq\textnqsubseteq
  \let\nqsupseteq\textnqsupseteq
  \let\sqsubsetneq\textsqsubsetneq
  \let\sqsupsetneq\textsqsupsetneq
  \let\lnsim\textlnsim
  \let\gnsim\textgnsim
  \let\precnsim\textprecnsim
  \let\succnsim\textsuccnsim
  \let\ntriangleleft\textntriangleleft
  \let\ntriangleright\textntriangleright
  \let\ntrianglelefteq\textntrianglelefteq
  \let\ntrianglerighteq\textntrianglerighteq
  \let\vdots\textvdots
  \let\cdots\textcdots
  \let\udots\textudots
  \let\ddots\textddots
  \let\barin\textbarin
  \let\diameter\textdiameter
  \let\backneg\textbackneg
  \let\wasylozenge\textwasylozenge
  \let\invbackneg\textinvbackneg
  \let\clock\textclock
  \let\ulcorner\textulcorner
  \let\urcorner\texturcorner
  \let\llcorner\textllcorner
  \let\lrcorner\textlrcorner
  \let\frown\textfrown
  \let\smile\textsmile
  \let\Keyboard\textKeyboard
  \let\langle\textlangle
  \let\rangle\textrangle
  \let\APLinv\textAPLinv
  \let\Tumbler\textTumbler
  \let\notslash\textnotslash
  \let\notbackslash\textnotbackslash
  \let\boxbackslash\textboxbackslash
  \let\APLleftarrowbox\textAPLleftarrowbox
  \let\APLrightarrowbox\textAPLrightarrowbox
  \let\APLuparrowbox\textAPLuparrowbox
  \let\APLdownarrowbox\textAPLdownarrowbox
  \let\APLinput\textAPLinput
  \let\Request\textRequest
  \let\Beam\textBeam
  \let\hexagon\texthexagon
  \let\APLbox\textAPLbox
  \let\ForwardToIndex\textForwardToIndex
  \let\RewindToIndex\textRewindToIndex
  \let\bbslash\textbbslash
  \let\CircledA\textCircledA
  \let\CleaningF\textCleaningF
  \let\CleaningFF\textCleaningFF
  \let\CleaningP\textCleaningP
  \let\CleaningPP\textCleaningPP
  \let\CuttingLine\textCuttingLine
  \let\UParrow\textUParrow
  \let\bigtriangleup\textbigtriangleup
  \let\Forward\textForward
  \let\triangleright\texttriangleright
  \let\RHD\textRHD
  \let\DOWNarrow\textDOWNarrow
  \let\bigtriangledown\textbigtriangledown
  \let\Rewind\textRewind
  \let\triangleleft\texttriangleleft
  \let\LHD\textLHD
  \let\diamond\textdiamond
  \let\lozenge\textlozenge
  \let\LEFTCIRCLE\textLEFTCIRCLE
  \let\RIGHTCIRCLE\textRIGHTCIRCLE
  \let\openbullet\textopenbullet
  \let\boxbar\textboxbar
  \let\bigcircle\textbigcircle
  \let\Cloud\textCloud
  \let\FiveStar\textFiveStar
  \let\FiveStarOpen\textFiveStarOpen
  \let\Phone\textPhone
  \let\boxempty\textboxempty
  \let\Checkedbox\textCheckedbox
  \let\Crossedbox\textCrossedbox
  \let\Coffeecup\textCoffeecup
  \let\HandCuffLeft\textHandCuffLeft
  \let\HandCuffRight\textHandCuffRight
  \let\HandLeft\textHandLeft
  \let\HandRight\textHandRight
  \let\Radioactivity\textRadioactivity
  \let\Biohazard\textBiohazard
  \let\Ankh\textAnkh
  \let\YinYang\textYinYang
  \let\frownie\textfrownie
  \let\smiley\textsmiley
  \let\blacksmiley\textblacksmiley
  \let\sun\textsun
  \let\leftmoon\textleftmoon
  \let\rightmoon\textrightmoon
  \let\mercury\textmercury
  \let\earth\textearth
  \let\male\textmale
  \let\jupiter\textjupiter
  \let\saturn\textsaturn
  \let\uranus\texturanus
  \let\neptune\textneptune
  \let\pluto\textpluto
  \let\aries\textaries
  \let\taurus\texttaurus
  \let\gemini\textgemini
  \let\cancer\textcancer
  \let\leo\textleo
  \let\virgo\textvirgo
  \let\libra\textlibra
  \let\scorpio\textscorpio
  \let\sagittarius\textsagittarius
  \let\capricornus\textcapricornus
  \let\aquarius\textaquarius
  \let\pisces\textpisces
  \let\quarternote\textquarternote
  \let\twonotes\texttwonotes
  \let\sixteenthnote\textsixteenthnote
  \let\flat\textflat
  \let\natural\textnatural
  \let\sharp\textsharp
  \let\recycle\textrecycle
  \let\Wheelchair\textWheelchair
  \let\Flag\textFlag
  \let\MineSign\textMineSign
  \let\dsmilitary\textdsmilitary
  \let\dsmedical\textdsmedical
  \let\dsjuridical\textdsjuridical
  \let\dschemical\textdschemical
  \let\dsbiological\textdsbiological
  \let\dscommercial\textdscommercial
  \let\manstar\textmanstar
  \let\danger\textdanger
  \let\FemaleFemale\textFemaleFemale
  \let\MaleMale\textMaleMale
  \let\FemaleMale\textFemaleMale
  \let\Hermaphrodite\textHermaphrodite
  \let\Neutral\textNeutral
  \let\hexstar\texthexstar
  \let\SunCload\textSunCload
  \let\Rain\textRain
  \let\noway\textnoway
  \let\Mountain\textMountain
  \let\Tent\textTent
  \let\ScissorRight\textScissorRight
  \let\ScissorRightBrokenTop\textScissorRightBrokenTop
  \let\ScissorHollowRight\textScissorHollowRight
  \let\PhoneHandset\textPhoneHandset
  \let\Tape\textTape
  \let\Plane\textPlane
  \let\Envelope\textEnvelope
  \let\Peace\textPeace
  \let\WritingHand\textWritingHand
  \let\PencilRightDown\textPencilRightDown
  \let\PencilRight\textPencilRight
  \let\PencilRightUp\textPencilRightUp
  \let\NibRight\textNibRight
  \let\NibSolidRight\textNibSolidRight
  \let\Checkmark\textCheckmark
  \let\CheckmarkBold\textCheckmarkBold
  \let\XSolid\textXSolid
  \let\XSolidBold\textXSolidBold
  \let\XSolidBrush\textXSolidBrush
  \let\PlusOutline\textPlusOutline
  \let\Plus\textPlus
  \let\PlusThinCenterOpen\textPlusThinCenterOpen
  \let\PlusCenterOpen\textPlusCenterOpen
  \let\Cross\textCross
  \let\CrossOpenShadow\textCrossOpenShadow
  \let\CrossOutline\textCrossOutline
  \let\CrossMaltese\textCrossMaltese
  \let\DavidStar\textDavidStar
  \let\FourAsterisk\textFourAsterisk
  \let\JackStar\textJackStar
  \let\JackStarBold\textJackStarBold
  \let\ClowerTips\textClowerTips
  \let\FourStar\textFourStar
  \let\FourStarOpen\textFourStarOpen
  \let\FiveStarOpenCircled\textFiveStarOpenCircled
  \let\FiveStarCenterOpen\textFiveStarCenterOpen
  \let\FiveStarOpenDotted\textFiveStarOpenDotted
  \let\FiveStarOutline\textFiveStarOutline
  \let\FiveStarOutlineHeavy\textFiveStarOutlineHeavy
  \let\FiveStarConvex\textFiveStarConvex
  \let\FiveStarShadow\textFiveStarShadow
  \let\AsteriskBold\textAsteriskBold
  \let\AsteriskCenterOpen\textAsteriskCenterOpen
  \let\EightStarTaper\textEightStarTaper
  \let\EightStarConvex\textEightStarConvex
  \let\SixStar\textSixStar
  \let\EightStar\textEightStar
  \let\EightStarBold\textEightStarBold
  \let\TwelveStar\textTwelveStar
  \let\SixteenStarLight\textSixteenStarLight
  \let\SixFlowerPetalRemoved\textSixFlowerPetalRemoved
  \let\SixFlowerOpenCenter\textSixFlowerOpenCenter
  \let\Asterisk\textAsterisk
  \let\SixFlowerAlternate\textSixFlowerAlternate
  \let\FiveFlowerPetal\textFiveFlowerPetal
  \let\FiveFlowerOpen\textFiveFlowerOpen
  \let\EightFlowerPetal\textEightFlowerPetal
  \let\SunshineOpenCircled\textSunshineOpenCircled
  \let\SixFlowerAltPetal\textSixFlowerAltPetal
  \let\SnowflakeChevron\textSnowflakeChevron
  \let\Snowflake\textSnowflake
  \let\SnowflakeChevronBold\textSnowflakeChevronBold
  \let\Sparkle\textSparkle
  \let\SparkleBold\textSparkleBold
  \let\AsteriskRoundedEnds\textAsteriskRoundedEnds
  \let\EightFlowerPetalRemoved\textEightFlowerPetalRemoved
  \let\EightAsterisk\textEightAsterisk
  \let\CircleShadow\textCircleShadow
  \let\SquareShadowBottomRight\textSquareShadowBottomRight
  \let\SquareTopRight\textSquareTopRight
  \let\SquareCastShadowBottomRight\textSquareCastShadowBottomRight
  \let\SquareCastShadowTopRight\textSquareCastShadowTopRight
  \let\DiamondSolid\textDiamondSolid
  \let\RectangleThin\textRectangleThin
  \let\Rectangle\textRectangle
  \let\RectangleBold\textRectangleBold
  \let\perp\textperp
  \let\notperp\textnotperp
  \let\veedot\textveedot
  \let\wedgedot\textwedgedot
  \let\leftspoon\textleftspoon
  \let\lbrackdbl\textlbrackdbl
  \let\rbrackdbl\textrbrackdbl
  \let\circlearrowleft\textcirclearrowleft
  \let\circlearrowright\textcirclearrowright
  \let\longleftarrow\textlongleftarrow
  \let\longrightarrow\textlongrightarrow
  \let\longleftrightarrow\textlongleftrightarrow
  \let\Longleftarrow\textLongleftarrow
  \let\Longrightarrow\textLongrightarrow
  \let\Longleftrightarrow\textLongleftrightarrow
  \let\longmapsto\textlongmapsto
  \let\Longmapsfrom\textLongmapsfrom
  \let\Longmapsto\textLongmapsto
  \let\nwsearrow\textnwsearrow
  \let\neswarrow\textneswarrow
  \let\lhooknwarrow\textlhooknwarrow
  \let\rhooknearrow\textrhooknearrow
  \let\lhooksearrow\textlhooksearrow
  \let\rhookswarrow\textrhookswarrow
  \let\leadsto\textleadsto
  \let\rcurvearrowne\textrcurvearrowne
  \let\lcurvearrowse\textlcurvearrowse
  \let\lcurvearrowsw\textlcurvearrowsw
  \let\rcurvearrowse\textrcurvearrowse
  \let\lcurvearrowdown\textlcurvearrowdown
  \let\rcurvearrowdown\textrcurvearrowdown
  \let\rcurvearrowleft\textrcurvearrowleft
  \let\rcurvearrowright\textrcurvearrowright
  \let\leftrightharpoon\textleftrightharpoon
  \let\rightleftharpoon\textrightleftharpoon
  \let\updownharpoonrightleft\textupdownharpoonrightleft
  \let\updownharpoonleftright\textupdownharpoonleftright
  \let\leftleftharpoons\textleftleftharpoons
  \let\upupharpoons\textupupharpoons
  \let\rightrightharpoons\textrightrightharpoons
  \let\downdownharpoons\textdowndownharpoons
  \let\leftbarharpoon\textleftbarharpoon
  \let\barleftharpoon\textbarleftharpoon
  \let\rightbarharpoon\textrightbarharpoon
  \let\barrightharpoon\textbarrightharpoon
  \let\updownharpoons\textupdownharpoons
  \let\downupharpoons\textdownupharpoons
  \let\moo\textmoo
  \let\llparenthesis\textllparenthesis
  \let\rrparenthesis\textrrparenthesis
  \let\invdiameter\textinvdiameter
  \let\obar\textobar
  \let\obslash\textobslash
  \let\obot\textobot
  \let\NoChemicalCleaning\textNoChemicalCleaning
  \let\olessthan\textolessthan
  \let\ogreaterthan\textogreaterthan
  \let\boxslash\textboxslash
  \let\boxbslash\textboxbslash
  \let\boxast\textboxast
  \let\boxcircle\textboxcircle
  \let\boxbox\textboxbox
  \let\Valve\textValve
  \let\multimapboth\textmultimapboth
  \let\shuffle\textshuffle
  \let\uplus\textuplus
  \let\bigdoublewedge\textbigdoublewedge
  \let\bigdoublevee\textbigdoublevee
  \let\Join\textJoin
  \let\fatsemi\textfatsemi
  \let\circplus\textcircplus
  \let\minusdot\textminusdot
  \let\dottimes\textdottimes
  \let\dtimes\textdtimes
  \let\odiv\textodiv
  \let\invneg\textinvneg
  \let\sqdoublecap\textsqdoublecap
  \let\capdot\textcapdot
  \let\sqdoublecup\textsqdoublecup
  \let\doublewedge\textdoublewedge
  \let\doublevee\textdoublevee
  \let\doublebarwedge\textdoublebarwedge
  \let\veedoublebar\textveedoublebar
  \let\eqdot\texteqdot
  \let\neqdot\textneqdot
  \let\coloncolonequals\textcoloncolonequals
  \let\leqslant\textleqslant
  \let\nleqslant\textnleqslant
  \let\geqslant\textgeqslant
  \let\ngeqslant\textngeqslant
  \let\lessapprox\textlessapprox
  \let\nlessapprox\textnlessapprox
  \let\gtrapprox\textgtrapprox
  \let\ngtrapprox\textngtrapprox
  \let\lneq\textlneq
  \let\gneq\textgneq
  \let\lnapprox\textlnapprox
  \let\gnapprox\textgnapprox
  \let\lesseqqgtr\textlesseqqgtr
  \let\gtreqqless\textgtreqqless
  \let\eqslantless\texteqslantless
  \let\eqslantgtr\texteqslantgtr
  \let\leftslice\textleftslice
  \let\rightslice\textrightslice
  \let\preceq\textpreceq
  \let\npreceq\textnpreceq
  \let\succeq\textsucceq
  \let\nsucceq\textnsucceq
  \let\precneq\textprecneq
  \let\succneq\textsuccneq
  \let\preceqq\textpreceqq
  \let\npreceqq\textnpreceqq
  \let\succeqq\textsucceqq
  \let\nsucceqq\textnsucceqq
  \let\precneqq\textprecneqq
  \let\succneqq\textsuccneqq
  \let\precapprox\textprecapprox
  \let\nprecapprox\textnprecapprox
  \let\succapprox\textsuccapprox
  \let\nsuccapprox\textnsuccapprox
  \let\precnapprox\textprecnapprox
  \let\succnapprox\textsuccnapprox
  \let\subseteqq\textsubseteqq
  \let\nsubseteqq\textnsubseteqq
  \let\supseteqq\textsupseteqq
  \let\nsupseteqq\textnsupseteqq
  \let\dashV\textdashV
  \let\ndashV\textndashV
  \let\Dashv\textDashv
  \let\nDashv\textnDashv
  \let\DashV\textDashV
  \let\nDashV\textnDashV
  \let\downmodels\textdownmodels
  \let\ndownmodels\textndownmodels
  \let\upmodels\textupmodels
  \let\nupmodels\textnupmodels
  \let\upspoon\textupspoon
  \let\interleave\textinterleave
  \let\sslash\textsslash
  \let\pentagon\textpentagon
  \let\varhexagon\textvarhexagon
  \let\jinferior\textjinferior
  \let\slashdiv\textslashdiv
  \let\fivedots\textfivedots
  \let\oo\textoo
  \let\GaPa\textGaPa
  \let\HaPa\textHaPa
  \let\ViPa\textViPa
  \let\AcPa\textAcPa
  \let\SePa\textSePa
  \let\ZwPa\textZwPa
  \let\fullnote\textfullnote
  \let\halfnote\texthalfnote
  \let\Vier\textVier
  \let\Acht\textAcht
  \let\Sech\textSech
  \let\Zwdr\textZwdr
  \let\Mundus\textMundus
  \let\Moon\textMoon
  \let\ManFace\textManFace
  \let\WomanFace\textWomanFace
  \let\Fax\textFax
  \let\Fire\textFire
  \let\Bicycle\textBicycle
  \let\Gentsroom\textGentsroom
  \let\Ladiesroom\textLadiesroom
  \let\ccnc\textccnc
  \let\ccsa\textccsa
  \let\Info\textInfo
  \let\CESign\textCESign
  \let\neg\textneg
  \let\times\texttimes
  \let\div\textdiv
  \let\pm\textpm
  \let\cdot\textcdot
}% \psdmapshortnames
\newcommand*{\psdaliasnames}{%
  \let\epsdice\HyPsd@DieFace
  \let\fcdice\HyPsd@DieFace
  \let\MoonPha\HyPsd@MoonPha
  \let\mathdollar\textdollar
  \let\EyesDollar\textdollar
  \let\binampersand\textampersand
  \let\with\textampersand
  \let\mathunderscore\textunderscore
  \let\textvertline\textbar
  \let\mathsterling\textsterling
  \let\pounds\textsterling
  \let\brokenvert\textbrokenbar
  \let\mathsection\textsection
  \let\S\textsection
  \let\mathparagraph\textparagraph
  \let\MultiplicationDot\textperiodcentered
  \let\Squaredot\textperiodcentered
  \let\vartimes\textmultiply
  \let\MVMultiplication\textmultiply
  \let\eth\dh
  \let\crossd\textcrd
  \let\textbard\textcrd
  \let\bard\textcrd
  \let\textcrh\texthbar
  \let\crossh\texthbar
  \let\planck\texthbar
  \let\eng\ng
  \let\engma\ng
  \let\crossb\textcrb
  \let\textbarb\textcrb
  \let\barb\textcrb
  \let\Florin\textflorin
  \let\hv\texthvlig
  \let\hausak\texthtk
  \let\crossnilambda\textcrlambda
  \let\barlambda\textcrlambda
  \let\lambdabar\textcrlambda
  \let\lambdaslash\textcrlambda
  \let\textnrleg\textPUnrleg
  \let\textpipevar\textpipe
  \let\textdoublepipevar\textdoublepipe
  \let\textdoublebarpipevar\textdoublebarpipe
  \let\textcrg\textgslash
  \let\textdblig\textPUdblig
  \let\textqplig\textPUqplig
  \let\textcentoldstyle\textslashc
  \let\textbarc\textslashc
  \let\inva\textturna
  \let\vara\textscripta
  \let\invscripta\textturnscripta
  \let\rotvara\textturnscripta
  \let\hookb\texthtb
  \let\hausab\texthtb
  \let\varopeno\textopeno
  \let\curlyc\textctc
  \let\taild\textrtaild
  \let\hookd\texthtd
  \let\hausad\texthtd
  \let\er\textrhookschwa
  \let\epsi\textniepsilon
  \let\hookrevepsilon\textrhookrevepsilon
  \let\closedrevepsilon\textcloserevepsilon
  \let\barj\textbardotlessj
  \let\hookg\texthtg
  \let\varg\textscriptg
  \let\vod\textipagamma
  \let\invh\textturnh
  \let\udesc\textturnh
  \let\hookh\texthth
  \let\voicedh\texthth
  \let\hookheng\texththeng
  \let\ibar\textbari
  \let\vari\textniiota
  \let\tildel\textltilde
  \let\latfric\textbeltl
  \let\taill\textrtaill
  \let\lz\textlyoghlig
  \let\invm\textturnm
  \let\rotm\textturnm
  \let\legm\textturnmrleg
  \let\labdentalnas\textltailm
  \let\emgma\textltailm
  \let\nj\textltailn
  \let\enya\textltailn
  \let\tailn\textrtailn
  \let\closedniomega\textcloseomega
  \let\varomega\textcloseomega
  \let\invr\textturnr
  \let\rotr\textturnr
  \let\invlegr\textturnlonglegr
  \let\tailinvr\textturnrrtail
  \let\legr\textlonglegr
  \let\tailr\textrtailr
  \let\flapr\textfishhookr
  \let\flap\textfishhookr
  \let\tails\textrtails
  \let\curlyesh\textctesh
  \let\clickt\textturnt
  \let\tailt\textrtailt
  \let\ubar\textbaru
  \let\rotOmega\textniupsilon
  \let\invv\textturnv
  \let\pwedge\textturnv
  \let\invw\textturnw
  \let\rotw\textturnw
  \let\invy\textturny
  \let\roty\textturny
  \let\tailz\textrtailz
  \let\curlyz\textctz
  \let\curlyyogh\textctyogh
  \let\ejective\textglotstop
  \let\glottal\textglotstop
  \let\reveject\textrevglotstop
  \let\clickc\textstretchc
  \let\textstretchcvar\textstretchc
  \let\clickb\textbullseye
  \let\textObullseye\textbullseye
  \let\textctjvar\textctj
  \let\textturnsck\textturnk
  \let\dz\textdzlig
  \let\tesh\textteshlig
  \let\digamma\textdigammagreek
  \let\hardsign\cyrhrdsn
  \let\softsign\cyrsftsn
  \let\hebsin\hebshin
  \let\textsck\textPUsck
  \let\textscm\textPUscm
  \let\textscp\textPUscp
  \let\textrevscr\textPUrevscr
  \let\textrhooka\textPUrhooka
  \let\textrhooke\textPUrhooke
  \let\textrhookepsilon\textPUrhookepsilon
  \let\textrhookopeno\textPUrhookopeno
  \let\textdoublevertline\textbardbl
  \let\dag\textdagger
  \let\ddagger\textdaggerdbl
  \let\ddag\textdaggerdbl
  \let\mathellipsis\textellipsis
  \let\EurDig\texteuro
  \let\EURdig\texteuro
  \let\EurHv\texteuro
  \let\EURhv\texteuro
  \let\EurCr\texteuro
  \let\EURcr\texteuro
  \let\EurTm\texteuro
  \let\EURtm\texteuro
  \let\Eur\texteuro
  \let\Denarius\textDeleatur
  \let\agemO\textmho
  \let\EstimatedSign\textestimated
  \let\Ecommerce\textestimated
  \let\bindnasrepma\textinvamp
  \let\parr\textinvamp
  \let\MVRightArrow\textrightarrow
  \let\MVRightarrow\textrightarrow
  \let\MVArrowDown\textdownarrow
  \let\Force\textdownarrow
  \let\textglobrise\textnearrow
  \let\textglobfall\textsearrow
  \let\Lightning\textlightning
  \let\Conclusion\textRightarrow
  \let\dashedleftarrow\textdashleftarrow
  \let\dashedrightarrow\textdashrightarrow
  \let\varnothing\textemptyset
  \let\owns\textni
  \let\notni\textnotowner
  \let\varprop\textpropto
  \let\varangle\textsphericalangle
  \let\Anglesign\textsphericalangle
  \let\AngleSign\textsphericalangle
  \let\notdivides\textnmid
  \let\varowedge\textowedge
  \let\varovee\textovee
  \let\varint\textint
  \let\varoint\textoint
  \let\downtherefore\textbecause
  \let\textdotdiv\textdotminus
  \let\AC\textsim
  \let\wreath\textwr
  \let\nthickapprox\textnapprox
  \let\VHF\texttriplesim
  \let\notasymp\textnasymp
  \let\Doteq\textdoteqdot
  \let\corresponds\texthateq
  \let\Corresponds\texthateq
  \let\nequal\textneq
  \let\Congruent\textequiv
  \let\NotCongruent\textnequiv
  \let\notequiv\textnequiv
  \let\LessOrEqual\textleq
  \let\LargerOrEqual\textgeq
  \let\apprle\textlesssim
  \let\apprge\textgtrsim
  \let\varoplus\textoplus
  \let\varominus\textominus
  \let\varotimes\textotimes
  \let\varoslash\textoslash
  \let\varodot\textodot
  \let\ocirc\textcircledcirc
  \let\varocircle\textcircledcirc
  \let\varoast\textcircledast
  \let\oasterisk\textcircledast
  \let\rightvdash\textvdash
  \let\leftvdash\textdashv
  \let\nleftvdash\textndashv
  \let\downvdash\texttop
  \let\upvdash\textbot
  \let\nperp\textnupvdash
  \let\models\textvDash
  \let\rightmodels\textvDash
  \let\rightVdash\textVdash
  \let\rightModels\textVDash
  \let\nrightvdash\textnvdash
  \let\nrightmodels\textnvDash
  \let\nmodels\textnvDash
  \let\nrightVdash\textnVdash
  \let\nrightModels\textnVDash
  \let\lessclosed\textlhd
  \let\gtrclosed\textrhd
  \let\leqclosed\textunlhd
  \let\trianglelefteq\textunlhd
  \let\geqclosed\textunrhd
  \let\trianglerighteq\textunrhd
  \let\Bowtie\textbowtie
  \let\varcurlyvee\textcurlyvee
  \let\varcurlywedge\textcurlywedge
  \let\doublecap\textCap
  \let\doublecup\textCup
  \let\varsqsubsetneq\textsqsubsetneq
  \let\varsqsupsetneq\textsqsupsetneq
  \let\nlessclosed\textntriangleleft
  \let\ngtrclosed\textntriangleright
  \let\Clocklogo\textclock
  \let\ClockLogo\textclock
  \let\baro\textstmaryrdbaro
  \let\varparallelinv\textbbslash
  \let\CleaningA\textCircledA
  \let\Kutline\textCuttingLine
  \let\CutLine\textCuttingLine
  \let\Cutline\textCuttingLine
  \let\MoveUp\textUParrow
  \let\APLup\textbigtriangleup
  \let\Bleech\textbigtriangleup
  \let\MoveDown\textDOWNarrow
  \let\APLdown\textbigtriangledown
  \let\Diamond\textdiamond
  \let\varbigcirc\textbigcircle
  \let\Telefon\textPhone
  \let\Box\textboxempty
  \let\CheckedBox\textCheckedbox
  \let\XBox\textCrossedbox
  \let\CrossedBox\textCrossedbox
  \let\rightpointleft\textHandLeft
  \let\leftpointright\textHandRight
  \let\PointingHand\textHandRight
  \let\Pointinghand\textHandRight
  \let\Radiation\textRadioactivity
  \let\Yinyang\textYinYang
  \let\YingYang\textYinYang
  \let\Yingyang\textYinYang
  \let\Frowny\textfrownie
  \let\Smiley\textsmiley
  \let\Sun\textsun
  \let\Mercury\textmercury
  \let\textfemale\textPUfemale
  \let\female\textPUfemale
  \let\venus\textPUfemale
  \let\Venus\textPUfemale
  \let\Female\textPUfemale
  \let\Earth\textearth
  \let\mars\textmale
  \let\Mars\textmale
  \let\Male\textmale
  \let\Jupiter\textjupiter
  \let\Saturn\textsaturn
  \let\Uranus\texturanus
  \let\Neptune\textneptune
  \let\Pluto\textpluto
  \let\Aries\textaries
  \let\Taurus\texttaurus
  \let\Gemini\textgemini
  \let\Cancer\textcancer
  \let\Leo\textleo
  \let\Virgo\textvirgo
  \let\Libra\textlibra
  \let\Scorpio\textscorpio
  \let\Sagittarius\textsagittarius
  \let\Capricorn\textcapricornus
  \let\Aquarius\textaquarius
  \let\Pisces\textpisces
  \let\spadesuit\textspadesuitblack
  \let\Heart\textheartsuitwhite
  \let\heartsuit\textheartsuitwhite
  \let\diamondsuit\textdiamondsuitwhite
  \let\clubsuit\textclubsuitblack
  \let\eighthnote\textmusicalnote
  \let\Recycling\textrecycle
  \let\VarFlag\textFlag
  \let\textxswup\textdsmilitary
  \let\textuncrfemale\textPUuncrfemale
  \let\Football\textSoccerBall
  \let\CutLeft\textScissorRightBrokenBottom
  \let\Cutright\textScissorRightBrokenBottom
  \let\RightScissors\textScissorRight
  \let\Leftscissors\textScissorRight
  \let\Letter\textEnvelope
  \let\Writinghand\textWritingHand
  \let\checkmark\textCheckmark
  \let\davidstar\textDavidStar
  \let\llbracket\textlbrackdbl
  \let\rrbracket\textrbrackdbl
  \let\RightTorque\textlcurvearrowdown
  \let\Righttorque\textlcurvearrowdown
  \let\LeftTorque\textrcurvearrowdown
  \let\Lefttorque\textrcurvearrowdown
  \let\textvarobar\textobar
  \let\circledbslash\textobslash
  \let\obackslash\textobslash
  \let\varobslash\textobslash
  \let\odplus\textobot
  \let\varolessthan\textolessthan
  \let\varogreaterthan\textogreaterthan
  \let\divdot\textminusdot
  \let\doublesqcap\textsqdoublecap
  \let\doublesqcup\textsqdoublecup
  \let\merge\textdoublevee
  \let\leftVdash\textdashV
  \let\nleftVdash\textndashV
  \let\leftmodels\textDashv
  \let\nleftmodels\textnDashv
  \let\leftModels\textDashV
  \let\nleftModels\textnDashV
  \let\varparallel\textsslash
  \let\textheng\textPUheng
  \let\textlhookfour\textPUlhookfour
  \let\textscf\textPUscf
  \let\textaolig\textPUaolig
  \let\Ganz\textfullnote
  \let\Halb\texthalfnote
  \let\Womanface\textWomanFace
  \let\Faxmachine\textFax
  \let\CEsign\textCESign
}% \psdaliasnames
%</psdextra>
%    \end{macrocode}
%
% \section{End of file hycheck.tex}
%
%    \begin{macrocode}
%<*check>
\typeout{}
\begin{document}
\end{document}
%</check>
%    \end{macrocode}
%
% \Finale
%
\endinput
