% \iffalse meta-comment
%
% File: bookmark-frozen.dtx
% Version: 2023-12-05 v1.30
% Info: PDF bookmarks
%
% Copyright (C)
%    2007-2011 Heiko Oberdiek
%    2016-2023 Oberdiek Package Support Group
%    https://github.com/ho-tex/bookmark/issues
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either
% version 1.3c of this license or (at your option) any later
% version. This version of this license is in
%    https://www.latex-project.org/lppl/lppl-1-3c.txt
% and the latest version of this license is in
%    https://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 Maintainers of this work are
% Heiko Oberdiek and the Oberdiek Package Support Group
% https://github.com/ho-tex/bookmark/issues
%
% This work consists of the main source file bookmark.dtx
% and the derived files
%    bookmark.sty, bookmark.pdf, bookmark.ins, bookmark.drv,
%    bkm-dvipdfm.def, bkm-dvips.def,
%    bkm-pdftex.def, bkm-vtex.def,
%    bkm-dvipdfm-2019-12-03.def, bkm-dvips-2019-12-03.def,
%    bkm-pdftex-2019-12-03.def, bkm-vtex-2019-12-03.def,
%    bookmark-example.tex.
%
% Distribution:
%    CTAN:macros/latex/contrib/bookmark/bookmark.dtx
%    CTAN:macros/latex/contrib/bookmark/bookmark-frozen.dtx
%    CTAN:macros/latex/contrib/bookmark/bookmark.pdf
%
% Unpacking:
%    (a) If bookmark.ins is present:
%           tex bookmark.ins
%    (b) Without bookmark.ins:
%           tex bookmark.dtx
%    (c) If you insist on using LaTeX
%           latex \let\install=y\input{bookmark.dtx}
%        (quote the arguments according to the demands of your shell)
%
% Documentation:
%    (a) If bookmark.drv is present:
%           latex bookmark.drv
%    (b) Without bookmark.drv:
%           latex bookmark.dtx; ...
%    The class ltxdoc loads the configuration file ltxdoc.cfg
%    if available. Here you can specify further options, e.g.
%    use A4 as paper format:
%       \PassOptionsToClass{a4paper}{article}
%
%    Programm calls to get the documentation (example):
%       pdflatex bookmark.dtx
%       makeindex -s gind.ist bookmark.idx
%       pdflatex bookmark.dtx
%       makeindex -s gind.ist bookmark.idx
%       pdflatex bookmark.dtx
%
% Installation:
%    TDS:tex/latex/bookmark/bookmark.sty
%    TDS:tex/latex/bookmark/bkm-dvipdfm.def
%    TDS:tex/latex/bookmark/bkm-dvips.def
%    TDS:tex/latex/bookmark/bkm-pdftex.def
%    TDS:tex/latex/bookmark/bkm-vtex.def
%    TDS:tex/latex/bookmark/bkm-dvipdfm-2019-12-03.def
%    TDS:tex/latex/bookmark/bkm-dvips-2019-12-03.def
%    TDS:tex/latex/bookmark/bkm-pdftex-2019-12-03.def
%    TDS:tex/latex/bookmark/bkm-vtex-2019-12-03.def%
%    TDS:doc/latex/bookmark/bookmark.pdf
%    TDS:doc/latex/bookmark/bookmark-example.tex
%    TDS:source/latex/bookmark/bookmark.dtx
%    TDS:source/latex/bookmark/bookmark-frozen.dtx
%
% \fi
%<*pdftexfrozen>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{bkm-pdftex.def}%
  [2019/12/03 v1.28 bookmark driver for pdfTeX (HO)]%
\def\BKM@DO@entry#1#2{%
  \begingroup
    \kvsetkeys{BKM@DO}{#1}%
    \def\BKM@DO@title{#2}%
    \ifx\BKM@DO@srcfile\@empty
    \else
      \BKM@UnescapeHex\BKM@DO@srcfile
    \fi
    \BKM@UnescapeHex\BKM@DO@title
    \expandafter\expandafter\expandafter\BKM@getx
        \csname BKM@\BKM@DO@id\endcsname\@empty\@empty
    \let\BKM@attr\@empty
    \ifx\BKM@DO@flags\@empty
    \else
      \edef\BKM@attr{\BKM@attr/F \BKM@DO@flags}%
    \fi
    \ifx\BKM@DO@color\@empty
    \else
      \edef\BKM@attr{\BKM@attr/C[\BKM@DO@color]}%
    \fi
    \ifx\BKM@attr\@empty
    \else
      \edef\BKM@attr{attr{\BKM@attr}}%
    \fi
    \let\BKM@action\@empty
    \ifx\BKM@DO@gotor\@empty
      \ifx\BKM@DO@dest\@empty
        \ifx\BKM@DO@named\@empty
          \ifx\BKM@DO@rawaction\@empty
            \ifx\BKM@DO@uri\@empty
              \ifx\BKM@DO@page\@empty
                \PackageError{bookmark}{%
                  Missing action\BKM@SourceLocation
                }\@ehc
                \edef\BKM@action{goto page1{/Fit}}%
              \else
                \ifx\BKM@DO@view\@empty
                  \def\BKM@DO@view{Fit}%
                \fi
                \edef\BKM@action{goto page\BKM@DO@page{/\BKM@DO@view}}%
              \fi
            \else
              \BKM@UnescapeHex\BKM@DO@uri
              \BKM@EscapeString\BKM@DO@uri
              \edef\BKM@action{user{<</S/URI/URI(\BKM@DO@uri)>>}}%
            \fi
          \else
            \BKM@UnescapeHex\BKM@DO@rawaction
            \edef\BKM@action{%
              user{%
                <<%
                  \BKM@DO@rawaction
                >>%
              }%
            }%
          \fi
        \else
          \BKM@EscapeName\BKM@DO@named
          \edef\BKM@action{%
            user{<</S/Named/N/\BKM@DO@named>>}%
          }%
        \fi
      \else
        \BKM@UnescapeHex\BKM@DO@dest
        \BKM@DefGotoNameAction\BKM@action\BKM@DO@dest
      \fi
    \else
      \ifx\BKM@DO@dest\@empty
        \ifx\BKM@DO@page\@empty
          \def\BKM@DO@page{0}%
        \else
          \BKM@CalcExpr\BKM@DO@page\BKM@DO@page-1%
        \fi
        \ifx\BKM@DO@view\@empty
          \def\BKM@DO@view{Fit}%
        \fi
        \edef\BKM@action{/D[\BKM@DO@page/\BKM@DO@view]}%
      \else
        \BKM@UnescapeHex\BKM@DO@dest
        \BKM@EscapeString\BKM@DO@dest
        \edef\BKM@action{/D(\BKM@DO@dest)}%
      \fi
      \BKM@UnescapeHex\BKM@DO@gotor
      \BKM@EscapeString\BKM@DO@gotor
      \edef\BKM@action{%
        user{%
          <<%
            /S/GoToR%
            /F(\BKM@DO@gotor)%
            \BKM@action
          >>%
        }%
      }%
    \fi
    \pdfoutline\BKM@attr\BKM@action
                count\ifBKM@DO@open\else-\fi\BKM@x@childs
                {\BKM@DO@title}%
  \endgroup
}
\def\BKM@DefGotoNameAction#1#2{%
  \BKM@EscapeString\BKM@DO@dest
  \edef#1{goto name{#2}}%
}
\def\BKM@SourceLocation{%
  \ifx\BKM@DO@srcfile\@empty
    \ifx\BKM@DO@srcline\@empty
    \else
      .\MessageBreak
      Source: line \BKM@DO@srcline
    \fi
  \else
    \ifx\BKM@DO@srcline\@empty
      .\MessageBreak
      Source: file `\BKM@DO@srcfile'%
    \else
      .\MessageBreak
      Source: file `\BKM@DO@srcfile', line \BKM@DO@srcline
    \fi
  \fi
}
\RequirePackage{auxhook}
\AddLineBeginMainAux{%
  \string\providecommand\string\BKM@entry[2]{}%
}
\newcount\BKM@id
\BKM@id=\z@
\@namedef{BKM@0}{000}
\newif\ifBKM@sw
\newcommand*{\bookmark}[2][]{%
  \if@filesw
    \begingroup
      \BKM@InitSourceLocation
      \def\bookmark@text{#2}%
      \BKM@setup{#1}%
      \ifx\BKM@srcfile\@empty
      \else
        \BKM@EscapeHex\BKM@srcfile
      \fi
      \edef\BKM@prev{\the\BKM@id}%
      \global\advance\BKM@id\@ne
      \BKM@swtrue
      \@whilesw\ifBKM@sw\fi{%
        \ifnum\ifBKM@startatroot\z@\else\BKM@prev\fi=\z@
          \BKM@startatrootfalse
          \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{%
            0{\BKM@level}0%
          }%
          \BKM@swfalse
        \else
          \expandafter\expandafter\expandafter\BKM@getx
              \csname BKM@\BKM@prev\endcsname
          \ifnum\BKM@level>\BKM@x@level\relax
            \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{%
              {\BKM@prev}{\BKM@level}0%
            }%
            \ifnum\BKM@prev>\z@
              \BKM@CalcExpr\BKM@CalcResult\BKM@x@childs+1%
              \expandafter\xdef\csname BKM@\BKM@prev\endcsname{%
                {\BKM@x@parent}{\BKM@x@level}{\BKM@CalcResult}%
              }%
            \fi
            \BKM@swfalse
          \else
            \let\BKM@prev\BKM@x@parent
          \fi
        \fi
      }%
      \pdfstringdef\BKM@title{\bookmark@text}%
      \edef\BKM@FLAGS{\BKM@PrintStyle}%
      \csname BKM@HypDestOptHook\endcsname
      \BKM@EscapeHex\BKM@dest
      \BKM@EscapeHex\BKM@uri
      \BKM@EscapeHex\BKM@gotor
      \BKM@EscapeHex\BKM@rawaction
      \BKM@EscapeHex\BKM@title
      \immediate\write\@mainaux{%
        \string\BKM@entry{%
          id=\number\BKM@id
          \ifBKM@open
            \ifnum\BKM@level<\BKM@openlevel
              ,open%
            \fi
          \fi
          \BKM@auxentry{dest}%
          \BKM@auxentry{named}%
          \BKM@auxentry{uri}%
          \BKM@auxentry{gotor}%
          \BKM@auxentry{page}%
          \BKM@auxentry{view}%
          \BKM@auxentry{rawaction}%
          \BKM@auxentry{color}%
          \ifnum\BKM@FLAGS>\z@
            ,flags=\BKM@FLAGS
          \fi
          \BKM@auxentry{srcline}%
          \BKM@auxentry{srcfile}%
        }{\BKM@title}%
      }%
    \endgroup
  \fi
}
\def\BKM@getx#1#2#3{%
  \def\BKM@x@parent{#1}%
  \def\BKM@x@level{#2}%
  \def\BKM@x@childs{#3}%
}
\def\BKM@auxentry#1{%
  \expandafter\ifx\csname BKM@#1\endcsname\@empty
  \else
    ,#1={\csname BKM@#1\endcsname}%
  \fi
}
\def\BKM@InitSourceLocation{%
  \edef\BKM@srcline{\the\inputlineno}%
  \BKM@LuaTeX@InitFile
  \ifx\BKM@srcfile\@empty
    \ltx@IfUndefined{currfilepath}{}{%
      \edef\BKM@srcfile{\currfilepath}%
    }%
  \fi
}
\ifluatex
  \ifnum\luatexversion>36 %
    \def\BKM@LuaTeX@InitFile{%
      \begingroup
        \ltx@LocToksA={}%
      \edef\x{\endgroup
        \def\noexpand\BKM@srcfile{%
          \the\expandafter\ltx@LocToksA
          \directlua{%
             if status and status.filename then %
               tex.settoks('ltx@LocToksA', status.filename)%
             end%
          }%
        }%
      }\x
    }%
  \else
    \let\BKM@LuaTeX@InitFile\relax
  \fi
\else
  \let\BKM@LuaTeX@InitFile\relax
\fi
\SetupKeyvalOptions{family=BKM@DO,prefix=BKM@DO@}
\DeclareStringOption[0]{id}
\DeclareBoolOption{open}
\DeclareStringOption{flags}
\DeclareStringOption{color}
\DeclareStringOption{dest}
\DeclareStringOption{named}
\DeclareStringOption{uri}
\DeclareStringOption{gotor}
\DeclareStringOption{page}
\DeclareStringOption{view}
\DeclareStringOption{rawaction}
\DeclareStringOption{srcline}
\DeclareStringOption{srcfile}
\AtBeginDocument{%
  \let\BKM@entry\BKM@DO@entry
}
\ifBKM@atend
  \AfterLastShipout{%
    \BKM@EndHook
  }%
\fi
%</pdftexfrozen>
%<*dvipsfrozen>
\def\BKM@SourceLocation{%
  \ifx\BKM@DO@srcfile\@empty
    \ifx\BKM@DO@srcline\@empty
    \else
      .\MessageBreak
      Source: line \BKM@DO@srcline
    \fi
  \else
    \ifx\BKM@DO@srcline\@empty
      .\MessageBreak
      Source: file `\BKM@DO@srcfile'%
    \else
      .\MessageBreak
      Source: file `\BKM@DO@srcfile', line \BKM@DO@srcline
    \fi
  \fi
}
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{bkm-dvips.def}%
  [2019/12/03 v1.28 bookmark driver for dvips (HO)]%
\def\BKM@PSHeaderFile#1{%
  \special{header=#1}%
}
\def\BKM@filename{\jobname.out.ps}
\BKM@PSHeaderFile\BKM@filename
\RequirePackage{atveryend}[2009/12/07]
\AfterLastShipout{\BKM@pdfmark@out}
\def\BKM@pdfmark@out{%
  \if@filesw
    \newwrite\BKM@file
    \immediate\openout\BKM@file=\BKM@filename\relax
    \BKM@write{\@percentchar!}%
    \BKM@write{/pdfmark where{pop}}%
    \BKM@write{%
      {%
        /globaldict where{pop globaldict}{userdict}ifelse%
        /pdfmark/cleartomark load put%
      }%
    }%
    \BKM@write{ifelse}%
  \else
    \let\BKM@write\@gobble
    \let\BKM@DO@entry\@gobbletwo
  \fi
}
\def\BKM@write#{%
  \immediate\write\BKM@file
}
\def\BKM@DO@entry#1#2{%
  \begingroup
    \kvsetkeys{BKM@DO}{#1}%
    \ifx\BKM@DO@srcfile\@empty
    \else
      \BKM@UnescapeHex\BKM@DO@srcfile
    \fi
    \def\BKM@DO@title{#2}%
    \BKM@UnescapeHex\BKM@DO@title
    \expandafter\expandafter\expandafter\BKM@getx
        \csname BKM@\BKM@DO@id\endcsname\@empty\@empty
    \let\BKM@attr\@empty
    \ifx\BKM@DO@flags\@empty
    \else
      \edef\BKM@attr{\BKM@attr/F \BKM@DO@flags}%
    \fi
    \ifx\BKM@DO@color\@empty
    \else
      \edef\BKM@attr{\BKM@attr/C[\BKM@DO@color]}%
    \fi
    \let\BKM@action\@empty
    \ifx\BKM@DO@gotor\@empty
      \ifx\BKM@DO@dest\@empty
        \ifx\BKM@DO@named\@empty
          \ifx\BKM@DO@rawaction\@empty
            \ifx\BKM@DO@uri\@empty
              \ifx\BKM@DO@page\@empty
                \PackageError{bookmark}{%
                  Missing action\BKM@SourceLocation
                }\@ehc
                \edef\BKM@action{%
                  /Action/GoTo%
                  /Page 1%
                  /View[/Fit]%
                }%
              \else
                \ifx\BKM@DO@view\@empty
                  \def\BKM@DO@view{Fit}%
                \fi
                \edef\BKM@action{%
                  /Action/GoTo%
                  /Page \BKM@DO@page
                  /View[/\BKM@DO@view]%
                }%
              \fi
            \else
              \BKM@UnescapeHex\BKM@DO@uri
              \BKM@EscapeString\BKM@DO@uri
              \edef\BKM@action{%
                /Action<<%
                  /Subtype/URI%
                  /URI(\BKM@DO@uri)%
                >>%
              }%
            \fi
          \else
            \BKM@UnescapeHex\BKM@DO@rawaction
            \edef\BKM@action{%
              /Action<<%
                \BKM@DO@rawaction
              >>%
            }%
          \fi
        \else
          \BKM@EscapeName\BKM@DO@named
          \edef\BKM@action{%
            /Action<<%
              /Subtype/Named%
              /N/\BKM@DO@named
            >>%
          }%
        \fi
      \else
        \BKM@UnescapeHex\BKM@DO@dest
        \BKM@EscapeString\BKM@DO@dest
        \edef\BKM@action{%
          /Action/GoTo%
          /Dest(\BKM@DO@dest)cvn%
        }%
      \fi
    \else
      \ifx\BKM@DO@dest\@empty
        \ifx\BKM@DO@page\@empty
          \def\BKM@DO@page{1}%
        \fi
        \ifx\BKM@DO@view\@empty
          \def\BKM@DO@view{Fit}%
        \fi
        \edef\BKM@action{%
          /Page \BKM@DO@page
          /View[/\BKM@DO@view]%
        }%
      \else
        \BKM@UnescapeHex\BKM@DO@dest
        \BKM@EscapeString\BKM@DO@dest
        \edef\BKM@action{%
          /Dest(\BKM@DO@dest)cvn%
        }%
      \fi
      \BKM@UnescapeHex\BKM@DO@gotor
      \BKM@EscapeString\BKM@DO@gotor
      \edef\BKM@action{%
        /Action/GoToR%
        /File(\BKM@DO@gotor)%
        \BKM@action
      }%
    \fi
    \BKM@write{[}%
    \BKM@write{/Title(\BKM@DO@title)}%
    \ifnum\BKM@x@childs>\z@
      \BKM@write{/Count \ifBKM@DO@open\else-\fi\BKM@x@childs}%
    \fi
    \ifx\BKM@attr\@empty
    \else
      \BKM@write{\BKM@attr}%
    \fi
    \BKM@write{\BKM@action}%
    \BKM@write{/OUT pdfmark}%
  \endgroup
}
\RequirePackage{auxhook}
\AddLineBeginMainAux{%
  \string\providecommand\string\BKM@entry[2]{}%
}
\newcount\BKM@id
\BKM@id=\z@
\@namedef{BKM@0}{000}
\newif\ifBKM@sw
\newcommand*{\bookmark}[2][]{%
  \if@filesw
    \begingroup
      \BKM@InitSourceLocation
      \def\bookmark@text{#2}%
      \BKM@setup{#1}%
      \ifx\BKM@srcfile\@empty
      \else
        \BKM@EscapeHex\BKM@srcfile
      \fi
      \edef\BKM@prev{\the\BKM@id}%
      \global\advance\BKM@id\@ne
      \BKM@swtrue
      \@whilesw\ifBKM@sw\fi{%
        \ifnum\ifBKM@startatroot\z@\else\BKM@prev\fi=\z@
          \BKM@startatrootfalse
          \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{%
            0{\BKM@level}0%
          }%
          \BKM@swfalse
        \else
          \expandafter\expandafter\expandafter\BKM@getx
              \csname BKM@\BKM@prev\endcsname
          \ifnum\BKM@level>\BKM@x@level\relax
            \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{%
              {\BKM@prev}{\BKM@level}0%
            }%
            \ifnum\BKM@prev>\z@
              \BKM@CalcExpr\BKM@CalcResult\BKM@x@childs+1%
              \expandafter\xdef\csname BKM@\BKM@prev\endcsname{%
                {\BKM@x@parent}{\BKM@x@level}{\BKM@CalcResult}%
              }%
            \fi
            \BKM@swfalse
          \else
            \let\BKM@prev\BKM@x@parent
          \fi
        \fi
      }%
      \pdfstringdef\BKM@title{\bookmark@text}%
      \edef\BKM@FLAGS{\BKM@PrintStyle}%
      \csname BKM@HypDestOptHook\endcsname
      \BKM@EscapeHex\BKM@dest
      \BKM@EscapeHex\BKM@uri
      \BKM@EscapeHex\BKM@gotor
      \BKM@EscapeHex\BKM@rawaction
      \BKM@EscapeHex\BKM@title
      \immediate\write\@mainaux{%
        \string\BKM@entry{%
          id=\number\BKM@id
          \ifBKM@open
            \ifnum\BKM@level<\BKM@openlevel
              ,open%
            \fi
          \fi
          \BKM@auxentry{dest}%
          \BKM@auxentry{named}%
          \BKM@auxentry{uri}%
          \BKM@auxentry{gotor}%
          \BKM@auxentry{page}%
          \BKM@auxentry{view}%
          \BKM@auxentry{rawaction}%
          \BKM@auxentry{color}%
          \ifnum\BKM@FLAGS>\z@
            ,flags=\BKM@FLAGS
          \fi
          \BKM@auxentry{srcline}%
          \BKM@auxentry{srcfile}%
        }{\BKM@title}%
      }%
    \endgroup
  \fi
}
\def\BKM@getx#1#2#3{%
  \def\BKM@x@parent{#1}%
  \def\BKM@x@level{#2}%
  \def\BKM@x@childs{#3}%
}
\def\BKM@auxentry#1{%
  \expandafter\ifx\csname BKM@#1\endcsname\@empty
  \else
    ,#1={\csname BKM@#1\endcsname}%
  \fi
}
\def\BKM@InitSourceLocation{%
  \edef\BKM@srcline{\the\inputlineno}%
  \BKM@LuaTeX@InitFile
  \ifx\BKM@srcfile\@empty
    \ltx@IfUndefined{currfilepath}{}{%
      \edef\BKM@srcfile{\currfilepath}%
    }%
  \fi
}
\ifluatex
  \ifnum\luatexversion>36 %
    \def\BKM@LuaTeX@InitFile{%
      \begingroup
        \ltx@LocToksA={}%
      \edef\x{\endgroup
        \def\noexpand\BKM@srcfile{%
          \the\expandafter\ltx@LocToksA
          \directlua{%
             if status and status.filename then %
               tex.settoks('ltx@LocToksA', status.filename)%
             end%
          }%
        }%
      }\x
    }%
  \else
    \let\BKM@LuaTeX@InitFile\relax
  \fi
\else
  \let\BKM@LuaTeX@InitFile\relax
\fi
\SetupKeyvalOptions{family=BKM@DO,prefix=BKM@DO@}
\DeclareStringOption[0]{id}
\DeclareBoolOption{open}
\DeclareStringOption{flags}
\DeclareStringOption{color}
\DeclareStringOption{dest}
\DeclareStringOption{named}
\DeclareStringOption{uri}
\DeclareStringOption{gotor}
\DeclareStringOption{page}
\DeclareStringOption{view}
\DeclareStringOption{rawaction}
\DeclareStringOption{srcline}
\DeclareStringOption{srcfile}
\AtBeginDocument{%
  \let\BKM@entry\BKM@DO@entry
}
\ifBKM@atend
  \AfterLastShipout{%
    \BKM@EndHook
  }%
\fi
%</dvipsfrozen>
%<*dvipdfmfrozen>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{bkm-dvipdfm.def}%
  [2019/12/03 v1.28 bookmark driver for dvipdfm (HO)]%
\newcount\BKM@id
\BKM@id=\z@
\@namedef{BKM@0}{000}
\newif\ifBKM@sw
\newcommand*{\bookmark}[2][]{%
  \if@filesw
    \begingroup
      \def\bookmark@text{#2}%
      \BKM@setup{#1}%
      \edef\BKM@prev{\the\BKM@id}%
      \global\advance\BKM@id\@ne
      \BKM@swtrue
      \@whilesw\ifBKM@sw\fi{%
        \def\BKM@abslevel{1}%
        \ifnum\ifBKM@startatroot\z@\else\BKM@prev\fi=\z@
          \BKM@startatrootfalse
          \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{%
            0{\BKM@level}\BKM@abslevel
          }%
          \BKM@swfalse
        \else
          \expandafter\expandafter\expandafter\BKM@getx
              \csname BKM@\BKM@prev\endcsname
          \ifnum\BKM@level>\BKM@x@level\relax
            \BKM@CalcExpr\BKM@abslevel\BKM@x@abslevel+1%
            \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{%
              {\BKM@prev}{\BKM@level}\BKM@abslevel
            }%
            \BKM@swfalse
          \else
            \let\BKM@prev\BKM@x@parent
          \fi
        \fi
      }%
      \csname HyPsd@XeTeXBigCharstrue\endcsname
      \pdfstringdef\BKM@title{\bookmark@text}%
      \edef\BKM@FLAGS{\BKM@PrintStyle}%
      \let\BKM@action\@empty
      \ifx\BKM@gotor\@empty
        \ifx\BKM@dest\@empty
          \ifx\BKM@named\@empty
            \ifx\BKM@rawaction\@empty
              \ifx\BKM@uri\@empty
                \ifx\BKM@page\@empty
                  \PackageError{bookmark}{Missing action}\@ehc
                  \edef\BKM@action{/Dest[@page1/Fit]}%
                \else
                  \ifx\BKM@view\@empty
                    \def\BKM@view{Fit}%
                  \fi
                  \edef\BKM@action{/Dest[@page\BKM@page/\BKM@view]}%
                \fi
              \else
                \BKM@EscapeString\BKM@uri
                \edef\BKM@action{%
                  /A<<%
                    /S/URI%
                    /URI(\BKM@uri)%
                  >>%
                }%
              \fi
            \else
              \edef\BKM@action{/A<<\BKM@rawaction>>}%
            \fi
          \else
            \BKM@EscapeName\BKM@named
            \edef\BKM@action{%
              /A<</S/Named/N/\BKM@named>>%
            }%
          \fi
        \else
          \BKM@EscapeString\BKM@dest
          \edef\BKM@action{%
            /A<<%
              /S/GoTo%
              /D(\BKM@dest)%
            >>%
          }%
        \fi
      \else
        \ifx\BKM@dest\@empty
          \ifx\BKM@page\@empty
            \def\BKM@page{0}%
          \else
            \BKM@CalcExpr\BKM@page\BKM@page-1%
          \fi
          \ifx\BKM@view\@empty
            \def\BKM@view{Fit}%
          \fi
          \edef\BKM@action{/D[\BKM@page/\BKM@view]}%
        \else
          \BKM@EscapeString\BKM@dest
          \edef\BKM@action{/D(\BKM@dest)}%
        \fi
        \BKM@EscapeString\BKM@gotor
        \edef\BKM@action{%
          /A<<%
            /S/GoToR%
            /F(\BKM@gotor)%
            \BKM@action
          >>%
        }%
      \fi
      \special{pdf:%
        out \ifBKM@DvipdfmxOutlineOpen
              [%
              \ifBKM@open
                \ifnum\BKM@level<%
                    \expandafter\ltx@firstofone\expandafter
                    {\number\BKM@openlevel} %
                \else
                  -%
                \fi
              \else
                -%
              \fi
              ] %
            \fi
            \BKM@abslevel
        <<%
          /Title(\BKM@title)%
          \ifx\BKM@color\@empty
          \else
            /C[\BKM@color]%
          \fi
          \ifnum\BKM@FLAGS>\z@
            /F \BKM@FLAGS
          \fi
          \BKM@action
        >>%
      }%
    \endgroup
  \fi
}
\def\BKM@getx#1#2#3{%
  \def\BKM@x@parent{#1}%
  \def\BKM@x@level{#2}%
  \def\BKM@x@abslevel{#3}%
}
\ifBKM@atend
  \RequirePackage{atenddvi}%
  \AtEndDvi{\BKM@EndHook}%
\fi
%</dvipdfmfrozen>
%<*vtexfrozen>
\NeedsTeXFormat{LaTeX2e}
\ProvidesFile{bkm-vtex.def}%
  [2019/12/03 v1.28 bookmark driver for VTeX (HO)]%
\ifvtexpdf
\else
  \PackageWarningNoLine{bookmark}{%
    The VTeX driver only supports PDF mode%
  }%
\fi
\newcount\BKM@id
\BKM@id=\z@
\@namedef{BKM@0}{00}
\newif\ifBKM@sw
\newcommand*{\bookmark}[2][]{%
  \if@filesw
    \begingroup
      \def\bookmark@text{#2}%
      \BKM@setup{#1}%
      \edef\BKM@prev{\the\BKM@id}%
      \global\advance\BKM@id\@ne
      \BKM@swtrue
      \@whilesw\ifBKM@sw\fi{%
        \ifnum\ifBKM@startatroot\z@\else\BKM@prev\fi=\z@
          \BKM@startatrootfalse
          \def\BKM@parent{0}%
          \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{%
            0{\BKM@level}%
          }%
          \BKM@swfalse
        \else
          \expandafter\expandafter\expandafter\BKM@getx
              \csname BKM@\BKM@prev\endcsname
          \ifnum\BKM@level>\BKM@x@level\relax
            \let\BKM@parent\BKM@prev
            \expandafter\xdef\csname BKM@\the\BKM@id\endcsname{%
              {\BKM@prev}{\BKM@level}%
            }%
            \BKM@swfalse
          \else
            \let\BKM@prev\BKM@x@parent
          \fi
        \fi
      }%
      \pdfstringdef\BKM@title{\bookmark@text}%
      \BKM@vtex@title
      \edef\BKM@FLAGS{\BKM@PrintStyle}%
      \let\BKM@action\@empty
      \ifx\BKM@gotor\@empty
        \ifx\BKM@dest\@empty
          \ifx\BKM@named\@empty
            \ifx\BKM@rawaction\@empty
              \ifx\BKM@uri\@empty
                \ifx\BKM@page\@empty
                  \PackageError{bookmark}{Missing action}\@ehc
                  \def\BKM@action{!1}%
                \else
                  \edef\BKM@action{!\BKM@page}%
                \fi
              \else
                \BKM@EscapeString\BKM@uri
                \edef\BKM@action{%
                  <u=%
                    /S/URI%
                    /URI(\BKM@uri)%
                  >%
                }%
              \fi
            \else
              \edef\BKM@action{<u=\BKM@rawaction>}%
            \fi
          \else
            \BKM@EscapeName\BKM@named
            \edef\BKM@action{%
              <u=%
                /S/Named%
                /N/\BKM@named
              >%
            }%
          \fi
        \else
          \BKM@EscapeString\BKM@dest
          \edef\BKM@action{\BKM@dest}%
        \fi
      \else
        \ifx\BKM@dest\@empty
          \ifx\BKM@page\@empty
            \def\BKM@page{1}%
          \fi
          \ifx\BKM@view\@empty
            \def\BKM@view{Fit}%
          \fi
          \edef\BKM@action{/D[\BKM@page/\BKM@view]}%
        \else
          \BKM@EscapeString\BKM@dest
          \edef\BKM@action{/D(\BKM@dest)}%
        \fi
        \BKM@EscapeString\BKM@gotor
        \edef\BKM@action{%
          <u=%
            /S/GoToR%
            /F(\BKM@gotor)%
            \BKM@action
          >>%
        }%
      \fi
      \ifx\BKM@color\@empty
        \let\BKM@RGBcolor\@empty
      \else
        \expandafter\BKM@toRGB\BKM@color\@nil
      \fi
      \special{%
        !outline \BKM@action;%
        p=\BKM@parent,%
        i=\number\BKM@id,%
        s=%
          \ifBKM@open
            \ifnum\BKM@level<\BKM@openlevel
              o%
            \else
              c%
            \fi
          \else
            c%
          \fi,%
        \ifx\BKM@RGBcolor\@empty
        \else
          c=\BKM@RGBcolor,%
        \fi
        \ifnum\BKM@FLAGS>\z@
          f=\BKM@FLAGS,%
        \fi
        t=\BKM@title
      }%
    \endgroup
  \fi
}
\def\BKM@getx#1#2{%
  \def\BKM@x@parent{#1}%
  \def\BKM@x@level{#2}%
}
\def\BKM@toRGB#1 #2 #3\@nil{%
  \let\BKM@RGBcolor\@empty
  \BKM@toRGBComponent{#1}%
  \BKM@toRGBComponent{#2}%
  \BKM@toRGBComponent{#3}%
}
\def\BKM@toRGBComponent#1{%
  \dimen@=#1pt\relax
  \ifdim\dimen@>\z@
    \ifdim\dimen@<\p@
      \dimen@=255\dimen@
      \advance\dimen@ by 32768sp\relax
      \divide\dimen@ by 65536\relax
      \dimen@ii=\dimen@
      \divide\dimen@ii by 16\relax
      \edef\BKM@RGBcolor{%
        \BKM@RGBcolor
        \BKM@toHexDigit\dimen@ii
      }%
      \dimen@ii=16\dimen@ii
      \advance\dimen@-\dimen@ii
      \edef\BKM@RGBcolor{%
        \BKM@RGBcolor
        \BKM@toHexDigit\dimen@
      }%
    \else
      \edef\BKM@RGBcolor{\BKM@RGBcolor FF}%
    \fi
  \else
    \edef\BKM@RGBcolor{\BKM@RGBcolor00}%
  \fi
}
\def\BKM@toHexDigit#1{%
  \ifcase\expandafter\@firstofone\expandafter{\number#1} %
    0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or
    8\or 9\or A\or B\or C\or D\or E\or F%
  \fi
}
\begingroup
  \catcode`\|=0 %
  \catcode`\\=12 %
  |gdef|BKM@vtex@title{%
    |@onelevel@sanitize|BKM@title
    |edef|BKM@title{|expandafter|BKM@vtex@leftparen|BKM@title\(|@nil}%
    |edef|BKM@title{|expandafter|BKM@vtex@rightparen|BKM@title\)|@nil}%
    |edef|BKM@title{|expandafter|BKM@vtex@zero|BKM@title\0|@nil}%
    |edef|BKM@title{|expandafter|BKM@vtex@one|BKM@title\1|@nil}%
    |edef|BKM@title{|expandafter|BKM@vtex@two|BKM@title\2|@nil}%
    |edef|BKM@title{|expandafter|BKM@vtex@three|BKM@title\3|@nil}%
  }%
  |gdef|BKM@vtex@leftparen#1\(#2|@nil{%
    #1%
    |ifx||#2||%
    |else
      (%
      |ltx@ReturnAfterFi{%
        |BKM@vtex@leftparen#2|@nil
      }%
    |fi
  }%
  |gdef|BKM@vtex@rightparen#1\)#2|@nil{%
    #1%
    |ifx||#2||%
    |else
      )%
      |ltx@ReturnAfterFi{%
        |BKM@vtex@rightparen#2|@nil
      }%
    |fi
  }%
  |gdef|BKM@vtex@zero#1\0#2|@nil{%
    #1%
    |ifx||#2||%
    |else
      |noexpand|hv@pdf@char0%
      |ltx@ReturnAfterFi{%
        |BKM@vtex@zero#2|@nil
      }%
    |fi
  }%
  |gdef|BKM@vtex@one#1\1#2|@nil{%
    #1%
    |ifx||#2||%
    |else
      |noexpand|hv@pdf@char1%
      |ltx@ReturnAfterFi{%
        |BKM@vtex@one#2|@nil
      }%
    |fi
  }%
  |gdef|BKM@vtex@two#1\2#2|@nil{%
    #1%
    |ifx||#2||%
    |else
      |noexpand|hv@pdf@char2%
      |ltx@ReturnAfterFi{%
        |BKM@vtex@two#2|@nil
      }%
    |fi
  }%
  |gdef|BKM@vtex@three#1\3#2|@nil{%
    #1%
    |ifx||#2||%
    |else
      |noexpand|hv@pdf@char3%
      |ltx@ReturnAfterFi{%
        |BKM@vtex@three#2|@nil
      }%
    |fi
  }%
|endgroup
\ifBKM@atend
  \RequirePackage{atenddvi}%
  \AtEndDvi{\BKM@EndHook}%
\fi
%</vtexfrozen>
