%%
%% This is file `lwarp.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% lwarp.dtx  (with options: `package')
%% This is a generated file.
%% Copyright 2016-2020 Brian Dunn
%% 
%% 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.
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesPackage{lwarp}
    [2021/07/17 v0.900  Allows LaTeX to directly produce HTML5 output.]








\RequirePackage{iftex}[2019/11/07]
\RequirePackage{ifpdf}
\RequirePackage{ifptex}

\newif\ifxetexorluatex

\ifXeTeX
    \xetexorluatextrue
\else
    \ifLuaTeX
        \xetexorluatextrue
    \else
        \xetexorluatexfalse
    \fi
\fi
\RequirePackage{etoolbox}[2011/01/03]% v2.6 for \BeforeBeginEnvironment, etc.
\RequirePackage{xpatch}

\RequirePackage{ifplatform}% sense op-system platform
\RequirePackage{letltxmacro}
\newcommand*{\LWR@loadafter}[1]{%
\@ifpackageloaded{#1}
{
    \PackageError{lwarp}
        {%
            Package #1,\MessageBreak
            or one which uses #1,\MessageBreak
            must be loaded after Lwarp.\MessageBreak
            Enter 'H' for possible solutions%
        }
        {%
            Move ``\protect\usepackage{#1}'' after
            ``\protect\usepackage{lwarp}''.\MessageBreak
            Package #1 may also be loaded by something else,\MessageBreak
            which must also be moved after Lwarp.%
        }
}
{\relax}
}

\@ifclassloaded{memoir}
{\newcommand*{\LWR@notmemoirloadafter}[1]{}}
{\LetLtxMacro\LWR@notmemoirloadafter\LWR@loadafter}

\LetLtxMacro\LWR@notltjloadafter\LWR@loadafter

\@ifclassloaded{ltjarticle}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjbook}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjreport}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjsarticle}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjsbook}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjsreport}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjspf}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjskiyou}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjtarticle}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjtbook}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}
\@ifclassloaded{ltjtreport}{\renewcommand*{\LWR@notltjloadafter}[1]{}}{}

\newcommand*{\LWR@loadbefore}[1]{%
\@ifpackageloaded{#1}
{\relax}
{
    \PackageError{lwarp}
    {%
        Package #1 must be loaded before lwarp.\MessageBreak
        Enter 'H' for possible solutions%
    }
    {Move ``\protect\usepackage{#1}'' before ``\protect\usepackage{lwarp}''.}
}
}

\newcommand*{\LWR@checkloadbefore}[1]{%
    \ifdefstring{\LWR@tempone}{#1}{%
        \LWR@loadbefore{#1}%
    }{}%
}

\newcommand*{\LWR@loadnever}[2]{%
\PackageError{lwarp}
{%
    Package #1 is not yet supported\MessageBreak
    by lwarp's HTML conversion%
    \ifblank{#2}{}{%
        .\MessageBreak
        Package(s)\MessageBreak
        \space\space#2\MessageBreak
        may be useful instead%
    }%
}
{%
    Package #1 might conflict with lwarp in some way,\MessageBreak
    or is superceded by another package.%
    \ifblank{#2}{}{%
        \MessageBreak
        For possible alternatives, see package(s) #2.%
    }%
}
}
\newcommand*{\LWR@afterloadnever}[2]{%
    \ifdefstring{\LWR@tempone}{#1}{%
        \LWR@loadnever{#1}{#2}%
    }{}%
}
\newcommand*{\LWR@earlyloadnever}[2]{%
    \@ifpackageloaded{#1}{%
        \LWR@loadnever{#1}{#2}%
    }{}%
}
\newcommand*{\LWR@earlyclassloadnever}[2]{%
\@ifclassloaded{#1}{%
\PackageError{lwarp}
{%
    Class #1 is not supported\MessageBreak
    by lwarp's HTML conversion%
    \ifblank{#2}{}{%
        .\MessageBreak
        Class(es) #2 may be useful instead%
    }%
}
{%
    Class #1 might conflict with lwarp in some way,\MessageBreak
    or is superceded by another class.%
    \ifblank{#2}{}{%
        \MessageBreak
        For a possible alternative, see class(es) #2.%
    }%
}
}{\relax}%
}
\newcommand*{\LWR@checkloadnevers}{
\LWR@checkloadnever{ae}{cm-super, lmodern}
\LWR@checkloadnever{aecompl}{cm-super, lmodern}
\LWR@checkloadnever{aecc}{cm-super, lmodern}
\LWR@checkloadnever{alg}{algorithm2e, algorithmicx}
\LWR@checkloadnever{algorithmic}{algorithm2e, algorithmicx}
\LWR@checkloadnever{bitfield}{bytefield}
\LWR@checkloadnever{bxcjkjatype}{upLaTeX, bxjsarticle, ujarticle, utarticle}
\LWR@checkloadnever{caption2}{caption}
\LWR@checkloadnever{colortab}{colortbl}
\LWR@checkloadnever{csvtools}{datatool}
\LWR@checkloadnever{doublespace}{setspace}
\LWR@checkloadnever{fancyheadings}{fancyhdr}
\LWR@checkloadnever{fncylab}{cleveref}
\LWR@checkloadnever{formula}{siunitx}
\LWR@checkloadnever{glossary}{glossaries}
\LWR@checkloadnever{hangul}{kotex, xetexko, luatexko}
\LWR@checkloadnever{hyper}{hyperref}
\LWR@checkloadnever{libgreek}{libertinust1math, newtx}
\LWR@checkloadnever{newthm}{ntheorem}
\LWR@checkloadnever{pdfcprot}{microtype}
\LWR@checkloadnever{picins}{floatflt, wrapfig}
\LWR@checkloadnever{rplain}{fancyhdr}
\LWR@checkloadnever{si}{siunitx}
\LWR@checkloadnever{sistyle}{siunitx}
\LWR@checkloadnever{slashbox}{diagbox}
\LWR@checkloadnever{statex}{statex2}
\LWR@checkloadnever{t1enc}{fontenc, inputenc, inputenx}
\LWR@checkloadnever{ucs}{inputenc, inputencx}
\LWR@checkloadnever{wasysym}{textcomp, amssymb, amsfonts, mnsymbol, fdsymbol}
\LWR@checkloadnever{animate}{}
\LWR@checkloadnever{auto-pst-pdf}{}
\LWR@checkloadnever{auto-pst-pdf-lua}{}
\LWR@checkloadnever{algorithms}{}
\LWR@checkloadnever{arraycols}{}
\LWR@checkloadnever{beamer}{}
\LWR@checkloadnever{bidi}{}
\LWR@checkloadnever{cals}{}
\LWR@checkloadnever{cellspace}{}
\LWR@checkloadnever{cgloss4e}{}
\LWR@checkloadnever{colophon}{}
\LWR@checkloadnever{cooltooltips}{}
\LWR@checkloadnever{covington}{}
\LWR@checkloadnever{crbox}{}
\LWR@checkloadnever{decision-table}{}
\LWR@checkloadnever{dvgloss}{}
\LWR@checkloadnever{ednotes}{}
\LWR@checkloadnever{edfnotes}{}
\LWR@checkloadnever{eledform}{}
\LWR@checkloadnever{eledmac}{}
\LWR@checkloadnever{embedfile}{}
\LWR@checkloadnever{endnotes-hy}{endnotes}
\LWR@checkloadnever{expex}{}
\LWR@checkloadnever{fancytooltips}{}
\LWR@checkloadnever{fixocgx}{}
\LWR@checkloadnever{flowfram}{}
\LWR@checkloadnever{gb4e}{}
\LWR@checkloadnever{gmverse}{}
\LWR@checkloadnever{graphbox}{}
\LWR@checkloadnever{graphicxbox}{}
\LWR@checkloadnever{hvfloat}{}
\LWR@checkloadnever{inline-images}{}
\LWR@checkloadnever{isorot}{rotating}
\LWR@checkloadnever{ledmac}{}
\LWR@checkloadnever{linguex}{}
\LWR@checkloadnever{longdiv}{}
\LWR@checkloadnever{longfigure}{}
\LWR@checkloadnever{longtabu}{}
\LWR@checkloadnever{mdwenv}{}
\LWR@checkloadnever{mdwlist}{}
\LWR@checkloadnever{mdwtab}{}
\LWR@checkloadnever{navigator}{}
\LWR@checkloadnever{nccpic}{}
\LWR@checkloadnever{nccsect}{}
\LWR@checkloadnever{newvbtm}{}
\LWR@checkloadnever{ocg-p}{}
\LWR@checkloadnever{ocgtools}{}
\LWR@checkloadnever{ocgx}{}
\LWR@checkloadnever{ocgx2}{}
\LWR@checkloadnever{parrun}{}
\LWR@checkloadnever{poemscol}{}
\LWR@checkloadnever{poetry}{}
\LWR@checkloadnever{program}{}
\LWR@checkloadnever{proofread}{}
\LWR@checkloadnever{pst-pdf}{}
\LWR@checkloadnever{refstyle}{}
\LWR@checkloadnever{robustindex}{}
\LWR@checkloadnever{robustglossary}{}
\LWR@checkloadnever{semioneside}{}
\LWR@checkloadnever{slemph}{}
\LWR@checkloadnever{snotez}{sidenotes}
\LWR@checkloadnever{spacingtricks}{}
\LWR@checkloadnever{sverb}{verbatim, fancyvrb}
\LWR@checkloadnever{syntax}{}
\LWR@checkloadnever{tablists}{}
\LWR@checkloadnever{tabto}{}
\LWR@checkloadnever{tabu}{}
\LWR@checkloadnever{tabularht}{}
\LWR@checkloadnever{tabularkv}{}
\LWR@checkloadnever{thumby}{}
\LWR@checkloadnever{titles}{}
\LWR@checkloadnever{typehtml}{}
\LWR@checkloadnever{unicode-bidi}{}
\LWR@checkloadnever{vcell}{}
\LWR@checkloadnever{xhfill}{}
}
\LetLtxMacro\LWR@checkloadnever\LWR@earlyloadnever
\LWR@checkloadnevers
\@ifpackageloaded{xeCJK}{}{
    \LWR@checkloadnever{CJK}{ctex, xeCJK}
    \LWR@checkloadnever{CJKutf8}{ctex, xeCJK}
}
\LWR@earlyclassloadnever{jarticle}{ujarticle}
\LWR@earlyclassloadnever{jbook}{ujbook}
\LWR@earlyclassloadnever{jreport}{ujreport}
\LWR@earlyclassloadnever{tarticle}{utarticle}
\LWR@earlyclassloadnever{tbook}{utbook}
\LWR@earlyclassloadnever{treport}{utreport}
\LWR@earlyclassloadnever{novel}{}
\LWR@earlyclassloadnever{powerdot}{}
\LWR@loadafter{2in1}
\LWR@loadafter{2up}
\LWR@loadafter{a4}
\LWR@loadafter{a4wide}
\LWR@loadafter{a5comb}
\LWR@notmemoirloadafter{abstract}
\LWR@loadafter{academicons}
\LWR@loadafter{accents}
\LWR@loadafter{accessibility}
\LWR@loadafter{accsupp}
\LWR@loadafter{acro}
\LWR@loadafter{acronym}
\LWR@loadafter{adjmulticol}
\LWR@loadafter{addlines}
\LWR@loadafter{afterpage}
\LWR@loadafter{algorithm2e}
\LWR@loadafter{algorithmicx}
\LWR@loadafter{alltt}
\LWR@loadafter{amscdx}
\LWR@loadafter{anonchap}
\LWR@loadafter{anysize}
\LWR@notmemoirloadafter{appendix}
\LWR@loadafter{ar}
\LWR@loadafter{arabicfront}
\LWR@notmemoirloadafter{array}
\LWR@loadafter{arydshln}
\LWR@loadafter{asymptote}
\LWR@loadafter{attachfile}
\LWR@loadafter{attachfile2}
\LWR@loadafter{authblk}
\LWR@loadafter{authoraftertitle}% Supported as-is, but must be loaded after.
\LWR@loadafter{autobreak}
\LWR@loadafter{autonum}
\LWR@loadafter{awesomebox}
\LWR@loadafter{axessibility}
\LWR@loadafter{axodraw2}
\LWR@loadafter{backnaur}
\LWR@loadafter{backref}
\LWR@loadafter{balance}
\LWR@loadafter{bbding}
\LWR@loadafter{bigdelim}
\LWR@loadafter{bigfoot}
\LWR@loadafter{bigstrut}
\LWR@loadafter{bitpattern}
\LWR@loadafter{blowup}
\LWR@loadafter{bm}
\LWR@loadafter{booklet}
\LWR@loadafter{bookmark}
\LWR@notmemoirloadafter{booktabs}
\LWR@loadafter{bophook}
\LWR@loadafter{bounddvi}
\LWR@loadafter{boxedminipage}
\LWR@loadafter{boxedminipage2e}
\LWR@loadafter{braket}
\LWR@loadafter{breakurl}
\LWR@loadafter{breqn}
\LWR@loadafter{bsheaders}
\LWR@loadafter{bussproofs}
\LWR@loadafter{bxpapersize}
\LWR@loadafter{bytefield}
\LWR@loadafter{ccicons}
\LWR@loadafter{cancel}
\LWR@loadafter{canoniclayout}
\LWR@loadafter{caption}
\LWR@loadafter{caption2}
\LWR@loadafter{caption3}
\LWR@loadafter{cases}
\LWR@loadafter{centerlastline}
\LWR@loadafter{changebar}
\LWR@loadafter{changelayout}
\LWR@notmemoirloadafter{changepage}
\LWR@loadafter{changes}
\LWR@loadafter{chappg}
\LWR@loadafter{chapterbib}
\LWR@loadafter{chemfig}
\LWR@loadafter{chemformula}
\LWR@loadafter{chemgreek}
\LWR@loadafter{chemmacros}
\LWR@loadafter{chemnum}
\LWR@loadafter{chkfloat}
\LWR@notmemoirloadafter{chngpage}
\LWR@loadafter{cite}
\LWR@loadafter{citeref}
\LWR@loadafter{classicthesis}
\LWR@loadafter{cleveref}
\LWR@loadafter{cmdtrack}
\LWR@loadafter{colonequals}
\LWR@loadafter{color}
\LWR@loadafter{colortbl}
\LWR@loadafter{continue}
\LWR@loadafter{copyrightbox}
\LWR@notmemoirloadafter{crop}
\LWR@loadafter{ctable}
\LWR@loadafter{cuted}
\LWR@loadafter{cutwin}
\LWR@loadafter{dblfloatfix}
\LWR@loadafter{dblfnote}
\LWR@notmemoirloadafter{dcolumn}
\LWR@loadafter{decimal}
\LWR@loadafter{decorule}
\LWR@loadafter{diagbox}
\LWR@loadafter{dingbat}
\LWR@loadafter{DotArrow}
\LWR@loadafter{dotlessi}
\LWR@loadafter{dprogress}
\LWR@loadafter{draftcopy}
\LWR@loadafter{draftfigure}
\LWR@loadafter{draftwatermark}
\LWR@loadafter{drftcite}
\LWR@loadafter{easy-todo}
\LWR@loadafter{ebook}
\LWR@loadafter{econometrics}
\LWR@loadafter{ed}
\LWR@loadafter{ellipsis}
\LWR@loadafter{embrac}
\LWR@loadafter{emptypage}
\LWR@loadafter{endfloat}
\LWR@loadafter{endheads}
\LWR@loadafter{endnotes}
\LWR@loadafter{engtlc}
\LWR@loadafter{enotez}
\LWR@notmemoirloadafter{enumerate}
\LWR@loadafter{enumitem}
\LWR@notmemoirloadafter{epigraph}
\LWR@loadafter{epsf}
\LWR@loadafter{epsfig}
\LWR@loadafter{epstopdf}
\LWR@loadafter{epstopdf-base}
\LWR@loadafter{eqlist}
\LWR@loadafter{eqparbox}
\LWR@loadafter{errata}
\LWR@loadafter{eso-pic}
\LWR@loadafter{esvect}
\LWR@loadafter{etoc}
\LWR@loadafter{eurosym}
\LWR@loadafter{everypage}
\LWR@loadafter{extarrows}
\LWR@loadafter{extramarks}
\LWR@loadafter{fancybox}
\LWR@loadafter{fancyhdr}
\LWR@loadafter{fancypar}
\LWR@loadafter{fancyref}
\LWR@loadafter{fancytabs}
\LWR@loadafter{fancyvrb}
\LWR@loadafter{fbox}
\LWR@loadafter{fewerfloatpages}
\LWR@loadafter{figcaps}
\LWR@loadafter{figsize}
\LWR@loadafter{fitbox}
\LWR@loadafter{fix2col}
\LWR@loadafter{fixmath}
\LWR@loadafter{fixme}
\LWR@loadafter{fixmetodonotes}
\LWR@loadafter{flafter}
\LWR@loadafter{flippdf}
\LWR@loadafter{float}
\LWR@loadafter{floatflt}
\LWR@loadafter{floatpag}
\LWR@loadafter{floatrow}
\LWR@loadafter{fltrace}
\LWR@loadafter{flushend}
\LWR@loadafter{fnbreak}
\LWR@loadafter{fncychap}
\LWR@loadafter{fnlineno}
\LWR@loadafter{fnpara}
\LWR@loadafter{fnpos}
\LWR@loadafter{fontawesome}
\LWR@loadafter{fontawesome5}
\LWR@loadafter{footmisc}
\LWR@loadafter{footnote}
\LWR@loadafter{footnotebackref}
\LWR@loadafter{footnotehyper}
\LWR@loadafter{footnoterange}
\LWR@loadafter{footnpag}
\LWR@loadafter{foreign}
\LWR@loadafter{forest}
\LWR@loadafter{fouridx}
\LWR@loadafter{framed}
\LWR@loadafter{froufrou}
\LWR@loadafter{ftcap}
\LWR@loadafter{ftnright}
\LWR@loadafter{fullminipage}
\LWR@loadafter{fullpage}
\LWR@loadafter{fullwidth}
\LWR@loadafter{fvextra}
\LWR@loadafter{fwlw}
\LWR@loadafter{gensymb}
\LWR@loadafter{gentombow}
\LWR@loadafter{ghsystem}
\LWR@loadafter{gindex}
\LWR@loadafter{glossaries}
\LWR@loadafter{gmeometric}
\LWR@loadafter{gloss}
\LWR@loadafter{glossary}
\LWR@loadafter{grffile}
\LWR@loadafter{grid}
\LWR@loadafter{grid-system}
\LWR@loadafter{gridset}
\LWR@loadafter{hang}
\LWR@loadafter{hanging}
\LWR@loadafter{hepunits}
\LWR@loadafter{hhline}
\LWR@loadafter{hhtensor}
\LWR@loadafter{hypbmsec}
\LWR@loadafter{hypcap}
\LWR@loadafter{hypdestopt}
\LWR@loadafter{hypernat}
\LWR@loadafter{hyperref}
\LWR@loadafter{hyperxmp}
\LWR@loadafter{hyphenat}
\LWR@loadafter{idxlayout}
\LWR@loadafter{ifoddpage}
\LWR@loadafter{imakeidx}
\LWR@loadafter{impnattypo}
\LWR@notmemoirloadafter{index}
\LWR@loadafter{intopdf}
\LWR@loadafter{isomath}
\LWR@loadafter{isotope}
\LWR@loadafter{jurabib}
\LWR@loadafter{karnaugh-map}
\LWR@loadafter{keyfloat}
\LWR@loadafter{keystroke}
\LWR@loadafter{layaureo}
\LWR@loadafter{layout}
\LWR@loadafter{layouts}
\LWR@loadafter{leading}
\LWR@loadafter{leftidx}
\LWR@loadafter{letterspace}
\LWR@loadafter{lettrine}
\LWR@loadafter{lineno}
\LWR@loadafter{lips}
\LWR@loadafter{listings}
\LWR@loadafter{listliketab}
\LWR@loadafter{longtable}
\LWR@loadafter{lpic}
\LWR@loadafter{lscape}
\LWR@loadafter{ltablex}
\LWR@loadafter{ltcaption}
\LWR@loadafter{ltxgrid}
\LWR@loadafter{ltxtable}
\LWR@loadafter{lua-check-hyphen}
\LWR@loadafter{lua-visual-debug}
\LWR@loadafter{luacolor}
\LWR@loadafter{luamplib}
\LWR@loadafter{luatodonotes}
\LWR@loadafter{luavlna}
\LWR@loadafter{lyluatex}
\LWR@loadafter{magaz}
\LWR@notmemoirloadafter{makeidx}
\LWR@loadafter{manyfoot}
\LWR@loadafter{marginfit}
\LWR@loadafter{marginfix}
\LWR@loadafter{marginnote}
\LWR@loadafter{marvosym}
\LWR@loadafter{mathastext}
\LWR@loadafter{mathcomp}
\LWR@loadafter{mathdesign}
\LWR@loadafter{mathdots}
\LWR@loadafter{mathfixs}
\LWR@loadafter{mathpazo}
\LWR@loadafter{mathptmx}
\LWR@loadafter{mathspec}
\LWR@loadafter{mathtools}
\LWR@loadafter{mattens}
\LWR@loadafter{maybemath}
\LWR@loadafter{mcaption}
\LWR@loadafter{mdframed}
\LWR@loadafter{mdwmath}
\LWR@loadafter{media9}
\LWR@loadafter{memhfixc}
\LWR@loadafter{menukeys}
\LWR@loadafter{metalogo}
\LWR@loadafter{metalogox}
\LWR@loadafter{mhchem}
\LWR@loadafter{microtype}
\LWR@loadafter{midfloat}
\LWR@loadafter{midpage}
\LWR@loadafter{minibox}
\LWR@loadafter{minitoc}
\LWR@loadafter{minted}
\LWR@loadafter{mismath}
\LWR@loadafter{mleftright}
\LWR@notmemoirloadafter{moreverb}
\LWR@notmemoirloadafter{movie15}
\LWR@notmemoirloadafter{mparhack}
\LWR@loadafter{multibib}
\LWR@loadafter{multicap}
\LWR@loadafter{multicolrule}
\LWR@loadafter{multimedia}
\LWR@loadafter{multiobjective}
\LWR@loadafter{multirow}
\LWR@loadafter{multitoc}
\LWR@loadafter{musicography}
\LWR@loadafter{nameauth}
\LWR@loadafter{nameref}
\LWR@loadafter{natbib}
\LWR@notmemoirloadafter{nccfancyhdr}
\LWR@loadafter{nccfoots}
\LWR@loadafter{nccmath}
\LWR@notmemoirloadafter{needspace}
\LWR@notmemoirloadafter{nextpage}
\LWR@loadafter{nicefrac}
\LWR@loadafter{niceframe}
\LWR@loadafter{nicematrix}
\LWR@loadafter{noitcrul}
\LWR@loadafter{nolbreaks}
\LWR@loadafter{nomencl}
\LWR@loadafter{nonfloat}
\LWR@loadafter{nonumonpart}
\LWR@loadafter{nopageno}
\LWR@loadafter{notes}
\LWR@loadafter{notespages}
\LWR@loadafter{nowidow}
\LWR@loadafter{ntheorem}
\LWR@loadafter{octave}
\LWR@loadafter{orcidlink}
\LWR@loadafter{overpic}
\LWR@loadafter{pagegrid}
\LWR@notmemoirloadafter{pagenote}
\LWR@loadafter{pagesel}
\LWR@loadafter{paralist}
\LWR@loadafter{parallel}
\LWR@loadafter{parcolumns}
\LWR@loadafter{parnotes}
\LWR@notmemoirloadafter{parskip}
\LWR@loadafter{pbalance}
\LWR@loadafter{pbox}
\LWR@loadafter{pdfcol}
\LWR@loadafter{pdfcolfoot}
\LWR@loadafter{pdfcolmk}
\LWR@loadafter{pdfcolparallel}
\LWR@loadafter{pdfcolparcolumns}
\LWR@loadafter{pdfcomment}
\LWR@loadafter{pdfcrypt}
\LWR@loadafter{pdflscape}
\LWR@loadafter{pdfmarginpar}
\LWR@loadafter{pdfpages}
\LWR@loadafter{pdfprivacy}
\LWR@loadafter{pdfrender}
\LWR@loadafter{pdfsync}
\LWR@loadafter{pdftricks}
\LWR@loadafter{pdfx}
\LWR@loadafter{perpage}
\LWR@loadafter{pfnote}
\LWR@loadafter{phfqit}
\LWR@loadafter{physics}
\LWR@loadafter{physunits}
\LWR@loadafter{picinpar}
\LWR@loadafter{pifont}
\LWR@loadafter{pinlabel}
\LWR@loadafter{placeins}
\LWR@loadafter{plarray}
\LWR@loadafter{plarydshln}
\LWR@loadafter{plextarray}
\LWR@loadafter{plextarydshln}
\LWR@loadafter{plcolortbl}
\LWR@loadafter{plextdelarray}
\LWR@loadafter{plimsoll}
\LWR@loadafter{prelim2e}
\LWR@loadafter{prettyref}
\LWR@loadafter{preview}
\LWR@loadafter{psfrag}
\LWR@loadafter{psfragx}
\LWR@loadafter{pst-eps}
\LWR@loadafter{pstool}
\LWR@loadafter{pstricks}
\LWR@loadafter{pxeveryshi}
\LWR@loadafter{pxftnright}
\LWR@loadafter{pxjahyper}
\LWR@loadafter{quotchap}
\LWR@loadafter{quoting}
\LWR@loadafter{ragged2e}
\LWR@loadafter{realscripts}
\LWR@loadafter{refcheck}
\LWR@loadafter{register}
\LWR@loadafter{relsize}
\LWR@loadafter{repeatindex}
\LWR@loadafter{resizegather}
\LWR@loadafter{returntogrid}
\LWR@loadafter{rlepsf}
\LWR@loadafter{rmathbr}
\LWR@loadafter{rmpage}
\LWR@loadafter{romanbar}
\LWR@loadafter{romanbarpagenumber}
\LWR@loadafter{rotating}
\LWR@loadafter{rotfloat}
\LWR@loadafter{rviewport}
\LWR@loadafter{savetrees}
\LWR@loadafter{scalerel}
\LWR@loadafter{schemata}
\LWR@loadafter{scrextend}
\LWR@loadafter{scrhack}
\LWR@loadafter{scrlayer}
\LWR@loadafter{scrlayer-notecolumn}
\LWR@loadafter{scrlayer-scrpage}
\LWR@loadafter{scrpage2}
\LWR@loadafter{section}
\LWR@loadafter{sectionbreak}
\LWR@loadafter{sectsty}
\LWR@loadafter{selectp}
\LWR@loadafter{semantic-markup}
\LWR@notmemoirloadafter{setspace}
\LWR@loadafter{shadow}
\LWR@loadafter{shapepar}
\LWR@notmemoirloadafter{showidx}
\LWR@loadafter{showkeys}
\LWR@loadafter{showtags}
\LWR@loadafter{shuffle}
\LWR@loadafter{sidecap}
\LWR@loadafter{sidenotes}
\LWR@loadafter{simplebnf}
\LWR@loadafter{SIunits}
\LWR@loadafter{siunitx}
\LWR@loadafter{siunitx-v2}
\LWR@loadafter{skmath}
\LWR@loadafter{slantsc}
\LWR@loadafter{slashed}
\LWR@loadafter{soul}
\LWR@loadafter{soulpos}
\LWR@loadafter{soulutf8}
\LWR@loadafter{splitbib}
\LWR@loadafter{splitidx}
\LWR@loadafter{srcltx}
\LWR@loadafter{srctex}
\LWR@loadafter{stabular}
\LWR@loadafter{stackengine}
\LWR@loadafter{stackrel}
\LWR@loadafter{statex2}
\LWR@loadafter{statistics}
\LWR@loadafter{statmath}
\LWR@loadafter{steinmetz}
\LWR@notltjloadafter{stfloats}
\LWR@loadafter{struktex}
\LWR@loadafter{subcaption}
\LWR@loadafter{subfig}
\LWR@loadafter{subfigure}
\LWR@loadafter{subsupscripts}
\LWR@loadafter{supertabular}
\LWR@loadafter{svg}
\LWR@loadafter{swfigure}
\LWR@loadafter{syntonly}
\LWR@loadafter{t1inc}
\LWR@loadafter{tabfigures}
\LWR@loadafter{tabls}
\LWR@loadafter{tablefootnote}
\LWR@notmemoirloadafter{tabularx}
\LWR@loadafter{tabulary}
\LWR@loadafter{tagpdf}
\LWR@loadafter{tascmac}
\LWR@loadafter{tcolorbox}
\LWR@loadafter{tensor}
\LWR@loadafter{termcal}
\LWR@loadafter{textarea}
\LWR@loadafter{textfit}
\LWR@loadafter{textpos}
\LWR@loadafter{theorem}
\LWR@loadafter{thinsp}
\LWR@loadafter{thm-listof}
\LWR@loadafter{thm-restate}
\LWR@loadafter{thmbox}
\LWR@loadafter{thmtools}
\LWR@loadafter{threadcol}
\LWR@loadafter{threeparttable}
\LWR@loadafter{threeparttablex}
\LWR@loadafter{thumb}
\LWR@loadafter{thumbs}
\LWR@loadafter{tikz}
\LWR@loadafter{tikz-imagelabels}
\LWR@loadafter{titleps}
\LWR@loadafter{titlesec}
\LWR@loadafter{titletoc}
\LWR@notmemoirloadafter{titling}
\LWR@notmemoirloadafter{tocbibind}
\LWR@loadafter{tocdata}
\LWR@loadafter{tocenter}
\LWR@notmemoirloadafter{tocloft}
\LWR@loadafter{tocstyle}
\LWR@loadafter{todo}
\LWR@loadafter{todonotes}
\LWR@loadafter{topcapt}
\LWR@loadafter{tram}
\LWR@loadafter{transparent}
\LWR@loadafter{trimclip}
\LWR@loadafter{trivfloat}
\LWR@loadafter{truncate}
\LWR@loadafter{turnthepage}
\LWR@loadafter{twoup}
\LWR@loadafter{typicons}
\LWR@loadafter{umoline}
\LWR@loadafter{underscore}
\LWR@loadafter{units}
\LWR@loadafter{unitsdef}
\LWR@loadafter{upgreek}
\LWR@loadafter{upref}
\LWR@loadafter{url}
\LWR@loadafter{ushort}
\LWR@loadafter{uspace}
\LWR@loadafter{varioref}
\LWR@notmemoirloadafter{verse}
\LWR@loadafter{versonotes}
\LWR@loadafter{vertbars}
\LWR@loadafter{vmargin}
\LWR@loadafter{vowel}
\LWR@loadafter{vpe}
\LWR@loadafter{vwcol}
\LWR@loadafter{wallpaper}
\LWR@loadafter{watermark}
\LWR@loadafter{widetable}
\LWR@loadafter{widows-and-orphans}
\LWR@loadafter{witharrows}
\LWR@loadafter{wrapfig}
\LWR@loadafter{xbmks}
\LWR@loadafter{xcolor}
\LWR@loadafter{xechangebar}
\LWR@loadafter{xellipsis}
\LWR@loadafter{xevlna}
\LWR@loadafter{xfakebold}
\LWR@loadafter{xfrac}
\LWR@loadafter{xltabular}
\LWR@loadafter{xltxtra}
\LWR@loadafter{xmpincl}
\LWR@loadafter{xpiano}
\LWR@loadafter{xpinyin}
\LWR@loadafter{xr}
\LWR@loadafter{xr-hyper}
\LWR@loadafter{xtab}
\LWR@loadafter{xurl}
\LWR@loadafter{xy}
\LWR@loadafter{zwpagelayout}
\newcommand{\LWR@mdfive}[1]{%
    \PackageError{lwarp}
        {No MD5 macro was found}
        {%
            Lwarp must find the macros \protect\pdfmdfivesum\space
            or \protect\mdfivesum.%
        }
}
\let\LWR@mdfive\pdfmdfivesum
\ifLuaTeX
\RequirePackage{pdftexcmds}
\let\LWR@mdfive\pdf@mdfivesum
\fi
\ifXeTeX
\@ifundefined{pdffivesum}{}
    {\let\LWR@mdfive\pdfmdfivesum}
\@ifundefined{mdfivesum}{}
    {\let\LWR@mdfive\mdfivesum}
\fi
\newcommand*{\LWR@pdfencoding}{%
    \RequirePackage[T1]{fontenc}

    \@ifpackageloaded{inputenc}{}{
        \@ifpackageloaded{inputenx}{}{
            \RequirePackage[utf8]{inputenc}
        }
    }
}
\ifPDFTeX% pdflatex or dvi latex
    \LWR@pdfencoding
\fi

\ifpTeX
    \LWR@pdfencoding
\fi
\ifpTeX
\else
\RequirePackage{newunicodechar}

\newunicodechar{⨯}{\texttimes}

\ifPDFTeX% pdflatex or dvi latex
\newunicodechar{ﬀ}{ff}% Here, the first arguments are ligatures.
\newunicodechar{ﬁ}{fi}
\newunicodechar{ﬂ}{fl}
\newunicodechar{ﬃ}{ffi}
\newunicodechar{ﬄ}{ffl}
\newunicodechar{—}{---}
\newunicodechar{–}{--}
\fi

\fi
\ifxetexorluatex
\else
    \ifdefstring{\f@family}{cmr}{
        \IfFileExists{type1ec.sty}% found in cm-super
        {}
        {% cm-super not installed
            \IfFileExists{lmodern.sty}{
                \PackageInfo{lwarp}{cm-super not installed, loading lmodern}
                \RequirePackage{lmodern}
            }{
                \PackageError{lwarp}
                {%
                    Lwarp requires a vector font.\MessageBreak
                    Install and load cm-super, lmodern, or another\MessageBreak
                    Type-1 vector font before loading lwarp.\MessageBreak
                    Enter 'H' for possible solutions%
                }
                {%
                    Install cm-super or lmodern.\MessageBreak
                    If lmodern, load it before lwarp:\MessageBreak
                        \space\space\protect\usepackage{lmodern}\MessageBreak
                        \space\space\protect\usepackage{lwarp}%
                }
            }
        }% cm-super not installed
    }{}% f@family
\fi
\ifPDFTeX
\RequirePackage{upquote}
\fi

\ifpTeX
    \RequirePackage{upquote}
\fi
\ifxetexorluatex
    \AtBeginDocument{
        \@ifpackageloaded{kpfonts}{
            \PackageError{lwarp}
                {%
                    When using XeLaTeX or LuaLaTeX,\MessageBreak
                    use kpfonts-otf instead of kpfonts%
                }
                {%
                    Replace: \protect\usepackage{kpfonts}\MessageBreak
                    with: \protect\usepackage{kpfonts-otf}
                }
        }{}
    }
\fi
\newlength{\LWR@templengthone}
\newlength{\LWR@templengthtwo}
\newlength{\LWR@templengththree}
\newcounter{LWR@tempcountone}
\newcommand*\LWR@providelength[1]{%
    \ifdeflength{#1}{}{\newlength{#1}}%
}
\newcommand*{\LWR@convertto}[2]{\strip@pt\dimexpr #2*65536/\number\dimexpr 1#1}

\newcommand*{\LWR@printpercentlength}[2]{%
    \setcounter{LWR@tempcountone}{100*\ratio{#1}{#2}}%
    \arabic{LWR@tempcountone}%
}


\providecommand*{\defaddtocounter}[2]{%
    \defcounter{#1}{\value{#1}+#2}%
}


\newcommand*{\LWR@patcherror}[2]{%
    \PackageError{lwarp}%
        {%
            Unable to patch package #1,\MessageBreak
            macro \LWRbackslash #2.\MessageBreak
            Lwarp or #1 may need to be updated%
        }%
        {Please contact the maintainer of the Lwarp package.}%
}
\newcommand{\LWR@isolate}[1]{#1}%

\@ifpackageloaded{ctexpatch}{
    \renewcommand{\LWR@isolate}[1]{\null#1\null}%
}{}

\@ifpackageloaded{xeCJK}{
    \renewcommand{\LWR@isolate}[1]{\null#1\null}%
}{}
\newcommand*{\LWR@disablepinyin}{}
\newcommand*{\LWR@forceemptyline}{%
    \LWR@origrule{0pt}{1\baselineskip}%
    \LWR@orignewline%
}
\long\def\LWR@firstoffive#1#2#3#4#5{#1}
\long\def\LWR@secondoffive#1#2#3#4#5{#2}
\long\def\LWR@thirdoffive#1#2#3#4#5{#3}
\long\def\LWR@fourthoffive#1#2#3#4#5{#4}
\long\def\LWR@fifthoffive#1#2#3#4#5{#5}
\newcounter{LWR@texboxdepth}
\setcounter{LWR@texboxdepth}{0}
\newcommand*{\LWR@maybe@orignewpage}{%
    \LWR@traceinfo{LWR@maybe@orignewpage}%
    \ifnumgreater{\value{LWR@texboxdepth}}{0}
        {}%
        {\LWR@orignewpage}%
    \LWR@traceinfo{LWR@maybe@orignewpage done}%
}
\DeclareRobustCommand\LWR@gsavebox[1]{%
  \@ifnextchar(%)
    {\LWR@@gsavepicbox#1}{\@ifnextchar[{\LWR@@gsavebox#1}{\LWR@gsbox#1}}}%
\long\def\LWR@gsbox#1#2{\global\setbox#1\hbox{%
  \color@setgroup#2\color@endgroup}}
\def\LWR@@gsavebox#1[#2]{%
  \@ifnextchar [{\LWR@@igsavebox#1[#2]}{\LWR@@igsavebox#1[#2][c]}}
\long\def\LWR@@igsavebox#1[#2][#3]#4{%
  \LWR@gsbox#1{\@imakebox[#2][#3]{#4}}}
\def\LWR@@gsavepicbox#1(#2,#3){%
  \@ifnextchar[%]
    {\LWR@@igsavepicbox#1(#2,#3)}{\LWR@@igsavepicbox#1(#2,#3)[]}}
\long\def\LWR@@igsavepicbox#1(#2,#3)[#4]#5{%
  \LWR@gsbox#1{\@imakepicbox(#2,#3)[#4]{#5}}}

\def\LWR@glrbox#1{%
  \edef\reserved@a{%
    \endgroup
    \global\setbox#1\hbox{%
      \begingroup\aftergroup}%
        \def\noexpand\@currenvir{\@currenvir}%
        \def\noexpand\@currenvline{\on@line}}%
  \reserved@a
    \@endpefalse
    \color@setgroup
      \ignorespaces}
\let\LWR@endglrbox\LWR@endlrbox
\newcommand*{\macrotocsname}[1]{%
  \ifcat\relax\noexpand#1%
    \expandafter\expandafter\expandafter\@gobble\expandafter\string
  \fi
  #1%
}
\ExplSyntaxOn
\newcommand*{\LWRtexttitlecase}[1]{%
    \text_titlecase:n{#1}%
}
\ExplSyntaxOff
\newcommand*{\LWR@LetLtxMacrocs}[2]{%
    \expandafter\LetLtxMacro\csname #1\expandafter\endcsname%
    \csname#2\endcsname%
}
\newcommand*{\LWR@absorbstar}[1]{%
    \LWR@LetLtxMacrocs{LWR@origns@#1}{#1}%
    \csdef{#1}{\@ifstar{\csuse{LWR@origns@#1}}{\csuse{LWR@origns@#1}}}
    \expandafter\robustify\csname #1\endcsname
}
\let\LWRpercent\@percentchar
\catcode`\$=12
\def\LWRdollar{$}
\catcode`\$=3
\catcode`\&=12
\def\LWRamp{&}
\catcode`\&=4
\catcode`\&=0
&catcode`&\=12
&def&LWRbackslash{\}
&catcode`&\=0
\catcode`\&=4
\catcode`\&=1
\catcode`\{=12
\def\LWRleftbrace&{}
\catcode`\{=1
\catcode`\&=4
\catcode`\&=2
\catcode`\}=12
\def\LWRrightbrace{}&
\catcode`\}=2
\catcode`\&=4
\catcode`\#=12
\def\LWRhash{#}
\catcode`\#=6
\def\LWRopquote{'}
\def\LWRopseq{\space\LWRamp\LWRamp\space\space}
\newbool{usingOSWindows}
\boolfalse{usingOSWindows}


\newcommand*{\OSPathSymbol}{/}


\newcommand*{\LWR@setOSWindows}
{
\booltrue{usingOSWindows}
\renewcommand*{\OSPathSymbol}{\@backslashchar}
\def\LWRopquote{"}
\def\LWRopseq{\space\LWRamp\space\space}
}
\ifwindows
\LWR@setOSWindows
\fi


\RequirePackage{kvoptions}
\SetupKeyvalOptions{family=LWR,prefix=LWR@}

\newcommand{\lwarpsetup}[1]{\setkeys{LWR}{#1}}

\newbool{warpingprint}
\newbool{warpingHTML}
\newbool{mathjax}
\newbool{LWR@origmathjax}
\booltrue{warpingprint}%
\boolfalse{warpingHTML}%
\boolfalse{mathjax}%
\DeclareVoidOption{warpprint}{%
    \PackageInfo{lwarp}{Using option 'warpprint'}
    \booltrue{warpingprint}%
    \boolfalse{warpingHTML}%
}

\DeclareVoidOption{warpHTML}{%
    \PackageInfo{lwarp}{Using option 'warpHTML'}%
    \booltrue{warpingHTML}%
    \boolfalse{warpingprint}%
}

\DeclareVoidOption{mathsvg}{%
    \PackageInfo{lwarp}{Using option 'mathsvg'}
    \boolfalse{mathjax}%
    \boolfalse{LWR@origmathjax}%
}
\DeclareVoidOption{mathjax}{%
    \PackageInfo{lwarp}{Using option 'mathjax'}
    \booltrue{mathjax}%
    \booltrue{LWR@origmathjax}%
}


\DeclareStringOption[\jobname]{BaseJobname}

\DeclareStringOption[\BaseJobname-images]{ImagesDirectory}

\DeclareStringOption[image-]{ImagesName}

\DeclareStringOption[lwarp.ist]{makeindexStyle}

\DeclareStringOption[lwarp.xdy]{xindyStyle}

\DeclareStringOption[english]{xindyLanguage}

\DeclareStringOption[utf8]{xindyCodepage}


\DeclareStringOption[]{xindexConfig}

\DeclareStringOption[UTF-8]{pdftotextEnc}

\newbool{LWR@creatinglwarpmk}
\boolfalse{LWR@creatinglwarpmk}

\DeclareVoidOption{lwarpmk}{
    \PackageInfo{lwarp}{Using option 'lwarpmk'}
    \booltrue{LWR@creatinglwarpmk}
}

\DeclareVoidOption{OSWindows}{
    \PackageInfo{lwarp}{Using option 'OSWindows'}
    \LWR@setOSWindows
}

\DeclareStringOption[]{HomeHTMLFilename}

\DeclareStringOption[]{HTMLFilename}

\DeclareStringOption[]{PrintLatexCmd}

\DeclareStringOption[]{HTMLLatexCmd}

\DeclareStringOption[]{PrintIndexCmd}

\DeclareStringOption[]{HTMLIndexCmd}

\DeclareStringOption[]{LatexmkIndexCmd}

\DeclareBoolOption[false]{makeindex}

\DeclareBoolOption[false]{xindy}

\DeclareBoolOption[false]{xindex}

\DeclareStringOption[cref]{IndexRef}

\DeclareStringOption[makeglossaries]{GlossaryCmd}

\DeclareBoolOption[false]{latexmk}

\DeclareBoolOption[false]{dvips}

\DeclareBoolOption[false]{dvipdfm}

\DeclareBoolOption[false]{dvipdfmx}

\ProcessKeyvalOptions*\relax


\providecommand*{\BaseJobname}{\LWR@BaseJobname}

\ifcsempty{LWR@HomeHTMLFilename}{
    \newcommand*{\HomeHTMLFilename}{\BaseJobname}
}{
    \csedef{HomeHTMLFilename}{\LWR@HomeHTMLFilename}
}

\csedef{HTMLFilename}{\LWR@HTMLFilename}
\newcommand*{\LWR@sanitized}{}

\newcommand*{\LWR@sanitize}[1]{%
\edef\LWR@sanitized{#1}%
\edef\LWR@sanitized{\detokenize\expandafter{\LWR@sanitized}}%
}

\LWR@sanitize{\LWR@BaseJobname}
\edef\LWR@BaseJobname{\LWR@sanitized}

\LWR@sanitize{\LWR@ImagesDirectory}
\edef\LWR@ImagesDirectory{\LWR@sanitized}

\LWR@sanitize{\LWR@ImagesName}
\edef\LWR@ImagesName{\LWR@sanitized}
\ifdefempty{\LWR@PrintIndexCmd}{
    \renewcommand{\LWR@PrintIndexCmd}{%
        makeindex  -s \LWR@makeindexStyle \space  \jobname.idx%
    }
    \ifbool{LWR@xindy}{
        \renewcommand{\LWR@PrintIndexCmd}{%
            xindy
            -M \LWR@xindyStyle \space
            -L \LWR@xindyLanguage \space
            -C \LWR@xindyCodepage \space
            \jobname.idx%
        }
    }{}
    \ifbool{LWR@xindex}{
        \ifdefvoid{\LWR@xindexConfig}{
            \renewcommand{\LWR@PrintIndexCmd}{%
                xindex
                \jobname.idx%
            }
        }{
            \renewcommand{\LWR@PrintIndexCmd}{%
                xindex
                -c \LWR@xindexConfig \space
                \jobname.idx%
            }
        }
    }{}
}{}

\ifdefempty{\LWR@HTMLIndexCmd}{
    \renewcommand{\LWR@HTMLIndexCmd}{%
        makeindex  -s \LWR@makeindexStyle \space  \jobname_html.idx%
    }
    \ifbool{LWR@xindy}{
        \renewcommand{\LWR@HTMLIndexCmd}{%
            xindy
            -M \LWR@xindyStyle \space
            -L \LWR@xindyLanguage \space
            -C \LWR@xindyCodepage \space
            \jobname_html.idx%
        }
    }{}
    \ifbool{LWR@xindex}{
        \ifdefvoid{\LWR@xindexConfig}{
            \renewcommand{\LWR@HTMLIndexCmd}{%
                xindex
                \jobname_html.idx%
            }
        }{
            \renewcommand{\LWR@HTMLIndexCmd}{%
                xindex
                -c \LWR@xindexConfig \space
                \jobname_html.idx%
            }
        }
    }{}
}{}

\ifdefempty{\LWR@LatexmkIndexCmd}{
    \renewcommand{\LWR@LatexmkIndexCmd}{%
        makeindex  -s \LWR@makeindexStyle%
    }
    \ifbool{LWR@xindy}{
        \renewcommand{\LWR@LatexmkIndexCmd}{%
            xindy
            -M \LWR@xindyStyle \space
            -L \LWR@xindyLanguage \space
            -C \LWR@xindyCodepage%
        }
    }{}
    \ifbool{LWR@xindex}{
        \ifdefvoid{\LWR@xindexConfig}{
            \renewcommand{\LWR@LatexmkIndexCmd}{%
                xindex
            }
        }{
            \renewcommand{\LWR@LatexmkIndexCmd}{%
                xindex
                -c \LWR@xindexConfig
            }
        }
    }{}
}{}
\newcommand{\warpprintonly}[1]{\ifbool{warpingprint}{#1}{}}
\newcommand{\warpHTMLonly}[1]{\ifbool{warpingHTML}{#1}{}}
\RequirePackage{comment}

\def\LWR@includecomment
 #1#2{\message{Lwarp: Including comment '#1'}%
    \csarg\def{After#1Comment}{%
        \CloseAndInputCutFile%
        \csundef{LWR@#1commentused}%
    }
    \csarg\def{#1}{%
        \endgroup
        \ifcsdef{LWR@#1commentused}{
            \PackageError{lwarp}%
                {Nested #1 environment}%
                {%
                    Environment #1 cannot be nested.\MessageBreak
                    This can happen when a package is loaded
                    from inside a\MessageBreak
                    #1 environment.%
                }%
        }{\relax}
        \csdef{LWR@#1commentused}{}
        \message{Including '#1' comment.}%
        \def\CommentCutFile{comment_#2.cut}
        \SetUpCutFile
        \ProcessComment{#1}
    }%
    \CommentEndDef{#1}
}

\def\LWR@excludecomment
 #1#2{\message{Lwarp: Excluding comment '#1'}%
    \csarg\def{#1}{
        \endgroup
        \message{Excluding '#1' comment.}%
        \begingroup
           \def\CommentCutFile{comment_#2.cut}
            \def\ProcessCutFile{}%
           \def\ThisComment####1{}%
            \ProcessComment{#1}
    }%
    \csarg\def{After#1Comment}{\CloseAndInputCutFile \endgroup}
    \CommentEndDef{#1}}

\LWR@includecomment{warpall}{all}

\ifbool{warpingHTML}
    {\LWR@includecomment{warpHTML}{html}}
    {\LWR@excludecomment{warpHTML}{html}}

\ifbool{warpingprint}
    {\LWR@includecomment{warpprint}{print}}
    {\LWR@excludecomment{warpprint}{print}}

\begin{warpprint}
\LWR@excludecomment{warpMathJax}{mathjax}
\end{warpprint}

\begin{warpHTML}
\ifbool{mathjax}
    {\LWR@includecomment{warpMathJax}{mathjax}}
    {\LWR@excludecomment{warpMathJax}{mathjax}}
\end{warpHTML}

\ifbool{LWR@creatinglwarpmk}
    {\LWR@includecomment{LWRcreatelwarpmk}{lwarpmk}}
    {\LWR@excludecomment{LWRcreatelwarpmk}{lwarpmk}}


\begin{warpHTML}
\ifxetexorluatex
\@ifpackageloaded{fontspec}{}{
    \usepackage[no-math]{fontspec}
}
\defaultfontfeatures[\rmfamily]{Ligatures={NoCommon,TeX}}
\defaultfontfeatures[\sffamily]{Ligatures={NoCommon,TeX}}
\defaultfontfeatures[\ttfamily]{Ligatures=NoCommon}
\else


\RequirePackage {microtype}

\microtypesetup{
    protrusion=false,
    expansion=false,
    tracking=false,
    kerning=false,
    spacing=false}
\DisableLigatures{encoding = *,family = tt*}
\fi
\end{warpHTML}

\begin{warpHTML}
\@ifpackageloaded{geometry}
{}{
    \RequirePackage[
        reset,
        paperwidth=\paperwidth,
        paperheight=\paperheight,
        textwidth=\textwidth,
        textheight=\textheight,
        left=\oddsidemargin,
        top=\topmargin,
        marginparsep=\marginparsep,
        marginparwidth=\marginparwidth,
    ]{geometry}
}
\LetLtxMacro\LWR@origgeometry\geometry
\LetLtxMacro\LWR@orignewgeometry\newgeometry
\LetLtxMacro\LWR@origrestoregeometry\restoregeometry
\LetLtxMacro\LWR@origsavegeometry\savegeometry
\LetLtxMacro\LWR@origloadgeometry\loadgeometry
\newbool{LWR@allowanothergeometry}
\booltrue{LWR@allowanothergeometry}
\AtEndPreamble{
\LWR@origsavegeometry{LWR@usergeometry}
%%    \begin{macrocode}
\newlength{\LWR@userspaperwidth}
\setlength{\LWR@userspaperwidth}{\paperwidth}

\newlength{\LWR@userspaperheight}
\setlength{\LWR@userspaperheight}{\paperheight}

\newlength{\LWR@usersmarginparwidth}
\setlength{\LWR@usersmarginparwidth}{\marginparwidth}

\newlength{\LWR@userstextwidth}
\setlength{\LWR@userstextwidth}{\textwidth}

\newlength{\LWR@userstextheight}
\setlength{\LWR@userstextwidth}{\textheight}
\LWR@origgeometry{
    reset,
    paperheight=190in,
    paperwidth=20in,
    left=2in,
    right=6in,
    top=1in,
    bottom=1in,
    heightrounded,%
}
\LWR@origsavegeometry{LWR@lwarpgeometry}
\boolfalse{LWR@allowanothergeometry}%
\setlength{\textheight}{0.8\paperheight}
\setlength{\textwidth}{0.7\paperwidth}

\@twosidefalse
\@mparswitchfalse
}% \AtEndPreamble

\end{warpHTML}

\begin{warpall}

\RequirePackage{xparse}


\RequirePackage{calc}

\end{warpall}

\begin{warpHTML}

\RequirePackage{expl3}



\RequirePackage{gettitlestring}

\@ifundefined{bxjs@everypar}{}{\let\everypar\bxjs@everypar}

\RequirePackage{everyhook}
\end{warpHTML}

\begin{warpall}

\@ifundefined{filec@ntents@opt}{% older kernel, discard optional args

    \RequirePackage{filecontents}

    \LetLtxMacro\LWR@orig@filec@ntents\filec@ntents

    \@ifpackagelater{filecontents}{2011/10/08}
    {
        \renewcommand*{\filec@ntents}[1][]{\LWR@orig@filec@ntents}
    }
    {% patch older package for morewrites
        \newwrite\fcwrite
        \renewcommand*{\filec@ntents}[1][]{%
            \def\chardef##1\write{\let\reserved@c\fcwrite}%
            \LWR@orig@filec@ntents%
        }
    }

}% older kernel
{% newer kernel
}% newer kernel, filecontents env accepts optional args, do not load package

\end{warpall}

\begin{warpHTML}

\RequirePackage{xifthen}

\RequirePackage{verbatim}

\RequirePackage{refcount}

\RequirePackage{newfloat}


\end{warpHTML}

\begin{warpall}

\RequirePackage{xstring}[2019/02/01]

\RequirePackage{environ}

\end{warpall}

\begin{warpHTML}


\RequirePackage{printlen}

\newrobustcmd*{\LWR@printlength}[1]{%
    \begingroup%
    \uselengthunit{PT}%
    \renewcommand*{\unitspace}{}%
    \ifdimless{#1}{10pt}{%
        \printlength{#1}%
    }{%
        \rndprintlength{#1}%
    }%
    \endgroup%
}

\end{warpHTML}

\begin{warpprint}

\RequirePackage{varwidth}

\end{warpprint}

\begin{warpall}
\LetLtxMacro\LWR@origRequirePackage\RequirePackage
\LetLtxMacro\LWR@origRequirePackageWithOptions\RequirePackageWithOptions

\newcommand*{\LWR@requirepackagenames}{}

\newcommand*{\LWR@parsedrequirepackagenames}{}

\newcommand*{\LWR@nullifycomment}{%
    \PackageInfo{lwarp}%
        {Nullifying the comment environment before loading \LWR@strresulttwo,}%
    \let\comment\relax%
    \let\endcomment\relax%
}

\newcommand*\LWR@findword[3][,]{%
    \StrBetween[#3,\numexpr#3+1]{#1#2#1}{#1}{#1}%
}
\LetLtxMacro\LWR@checkloadnever\LWR@afterloadnever

\newcommand*{\LWR@checkloadfilename}[1]{%
    \edef\LWR@tempone{#1}%
    \LWR@checkloadnevers
    \LWR@checkloadbefore{ctex}
    \LWR@checkloadbefore{fontspec}
    \LWR@checkloadbefore{inputenc}
    \LWR@checkloadbefore{inputenx}
    \LWR@checkloadbefore{nfssext-cfr}
    \LWR@checkloadbefore{fontaxes}
    \LWR@checkloadbefore{kotex}
    \LWR@checkloadbefore{kpfonts}% textcomp option clash
    \LWR@checkloadbefore{luatexja}
    \LWR@checkloadbefore{luatexja-fontspec}
    \LWR@checkloadbefore{luatexko}
    \LWR@checkloadbefore{morewrites}
    \LWR@checkloadbefore{newclude}
    \LWR@checkloadbefore{newunicodechar}
    \LWR@checkloadbefore{plext}
    \LWR@checkloadbefore{xeCJK}
    \LWR@checkloadbefore{xetexko}
    \LWR@checkloadbefore{zxjatype}
}

\newcommand*{\LWR@lookforpackagename}[1]{%
\LWR@findword{\LWR@requirepackagenames}{#1}[\LWR@strresult]%
\StrSubstitute[100]{\LWR@strresult}{ }{}[\LWR@strresulttwo]%
\IfStrEq{\LWR@strresulttwo}{}%
{}% no filename
{% yes filename was found
    \ifdefstring{\LWR@strresulttwo}{easyReview}{\LWR@nullifycomment}{}%
    \ifdefstring{\LWR@strresulttwo}{changes}{\LWR@nullifycomment}{}%
    \ifbool{warpingHTML}{\LWR@checkloadfilename{\LWR@strresulttwo}}{}%
    \ifboolexpr{
        bool{warpingHTML} and
        test{\IfFileExists{lwarp-\LWR@strresulttwo.sty}}
    }%
    {% lwarp-* file found
        \ifdefvoid{\LWR@parsedrequirepackagenames}{%
            \edef\LWR@parsedrequirepackagenames{lwarp-\LWR@strresulttwo}%
        }{%
            \edef\LWR@parsedrequirepackagenames{%
                \LWR@parsedrequirepackagenames,lwarp-\LWR@strresulttwo%
            }%
        }%
    }%
    {%
        \ifdefvoid{\LWR@parsedrequirepackagenames}{%
            \edef\LWR@parsedrequirepackagenames{\LWR@strresulttwo}%
        }{%
            \edef\LWR@parsedrequirepackagenames{%
                \LWR@parsedrequirepackagenames,\LWR@strresulttwo%
            }%
        }%
    }% no lwarp-* file
}% yes filename
}

\RenewDocumentCommand{\RequirePackage}{o m o}{%
\renewcommand*{\LWR@requirepackagenames}{#2}%
\renewcommand*{\LWR@parsedrequirepackagenames}{}%
\LWR@lookforpackagename{1}%
\LWR@lookforpackagename{2}%
\LWR@lookforpackagename{3}%
\LWR@lookforpackagename{4}%
\LWR@lookforpackagename{5}%
\LWR@lookforpackagename{6}%
\LWR@lookforpackagename{7}%
\LWR@lookforpackagename{8}%
\LWR@lookforpackagename{9}%
\LWR@lookforpackagename{10}%
\LWR@lookforpackagename{11}%
\LWR@lookforpackagename{12}%
\LWR@lookforpackagename{13}%
\LWR@lookforpackagename{14}%
\LWR@lookforpackagename{15}%
\LWR@lookforpackagename{16}%
\LWR@lookforpackagename{17}%
\LWR@lookforpackagename{18}%
\LWR@lookforpackagename{19}%
\LWR@lookforpackagename{20}%
\IfSubStr{\detokenize\expandafter{#1}}{\LWRleftbrace}%
    {%
        \PackageError{lwarp}{%
            You used:\MessageBreak
            \protect\usepackage[#1]{#2}\MessageBreak
            Braces in the package options will fail with Lwarp.\MessageBreak
            Instead, use:\MessageBreak
            \protect\PassOptionsToPackage{#1}{#2}\MessageBreak
            \protect\usepackage{#2}\MessageBreak
            near the line number given below.\MessageBreak
            Enter 'h' for more info%
        }%
        {%
            See the Lwarp manual troubleshooting index entry for\MessageBreak
            ``package, options with braces''%
        }%
    }%
    {}% no brace
\IfValueTF{#1}%
{% options given
    \IfValueTF{#3}% version given?
        {\LWR@origRequirePackage[#1]{\LWR@parsedrequirepackagenames}[#3]}%
        {\LWR@origRequirePackage[#1]{\LWR@parsedrequirepackagenames}}%
}%
{% no options given
    \IfValueTF{#3}% version given?
        {\LWR@origRequirePackage{\LWR@parsedrequirepackagenames}[#3]}%
        {\LWR@origRequirePackage{\LWR@parsedrequirepackagenames}}%
}%
}
\LetLtxMacro\usepackage\RequirePackage
\@onlypreamble\RequirePackage
\@onlypreamble\usepackage

\end{warpall}

\begin{warpHTML}

\NewDocumentCommand{\LWR@ProvidesPackagePass}{m o}{
    \PackageInfo{lwarp}{%
        Using package `#1',\MessageBreak
        and adding lwarp modifications, including options,\MessageBreak%
    }%
    \IfValueTF{#2}%
        {\ProvidesPackage{lwarp-#1}[#2]}%
        {\ProvidesPackage{lwarp-#1}}%
    \DeclareOption*{%
        \PassOptionsToPackage{\CurrentOption}{#1}%
    }%
    \ProcessOptions\relax%
    \@ifpackageloaded{#1}{%
        \edef\LWR@tempone{\csuse{opt@#1.sty}}%
        \IfValueTF{#2}%
            {%
                \expandafter\LWR@origRequirePackage%
                    \expandafter[\LWR@tempone]{#1}[#2]%
            }%
            {%
                \expandafter\LWR@origRequirePackage%
                    \expandafter[\LWR@tempone]{#1}%
            }%
    }{%
        \IfValueTF{#2}%
            {\LWR@origRequirePackage{#1}[#2]}%
            {\LWR@origRequirePackage{#1}}%
    }%
    \DeclareOption*{}%
    \ProcessOptions\relax%
}

\newcommand*{\LWR@ProvidesPackageDropA}[2]{%
    \PackageInfo{lwarp}{%
        Replacing package `#1' with the lwarp version,\MessageBreak
        and discarding options,%
    }%
    \IfValueTF{#2}
    {\ProvidesPackage{lwarp-#1}[#2]}
    {\ProvidesPackage{lwarp-#1}}
}
\newcommand*{\LWR@ProvidesPackageDropB}{%
\let\ds@\@empty%         from the original \ProcessOptions
\edef\@curroptions{}%    lwarp modification to \ProcessOptions
\@process@ptions\relax%  from the original \ProcessOptions
}
\NewDocumentCommand{\LWR@ProvidesPackageDrop}{m o}{
\LWR@ProvidesPackageDropA{#1}{#2}
\DeclareOption*{}
\LWR@ProvidesPackageDropB
}

\end{warpHTML}




\begin{warpall}

\newwrite\LWR@quickfile%

\end{warpall}

\begin{warpHTML}

\newwrite\LWR@lateximagesfile

\end{warpHTML}

\begin{warpHTML}

\def\@include#1 {%
\immediate\openout\LWR@quickfile #1_html_inc.tex% lwarp
\immediate\write\LWR@quickfile{\string\input{#1.tex}}% lwarp
\immediate\closeout\LWR@quickfile% lwarp
\LWR@maybe@orignewpage% changed from clearpage
\if@filesw
    \immediate\write\@mainaux{\string\@input{#1_html_inc.aux}}% changed
\fi
\@tempswatrue
\if@partsw
    \@tempswafalse
    \edef\reserved@b{#1}%
    \@for\reserved@a:=\@partlist\do
    {\ifx\reserved@a\reserved@b\@tempswatrue\fi}%
\fi
\if@tempswa
    \let\@auxout\@partaux
    \if@filesw
        \immediate\openout\@partaux #1_html_inc.aux % changed
        \immediate\write\@partaux{\relax}%
    \fi
    \@input@{#1_html_inc.tex}% changed
    \LWR@maybe@orignewpage% changed from clearpage
    \@writeckpt{#1}%
    \if@filesw
        \immediate\closeout\@partaux
    \fi
\else
    \deadcycles\z@
    \@nameuse{cp@#1}%
\fi
\let\@auxout\@mainaux%
}

\end{warpHTML}


\begin{warpHTML}

\newwrite\LWR@copyoutfile   % open the file to write to
\newread\LWR@copyinfile     % open the file to read from

\newcommand*{\LWR@copyfile}[2]{%
    \LWR@traceinfo{LWR@copyfile: copying #1 to #2}

    \immediate\openout\LWR@copyoutfile=#2
    \openin\LWR@copyinfile=#1
    \begingroup\endlinechar=-1
    \makeatletter

    \LWR@traceinfo{LWR@copyfile: about to loop}

    \loop\unless\ifeof\LWR@copyinfile
        \LWR@traceinfo{LWR@copyfile: one line}
        \read\LWR@copyinfile to\LWR@fileline  % Read one line and store it into \LWR@fileline
        \immediate\write\LWR@copyoutfile{\unexpanded\expandafter{\LWR@fileline}}%
    \repeat
    \immediate\closeout\LWR@copyoutfile
    \LWR@traceinfo{LWR@copyfile: done}
    \endgroup
}

\end{warpHTML}

\begin{warpall}

\newbool{LWR@tracinglwarp}
\newcommand{\tracinglwarp}{\booltrue{LWR@tracinglwarp}}
\newcommand{\LWR@traceinfo}[1]{%
\ifbool{LWR@tracinglwarp}%
{%
    \typeout{*** lwarp: #1}%
}%
{}%
}

\newbool{HTMLDebugComments}
\boolfalse{HTMLDebugComments}

\AfterEndPreamble{
\LWR@traceinfo{AfterEndPreamble}
}

\AtBeginDocument{
\LWR@traceinfo{AtBeginDocument}
}

\end{warpall}




\begin{warpHTML}
\newcommand*{\LWR@formatting}{HTML}
\newcommand*{\LWR@formatted@checkname}[1]{%
    \ifcsundef{LWR@HTML@#1}{%
        \PackageError{lwarp}
        {%
            \protect\LWR@HTML@#1 is not defined%
        }
        {Perhaps it is misspelled.}
    }{\relax}%
}
\newcommand*{\LWR@formatted@checkendname}[1]{%
    \ifcsundef{endLWR@HTML@#1}{%
        \PackageError{lwarp}
        {%
            \protect\endLWR@HTML@#1 is not defined%
        }
        {Perhaps it is misspelled.}
    }{\relax}%
}
\newcommand*{\LWR@formatted}[1]{%
    \LWR@formatted@checkname{#1}%
    \ifcsundef{LWR@print@#1}{%
        \expandafter\LetLtxMacro\csname LWR@print@#1\expandafter\endcsname%
            \csname#1\endcsname%
    }{}%
    \ifcsundef{#1}{%
        \expandafter\newrobustcmd\csname #1\endcsname{%
            \@nameuse{LWR@\LWR@formatting @#1}%
        }%
    }{%
        \expandafter\renewrobustcmd\csname #1\endcsname{%
            \@nameuse{LWR@\LWR@formatting @#1}%
        }%
    }%
}
\newcommand*{\LWR@expandableformatted}[1]{%
    \LWR@formatted@checkname{#1}%
    \ifcsundef{LWR@print@#1}{%
        \expandafter\LetLtxMacro\csname LWR@print@#1\expandafter\endcsname%
            \csname#1\endcsname%
    }{}%
    \ifcsundef{#1}{%
        \expandafter\newcommand\csname #1\endcsname{%
            \@nameuse{LWR@\LWR@formatting @#1}%
        }%
    }{%
        \expandafter\renewcommand\csname #1\endcsname{%
            \@nameuse{LWR@\LWR@formatting @#1}%
        }%
    }%
}
\newcommand*{\LWR@formattedenv}[1]{%
    \LWR@formatted@checkname{#1}%
    \LWR@formatted@checkendname{#1}%
    \ifcsundef{LWR@print@#1}{%
        \expandafter\LetLtxMacro\csname LWR@print@#1\expandafter\endcsname%
            \csname#1\endcsname%
        \csletcs{endLWR@print@#1}{end#1}%
    }{}%
    \DeclareDocumentEnvironment{#1}{}%
    {%
        \@nameuse{LWR@\LWR@formatting @#1}%
    }%
    {%
        \@nameuse{endLWR@\LWR@formatting @#1}%
    }%
}
\newcommand*{\LWR@expandableformattedenv}[1]{%
    \LWR@formatted@checkname{#1}%
    \LWR@formatted@checkendname{#1}%
    \ifcsundef{LWR@print@#1}{%
        \expandafter\LetLtxMacro\csname LWR@print@#1\expandafter\endcsname%
            \csname#1\endcsname%
        \csletcs{endLWR@print@#1}{end#1}%
    }{}%
    \DeclareExpandableDocumentEnvironment{#1}{}%
    {%
        \@nameuse{LWR@\LWR@formatting @#1}%
    }%
    {%
        \@nameuse{endLWR@\LWR@formatting @#1}%
    }%
}
\end{warpHTML}

\begin{warpall}
\newbool{FormatEPUB}
\boolfalse{FormatEPUB}
\newbool{FormatWP}
\boolfalse{FormatWP}
\newbool{WPMarkFloats}
\boolfalse{WPMarkFloats}

\newbool{WPMarkMinipages}
\boolfalse{WPMarkMinipages}

\newbool{WPMarkTOC}
\booltrue{WPMarkTOC}

\newbool{WPMarkLOFT}
\boolfalse{WPMarkLOFT}

\newbool{WPMarkMath}
\boolfalse{WPMarkMath}

\newbool{WPTitleHeading}
\boolfalse{WPTitleHeading}

\end{warpall}

\begin{warpHTML}
\AtBeginDocument{
\ifbool{FormatWP}{
\@ifundefined{chapter}{
\ifbool{WPTitleHeading}{% part and section starting at h2
\renewcommand*{\LWR@tagtitle}{h1}
\renewcommand*{\LWR@tagtitleend}{/h1}
\renewcommand*{\LWR@tagpart}{h2}
\renewcommand*{\LWR@tagpartend}{/h2}
\renewcommand*{\LWR@tagsection}{h3}
\renewcommand*{\LWR@tagsectionend}{/h3}
\renewcommand*{\LWR@tagsubsection}{h4}
\renewcommand*{\LWR@tagsubsectionend}{/h4}
\renewcommand*{\LWR@tagsubsubsection}{h5}
\renewcommand*{\LWR@tagsubsubsectionend}{/h5}
\renewcommand*{\LWR@tagparagraph}{h6}
\renewcommand*{\LWR@tagparagraphend}{/h6}
\renewcommand*{\LWR@tagsubparagraph}{span class=\textquotedbl{}subparagraph\textquotedbl}
\renewcommand*{\LWR@tagsubparagraphend}{/span}
}% WPTitleHeading
{% not WPTitleHeading, part and section starting at h1
\renewcommand*{\LWR@tagtitle}{div class=\textquotedbl{}title\textquotedbl}
\renewcommand*{\LWR@tagtitleend}{/div}
\renewcommand*{\LWR@tagpart}{h1}
\renewcommand*{\LWR@tagpartend}{/h1}
\renewcommand*{\LWR@tagsection}{h2}
\renewcommand*{\LWR@tagsectionend}{/h2}
\renewcommand*{\LWR@tagsubsection}{h3}
\renewcommand*{\LWR@tagsubsectionend}{/h3}
\renewcommand*{\LWR@tagsubsubsection}{h4}
\renewcommand*{\LWR@tagsubsubsectionend}{/h4}
\renewcommand*{\LWR@tagparagraph}{h5}
\renewcommand*{\LWR@tagparagraphend}{/h5}
\renewcommand*{\LWR@tagsubparagraph}{h6}
\renewcommand*{\LWR@tagsubparagraphend}{/h6}
}% not WPTitleHeading
}% chapter undefined
{% chapter defined
\ifbool{WPTitleHeading}{}
{% not WPTitleHeading, part and chapter starting at h1
\renewcommand*{\LWR@tagtitle}{div class=\textquotedbl{}title\textquotedbl}
\renewcommand*{\LWR@tagtitleend}{/div}
\renewcommand*{\LWR@tagpart}{h1}
\renewcommand*{\LWR@tagpartend}{/h1}
\renewcommand*{\LWR@tagchapter}{h2}
\renewcommand*{\LWR@tagchapterend}{/h2}
\renewcommand*{\LWR@tagsection}{h3}
\renewcommand*{\LWR@tagsectionend}{/h3}
\renewcommand*{\LWR@tagsubsection}{h4}
\renewcommand*{\LWR@tagsubsectionend}{/h4}
\renewcommand*{\LWR@tagsubsubsection}{h5}
\renewcommand*{\LWR@tagsubsubsectionend}{/h5}
\renewcommand*{\LWR@tagparagraph}{h6}
\renewcommand*{\LWR@tagparagraphend}{/h6}
\renewcommand*{\LWR@tagsubparagraph}{span class=\textquotedbl{}subparagraph\textquotedbl}
\renewcommand*{\LWR@tagsubparagraphend}{/span}
}% not WPTitleHeading
}% chapter defined
}{}% FormatWP
}% AtBeginDocument

\end{warpHTML}


\begin{warpHTML}

\chardef\LWR@origpound=`\#
\let\LWR@origcomma\,
\let\LWR@origthinspace\thinspace
\let\LWR@orignegthinspace\negthinspace
\let\LWR@origtilde~
\let\LWR@origenskip\enskip
\let\LWR@origquad\quad
\let\LWR@origqquad\qquad
\let\LWR@orighfil\hfil
\let\LWR@orighss\hss
\let\LWR@origllap\llap
\let\LWR@origrlap\rlap
\let\LWR@orighfilneg\hfilneg
\let\LWR@orighspace\hspace

\let\LWR@origrule\rule

\let\LWR@origmedskip\medskip
\let\LWR@origbigskip\bigskip

\let\LWR@origtextellipsis\textellipsis
\let\LWR@origvdots\vdots
\LetLtxMacro\LWR@orig@@textquotedbl\textquotedbl
\LetLtxMacro\LWR@orig@textquotedbl\LWR@orig@@textquotedbl

\AtEndPreamble{
\@ifpackageloaded{libertinus-otf}{
    \renewcommand{\LWR@orig@textquotedbl}{\LWR@orig@@textquotedbl\kern-.15em}
    \LetLtxMacro\textquotedbl\LWR@orig@textquotedbl
}{}
}
\LetLtxMacro\LWR@origttfamily\ttfamily

\LetLtxMacro\LWR@origem\em

\LetLtxMacro\LWR@orignormalfont\normalfont

\let\LWR@origonecolumn\onecolumn

\let\LWR@origsp\sp
\let\LWR@origsb\sb

\LetLtxMacro\LWR@origunderline\underline
\let\LWR@orignewpage\newpage

\let\LWR@origpagestyle\pagestyle
\let\LWR@origthispagestyle\thispagestyle
\LetLtxMacro\LWR@origpagenumbering\pagenumbering

\let\LWR@orignewline\newline

\AtBeginDocument{% in case packages change definition
\let\LWR@orig@trivlist\@trivlist
\let\LWR@origtrivlist\trivlist
\let\LWR@origendtrivlist\endtrivlist
\LetLtxMacro\LWR@origitem\item
\LetLtxMacro\LWR@origitemize\itemize
\LetLtxMacro\LWR@endorigitemize\enditemize
\LetLtxMacro\LWR@origenumerate\enumerate
\LetLtxMacro\LWR@endorigenumerate\endenumerate
\LetLtxMacro\LWR@origdescription\description
\LetLtxMacro\LWR@endorigdescription\enddescription
\let\LWR@orig@mklab\@mklab
\let\LWR@origmakelabel\makelabel
\let\LWR@orig@donoparitem\@donoparitem
\LetLtxMacro\LWR@orig@item\@item
\let\LWR@orig@nbitem\@nbitem
}

\let\LWR@origpar\par

\LetLtxMacro\LWR@origfootnote\footnote
\let\LWR@orig@mpfootnotetext\@mpfootnotetext

\AtBeginDocument{% in case packages change definition
\LetLtxMacro\LWR@orighline\hline%
\LetLtxMacro\LWR@origcline\cline%
}

\end{warpHTML}

\begin{warpHTML}
\AtBeginDocument{
\LetLtxMacro\LWR@origtie\t
\ifPDFTeX% pdflatex or dvi latex
\LetLtxMacro\LWR@origgraveaccent\`
\LetLtxMacro\LWR@origacuteaccent\'
\LetLtxMacro\LWR@origcircumflexaccent\^
\LetLtxMacro\LWR@origtildeaccent\~
\LetLtxMacro\LWR@origmacronaccent\=
\LetLtxMacro\LWR@origbreve\u
\LetLtxMacro\LWR@origdotaccent\.
\LetLtxMacro\LWR@origdiaeresisaccent\"
\LetLtxMacro\LWR@origdoubleacuteaccent\H
\LetLtxMacro\LWR@origcaronaccent\v
\LetLtxMacro\LWR@origdotbelowaccent\d
\LetLtxMacro\LWR@origcedillaaccent\c
\LetLtxMacro\LWR@origmacronbelowaccent\b
\renewcommand*{\`}[1]{#1\HTMLunicode{0300}}
\renewcommand*{\'}[1]{#1\HTMLunicode{0301}}
\renewcommand*{\^}[1]{#1\HTMLunicode{0302}}
\renewcommand*{\~}[1]{#1\HTMLunicode{0303}}
\renewcommand*{\=}[1]{#1\HTMLunicode{0304}}
\renewcommand*{\u}[1]{#1\HTMLunicode{0306}}
\renewcommand*{\.}[1]{#1\HTMLunicode{0307}}
\renewcommand*{\"}[1]{#1\HTMLunicode{0308}}
\renewcommand*{\H}[1]{#1\HTMLunicode{030B}}
\renewcommand*{\v}[1]{#1\HTMLunicode{030C}}
\renewcommand*{\d}[1]{#1\HTMLunicode{0323}}
\renewcommand*{\c}[1]{#1\HTMLunicode{0327}}
\renewcommand*{\b}[1]{#1\HTMLunicode{0331}}
\fi
\def\LWR@t#1#2{#1\HTMLunicode{0361}#2}
\renewcommand*{\t}[1]{\LWR@t#1}
\ifPDFTeX% pdflatex or dvi latex
\newcommand*{\LWR@restoreorigaccents}{%
    \LetLtxMacro\`\LWR@origgraveaccent%
    \LetLtxMacro\'\LWR@origacuteaccent%
    \LetLtxMacro\^\LWR@origcircumflexaccent%
    \LetLtxMacro\~\LWR@origtildeaccent%
    \LetLtxMacro\=\LWR@origmacronaccent%
    \LetLtxMacro\u\LWR@origbreve%
    \LetLtxMacro\.\LWR@origdotaccent%
    \LetLtxMacro\"\LWR@origdiaeresisaccent%
    \LetLtxMacro\H\LWR@origdoubleacuteaccent%
    \LetLtxMacro\v\LWR@origcaronaccent%
    \LetLtxMacro\t\LWR@origtie%
    \LetLtxMacro\d\LWR@origdotbelowaccent%
    \LetLtxMacro\c\LWR@origcedillaaccent%
    \LetLtxMacro\b\LWR@origmacronbelowaccent%
}%
\else% XeLaTeX, LuaLaTeX:
\newcommand*{\LWR@restoreorigaccents}{%
    \LetLtxMacro\t\LWR@origtie%
}%
\fi%
}% AtBeginDocument
\end{warpHTML}




\LWR@excludecomment{LWRwriteconf}{writeconf}
\begin{warpprint}
\fullexpandarg%
\IfSubStr*{\jobname}{-pstool}
    {
        \PackageInfo{lwarp}{%
            Jobname with -pstool is found.\MessageBreak
            Not generating lwarp configuration files,%
        }
    }
    {
        \PackageInfo{lwarp}{Generating lwarp configuration files,}%
        \LWR@includecomment{LWRwriteconf}{writeconf}
    }
\end{warpprint}

\begin{LWRwriteconf}
\immediate\openout\LWR@quickfile=\jobname_html.tex
\immediate\write\LWR@quickfile{%
\detokenize{\PassOptionsToPackage}%
{warpHTML,BaseJobname=\jobname}{lwarp}%
}
\immediate\write\LWR@quickfile{%
\detokenize{\input}\string{\jobname.tex\string }%
}
\immediate\closeout\LWR@quickfile
\end{LWRwriteconf}


\begin{LWRwriteconf}

\newcommand*{\LWR@lwarpconfversion}{2}% also in lwarpmk.lua
\ifshellescape
    \def\LWR@shellescapecmd{--shell-escape }
\else
    \def\LWR@shellescapecmd{}
\fi
\newcommand*{\LWR@compilecmd}[2]{%
    #1 \LWR@shellescapecmd \jobname#2%
}
\newcommand*{\LWR@addcompilecmd}[2]{%
    \LWRopseq
    #1 \jobname#2%
}
\newcommand*{\LWR@unknownengine}{%
    \PackageError{lwarp}%
        {Unknown LaTeX engine}%
        {%
            Lwarp only knows about pdflatex, DVI latex,
            xelatex, lualatex, and upLateX.%
        }%
}
\newcommand*{\LWR@latexmkvar}[2]{%
    -e
    \LWRopquote%
    \LWRdollar #1=q/#2/%
    \LWRopquote
}
\newcommand*{\LWR@latexmkcmd}[1]{%
    latexmk  \space \LWR@shellescapecmd \space  #1 \space
    -recorder \space
    \LWR@latexmkvar{makeindex}{\LWR@LatexmkIndexCmd}%
}
\newcommand*{\LWR@latexmkdvipdfm}[1]{%
    -pdfdvi \space
    \LWR@latexmkvar{dvipdf}{%
        #1
        \@percentchar O
        -o \@percentchar D
        \@percentchar S%
    }
}
\newcommand*{\LWR@compileuplatex}{
    \def\LWR@tempprintlatexcmd{%
        \LWR@compilecmd{uplatex}{}
        \LWR@addcompilecmd{dvipdfmx}{}
    }
    \def\LWR@tempHTMLlatexcmd{%
        \LWR@compilecmd{uplatex}{_html}
        \LWR@addcompilecmd{dvipdfmx}{_html}
    }
}
\ifbool{LWR@latexmk}{
    \ifpdf
        \ifPDFTeX
            \def\LWR@latexcmd{\LWR@latexmkcmd{-pdf -dvi- -ps-}}
        \else
            \ifLuaTeX
                \def\LWR@latexcmd{\LWR@latexmkcmd{-lualatex}}
            \else
                \LWR@unknownengine
            \fi
        \fi
    \else% \ifpdf
        \ifXeTeX
            \def\LWR@latexcmd{\LWR@latexmkcmd{-xelatex}}
        \else% \ifXeTeX
            \ifbool{LWR@dvipdfm}{
                \def\LWR@latexcmd{%
                    \LWR@latexmkcmd{%
                        \LWR@latexmkdvipdfm{dvipdfm}%
                    }
                }
            }{
                \ifbool{LWR@dvipdfmx}{
                    \def\LWR@latexcmd{%
                        \LWR@latexmkcmd{%
                            \LWR@latexmkdvipdfm{dvipdfmx}%
                        }
                    }
                }{
                    \def\LWR@latexcmd{\LWR@latexmkcmd{-pdfps}}
                }
            }
        \fi
    \fi% \ifpdf
    \def\LWR@tempprintlatexcmd{\LWR@latexcmd \space \jobname}
    \def\LWR@tempHTMLlatexcmd{\LWR@latexcmd \space \jobname_html}
}% latexmk
{% not latexmk
    \ifpdf
        \ifPDFTeX
            \def\LWR@tempprintlatexcmd{\LWR@compilecmd{pdflatex}{}}
            \def\LWR@tempHTMLlatexcmd{\LWR@compilecmd{pdflatex}{_html}}
        \else
            \ifLuaTeX
                \def\LWR@tempprintlatexcmd{\LWR@compilecmd{lualatex}{}}
                \def\LWR@tempHTMLlatexcmd{\LWR@compilecmd{lualatex}{_html}}
            \else
                \LWR@unknownengine
            \fi
        \fi
    \else% \ifpdf
        \ifXeTeX
            \def\LWR@tempprintlatexcmd{\LWR@compilecmd{xelatex}{}}
            \def\LWR@tempHTMLlatexcmd{\LWR@compilecmd{xelatex}{_html}}
        \else
            \ifbool{LWR@dvipdfm}{
                \def\LWR@tempprintlatexcmd{%
                    \LWR@compilecmd{latex}{}
                    \LWR@addcompilecmd{dvipdfm}{}
                }
                \def\LWR@tempHTMLlatexcmd{%
                    \LWR@compilecmd{latex}{_html}
                    \LWR@addcompilecmd{dvipdfm}{_html}
                }
            }{
                \ifbool{LWR@dvipdfmx}{
                    \def\LWR@tempprintlatexcmd{%
                        \LWR@compilecmd{latex}{}
                        \LWR@addcompilecmd{dvipdfmx}{}
                    }
                    \def\LWR@tempHTMLlatexcmd{%
                        \LWR@compilecmd{latex}{_html}
                        \LWR@addcompilecmd{dvipdfmx}{_html}
                    }
                }{% dvips
                    \def\LWR@tempprintlatexcmd{%
                        \LWR@compilecmd{latex}{}
                        \LWR@addcompilecmd{dvips}{}
                        \LWR@addcompilecmd{ps2pdf}{}.ps
                    }
                    \def\LWR@tempHTMLlatexcmd{%
                        \LWR@compilecmd{latex}{_html}
                        \LWR@addcompilecmd{dvips}{_html}
                        \LWR@addcompilecmd{ps2pdf}{_html}.ps
                    }
                }
            }
        \fi% \ifXeTeX
    \fi% \ifpdf
}% latexmk
\@ifclassloaded{ujarticle}{\LWR@compileuplatex}{}
\@ifclassloaded{ujbook}{\LWR@compileuplatex}{}
\@ifclassloaded{ujreport}{\LWR@compileuplatex}{}
\@ifclassloaded{utarticle}{\LWR@compileuplatex}{}
\@ifclassloaded{utbook}{\LWR@compileuplatex}{}
\@ifclassloaded{utreport}{\LWR@compileuplatex}{}
\ifdefempty{\LWR@PrintLatexCmd}{
    \def\LWR@PrintLatexCmd{\LWR@tempprintlatexcmd}
}{}
\ifdefempty{\LWR@HTMLLatexCmd}{
    \def\LWR@HTMLLatexCmd{\LWR@tempHTMLlatexcmd}
}{}
\newcommand{\LWR@writeconf}[1]{
\ifcsdef{LWR@quickfile}{}{\newwrite{\LWR@quickfile}}
\immediate\openout\LWR@quickfile=#1
\immediate\write\LWR@quickfile{confversion = [[\LWR@lwarpconfversion]]}
\ifbool{usingOSWindows}{
    \immediate\write\LWR@quickfile{opsystem = [[Windows]]}
}{
    \immediate\write\LWR@quickfile{opsystem = [[Unix]]}
}
\immediate\write\LWR@quickfile{sourcename = [[\jobname]]}
\immediate\write\LWR@quickfile{homehtmlfilename = [[\HomeHTMLFilename]]}
\immediate\write\LWR@quickfile{htmlfilename = [[\HTMLFilename]]}
\immediate\write\LWR@quickfile{imagesdirectory = [[\LWR@ImagesDirectory]]}
\immediate\write\LWR@quickfile{imagesname = [[\LWR@ImagesName]]}
\immediate\write\LWR@quickfile{latexmk = [[\ifbool{LWR@latexmk}{true}{false}]]}
\immediate\write\LWR@quickfile{printlatexcmd = [[\LWR@PrintLatexCmd]]}
\immediate\write\LWR@quickfile{HTMLlatexcmd = [[\LWR@HTMLLatexCmd]]}
\immediate\write\LWR@quickfile{printindexcmd = [[\LWR@PrintIndexCmd]]}
\immediate\write\LWR@quickfile{HTMLindexcmd = [[\LWR@HTMLIndexCmd]]}
\immediate\write\LWR@quickfile{latexmkindexcmd = [[\LWR@LatexmkIndexCmd]]}
\immediate\write\LWR@quickfile{glossarycmd = [[\LWR@GlossaryCmd]]}
\immediate\write\LWR@quickfile{pdftotextenc = [[\LWR@pdftotextEnc]]}
\immediate\closeout\LWR@quickfile
}


\end{LWRwriteconf}

\begin{LWRwriteconf}

\AtBeginDocument{\LWR@writeconf{lwarpmk.conf}}

\end{LWRwriteconf}

\begin{LWRwriteconf}

\AtBeginDocument{\LWR@writeconf{\jobname.lwarpmkconf}}

\end{LWRwriteconf}


\begin{LWRwriteconf}
\begin{filecontents*}[overwrite]{lwarp.css}
/*
  CSS stylesheet for the LaTeX Lwarp package
  Copyright 2016-2021 Brian Dunn — BD Tech Concepts LLC
*/

/* a fix for older browsers: */
header, section, footer, aside, nav, main,
    article, figure { display: block; }

A:link {color:#000080 ; text-decoration: none ; }
A:visited {color:#800000 ; }
A:hover {color:#000080 ; text-decoration: underline ;}
A:active {color:#800000 ; }

a.tocbook {display: inline-block ; margin-left: 0em ;
    font-weight: bold ; margin-top: 1ex ; margin-bottom: 1ex ; }
a.tocpart {display: inline-block ; margin-left: 0em ;
    font-weight: bold ;}
a.tocchapter {display: inline-block ; margin-left: 0em ;
    font-weight: bold ;}
a.tocsection {display: inline-block ; margin-left: 1em ;
    text-indent: -.5em ; font-weight: bold ; }
a.tocsubsection {display: inline-block ; margin-left: 2em ;
    text-indent: -.5em ; }
a.tocsubsubsection {display: inline-block ; margin-left: 3em ;
    text-indent: -.5em ; }
a.tocparagraph {display: inline-block ; margin-left: 4em ;
    text-indent: -.5em ; }
a.tocsubparagraph {display: inline-block ; margin-left: 5em ;
    text-indent: -.5em ; }
a.tocfigure {margin-left: 0em}
a.tocsubfigure {margin-left: 2em}
a.toctable {margin-left: 0em}
a.tocsubtable {margin-left: 2em}
a.toctheorem {margin-left: 0em}
a.toclstlisting {margin-left: 0em}

body {
    font-family: "DejaVu Serif", "Bitstream Vera Serif",
        "Lucida Bright", Georgia, serif;
    background: #FAF7F4 ;
    color: black ;
    margin:0em ;
    padding:0em ;
    font-size: 100% ;
    line-height: 1.2 ;
}

p {margin: 1.5ex 0em 1.5ex 0em ;}
table p {margin: .5ex 0em .5ex 0em ;}

/* Holds a section number */
span.sectionnumber { margin-right: 0em }

/* Inserted in front of index lines */
span.indexitem {margin-left: 0em}
span.indexsubitem {margin-left: 2em}
span.indexsubsubitem {margin-left: 4em}
div.indexheading {margin-top: 2ex ; font-weight: bold}

div.hidden, span.hidden { display: none ; }

kbd, span.texttt, p span.texttt {
    font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
        "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
        "Courier New", monospace;
    font-size: 100% ;
}

pre { padding: 3pt ; }

span.strong, span.textbf, div.strong, div.textbf { font-weight: bold; }

span.textit, div.textit { font-style: italic; }

span.textmd, div.textmd { font-weight: normal; }

span.textup, div.textup {
    font-style: normal;
    font-variant: normal;
    font-variant-numeric: normal ;
}

span.textsc, div.textsc {
    font-variant: small-caps;
    font-variant-numeric: oldstyle-nums ;
}

span.textulc, div.textulc {
    font-variant: normal ;
    font-variant-numeric: normal ;
}

span.textsl, div.textsl { font-style: oblique; }

span.textrm, div.textrm {
    font-family: "DejaVu Serif", "Bitstream Vera Serif",
    "Lucida Bright", Georgia, serif;
}

span.textsf, div.textsf {
     font-family: "DejaVu Sans", "Bitstream Vera Sans",
        Geneva, Verdana, sans-serif ;
}

/* nfssext-cfr lining figures */
span.textln, div.textln {
    font-variant-numeric: lining-nums ;
}

/* nfssext-cfr proportional figures */
span.textp, div.textp {
    font-variant-numeric: proportional-nums ;
}

/* nfssext-cfr tabular figures */
span.textt, div.textt {
    font-variant-numeric: tabular-nums ;
}

/* nfssext-cfr font weights */
span.textdb, div.textdb {
    font-weight: 500 ;
}

span.textsb, div.textsb {
    font-weight: 600 ;
}

span.texteb, div.texteb {
    font-weight: 800 ;
}

span.textub, div.textub {
    font-weight: 900 ;
}

span.textlg, div.textlg {
    font-weight: 300 ;
}

span.textel, div.textel {
    font-weight: 200 ;
}

span.textul, div.textul {
    font-weight: 100 ;
}

span.textcircled { border: 1px solid black ; border-radius: 1ex ; }

span.underline {
    text-decoration: underline ;
    text-decoration-skip: auto ;
}

span.overline {
    text-decoration: overline ;
    text-decoration-skip: auto ;
}

div.hrule { border-top: 1px solid silver }

/* for vertical text: */
div.verticalrl { writing-mode: vertical-rl }
div.horizontaltb { writing-mode: horizontal-tb }

/* for diagbox */
div.diagboxtitleN { border-bottom: 1px solid gray }
div.diagboxtitleS { border-top: 1px solid gray }

div.diagboxE {
    padding-left: 2em ;
    text-align: right ;
}

div.diagboxW {
    padding-right: 2em ;
    text-align: left ;
}

/* For realscripts */
.supsubscript {
    display: inline-block;
    text-align:left ;
}

.supsubscript sup,
.supsubscript sub {
    position: relative;
    display: block;
    font-size: .7em;
    line-height: 1;
}

.supsubscript sup {
    top: .3em;
}

.supsubscript sub {
    top: .3em;
}

div.attribution p {
    text-align: right ;
    font-size: 80%
}

span.poemtitle {
  font-size: 120% ; font-weight: bold;
}

pre.tabbing {
    font-family: "Linux Libertine Mono O", "Lucida Console",
        "Droid Sans Mono", "DejaVu Mono", "Bitstream Vera Mono",
        "Liberation Mono", "FreeMono", "Andale Mono",
        "Nimbus Mono L", "Courier New", monospace;
}

blockquote {
    display: block ;
    margin-left: 2em ;
    margin-right: 2em ;
}

/* quotchap is for the quotchap package */
div.quotchap {
    display: block ;
    font-style: oblique ;
    overflow-x: auto ;
    margin-left: 2em ;
    margin-right: 2em ;
}

blockquote p, div.quotchap p {
    line-height: 1.5;
    text-align: left ;
    font-size: .85em ;
}

/* qauthor is for the quotchap package */
div.qauthor {
  display: block ;
  text-align: right ;
  margin-left: auto ;
  margin-right: 2em ;
  font-size: 80% ;
  font-variant: small-caps;
}

div.qauthor p {
  text-align: right ;
}

div.epigraph, div.dictum {
  line-height: 1.2;
    text-align: left ;
    padding: 3ex 1em 0ex 1em ;
/*     margin: 3ex auto 3ex auto ; */ /* Epigraph centered */
    margin: 3ex 1em 3ex auto ; /* Epigraph to the right */
/*    margin: 3ex 1em 3ex 1em ; */ /* Epigraph to the left */
    font-size: .85em ;
    max-width: 27em ;
}

div.epigraphsource, div.dictumauthor {
    text-align:right ;
    margin-left:auto ;
/*     max-width: 50% ; */
    border-top: 1px solid #A0A0A0 ;
    padding-bottom: 3ex ;
    line-height: 1.2;
}

div.epigraph p, div.dictum p { padding: .5ex ; margin: 0ex ;}
div.epigraphsource p, div.dictumauthor p { padding: .5ex 0ex 0ex 0ex ; margin: 0ex ;}
div.dictumauthor { font-style:italic }

/* copyrightbox package: */
div.copyrightbox { margin: .5ex .5em }
div.copyrightbox p {margin: 0px .5em ; padding: 0px}
div.copyrightboxnote {text-align: left ; font-size: 60%}

/* lettrine package: */
span.lettrine { font-size: 4ex ; float: left ; }
span.lettrinetext { font-variant: small-caps ; }

/* ulem, soul, umoline packages: */
span.uline {
    text-decoration: underline ;
    text-decoration-skip: auto ;
}

span.uuline {
    text-decoration: underline ;
    text-decoration-skip: auto ;
    text-decoration-style: double ;
}

span.uwave {
    text-decoration: underline ;
    text-decoration-skip: auto ;
    text-decoration-style: wavy ;
}

span.sout {
    text-decoration: line-through ;
}

span.oline {
    text-decoration: overline ;
    text-decoration-skip: auto ;
}

span.xout {
    text-decoration: line-through ;
}

span.dashuline {
    text-decoration: underline ;
    text-decoration-skip: auto ;
    text-decoration-style: dashed ;
}

span.dotuline {
    text-decoration: underline ;
    text-decoration-skip: auto ;
    text-decoration-style: dotted ;
}

span.letterspacing { letter-spacing: .2ex ; }

span.capsspacing {
    font-variant: small-caps ;
    letter-spacing: .1ex ;
}

span.highlight { background: #F8E800 ; }

/* keystroke package: */
span.keystroke {
    border-style: outset ;
    padding: 0pt .5em 0pt .5em ;
}

html body {
  margin: 0 ;
  line-height: 1.2;
}

body div {
  margin: 0ex;
}

div.book, h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph
{
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    font-style: normal ;
    font-weight: bold ;
    text-align: left ;
}

h1 {    /* title of the entire website, used on each page */
    text-align: center ;
    font-size: 2.5em ;
    padding: .4ex 0em 0ex 0em ;
}

div.book {
    text-align: center ;
    font-size: 2.325em ;
    padding: .4ex 0em 0ex 0em ;
}

h2 { font-size: 2.25em }
h3 { font-size: 2em }
h4 { font-size: 1.75em }
h5 { font-size: 1.5em }
h6 { font-size: 1.25em }
span.paragraph {font-size: 1em ; font-variant: normal ;
    margin-right: 1em ; }
span.subparagraph {font-size: 1em ; font-variant: normal ;
    margin-right: 1em ;  }

div.minisec {
    font-family: "DejaVu Sans", "Bitstream Vera Sans",
        Geneva, Verdana, sans-serif ;
    font-style: normal ;
    font-weight: bold ;
    text-align: left ;
}

h1 {
  margin: 0ex 0em 0ex 0em ;
  line-height: 1.3;
  text-align: center ;
}

h2 {
  margin: 1ex 0em 1ex 0em ;
  line-height: 1.3;
  text-align: center ;
}

h3 {
  margin: 3ex 0em 1ex 0em ;
  line-height: 1.3;
}

h4 {
  margin: 3ex 0em 1ex 0em ;
  line-height: 1.3;
}

h5 {
  margin: 3ex 0em 1ex 0em ;
  line-height: 1.3;
}

h6 {
  margin: 3ex 0em 1ex 0em ;
  line-height: 1.3;
}

div.titlepage {
  text-align: center ;
}

.footnotes {
    text-align: left ;
    font-size: .85em ;
    margin: 3ex 2em 0ex 2em ;
    border-top: 1px solid silver ;
}

.marginpar, .marginparblock {
    max-width: 50%;
    float: right ;
    clear: both ;
    text-align: left ;
    margin: 1ex 0.5em 1ex 1em ;
    padding: 1ex 0.5em 1ex 0.5em ;
    font-size: 85% ;
    border-top: 1px solid silver ;
    border-bottom: 1px solid silver ;
    overflow-x: auto ;
}

.marginpar br { margin-bottom: 2ex ; }

div.marginblock, div.marginparblock {
    max-width:50%;
    min-width: 10em; /* room for caption */
    float:right;
    text-align:left;
    margin: 1ex 0.5em 1ex 1em ;
    padding: 1ex 0.5em 1ex 0.5em ;
    overflow-x: auto;
}

div.marginblock div.minipage,
div.marginparblock div.minipage {
    display: inline-block ;
    margin: 0pt auto 0pt auto ;
}

div.marginblock div.minipage p ,
div.marginparblock div.minipage p
    { font-size: 85%}

div.marginblock br ,
div.marginparblock br
    { margin-bottom: 2ex ; }

main.bodycontainer {
    float: left ;
    width: 80% ;
}

div.bodywithoutsidetoc main.bodycontainer {
    float: none ;
    width: 100% ;
}

section.textbody div.footnotes{
    margin: 3ex 2em .5ex 2em ;
    border-bottom: 2px solid silver ;
}

.footnoteheader {
    border-top: 2px solid silver ;
    margin-top: 3ex ;
    padding-top: 1ex ;
    font-weight: bold ;
}

.mpfootnotes {
    text-align: left ;
    font-size: .85em ;
    margin-left: 1em ;
    border-top: 1px solid silver ;
}

/* Remove footnote top border in the title page. */
div.titlepage div.mpfootnotes {
    border-top: none ;
}

ul, ol {
  margin: 1ex 1em 1ex 0em;
  line-height: 1.2;
}

body dir, body menu {
  margin: 3ex 1em 3ex 0em;
  line-height: 1.2;
}

li { margin: 0ex 0em 1ex 0em; }

html {
  margin: 0;
  padding: 0;
}

.programlisting {
  font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
        "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
        "Courier New", monospace;
  margin: 1ex 0ex 1ex 0ex ;
  padding: .5ex 0pt .5ex 0pt ;
  overflow-x: auto;
}

section.textbody>pre.programlisting {
border-top: 1px solid silver ;
border-bottom: 1px solid silver ;
}

div.displaymath {
    text-align: center ;
}

div.displaymathnumbered {
    text-align: right ;
    margin-left: 5% ;
    margin-right: 5% ;
    min-width: 2.5in ;
}

@media all and (min-width: 400px) {
    div.displaymathnumbered {
        margin-left: 10% ;
        margin-right: 10% ;
    }
}

@media all and (min-width: 800px) {
    div.displaymathnumbered {
        margin-right: 20% ;
    }
}

@media all and (min-width: 1200px) {
    div.displaymathnumbered {
        margin-right: 30% ;
    }
}

.inlineprogramlisting {
  font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
        "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
        "Courier New", monospace;
  overflow-x: auto;
}

span.listinglabel {
    display: inline-block ;
    font-size: 70% ;
    width: 4em ;
    text-align: right ;
    margin-right: 2em ;
}

div.abstract {
  margin: 2em 5% 2em 5% ;
  padding: 1ex 1em 1ex 1em ;
/*  font-weight: bold ; */
  font-size: 90% ;
    text-align: left ;
}

div.abstract dl {line-height:1.5;}
div.abstract dt {color:#304070;}

div.abstracttitle{
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    font-weight:bold;
    font-size:1.25em;
    text-align: center ;
}

span.abstractrunintitle{
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    font-weight:bold;
}

.verbatim {
    overflow-x: auto ;
}

.alltt {
    overflow-x: auto ;
}

.bverbatim {
    margin: 1ex 0pt 1ex 0pt ;
    padding: .5ex 0pt .5ex 0pt ;
    overflow-x: auto ;
}

.lverbatim {
    margin: 1ex 0pt 1ex 0pt ;
    padding: .5ex 0pt .5ex 0pt ;
    overflow-x: auto ;
}

.fancyvrb {
    font-size:.85em ;
    margin: 3ex 0pt 3ex 0pt
}

.fancyvrblabel {
    font-size: .85em ;
    text-align: center ;
    font-weight: bold ;
    margin-top: 1ex ;
    margin-bottom: 1ex ;
}

.verse {
    font-family: "Linux Libertine Mono O", "Lucida Console",
        "Droid Sans Mono", "DejaVu Mono", "Bitstream Vera Mono",
        "Liberation Mono", "FreeMono", "Andale Mono",
        "Nimbus Mono L", "Courier New", monospace;
    margin-left: 1em ;
}

div.singlespace { line-height: 1.2 ; }
div.onehalfspace { line-height: 1.5 ; }
div.doublespace { line-height: 2 ; }

/* Word processor format output: */
div.wpfigure { border: 1px solid red ; margin: .5ex ; padding: .5ex ; }
div.wptable { border: 1px solid blue ; margin: .5ex ; padding: .5ex ; }
div.wpminipage { border: 1px solid green ; margin: .5ex ; padding: .5ex ;}

/* Minipage environments, vertically aligned to top, center, bottom: */
.minipage, .fminipage, .fcolorminipage {
    /* display: inline-block ; */
        /* Mini pages which follow each other will be tiled. */
    text-align:left;
    margin: .25em .25em .25em .25em;
    padding: .25em .25em .25em .25em;
    display: inline-flex;
    flex-direction: column ;
    overflow: auto;
}

.inlineminipage {
    display: inline-block ;
    text-align: left
}

/* Paragraphs in the flexbox did not collapse their margins. */
/* Have not yet researched this. */
.minipage p {margin: .75ex 0em .75ex 0em ;}

.fboxBlock .minipage, .colorbox .minipage, .colorboxBlock .minipage,
.fcolorbox .minipage, .fcolorboxBlock .minipage
    {border: none ; background: none;}

.fbox, .fboxBlock { border: 1px solid black ; }

.fbox, .fboxBlock, .fcolorbox, .fcolorboxBlock, .colorbox, .colorboxBlock,
.fminipage, .fcolorminipage
    {display: inline-block}

.shadowbox, .shabox {
   border: 1px solid black;
    box-shadow: 3px 3px 3px #808080 ;
     border-radius: 0px ;
    padding: .4ex .3em .4ex .3em ;
    margin: 0pt .3ex 0pt .3ex ;
  display: inline-block ;
}

.doublebox {
   border: 3px double black;
     border-radius: 0px ;
    padding: .4ex .3em .4ex .3em ;
    margin: 0pt .3ex 0pt .3ex ;
  display: inline-block ;
}

.ovalbox, .Ovalbox {
   border: 1px solid black;
     border-radius: 1ex ;
    padding: .4ex .3em .4ex .3em ;
    margin: 0pt .3ex 0pt .3ex ;
  display: inline-block ;
}

.Ovalbox { border-width: 2px ; }

.framebox {
   border: 1px solid black;
     border-radius: 0px ;
    padding: .3ex .2em 0ex .2em ;
    margin: 0pt .1ex 0pt .1ex ;
  display: inline-block ;
}

/* mdframed, tcolorbox, shadebox packages */
.mdframed, .tcolorbox, .shadebox {
    padding: 0ex ;
    margin: 2ex 0em 2ex 0em ;
    border: 1px solid black ;
}

.tcolorbox {
    border-radius: 10pt ;
    margin: 2ex 1em 2ex 1em ;
}

.mdframed p, .tcolorbox p { padding: 0ex .5em 0ex .5em ; }

.mdframed dl, .tcolorbox dl { padding: 1ex .5em 0ex .5em ; }

.mdframedtitle, .tcolorboxtitle {
    padding: .5ex 0pt 0pt 0pt ;
    border-radius: 10pt 10pt 0pt 0pt ;
    display: block ;
    margin-bottom: 1ex ;
    border-bottom: 1px solid silver ;
}

.tcolorboxsubtitle .tcolorbox {
    margin: 2ex 0em 2ex 0em ;
    border-radius: 0pt ;
}

.mdframedsubtitle {
    display: block ;
}

.mdframedsubsubtitle {
    display: block ;
}

.mdtheorem {
    padding: 0ex .5em 0ex .5em ;
    margin: 3ex 5% 3ex 5% ;
}

/* framed package */
.framed, pre.boxedverbatim, fcolorbox {
    margin: 3ex 0em 3ex 0em ;
   border: 1px solid black;
     border-radius: 0px ;
    padding: .3ex 1em 0ex 1em ;
  display: block ;
}

.shaded {
    margin: 3ex 0em 3ex 0em ;
    padding: .3ex 1em .3ex 1em ;
    display: block ;
}

.snugframed {
    margin: 3ex 0em 3ex 0em ;
   border: 1px solid black;
     border-radius: 0px ;
  display: block ;
}

.framedleftbar {
    margin: 3ex 0em 3ex 0em ;
   border-left: 3pt solid black;
     border-radius: 0px ;
    padding: .3ex .2em .3ex 1em ;
  display: block ;
}

.framedtitle {
    margin: 0em ;
    padding: 0em ;
    font-size: 130%
}

.framedtitle p { padding: .3em }

/* For the niceframe package: */

div.niceframe, div.curlyframe, div.artdecoframe, div.generalframe {
    padding: 1ex ;
    margin: 2ex auto ;
    border-radius: 2ex ;
}

div.niceframe {
    border: 6px groove black ;
}

div.curlyframe {
    border-left: 3px dotted black ;
    border-right: 3px dotted black ;
    border-radius: 6ex ;
}

div.artdecoframe {
    border-left: 10px double black ;
    border-right: 10px double black ;
    border-radius: 6ex ;
}

div.generalframe {
    border: 6px groove black ;
}

dl {
  margin: 1ex 2em 1ex 0em;
  line-height: 1.3;
}

dl dt {
    display: block ;
    float:left ;
    font-weight: bold;
    padding-right: 1em ;
}

dl dd { display: block ; }

dl dd:after { content: "" ; display: block ; clear: both }

dl dd p { margin-top: 0em; }

dd ul, dd ol, dd dl {
    clear: both ;
/*    padding-top: 1ex ; */
}

nav {
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "DejaVu Sans", "Bitstream Vera Sans",
        Geneva, Verdana, sans-serif ;
    margin-bottom: 4ex ;
}

nav p {
    line-height: 1.2 ;
    margin-top:.5ex ;
    margin-bottom:.5ex;
    font-size: .9em ;
}

img, img.hyperimage, img.borderimage {
    max-width: 600px;
    border: 1px solid silver;
    box-shadow: 3px 3px 3px #808080 ;
    padding: .5% ;
    margin: .5% ;
    background: none ;
}

img.inlineimage{
    padding: 0px ;
    box-shadow: none ;
    border: none ;
    background: none ;
    margin: 0px ;
    display: inline-block ;
    border-radius: 0px ;
}

img.logoimage{
    max-width: 300px ;
    box-shadow: 3px 3px 3px #808080 ;
    border: 1px solid black ;
    background:none ;
    padding:0 ;
    margin:.5ex ;
    border-radius: 10px ;
}

.section {
/*
    To have each section float relative to each other:
*/
/*
    display: block ;
    float: left ;
    position: relative ;
    background: white ;
    border: 1px solid silver ;
    padding: .5em ;
*/
    margin: 0ex .5em 0ex .5em ;
    padding: 0 ;
}

figure {
    margin: 5ex auto 5ex auto ;
    padding: 1ex 1em 1ex 1em ;
    overflow-x: auto ;
}

/* To automatically center images in figures: */
/*
figure img.inlineimage {
    margin: 0ex auto 0ex auto ;
    display: block ;
}
*/

/* To automatically center minipages in figures: */
/*
figure div.minipage, figure div.minipage div.minipage {
    margin: 1ex auto 1ex auto ;
    display: block ;
}
*/

figure figure { margin: 0pt }

figure div.minipage p { font-size: 85% ; }

figure.subfigure, figure.subtable  {
    display: inline-block ; margin: 3ex 1em 3ex 1em ;
}

div.figurecaption .minipage { margin:0 ; padding: 0 }

div.minipage figure { border: none ; box-shadow: none ; }
div.minipage figure.table { margin: 0ex }
div.minipage div.footnotes { margin: 1ex 2em 0ex 2em }

div.floatrow { text-align: center; }

div.floatrow figure { display: inline-block ; margin: 1ex 2% ; }

div.floatfoot { font-size: .85em ;
    border-top: 1px solid silver ; line-height: 1.2 ; }

div.figurecaption , .lstlistingtitle {
    font-size: .85em ;
    text-align: center ;
    font-weight: bold ;
    margin-top: 1ex ;
    margin-bottom: 1ex ;
}

figure.subfigure div.figurecaption, figure.subtable div.figurecaption  {
    border-bottom: none ; background: none ;
}

div.nonfloatcaption {
    margin: 1ex auto 1ex auto ;
    font-size: .85em ;
    text-align: center ;
    font-weight: bold ;
}

/* For a \RawCaption inside a minipage inside a figure's floatrow: */
figure div.floatrow div.minipage div.figurecaption {
    border: none ;
    background: none ;
}

/* For packages such as float, rotfloat, and algorithm2e: */

figure.boxed, figure.boxruled {
    border: 1px solid black ;
}

figure.ruled {
    border-top: 1px solid black ;
    border-bottom: 1px solid black ;
    border-left: 0px ;
    border-right: 0px ;
    border-radius: 0px ;
    background: none ;
    box-shadow: none ;
}

figure.ruled div.figurecaption, figure.boxruled div.figurecaption {
    border-top: 1px solid silver ;
    border-bottom: 1px solid silver ;
}

table {
    margin: 1ex auto 1ex auto ;
    border-collapse: separate ;
    border-spacing: 0px ;
    line-height: 1.3 ;
    }

table > tbody > tr.hline > td {border-top: 1px solid #808080 ; margin-top: 0ex ;
    margin-bottom: 0ex ; } /* for \hline */

tr.tbrule td {border-top: 1px solid black ; margin-top: 0ex ;
    margin-bottom: 0ex ; } /* for \toprule, \bottomrule */

td {padding: .5ex .5em .5ex .5em ;}

table td.tdl { text-align: left ; vertical-align: middle ; }
table td.tdc { text-align: center ; vertical-align: middle ; }
table td.tdat { text-align: center ; vertical-align: middle ; padding: 0px ; margin: 0px ; }
table td.tdbang { text-align: center ; vertical-align: middle ; }
table td.tdr { text-align: right ; vertical-align: middle ; }
table td.tdp { text-align: left ; vertical-align: bottom ; }
table td.tdm { text-align: left ; vertical-align: middle ; }
table td.tdb { text-align: left ; vertical-align: top ; }
table td.tdP { text-align: center ; vertical-align: bottom ; }
table td.tdM { text-align: center ; vertical-align: middle ; }
table td.tdB { text-align: center ; vertical-align: top ; }

table td.tvertbarl { border-left: 1px solid black }
table td.tvertbarldouble { border-left: 4px double black }
table td.tvertbarr { border-right: 1px solid black }
table td.tvertbarrdouble { border-right: 4px double black }

table td.tvertbarldash { border-left: 1px dashed black }
table td.tvertbarldoubledash { border-left: 2px dashed black }
table td.tvertbarrdash { border-right: 1px dashed black }
table td.tvertbarrdoubledash { border-right: 2px dashed black }

/* for cmidrules: */
table td.tdrule {
    border-top: 1px solid #A0A0A0 ;
}

table td.tdrulel {
    border-top-left-radius:.5em ;
    border-top: 1px solid #A0A0A0 ;
}

table td.tdruler {
    border-top-right-radius:.5em ;
    border-top: 1px solid #A0A0A0 ;
}

table td.tdrulelr {
    border-top-left-radius:.5em ;
    border-top-right-radius:.5em ;
    border-top: 1px solid #A0A0A0 ;
}

/* Margins of paragraphs inside table cells: */
td.tdp p , td.tdprule p , td.tdP p , td.tdPrule p { padding-top: 1ex ;
    padding-bottom: 1ex ; margin: 0ex ; }
td.tdm p , td.tmbrule p , td.tdM p , td.tdMrule p { padding-top: 1ex ;
    padding-bottom: 1ex ; margin: 0ex ; }
td.tdb p , td.tdbrule p , td.tdB p , td.tdBrule p { padding-top: 1ex ;
    padding-bottom: 1ex ; margin: 0ex ; }

td.tdp , td.tdprule , td.tdP , td.tdPrule
    { padding: 0ex .5em 0ex .5em ; }
td.tdm , td.tdmrule , td.tdM , td.tdMrule
    { padding: 0ex .5em 0ex .5em ; }
td.tdb , td.tdbrule , td.tdB , td.tdBrule
    { padding: 0ex .5em 0ex .5em ; }

/* table notes: */
.tnotes {
    margin: 0ex 5% 1ex 5% ;
    padding: 0.5ex 1em 0.5ex 1em;
    font-size:.80em;
    text-align: left ;
}

.minipage .tnotes {
    margin: 0pt ;
    padding: 0pt ;
}

.tnotes dl dt p {margin-bottom:0px;}

.tnoteitemheader {margin-right: 1em;}

/* for colortbl and cell color */
div.cellcolor {
    width: 100% ;
    padding: .5ex .5em .5ex .5em ;
    margin: -.5ex -.5em -.5ex -.5em ;
}

/* for lyluatex */
span.lyluatex {
    display: inline-block ;
}

div.lyluatex p span.lateximagesource img {
    display: block ;
    margin-top: 3ex ;
    margin-bottom: 3ex ;
}

/* for bigdelim */
.ldelim, .rdelim { font-size: 200% }

/* center, flushleft, flushright environments */
div.center{text-align:center;}
div.center table {margin-left:auto;margin-right:auto;}
div.flushleft{text-align:left;}
div.flushleft table {margin-left:0em ; margin-right:auto;}
div.flushright{text-align:right;}
div.flushright table {margin-left:auto ; margin-right: 0em ;}

/* Fancybox */
div.Btrivlist table tr td {
    padding: .2ex 0em ;
}

/* program listing callouts: */
span.callout {
     font-family: "DejaVu Sans", "Bitstream Vera Sans",
        Geneva, Verdana, sans-serif ;
    border-radius: .5em;
    background-color:black;
    color:white;
    padding:0px .25em 0px .25em;
    margin: 0 ;
    font-weight: bold;
    font-size:.72em ;
}

div.programlisting pre.verbatim span.callout{
    font-size: .85em ;
}

span.verbatim {
    font-family: "DejaVu Mono", "Bitstream Vera Mono", "Lucida Console",
        "Nimbus Mono L", "Liberation Mono", "FreeMono", "Andale Mono",
        "Courier New", monospace;
}

div.titlehead
{
    text-align: left ;
    font-style: normal ;
    font-weight: normal ;
    font-style: normal ;
    font-size: .8em ;
    margin: 1ex 0em 1ex 0em ;
}

div.subject
{
    text-align: center ;
    font-style: normal ;
    font-weight: bold ;
    font-style: normal ;
    font-size: .8em ;
    margin: 1ex 0em 1ex 0em ;
}

div.published
{
    text-align: center ;
    font-variant: normal ;
    font-style: italic ;
    font-size: 1em ;
    margin: 1ex 0em 1ex 0em ;
}

div.subtitle
{
    text-align: center ;
    font-variant: normal ;
    font-style: italic ;
    font-size: 1.25em ;
    margin: 1ex 0em 1ex 0em ;
}

div.subtitle p { margin: 1ex ; }

div.author
{
    font-variant: normal ;
    font-style: normal ;
    font-size: 1em ;
    margin: 1ex 0em 1ex 0em ;
}

div.oneauthor {
    display: inline-block ;
    margin: 0ex 1em 0ex 1em ;
}

/*
div.author table {
    margin: 1ex auto 0ex auto ;
    background: none ;
}

div.author table tbody tr td { padding: .25ex ; }
*/

span.affiliation {font-size: .85em ; font-variant: small-caps; }

div.titledate {
    text-align: center ;
    font-size: .85em ;
    font-style: italic;
    margin: 1ex 0em 1ex 0em ;
}

nav.topnavigation{
    text-align: left ;
    padding: 0.5ex 1em 0.5ex 1em ;
/*     margin: 2ex 0em 3ex 0em ; */
    margin: 0 ;
    border-bottom: 1px solid silver ;
    border-top: 1px solid silver ;
    clear:both ;
}

nav.botnavigation{
    text-align: left ;
    padding: 0.5ex 1em 0.5ex 1em ;
/*     margin: 3ex 0em 2ex 0em ; */
    margin: 0 ;
    border-top: 1px solid silver ;
    border-bottom: 1px solid silver ;
    clear:both ;
}

header {
    line-height: 1.2 ;
    font-size: 1em ;
    border-bottom: 1px solid silver ;
    margin: 0px ;
    padding: 2ex 1em 2ex 1em ;
    text-align:left ;
}

footer {
    font-size: .85em ;
    line-height: 1.2 ;
    margin-top: 1ex ;
    border-top: 1px solid silver ;
    padding: 2ex 1em 2ex 1em ;
    clear:both ;
    text-align:left ;
}

/* for \LinkHome, \LinkPrevious, and \LinkNext: */
a.linkhome { font-weight:bold ; font-size: 1em ;}

div.lateximagesource { padding: 0px ; margin: 0px ; display: none; }

img.lateximage{
    padding: 0pt ;
    margin: 0pt ;
    box-shadow: none ;
    border: none ;
    background: none ;
    max-width: 100% ;
    border-radius: 0ex ;
    border: none ;
}

div.sidetoccontainer {
    font-family: "DejaVu Serif", "Bitstream Vera Serif",
        "Lucida Bright", Georgia, serif;
    float: left ;
    width: 19%; /* room for border-right next to 80% main */
    margin: 0pt 0em 3ex 0pt ;
    border-right: 1px solid silver;
    border-bottom: 1px solid silver;
    background: #FAF7F4 ;
    font-size:.9em ;
    border-radius: 0px 0px 20px 0px ;
}

div.sidetoccontents {
    overflow-y: auto ;
    width: 100% ;
    text-align: left ;
}

nav.sidetoc p {line-height:1.2 ; margin: 1ex .5em 1ex .5em ;
    text-indent: 0 ; }

nav.sidetoc p a {color:black ; font-size: .7em ;}

div.sidetoctitle {font-size: 1.2em; font-weight:bold; text-align:center;
    border-bottom: 1px solid silver ;    }

nav.sidetoc a:hover {text-decoration: underline ; }

section.textbody { margin: 0ex 1em 0ex 1em ;}

div.multicolsheading { -webkit-column-span: all;
    -moz-column-span: all; column-span: all; }
div.multicols {
    -webkit-columns: 3 auto ;
    -moz-columns: 3 auto ;
    columns: 3 auto ;
}
div.multicols p {margin-top: 0ex}

/* Used for xfrac and nicefrac: */
span.numerator {
    font-size: 60% ;
    vertical-align: .4em ;
}

span.denominator {
    font-size: 60%
}

/* Used for algorithm2e: */
div.alg2evline{
    margin-left: 1em ;
    padding-left: 1em ;
    border-left: 1px solid black ;
    border-radius: 0px 0px 0px 1ex ;
}

div.alg2evsline{
    margin-left: 1em ;
    padding-left: 1em ;
    border-left: 1px solid black ;
}

div.alg2enoline{
    margin-left: 1em ;
    padding-left: 1em ;
}

span.alg2elinenumber{
    margin-right: .5em ;
    font-size: 50% ;
    color: red ;
}

/* Used for algorithmicx: */
span.floatright { float: right ; }

/* keyfloat and tocdata: */
.floatnotes {
    margin: 0ex 5% 0ex 5% ;
    padding: 0ex 1em 0ex 1em ;
    font-size:.80em ;
    text-align: left ;
}

.authorartist{
    display:block ;
    font-size:.70em ;
    font-style: italic;
}

nav .authorartist{ display:inline; }

/* Native LaTeX theorems: */

.theoremcontents {
    font-style: italic; margin-top: 3ex ; margin-bottom: 3ex ;
}

.theoremlabel {
    font-style: normal; font-weight: bold ; margin-right: .5em ;
}

/* theorem, amsthm, and ntheorem packages */

span.theoremheader,
span.theoremheaderplain,
span.theoremheaderdefinition,
span.theoremheaderbreak,
span.theoremheadermarginbreak,
span.theoremheaderchangebreak,
span.theoremheaderchange,
span.theoremheadermargin
{
    font-style:normal ; font-weight: bold ; margin-right: 1em ;
}

span.amsthmnameplain,
span.amsthmnamedefinition,
span.amsthmnumberplain,
span.amsthmnumberdefinition
{
    font-style:normal ; font-weight: bold ;
}

span.amsthmnameremark,
span.amsthmnumberremark
{font-style:italic ; font-weight: normal ; }

span.amsthmnoteplain,
span.amsthmnotedefinition
{font-style:normal ;}

span.theoremheaderremark,
span.theoremheaderproof,
span.amsthmproofname
{font-style:italic ; font-weight: normal ; margin-right: 1em ; }

span.theoremheadersc
{
    font-style:normal ;
    font-variant: small-caps ;
    font-weight: normal ;
    margin-right: 1em ;
}

.theoremendmark {float:right}

div.amsthmbodyplain, div.theorembodyplain, div.theorembodynonumberplain,
div.theorembodybreak, div.theorembodynonumberbreak,
div.theorembodymarginbreak,
div.theorembodychangebreak,
div.theorembodychange,
div.theorembodymargin
{
    font-style:italic;
    margin-top: 3ex ; margin-bottom: 3ex ;
}

div.theorembodydefinition, div.theorembodyremark, div.theorembodyproof,
div.theorembodyplainupright, nonumberplainuprightsc,
div.amsthmbodydefinition, div.amsthmbodyremark,
div.amsthmproof
{
    font-style: normal ;
    margin-top: 3ex ; margin-bottom: 3ex ;
}

span.amsthmnoteremark {}

/* thmbox */

.thmbox {
    font-style: italic; margin-top: 3ex ; margin-bottom: 3ex ;
    border: 1px solid gray ;
    padding: 1ex ;
}

.thmboxtitle {
    font-style: normal; font-weight: bold ; margin-right: .5em ;
    border-bottom: 1px solid gray ;
}

span.thmboxproofname, span.thmboxexamplename {
    font-weight: bold ;
}

div.thmboxproof, div.thmboxexample {
    font-size: 0.85em ;
    margin: 2ex ;
}

div.thmboxleftbar {
    border-left: 2px solid black ;
    padding-left: 1em ;
}

/* For the backnaur package: */
div.backnaur {
    display: block ;
    margin: 2ex 2em 2ex 2em ;
}

div.backnaur p {
    margin: .25ex 0ex .25ex 0ex ;
}

div.backnaurprod {
    display: inline-block ;
    min-width: 8em ;
    text-align:right ;
}

div.backnaurdesc {
    display: inline-block ;
}

/* For the notes package: */
div.notesimportantnote, div.noteswarningnote, div.notesinformationnote {
    clear: both ;
    margin: 2ex 2em 2ex 2em ;
    border: 1px solid silver ;
}

div.notesicon {
    float:left ;
    display: inline-block ;
    background: gold ;
    padding: 0ex 1em 0ex 1em ;
    margin-right: 1em ;
    font-weight: bold ;
}

div.notescontents { font-style: italic }

/* nolbreaks package: */
span.nolbreaks { white-space: nowrap ; }

/*
For CSS LaTeX and related logos:
Based on spacing demonstrated by the metafont package.

The subscripts are shrunk instead of lowered below the baseline,
to avoid browser rendering errors with the line height in lists, etc.
*/

.latexlogofont {
    font-family: "Linux Libertine O", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    font-variant: normal ;
}

.latexlogo {
    font-family: "Linux Libertine O", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
}

.latexlogosup {
  text-transform: uppercase;
  letter-spacing: .03em ;
  font-size: 0.7em;
  vertical-align: 0.25em;
  margin-left: -0.4em;
  margin-right: -0.15em;
}

.latexlogosub {
  text-transform: uppercase;
/*  vertical-align: -0.27ex; */
  margin-left: -0.08em;
  margin-right: -0.07em;
/*  font-size: 1em; */
    font-size: .7em ;
}

.latexlogotwoe {
  text-transform: none ;
  font-variant-numeric: oldstyle-nums ;
}

.latexlogotwoesub {
  font-style:italic ;
/*  vertical-align: -0.27ex; */
  margin-left: -0.11em;
  margin-right: -0.1em;
/*  font-size: 1em; */
    font-size: .7em ;
}

.xelatexlogo {
    font-family: "Linux Libertine O", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    letter-spacing: .03em ;
}

.xelatexlogosub {
/*  vertical-align: -0.27ex; */
  margin-left: -0.0667em;
  margin-right: -.05em;
/*  font-size: 1em; */
    font-size: .7em ;
  letter-spacing: .03em ;
}

.amslogo {
    font-family: "TeXGyreChorus","URW Chancery L",
        "Apple Chancery","ITC Zapf Chancery","Monotype Corsiva",
        "Linux Libertine O", "Nimbus Roman No 9 L",  "FreeSerif",
        "Hoefler Text", Times, "Times New Roman", serif ;
    font-style: italic ;
}

.lyxlogo {
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "DejaVu Sans", "Bitstream Vera Sans", Geneva,
        Verdana, sans-serif ;
}

/* Only display top and bottom navigation if a small screen: */
/* Hide the sidetoc if a small screen: */
nav.topnavigation { display:none; }
nav.botnavigation { display:none; }

/* Only display the sidetoc's webpage title if a small screen */
span.sidetocthetitle { display: none }

@media screen and (max-width: 100em) {
    div.multicols {
        -webkit-columns: 2 auto ;
        -moz-columns: 2 auto ;
        columns: 2 auto ;
    }
}

@media screen and (max-width: 50em) {
    div.sidetoccontainer {
        float: none ;
        width: 100% ;
        padding: 0 ;
        border-radius: 0 ;
        border-bottom: 1px solid black ;
        border-top: 1px solid black ;
        box-shadow: none ;
    }
    span.sidetocthetitle { display: inline }
    nav.topnavigation { display:block }
    nav.botnavigation { display:block }
    main.bodycontainer { width: 100% }
    .marginpar {
        max-width: 100%;
        float: none;
        display:block ;
        margin: 1ex 1em 1ex 1em ;
    }
    div.multicols {
        -webkit-columns: 1 auto ;
        -moz-columns: 1 auto ;
        columns: 1 auto ;
    }
}

@media print {
    body {
        font-family: "Linux Libertine O",
        "DejaVu Serif", "Bitstream Vera Serif",
        "Liberation Serif", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    }
    div.sidetoccontainer { display:none; }
    nav.topnavigation { display: none; }
    nav.botnavigation { display: none; }
    main.bodycontainer { width: 100% }
}

@media handheld {
    div.sidetoccontainer { display:none; }
    nav.topnavigation { display:block }
    nav.botnavigation { display:block }
    main.bodycontainer { width: 100% }
}

@media projection {
    div.sidetoccontainer { display:none; }
    nav.topnavigation { display:block }
    nav.botnavigation { display:block }
    main.bodycontainer { width: 100% }
}
\end{filecontents*}
\end{LWRwriteconf}


\begin{LWRwriteconf}
\begin{filecontents*}[overwrite]{lwarp_sagebrush.css}
@import url("lwarp.css") ;

A:link {color:#105030 ; text-decoration: none ; }
A:visited {color:#705030 ; text-shadow:1px 1px 2px #a0a0a0;}
A:hover {color:#006000 ; text-decoration: underline ; text-shadow:0px 0px 2px #a0a0a0;}
A:active {color:#00C000 ; text-shadow:1px 1px 2px #a0a0a0;}

div.book, h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph
{
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "Linux Libertine O", "Liberation Serif",
        "Nimbus Roman No 9 L",  "FreeSerif",
        "Hoefler Text", Times, "Times New Roman", serif;
    font-variant: small-caps ;
    font-weight: normal ;
    color: #304070 ;
    text-shadow: 2px 2px 3px #808080;
}

h1 {    /* title of the entire website, used on each page */
    font-variant: small-caps ;
    color: #304070 ;
    text-shadow: 2px 2px 3px #808080;
    background-color: #F7F7F0 ;
    background-image: linear-gradient(to bottom, #F7F7F0, #C0C0C4);
}

h1 {
  border-bottom: 1px solid #304070;
/*  border-top: 2px solid #304070; */
}

h2 {
  border-bottom: 1px solid #304070;
/*  border-top: 2px solid #304070; */
    background-color: #F7F7F0 ;
    background-image: linear-gradient(to bottom, #F7F7F0, #DAD0C0);
}

div.abstract {
    background: #f5f5eb ;
    background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8);

  border: 1px solid silver;
    border-radius: 1em ;
}

div.abstract dl {line-height:1.5;}
div.abstract dt {color:#304070;}

div.abstracttitle{
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    font-weight:bold;
    font-variant: small-caps ;
    font-size:1.5em;
    border-bottom: 1px solid silver ;
    color: #304070 ;
    text-align: center ;
    text-shadow: 1px 1px 2px #808080;
}

span.abstractrunintitle{
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    font-weight:bold;
}

div.epigraph, div.dictum {
    background: #f5f5eb ;
    background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8);

    border: 1px solid silver ;
    border-radius: 1ex ;
    box-shadow: 3px 3px 3px #808080 ;
}

.example {
    background-color: #f5f5eb ;
    background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8);

}

div.exampletitle{
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    font-weight:bold;
    font-variant: small-caps ;
    border-bottom: 1px solid silver ;
    color: #304070 ;
    text-align: center ;
    text-shadow: 1px 1px 2px #808080;
}

.sidebar {
    background-color: #f5f5eb ;
    background-image: linear-gradient(to bottom, #f5f5eb, #C8C8B8);

}

div.sidebartitle{
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    font-weight:bold;
    font-variant: small-caps ;
    border-bottom: 1px solid silver ;
    color: #304070 ;
    text-align: center ;
    text-shadow: 1px 1px 2px #808080;
}

.fancyvrblabel {
    font-family: "URW Classico", Optima, "Linux Biolinum O",
        "Linux Libertine O", "Liberation Serif", "Nimbus Roman No 9 L",
        "FreeSerif", "Hoefler Text", Times, "Times New Roman", serif;
    font-weight:bold;
    font-variant: small-caps ;
    font-size: 1.5em ;
    color: #304070 ;
    text-align: center ;
    text-shadow: 1px 1px 2px #808080;
}

div.minipage {
    background-color: #eeeee7 ;
    border: 1px solid silver ;
    border-radius: 1ex ;
}

table div.minipage { background: none ; border: none ; }

div.framebox div.minipage {border:none ; background:none}

section.textbody > div.minipage {
    box-shadow: 3px 3px 3px #808080 ;
}

div.fboxBlock div.minipage { box-shadow: none ; }

.framed .minipage , .framedleftbar .minipage {
    border: none ;
    background: none ;
    padding: 0ex ;
    margin: 0ex ;
}

figure.figure .minipage, div.figurecaption .minipage { border: none; }

div.marginblock div.minipage ,
div.marginparblock div.minipage
    { border: none; }

figure , div.marginblock {
    background-color: #eeeee7 ;
    border: 1px solid silver ;
    border-radius: 1ex ;
    box-shadow: 3px 3px 3px #808080 ;
}

figure figure {
    border: 1px solid silver ;
    margin: 0em ;
    box-shadow: none ;
}

/*
div.figurecaption {
    border-top: 1px solid silver ;
    border-bottom: 1px solid silver ;
    background-color: #e8e8e8 ;
}
*/

div.table {
    box-shadow: 3px 3px 3px #808080 ;
}

/*
.tnotes {
    background: #e8e8e8;
    border: 1px solid silver;
}
*/

nav.topnavigation{
    background-color: #b0b8b0 ;
    background-image: linear-gradient(to bottom,#e0e0e0,#b0b8b0) ;
}

nav.botnavigation{
    background-color: #b0b8b0 ;
    background-image: linear-gradient(to top,#e0e0e0,#b0b8b0) ;
}

header{
    background-color: #F7F7F0 ;
    background-image: linear-gradient(to top, #F7F7F0, #b0b8b0);
}

footer{
    background-color: #F7F7F0 ;
    background-image: linear-gradient(to bottom, #F7F7F0, #b0b8b0);
}

div.sidetoccontainer {
    background-color: #F7F7F0 ;
    background-image: linear-gradient(to bottom, #F7F7F0, #C0C0C0);
    box-shadow: 3px 3px 3px #808080 ;
    }

div.sidetoctitle {color: #304070 ; }

nav.sidetoc a:hover {
    color:#006000 ;
    text-decoration: none ;
    text-shadow:0px 0px 2px #a0a0a0;
}

@media screen and (max-width: 45em) {
    div.sidetoccontainer { border-radius: 0 ; }
}

\end{filecontents*}
\end{LWRwriteconf}


\begin{LWRwriteconf}
\begin{filecontents*}[overwrite]{lwarp_formal.css}
@import url("lwarp.css") ;

A:link {color:#802020 ; text-decoration:none; }
A:visited {color:#802020 ; text-shadow:none ;}
A:hover {color:#400000 ; text-shadow:none ;}
A:active {color:#C00000 ; text-shadow:none ;}

body {
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    background: #fffcf5;
}

span.textrm {
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
}

span.textsf {
     font-family: "DejaVu Sans", "Bitstream Vera Sans",
        Geneva, Verdana, sans-serif ;
}

div.book, h1, h2, h3, h4, h5, h6, span.paragraph, span.subparagraph
{
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    color: #800000 ;
    text-shadow: none ;
}

h1, h2 {
    background-color: #fffcf5 ;
    background-image: none ;
    border-bottom: 1px solid #808080;
/*    border-top: 2px solid #808080; */
}

div.abstracttitle {
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    color: black ;
    text-shadow: none ;
}

span.abstractrunintitle {
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    color: black ;
    text-shadow: none ;
}

div.abstract { font-size: 100% }

.sidebar {
    background: #fffcf5;
    background-image: none ;
  margin: 2em 5% 2em 5%;
  padding: 0.5em 1em;
  border: none ;
  border-top : 1px solid silver;
  border-bottom : 1px solid silver;
  font-size: 90% ;
}

div.sidebartitle{
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    color: #800000 ;
    text-shadow: none ;
    border: none ;
}

.example {
    background: #fffcf5;
    background-image: none ;
  margin: 2em 5% 2em 5%;
  padding: 0.5em 1em;
  border: none ;
  border-top : 1px solid silver;
  border-bottom : 1px solid silver;
}

div.exampletitle{
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    color: #800000 ;
    text-shadow: none ;
    border: none ;
}

div.fancyvrblabel{
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    color: #800000 ;
    text-shadow: none ;
    border: none ;
}

figure {
    margin: 5ex 5% 5ex 5% ;
    padding: 1ex 1em 1ex 1em ;
    background-color: #fffcf5 ;
    overflow-x: auto ;
    border: none ;
/*     border-top: 1px solid silver; */
/*     border-bottom: 1px solid silver; */
}

div.figurecaption , .lstlisting {
    border: none ;
/*     border-top: 1px solid silver ; */
/*     border-bottom: 1px solid silver ; */
    background-color: #fffcf5 ;
}

.tnotes {
    background: #fffcf5 ;
    border-top: 1px solid silver ;
    border-bottom: 1px solid silver ;
}

.theorem {
        background: none ;
}

.minipage {
    background-color: #fffcf5 ;
    border: none ;
}

div.floatrow figure { border: none ; }

figure figure { border: none ; }

nav.toc, nav.lof, nav.lot, nav.lol {
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
}

div.sidetoccontainer {
    font-family: "Linux Libertine O", "Hoefler Text", "Garamond",
        "Bembo", "Janson", "TeX Gyre Pagella", "Palatino",
        "Liberation Serif", "Nimbus Roman No 9 L",  "FreeSerif", Times,
        "Times New Roman", serif;
    background-image: linear-gradient(to bottom, #fffcf5, #C0C0C0);
}

div.sidetoctitle{
    color: #800000 ;
}

header{
    background-color: #e0e0e0 ;
    background-image: linear-gradient(to top, #fffcf5, #b0b0b0);
    text-align:center ;
}

footer{
    background-color: #e0e0e0 ;
    background-image: linear-gradient(to bottom, #fffcf5, #b0b0b0);
    padding: 2ex 1em 2ex 1em ;
    text-align:left ;
}

nav.botnavigation {
    background: #dedcd5 ;
    border-top: 1px solid black ;
}
\end{filecontents*}
\end{LWRwriteconf}


\begin{LWRwriteconf}
\begin{filecontents*}[overwrite]{sample_project.css}
/* ( --- Start of project.css --- ) */
/* ( --- A sample project-specific CSS file for lwarp --- ) */

/* Uncomment one of the following: */
@import url("lwarp.css") ;
/* @import url("lwarp_formal.css") ; */
/* @import url("lwarp_sagebrush.css") ; */

/* Project-specific CSS setting follow here. */
/* . . . */

/* ( --- End of project.css --- ) */
\end{filecontents*}
\end{LWRwriteconf}


\begin{LWRwriteconf}
\begin{filecontents*}[overwrite]{lwarp.ist}
preamble
"\\begin{theindex}
  \\providecommand*\\lettergroupDefault[1]{}
  \\providecommand*\\lettergroup[1]{%
      \\par\\textbf{#1}\\par
      \\nopagebreak
  }
"
headings_flag 1
heading_prefix "
  \\lettergroup{"
heading_suffix "}"
delim_0 ", \\hyperindexref{"
delim_1 ", \\hyperindexref{"
delim_2 ", \\hyperindexref{"
delim_n "}, \\hyperindexref{"
delim_r "} -- \\hyperindexref{"
delim_t "}"
page_compositor "."
\end{filecontents*}
\end{LWRwriteconf}


\begin{LWRwriteconf}
\begin{filecontents*}[overwrite]{lwarp.xdy}
(require "tex/inputenc/latin.xdy")
(merge-rule "\\PS *" "Postscript")
(require "texindy.xdy")
(require "page-ranges.xdy")
(require "book-order.xdy")
(define-location-class "arabic-page-numbers"
    ("arabic-numbers") :min-range-length 1)
(require "makeindex.xdy")
(define-attributes (("hyperindexref")))
(markup-locref :open "\hyperindexref{" :close "}")
(markup-locref :open "\hyperindexref{" :close "}" :attr "hyperpage")
(markup-locref :open "\textbf{\hyperindexref{" :close "}}" :attr "textbf")
(markup-locref :open "\textit{\hyperindexref{" :close "}}" :attr "textit")
(define-location-class-order ("roman-page-numbers"
                  "arabic-page-numbers"
                  "alpha-page-numbers"
                  "Roman-page-numbers"
                  "Alpha-page-numbers"
                  "see"
                  "seealso"))
\end{filecontents*}
\end{LWRwriteconf}

\begin{LWRwriteconf}
\immediate\openout\LWR@quickfile=lwarp_one_limage.txt
\immediate\write\LWR@quickfile{%
    pdfseparate -f \LWRpercent 1 -l \LWRpercent 1 \LWRpercent 4_html.pdf %
    \LWR@ImagesDirectory\OSPathSymbol lateximagetemp-\LWRpercent\LWRpercent d.pdf%
}
\immediate\write\LWR@quickfile{%
    pdfcrop --hires  \LWR@ImagesDirectory\OSPathSymbol lateximagetemp-\LWRpercent 1.pdf %
    \LWR@ImagesDirectory\OSPathSymbol\LWRpercent 3.pdf%
}
\immediate\write\LWR@quickfile{%
    pdftocairo  -svg -noshrink  \LWR@ImagesDirectory\OSPathSymbol\LWRpercent 3.pdf %
    \LWR@ImagesDirectory\OSPathSymbol\LWRpercent 3.svg%
}
\immediate\write\LWR@quickfile{%
    del \LWR@ImagesDirectory\OSPathSymbol\LWRpercent 3.pdf%
}
\immediate\write\LWR@quickfile{%
    del \LWR@ImagesDirectory\OSPathSymbol lateximagetemp-\LWRpercent 1.pdf%
}
\immediate\write\LWR@quickfile{exit}
\immediate\closeout\LWR@quickfile
\end{LWRwriteconf}



\begin{LWRwriteconf}
\begin{filecontents*}[overwrite]{lwarp_mathjax.txt}
<script>
// Lwarp MathJax emulation code
//
// Based on code by Davide P. Cervone.
// Equation numbering: https://github.com/mathjax/MathJax/issues/2427
// Starred and ifnextchar macros: https://github.com/mathjax/MathJax/issues/2428
// \left, \right delimiters: https://github.com/mathjax/MathJax/issues/2535
//
// Modified by Brian Dunn to adjust equation numbering and add subequations.
//
// LaTeX can use \seteqnumber{subequations?}{section}{number} before each equation.
// subequations? is 0 usually, 1 if inside subequations.
// section is a string printed as-is, or empty.
// number is auto-incremented by MathJax between equations.
//
MathJax = {
  subequations: "0",
  section: "",
  loader: {
    load: ['[tex]/tagformat', '[tex]/textmacros'],
  },
  startup: {
    ready() {
      //  These would be replaced by import commands if you wanted to make
      //  a proper extension.
      const Configuration = MathJax._.input.tex.Configuration.Configuration;
      const CommandMap = MathJax._.input.tex.SymbolMap.CommandMap;
      const Macro = MathJax._.input.tex.Symbol.Macro;
      const TexError = MathJax._.input.tex.TexError.default;
      const ParseUtil = MathJax._.input.tex.ParseUtil.default;
      const expandable = MathJax._.util.Options.expandable;

      //  Insert the replacement string into the TeX string, and check
      //  that there haven't been too many maxro substitutions (prevents
      //  infinite loops).
      const useArgument = (parser, text) => {
        parser.string = ParseUtil.addArgs(parser, text, parser.string.slice(parser.i));
        parser.i = 0;
        if (++parser.macroCount > parser.configuration.options.maxMacros) {
          throw new TexError('MaxMacroSub1',
          'MathJax maximum macro substitution count exceeded; ' +
          'is there a recursive macro call?');
        }
      }

      //  Create the command map for:
      //    \ifstar, \ifnextchar, \ifblank, \ifstrequal, \seteqnumber
      new CommandMap('Lwarp-macros', {
        ifstar: 'IfstarFunction',
        ifnextchar: 'IfnextcharFunction',
        ifblank: 'IfblankFunction',
        ifstrequal: 'IfstrequalFunction',
        seteqnumber: 'SeteqnumberFunction'
      }, {
        //  This function implements an ifstar macro.
        IfstarFunction(parser, name) {
          const resultstar = parser.GetArgument(name);
          const resultnostar = parser.GetArgument(name);
          const star = parser.GetStar();                 // true if there is a *
          useArgument(parser, star ? resultstar : resultnostar);
        },

        //  This function implements an ifnextchar macro.
        IfnextcharFunction(parser, name) {
          let whichchar = parser.GetArgument(name);
          if (whichchar.match(/^(?:0x[0-9A-F]+|[0-9]+)$/i)) {
            // $ syntax highlighting
            whichchar = String.fromCodePoint(parseInt(whichchar));
          }
          const resultnextchar = parser.GetArgument(name);
          const resultnotnextchar = parser.GetArgument(name);
          const gotchar = (parser.GetNext() === whichchar);
          useArgument(parser, gotchar ? resultnextchar : resultnotnextchar);
        },

        // This function implements an ifblank macro.
        IfblankFunction(parser, name) {
          const blankarg = parser.GetArgument(name);
          const resultblank = parser.GetArgument(name);
          const resultnotblank = parser.GetArgument(name);
          const isblank = (blankarg.trim() == "");
          useArgument(parser, isblank ? resultblank : resultnotblank);
        },

        // This function implements an ifstrequal macro.
        IfstrequalFunction(parser, name) {
          const strequalfirst = parser.GetArgument(name);
          const strequalsecond = parser.GetArgument(name);
          const resultequal = parser.GetArgument(name);
          const resultnotequal = parser.GetArgument(name);
          const isequal = (strequalfirst == strequalsecond);
          useArgument(parser, isequal ? resultequal : resultnotequal);
        },

        //  This function modifies the equation numbers.
        SeteqnumberFunction(parser, name) {
            //  Get the macro parameters
            const star = parser.GetStar();                  // true if there is a *
            const optBrackets = parser.GetBrackets(name);   // contents of optional brackets
            const newsubequations = parser.GetArgument(name);  // the subequations argument
            const neweqsection = parser.GetArgument(name);  // the eq section argument
            const neweqnumber = parser.GetArgument(name);   // the eq number argument
            MathJax.config.subequations=newsubequations ;   // a string with boolean meaning
            MathJax.config.section=neweqsection ;           // a string with numeric meaning
            parser.tags.counter = parser.tags.allCounter = neweqnumber ;
        }

      });

      //  Create the Lwarp-macros package
      Configuration.create('Lwarp-macros', {
        handler: {macro: ['Lwarp-macros']}
      });

      MathJax.startup.defaultReady();

      // For forward references:
      MathJax.startup.input[0].preFilters.add(({math}) => {
        if (math.inputData.recompile){
            MathJax.config.subequations = math.inputData.recompile.subequations;
            MathJax.config.section = math.inputData.recompile.section;
        }
      });
      MathJax.startup.input[0].postFilters.add(({math}) => {
        if (math.inputData.recompile){
            math.inputData.recompile.subequations = MathJax.config.subequations;
            math.inputData.recompile.section = MathJax.config.section;
        }
      });

        // For \left, \right with unicode-math:
        const {DelimiterMap} = MathJax._.input.tex.SymbolMap;
        const {Symbol} = MathJax._.input.tex.Symbol;
        const {MapHandler} = MathJax._.input.tex.MapHandler;
        const delimiter = MapHandler.getMap('delimiter');
        delimiter.add('\\lBrack', new Symbol('\\lBrack', '\u27E6'));
        delimiter.add('\\rBrack', new Symbol('\\rBrack', '\u27E7'));
        delimiter.add('\\lAngle', new Symbol('\\lAngle', '\u27EA'));
        delimiter.add('\\rAngle', new Symbol('\\rAngle', '\u27EB'));
        delimiter.add('\\lbrbrak', new Symbol('\\lbrbrak', '\u2772'));
        delimiter.add('\\rbrbrak', new Symbol('\\rbrbrak', '\u2773'));
        delimiter.add('\\lbag', new Symbol('\\lbag', '\u27C5'));
        delimiter.add('\\rbag', new Symbol('\\rbag', '\u27C6'));
        delimiter.add('\\llparenthesis', new Symbol('\\llparenthesis', '\u2987'));
        delimiter.add('\\rrparenthesis', new Symbol('\\rrparenthesis', '\u2988'));
        delimiter.add('\\llangle', new Symbol('\\llangle', '\u2989'));
        delimiter.add('\\rrangle', new Symbol('\\rrangle', '\u298A'));
        delimiter.add('\\Lbrbrak', new Symbol('\\Lbrbrak', '\u27EC'));
        delimiter.add('\\Rbrbrak', new Symbol('\\Rbrbrak', '\u27ED'));
        delimiter.add('\\lBrace', new Symbol('\\lBrace', '\u2983'));
        delimiter.add('\\rBrace', new Symbol('\\rBrace', '\u2984'));
        delimiter.add('\\lParen', new Symbol('\\lParen', '\u2985'));
        delimiter.add('\\rParen', new Symbol('\\rParen', '\u2986'));
        delimiter.add('\\lbrackubar', new Symbol('\\lbrackubar', '\u298B'));
        delimiter.add('\\rbrackubar', new Symbol('\\rbrackubar', '\u298C'));
        delimiter.add('\\lbrackultick', new Symbol('\\lbrackultick', '\u298D'));
        delimiter.add('\\rbracklrtick', new Symbol('\\rbracklrtick', '\u298E'));
        delimiter.add('\\lbracklltick', new Symbol('\\lbracklltick', '\u298F'));
        delimiter.add('\\rbrackurtick', new Symbol('\\rbrackurtick', '\u2990'));
        delimiter.add('\\langledot', new Symbol('\\langledot', '\u2991'));
        delimiter.add('\\rangledot', new Symbol('\\rangledot', '\u2992'));
        delimiter.add('\\lparenless', new Symbol('\\lparenless', '\u2993'));
        delimiter.add('\\rparengtr', new Symbol('\\rparengtr', '\u2994'));
        delimiter.add('\\Lparengtr', new Symbol('\\Lparengtr', '\u2995'));
        delimiter.add('\\Rparenless', new Symbol('\\Rparenless', '\u2996'));
        delimiter.add('\\lblkbrbrak', new Symbol('\\lblkbrbrak', '\u2997'));
        delimiter.add('\\rblkbrbrak', new Symbol('\\rblkbrbrak', '\u2998'));
        delimiter.add('\\lvzigzag', new Symbol('\\lvzigzag', '\u29D8'));
        delimiter.add('\\rvzigzag', new Symbol('\\rvzigzag', '\u29D9'));
        delimiter.add('\\Lvzigzag', new Symbol('\\Lvzigzag', '\u29DA'));
        delimiter.add('\\Rvzigzag', new Symbol('\\Rvzigzag', '\u29DB'));
        delimiter.add('\\lcurvyangle', new Symbol('\\lcurvyangle', '\u29FC'));
        delimiter.add('\\rcurvyangle', new Symbol('\\rcurvyangle', '\u29FD'));
        delimiter.add('\\Vvert', new Symbol('\\Vvert', '\u2980'));
    }   // ready
  },    // startup

  tex: {
    packages: {'[+]': ['tagformat', 'Lwarp-macros', 'textmacros']},
    tags: "ams",
        tagformat: {
            number: function (n) {
                if(MathJax.config.subequations==0)
                    return(MathJax.config.section + n);
                else
                    return(MathJax.config.section + String.fromCharCode(96+n));
            },
        },
  }
}
</script>

<script
    id="MathJax-script"
    src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"
></script>
\end{filecontents*}
\end{LWRwriteconf}




\begin{LWRcreatelwarpmk}
\begin{filecontents*}[overwrite]{lwarpmk.lua}
#!/usr/bin/env texlua

-- Copyright 2016-2021 Brian Dunn

printversion = "v0.900"
requiredconfversion = "2" -- also at *lwarpmk.conf

function printhelp ()
print ("lwarpmk: Use lwarpmk -h or lwarpmk --help for help.") ;
end

function printusage ()
--
-- Print the usage of the lwarpmk command:
--
print ( [[

lwarpmk print [-p project]: Compile the print version if necessary.
lwarpmk print1 [-p project]: Forced single compile of the print version.
lwarpmk printindex [-p project]: Process print indexes.
lwarpmk printglossary [-p project]: Process the glossary for the print version.
lwarpmk html [-p project]: Compile the HTML version if necessary.
lwarpmk html1 [-p project]: Forced single compile of the HTML version.
lwarpmk htmlindex [-p project]: Process HTML indexes.
lwarpmk htmlglossary [-p project]: Process the glossary for the html version.
lwarpmk again [-p project]: Touch the source code to trigger recompiles.
lwarpmk limages [-p project]: Process the "lateximages" created by lwarp.sty.
lwarpmk pdftohtml [-p project]:
    For use with latexmk or a Makefile:
    Converts project_html.pdf to project_html.html and individual HTML files.
    Finishes the HTML conversion even if there was a compile error.
lwarpmk pdftosvg <list of file names>: Converts each PDF file to SVG.
lwarpmk epstopdf <list of file names>: Converts each EPS file to PDF.
lwarpmk clean [-p project]: Remove *.aux, *.toc, *.lof/t,
    *.idx, *.ind, *.bbl, *.log, *_html_inc.*, .gl*,
    *_html.pdf, *_html.html, *_html.sidetoc
lwarpmk cleanall [-p project]: Remove auxiliary files, project.pdf, *.html
lwarpmk cleanlimages: Removes all images from the "lateximages" directory.
lwarpmk -v: Print the version number.
lwarpmk -h: Print this help message.
lwarpmk --help: Print this help message.

]] )
-- printconf ()
end

function splitfilename ( pathandfilename )
--
-- Separates out the path and extension from a filename.
-- Returns path, filename with extension, and extension.
-- Ex: thispath, thisfilename, thisextension = splitfilename ("path/to/filename.ext")
--
-- https://www.fhug.org.uk/wiki/wiki/doku.php?id=plugins:code_snippets:
--      split_filename_in_to_path_filename_and_extension
--
    if lfs.attributes(pathandfilename,"mode") == "directory" then
        local strPath = pathandfilename:gsub("[\\/]$","") -- $ (syntax highlighting)
        return strPath.."\\","",""
    end
    pathandfilename = pathandfilename.."."
    return pathandfilename:match("^(.-)([^\\/]-)%.([^\\/%.]-)%.?$")
end

function splitfile (destfile,sourcefile)
--
-- Split one large sourcefile into a number of files,
-- starting with destfile.
-- The file is split at each occurance of <!--|Start file|newfilename|*
-- If lwarp is in use, sets usinglwarp.
--
usinglwarp = false ;
print ("lwarpmk: Splitting " .. sourcefile .. " into " .. destfile) ;
local sfile = io.open(sourcefile)
io.output(destfile)
for line in sfile:lines() do
i,j,copen,cstart,newfilename = string.find (line,"(.*)|(.*)|(.*)|") ;
if ( (i~= nil) and (copen == "<!--") and (cstart == "Start file")) then
    -- split the file
    io.output(newfilename) ;
else
if ( (i~= nil) and (copen == "<!--") and (cstart == "Using lwarp")) then
    -- verified the use of \usepackage{lwarp}
    usinglwarp = true ;
else
    -- not a splitpoint
    io.write (line .. "\n") ;
end end
end -- do
io.close(sfile)
if ( usinglwarp == false ) then
    print ("lwarpmk: ===")
    print ("lwarpmk: \\usepackage{lwarp} was not detected.")
    print ("lwarpmk: The HTML output will not be correct.")
    print ("lwarpmk: Ensured that \\usepackage{lwarp} is enabled,")
    print ("lwarpmk: then lwarpmk print and lwarpmk html again.")
    print ("lwarpmk: ===")
end
end -- function

function cvalueerror ( line, linenum , cvalue )
--
-- Incorrect value, so print an error and exit.
--
    print ("lwarpmk: ===")
    print ("lwarpmk: " .. linenum .. " : " .. line ) ;
    print (
        "lwarpmk: incorrect variable value \"" .. cvalue ..
        "\" in lwarpmk.conf.\n"
    ) ;
    print ("lwarpmk: ===")
--    printconf () ;
    os.exit(1) ;
end

function printhowtorecompile ()
-- Tells the user how to recompile to regenerate the configuration files.
    print ("lwarpmk: The configuration files lwarpmk.conf and "..sourcename..".lwarpmkconf" )
    print ("lwarpmk:   must be updated.  To do so, recompile" )
    print ("lwarpmk:   " , sourcename..".tex" )
    if ( printlatexcmd == "" ) then
        print ("lwarpmk:   using xe/lua/pdflatex," )
    else
        print ("lwarpmk:   using the command:")
        print ("lwarpmk:   " , printlatexcmd )
    end
    print ("lwarpmk:   then use lwarpmk again.")
end -- printhowtorecompile

function ignoreconf ()
-- Global argument index
argindex = 2
end

function loadconf ()
--
-- Load settings from the project's "lwarpmk.conf" file:
--
-- Default configuration filename:
local conffile = "lwarpmk.conf"
local confroot = "lwarpmk"
-- Global argument index
argindex = 2
-- Optional configuration filename:
if ( arg[argindex] == "-p" ) then
    argindex = argindex + 1
    confroot = arg[argindex]
    conffile = confroot..".lwarpmkconf"
    argindex = argindex + 1
end
-- Additional defaults:
confversion = "0"
opsystem = "Unix"
imagesdirectory = "lateximages"
imagesname = "image-"
latexmk = "false"
printlatexcmd = ""
HTMLlatexcmd = ""
printindexcmd = ""
HTMLindexcmd = ""
latexmkindexcmd = ""
-- to be removed:
-- indexprog = "makeindex"
-- makeindexstyle = "lwarp.ist"
-- xindylanguage = "english"
-- xindycodepage = "utf8"
-- xindystyle = "lwarp.xdy"
-- pdftotextenc = "UTF-8"
glossarycmd = "makeglossaries"
-- Verify the file exists:
if (lfs.attributes(conffile,"mode")==nil) then
    -- file not exists
    print ("lwarpmk: ===")
    print ("lwarpmk: File \"" .. conffile .."\" does not exist.")
    print ("lwarpmk: Move to the project's source directory,")
    print ("lwarpmk: recompile using pdflatex, xelatex, or lualatex,")
    print ("lwarpmk: then try using lwarpmk again.")
    if ( arg[argindex] ~= nil ) then
        print (
            "lwarpmk: (\"" .. confroot ..
            "\" does not appear to be a project name.)"
        )
    end
    print ("lwarpmk: ===")
    printhelp () ;
    os.exit(1) -- exit the entire lwarpmk script
else -- file exists
-- Read the file:
print ("lwarpmk: Reading " .. conffile ..".")
local cfile = io.open(conffile)
-- Scan each line, parsing each line as: name = [[string]]
local linenum = 0
for line in cfile:lines() do -- scan lines
linenum = linenum + 1
i,j,cvarname,cvalue = string.find (line,"([%w-_]*)%s*=%s*%[%[([^%]]*)%]%]") ;
-- Error if incorrect enclosing characters:
if ( i == nil ) then
    print ("lwarpmk: ===")
    print ("lwarpmk: " ..  linenum .. " : " .. line ) ;
    print ("lwarpmk: Incorrect entry in " .. conffile ..".\n" ) ;
    print ("lwarpmk: ===")
--    printconf () ;
    os.exit(1) ;
end -- nil
if ( cvarname == "confversion" ) then
    confversion = cvalue
elseif ( cvarname == "opsystem" ) then
    -- Verify choice of opsystem:
    if ( (cvalue == "Unix") or (cvalue == "Windows") ) then
        opsystem = cvalue
    else
        cvalueerror ( line, linenum , cvalue )
    end
elseif ( cvarname == "sourcename" ) then sourcename = cvalue
elseif ( cvarname == "homehtmlfilename" ) then homehtmlfilename = cvalue
elseif ( cvarname == "htmlfilename" ) then htmlfilename = cvalue
elseif ( cvarname == "imagesdirectory" ) then imagesdirectory = cvalue
elseif ( cvarname == "imagesname" ) then imagesname = cvalue
elseif ( cvarname == "latexmk" ) then latexmk = cvalue
elseif ( cvarname == "printlatexcmd" ) then printlatexcmd = cvalue
elseif ( cvarname == "HTMLlatexcmd" ) then HTMLlatexcmd = cvalue
elseif ( cvarname == "printindexcmd" ) then printindexcmd = cvalue
elseif ( cvarname == "HTMLindexcmd" ) then HTMLindexcmd = cvalue
elseif ( cvarname == "latexmkindexcmd" ) then latexmkindexcmd = cvalue
elseif ( cvarname == "glossarycmd" ) then glossarycmd = cvalue
elseif ( cvarname == "pdftotextenc" ) then pdftotextenc = cvalue
else
    print ("lwarpmk: ===")
    print ("lwarpmk: " .. linenum .. " : " .. line ) ;
    print (
        "lwarpmk: Incorrect variable name \"" .. cvarname .. "\" in " ..
        conffile ..".\n"
    ) ;
    print ("lwarpmk: ===")
--    printconf () ;
os.exit(1) ;
end -- cvarname
end -- do scan lines
io.close(cfile)
end -- file exists
-- Error if sourcename is "lwarp".
-- This could happen if a local copy of lwarp has recently been recompiled.
if sourcename=="lwarp" then
    print ("lwarpmk: ===")
    print ("lwarpmk: lwarp.sty has recently been recompiled in this directory,")
    print ("lwarpmk: and \"lwarpmk.conf\" is no longer set for your own project.")
    print ("lwarpmk:   (Perhaps you are not in your project's directory?)")
    print ("lwarpmk: In your project directory, recompile your project")
    print ("lwarpmk: using pdf/lua/xelatex <projectname>.")
    print ("lwarpmk: After a recompile, \"lwarpmk.conf\" will be set for your project,")
    print ("lwarpmk: and you may again use lwarpmk.")
    print ("lwarpmk: ===")
    os.exit(1)
end -- sourcename of "lwarp"
-- Select some operating-system commands:
if opsystem=="Unix" then  -- For Unix / Linux / Mac OS:
    rmname = "rm"
    mvname = "mv"
    cpname = "cp"
    touchnamepre = "touch"
    touchnamepost = ""
    newtouchname = "touch"
    dirslash = "/"
    opquote= "\'"
    cmdgroupopenname = " ( "
    cmdgroupclosename = " ) "
    seqname = " && "
    bgname = " &"
elseif opsystem=="Windows" then -- For Windows
    rmname = "DEL"
    mvname = "MOVE"
    cpname = "COPY"
    touchnamepre = "COPY /b"
    touchnamepost = "+,,"
    newtouchname = "echo empty >"
    dirslash = "\\"
    opquote= "\""
    cmdgroupopenname = ""
    cmdgroupclosename = ""
    seqname = " & "
    bgname = ""
else
    print ("lwarpmk: ===")
    print ("lwarpmk: Select Unix or Windows for opsystem." )
    print ("lwarpmk: ===")
    os.exit(1)
end --- for Windows
-- Warning if the operating system does not appear to be correct,
-- in case files were transferred to another system.
if ( (package.config:sub(1,1)) ~= dirslash ) then
    print ("lwarpmk: ===")
    print ("lwarpmk: It appears that lwarpmk.conf is for a different operating system." )
    printhowtorecompile ()
    print ("lwarpmk: ===")
    os.exit(1)
end
-- Error if the configuration file's version is not current:
if ( confversion ~= requiredconfversion ) then
    print ("lwarpmk: ===")
    printhowtorecompile ()
    print ("lwarpmk: ===")
    os.exit(1)
end
end -- loadconf

function executecheckerror ( executecommands , errormessage )
--
-- Execute an operating system call,
-- and maybe exit with an error message.
--
local err
err = os.execute ( executecommands )
if ( err ~= 0 ) then
    print ("lwarpmk: ===")
    print ("lwarpmk: " .. errormessage )
    print ("lwarpmk: ===")
    os.exit(1)
end
end -- executecheckerror

function refreshdate ()
os.execute(touchnamepre .. " " .. sourcename .. ".tex " .. touchnamepost)
end

function reruntoget (filesource)
--
-- Scan the LaTeX log file for the phrase "Rerun to get",
-- indicating that the file should be compiled again.
-- Return true if found.
--
local fsource = io.open(filesource)
for line in fsource:lines() do
if ( string.find(line,"Rerun to get") ~= nil ) then
    io.close(fsource)
    return true
end -- if
end -- do
io.close(fsource)
return false
end

function onetime (latexcmd, fsuffix)
--
-- Compile one time, return true if should compile again.
-- fsuffix is "" for print, "_html" for HTML output.
--
print("lwarpmk: Compiling with: " .. latexcmd)
executecheckerror (
    latexcmd ,
    "Compile error."
)
return (reruntoget(sourcename .. fsuffix .. ".log") ) ;
end

function manytimes (latexcmd, fsuffix)
--
-- Compile up to five times.
-- fsuffix is "" for print, "_html" for HTML output
--
if onetime(latexcmd, fsuffix) == true then
if onetime(latexcmd, fsuffix) == true then
if onetime(latexcmd, fsuffix) == true then
if onetime(latexcmd, fsuffix) == true then
if onetime(latexcmd, fsuffix) == true then
end end end end end
end

function verifyfileexists (filename)
--
-- Exit if the given file does not exist.
--
if (lfs.attributes ( filename , "modification" ) == nil ) then
    print ("lwarpmk: ===")
    print ("lwarpmk: " .. filename .. " not found." ) ;
    print ("lwarpmk: ===")
    os.exit (1) ;
end
end

function pdftohtml ()
--
-- Convert <project>_html.pdf into HTML files:
--
-- Convert to text:
print ("lwarpmk: Converting " .. sourcename
    .."_html.pdf to " .. sourcename .. "_html.html")
os.execute("pdftotext  -enc " .. pdftotextenc .. "  -nopgbrk  -layout "
    .. sourcename .. "_html.pdf " .. sourcename .. "_html.html")
-- Split the result into individual HTML files:
splitfile (homehtmlfilename .. ".html" , sourcename .. "_html.html")
end

function removeaux ()
--
-- Remove auxiliary files:
-- All .aux files are removed since there may be many bbl*.aux files.
-- Also removes sourcename_html.pdf, sourcename_html.html,
-- and sourcename_html.sidetoc, plus comment_*.cut.
--
os.execute ( rmname .. " *.aux " ..
    sourcename ..".toc " .. sourcename .. "_html.toc " ..
    sourcename ..".lof " .. sourcename .. "_html.lof " ..
    sourcename ..".lot " .. sourcename .. "_html.lot " ..
    sourcename ..".bbl " .. sourcename .. "_html.bbl " ..
    " *.idx " ..
    " *.ind " ..
    sourcename ..".ps " .. sourcename .."_html.ps " ..
    sourcename ..".log " .. sourcename .. "_html.log " ..
    sourcename ..".gl* " .. sourcename .. "_html.gl* " ..
    sourcename .. "_html.pdf " ..
    sourcename .. "_html.html " ..
    sourcename .. "_html.sidetoc " ..
    " *_html_inc.* " ..
    " comment_*.cut"
    )
end

function checkhtmlpdfexists ()
--
-- Error if the HTML document does not exist.
-- The lateximages are drawn from the HTML PDF version of the document,
-- so "lwarpmk html" must be done before "lwarpmk limages".
--
local htmlpdffile = io.open(sourcename .. "_html.pdf", "r")
if ( htmlpdffile == nil ) then
    print ("")
    print ("lwarpmk: ===")
    print ("lwarpmk: The HTML version of the document does not exist.")
    print ("lwarpmk: Enter \"lwarpmk html\" to compile the HTML version.")
    print ("lwarpmk: ===")
    os.exit(1)
end
io.close (htmlpdffile)
end -- checkhtmlpdfexists

function warnlimages ()
--
-- Warning of a missing <sourcename>-images.txt file:
    print ("lwarpmk: ===")
    print ("lwarpmk: \"" .. sourcename .. "-images.txt\" does not exist.")
    print ("lwarpmk: Your project does not use SVG math or other lateximages,")
    print ("lwarpmk: or the file has been deleted somehow.")
    print ("lwarpmk: Use \"lwarpmk html1\" to recompile your project")
    print ("lwarpmk: and recreate \"" .. sourcename .. "-images.txt\".")
    print ("lwarpmk: If your project does not use SVG math or other lateximages,")
    print ("lwarpmk: then \"" .. sourcename .. "-images.txt\" will never exist, and")
    print ("lwarpmk: \"lwarpmk limages\" will not be necessary.")
    print ("lwarpmk: ===")
end -- warnlimages

function warnlimagesrecompile ()
-- Warning if must recompile before creating limages:
    print ("")
    print ("lwarpmk: ===")
    print ("lwarpmk: Cross-references are not yet correct.")
    print ("lwarpmk: The document must be recompiled before creating the lateximages.")
    print ("lwarpmk: Enter \"lwarpmk html1\" again, then try \"lwarpmk limages\" again.")
    print ("lwarpmk: ===")
end --warnlimagesrecompile

function checklimages ()
--
-- Check <sourcename>.txt to see if need to recompile first.
-- If any entry has a page number of zero, then there were incorrect images.
--
print ("lwarpmk: Checking for a valid " .. sourcename .. "-images.txt file.")
local limagesfile = io.open(sourcename .. "-images.txt", "r")
if ( limagesfile == nil ) then
    warnlimages ()
    os.exit(1)
end
-- Track warning to recompile if find a page 0
local pagezerowarning = false
-- Scan <sourcename>.txt
for line in limagesfile:lines() do
    -- lwimgpage is the page number in the PDF which has the image
    -- lwimghash is true if this filename is a hash
    -- lwimgname is the lateximage filename root to assign for the image
    i,j,lwimgpage,lwimghash,lwimgname = string.find (line,"|(.*)|(.*)|(.*)|")
    -- For each entry:
    if ( (i~=nil) ) then
        -- If the page number is 0, image references are incorrect
        --  and must recompile the soure document:
        if ( lwimgpage == "0" ) then
            pagezerowarning = true
        end
    end -- if i~=nil
end -- do
-- The last line should be |end|end|end|.
-- If not, the compile must have aborted, and the images are incomplete.
if ( lwimgpage ~= "end" ) then
    warnlimagesrecompile()
    os.exit(1) ;
end
if ( pagezerowarning ) then
    warnlimagesrecompile()
    os.exit(1) ;
end -- pagezerowarning
end -- checklimages

function createuniximage ( lwimgfullname )
--
-- Create one lateximage for Unix / Linux / Mac OS.
--
executecheckerror (
    cmdgroupopenname ..
    "pdfseparate -f " .. lwimgpage .. " -l " .. lwimgpage .. " " ..
        sourcename .."_html.pdf " ..
        imagesdirectory .. dirslash .."lateximagetemp-%d" .. ".pdf" ..
        seqname ..
    -- Crop the image:
    "pdfcrop  --hires  " .. imagesdirectory .. dirslash .. "lateximagetemp-" ..
        lwimgpage .. ".pdf " ..
        imagesdirectory .. dirslash .. lwimgname .. ".pdf" ..
        seqname ..
    -- Convert the image to svg:
    "pdftocairo -svg  -noshrink  " .. imagesdirectory .. dirslash .. lwimgname .. ".pdf " ..
        imagesdirectory .. dirslash .. lwimgname ..".svg" ..
        seqname ..
    -- Remove the temporary files:
    rmname .. " " .. imagesdirectory .. dirslash .. lwimgname .. ".pdf" .. seqname ..
    rmname .. " " .. imagesdirectory .. dirslash .. "lateximagetemp-" .. lwimgpage .. ".pdf" ..
    cmdgroupclosename .. " >/dev/null " .. bgname
    ,
    "File error trying to convert " .. lwimgfullname
)
-- Every 32 images, wait for completion at below normal priority,
--  allowing other image tasks to catch up.
numimageprocesses = numimageprocesses + 1
if ( numimageprocesses > 32 ) then
    numimageprocesses = 0
    print ( "lwarpmk: waiting" )
    executecheckerror ( "wait" , "File error trying to wait.")
end
end -- createuniximage

function createwindowsimage ( lwimgfullname )
--
-- Create one lateximage for Windows.
--
-- Every 32 images, wait for completion at below normal priority,
--  allowing other image tasks to catch up.
numimageprocesses = numimageprocesses + 1
if ( numimageprocesses > 32 ) then
    numimageprocesses = 0
    thiswaitcommand = "/WAIT /BELOWNORMAL"
    print ( "lwarpmk: waiting" )
else
    thiswaitcommand = ""
end
-- Execute the image generation command
executecheckerror (
    "start /B " .. thiswaitcommand .. " \"\" lwarp_one_limage " ..
    lwimgpage .. " " ..
    lwimghash .. " " ..
    lwimgname .. " " ..
    sourcename .. " <nul >nul"
    ,
    "File error trying to create image."
)
end -- createwindowsimage

function createonelateximage ( line )
--
-- Given the next line of <sourcename>.txt, convert a single image.
--
-- lwimgpage is the page number in the PDF which has the image
-- lwimghash is true if this filename is a hash
-- lwimgname is the lateximage filename root to assign for the image
i,j,lwimgpage,lwimghash,lwimgname = string.find (line,"|(.*)|(.*)|(.*)|")
-- For each entry:
if ( (i~=nil) ) then
    -- Skip if the page number is 0:
    if ( lwimgpage == "0" ) then
        pagezerowarning = true
    -- Skip if the page number is "end":
    else if ( lwimgpage == "end" ) then
    else
        -- Skip is this image is hashed and already exists:
        local lwimgfullname = imagesdirectory .. dirslash .. lwimgname .. ".svg"
        if (
            (lwimghash ~= "true") or
            (lfs.attributes(lwimgfullname,"mode")==nil) -- file not exists
        )
        then -- not hashed or not exists:
            -- Print the name of the file being generated:
            print ( "lwarpmk: " .. lwimgname )
            -- Touch/create the dest so that only once instance tries to build it:
            executecheckerror (
                newtouchname .. " " .. lwimgfullname ,
                "File error trying to touch " .. lwimgfullname
            )
            -- Separate out the image into its own single-page pdf:
            if opsystem=="Unix" then
                createuniximage (lwimgfullname)
            elseif opsystem=="Windows" then
                createwindowsimage (lwimgfullname)
            end
        end -- not hashed or not exists
    end -- not page "end"
    end -- not page 0
end -- not nil
end -- createonelateximage

function createlateximages ()
--
-- Create lateximages based on <sourcename>-images.txt:
--
-- See if the document must be recompiled first:
checklimages ()
-- See if the HTML version exists:
checkhtmlpdfexists ()
-- Attempt to create the lateximages:
print ("lwarpmk: Creating lateximages.")
local limagesfile = io.open(sourcename .. "-images.txt", "r")
if ( limagesfile == nil ) then
    warnlimages ()
    os.exit(1)
end
-- Create the lateximages directory, ignore error if already exists
err = os.execute("mkdir " .. imagesdirectory)
-- For Windows, create lwarp_one_limage.cmd from lwarp_one_limage.txt:
if opsystem=="Windows" then
    executecheckerror (
        cpname .. " lwarp_one_limage.txt lwarp_one_limage.cmd" ,
        "File error trying to copy lwarp_one_limage.txt to lwarp_one_limage.cmd"
    )
end -- create lwarp_one_limage.cmd
-- Track the number of parallel processes
numimageprocesses = 0
-- Track warning to recompile if find a page 0
pagezerowarning = false
-- Scan <sourcename>.txt
for line in limagesfile:lines() do
    createonelateximage ( line )
end -- do
io.close(limagesfile)
print ( "lwarpmk limages: ===")
print ( "lwarpmk limages: Wait a moment for the images to complete" )
print ( "lwarpmk limages:   before reloading the page." )
print ( "lwarpmk limages: ===")
print ( "lwarpmk limages: Done." )
if ( pagezerowarning == true ) then
    print ( "lwarpmk limages: WARNING: Images will be incorrect." )
    print ( "lwarpmk limages:   Enter \"lwarpmk cleanlimages\", then" )
    print ( "lwarpmk limages:   recompile the document one more time, then" )
    print ( "lwarpmk limages:   repeat \"lwarpmk images\" again." )
end -- pagezerowarning
end -- function

function convertepstopdf ()
--
-- Converts EPS files to PDF files.
-- The filenames are arg[argindex] and up.
-- arg[1] is the command "epstopdf".
--
ignoreconf ()
for i = argindex , #arg do
    if (lfs.attributes(arg[i],"mode")==nil) then
        print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
    else
        print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
        thispath, thisfilename, thisextension = splitfilename(arg[i])
        if ( thispath == nil ) then
            os.execute ( "epstopdf " .. arg[i] )
        else
            os.execute (
                "epstopdf " ..
                thispath .. thisfilename .. "." .. thisextension .. " " ..
                thispath .. thisfilename .. ".pdf"
            )
        end
    end -- if
end -- do
end --function

function convertpdftosvg ()
--
-- Converts PDF files to SVG files.
-- The filenames are arg[argindex] and up.
-- arg[1] is the command "pdftosvg".
--
ignoreconf ()
for i = argindex , #arg do
    if (lfs.attributes(arg[i],"mode")==nil) then
        print ("lwarpmk: File \"" .. arg[i] .. "\" does not exist.")
    else
        print ("lwarpmk: Converting \"" .. arg[i] .. "\"")
        thispath, thisfilename, thisextension = splitfilename(arg[i])
        if ( thispath == nil ) then
            os.execute ( "pdftocairo -svg " .. arg[i] )
        else
            os.execute (
                "pdftocairo -svg " ..
                thispath .. thisfilename .. "." .. thisextension .. " " ..
                thispath .. thisfilename .. ".svg"
            )
        end
    end -- if
end -- do
end --function

-- Force an update and conclude processing:
function updateanddone ()
print ("lwarpmk: Forcing an update of " .. sourcename ..".tex.")
refreshdate ()
print ("lwarpmk: " .. sourcename ..".tex is ready to be recompiled.")
print ("lwarpmk: Done.")
end -- function

-- Start of the main code: --

-- lwarpmk --version :

if (arg[1] == "--version") then
print ( "lwarpmk: " .. printversion )

else -- not --version

-- print intro:

print ("lwarpmk: " .. printversion .. "  Automated make for the LaTeX Lwarp package.")

-- lwarpmk print:

if arg[1] == "print" then
loadconf ()
if ( latexmk == "true" ) then
    print ("lwarpmk: Compiling with: " .. printlatexcmd)
    executecheckerror (
        printlatexcmd ,
        "Compile error."
    )
    print ("lwarpmk: Done.")
else -- not latexmk
    verifyfileexists (sourcename .. ".tex") ;
    -- See if up to date:
    if (
        ( lfs.attributes ( sourcename .. ".pdf" , "modification" ) == nil ) or
        (
            lfs.attributes ( sourcename .. ".tex" , "modification" ) >
            lfs.attributes ( sourcename .. ".pdf" , "modification" )
        )
    ) then
        -- Recompile if not yet up to date:
        manytimes(printlatexcmd, "")
        print ("lwarpmk: Done.") ;
    else
        print ("lwarpmk: " .. sourcename .. ".pdf is up to date.") ;
    end
end -- not latexmk

-- lwarpmk print1:

elseif arg[1] == "print1" then
    loadconf ()
    verifyfileexists (sourcename .. ".tex") ;
    onetime(printlatexcmd, "")
    print ("lwarpmk: Done.") ;

-- lwarpmk printindex:
-- Compile the index then touch the source
-- to trigger a recompile of the document:

elseif arg[1] == "printindex" then
loadconf ()
os.execute ( printindexcmd )
print ("lwarpmk: -------")
updateanddone ()

-- lwarpmk printglossary:
-- Compile the glossary then touch the source
-- to trigger a recompile of the document:

elseif arg[1] == "printglossary" then
loadconf ()
print ("lwarpmk: Processing the glossary.")

os.execute(glossarycmd .. " " .. sourcename)
updateanddone ()

-- lwarpmk html:

elseif arg[1] == "html" then
loadconf ()
if ( latexmk == "true" ) then
    print ("lwarpmk: Compiling with: " .. HTMLlatexcmd)
    executecheckerror (
        HTMLlatexcmd ,
        "Compile error."
    )
    pdftohtml ()
    print ("lwarpmk: Done.")
else -- not latexmk
    verifyfileexists ( sourcename .. ".tex" ) ;
    -- See if exists and is up to date:
    if (
        ( lfs.attributes ( homehtmlfilename .. ".html" , "modification" ) == nil ) or
        (
            lfs.attributes ( sourcename .. ".tex" , "modification" ) >
            lfs.attributes ( homehtmlfilename .. ".html" , "modification" )
        )
    ) then
        -- Recompile if not yet up to date:
        manytimes(HTMLlatexcmd, "_html")
        pdftohtml ()
        print ("lwarpmk: Done.")
    else
        print ("lwarpmk: " .. homehtmlfilename .. ".html is up to date.")
    end
end -- not latexmk

-- lwarpmk html1:

elseif arg[1] == "html1" then
    loadconf ()
    verifyfileexists ( sourcename .. ".tex" ) ;
    onetime(HTMLlatexcmd, "_html")
    pdftohtml ()
    print ("lwarpmk: Done.")

-- lwarpmk pdftohtml:
elseif arg[1] == "pdftohtml" then
    loadconf ()
    pdftohtml ()

-- lwarpmk htmlindex:
-- Compile the index then touch the source
-- to trigger a recompile of the document:

elseif arg[1] == "htmlindex" then
loadconf ()
os.execute ( HTMLindexcmd )
print ("lwarpmk: -------")
updateanddone ()

-- lwarpmk htmlglossary:
-- Compile the glossary then touch the source
-- to trigger a recompile of the document.
-- The <sourcename>.xdy file is created by the glossaries package.

elseif arg[1] == "htmlglossary" then
loadconf ()
print ("lwarpmk: Processing the glossary.")
os.execute(glossarycmd .. " " .. sourcename .. "_html")
updateanddone ()

-- lwarpmk limages:
-- Scan the <sourcename>.txt file to create lateximages.

elseif arg[1] == "limages" then
loadconf ()
print ("lwarpmk: Processing images.")
createlateximages ()
print ("lwarpmk: Done.")

-- lwarpmk again:
-- Touch the source to trigger a recompile.

elseif arg[1] == "again" then
loadconf ()
updateanddone ()

-- lwarpmk clean:
-- Remove project.aux, .toc, .lof, .lot, .log, *.idx, *.ind, *_html_inc.*, .gl*

elseif arg[1] == "clean" then
loadconf ()
removeaux ()
print ("lwarpmk: Done.")

-- lwarpmk cleanall
-- Remove project.aux, .toc, .lof, .lot, .log, *.idx, *.ind, *_html_inc.*, .gl*
--    and also project.pdf, project.dvi, *.html

elseif arg[1] == "cleanall" then
loadconf ()
removeaux ()
os.execute ( rmname .. " " ..
    sourcename .. ".pdf " .. sourcename .. "_html.pdf " ..
    sourcename .. ".dvi " .. sourcename .. "_html.dvi " ..
    "*.html"
    )
print ("lwarpmk: Done.")

-- lwarpmk cleanlimages
-- Remove images from the imagesdirectory.

elseif arg[1] == "cleanlimages" then
loadconf ()
os.execute ( rmname .. " " .. imagesdirectory .. dirslash .. "*" )
print ("lwarpmk: Done.")

-- lwarpmk epstopdf <list of file names>
-- Convert EPS files to PDF using epstopdf
elseif arg[1] == "epstopdf" then
convertepstopdf ()
print ("lwarpmk: Done.")

-- lwarpmk pdftosvg <list of file names>
-- Convert PDF files to SVG using pdftocairo
elseif arg[1] == "pdftosvg" then
convertpdftosvg ()
print ("lwarpmk: Done.")

-- lwarpmk with no argument :

elseif (arg[1] == nil) then
printhelp ()

-- lwarpmk -v:

elseif (arg[1] == "-v" ) then
-- The version number has already been printed
-- by the lwarpmk intro.

-- lwarpmk -h or lwarpmk --help :

elseif (arg[1] == "-h" ) or (arg[1] == "--help") then
printusage ()

-- Unknown command:

else
printhelp ()
print ("\nlwarpmk: ****** Unknown command \""..arg[1].."\". ******\n")
end

end -- not --version
\end{filecontents*}
\end{LWRcreatelwarpmk}


\begin{warpHTML}


\newcommand*{\LWR@depthnone}{-5}
\newcommand*{\LWR@depthfinished}{-4}
\newcommand*{\LWR@depthbook}{-2}
\newcommand*{\LWR@depthpart}{-1}
\newcommand*{\LWR@depthchapter}{0}
\newcommand*{\LWR@depthsection}{1}
\newcommand*{\LWR@depthsubsection}{2}
\newcommand*{\LWR@depthsubsubsection}{3}
\newcommand*{\LWR@depthparagraph}{4}
\newcommand*{\LWR@depthsubparagraph}{5}
\newcommand*{\LWR@depthlist}{6}
\newcommand*{\LWR@depthlistitem}{7}
\let\LWR@depthdescitem\LWR@depthlistitem


\newcommand*{\LWR@closeone}{}% top of the stack
\newcommand*{\LWR@closetwo}{}
\newcommand*{\LWR@closethree}{}
\newcommand*{\LWR@closefour}{}
\newcommand*{\LWR@closefive}{}
\newcommand*{\LWR@closesix}{}
\newcommand*{\LWR@closeseven}{}
\newcommand*{\LWR@closeeight}{}
\newcommand*{\LWR@closenine}{}
\newcommand*{\LWR@closeten}{}
\newcommand*{\LWR@closeeleven}{}
\newcommand*{\LWR@closetwelve}{}
\newcommand*{\LWR@closethirteen}{}
\newcommand*{\LWR@closefourteen}{}
\newcommand*{\LWR@closefifteen}{}
\newcommand*{\LWR@closesixteen}{}
\newcommand*{\LWR@closeseventeen}{}
\newcommand*{\LWR@closeeighteen}{}
\newcommand*{\LWR@closenineteen}{}


\newcommand*{\LWR@closedepthone}{\LWR@depthnone}% top of the stack
\newcommand*{\LWR@closedepthtwo}{\LWR@depthnone}
\newcommand*{\LWR@closedepththree}{\LWR@depthnone}
\newcommand*{\LWR@closedepthfour}{\LWR@depthnone}
\newcommand*{\LWR@closedepthfive}{\LWR@depthnone}
\newcommand*{\LWR@closedepthsix}{\LWR@depthnone}
\newcommand*{\LWR@closedepthseven}{\LWR@depthnone}
\newcommand*{\LWR@closedeptheight}{\LWR@depthnone}
\newcommand*{\LWR@closedepthnine}{\LWR@depthnone}
\newcommand*{\LWR@closedepthten}{\LWR@depthnone}
\newcommand*{\LWR@closedeptheleven}{\LWR@depthnone}
\newcommand*{\LWR@closedepthtwelve}{\LWR@depthnone}
\newcommand*{\LWR@closedepththirteen}{\LWR@depthnone}
\newcommand*{\LWR@closedepthfourteen}{\LWR@depthnone}
\newcommand*{\LWR@closedepthfifteen}{\LWR@depthnone}
\newcommand*{\LWR@closedepthsixteen}{\LWR@depthnone}
\newcommand*{\LWR@closedepthseventeen}{\LWR@depthnone}
\newcommand*{\LWR@closedeptheighteen}{\LWR@depthnone}
\newcommand*{\LWR@closedepthnineteen}{\LWR@depthnone}



\NewDocumentCommand{\LWR@pushclose}{m}
{%
\global\let\LWR@closenineteen\LWR@closeeighteen%
\global\let\LWR@closeeighteen\LWR@closeseventeen%
\global\let\LWR@closeseventeen\LWR@closesixteen%
\global\let\LWR@closesixteen\LWR@closefifteen%
\global\let\LWR@closefifteen\LWR@closefourteen%
\global\let\LWR@closefourteen\LWR@closethirteen%
\global\let\LWR@closethirteen\LWR@closetwelve%
\global\let\LWR@closetwelve\LWR@closeeleven%
\global\let\LWR@closeeleven\LWR@closeten%
\global\let\LWR@closeten\LWR@closenine%
\global\let\LWR@closenine\LWR@closeeight%
\global\let\LWR@closeeight\LWR@closeseven%
\global\let\LWR@closeseven\LWR@closesix%
\global\let\LWR@closesix\LWR@closefive%
\global\let\LWR@closefive\LWR@closefour%
\global\let\LWR@closefour\LWR@closethree%
\global\let\LWR@closethree\LWR@closetwo%
\global\let\LWR@closetwo\LWR@closeone%
\global\csletcs{LWR@closeone}{LWR@printclose#1}%
\global\let\LWR@closedepthnineteen\LWR@closedeptheighteen%
\global\let\LWR@closedeptheighteen\LWR@closedepthseventeen%
\global\let\LWR@closedepthseventeen\LWR@closedepthsixteen%
\global\let\LWR@closedepthsixteen\LWR@closedepthfifteen%
\global\let\LWR@closedepthfifteen\LWR@closedepthfourteen%
\global\let\LWR@closedepthfourteen\LWR@closedepththirteen%
\global\let\LWR@closedepththirteen\LWR@closedepthtwelve%
\global\let\LWR@closedepthtwelve\LWR@closedeptheleven%
\global\let\LWR@closedeptheleven\LWR@closedepthten%
\global\let\LWR@closedepthten\LWR@closedepthnine%
\global\let\LWR@closedepthnine\LWR@closedeptheight%
\global\let\LWR@closedeptheight\LWR@closedepthseven%
\global\let\LWR@closedepthseven\LWR@closedepthsix%
\global\let\LWR@closedepthsix\LWR@closedepthfive%
\global\let\LWR@closedepthfive\LWR@closedepthfour%
\global\let\LWR@closedepthfour\LWR@closedepththree%
\global\let\LWR@closedepththree\LWR@closedepthtwo%
\global\let\LWR@closedepthtwo\LWR@closedepthone%
\global\csletcs{LWR@closedepthone}{LWR@depth#1}%
\ifdefstring{\LWR@closedepthnineteen}{\LWR@depthnone}%
    {}%
    {%
        \PackageError{lwarp}%
            {The document is nested too deeply for Lwarp}%
            {PLEASE inform the Lwarp maintainer!}%
    }%
}


\newcommand*{\LWR@popclose}
{%
\global\let\LWR@closeone\LWR@closetwo%
\global\let\LWR@closetwo\LWR@closethree%
\global\let\LWR@closethree\LWR@closefour%
\global\let\LWR@closefour\LWR@closefive%
\global\let\LWR@closefive\LWR@closesix%
\global\let\LWR@closesix\LWR@closeseven%
\global\let\LWR@closeseven\LWR@closeeight%
\global\let\LWR@closeeight\LWR@closenine%
\global\let\LWR@closenine\LWR@closeten%
\global\let\LWR@closeten\LWR@closeeleven%
\global\let\LWR@closeeleven\LWR@closetwelve%
\global\let\LWR@closetwelve\LWR@closethirteen%
\global\let\LWR@closethirteen\LWR@closefourteen%
\global\let\LWR@closefourteen\LWR@closefifteen%
\global\let\LWR@closefifteen\LWR@closesixteen%
\global\let\LWR@closesixteen\LWR@closeseventeen%
\global\let\LWR@closeseventeen\LWR@closeeighteen%
\global\let\LWR@closeeighteen\LWR@closenineteen%
\global\let\LWR@closedepthone\LWR@closedepthtwo%
\global\let\LWR@closedepthtwo\LWR@closedepththree%
\global\let\LWR@closedepththree\LWR@closedepthfour%
\global\let\LWR@closedepthfour\LWR@closedepthfive%
\global\let\LWR@closedepthfive\LWR@closedepthsix%
\global\let\LWR@closedepthsix\LWR@closedepthseven%
\global\let\LWR@closedepthseven\LWR@closedeptheight%
\global\let\LWR@closedeptheight\LWR@closedepthnine%
\global\let\LWR@closedepthnine\LWR@closedepthten%
\global\let\LWR@closedepthten\LWR@closedeptheleven%
\global\let\LWR@closedeptheleven\LWR@closedepthtwelve%
\global\let\LWR@closedepthtwelve\LWR@closedepththirteen%
\global\let\LWR@closedepththirteen\LWR@closedepthfourteen%
\global\let\LWR@closedepthfourteen\LWR@closedepthfifteen%
\global\let\LWR@closedepthfifteen\LWR@closedepthsixteen%
\global\let\LWR@closedepthsixteen\LWR@closedepthseventeen%
\global\let\LWR@closedepthseventeen\LWR@closedeptheighteen%
\global\let\LWR@closedeptheighteen\LWR@closedepthnineteen%
}

\end{warpHTML}

\begin{warpHTML}
\NewDocumentCommand{\LWR@setexparray}{m m m}{%
    \let\LWR@temp@par\par%
    \let\par\relax%
    \edef\LWR@thisexparrayname{#1#2}%
    \ifstrempty{#3}%
        {\csdef{\LWR@thisexparrayname}{}}%
        {\csedef{\LWR@thisexparrayname}{#3}}%
    \let\par\LWR@temp@par%
}
\newcommand*{\LWR@getexparray}[2]{%
    \@nameuse{#1#2}%
}

\end{warpHTML}

\begin{warpall}
\newcommand{\StartDefiningTabulars}{%
    \LWR@traceinfo{StartDefiningTabulars}%
    \warpHTMLonly{\catcode`\&=\active}%
}
\newcommand{\StopDefiningTabulars}{%
    \LWR@traceinfo{StopDefiningTabulars}%
    \warpHTMLonly{\catcode`\&=4}%
}

\newbool{LWR@mathmacro}
\boolfalse{LWR@mathmacro}

\newcommand{\StartDefiningMath}{%
    \LWR@traceinfo{StartDefiningMath}%
    \warpHTMLonly{\catcode`\$=\active}%
}
\newcommand{\StopDefiningMath}{%
    \LWR@traceinfo{StopDefiningMath}%
    \warpHTMLonly{\catcode`\$=3}% math shift
}

\end{warpall}

\begin{warpall}
\newbool{LWR@dynamicmath}
\boolfalse{LWR@dynamicmath}
\newcommand{\inlinemathother}{%
\LWR@traceinfo{inlinemathother}%
\booltrue{LWR@dynamicmath}%
}
\newcommand{\inlinemathnormal}{%
\LWR@traceinfo{inlinemathnormal}%
\boolfalse{LWR@dynamicmath}%
}
\end{warpall}


\begin{warpHTML}

\let\LWR@origampersand\&
\newcommand*{\HTMLentity}[1]{%
\begingroup%
\LWR@hook@processingtags%
\LWR@origampersand#1;%
\endgroup%
}
\newcommand*{\HTMLunicode}[1]{\HTMLentity{\LWR@origpound{}x#1}}

\renewrobustcmd*{\&}{\HTMLentity{amp}}

\let\LWR@origtextless\textless
\renewrobustcmd*{\textless}{\HTMLentity{lt}}

\let\LWR@origtextgreater\textgreater
\renewrobustcmd*{\textgreater}{\HTMLentity{gt}}

\end{warpHTML}



\begin{warpall}

\providecommand*{\BaseJobname}{\jobname}

\providecommand*{\HTMLFilename}{}
\providecommand*{\HomeHTMLFilename}{\BaseJobname}

\newcommand*{\SetHTMLFileNumber}[1]{%
    \setcounter{LWR@htmlfilenumber}{#1}%
}

\newbool{FileSectionNames}
\booltrue{FileSectionNames}

\end{warpall}

\begin{warpHTML}

\newcounter{LWR@HTMLpagenum}
\setcounter{LWR@HTMLpagenum}{0}

\newcounter{LWR@htmlseqfilenumber}
\setcounter{LWR@htmlseqfilenumber}{0}

\newbool{LWR@setseqfilelabel}
\setbool{LWR@setseqfilelabel}{false}

\newcounter{LWR@htmlfilenumber}
\setcounter{LWR@htmlfilenumber}{0}

\newcommand*{\LWR@htmlsectionfilename}[1]{%
\LWR@traceinfo{LWR@htmlsectionfilename A !\detokenize{#1}!}%
\begingroup%
\LWR@disablepinyin%
\LWR@sanitize{#1}%
\LWR@traceinfo{about to compare with ??}%
\ifdefstring{\LWR@sanitized}{??}
    {\LWR@traceinfo{found ??}}%
    {\LWR@traceinfo{not found ??}}%
\LWR@traceinfo{about to compare with zero or empty}%
\ifboolexpr{
    test {\ifdefstring{\LWR@sanitized}{0}} or
    test {\ifdefstring{\LWR@sanitized}{}} or
    test {\ifdefstring{\LWR@sanitized}{??}}
}
{%
    \LWR@traceinfo{LWR@htmlsectionfilename B \HomeHTMLFilename.html}%
    \HomeHTMLFilename.html%
}%
{%
    \LWR@traceinfo{LWR@htmlsectionfilename C \LWR@sanitized}%
    \ifboolexpr{
            test{\ifdefvoid{\HTMLFilename}} and
            (
                test{\ifdefstring{\LWR@sanitized}{Index}} or
                test{\ifdefstring{\LWR@sanitized}{index}}
            )
    }%
    {%
        \LWR@traceinfo{Adding a zero to the index filename.}%
        \LWR@sanitized-0.html%
    }%
    {%
        \HTMLFilename\LWR@isolate{\LWR@sanitized}.html%
    }%
}%
\LWR@traceinfo{LWR@htmlsectionfilename Z}%
\endgroup%
}

\newcommand*{\LWR@htmlrefsectionfilename}[1]{%
    \LWR@traceinfo{LWR@htmlrefsectionfilename: !\detokenize{#1}!}%
    \begingroup%
    \LWR@nullfonts%
    \LWR@htmlsectionfilename{\LWR@htmlfileref{#1}}%
    \endgroup%
    \LWR@traceinfo{LWR@htmlrefsectionfilename: done}%
}

\end{warpHTML}


\begin{warpall}

\newcommand{\linkhomename}{Home}

\end{warpall}

\begin{warpHTML}

\newcommand*{\LinkHome}{%
    \LWR@subhyperrefclass{\HomeHTMLFilename.html}{\linkhomename}{linkhome}%
}

\end{warpHTML}

\begin{warpprint}

\AtBeginDocument{
\@ifundefined{hyperref}{
    \newcommand*{\LinkHome}{%
        \linkhomename\ --- page \pageref{\BaseJobname-page-LWRfirstpage}%
    }
}{
    \newcommand*{\LinkHome}{%
        \hyperref[\BaseJobname-page-LWRfirstpage]{\linkhomename}%
    }
}
}

\AfterEndPreamble{\label{\BaseJobname-page-LWRfirstpage}}

\end{warpprint}

\begin{warpHTML}

\newcommand*{\LWR@topnavigation}{%
    \LWR@htmlelementclassline{nav}{topnavigation}{\LinkHome}
}

\newcommand*{\LWR@botnavigation}{%
    \LWR@htmlelementclassline{nav}{botnavigation}{\LinkHome}
}

\end{warpHTML}


\begin{warpall}

\newcommand*{\linkpreviousname}{Previous}

\newcommand*{\linknextname}{Next}

\end{warpall}

\begin{warpprint}

\newcommand*{\LinkPrevious}{}

\newcommand*{\LinkNext}{}

\end{warpprint}

\begin{warpHTML}

\newcommand*{\LinkPrevious}{%
    \ifnumless{\value{LWR@htmlseqfilenumber}}{1}{}{%
        \setcounter{LWR@tempcountone}{\value{LWR@htmlseqfilenumber}-1}%
        \LWR@subhyperrefclass{%
            \LWR@htmlrefsectionfilename{%
                \BaseJobname-autofile-\arabic{LWR@tempcountone}%
            }%
        }{\linkpreviousname}{linkhome}%
    }%
}

\newcommand*{\LinkNext}{%
    \ifcsdef{r@\BaseJobname-autofile-last@lwarp}{%
        \edef\LWR@tempone{%
            \LWR@htmlfileref{\BaseJobname-autofile-\arabic{LWR@htmlseqfilenumber}}%
        }%
        \edef\LWR@temptwo{%
            \LWR@htmlfileref{\BaseJobname-autofile-last}%
        }%
        \ifdefequal{\LWR@tempone}{\LWR@temptwo}{}{%
            \setcounter{LWR@tempcountone}{\value{LWR@htmlseqfilenumber}+1}%
            \LWR@subhyperrefclass{%
                \LWR@htmlrefsectionfilename{%
                    \BaseJobname-autofile-\arabic{LWR@tempcountone}%
                }%
            }{\linknextname}{linkhome}%
        }%
    }{}%
}

\end{warpHTML}



\begin{warpHTML}

\newcommand*{\LWR@subprintstack}{
\LWR@closedepthone\ \LWR@closedepthtwo\ \LWR@closedepththree\
\LWR@closedepthfour\ \LWR@closedepthfive\ \LWR@closedepthsix\
\LWR@closedepthseven\ \LWR@closedeptheight\ \LWR@closedepthnine\
\LWR@closedepthten\ \LWR@closedeptheleven\ \LWR@closedepthtwelve\
\LWR@closedepththirteen\ \LWR@closedepthfourteen\ \LWR@closedepthfifteen\
\LWR@closedepthsixteen\ \LWR@closedepthseventeen\ \LWR@closedeptheighteen\
\LWR@closedepthnineteen\
}

\newcommand*{\LWRPrintStack}{
\LWR@startpars
\LWR@subprintstack
}

\end{warpHTML}

\begin{warpprint}

\newcommand*{\LWRPrintStack}{}

\end{warpprint}


\begin{warpHTML}

\newcommand*{\LWR@closeoneprevious}{%

\LWR@closeone

\LWR@popclose
}

\newcommand*{\LWR@closeprevious}[1]{
\LWR@traceinfo{%
    LWR@closeprevious to depth \csuse{LWR@depth#1}, %
    depths are \LWR@subprintstack%
}%
\LWR@stoppars%
\whileboolexpr{test{\ifnumcomp{\LWR@closedepthone}{>}{\csuse{LWR@depth#1}}}}%
{%
    \LWR@traceinfo{LWR@closeprevious: closing out depth \LWR@closedepthone}%
    \LWR@closeoneprevious%
}%
\ifboolexpr{test{\ifnumcomp{\LWR@closedepthone}{=}{\csuse{LWR@depth#1}}}}%
{%
    \LWR@traceinfo{LWR@closeprevious: closing out depth \LWR@closedepthone}%
    \LWR@closeoneprevious%
}{}%
\LWR@traceinfo{LWR@closeprevious: done, depths are \LWR@subprintstack}%
}

\end{warpHTML}



\begin{warpHTML}

\newcommand{\LWR@forcenewpage}{%
\LWR@traceinfo{LWR@forcenewpage}%
\ifinner\else%
    \LWR@traceinfo{LWR@forcenewpage A}%
    \LWR@stoppars%
    \LWR@traceinfo{LWR@forcenewpage B}%
    \LWR@maybe@orignewpage%
    \LWR@traceinfo{LWR@forcenewpage C}%
    \LWR@startpars%
\fi%
\LWR@traceinfo{LWR@forcenewpage done}%
}
\renewcommand*{\pagestyle}[1]{}
\renewcommand*{\thispagestyle}[1]{}
\renewcommand*{\markboth}[2]{}
\renewcommand*{\markright}[1]{}
\renewcommand*{\raggedbottom}{}
\renewcommand*{\flushbottom}{}
\renewcommand*{\sloppy}{}
\renewcommand*{\fussy}{}
\RenewDocumentCommand{\pagenumbering}{s m}{}
\end{warpHTML}


\begin{warpHTML}

\newcommand*{\LWR@tagtitle}{h1}
\newcommand*{\LWR@tagtitleend}{/h1}
\newcommand*{\LWR@tagbook}{div class=\textquotedbl{}book\textquotedbl}
\newcommand*{\LWR@tagbookend}{/div}
\newcommand*{\LWR@tagpart}{h2}
\newcommand*{\LWR@tagpartend}{/h2}
\newcommand*{\LWR@tagchapter}{h3}
\newcommand*{\LWR@tagchapterend}{/h3}
\newcommand*{\LWR@tagsection}{h4}
\newcommand*{\LWR@tagsectionend}{/h4}
\newcommand*{\LWR@tagsubsection}{h5}
\newcommand*{\LWR@tagsubsectionend}{/h5}
\newcommand*{\LWR@tagsubsubsection}{h6}
\newcommand*{\LWR@tagsubsubsectionend}{/h6}
\newcommand*{\LWR@tagparagraph}{span class=\textquotedbl{}paragraph\textquotedbl}
\newcommand*{\LWR@tagparagraphend}{/span}
\newcommand*{\LWR@tagsubparagraph}{span class=\textquotedbl{}subparagraph\textquotedbl}
\newcommand*{\LWR@tagsubparagraphend}{/span}

\newcommand*{\LWR@tagregularparagraph}{p}

\newcommand*{\LWR@hook@processingtags}{}


\providecommand*{\LWR@FBcancel}{}

\AtBeginDocument{%
\@ifundefined{NoAutoSpacing}%
    {}%
    {%
        \LetLtxMacro\LWR@FBcancel\NoAutoSpacing%
        \appto{\LWR@hook@processingtags}{\LWR@FBcancel}%
    }%

\@ifundefined{frenchbsetup}%
{}%
{%
    \frenchbsetup{FrenchFootnotes=false}%
    \renewrobustcmd*{\FBcolonspace}{%
        \begingroup%
        \LWR@hook@processingtags%
        \LWR@origampersand{}nbsp;%
        \endgroup%
    }%
    \renewrobustcmd*{\FBthinspace}{%
        \begingroup%
        \LWR@hook@processingtags%
        \LWR@origampersand\LWR@origpound{}x202f;% \,
        \endgroup%
    }%
    \renewrobustcmd*{\FBguillspace}{%
        \begingroup%
        \LWR@hook@processingtags%
        \LWR@origampersand{}nbsp;% ~,  for \og xyz \fg{}
        \endgroup%
    }%
    \DeclareDocumentCommand{\FBmedkern}{}{%
        \begingroup%
        \LWR@hook@processingtags%
        \LWR@origampersand\LWR@origpound{}x202f;% \,
        \endgroup%
    }%
    \DeclareDocumentCommand{\FBthickkern}{}{%
        \begingroup%
        \LWR@hook@processingtags%
        \LWR@origampersand{}nbsp;% ~
        \endgroup%
    }%
    \renewrobustcmd*{~}{\HTMLentity{nbsp}}% was overwritten by babel-french
    \ifFBunicode%
    \else%
        \DeclareTextSymbol{\FBtextellipsis}{LY1}{133}%
        \DeclareTextCommandDefault{\FBtextellipsis}{\textellipsis\xspace}%
    \fi%
}%
}

\newcommand*{\LWR@indentHTML}{%
    \LWR@orignewline\LWR@origrule{2em}{0pt}%
}

\newcommand*{\LWR@indentHTMLtwo}{%
    \LWR@orignewline\LWR@origrule{4em}{0pt}%
}


\newcommand*{\LWR@htmltagc}[1]{%
\LWR@traceinfo{LWR@htmltagc !\detokenize{#1}!}%
\begingroup%
\LWR@hook@processingtags%
\ifmmode\else\protect\LWR@print@normalfont\protect\LWR@origttfamily\fi%
\protect\LWR@origtextless%
\LWR@isolate{#1}%
\protect\LWR@origtextgreater%
\endgroup%
}

\newcommand*{\LWR@spanwarnformat}[1]{%
    \ifnumcomp{\value{LWR@spandepth}}{>}{0}{%
        \PackageWarning{lwarp}{%
            A #1 is being used inside a span.\MessageBreak
            Formatting may be lost,%
        }%
    }{}%
}

\newcommand*{\LWR@spanwarninvalid}[1]{%
    \ifnumcomp{\value{LWR@spandepth}}{>}{0}{%
        \PackageWarning{lwarp}{%
            A #1 is being used inside a span.\MessageBreak
            This generates invalid HTML,%
        }%
    }{}%
}

\newcommand*{\LWR@nestspanitem}{%
\if@newlist\else{\LWR@htmltagc{br /}}\fi%
\LWR@origitem%
}

\newenvironment*{LWR@nestspan}
{%
\LWR@traceinfo{LWR@nestspan starting}%
\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
{%
    \LWR@traceinfo{LWR@nestspan: inside a lateximage}%
}%
{% not in a lateximage
    \LWR@traceinfo{LWR@nestspan: NOT inside a lateximage}%
    \addtocounter{LWR@spandepth}{1}%
    \RenewDocumentEnvironment{minipage}{O{t} o O{t} m}%
        {\LWR@spanwarnformat{minipage or \protect\parbox}}%
        {}%
    \RenewDocumentEnvironment{BlockClass}{o m}%
        {\LWR@spanwarnformat{multi-paragraph object}}%
        {}%
    \RenewDocumentEnvironment{LWR@BlockClassWP}{m m D(){} m}%
        {\LWR@spanwarnformat{multi-paragraph object}}%
        {}%
    \renewcommand{\BlockClassSingle}[2]{%
        {\LWR@spanwarnformat{multi-paragraph object}}%
        ##2%
    }%
    \renewcommand{\LWR@forcenewpage}{}%
    \renewcommand{\LWR@liststart}{%
        \let\item\LWR@nestspanitem%
    }%
    \renewcommand{\LWR@listend}{\LWR@htmltagc{br /}\LWR@htmltagc{br /}}%
    \renewenvironment{quote}{\LWR@htmltagc{br /}}{\LWR@htmltagc{br /}}%
    \renewenvironment{quotation}{\LWR@htmltagc{br /}}{\LWR@htmltagc{br /}}%
}% not in a lateximage
\LWR@traceinfo{LWR@nestspan starting: done}%
}% starting env
{% ending env
\LWR@traceinfo{LWR@nestspan ending}%
\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
{}%
{\addtocounter{LWR@spandepth}{-1}}%
\LWR@traceinfo{LWR@nestspan ending: done}%
}

\AfterEndEnvironment{LWR@nestspan}{\global\let\par\LWR@closeparagraph}

\NewDocumentCommand{\LWR@htmlspan}{m +m}{%
\LWR@ensuredoingapar%
\LWR@htmltagc{#1}%
\begin{LWR@nestspan}%
#2%
\LWR@htmltagc{/#1}%
\end{LWR@nestspan}%
}

\NewDocumentCommand{\LWR@htmlspanclass}{o D(){} m +m}{%
    \LWR@traceinfo{LWR@htmlspanclass |#1|#2|#3|}%
    \LWR@ensuredoingapar%
    \ifblank{#2}%
        {\LWR@subhtmlelementclass{span}[#1]{#3}}%
        {\LWR@subhtmlelementclass{span}[#1](#2){#3}}%
    \begin{LWR@nestspan}%
    #4%
    \LWR@htmltagc{/span}%
    \LWR@traceinfo{LWR@htmlspanclass done}%
    \end{LWR@nestspan}%
}


\newcommand*{\LWR@htmltag}[1]{%
\LWR@htmltagc{#1}%
}


\newcommand*{\LWR@htmlopencomment}{%
{%
\begingroup%
\LWR@hook@processingtags%
\ifmmode\else\protect\LWR@print@normalfont\protect\LWR@origttfamily\fi%
\LWR@print@mbox{\LWR@origtextless{}!-\/-}%
\endgroup%
}%
}

\newcommand*{\LWR@htmlclosecomment}{%
{%
\begingroup%
\LWR@hook@processingtags%
\ifmmode\else\protect\LWR@print@normalfont\protect\LWR@origttfamily\fi%
\LWR@print@mbox{-\/-\LWR@origtextgreater}%
\endgroup%
}%
}

\newcommand{\LWR@htmlcomment}[1]{%
\ifmmode%
\else%
    \LWR@htmlopencomment{}%
    {%
        \LWR@print@normalfont%
        \LWR@origttfamily% break ligatures
        #1%
    }%
    \LWR@htmlclosecomment{}%
\fi%
}
\newcommand{\LWR@htmlblockcomment}[1]
{\LWR@stoppars\LWR@htmlcomment{#1}\LWR@startpars}

\newcommand*{\LWR@htmlblocktag}[1]{%
\LWR@stoppars%
\LWR@htmltag{#1}%
\LWR@startpars%
}


\NewDocumentCommand{\LWR@subhtmlelementclass}{m O{} D(){} m}{%
\LWR@traceinfo{LWR@subhtmlelementclass !#1!#2!#3!#4!}%
\ifblank{#2}%
{% empty style
    \LWR@htmltag{%
        #1%
        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}% spaces
        \ifblank{#4}{}{ class=\textquotedbl#4\textquotedbl}% spaces
    }%
}%
{% non-empty style
    \LWR@htmltag{%
        #1\LWR@indentHTML%
        \ifblank{#3}{}{role=\textquotedbl#3\textquotedbl\LWR@indentHTML}%
        \ifblank{#4}{}{class=\textquotedbl#4\textquotedbl\LWR@indentHTML}%
        style=\textquotedbl#2\textquotedbl\LWR@orignewline%
    }%
}%
\LWR@traceinfo{LWR@subhtmlelementclass done}%
}

\NewDocumentCommand{\LWR@htmlelementclass}{m o D(){} m}{%
    \LWR@stoppars%
    \LWR@forceemptyline%
    \ifblank{#3}%
        {\LWR@subhtmlelementclass{#1}[#2]{#4}}%
        {\LWR@subhtmlelementclass{#1}[#2](#3){#4}}%
    \LWR@startpars%
}

\newcommand*{\LWR@htmlelementclassend}[2]{%
    \LWR@stoppars%
    \LWR@htmltag{/#1}%
    \ifbool{HTMLDebugComments}{%
        \LWR@htmlcomment{End of #1 ``#2''}%
    }{}%
    \LWR@startpars%
}

\NewDocumentCommand{\LWR@htmldivclass}{o D(){} m}{%
    \ifblank{#2}
        {\LWR@htmlelementclass{div}[#1]{#3}}%
        {\LWR@htmlelementclass{div}[#1](#2){#3}}%
}

\newcommand*{\LWR@htmldivclassend}[1]{%
    \LWR@htmlelementclassend{div}{#1}%
}



\NewDocumentCommand{\LWR@htmlelementclassline}{m o m +m}{%
\LWR@stoppars
\LWR@forceemptyline%
\LWR@subhtmlelementclass{#1}[#2]{#3}%
#4%
\LWR@htmltag{/#1}
\LWR@startpars
}


\newcommand*{\LWR@htmlelement}[1]{%
\LWR@htmlblocktag{#1}
}

\newcommand*{\LWR@htmlelementend}[1]{%
\LWR@stoppars
\LWR@htmltag{/#1}
\LWR@startpars
}

\end{warpHTML}


\begin{warpprint}
\NewDocumentEnvironment{BlockClass}{o D(){} m}{}{}
\end{warpprint}
\begin{warpHTML}

\NewDocumentEnvironment{LWR@print@BlockClass}{o D(){} m}{}{}%

\NewDocumentEnvironment{LWR@HTML@BlockClass}{o D(){} m}%
    {\LWR@htmldivclass[#1](#2){#3}}%
    {\LWR@htmldivclassend{#3}}

\LWR@formattedenv{BlockClass}
\end{warpHTML}
\begin{warpall}
\newcommand{\BlockClassSingle}[2]{#2}
\end{warpall}
\begin{warpHTML}
\newcommand{\LWR@HTML@BlockClassSingle}[2]{%
    \LWR@htmlelementclassline{div}{#1}{#2}%
}

\LWR@formatted{BlockClassSingle}
\end{warpHTML}

\begin{warpprint}
\NewDocumentCommand{\InlineClass}{D{(}{)}{} o m +m}{#4}%
\end{warpprint}
\begin{warpHTML}
\NewDocumentCommand{\LWR@print@InlineClass}{D{(}{)}{} o m +m}{#4}%

\NewDocumentCommand{\LWR@HTML@InlineClass}{D{(}{)}{} o m +m}{%
\LWR@traceinfo{LWR@HTML@InlineClass #3}%
\ifbool{FormatWP}{%
    \LWR@traceinfo{LWR@HTML@InlineClass: FormatWP}%
    \LWR@htmlspanclass[#1]{#3}{#4}%
}{%
    \LWR@traceinfo{LWR@HTML@InlineClass: not FormatWP}%
    \LWR@htmlspanclass[#2]{#3}{#4}%
}%
\LWR@traceinfo{LWR@HTML@InlineClass: done}%
}

\LWR@formatted{InlineClass}
\end{warpHTML}

\begin{warpprint}
\NewDocumentEnvironment{LWR@BlockClassWP}{m m D(){} m}{}{}
\end{warpprint}
\begin{warpHTML}
\NewDocumentEnvironment{LWR@print@LWR@BlockClassWP}{m m D(){} m}{}{}%

\NewDocumentEnvironment{LWR@HTML@LWR@BlockClassWP}{m m D(){} m}%
{%
\LWR@stoppars%
\ifbool{FormatWP}%
{%
    \addtocounter{LWR@thisautoidWP}{1}%
    \LWR@htmltag{%
        div class=\textquotedbl#4\textquotedbl\ % space
        id=\textquotedbl%
            \LWR@print@mbox{autoidWP-\arabic{LWR@thisautoidWP}}%
        \textquotedbl%
        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
        \ifblank{#1}{}{ style=\textquotedbl#1\textquotedbl}%
    }%
}% FormatWP
{% not FormatWP
    \LWR@htmltag{%
        div class=\textquotedbl#4\textquotedbl%
        \ifblank{#3}{}{ role=\textquotedbl#3\textquotedbl}%
        \ifblank{#2}{}{ style=\textquotedbl#2\textquotedbl}%
    }%
}% not FormatWP
\LWR@startpars%
}
{\LWR@htmldivclassend{#4}}

\LWR@formattedenv{LWR@BlockClassWP}
\end{warpHTML}


\begin{warpHTML}

\newcommand*{\LWR@printclosebook}
    {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing book}}{}}
\newcommand*{\LWR@printclosepart}
    {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing part}}{}}
\newcommand*{\LWR@printclosechapter}
    {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing chapter}}{}}
\newcommand*{\LWR@printclosesection}
    {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing section}}{}}
\newcommand*{\LWR@printclosesubsection}
    {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing subsection}}{}}
\newcommand*{\LWR@printclosesubsubsection}
    {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing subsubsection}}{}}
\newcommand*{\LWR@printcloseparagraph}
    {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing paragraph}}{}}
\newcommand*{\LWR@printclosesubparagraph}
    {\ifbool{HTMLDebugComments}{\LWR@htmlcomment{Closing subparagraph}}{}}

\newcommand*{\LWR@printcloselistitem}
    {\LWR@htmltag{/li}}
\newcommand*{\LWR@printclosedescitem}
    {\LWR@htmltag{/dd}}
\newcommand*{\LWR@printcloseitemize}
    {\LWR@htmltag{/ul}}
\newcommand*{\LWR@printcloseenumerate}
    {\LWR@htmltag{/ol}}
\newcommand*{\LWR@printclosedescription}
    {\LWR@htmltag{/dl}}

\end{warpHTML}


\begin{warpHTML}

\newcounter{LWR@spandepth}
\setcounter{LWR@spandepth}{0}

\newbool{LWR@doingstartpars}
\boolfalse{LWR@doingstartpars}

\newbool{LWR@doingapar}
\global\boolfalse{LWR@doingapar}

\newcommand*{\LWR@ensuredoingapar}{%
\ifbool{LWR@doingstartpars}%
{\global\booltrue{LWR@doingapar}}%
{}%
}

\def\PN@parnotes@auto{}%

\newcommand*{\LWR@openparagraph}
{%
\ifbool{LWR@doingstartpars}%
{% handling pars
    \ifboolexpr{
        test {\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}} or
        test {\ifnumcomp{\value{LWR@spandepth}}{>}{0}}
    }% nested par tags?
    {}% no nested par tags
    {% yes nest par tags
        \PN@parnotes@auto%
        \LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline%
        \global\booltrue{LWR@doingapar}%
        \let\par\LWR@closeparagraph%
    }% end of yes nest par tags
}% end of handling pars
{}% not handling pars
}

\newcommand*{\LWR@closeparagraph@br}
{%
    \ifboolexpr{
        test {\ifnumcomp{\value{LWR@spandepth}}{>}{0}} and
        test {\ifnumcomp{\value{LWR@lateximagedepth}}{=}{0}} and
        not bool {LWR@intabularmetadata}
    }%
        {\unskip\LWR@htmltagc{br /}}%
        {}%
}

\newcommand*{\LWR@closeparagraph}
{%
\ifbool{LWR@doingapar}%
{% handling pars
    \ifboolexpr{
        test {\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}} or
        test {\ifnumcomp{\value{LWR@spandepth}}{>}{0}}
    }%
    {% no nested par tags
        \LWR@closeparagraph@br%
    }% no nested par tags
    {% yes nest par tags
        \@hspacer{\fill}% \hspace*{\fill}
        \leavevmode\LWR@orignewline%
        \LWR@htmltagc{/\LWR@tagregularparagraph}%
        \global\boolfalse{LWR@doingapar}%
        \global\boolfalse{LWR@minipagethispar}%
        \PN@parnotes@auto%
    }% end of yes nest par tags
}% end of handling pars
{% not handling pars
    \LWR@closeparagraph@br%
}% not handling pars
\ifboolexpr{%
    not bool {LWR@doingapar} and
    test {\ifnumcomp{\value{LWR@tabulardepth}}{>}{0}} and
    test {
        \ifnumcomp{\value{LWR@tabulardepth}}{=}{\value{LWR@tabularpardepth}}
    } and
    bool {LWR@intabularmetadata} and
    not bool {LWR@tableparcell} and
    test {\ifnumcomp{\value{LWR@lateximagedepth}}{=}{0}}
}%
{%
    \LWR@getmynexttoken%
}{%
    \LWR@origpar%
}%
}

\end{warpHTML}


\begin{warpHTML}

\newcommand*{\LWR@startpars}%
{%
\ifboolexpr{
    test {\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}} or
    test {\ifnumcomp{\value{LWR@spandepth}}{>}{0}}
}%
{}%
{%
    \ifbool{LWR@doingstartpars}%
    {}%
    {%
        \PushPreHook{par}{\LWR@openparagraph}%
        \let\par\LWR@closeparagraph

    }% an intentionally blank line
    \global\setbool{LWR@doingstartpars}{true}%
    \global\boolfalse{LWR@doingapar}%
}% nestspan
}

\newcommand*{\LWR@stoppars}%
{%
\ifboolexpr{
    test {\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}} or
    test {\ifnumcomp{\value{LWR@spandepth}}{>}{0}}
}%
{}%
{%
    \ifbool{LWR@doingapar}%
    {%
        \leavevmode\LWR@orignewline%
        \LWR@htmltagc{/\LWR@tagregularparagraph}%
        \LWR@orignewline%
        \global\boolfalse{LWR@doingapar}%
        \global\boolfalse{LWR@minipagethispar}
    }%
    {}%
    \ifbool{LWR@doingstartpars}%
        {\ClearPreHook{par}}%
        {}%
    \global\setbool{LWR@doingstartpars}{false}%
    \global\boolfalse{LWR@doingapar}%
}% nestspan
}

\end{warpHTML}

\begin{warpHTML}

\AtBeginDocument{
    \def\@afterindentfalse{\let\if@afterindent\iffalse}
    \@afterindentfalse
}
\let\LWR@afterindent@syntaxhighlight\fi% syntax highlighting

\end{warpHTML}


\begin{warpall}

\newcommand{\LWR@firstpagetop}{} % for the home page alone
\newcommand{\LWR@firstpagebottom}{} % for the home page alone
\newcommand{\LWR@pagetop}{} % for all other pages
\newcommand{\LWR@pagebottom}{}
\newcommand{\HTMLFirstPageTop}[1]{%
    \renewcommand{\LWR@firstpagetop}{#1}%
}
\newcommand{\HTMLFirstPageBottom}[1]{%
    \renewcommand{\LWR@firstpagebottom}{#1}%
}
\newcommand{\HTMLPageTop}[1]{%
    \renewcommand{\LWR@pagetop}{#1}%
}
\newcommand{\HTMLPageBottom}[1]{%
    \renewcommand{\LWR@pagebottom}{#1}%
}

\end{warpall}


\begin{warpHTML}


\newcommand*{\LWR@currentcss}{lwarp.css}

\newcommand*{\CSSFilename}[1]{%
\renewcommand*{\LWR@currentcss}{#1}%
\@onelevel@sanitize\LWR@currentcss%
}

\end{warpHTML}
\begin{warpprint}
\newcommand*{\CSSFilename}[1]{}
\end{warpprint}


\begin{warpHTML}

\newcommand*{\LWR@mathjaxfilename}{lwarp_mathjax.txt}

\newcommand*{\MathJaxFilename}[1]{%
    \renewcommand*{\LWR@mathjaxfilename}{#1}%
    \@onelevel@sanitize\LWR@mathjaxfilename%
}

\end{warpHTML}
\begin{warpprint}
\newcommand*{\MathJaxFilename}[1]{}
\end{warpprint}

\begin{warpHTML}
\let\LWR@origtitle\title

\renewcommand*{\title}[1]{%
    \LWR@origtitle{#1}%
    \begingroup%
        \renewcommand{\thanks}[1]{}%
        \protected@xdef\thetitle{#1}%
    \endgroup%
}
\end{warpHTML}
\begin{warpall}
\providecommand{\thetitle}{\BaseJobname}

\newcommand{\theHTMLTitle}{\thetitle}

\newcommand{\HTMLTitle}[1]{\renewcommand{\theHTMLTitle}{#1}}
\providecommand{\theauthor}{}

\newcommand{\theHTMLAuthor}{\theauthor}

\newcommand{\HTMLAuthor}[1]{\renewcommand{\theHTMLAuthor}{#1}}


\newcommand{\LWR@currentHTMLDescription}{}

\newcommand{\HTMLDescription}[1]{%
\renewcommand{\LWR@currentHTMLDescription}{#1}
}

\end{warpall}

\begin{warpall}

\newcounter{FootnoteDepth}
\setcounter{FootnoteDepth}{3}
\newcounter{footnoteReset}
\setcounter{footnoteReset}{0}
\end{warpall}

\begin{warpHTML}

\newbox\LWR@footnotebox
\long\def\@makefntext#1{\textsuperscript{\@thefnmark}~#1}
\def\@makefnmark{%
    \textsuperscript{\@thefnmark}%
}
\long\def\LWR@@footnotetext#1#2{%
\LWR@traceinfo{LWR@footnotetext}%
\LWR@newautopagelabel{page}%
\begingroup%
\let\LWR@newautopagelabel\LWR@null@newautopagelabel%
\global\setbox\csname #2\endcsname=\vbox{%
    \unvbox\csname #2\endcsname%
    \protected@edef\@currentlabel{%
        \csname p@footnote\endcsname\@thefnmark%
    }% @currentlabel
    \color@begingroup%
    \LWR@disablepinyin%
    \renewrobustcmd{\textsuperscript}[1]{\LWR@htmlspan{sup}{##1}}%
    \ifthenelse{%
        \boolean{LWR@doingstartpars} \AND%
        \cnttest{\value{LWR@lateximagedepth}}{=}{0}%
    }%
        {}%
        {\LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline}%
    \@makefntext{#1}%
    \ifthenelse{%
        \boolean{LWR@doingstartpars} \AND%
        \cnttest{\value{LWR@lateximagedepth}}{=}{0}%
    }%
        {\par}%
        {%
            \LWR@htmltagc{/\LWR@tagregularparagraph}%
            \LWR@orignewline%
        }%
    \color@endgroup%
}% vbox
\endgroup%
\LWR@ensuredoingapar%
}%

\long\def\LWR@footnotetext#1{\LWR@@footnotetext{#1}{LWR@footnotebox}}%
\LetLtxMacro\@footnotetext\LWR@footnotetext
\newbox\LWR@mpfootnotes
\long\def\@mpfootnotetext#1{%
\LWR@traceinfo{@mpfootnotetext}%
\global\setbox\LWR@mpfootnotes\vbox{%
    \unvbox\LWR@mpfootnotes%
    \reset@font\footnotesize%
    \hsize\columnwidth%
    \@parboxrestore%
    \protected@edef\@currentlabel%
        {\csname p@mpfootnote\endcsname\@thefnmark}%
    \color@begingroup%
    \ifthenelse{%
        \boolean{LWR@doingstartpars} \AND%
        \cnttest{\value{LWR@lateximagedepth}}{=}{0}%
    }%
        {}%
        {\LWR@htmltagc{\LWR@tagregularparagraph}\LWR@orignewline}%
    \@makefntext{%
        \ignorespaces#1%
    }%
    \ifthenelse{\cnttest{\value{LWR@lateximagedepth}}{>}{0}}%
        {}%
        {%
            \leavevmode\LWR@orignewline%
            \LWR@htmltagc{/\LWR@tagregularparagraph}%
            \LWR@origpar%
        }%
    \color@endgroup%
}% vbox
\LWR@ensuredoingapar%
\LWR@traceinfo{@mpfootnotetext: done}%
}
\AtBeginDocument{
    \def\thempfootnote{\@alph\c@mpfootnote}
}
\newcommand*{\LWR@@printpendingfootnotes}[1]{%
\expandafter\ifvoid\csname LWR@#1box\endcsname\else
    \LWR@forcenewpage
    \begin{BlockClass}(note){footnotes}%
    \LWR@newautopagelabel{page}%
    \null
    \unvbox\csuse{LWR@#1box}
    \setbox\csuse{LWR@#1box}=\vbox{}
    \end{BlockClass}
    \ifltxcounter{#1Reset}{%
        \ifnumgreater{\value{#1Reset}}{0}{%
            \setcounter{#1}{\value{#1Reset}}%
            \addtocounter{#1}{-1}%
        }{}%
    }{}%
\fi
}
\newcommand*{\LWR@printpendingfootnotes}{%
    \LWR@@printpendingfootnotes{footnote}%
}
\newcommand*{\LWR@maybeprintpendingfootnotes}[1]{%
\ifboolexpr{
    not test{\ifnumcomp{#1}{>}{\value{FootnoteDepth}}} or
    bool{FormatEPUB} or
    bool{FormatWP}
}%
{\LWR@printpendingfootnotes}%
{}%
}

\newcommand*{\LWR@printpendingmpfootnotes}{%
\ifvoid\LWR@mpfootnotes\else
    \LWR@forcenewpage
    \begin{BlockClass}(note){footnotes}%
    \null
    \unvbox\LWR@mpfootnotes
    \setbox\LWR@mpfootnotes=\vbox{}
    \end{BlockClass}
\fi
}

\end{warpHTML}

\begin{warpHTML}

\renewcommand{\marginpar}[2][]{%
\ifbool{FormatWP}%
{%
\begin{LWR@BlockClassWP}{width:2in; float:right; margin:10pt}{}(note){marginblock}%
#2
\end{LWR@BlockClassWP}%
}%
{%
    \LWR@htmlspanclass(note){marginpar}{#2}%
}%
}
\newcommand{\marginparBlock}[2][]{%
\LWR@stoppars%
\ifbool{FormatWP}%
{%
    \begin{LWR@BlockClassWP}{width:2in; float:right; margin:10pt}{}(note){marginblock}%
    #2
    \end{LWR@BlockClassWP}
}{%
    \begin{BlockClass}[width:2in; float:right; margin:10pt](note){marginparblock}%
    #2
    \end{BlockClass}
}%
\LWR@startpars%
}
\renewcommand*{\reversemarginpar}{}
\renewcommand*{\normalmarginpar}{}
\end{warpHTML}

\begin{warpprint}
\LetLtxMacro\marginparBlock\marginpar
\end{warpprint}

\newcounter{LWR@currentautosecpage}
\setcounter{LWR@currentautosecpage}{1}
\newcounter{LWR@currentautosecfloatpage}
\setcounter{LWR@currentautosecfloatpage}{1}
\newcounter{LWR@previousautopagelabel}
\setcounter{LWR@previousautopagelabel}{-1}
\newcommand*{\LWR@newautopagelabel}[1]{%
\ifnumequal{\value{LWR@previousautopagelabel}}{\value{page}}%
    {}%
    {%
        \label{\BaseJobname-autopage-\csuse{the#1}}%
        \ifnumequal{\value{#1}}{\value{page}}%
            {}%
            {\label{\BaseJobname-autopage-\csuse{thepage}}}%
        \setcounter{LWR@previousautopagelabel}{\value{page}}%
    }%
}

\newcommand*{\LWR@null@newautopagelabel}[1]{}


\begin{warpall}

\newcounter{FileDepth}
\setcounter{FileDepth}{-5}

\newbool{CombineHigherDepths}
\booltrue{CombineHigherDepths}

\newcommand*{\FilenameLimit}{80}

\end{warpall}

\begin{warpHTML}

\AtBeginDocument{
\ifbool{FileSectionNames}%
    {\newcommand*{\LWR@thisfilename}{\HomeHTMLFilename}}
    {\newcommand*{\LWR@thisfilename}{0}}
}

\newcommand*{\LWR@thisnewfilename}{}

\NewDocumentCommand{\LWR@simplifyname}{s m}{%
\IfBooleanTF{#1}{%
    \StrSubstitute{\LWR@thisnewfilename}%
        {\detokenize{#2}}%
        {\detokenize{-}}[\LWR@thisnewfilename]%
}{%
    \StrSubstitute{\LWR@thisnewfilename}%
        {#2}%
        {\detokenize{-}}[\LWR@thisnewfilename]%
}
}

\newcommand*{\LWR@simplifycustom}{}

\NewDocumentCommand{\FilenameSimplify}{s m}{%
\IfBooleanTF{#1}{%
    \appto{\LWR@simplifycustom}{%
        \LWR@simplifyname*{#2}%
    }%
}{%
    \appto{\LWR@simplifycustom}{%
        \LWR@simplifyname{#2}%
    }%
}%
}

\newcommand*{\LWR@avoiddupfilenames}{%
    To avoid duplicate filenames, use the optional\MessageBreak
    short Table of Contents entry:\MessageBreak
    \space\space\protect\section[Unique name, no math]{Name with math}%
        \MessageBreak
    or use \protect\texorpdfstring, from the hyperref package:\MessageBreak
    \space\space%
        \protect\section{\MessageBreak
            \space\space\space\space\protect\texorpdfstring\MessageBreak
                \space\space\space\space\space\space%
                {Name with math}{Unique name, no math}\MessageBreak
        \space\space}
}

\newcommand*{\LWR@filenamenoblanks}[1]{%
\begingroup
\LWR@nullfonts%
\renewcommand*{\LWR@htmltagc}[1]{}%
\edef\LWR@thisnewfilename{#1}%
\RenewDocumentCommand{\LWR@subsingledollar}{s m m m}{}%
\LWR@simplifyname{\_}
\LWR@simplifyname{\#}
\LWR@simplifyname{\textbackslash}
\LWR@simplifyname{\protect}
\LWR@simplifyname{\ }
\LWR@simplifyname{\textless}
\LWR@simplifyname{\textgreater}
\edef\LWR@thisnewfilename{\detokenize\expandafter{\LWR@thisnewfilename}}%
\ifbool{FileSectionNames}{%
    \IfSubStr{\LWR@thisnewfilename}{\LWRdollar}{%
        \PackageWarning{lwarp}
        {%
            This section name:\MessageBreak
            \space\space``\detokenize\expandafter{#1}''\MessageBreak
            at the line number listed below,\MessageBreak
            is using $dollar-delimited math$,
            which generates\MessageBreak
            complicated file names.  It is better to use\MessageBreak
            \space\space%
                \protect\section{Name with \protect\(parenthesis math\protect\)}%
                \MessageBreak
            The math then will be removed from the file name.\MessageBreak
            \MessageBreak
            \LWR@avoiddupfilenames%
            \MessageBreak
            This section is found before or%
        }
    }{}%
}{}
\LWR@traceinfo{LWR@filenamenoblanks edef: !\LWR@thisnewfilename!}%
\fullexpandarg%
\LWR@simplifyname*{ }
\LWR@simplifyname*{*}
\LWR@simplifyname*{(}
\LWR@simplifyname*{)}
\LWR@simplifyname*{.}
\LWR@simplifyname*{!}
\LWR@simplifyname*{,}
\LWR@simplifyname*{'}
\LWR@simplifyname*{+}
\LWR@simplifyname*{/}
\LWR@simplifyname*{:}
\LWR@simplifyname*{;}
\LWR@simplifyname*{=}
\LWR@simplifyname*{?}
\LWR@simplifyname*{@}
\LWR@simplifyname*{^}
\LWR@simplifyname*{&}
\LWR@simplifyname*{"}
\LWR@simplifyname*{<}
\LWR@simplifyname*{>}
\LWR@simplifyname{\LWRbackslash}
\StrSubstitute{\LWR@thisnewfilename}%
    {\LWRleftbrace}{}[\LWR@thisnewfilename]%
\StrSubstitute{\LWR@thisnewfilename}%
    {\LWRrightbrace}{}[\LWR@thisnewfilename]%
\LWR@simplifyname{\LWRpercent}
\LWR@simplifyname{\LWRdollar}
\LWR@simplifyname*{|}
\LWR@simplifyname*{^}
\LWR@simplifyname*{~}
\LWR@simplifyname*{[}
\LWR@simplifyname*{]}
\LWR@simplifyname*{`}
\LWR@simplifyname*{-s-}
\LWR@simplifyname*{-S-}
\LWR@simplifyname*{-a-}
\LWR@simplifyname*{-A-}
\LWR@simplifyname*{-an-}
\LWR@simplifyname*{-AN-}
\LWR@simplifyname*{-to-}
\LWR@simplifyname*{-TO-}
\LWR@simplifyname*{-by-}
\LWR@simplifyname*{-BY-}
\LWR@simplifyname*{-of-}
\LWR@simplifyname*{-OF-}
\LWR@simplifyname*{-and-}
\LWR@simplifyname*{-AND-}
\LWR@simplifyname*{-for-}
\LWR@simplifyname*{-FOR-}
\LWR@simplifyname*{-the-}
\LWR@simplifyname*{-THE-}
\LWR@simplifycustom%
\ifPDFTeX% pdflatex or dvi latex
\ifdefstring{\inputencodingname}{utf8}{%
    \LWR@simplifyname*{—}
    \LWR@simplifyname*{–}
}{}%
\else% not PDFTeX
    \LWR@simplifyname*{—}
    \LWR@simplifyname*{–}
\fi%
\LWR@simplifyname*{-----}
\LWR@simplifyname*{----}
\LWR@simplifyname*{---}
\LWR@simplifyname*{--}
\IfBeginWith{\LWR@thisnewfilename}{\detokenize{-}}{%
    \StrGobbleLeft{\LWR@thisnewfilename}{1}[\LWR@thisnewfilename]%
}{}%
\IfEndWith{\LWR@thisnewfilename}{\detokenize{-}}{%
    \StrGobbleRight{\LWR@thisnewfilename}{1}[\LWR@thisnewfilename]%
}{}%
\StrLeft{\LWR@thisnewfilename}{\FilenameLimit}[\LWR@thisnewfilename]%
\global\let\LWR@thisfilename\LWR@thisnewfilename%
\endgroup%
\LWR@traceinfo{LWR@filenamenoblanks: result is \LWR@thisfilename}%
}


\bgroup
\catcode`!=3 \catcode`?=3

\long\gdef\LWR@replacestrings@addto#1#2{%
    \expandafter\def\expandafter#1\expandafter{#1#2}%
}

\gdef\LWR@replacestrings#1#2{%
    \long\def\LWR@replacestringsA##1#1{\def\tmpb{##1}\LWR@replacestringsB}%
   \long\def\LWR@replacestringsB##1#1{%
        \ifx!##1\relax \else\LWR@replacestrings@addto\tmpb{#2##1}%
        \expandafter\LWR@replacestringsB\fi%
    }%                                           improved version <May 2016> inspired
    \expandafter\LWR@replacestringsA\tmpb?#1!#1% from pysyntax.tex by Petr Krajnik
    \long\def\LWR@replacestringsA##1?{%
        \def\tmpb{##1}%
    }\expandafter\LWR@replacestringsA\tmpb%
}
\egroup

\newbool{LWR@MathJax@silentquotes}
\boolfalse{LWR@MathJax@silentquotes}

\catcode`\#=12
\catcode`\&=12
\newcommand{\LWR@subHTMLsanitize}{%
    \edef\tmpb{\detokenize\expandafter{\LWR@strresult}}%
    \LWR@replacestrings{&}{&amp;}%
    \LWR@replacestrings{<}{&lt;}%
    \LWR@replacestrings{>}{&gt;}%
    \ifbool{LWR@MathJax@silentquotes}
        {%
            \expandafter\LWR@replacestrings\expandafter{\LWRbackslash"}{}%
            \LWR@replacestrings{"}{}%
        }%
        {\LWR@replacestrings{"}{&quot;}}%
    \LWR@replacestrings{'}{&apos;}%
    \LWR@replacestrings{`}{&grave;}%
    \LWR@replacestrings{##}{#}%
    \edef\LWR@strresult{\detokenize\expandafter{\tmpb}}%
}
\catcode`\#=6
\catcode`\&=4

\newrobustcmd{\LWR@HTMLsanitize}[1]{%
    \begingroup%
    \LWR@hook@processingtags%
    \edef\LWR@strresult{\detokenize{#1}}%
    \LWR@subHTMLsanitize%
    \LWR@strresult%
    \endgroup%
}

\edef\LWR@beginspaceleftbrace{begin \LWRleftbrace}
\edef\LWR@beginspaceleftbrace{\detokenize\expandafter{\LWR@beginspaceleftbrace}}
\edef\LWR@beginleftbrace{begin\LWRleftbrace}
\edef\LWR@beginleftbrace{\detokenize\expandafter{\LWR@beginleftbrace}}

\edef\LWR@endspacerightbrace{end \LWRrightbrace}
\edef\LWR@endspacerightbrace{\detokenize\expandafter{\LWR@endspacerightbrace}}
\edef\LWR@endrightbrace{end\LWRrightbrace}
\edef\LWR@endrightbrace{\detokenize\expandafter{\LWR@endrightbrace}}

\newrobustcmd{\LWR@HTMLsanitizeexpand}[1]{%
    \begingroup%
    \LWR@hook@processingtags%
    \edef\LWR@strresult{\detokenize\expandafter{#1}}%
    \protect\StrSubstitute{\LWR@strresult}%
        {\LWR@beginspaceleftbrace}{\LWR@beginleftbrace}[\LWR@strresult]%
    \protect\StrSubstitute{\LWR@strresult}%
        {\LWR@endspacerightbrace}{\LWR@endrightbrace}[\LWR@strresult]%
    \LWR@subHTMLsanitize%
    \LWR@strresult%
    \endgroup%
}


\newcommand*{\LWR@customizedMathJax}{}

\newbool{LWR@warnedcustomizemathjax}
\boolfalse{LWR@warnedcustomizemathjax}

\newcommand*{\LWR@subcustomizedmathjax}[1]{%
    \begingroup%
    \LWR@hook@processingtags%
    \edef\LWR@strresult{\detokenize{#1}}%
    \LWR@subHTMLsanitize%
    \xdef\LWR@customizedMathJax{%
        \LWR@customizedMathJax%
            \LWR@strresult%
    }%
    \endgroup%
}
\@onlypreamble\LWR@subcustomizedmathjax

\newcommand*{\CustomizeMathJax}[1]{%
    \ifbool{LWR@warnedcustomizemathjax}{}{%
        \StrLen{\detokenize{#1}}[\LWR@tempone]%
        \ifnumgreater{\LWR@tempone}{350}{%
            \AtEndDocument{%
                \PackageWarningNoLine{lwarp}{%
                    To ensure faster MathJax compilation, place each\MessageBreak
                    custom macro in its own \protect\CustomizeMathJax.\MessageBreak
                    See the Lwarp documentation regarding customizing\MessageBreak
                    MathJax%
                }%
            }%
            \booltrue{LWR@warnedcustomizemathjax}%
        }{}%
    }%
    \appto\LWR@customizedMathJax{\LWRbackslash(}%
    \LWR@subcustomizedmathjax{#1}%
    \appto\LWR@customizedMathJax{\LWRbackslash)\par}%
}
\@onlypreamble\CustomizeMathJax

\newcommand*{\LWR@infoprocessingmathjax}[1]{%
\typeout{---}
\typeout{Package lwarp: Processing MathJax customizations for #1.}
\typeout{\space\space This may take a moment.}
\typeout{---}
}

\providecommand{\footnotename}{footnote}

\end{warpHTML}

\begin{warpMathJax}
\xdef\LWR@customizedMathJax{\LWR@customizedMathJax%
    \LWRbackslash(%
    \LWRbackslash{}newcommand%
    \{\LWRbackslash{}footnotename\}%
    \{\footnotename\}%
    \LWRbackslash)\par%
}
\end{warpMathJax}

\begin{warpMathJax}
\CustomizeMathJax{\def\LWRfootnote{1}}
\CustomizeMathJax{\newcommand{\footnote}[2][\LWRfootnote]{{}^{\mathrm{#1}}}}
\CustomizeMathJax{\newcommand{\footnotemark}[1][\LWRfootnote]{{}^{\mathrm{#1}}}}
\CustomizeMathJax{\let\LWRorighspace\hspace}
\CustomizeMathJax{\renewcommand{\hspace}{\ifstar\LWRorighspace\LWRorighspace}}
\CustomizeMathJax{\newcommand{\mathnormal}[1]{{#1}}}
\CustomizeMathJax{\newcommand\ensuremath[1]{#1}}
\CustomizeMathJax{% absorb two optional arguments
    \newcommand{\LWRframebox}[2][]{\fbox{#2}}
    \newcommand{\framebox}[1][]{\LWRframebox}
}
\CustomizeMathJax{\newcommand{\setlength}[2]{}}
\CustomizeMathJax{\newcommand{\addtolength}[2]{}}
\CustomizeMathJax{\newcommand{\setcounter}[2]{}}
\CustomizeMathJax{\newcommand{\addtocounter}[2]{}}
\CustomizeMathJax{\newcommand{\arabic}[1]{}}
\CustomizeMathJax{\newcommand{\number}[1]{}}
\CustomizeMathJax{\newcommand{\noalign}[1]{\text{#1}\notag \\}}
\CustomizeMathJax{\newcommand{\cline}[1]{}}
\CustomizeMathJax{\newcommand{\directlua}[1]{\text{(directlua)}}}
\CustomizeMathJax{\newcommand{\luatexdirectlua}[1]{\text{(directlua)}}}
\CustomizeMathJax{\newcommand{\protect}{}}
\CustomizeMathJax{\def\LWRabsorbnumber#1 {}}
\CustomizeMathJax{\def\LWRabsorbquotenumber"#1 {}}
\CustomizeMathJax{\newcommand{\LWRabsorboption}[1][]{}}
\CustomizeMathJax{\newcommand{\LWRabsorbtwooptions}[1][]{\LWRabsorboption}}
\CustomizeMathJax{\def\mathchar{\ifnextchar"\LWRabsorbquotenumber\LWRabsorbnumber}}
\CustomizeMathJax{\def\mathcode#1={\mathchar}}
\CustomizeMathJax{\let\delcode\mathcode}
\CustomizeMathJax{\let\delimiter\mathchar}
\end{warpMathJax}

\begin{warpHTML}% due to warpMathJax

\newcommand{\LWR@customizeMathJax}{%
\ifbool{mathjax}{
\LWR@stoppars
\LWR@htmlcomment{MathJax customizations:}

\begin{BlockClass}{hidden}
\LWR@stoppars
{
    \LWR@print@ttfamily
    \LWR@customizedMathJax
}
\LWR@startpars
\end{BlockClass}

\LWR@startpars
}{}
}





\end{warpHTML}

\begin{warpprint}

\newcommand*{\CustomizeMathJax}[1]{}


\NewDocumentCommand{\FilenameSimplify}{s m}{}

\end{warpprint}

\begin{warpHTML}

\newcommand*{\LWR@createfooter}{%
    \ifnumless{\value{LWR@htmlseqfilenumber}}{1}{%
        \ifdefempty{\LWR@firstpagebottom}{}{%
            \LWR@htmlelement{footer}

            \LWR@firstpagebottom

            \LWR@htmlelementend{footer}
        }%
    }{%
        \ifdefempty{\LWR@pagebottom}{}{%
            \LWR@htmlelement{footer}

            \LWR@pagebottom

            \LWR@htmlelementend{footer}
        }%
    }%
}

\newcommand*{\LWR@newhtmlfile}[1]{
\LWR@traceinfo{LWR@newhtmlfile}
\LWR@htmlelementclassend{section}{textbody}
\LWR@htmlelementclassend{main}{bodycontainer}
\LWR@htmlelementclassend{div}{bodyandsidetoc}

\LWR@printpendingfootnotes

\ifbool{FormatEPUB}{}{\LWR@createfooter}
\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
    {}
    {\ifnumcomp{\value{LWR@htmlfilenumber}}{>}{0}{\LWR@botnavigation}{}}

\LWR@stoppars
\LWR@htmltag{/body}\LWR@orignewline
\LWR@htmltag{/html}\LWR@orignewline
\LWR@traceinfo{LWR@newhtmlfile: about to LWR@orignewpage}
\LWR@maybe@orignewpage
\addtocounter{LWR@htmlfilenumber}{1}%
\addtocounter{LWR@htmlseqfilenumber}{1}%
\ifbool{FileSectionNames}%
{%
    \LWR@filenamenoblanks{#1}%
    \edef\LWR@hashedname{\LWR@mdfive{\LWR@thisfilename}}%
    \ifcsundef{LWR@filename\LWR@hashedname}{%
        \csdef{LWR@filename\LWR@hashedname}{}%
    }{%
        \PackageError{lwarp}%
            {%
                The section name:\MessageBreak
                ``#1'',\MessageBreak
                at the line number listed below,\MessageBreak
                generates the filename\MessageBreak
                ``\LWR@thisfilename'',\MessageBreak
                which appears to be a duplicate.  There is a\MessageBreak
                previous section with an identical or similar name.\MessageBreak
                While generating file names, Lwarp sanitizes math,\MessageBreak
                most symbols, and a few common short words,\MessageBreak
                and this may cause a conflict.\MessageBreak
                Enter 'H' for possible solutions%
            }%
            {%
                \LWR@avoiddupfilenames%
            }%
    }%
}%
{\renewcommand*{\LWR@thisfilename}{\arabic{LWR@htmlfilenumber}}}
\LWR@traceinfo{LWR@newhtmlfile: about to print start file}%
\begingroup%
\LWR@nullfonts%
\LWR@htmlblockcomment{%
|Start file|%
\LWR@htmlsectionfilename{\LWR@thisfilename}|%
}
\endgroup%
\LWR@stoppars

\LWR@filestart[#1]

\setcounter{LWR@currentautosecfloatpage}{\value{page}}%
\LWR@newautopagelabel{LWR@currentautosecfloatpage}%
\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
    {}
    {\LWR@topnavigation}

\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
    {}
    {
        \ifdefempty{\LWR@pagetop}{}{
            \LWR@htmlelement{header}

            \LWR@pagetop

            \LWR@htmlelementend{header}
        }
    }

\LWR@htmlelementclass{div}{bodyandsidetoc}
\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
    {}
    {\LWR@sidetoc}

\LWR@htmlelementclass{main}{bodycontainer}
\LWR@htmlelementclass{section}{textbody}
\boolfalse{LWR@setseqfilelabel}
\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}%
    {}%
    {%
        \ifcsvoid{thetitle}{}{%
            \LWR@printthetitle%
        }%
    }%
\LWR@stoppars

\LWR@customizeMathJax
\LWR@traceinfo{LWR@newhtmlfile: done}
}

\end{warpHTML}


\begin{warpHTML}
\newbool{LWR@forcinghtmlpage}
\boolfalse{LWR@forcinghtmlpage}

\newcommand*{\ForceHTMLPage}{%
\global\booltrue{LWR@forcinghtmlpage}%
}
\newbool{LWR@forcinghtmltoc}
\boolfalse{LWR@forcinghtmltoc}

\newcommand*{\ForceHTMLTOC}{%
\global\booltrue{LWR@forcinghtmltoc}%
}
\end{warpHTML}
\begin{warpprint}
\newcommand*{\ForceHTMLPage}{}
\newcommand*{\ForceHTMLTOC}{}
\end{warpprint}
\begin{warpHTML}
\newbool{LWR@mainmatter}
\DeclareDocumentCommand{\mainmatter}{}{%
\booltrue{LWR@mainmatter}%
}

\DeclareDocumentCommand{\frontmatter}{}{%
\boolfalse{LWR@mainmatter}%
}

\DeclareDocumentCommand{\backmatter}{}{%
\boolfalse{LWR@mainmatter}
}
\newcommand*{\LWR@sectionnumber}[1]{%
\InlineClass{sectionnumber}{#1}%
}

\newcommand*{\LWR@createautosec}[1]{%
\LWR@htmltag{%
    #1 % space
    id=\textquotedbl\LWR@print@mbox{autosec-\arabic{page}}\textquotedbl%
}%
}

\NewDocumentCommand{\LWR@pushoneclose}{m}{%
\LWR@traceinfo{LWR@pushoneclose #1}%
    \LWR@pushclose{#1}%
}

\NewDocumentCommand{\LWR@startnewdepth}{m}{%
\LWR@closeprevious{#1}%
\LWR@pushoneclose{#1}%
}
\newcounter{LWR@prevFileDepth}
\setcounter{LWR@prevFileDepth}{\LWR@depthsubparagraph}
\def\@seccntformat#1{\csname the#1\endcsname\quad}
\newcommand*{\simplechapterdelim}{}
\let\@chapcntformat\@seccntformat
\let\@partcntformat\@seccntformat
\newcommand*{\@partnameformat}{\LWR@isolate{\partname}~}%
\newcommand*{\LWR@printchaptername}{%
    \ifdefvoid{\chaptername}{}{\chaptername~}%
}
\DeclareDocumentCommand{\LWR@section}{m m m m}{%
\IfValueTF{#2}%
    {\LWR@traceinfo{LWR@section: starting #4 #2}}%
    {\LWR@traceinfo{LWR@section: starting #4 #3}}%
    \LWR@spanwarninvalid{section}%
\LWR@maybeprintpendingfootnotes{\csuse{LWR@depth#4}}%
\LWR@stoppars%
\LWR@startnewdepth{#4}%
\global\boolfalse{LWR@minipagethispar}%
\LWR@traceinfo{LWR@section: testing whether to start a new HTML file}%
\IfBooleanT{#1}{\LWR@traceinfo{LWR@section: starred}}%
\ifbool{LWR@forcinghtmlpage}{\LWR@traceinfo{LWR@section: forcinghtmlpage}}{}%
\ifthenelse{%
    \(%
        \(\NOT\equal{#1}{\BooleanTrue}\)\OR%
        \(\cnttest{\@nameuse{LWR@depth#4}}{=}{\LWR@depthpart}\)\OR%
        \(\boolean{LWR@forcinghtmlpage}\)%
    \)%
    \AND%
    \cnttest{\@nameuse{LWR@depth#4}}{<=}{\value{FileDepth}}%
    \AND%
    \(%
        \NOT\boolean{CombineHigherDepths}\OR%
        \cnttest{\@nameuse{LWR@depth#4}}{<=}{\value{LWR@prevFileDepth}}%
    \)%
    \AND%
    \(% phantomsection
        \NOT\isempty{#3}%
        \OR%
        \(\NOT\equal{#1}{\BooleanTrue}\)%
    \)%
}%
{% new file
    \LWR@traceinfo{LWR@section: new HTML file}%
    \IfNoValueTF{#2}%
        {\LWR@newhtmlfile{#3}}%
        {\LWR@newhtmlfile{#2}}%
}% new file
{% not new file
    \LWR@traceinfo{LWR@section: not a new HTML file, about to LWR@orignewpage}%
    \LWR@maybe@orignewpage%
}% not new file

\IfValueT{#3}{%
    \LWR@traceinfo{LWR@section: about to LWR@setlatestname}%
    \IfValueTF{#2}{\LWR@setlatestname{#2}}{\LWR@setlatestname{#3}}%
}%
\ifbool{HTMLDebugComments}{%
    \begingroup%
    \LWR@nullfonts%
    \IfBooleanTF{#1}% starred
    {\LWR@htmlcomment{Opening #4*}}%
    {%
        \IfNoValueTF{#2}% short TOC
            {\LWR@htmlcomment{Opening #4 ``#3''}}%
            {\LWR@htmlcomment{Opening #4 ``#2''}}%
    }\LWR@orignewline%
    \endgroup%
}{}
\ifthenelse{%
    \cnttest{\@nameuse{LWR@depth#4}}{>=}{\LWR@depthparagraph}%
}%
    {\LWR@startpars}%
    {}%
\LWR@traceinfo{LWR@section: about to LWR@createautosec}%
\LWR@createautosec{\@nameuse{LWR@tag#4}}%
\setcounter{LWR@currentautosecpage}{\value{page}}%
\IfBooleanTF{#1}%
{%
    \LWR@traceinfo{LWR@section: starred}%
    \ifbool{LWR@forcinghtmltoc}%
    {%
        \addcontentsline{toc}{#4}{%
            \IfValueTF{#2}{\LWR@isolate{#2}}{\LWR@isolate{#3}}%
        }%
    }%
    {}%
}% starred
{% not starred
    \ifthenelse{%
        \cnttest{\@nameuse{LWR@depth#4}}{<=}{\value{secnumdepth}}%
    }%
    {% if secnumdepth
        \LWR@traceinfo{LWR@section: about to test main matter}%
        \ifbool{LWR@mainmatter}%
        {%
            \LWR@traceinfo{LWR@section: yes mainmatter}%
            \refstepcounter{#4}%
            \LWR@traceinfo{LWR@section: about to addcontentsline}%
            \addcontentsline{toc}{#4}%
            {%
                \protect\numberline{%
                    \@nameuse{pre#4name}%
                    \@nameuse{the#4}%
                    \@nameuse{post#4name}%
                }%
                {%
                    \ignorespaces%
                    \IfValueTF{#2}{\LWR@isolate{#2}}{\LWR@isolate{#3}}\protect\relax%
                }%
            }%
            \LWR@traceinfo{LWR@section: finished addcontentsline}%
        }% end of if main matter
        {% not main matter
            \LWR@traceinfo{LWR@section: no main matter}%
            \addcontentsline{toc}{#4}{%
                \IfValueTF{#2}{\LWR@isolate{#2}}{\LWR@isolate{#3}}%
            }%
        }% end of not main matter
    }% end of secnumdepth
    {%
        \addcontentsline{toc}{#4}{%
            \IfValueTF{#2}{\LWR@isolate{#2}}{\LWR@isolate{#3}}%
        }%
    }%
    \ifbool{LWR@mainmatter}%
    {%
        \ifthenelse{%
            \(\cnttest{\@nameuse{LWR@depth#4}}{<=}%
                {\value{secnumdepth}}\) \AND%
            \(\cnttest{\@nameuse{LWR@depth#4}}{=}{\LWR@depthpart}\)%
        }%
            {\@partnameformat}%
            {}%
        \LWR@traceinfo{LWR@section: about to print section number}%
        \ifthenelse{%
            \cnttest{\@nameuse{LWR@depth#4}}{<=}{\value{secnumdepth}}%
        }%
            {%
                \ifstrequal{#4}{part}%
                {\protect\LWR@sectionnumber{\@partcntformat{#4}}}%
                {%
                    \ifstrequal{#4}{chapter}%
                        {%
                            \LWR@printchaptername%
                            \protect\LWR@sectionnumber{\@chapcntformat{#4}}%
                        }%
                        {\protect\LWR@sectionnumber{\@seccntformat{#4}}}%
                }%
            }%
            {}%
        \LWR@traceinfo{LWR@section: finished print section number}%
    }{}%
}% not starred
\LWR@traceinfo{LWR@section: about to print the section name}%
\LWR@isolate{#3}%
\LWR@traceinfo{LWR@section: about to close the heading tag}%
\LWR@htmltag{\@nameuse{LWR@tag#4end}}%
\LWR@orignewline%
\LWR@traceinfo{LWR@section: about to create the LaTeX label}%
\setcounter{LWR@currentautosecfloatpage}{\value{page}}%
\LWR@newautopagelabel{LWR@currentautosecpage}\LWR@orignewline%
\ifbool{LWR@setseqfilelabel}{}{%
    \label{\BaseJobname-autofile-\arabic{LWR@htmlseqfilenumber}}%
    \booltrue{LWR@setseqfilelabel}%
}%
\ifthenelse{%
    \cnttest{\@nameuse{LWR@depth#4}}{<}{\LWR@depthparagraph}%
}%
    {\LWR@startpars}%
    {}%
\ifthenelse{%
    \NOT\equal{#1}{\BooleanTrue}\OR%
    \cnttest{\@nameuse{LWR@depth#4}}{=}{\LWR@depthpart}%
}%
    {% not starred
        \setcounter{LWR@prevFileDepth}{\@nameuse{LWR@depth#4}}%
    }% not starred
    {}%
\ifstrempty{#3}%
    {}%
    {%
        \global\boolfalse{LWR@forcinghtmlpage}%
        \global\boolfalse{LWR@forcinghtmltoc}%
    }%
\LWR@traceinfo{LWR@section: done}%
}


\providecommand*{\prebookname}{}
\providecommand*{\postbookname}{}

\providecommand*{\prepartname}{}
\providecommand*{\postpartname}{}

\providecommand*{\prechaptername}{}
\providecommand*{\postchaptername}{}

\providecommand*{\presectionname}{}
\let\postsectionname\presectionname

\let\presubsectionname\presectionname
\let\postsubsectionname\postsectionname

\let\presubsubsectionname\presectionname
\let\postsubsubsectionname\postsectionname

\let\preparagraphname\presectionname
\let\postparagraphname\postsectionname

\let\presubparagraphname\presectionname
\let\postsubparagraphname\postsectionname


\newcommand{\part@preamble}{}% for koma-script

\DeclareDocumentCommand{\part}{s d() o o d() m}{%
    \LWR@section{#1}{#3}{#6}{part}%

    \part@preamble% for koma-script
    \renewcommand{\part@preamble}{}%
}

\let\@printcites\relax% for quotchap package

\newcommand{\chapter@preamble}{}% for koma-script

\@ifundefined{chapter}
{}
{%
    \DeclareDocumentCommand{\chapter}{s d() o o d() m}{%
        \LWR@section{#1}{#3}{#6}{chapter}%

        \@printcites% for quotchap package

        \chapter@preamble% for koma-script
        \renewcommand{\chapter@preamble}{}%
    }
}

\DeclareDocumentCommand{\section}{s d() o o d() m}{%
    \LWR@section{#1}{#3}{#6}{section}%
}

\DeclareDocumentCommand{\subsection}{s d() o o d() m}{%
    \LWR@section{#1}{#3}{#6}{subsection}%
}

\DeclareDocumentCommand{\subsubsection}{s d() o o d() m}{%
    \LWR@section{#1}{#3}{#6}{subsubsection}%
}

\DeclareDocumentCommand{\paragraph}{s d() o o d() m}{%
    \LWR@section{#1}{#3}{#6}{paragraph}%
}

\DeclareDocumentCommand{\subparagraph}{s d() o o d() m}{%
    \LWR@section{#1}{#3}{#6}{subparagraph}%
}

\end{warpHTML}


\begin{warpall}

\newcommand*{\LWR@currentHTMLLanguage}{en-US}

\newcommand*{\HTMLLanguage}[1]{%
    \renewcommand*{\LWR@currentHTMLLanguage}{#1}%
}

\ifPDFTeX% pdflatex or dvi latex
    \ifdefstring{\inputencodingname}{utf8}{%
        \newcommand*{\theHTMLTitleSeparator}{ —\ }% EMdash
    }{%
        \newcommand*{\theHTMLTitleSeparator}{ -\ }% hyphen
    }%
\else%
    \ifpTeX
        \newcommand*{\theHTMLTitleSeparator}{ -\ }% hyphen
    \else
        \newcommand*{\theHTMLTitleSeparator}{ —\ }% EMdash
    \fi%
\fi%

\newcommand*{\HTMLTitleBeforeSection}{%
    \def\theHTMLTitleSection{%
        \theHTMLTitle\theHTMLTitleSeparator\theHTMLSection%
    }%
}

\newcommand*{\HTMLTitleAfterSection}{%
    \def\theHTMLTitleSection{%
        \theHTMLSection\theHTMLTitleSeparator\theHTMLTitle%
    }%
}

\HTMLTitleBeforeSection

\newcommand*{\theHTMLSection}{}

\end{warpall}

\begin{warpHTML}

\newcommand*{\LWR@filestart}[1][]{%
\LWR@traceinfo{LWR@filestart !#1!}%
\begingroup%
\LWR@nullfonts%
\edef\theHTMLSection{#1}%
\StrSubstitute{\theHTMLSection}{\protect}{\detokenize{-}}[\theHTMLSection]%
\StrSubstitute{\theHTMLSection}{\detokenize{-----}}{\detokenize{-}}[\theHTMLSection]%
\StrSubstitute{\theHTMLSection}{\detokenize{----}}{\detokenize{-}}[\theHTMLSection]%
\StrSubstitute{\theHTMLSection}{\detokenize{---}}{\detokenize{-}}[\theHTMLSection]%
\StrSubstitute{\theHTMLSection}{\detokenize{--}}{\detokenize{-}}[\theHTMLSection]%
\IfBeginWith{\theHTMLSection}{\detokenize{-}}{%
    \StrGobbleLeft{\theHTMLSection}{1}[\theHTMLSection]%
}{}%
\LWR@htmltag{!DOCTYPE html}\LWR@orignewline
\LWR@htmltag{%
    html lang=\LWR@orig@textquotedbl\LWR@currentHTMLLanguage\LWR@orig@textquotedbl%
}\LWR@orignewline
\LWR@htmltag{head}\LWR@orignewline
\LWR@htmltag{%
    meta charset=\LWR@orig@textquotedbl{}UTF-8\LWR@orig@textquotedbl\ /%
}\LWR@orignewline
\ifthenelse{\equal{\theHTMLAuthor}{}}%
    {}%
    {%
        \LWR@htmltag{%
            meta name=\LWR@orig@textquotedbl{}author\LWR@orig@textquotedbl\ % space
            content=\LWR@orig@textquotedbl\theHTMLAuthor\LWR@orig@textquotedbl\ /%
        }\LWR@orignewline%
    }%
\LWR@htmltag{%
    meta % space
    name=\LWR@orig@textquotedbl{}generator\LWR@orig@textquotedbl\ % space
    content=\LWR@orig@textquotedbl{}LaTeX Lwarp package\LWR@orig@textquotedbl\ /%
}\LWR@orignewline%
\ifdefempty{\LWR@currentHTMLDescription}{}{%
    \LWR@htmltag{%
        meta name=\LWR@orig@textquotedbl{}description\LWR@orig@textquotedbl\ % space
        content=\LWR@orig@textquotedbl\LWR@currentHTMLDescription\LWR@orig@textquotedbl\ /%
    }\LWR@orignewline
}%
\LWR@htmltag{%
    meta % space
    name=\LWR@orig@textquotedbl{}viewport\LWR@orig@textquotedbl\ % space
    content=\LWR@orig@textquotedbl{}width=device-width, initial-scale=1.0\LWR@orig@textquotedbl\ /%
}\LWR@orignewline
\LWR@htmltag{!-\/-[if lt IE 9]}\LWR@orignewline
\LWR@htmltag{%
    script % space
    src=\LWR@orig@textquotedbl{}%
        http://html5shiv.googlecode.com/svn/trunk/html5.js%
    \LWR@orig@textquotedbl%
}%
\LWR@htmltag{/script}\LWR@orignewline
\LWR@htmltag{![endif]-\/-}\LWR@orignewline
\ifthenelse{\equal{\theHTMLTitle}{}}%
    {}%
    {%
        \LWR@htmltag{title}%
        \ifdefempty{\theHTMLSection}%
            {\theHTMLTitle}%
            {\theHTMLTitleSection}%
        \LWR@htmltag{/title}\LWR@orignewline%
    }%
\LWR@htmltag{%
    link % space
    rel=\LWR@orig@textquotedbl{}stylesheet\LWR@orig@textquotedbl\ % space
    type=\LWR@orig@textquotedbl{}text/css\LWR@orig@textquotedbl\ % space
    href=\LWR@orig@textquotedbl\LWR@currentcss\LWR@orig@textquotedbl\ /%
}%
\LWR@orignewline
\ifbool{mathjax}%
{%
    \begingroup%
    \LWR@restoreoriglists%
    \boolfalse{LWR@verbtags}%
        \IfFileExists{\LWR@mathjaxfilename}%
            {\verbatiminput{\LWR@mathjaxfilename}}%
            {%
                \PackageError{lwarp}%
                    {%
                        \protect\MathJaxFilename\space specified the file\MessageBreak
                        \space\space\LWR@mathjaxfilename\MessageBreak
                        which does not exist%
                    }%
                    {Specify an existing file, or remove \protect\MathJaxFilename.}%
            }%
    \booltrue{LWR@verbtags}%
    \endgroup%
    \LWR@stoppars%
}% end of mathjax
{}%
\LWR@htmltag{/head}\LWR@orignewline
\LWR@htmltag{body}\LWR@orignewline
\endgroup%
\LWR@traceinfo{LWR@filestart: done}%
}

\end{warpHTML}


\begin{warpHTML}

\catcode`\$=\active
\newcommand*{\LWR@LwarpStart}
{%
\LWR@traceinfo{LWR@lwarpStart}
\ifbool{FormatWP}{%
    \setcounter{FileDepth}{-5}%
    \boolfalse{HTMLDebugComments}%
}{}
\edef\LWR@strresult{\HomeHTMLFilename}
\edef\HomeHTMLFilename{\detokenize\expandafter{\LWR@strresult}}
\edef\LWR@strresult{\HTMLFilename}
\edef\HTMLFilename{\detokenize\expandafter{\LWR@strresult}}
\LWR@origonecolumn%
\LWR@origpagestyle{empty}%
\overfullrule=0pt
\LWR@print@footnotesize%
\LWR@print@raggedright%
\LetLtxMacro{\\}{\LWR@endofline}%
\linespread{1.3}%
\setlength{\parindent}{0pt}
\setlength{\parskip}{2ex}
\immediate\openout\LWR@lateximagesfile=\BaseJobname-images.txt
\setlength{\belowcaptionskip}{0ex}
\setlength{\abovecaptionskip}{0ex}
\renewcommand{\ps@plain}{}
\let\LWR@origcaption\caption
\global\boolfalse{LWR@doingapar}
\global\boolfalse{LWR@doingstartpars}
\mainmatter
\LWR@origpagenumbering{arabic}
\LWR@traceinfo{LWR@lwarpStart: Starting new file.}
\LWR@filestart%
\begingroup%
\LWR@nullfonts%
\LWR@htmlblockcomment{%
|Using lwarp|%
\LWR@htmlsectionfilename{\LWR@thisfilename}|%
}
\endgroup%
\LWR@traceinfo{LWR@lwarpStart: Generating first header.}
\ifdefempty{\LWR@firstpagetop}{}{%
    \LWR@htmltag{header}\LWR@orignewline
    \LWR@startpars
    \LWR@firstpagetop
    \LWR@stoppars
    \LWR@htmltag{/header}\LWR@orignewline
}%
\LWR@htmlelementclass{div}{bodywithoutsidetoc}
\LWR@htmlelementclass{main}{bodycontainer}
\LWR@traceinfo{LWR@lwarpStart: Generating textbody.}
\LWR@htmlelementclass{section}{textbody}
\booltrue{LWR@setseqfilelabel}%
\label{\BaseJobname-autofile-\arabic{LWR@htmlseqfilenumber}}
\LWR@patchlists
\catcode`\$=\active
\immediate\write\@mainaux{\catcode`\string$\active}%
\LetLtxMacro\LWR@syntaxhighlightone$% balance for editor syntax highlighting
\LWR@startpars
\ifbool{mathjax}{
    \typeout{---}
    \typeout{Package lwarp:}
    \typeout{Processing MathJax customizations for the first HTML page.}
    \typeout{Later HTML pages will take the same amount of time.}
    \typeout{If this takes too long, see the Lwarp manual regarding customizing MathJax.}
}{}

\LWR@customizeMathJax

\ifbool{mathjax}{
    \typeout{Done.}
    \typeout{---}
}{}
\setcounter{LWR@currentautosecfloatpage}{\value{page}}%
\LWR@newautopagelabel{LWR@currentautosecpage}%
\LWR@traceinfo{LWR@lwarpStart: done}
}
\catcode`\$=3% math shift until lwarp starts

\end{warpHTML}


\begin{warpHTML}


\newcommand*{\LWR@requesttoc}[2]{%
\ifbool{#1}
{
    \expandafter\newwrite\@nameuse{tf@#2}
    \immediate\openout \@nameuse{tf@#2} \jobname.#2\relax
}{}
}

\newcommand*{\LWR@LwarpEnd}
{
\LWR@stoppars
\LWR@closeprevious{finished}
\LWR@printpendingfootnotes
\label{\BaseJobname-autofile-last}
\LWR@htmlelementclassend{section}{textbody}
\LWR@htmlelementclassend{main}{bodycontainer}
\LWR@htmlelementclassend{div}{bodyandsidetoc}
\ifbool{FormatEPUB}{}{\LWR@createfooter}

\ifthenelse{\boolean{FormatEPUB}\OR\boolean{FormatWP}}
    {}
    {
        \ifnumcomp{\value{LWR@htmlfilenumber}}{>}{0}{\LWR@botnavigation}{}
    }
\LWR@stoppars% final stop of all paragraphs
\LWR@htmltag{/body}\LWR@orignewline
\LWR@htmltag{/html}\LWR@orignewline
\LWR@maybe@orignewpage
}

\ifdef{\AddToHook}{% newer kernel
    \AddToHook{enddocument/info}{%
       \if@filesw
       \ifx \@multiplelabels \relax
         \if@tempswa
         \else
            \immediate\write\LWR@lateximagesfile{%
                |end|end|end|%
            }%
         \fi
       \fi\fi
    }
}% newer kernel
{% older kernel
    \xpatchcmd{\enddocument}
        {%
            \if@tempswa
            \@latex@warning@no@line{Label(s) may have changed.
            Rerun to get cross-references right}%
            \fi
        }
        {%
            \if@tempswa
                \@latex@warning@no@line{Label(s) may have changed.
                Rerun to get cross-references right}%
            \else
                \immediate\write\LWR@lateximagesfile{%
                    |end|end|end|%
                }%
            \fi
        }
        {}
        {
            \AtEndDocument{
                \PackageWarningNoLine{lwarp}
                {%
                    Could not patch \protect\enddocument.\MessageBreak
                    If labels have changed, be sure to recompile before\MessageBreak
                    creating lateximages with\MessageBreak
                    \space\space lwarpmk limages,\MessageBreak
                    or the images may be corrupt%
                }
            }
        }
}% older kernel

\ifdef{\RemoveFromHook}{
    \AfterEndPreamble{
        \IfHookEmptyTF{shipout/background}{}{
            \PackageInfo{lwarp}{Removing background hook}
            \RemoveFromHook{shipout/background}[*]
        }
        \IfHookEmptyTF{shipout/foreground}{}{
            \PackageInfo{lwarp}{Removing foreground hook}
            \RemoveFromHook{shipout/foreground}[*]
        }
    }
}{}

\end{warpHTML}

\begin{warpall}
\ifcsvoid{@titlepagefalse}{
    \newif\if@titlepage
    \@titlepagefalse
}{}
\end{warpall}
\begin{warpall}
\providerobustcmd{\affiliation}[1]{}
\end{warpall}
\begin{warpprint}
\AtBeginEnvironment{titlepage}{
\renewrobustcmd{\affiliation}[1]{\\ \textsc{\small#1}}
}

\AtBeginDocument{
\@ifpackageloaded{titling}{
\AtBeginEnvironment{titlingpage}{
\renewrobustcmd{\affiliation}[1]{\\ \textsc{\small#1}}
}
}{}% titling loaded
}% AtBeginDocument
\end{warpprint}
\begin{warpHTML}
\DeclareDocumentEnvironment{titlepage}{}
{
\renewrobustcmd{\affiliation}[1]{\\ \InlineClass{affiliation}{##1}}
\LWR@printpendingfootnotes
\LWR@forcenewpage
\BlockClass{titlepage}
}
{
\endBlockClass
\LWR@printpendingfootnotes
}
\end{warpHTML}
\begin{warpprint}
\newcommand*{\printthanks}{\@thanks}
\end{warpprint}

\begin{warpHTML}
\newcommand*{\printthanks}{\LWR@stoppars\@thanks\LWR@startpars}
\end{warpHTML}

\begin{warpHTML}
\newcommand*{\printtitle}
{%
    \LWR@stoppars%
    \LWR@htmltag{\LWR@tagtitle}%
    \@title%
    \LWR@htmltag{\LWR@tagtitleend}%
    \LWR@startpars%
}
\newcommand*{\LWR@printthetitle}
{%
    \LWR@stoppars%
    \LWR@htmltag{\LWR@tagtitle}%
    \thetitle%
    \LWR@htmltag{\LWR@tagtitleend}%
    \LWR@startpars%
}

\newcommand*{\printauthor}{
\begin{BlockClass}{author}
\renewcommand{\and}{%
\end{BlockClass}
\begin{BlockClass}{oneauthor}
}
\begin{BlockClass}{oneauthor}
\@author
\end{BlockClass}
\end{BlockClass}
}

\newcommand*{\printdate}{%
\begin{BlockClass}{titledate}
\@date
\end{BlockClass}
}

\end{warpHTML}

\begin{warpprint}


\newcommand*{\printtitle}{{\Huge\@title}}

\newcommand*{\printauthor}
    {{\large\begin{tabular}[t]{c}\@author\end{tabular}}}

\newcommand*{\printdate}{{\small\textit{\@date}}}
\end{warpprint}
\begin{warpHTML}
\@ifclassloaded{memoir}
{
\newcommand{\LWR@setfootnoteseries}{%
    \renewcommand\thefootnote{\@arabic\c@footnote}%
}
}{% not memoir
\if@titlepage
\newcommand{\LWR@setfootnoteseries}{%
    \renewcommand\thefootnote{\@arabic\c@footnote}%
}
\else
\newcommand{\LWR@setfootnoteseries}{%
    \renewcommand\thefootnote{\@fnsymbol\c@footnote}%
}
\fi
}% not memoir
\newcommand*{\LWR@maketitlesetup}{%
\LWR@setfootnoteseries%
\def\@makefnmark{%
    \textsuperscript{\thefootnote}%
}
\long\def\@makefntext##1{%
\textsuperscript{\@thefnmark}~%
##1%
}%
}

\def\LWR@HTML@@fnsymbol#1{%
    \ifcase#1\or *\or
    \HTMLentity{dagger}\or
    \HTMLentity{Dagger}\or
    \HTMLentity{sect}\or
    \HTMLentity{para}\or
    \HTMLunicode{2016}\or
    **\or
    \HTMLentity{dagger}\HTMLentity{dagger} \or
    \HTMLentity{Dagger}\HTMLentity{Dagger} \else
    \@ctrerr\fi%
}
\LWR@formatted{@fnsymbol}
\renewcommand*{\maketitle}{%
\begin{titlepage}
\LWR@maketitlesetup
\@maketitle
\LWR@stoppars\@thanks\LWR@startpars
\end{titlepage}
\setcounter{footnote}{0}%
\global\let\thanks\relax
\global\let\maketitle\relax
\global\let\@maketitle\relax
\global\let\@thanks\@empty
\global\let\@author\@empty
\global\let\@date\@empty
\global\let\@title\@empty
\global\let\title\relax
\global\let\author\relax
\global\let\date\relax
\global\let\and\relax
}
\DeclareDocumentCommand{\@maketitle}{}{%
    \LWR@stoppars%
    \LWR@htmltag{\LWR@tagtitle}%
    \@title%
    \LWR@htmltag{\LWR@tagtitleend}%
    \LWR@startpars%
    \begin{BlockClass}{author}%
    \renewcommand*{\cr}{}%
    \renewcommand*{\crcr}{}%
    \renewcommand*{\noalign}{}%
        \renewcommand{\and}{%
            \end{BlockClass}%
            \begin{BlockClass}{oneauthor}%
        }%
        \begin{BlockClass}{oneauthor}%
            \@author%
        \end{BlockClass}%
    \end{BlockClass}%
    \begin{BlockClass}{titledate}%
    \@date%
    \end{BlockClass}%
}

\newcommand*{\LWR@titlingmaketitle}{%
\LWR@stoppars\@thanks\LWR@startpars
\LWR@maketitlesetup
\@maketitle
\LWR@stoppars\@thanks\LWR@startpars
}
\end{warpHTML}
\begin{warpall}

\newcommand*{\AddSubtitlePublished}{%
\@ifpackageloaded{titling}{% yes titling package
    \newcommand{\@published}{}%
    \newcommand{\published}[1]{\gdef\@published{##1}}%
    \renewcommand*{\maketitlehooka}{\printpublished}%
    \newcommand*{\printpublished}{%
        \warpprintonly{\begin{center}\unskip}%
        \begin{BlockClass}{published}%
        \warpprintonly{\large\itshape}%
        \@published%
        \end{BlockClass}%
        \warpprintonly{\end{center}}%
    }%
    \newcommand{\@subtitle}{}%
    \newcommand{\subtitle}[1]{\gdef\@subtitle{##1}}%
    \renewcommand*{\maketitlehookb}{\printsubtitle}%
    \newcommand*{\printsubtitle}{%
        \warpprintonly{\begin{center}\unskip}%
        \begin{BlockClass}{subtitle}%
        \warpprintonly{\Large\itshape}%
        \@subtitle%
        \end{BlockClass}%
        \warpprintonly{\end{center}}%
    }%
}% yes titling package
{% no titling package
    \def\@published{}%
    \DeclareDocumentCommand{\published}{m}{\gdef\@published{##1}}%
    \DeclareDocumentCommand{\printpublished}{}{}%
    \def\@subtitle{}%
    \DeclareDocumentCommand{\subtitle}{m}{\gdef\@subtitle{##1}}%
    \DeclareDocumentCommand{\printsubtitle}{}{}%
}% no titling package
}% \AddSubtitlePublished

\end{warpall}

\begin{warpHTML}

\providecommand*{\abstractname}{Abstract}
\DeclareDocumentEnvironment{abstract}{O{\abstractname}}
{
    \LWR@forcenewpage
    \BlockClass{abstract}
    \BlockClassSingle{abstracttitle}{#1}
}
{
    \endBlockClass
}

\end{warpHTML}



\begin{warpall}
\newcommand{\attribution}[1]{
    \begin{flushright}
    \unskip
    #1
    \end{flushright}%
}
\end{warpall}
\begin{warpHTML}
\newcommand{\LWR@HTML@attribution}[1]{%
    \LWR@stoppars%
    \begin{BlockClass}{attribution}
    #1
    \end{BlockClass}
    \LWR@startpars%
}
\LWR@formatted{attribution}
\end{warpHTML}


\begin{warpHTML}
\newenvironment*{LWR@HTML@quote}
{
    \LWR@forcenewpage
    \LWR@htmlblocktag{blockquote}
}
{\LWR@htmlblocktag{/blockquote}}

\LWR@formattedenv{quote}
\newenvironment*{LWR@HTML@quotation}
{
    \LWR@forcenewpage
    \LWR@htmlblocktag{blockquote}
}
{\LWR@htmlblocktag{/blockquote}}

\LWR@formattedenv{quotation}

\end{warpHTML}

\begin{warpHTML}
\newenvironment{LWR@HTML@verse}
               {\let\\\newline% lwarp
                \list{}{\itemsep      \z@
                        \itemindent   -1.5em%
                        \listparindent\itemindent
                        \rightmargin  \leftmargin
                        \advance\leftmargin 1.5em}%
                \item\relax}
               {\endlist}

\LWR@formattedenv{verse}
\end{warpHTML}
\begin{warpall}

\newlength{\HTMLvleftskip}
\setlength{\HTMLvleftskip}{1em}

\newlength{\HTMLleftmargini}
\setlength{\HTMLleftmargini}{4.5em}

\end{warpall}



\begin{warpall}
\newlength{\VerbatimHTMLWidth}
\setlength{\VerbatimHTMLWidth}{4in}
\end{warpall}

\begin{warpHTML}

\newbool{LWR@verbtags}
\booltrue{LWR@verbtags}

\LetLtxMacro\LWR@orig@verb@egroup\verb@egroup

\def\LWR@verb@egroup@endspan{%
    \LWR@orig@verb@egroup%
    \LWR@htmltag{/span}%
    \endgroup%
}
\xpretocmd{\verb}
    {%
        \begingroup%
        \LWR@htmltag{span class=\textquotedbl{}texttt\textquotedbl}%
        \let\verb@egroup\LWR@verb@egroup@endspan%
    }
    {}
    {\LWR@patcherror{LaTeX}{verb}}

\newcommand*{\LWR@atbeginverbatim}[2][]
{%
\LWR@stoppars%
\setlength{\parskip}{0ex}%
\setlength{\topsep}{0pt}%
\setlength{\partopsep}{0pt}%
            \hbadness=10000\relax%
\ifbool{LWR@verbtags}{%
    \LWR@htmltag{pre class=\textquotedbl#2\textquotedbl%
        \ifthenelse{\equal{#1}{}}{}{ style=\textquotedbl#1\textquotedbl}%
    }%
    \par%
}{}%
\begingroup%
\LWR@print@normalfont%
\LWR@origttfamily%
\LWR@print@scriptsize%
\LWR@restoreoriglists%
\LWR@hook@processingtags%
\LWR@select@print@hspace%
}

\newcommand*{\LWR@afterendverbatim}{%
\endgroup%
\par%
\ifbool{LWR@verbtags}{%
    \noindent\LWR@htmltag{/pre}\par% pre
}{}%
\LWR@startpars%
}

\newcommand{\LWR@HTML@verbatim@input}[2]{%
    \ifbool{LWR@verbtags}{\LWR@forcenewpage}{}%
    \LWR@atbeginverbatim{Verbatim}%
    \LWR@print@verbatim@input{#1}{#2}%
    \LWR@afterendverbatim%
}

\LWR@formatted{verbatim@input}

\AfterEndPreamble{
\LWR@traceinfo{Patching verbatim.}
\AtBeginEnvironment{verbatim}{%
    \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
        {}%
        {%
            \LWR@forcenewpage%
            \LWR@atbeginverbatim{verbatim}%
        }%
}
\AfterEndEnvironment{verbatim}{%
    \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
        {}%
        {%
            \LWR@afterendverbatim%
        }%
}
}

\newcommand*{\LWR@HTML@tabbing}{%
    \LWR@forcenewpage%
    \LWR@atbeginverbatim{tabbing}%
    \let\enskip\LWR@origenskip%
    \let\quad\LWR@origquad%
    \let\qquad\LWR@origqquad%
    \let~\LWR@origtilde%
    \let\,\LWR@origcomma%
    \let\thinspace\LWR@origthinspace%
    \let\negthinspace\LWR@orignegthinspace%
    \LWR@print@tabbing%
}

\newcommand*{\LWR@HTML@endtabbing}{%
    \LWR@print@endtabbing%
    \LWR@afterendverbatim%
}

\LWR@formatted{tabbing}
\LWR@formatted{endtabbing}

\end{warpHTML}


\begin{warpHTML}
\renewcommand{\@begintheorem}[2]{%
\LWR@forcenewpage
    \LWR@printpendingfootnotes%                   lwarp
\BlockClass{theoremcontents}
\trivlist
\item[\InlineClass{theoremlabel}{#1\ #2\ }]\itshape
}
\ifundef{\@opargbegintheorem}{}{
    \renewcommand{\@opargbegintheorem}[3]{%
        \LWR@forcenewpage
        \BlockClass{theoremcontents}
        \trivlist
        \item[\InlineClass{theoremlabel}{#1\ #2\ (#3)\ }]\itshape
    }
}
\renewcommand*{\@endtheorem}{%
\endtrivlist
    \LWR@printpendingfootnotes%                   lwarp
\endBlockClass% theoremcontents
}

\end{warpHTML}

\begin{warpHTML}

\newcommand*{\LWR@printcloselist}{\LWR@printcloseitemize}

\newcommand*{\LWR@printopenlist}{%
    ul style=\textquotedbl\LWR@print@mbox{list-style-type:none}\textquotedbl{}%
}

\AtBeginDocument{
\def\@mklab#1{%
    #1}
\let\makelabel\@mklab
}

\def\@donoparitem{%
  \@noparitemfalse
}
\def\LWR@HTML@item[#1]{%
\LWR@traceinfo{@item}%
  \if@noparitem
    \@donoparitem
  \else
        \par
    \ifhmode
        \par
    \fi
    \if@newlist
      \if@nobreak
        \@nbitem
      \else
      \fi
    \else
    \fi
    \global\@inlabeltrue
  \fi
    \@minipagefalse
    \global\@newlistfalse
  \if@noitemarg
    \@noitemargfalse
    \if@nmbrlist
      \refstepcounter\@listctr
    \fi
  \fi
    \makelabel{#1} % extra space
  \ignorespaces%
}

\def\@nbitem{%
}

\newcommand*{\LWR@listitem}{%
\LWR@stoppars%
\LWR@startnewdepth{listitem}%
\LWR@htmltag{li}%
\LWR@startpars%
\LWR@origitem%
}

\newcommand*{\LWR@nulllistfills}{%
\renewcommand*{\hss}{}%
\renewcommand*{\llap}[1]{##1}%
\renewcommand*{\rlap}[1]{##1}%
\renewcommand*{\hfil}{}%
\renewcommand*{\hfilneg}{}%
\renewcommand*{\hfill}{}%
}

\newcommand*{\LWR@liststart}{%
\LWR@traceinfo{LWR@liststart}%
\LWR@stoppars%
\LWR@pushoneclose{list}%
\LWR@htmltag{\LWR@printopenlist}\LWR@orignewline%
\LWR@startpars%
\setlength{\topsep}{0pt}%
\setlength{\partopsep}{0pt}%
\setlength{\itemsep}{0pt}%
\setlength{\parsep}{0pt}%
\setlength{\leftmargin}{0pt}%
\setlength{\rightmargin}{0pt}%
\setlength{\listparindent}{0pt}%
\setlength{\itemindent}{0pt}%
\setlength{\labelsep}{1em}%
\LWR@nulllistfills%
}
\newcommand*{\LWR@listend}{%
\LWR@traceinfo{LWR@listend}%
\LWR@stoppars%
\LWR@closeprevious{list}%
\LWR@startpars%
}


\newcommand*{\LWR@itemizeitem}{%
\LWR@stoppars%
\LWR@startnewdepth{listitem}%
\LWR@htmltag{li}%
\LWR@startpars%
\LWR@origitem%
}

\newcommand*{\LWR@itemizestart}{%
\renewcommand*{\LWR@printcloselist}{\LWR@printcloseitemize}
\renewcommand*{\LWR@printopenlist}{%
    ul style=\textquotedbl\LWR@print@mbox{list-style-type:none}\textquotedbl{}%
}
\let\item\LWR@itemizeitem%
\LWR@nulllistfills%
}



\newcommand*{\LWR@enumeratestart}{%
\renewcommand*{\LWR@printcloselist}{\LWR@printcloseitemize}
\renewcommand*{\LWR@printopenlist}{%
    ul style=\textquotedbl\LWR@print@mbox{list-style-type:none}\textquotedbl{}%
}
\let\item\LWR@itemizeitem%
\LWR@nulllistfills%
}


\newcommand*{\LWR@descitem}[1][]%
{%
\LWR@stoppars%
\LWR@setlatestname{#1}%
\LWR@startnewdepth{descitem}%
\begingroup%
\let\LWR@orig@desc@makelabel\makelabel
\renewcommand*{\makelabel}[1]{%
    \LWR@htmltag{dt}%
    \LWR@orig@desc@makelabel{#1}%
    \LWR@htmltag{/dt}%
}
\LWR@select@html@nohspace%
\LWR@origitem[#1]%
\endgroup%
\LWR@orignewline%
\LWR@htmltag{dd}%
\LWR@startpars%
}

\newcommand*{\LWR@descriptionstart}{%
    \renewcommand*{\LWR@printcloselist}{\LWR@printclosedescription}
    \renewcommand*{\LWR@printopenlist}{dl}
    \let\item\LWR@descitem%
    \LWR@nulllistfills%
    \renewcommand{\footnote}[2][]{%
        \ifblank{##1}%
        {%
            \stepcounter\@mpfn
            \protected@xdef\@thefnmark{\thempfn}%
            \@footnotemark%\@footnotetext
        }%
        {%
            \begingroup
            \csname c@\@mpfn\endcsname ##1\relax
            \unrestored@protected@xdef\@thefnmark{\thempfn}%
            \endgroup
            \@footnotemark%\@footnotetext
        }%
    }%
    %
    \renewcommand{\footnotemark}[1][]{%
        \ifblank{##1}%
        {%
            \stepcounter{footnote}%
            \protected@xdef\@thefnmark{\thefootnote}%
            \@footnotemark%
        }%
        {%
            \begingroup%
            \c@footnote ##1\relax%
            \unrestored@protected@xdef\@thefnmark{\thefootnote}%
            \endgroup%
            \@footnotemark%
        }%
    }%
}


\newcommand*{\LWR@patchlists}{%
    \LetLtxMacro\item\LWR@listitem%
    \LetLtxMacro\@item\LWR@HTML@item%
    \renewcommand*{\@trivlist}{%
        \LWR@traceinfo{@trivlist start}%
        \LWR@liststart%
        \LWR@orig@trivlist%
        \LWR@traceinfo{@trivlist done}%
    }%
    \renewcommand*{\trivlist}{%
        \LWR@traceinfo{trivlist}%
        \LWR@origtrivlist%
    }%
    \renewcommand*{\endtrivlist}{%
        \LWR@traceinfo{endtrivlist start}%
        \LWR@origendtrivlist\LWR@listend%
        \LWR@traceinfo{endtrivlist done}%
    }%
    \renewcommand*{\itemize}{%
        \LWR@itemizestart\LWR@origitemize%
    }%
    \renewcommand*{\enumerate}{%
        \LWR@enumeratestart\LWR@origenumerate%
    }%
    \renewcommand*{\description}{%
        \LWR@descriptionstart\LWR@origdescription%
    }%
}

\newcommand*{\LWR@restoreoriglists}{%
    \LWR@traceinfo{LWR@restoreoriglists}%
    \LetLtxMacro\item\LWR@origitem%
    \LetLtxMacro\@item\LWR@orig@item%
    \let\@trivlist\LWR@orig@trivlist%
    \let\trivlist\LWR@origtrivlist%
    \let\endtrivlist\LWR@origendtrivlist%
    \LetLtxMacro\itemize\LWR@origitemize%
    \LetLtxMacro\enditemize\LWR@endorigitemize%
    \LetLtxMacro\enumerate\LWR@origenumerate%
    \LetLtxMacro\endenumerate\LWR@endorigenumerate%
    \LetLtxMacro\description\LWR@origdescription%
    \LetLtxMacro\enddescription\LWR@endorigdescription%
    \let\@mklab\LWR@orig@mklab%
    \let\makelabel\LWR@origmakelabel%
    \let\@donoparitem\LWR@orig@donoparitem%
    \let\@nbitem\LWR@orig@nbitem%
}

\end{warpHTML}

\begin{warpHTML}
\LetLtxMacro\hdashline\hline
\LetLtxMacro\cdashline\cline
\LetLtxMacro\firsthdashline\hline
\LetLtxMacro\lasthdashline\hline


\newcommand\LWR@mynexttoken\relax




\def\LWR@futurenonspacelet#1{\def\LWR@cs{#1}%
\afterassignment\LWR@fnslone\let\nexttoken= }

\def\LWR@fnslone{\expandafter\futurelet\LWR@cs\LWR@fnsltwo}

\def\LWR@fnsltwo{%
\expandafter\ifx\LWR@cs\@sptoken\let\next=\LWR@fnslthree%
\else\let\next=\nexttoken\fi\next}

\def\LWR@fnslthree{\afterassignment\LWR@fnslone\let\next= }

\newcommand*{\LWR@getmynexttoken}{%
    \LWR@traceinfo{LWR@getmynexttoken}%
    \LWR@futurenonspacelet\LWR@mynexttoken\LWR@tabledatacolumntag
}


\newbool{LWR@startedrow}
\boolfalse{LWR@startedrow}

\newbool{LWR@tabularcelladded}
\boolfalse{LWR@tabularcelladded}

\newcounter{LWR@hlines}

\newcounter{LWR@hdashedlines}

\newbool{LWR@doingtbrule}
\boolfalse{LWR@doingtbrule}

\newbool{LWR@doingcmidrule}
\boolfalse{LWR@doingcmidrule}

\newbool{LWR@tableparcell}

\newbool{LWR@skippingmrowcell}

\newbool{LWR@skippingmcolrowcell}

\newbool{LWR@usedmultirow}

\newbool{LWR@foundmrowcell}

\newbool{LWR@skipatbang}

\newbool{LWR@emptyatbang}

\newbool{LWR@intabularmetadata}
\boolfalse{LWR@intabularmetadata}

\newbool{LWR@exitingtabular}

\newbool{LWR@tabularmutemods}

\newbool{LWR@validtablecol}
\newbool{LWR@opttablecol}

\newbool{LWR@tdhavecellstyle}

\newcounter{LWR@tabulardepth}
\setcounter{LWR@tabulardepth}{0}
\newcounter{LWR@tabularpardepth}
\setcounter{LWR@tabularpardepth}{0}
\newcommand*{\LWR@colsresult}{}%temp storage for column format results
\newcommand*{\LWR@pposition}{}
\newcommand*{\LWR@pleft}{}
\newcommand*{\LWR@pright}{}


\providecommand*{\LWR@strresult}{}
\providecommand*{\LWR@strresulttwo}{}

\newcommand*{\LWR@origcolspec}{}

\newcounter{LWR@tablecolspecwidth}

\newcounter{LWR@tablecolspecindex}

\newcounter{LWR@tableLaTeXcolindex}

\newcounter{LWR@tabletotalLaTeXcols}

\newcounter{LWR@tabletotalLaTeXcolsnext}


\newcounter{LWR@cellcolordepth}


\newcounter{LWR@tablemulticolswidth}
\newcounter{LWR@tablemulticolspos}

\newcounter{LWR@mcolvertbarsl}
\newcounter{LWR@mcolvertbarsr}
\newcounter{LWR@mcolvertbarsldash}
\newcounter{LWR@mcolvertbarsrdash}
\newbool{LWR@mcolvertbaronleft}

\newbool{LWR@starredlongtable}
\boolfalse{LWR@starredlongtable}


\newcounter{LWR@midrulecounter}


\newcommand*{\LWR@insertatbangcols}{%
    \ifbool{LWR@skipatbang}%
    {}%
    {%
        \LWR@printatbang{at}{\arabic{LWR@tableLaTeXcolindex}}%
        \LWR@printatbang{bang}{\arabic{LWR@tableLaTeXcolindex}}%
    }%
}

\newcommand*{\LWR@closetabledatacell}{%
    \booltrue{LWR@intabularmetadata}%
    \ifbool{LWR@exitingtabular}%
    {%
        \LWR@stoppars%
    }%
    {% not exiting tabular
        \ifboolexpr{bool{LWR@skippingmrowcell} or bool{LWR@skippingmcolrowcell}}%
        {%
            \LWR@stoppars%
            \ifbool{LWR@skippingmcolrowcell}%
                {}%
                {\LWR@insertatbangcols}%
        }%
        {% not skippingmrowcell
            \unskip%
            \ifboolexpr{%
                bool{LWR@tabularmutemods} or
                bool{LWR@skipatbang} or
                bool{LWR@emptyatbang}
            }%
                {}%
                {%
                    \LWR@getexparray{LWR@colafterspec}%
                        {\arabic{LWR@tableLaTeXcolindex}}%
                }%
            \LWR@stoppars%
            \boolfalse{LWR@tableparcell}%
            \whileboolexpr{test {\ifnumcomp{\value{LWR@cellcolordepth}}{>}{0}}}{%
                \LWR@htmltag{/div}\LWR@orignewline%
                \defaddtocounter{LWR@cellcolordepth}{-1}%
            }%
            \leavevmode\unskip\LWR@htmltag{/td}\LWR@orignewline%
            \global\booltrue{LWR@tabularcelladded}%
            \LWR@insertatbangcols%
        }% not skipping mrowcell
    }% not exiting tabular
    \boolfalse{LWR@skippingmrowcell}%
    \boolfalse{LWR@skippingmcolrowcell}%
    \boolfalse{LWR@skipatbang}%
    \def\LWR@cellHTMLcolor{}%
    \def\LWR@columnHTMLcolor{}%
    \defcounter{LWR@cellcolordepth}{0}%
}
\let\LWR@origampmacro&

\end{warpHTML}
\begin{warpHTML}
\newcommand*{\LWR@tabularampersand}{%
    \LWR@traceinfo{LWR@tabularampersand}%
    \ifnumcomp{\value{LWR@tabulardepth}}{>}{0}%
    {%
        \unskip%
        \LWR@closetabledatacell%
        \defaddtocounter{LWR@tableLaTeXcolindex}{1}%
        \global\boolfalse{LWR@tabularcelladded}%
        \LWR@getmynexttoken%
    }%
    {%
        \LWR@origampmacro%
    }%
}


\newcommand*{\LWR@tabularfinishrow}{%
    \ifboolexpr{%
        not bool {LWR@exitingtabular} or%
        bool{LWR@doingtbrule} or%
        bool{LWR@doingcmidrule} or%
        test{\ifnumcomp{\value{LWR@hlines}}{>}{0}} or%
        test{\ifnumcomp{\value{LWR@hdashedlines}}{>}{0}} or%
        bool{LWR@startedrow}%
    }{%
    \ifbool{LWR@exitingtabular}{%
        \booltrue{LWR@tabularmutemods}%
    }{%
        \boolfalse{LWR@tabularmutemods}%
    }%
    \boolfalse{LWR@exitingtabular}%
    \whileboolexpr{%
        test {
            \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{<}
                {\value{LWR@tabletotalLaTeXcols}}
        } or %
        (%
            bool{LWR@intabularmetadata} and%
            not bool{LWR@tabularcelladded} and%
            test {
                \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{=}
                    {\value{LWR@tabletotalLaTeXcols}}
            }%
        )%
    }%
    {%
        \LWR@tabledatasinglecolumntag%
        \LWR@closetabledatacell%
        \defaddtocounter{LWR@tableLaTeXcolindex}{1}%
        \global\boolfalse{LWR@tabularcelladded}%
        \booltrue{LWR@emptyatbang}%
        \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{<}
                {\value{LWR@tabletotalLaTeXcols}}%
            {\LWR@getmynexttoken}%
            {}%
    }%
    \ifbool{LWR@tabularmutemods}{%
        \booltrue{LWR@exitingtabular}%
    }{%
        \boolfalse{LWR@exitingtabular}%
    }%
    \boolfalse{LWR@tabularmutemods}%
    \boolfalse{LWR@emptyatbang}%
    }{}% ifboolexpr
}


\NewDocumentCommand{\LWR@tabularendofline}{s o}{%
    \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{<}
            {\value{LWR@tabletotalLaTeXcols}}%
        {\LWR@tabularfinishrow}%
        {\LWR@closetabledatacell}%
    \LWR@htmltag{/tr}\LWR@orignewline%
    \@rowc@lors%
    \booltrue{LWR@intabularmetadata}%
    \boolfalse{LWR@startedrow}%
    \defcounter{LWR@hlines}{0}%
    \defcounter{LWR@hdashedlines}{0}%
    \boolfalse{LWR@doingtbrule}%
    \boolfalse{LWR@doingcmidrule}%
    \LWR@clearmidrules%
    \def\LWR@rowHTMLcolor{}%
    \defcounter{LWR@tableLaTeXcolindex}{1}%
    \global\boolfalse{LWR@tabularcelladded}%
    \LWR@stoppars%
    \LWR@origpar%
    \LWR@getmynexttoken%
}

\newcommand*{\LWR@columnspeclookahead}[1]{%
    \setcounter{LWR@tempcountone}{\value{LWR@tablecolspecindex}}%
    \addtocounter{LWR@tempcountone}{#1}%
    \fullexpandarg%
    \StrChar{\LWR@origcolspec}{\arabic{LWR@tempcountone}}[\LWR@strresulttwo]%
        \exploregroups%
        \StrChar{\LWR@strresulttwo}{1}[\LWR@strresulttwo]%
        \noexploregroups%
}

\newcommand*{\LWR@colparameter}{}
\newcommand*{\LWR@parseatcolumn}{%
    \LWR@traceinfo{at column}%
    \defaddtocounter{LWR@tablecolspecindex}{1}%
    \LWR@traceinfo{about to read the next token:}%
    \expandarg%
    \StrChar{\LWR@origcolspec}%
        {\arabic{LWR@tablecolspecindex}}[\LWR@colparameter]%
    \fullexpandarg%
    \LWR@traceinfo{have now read the next token}%
    \ifnumcomp{\value{LWR@tabletotalLaTeXcols}}{=}{0}%
    {% left edge of the table:
        \LWR@traceinfo{at the left edge}%
        \LWR@setexparray{LWR@colatspec}%
            {leftedge}%
            {\expandafter\@firstofone\LWR@colparameter}%
        \LWR@traceinfo{at the left edge: %
            \LWR@getexparray{LWR@colatspec}{leftedge}}%
    }%
    {% not at the left edge:
        \LWR@traceinfo{not at the left edge}%
        \LWR@setexparray{LWR@colatspec}%
            {\arabic{LWR@tabletotalLaTeXcols}}%
            {\expandafter\@firstofone\LWR@colparameter}%
        \LWR@traceinfo{at \arabic{LWR@tabletotalLaTeXcols}%
        : % space
        \LWR@getexparray{LWR@colatspec}{\arabic{LWR@tabletotalLaTeXcols}}}%
    }%
    \let\LWR@colparameter\relax%
    \booltrue{LWR@validtablecol}%
}
\newcommand*{\LWR@parsebangcolumn}{%
    \LWR@traceinfo{bang column}%
    \defaddtocounter{LWR@tablecolspecindex}{1}%
    \LWR@traceinfo{about to read the next token:}%
    \expandarg%
    \StrChar{\LWR@origcolspec}%
        {\arabic{LWR@tablecolspecindex}}[\LWR@colparameter]%
    \fullexpandarg%
    \LWR@traceinfo{have now read the next token}%
    \ifnumcomp{\value{LWR@tabletotalLaTeXcols}}{=}{0}%
    {% left edge of the table:
        \LWR@traceinfo{at the left edge}%
        \LWR@setexparray{LWR@colbangspec}%
            {leftedge}%
            {\expandafter\@firstofone\LWR@colparameter}%
    }%
    {% not at the left edge:
        \LWR@traceinfo{not at the left edge}%
        \LWR@setexparray{LWR@colbangspec}%
            {\arabic{LWR@tabletotalLaTeXcols}}%
            {\expandafter\@firstofone\LWR@colparameter}%
        \LWR@traceinfo{bang \arabic{LWR@tabletotalLaTeXcols}: \LWR@colparameter!}%
    }%
    \let\LWR@colparameter\relax%
    \booltrue{LWR@validtablecol}%
}
\newcommand*{\LWR@parsebeforecolumn}{%
    \defaddtocounter{LWR@tablecolspecindex}{1}%
    \expandarg%
    \StrChar{\LWR@origcolspec}%
        {\arabic{LWR@tablecolspecindex}}[\LWR@colparameter]%
    \fullexpandarg%
    \LWR@setexparray{LWR@colbeforespec}%
        {\arabic{LWR@tabletotalLaTeXcolsnext}}%
        {\expandafter\@firstofone\LWR@colparameter}%
    \let\LWR@colparameter\relax%
    \booltrue{LWR@validtablecol}%
}
\newcommand*{\LWR@parseaftercolumn}{%
    \defaddtocounter{LWR@tablecolspecindex}{1}%
    \expandarg%
    \StrChar{\LWR@origcolspec}%
        {\arabic{LWR@tablecolspecindex}}[\LWR@colparameter]%
    \fullexpandarg%
    \LWR@setexparray{LWR@colafterspec}%
        {\arabic{LWR@tabletotalLaTeXcols}}%
        {\expandafter\@firstofone\LWR@colparameter}%
    \let\LWR@colparameter\relax%
    \booltrue{LWR@validtablecol}%
}
\newcommand*{\LWR@parsebarcolumn}{%
    \LWR@traceinfo{LWR@parsebarcolumn}%
    \ifnumcomp{\value{LWR@tabletotalLaTeXcols}}{=}{0}%
    {% left edge of the table:
        \edef\LWR@tempone{\LWR@getexparray{LWR@colbarspec}{leftedge}}%
        \ifdefstring{\LWR@tempone}{tvertbarl}%
        {\LWR@setexparray{LWR@colbarspec}{leftedge}{tvertbarldouble}}%
        {\LWR@setexparray{LWR@colbarspec}{leftedge}{tvertbarl}}%
    }%
    {% not at the left edge:
        \edef\LWR@tempone{%
            \LWR@getexparray{LWR@colbarspec}{\arabic{LWR@tabletotalLaTeXcols}}%
        }%
        \ifdefstring{\LWR@tempone}{tvertbarr}%
        {%
            \LWR@setexparray{LWR@colbarspec}%
                {\arabic{LWR@tabletotalLaTeXcols}}{tvertbarrdouble}%
        }%
        {%
            \LWR@setexparray{LWR@colbarspec}%
                {\arabic{LWR@tabletotalLaTeXcols}}{tvertbarr}%
        }%
    }%
    \booltrue{LWR@validtablecol}%
}
\newcommand*{\LWR@parsecoloncolumn}{%
    \LWR@traceinfo{LWR@parsecoloncolumn}%
    \ifnumcomp{\value{LWR@tabletotalLaTeXcols}}{=}{0}%
    {% left edge of the table:
        \edef\LWR@tempone{\LWR@getexparray{LWR@colbarspec}{leftedge}}%
        \ifdefstring{\LWR@tempone}{tvertbarldash}%
        {\LWR@setexparray{LWR@colbarspec}{leftedge}{tvertbarldoubledash}}%
        {\LWR@setexparray{LWR@colbarspec}{leftedge}{tvertbarldash}}%
    }%
    {% not at the left edge:
        \edef\LWR@tempone{%
            \LWR@getexparray{LWR@colbarspec}{\arabic{LWR@tabletotalLaTeXcols}}%
        }%
        \ifdefstring{\LWR@tempone}{tvertbarrdash}%
        {\LWR@setexparray{LWR@colbarspec}%
            {\arabic{LWR@tabletotalLaTeXcols}}{tvertbarrdoubledash}}%
        {\LWR@setexparray{LWR@colbarspec}%
            {\arabic{LWR@tabletotalLaTeXcols}}{tvertbarrdash}}%
    }%
    \booltrue{LWR@validtablecol}%
}
\newcommand*{\LWR@parsesemicoloncolumn}{%
    \LWR@parsecoloncolumn%
    \defaddtocounter{LWR@tablecolspecindex}{1}%
}
\newcommand*{\LWR@parsenormalcolumn}[1]{%
    \defaddtocounter{LWR@tabletotalLaTeXcols}{1}%
    \defaddtocounter{LWR@tabletotalLaTeXcolsnext}{1}%
    \LWR@setexparray{LWR@tablecolspec}{\arabic{LWR@tabletotalLaTeXcols}}{#1}%
    \LWR@traceinfo{normal column \arabic{LWR@tabletotalLaTeXcols}: #1}%
    \LWR@setexparray{LWR@colatspec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
    \LWR@setexparray{LWR@colbangspec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
    \LWR@setexparray{LWR@colbeforespec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
    \LWR@setexparray{LWR@colafterspec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
    \LWR@setexparray{LWR@colbarspec}{\arabic{LWR@tabletotalLaTeXcolsnext}}{}%
    \booltrue{LWR@validtablecol}%
}

\newcommand*{\LWR@parsepcolumn}[1]{%
    \LWR@parsenormalcolumn{#1}%
    \defaddtocounter{LWR@tablecolspecindex}{1}%
}

\newcommand*{\LWR@parsewcolumn}{%
    \LWR@columnspeclookahead{1}%
    \expandafter\LWR@parsenormalcolumn\expandafter{\LWR@strresulttwo}%
    \defaddtocounter{LWR@tablecolspecindex}{2}%
}

\newcommand*{\LWR@parsestarcolumn}{%
    \defaddtocounter{LWR@tablecolspecindex}{2}%
}

\newcommand*{\LWR@parseDcolumn}[1]{%
    \LWR@parsenormalcolumn{#1}%
    \defaddtocounter{LWR@tablecolspecindex}{3}%
}


\newcount\LWR@starcount
\newcommand*{\LWR@expcolspec}{}
\newcounter{LWR@splitstarindex}
\newcounter{LWR@splitstarcopies}
\newcommand*{\LWR@splitstarcontents}{}
\newcommand*{\expandcolspec}{%
    \StrPosition{\LWR@origcolspec}{*}[\LWR@tempone]%
    \whileboolexpr{ test {\ifnumgreater{\LWR@tempone}{0}}}%
    {%
        \setcounter{LWR@splitstarindex}{\LWR@tempone}%
        \addtocounter{LWR@splitstarindex}{-1}%
        \StrLeft{\LWR@origcolspec}{\value{LWR@splitstarindex}}[\LWR@expcolspec]%
        \addtocounter{LWR@splitstarindex}{2}%
        \StrChar{\LWR@origcolspec}{\value{LWR@splitstarindex}}[\LWR@tempone]%
        \setcounter{LWR@splitstarcopies}{\expandafter\@firstofone\LWR@tempone}%
        \addtocounter{LWR@splitstarindex}{1}%
        \StrChar{\LWR@origcolspec}{\value{LWR@splitstarindex}}[\LWR@splitstarcontents]%
        \ifnumgreater{\value{LWR@splitstarcopies}}{0}%
        {%
            \LWR@starcount=\value{LWR@splitstarcopies}%
            \loop
                \appto\LWR@expcolspec{%
                    \expandafter\@firstofone\LWR@splitstarcontents%
                }%
                \advance \LWR@starcount -1
            \ifnum \LWR@starcount>0 \repeat
        }{}%
        \StrGobbleLeft{\LWR@origcolspec}{\value{LWR@splitstarindex}}[\colspecremainder]%
        \appto{\LWR@expcolspec}{\colspecremainder}%
        \edef\LWR@origcolspec{\LWR@expcolspec}%
        \StrPosition{\LWR@origcolspec}{*}[\LWR@tempone]%
    }%
}


\newcommand*{\LWR@parsetablecols}[1]{%
    \LWR@traceinfo{LWR@parsetablecols}%
    \renewcommand*{\LWR@origcolspec}{#1}%
    \expandarg%
    \StrSubstitute{\LWR@origcolspec}{ }{}[\LWR@origcolspec]%
    \expandcolspec%
    \defcounter{LWR@tabletotalLaTeXcols}{0}%
    \defcounter{LWR@tabletotalLaTeXcolsnext}{1}%
    \LWR@setexparray{LWR@colatspec}{leftedge}{}%
    \LWR@setexparray{LWR@colatspec}{1}{}%
    \LWR@setexparray{LWR@colatspec}{2}{}%
    \LWR@setexparray{LWR@colatspec}{3}{}%
    \LWR@setexparray{LWR@colbangspec}{leftedge}{}%
    \LWR@setexparray{LWR@colbangspec}{1}{}%
    \LWR@setexparray{LWR@colbangspec}{2}{}%
    \LWR@setexparray{LWR@colbangspec}{3}{}%
    \LWR@setexparray{LWR@colbeforespec}{1}{}%
    \LWR@setexparray{LWR@colbeforespec}{2}{}%
    \LWR@setexparray{LWR@colbeforespec}{3}{}%
    \LWR@setexparray{LWR@colafterspec}{1}{}%
    \LWR@setexparray{LWR@colafterspec}{2}{}%
    \LWR@setexparray{LWR@colafterspec}{3}{}%
    \LWR@setexparray{LWR@colbarspec}{leftedge}{}%
    \LWR@setexparray{LWR@colbarspec}{1}{}%
    \LWR@setexparray{LWR@colbarspec}{2}{}%
    \LWR@setexparray{LWR@colbarspec}{3}{}%
    \defcounter{LWR@tablecolspecindex}{1}%
    \expandarg%
    \StrLen{\LWR@origcolspec}[\LWR@strresult]%
    \fullexpandarg%
    \LWR@traceinfo{original column spec length: \LWR@strresult}%
    \defcounter{LWR@tablecolspecwidth}{\LWR@strresult}%
    \boolfalse{LWR@opttablecol}%
    \whileboolexpr{%
        not test{%
            \ifnumcomp{\value{LWR@tablecolspecindex}}{>}%
                {\value{LWR@tablecolspecwidth}}%
        }%
    }%
    {%
    \expandarg%
    \StrChar{\LWR@origcolspec}{\arabic{LWR@tablecolspecindex}}[\LWR@strresult]%
    \LWR@traceinfo{position \arabic{LWR@tablecolspecindex}: \LWR@strresult}%
    \fullexpandarg%
    \boolfalse{LWR@validtablecol}%
    \IfStrEq{\LWR@strresult}{[}{\booltrue{LWR@opttablecol}}{}%
    \ifbool{LWR@opttablecol}%
    {}% inside an optional argument
    {% not an optional tabular argument
    \IfStrEq{\LWR@strresult}{l}{\LWR@parsenormalcolumn{l}}{}%
    \IfStrEq{\LWR@strresult}{c}{\LWR@parsenormalcolumn{c}}{}%
    \IfStrEq{\LWR@strresult}{r}{\LWR@parsenormalcolumn{r}}{}%
    \IfStrEq{\LWR@strresult}{L}{\LWR@parsenormalcolumn{l}}{}%
    \IfStrEq{\LWR@strresult}{C}{\LWR@parsenormalcolumn{c}}{}%
    \IfStrEq{\LWR@strresult}{R}{\LWR@parsenormalcolumn{r}}{}%
    \IfStrEq{\LWR@strresult}{J}{\LWR@parsenormalcolumn{l}}{}%
    \IfStrEq{\LWR@strresult}{S}{\LWR@parsenormalcolumn{c}}{}%
    \IfStrEq{\LWR@strresult}{s}{\LWR@parsenormalcolumn{c}}{}%
    \IfStrEq{\LWR@strresult}{\detokenize{@}}{\LWR@parseatcolumn}{}%
    \IfStrEq{\LWR@strresult}{!}{\LWR@parsebangcolumn}{}%
    \IfStrEq{\LWR@strresult}{>}{\LWR@parsebeforecolumn}{}%
    \IfStrEq{\LWR@strresult}{<}{\LWR@parseaftercolumn}{}%
    \IfStrEq{\LWR@strresult}{|}{\LWR@parsebarcolumn}{}%
    \IfStrEq{\LWR@strresult}{:}{\LWR@parsecoloncolumn}{}%
    \IfStrEq{\LWR@strresult}{;}{\LWR@parsesemicoloncolumn}{}%
    \IfStrEq{\LWR@strresult}{p}{\LWR@parsepcolumn{p}}{}%
    \IfStrEq{\LWR@strresult}{m}{\LWR@parsepcolumn{m}}{}%
    \IfStrEq{\LWR@strresult}{b}{\LWR@parsepcolumn{b}}{}%
    \IfStrEq{\LWR@strresult}{w}{\LWR@parsewcolumn}{}%
    \IfStrEq{\LWR@strresult}{W}{\LWR@parsewcolumn}{}%
    \IfStrEq{\LWR@strresult}{*}{\LWR@parsestarcolumn}{}%
    \IfStrEq{\LWR@strresult}{D}{\LWR@parseDcolumn{c}}{}%
    \IfStrEq{\LWR@strresult}{X}{\LWR@parsenormalcolumn{X}}{}%
    \IfStrEq{\LWR@strresult}{P}{\LWR@parsepcolumn{P}}{}%
    \IfStrEq{\LWR@strresult}{M}{\LWR@parsepcolumn{M}}{}%
    \IfStrEq{\LWR@strresult}{B}{\LWR@parsepcolumn{B}}{}%
    \ifbool{LWR@validtablecol}{}{%
        \LWR@traceinfo{invalid column type: \LWR@strresult}%
        \LWR@parsenormalcolumn{l}%
    }%
    }% not an optional column argument
    \IfStrEq{\LWR@strresult}{]}{\boolfalse{LWR@opttablecol}}{}%
    \defaddtocounter{LWR@tablecolspecindex}{1}%
    }% whiledo
}%

 \@ifundefined{rownum}{\newcount\rownum}{}
\newcommand*{\@rowcolors}{}
\newcommand*{\@rowc@lors}{}
\newcommand*{\LWR@xcolorrowHTMLcolor}{}
\def\LWR@columnHTMLcolor{}
\def\LWR@rowHTMLcolor{}
\def\LWR@cellHTMLcolor{}
\newcommand*{\LWR@ruleHTMLcolor}{}
\newcommand*{\rowcolor}{\LWR@getmynexttoken}%

\newcommand{\arrayrulecolor}[2][named]{}
\newcommand{\arrayrulecolornexttoken}[2][named]{\LWR@getmynexttoken}

\newcommand{\doublerulesepcolor}[2][named]{}
\newcommand{\doublerulesepcolornexttoken}[2][named]{\LWR@getmynexttoken}


\newcommand*{\LWR@maybenewtablerow}
{%
    \ifbool{LWR@startedrow}%
    {}% started the row
    {% not started the row
        \booltrue{LWR@startedrow}%
        \booltrue{LWR@intabularmetadata}%
        \ifboolexpr{%
            test{\ifnumcomp{\value{LWR@hlines}}{>}{0}} or%
            test{\ifnumcomp{\value{LWR@hdashedlines}}{>}{0}}%
        }%
        {%
            \LWR@htmltag{tr class=\textquotedbl{}hline\textquotedbl }%
            \LWR@orignewline%
        }%
        {% not doing hline
            \ifbool{LWR@doingtbrule}%
            {%
                \ifdefvoid{\LWR@ruleHTMLcolor}{%
                    \LWR@htmltag{tr class=\textquotedbl{}tbrule\textquotedbl}%
                }{%
                    \LWR@htmltag{%
                        tr class=\textquotedbl{}tbrule\textquotedbl\ % space
                        style=\textquotedbl{}border-top: 1px solid % space
                            \LWR@origpound\LWR@ruleHTMLcolor \textquotedbl{}%
                    }%
                }%
                \LWR@orignewline%
            }%
            {\LWR@htmltag{tr}\LWR@orignewline}%
        }% end of not doing hline
    }% end of not started the row
}


\newcommand*{\LWR@printbartag}[1]{%
    \LWR@traceinfo{LWR@printbartag !#1!}%
    \ifboolexpr{bool{LWR@tabularmutemods} or bool{LWR@emptyatbang}}%
    {}% muting or empty
    {% not muting
        \edef\LWR@tempone{\LWR@getexparray{LWR@colbarspec}{#1}}%
        \ifdefempty{\LWR@tempone}{}{ \LWR@tempone}%
    }% not muting
    \LWR@traceinfo{LWR@printbartag done}%
}


\newcommand*{\LWR@printatbang}[2]{%
    \xdef\LWR@atbangspec{\LWR@getexparray{LWR@col#1spec}{#2}}%
    \LWR@traceinfo{atbang: #2 !\LWR@atbangspec!}%
    \ifdefempty{\LWR@atbangspec}%
    {}%
    {% not empty
        \LWR@htmltag{%
            td class=\textquotedbl{}td#1%
            \LWR@subaddcmidruletrim{}{}%
            \LWR@printbartag{#2}%
            \textquotedbl{}%
            \LWR@tdstartstyles%
            \LWR@addcmidrulewidth%
            \LWR@addcdashline%
            \LWR@addtabularrulecolors%
            \LWR@tdendstyles%
        }%
        \ifboolexpr{bool{LWR@tabularmutemods} or bool{LWR@emptyatbang}}%
        {}%
        {\LWR@atbangspec}%
        \LWR@htmltag{/td}\LWR@orignewline%
        \global\booltrue{LWR@tabularcelladded}%
    }% not empty
}%

\newcommand*{\LWR@addleftmostbartag}{%
    \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{=}{1}{%
        \LWR@printbartag{leftedge}%
    }{}%
}

\newcommand*{\LWR@tabularleftedge}{%
    \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{=}{1}%
    {%
        \LWR@printatbang{at}{leftedge}%
        \LWR@printatbang{bang}{leftedge}%
    }% left edge
    {}% not left edge
}


\newcommand*{\LWR@thiscolspec}{}

\newcommand*{\LWR@tabledatasinglecolumntag}%
{%
    \LWR@traceinfo{LWR@tabledatasinglecolumntag}%
    \LWR@maybenewtablerow%
    \ifbool{LWR@intabularmetadata}%
    {%
        \ifbool{LWR@exitingtabular}{}%
        {% not exiting tabular
            \LWR@tabularleftedge%
            \xdef\LWR@strresult{%
                \LWR@getexparray{LWR@tablecolspec}{\arabic{LWR@tableLaTeXcolindex}}%
            }%
            \LWR@traceinfo{LWR@tabledatasinglecolumntag: about to print td tag}%
            \LWR@htmltag{%
                td class=\textquotedbl{}td%
                \LWR@strresult%
                \LWR@addcmidruletrim%
                \LWR@addleftmostbartag%
                \LWR@printbartag{\arabic{LWR@tableLaTeXcolindex}}%
                \textquotedbl{}%
                \LWR@tdstartstyles%
                \LWR@addcmidrulewidth%
                \LWR@addcdashline%
                \xdef\LWR@thiscolspec{%
                    \LWR@getexparray{LWR@tablecolspec}%
                        {\arabic{LWR@tableLaTeXcolindex}}%
                }%
                \LWR@addformatwpalignment{\LWR@thiscolspec}%
                \LWR@addtabularrowcolor%
                \LWR@addtabularrulecolors%
                \LWR@tdendstyles%
            }% HTML td
            \LWR@traceinfo{LWR@tabledatasinglecolumntag: done printing td tag}%
            \ifboolexpr{%
                test{ \ifdefstring{\LWR@strresult}{p} } or
                test{ \ifdefstring{\LWR@strresult}{m} } or
                test{ \ifdefstring{\LWR@strresult}{b} } or
                test{ \ifdefstring{\LWR@strresult}{P} } or
                test{ \ifdefstring{\LWR@strresult}{M} } or
                test{ \ifdefstring{\LWR@strresult}{B} } or
                test{ \ifdefstring{\LWR@strresult}{X} }
            }%
            {% allow pars
                \LWR@traceinfo{LWR@tabledatasinglecolumntag: about to LWR@startpars}%
                \booltrue{LWR@tableparcell}%
                \LWR@startpars%
                \LWR@traceinfo{LWR@tabledatasinglecolumntag: done with LWR@startpars}%
            }% allow pars
            {}% no pars
            \ifboolexpr{bool{LWR@tabularmutemods} or bool{LWR@emptyatbang}}%
            {}%
            {%
                \LWR@getexparray{LWR@colbeforespec}{\arabic{LWR@tableLaTeXcolindex}}%
            }%
            \boolfalse{LWR@intabularmetadata}%
        }% not exiting tabular
    }{}% in tabular metadata
    \LWR@traceinfo{LWR@tabledatasinglecolumntag: done}%
}%





\newlength{\LWR@heavyrulewidth}
\setlength{\LWR@heavyrulewidth}{.08em}

\newlength{\LWR@lightrulewidth}
\setlength{\LWR@lightrulewidth}{.05em}

\newlength{\LWR@cmidrulewidth}
\setlength{\LWR@cmidrulewidth}{.03em}

\newlength{\LWR@thiscmidrulewidth}
\setlength{\LWR@thiscmidrulewidth}{\LWR@cmidrulewidth}

\newcommand*{\LWR@clearmidrules}
{%
    \defcounter{LWR@midrulecounter}{1}%
    \whileboolexpr{%
        not test{%
            \ifnumcomp{\value{LWR@midrulecounter}}{>}%
                {\value{LWR@tabletotalLaTeXcols}}%
        }%
    }%
    {%
        \LWR@setexparray{LWR@midrules}{\arabic{LWR@midrulecounter}}{0pt}%
        \setlength{\LWR@thiscmidrulewidth}{\LWR@cmidrulewidth}%
        \LWR@setexparray{LWR@trimlrules}{\arabic{LWR@midrulecounter}}{}%
        \LWR@setexparray{LWR@trimrrules}{\arabic{LWR@midrulecounter}}{}%
        \LWR@setexparray{LWR@cdashlines}{\arabic{LWR@midrulecounter}}{N}%
        \defaddtocounter{LWR@midrulecounter}{1}%
    }%
}

\newcommand*{\LWR@subcmidrule}[4]{%
    \defcounter{LWR@midrulecounter}{#3}%
    \whileboolexpr{%
        not test {%
            \ifnumcomp{\value{LWR@midrulecounter}}{>}{#4}%
        }%
    }%
    {%
        \LWR@setexparray{LWR@midrules}{\arabic{LWR@midrulecounter}}{#1}%
        \defaddtocounter{LWR@midrulecounter}{1}%
    }% whiledo
    \IfSubStr{#2}{l}{\LWR@setexparray{LWR@trimlrules}{#3}{l}}{}%
    \IfSubStr{#2}{r}{\LWR@setexparray{LWR@trimrrules}{#4}{r}}{}%
    \booltrue{LWR@doingcmidrule}%
}

\NewDocumentCommand{\LWR@docmidrule}
    {O{\LWR@cmidrulewidth} D(){} >{\SplitArgument{1}{-}}m}
    {\LWR@subcmidrule{#1}{#2}#3}

\newcommand*{\LWR@subcdashline}[2]{%
    \defcounter{LWR@midrulecounter}{#1}%
    \whileboolexpr{%
        not test {%
            \ifnumcomp{\value{LWR@midrulecounter}}{>}{#2}%
        }%
    }%
    {%
        \LWR@setexparray{LWR@cdashlines}{\arabic{LWR@midrulecounter}}{Y}%
        \defaddtocounter{LWR@midrulecounter}{1}%
    }% whiledo
    \booltrue{LWR@doingcmidrule}%
}

\NewDocumentCommand{\LWR@docdashline}
    {>{\SplitArgument{1}{-}}m}%
    {%
        \LWR@subcdashline#1%
    }

\newcommand*{\LWR@tdstartstyles}{\boolfalse{LWR@tdhavecellstyle}}

\newcommand*{\LWR@tdaddstyle}{%
    \ifbool{LWR@tdhavecellstyle}%
        {; }%
        { style=\textquotedbl}%
    \booltrue{LWR@tdhavecellstyle}%
}

\newcommand*{\LWR@tdendstyles}{%
    \ifbool{LWR@tdhavecellstyle}%
        {%
            \textquotedbl%
            \boolfalse{LWR@tdhavecellstyle}%
        }{}%
}

\newcommand*{\LWR@subaddcmidruletrim}[2]{%
    \setlength{\LWR@templengthone}{%
            \LWR@getexparray{LWR@midrules}{\arabic{LWR@tableLaTeXcolindex}}%
    }%
    \ifdimcomp{\LWR@templengthone}{>}{0pt}%
        {%
            \LWR@origtilde tdrule#1#2%
            \setlength{\LWR@thiscmidrulewidth}{\LWR@templengthone}%
        }%
        {%
            \setlength{\LWR@thiscmidrulewidth}{0pt}%
        }%
}

\newcommand*{\LWR@addcmidruletrim}{%
    \LWR@subaddcmidruletrim%
        {\LWR@getexparray{LWR@trimlrules}{\arabic{LWR@tableLaTeXcolindex}}}%
        {\LWR@getexparray{LWR@trimrrules}{\arabic{LWR@tableLaTeXcolindex}}}%
}

\newcommand{\LWR@addrulewidth}[2]{%
    \ifboolexpr{%
        test{\ifdimcomp{#1}{=}{0pt}} or
        (
            ( test{\ifdimcomp{#1}{=}{#2}} and not bool{FormatWP} )
            and ( test {\ifdefvoid{\LWR@ruleHTMLcolor}} )
        )
    }%
    {}% default width and color
    {% custom width and/or color
        \LWR@forceminwidth{#1}%
        \LWR@tdaddstyle%
        border-top:\LWR@printlength{\LWR@atleastonept} solid % space
        \ifdefvoid{\LWR@ruleHTMLcolor}{%
            \ifdimcomp{#1}{<}{\LWR@lightrulewidth}%
            {\LWR@origpound{}A0A0A0}%
            {% lightrule or heaver
                \ifdimcomp{#1}{<}{\LWR@heavyrulewidth}%
                {\LWR@origpound{}808080}%
                {black}%
            }% lightrule or heavier
        }{%
            \LWR@origpound\LWR@ruleHTMLcolor%
        }%
    }% custom width and/or color
}

\newcommand{\LWR@addcmidrulewidth}{%
    \LWR@addrulewidth{\LWR@thiscmidrulewidth}{\LWR@cmidrulewidth}%
}

\newcommand{\LWR@addcdashline}{%
    \edef\LWR@tempone{%
        \LWR@getexparray{LWR@cdashlines}{\arabic{LWR@tableLaTeXcolindex}}%
    }%
    \ifdefstring{\LWR@tempone}{Y}{%
        \LWR@tdaddstyle%
        border-top: 1pt dashed %
        \ifdefvoid{\LWR@ruleHTMLcolor}%
            {black}%
            {\LWR@origpound\LWR@ruleHTMLcolor}%
    }{}%
}

\newcommand*{\LWR@WPcell}[2]{%
    \LWR@tdaddstyle%
    \LWR@print@mbox{text-align:#1}; \LWR@print@mbox{vertical-align:#2}%
}

\newcommand*{\LWR@addformatwpalignment}[1]{%
    \ifbool{FormatWP}{%
        \IfSubStr{#1}{l}{\LWR@WPcell{left}{middle}}{}%
        \IfSubStr{#1}{c}{\LWR@WPcell{center}{middle}}{}%
        \IfSubStr{#1}{r}{\LWR@WPcell{right}{middle}}{}%
        \IfSubStr{#1}{p}{\LWR@WPcell{left}{bottom}}{}%
        \IfSubStr{#1}{m}{\LWR@WPcell{left}{middle}}{}%
        \IfSubStr{#1}{b}{\LWR@WPcell{left}{top}}{}%
        \IfSubStr{#1}{P}{\LWR@WPcell{center}{bottom}}{}%
        \IfSubStr{#1}{M}{\LWR@WPcell{center}{middle}}{}%
        \IfSubStr{#1}{B}{\LWR@WPcell{center}{top}}{}%
    }{}%
}


\newcommand*{\LWR@addtabularrowcolor}{%
    \ifbool{LWR@tabularmutemods}{}{%
        \ifdefvoid{\LWR@rowHTMLcolor}{%
            \ifdefvoid{\LWR@xcolorrowHTMLcolor}{}%
            {% xcolor row color
                \LWR@tdaddstyle%
                background:\LWR@origpound\LWR@xcolorrowHTMLcolor%
            }%
        }%
        {% explicit row color
            \LWR@tdaddstyle%
            background:\LWR@origpound\LWR@rowHTMLcolor%
        }%
    }%
}

\newcommand*{\LWR@addtabularhrulecolor}{%
    \ifboolexpr{%
        test{\ifnumcomp{\value{LWR@hlines}}{>}{0}} or%
        test{\ifnumcomp{\value{LWR@hdashedlines}}{>}{0}} or%
        bool{LWR@doingtbrule}%
    }{%
        \ifdefvoid{\LWR@ruleHTMLcolor}%
        {%
            \ifnumcomp{\value{LWR@hlines}}{>}{1}%
            {%
                \LWR@tdaddstyle%
                border-top: 4px double%
            }{% else
            \ifnumcomp{\value{LWR@hdashedlines}}{>}{1}%
            {%
                \LWR@tdaddstyle%
                border-top: 2px dashed%
            }{% else
            \ifnumcomp{\value{LWR@hdashedlines}}{=}{1}%
            {%
                \LWR@tdaddstyle%
                border-top: 1px dashed%
            }{}}}%
        }%
        {%
            \ifnumcomp{\value{LWR@hlines}}{>}{1}%
            {%
                \LWR@tdaddstyle%
                border-top: 4px double \LWR@origpound\LWR@ruleHTMLcolor%
            }{% else
            \ifnumcomp{\value{LWR@hdashedlines}}{>}{1}%
            {%
                \LWR@tdaddstyle%
                border-top: 2px dashed \LWR@origpound\LWR@ruleHTMLcolor%
            }{% else
            \ifnumcomp{\value{LWR@hdashedlines}}{=}{1}%
            {%
                \LWR@tdaddstyle%
                border-top: 1px dashed \LWR@origpound\LWR@ruleHTMLcolor%
            }{% else
                \LWR@tdaddstyle%
                border-top: 1px solid \LWR@origpound\LWR@ruleHTMLcolor%
            }}}%
        }%
    }{}%
}

\newcommand*{\LWR@addtabularrulecolors}{%
    \LWR@addtabularhrulecolor%
    \ifbool{LWR@tabularmutemods}{}{%
        \ifnumequal{\value{LWR@tableLaTeXcolindex}}{1}{%
            \edef\LWR@tempone{\LWR@getexparray{LWR@colbarspec}{leftedge}}%
            \ifdefstring{\LWR@tempone}{tvertbarl}{%
                    \LWR@tdaddstyle%
                    border-left: 1px solid % space
                        \LWR@vertruleHTMLcolor%
            }{}%
            \ifdefstring{\LWR@tempone}{tvertbarldouble}{%
                    \LWR@tdaddstyle%
                    border-left: 4px double % space
                        \LWR@vertruleHTMLcolor%
            }{}%
            \ifdefstring{\LWR@tempone}{tvertbarldash}{%
                    \LWR@tdaddstyle%
                    border-left: 1px dashed % space
                        \LWR@vertruleHTMLcolor%
            }{}%
            \ifdefstring{\LWR@tempone}{tvertbarldoubledash}{%
                    \LWR@tdaddstyle%
                    border-left: 2px dashed % space
                        \LWR@vertruleHTMLcolor%
            }{}%
        }{}%
        \edef\LWR@tempone{%
            \LWR@getexparray{LWR@colbarspec}{\arabic{LWR@tableLaTeXcolindex}}%
        }%
        \ifdefstring{\LWR@tempone}{tvertbarr}{%
                \LWR@tdaddstyle%
                border-right: 1px solid \LWR@vertruleHTMLcolor%
        }{}%
        \ifdefstring{\LWR@tempone}{tvertbarrdouble}{%
                \LWR@tdaddstyle%
                border-right: 4px double \LWR@vertruleHTMLcolor%
        }{}%
        \ifdefstring{\LWR@tempone}{tvertbarrdash}{%
                \LWR@tdaddstyle%
                border-right: 1px dashed \LWR@vertruleHTMLcolor%
        }{}%
        \ifdefstring{\LWR@tempone}{tvertbarrdoubledash}{%
                \LWR@tdaddstyle%
                border-right: 2px dashed \LWR@vertruleHTMLcolor%
        }{}%
    }%
}

\newcommand*{\LWR@subaddtabularcellcolor}[1]{%
    \LWR@htmltag{div class=\textquotedbl{}cellcolor\textquotedbl\ % space
        style=\textquotedbl{}%
        background:\LWR@origpound{}{}#1 %
        \textquotedbl\ %
    }% space
    \defaddtocounter{LWR@cellcolordepth}{1}%
}

\newcommand*{\LWR@addtabularcellcolor}{%
    \ifdefvoid{\LWR@cellHTMLcolor}%
    {%
        \ifdefvoid{\LWR@rowHTMLcolor}%
        {%
            \ifdefvoid{\LWR@xcolorrowHTMLcolor}%
            {%
                \ifdefvoid{\LWR@columnHTMLcolor}%
                {}%
                {\LWR@subaddtabularcellcolor{\LWR@columnHTMLcolor}}%
            }%
            {\LWR@subaddtabularcellcolor{\LWR@xcolorrowHTMLcolor}}%
        }%
        {\LWR@subaddtabularcellcolor{\LWR@rowHTMLcolor}}%
    }%
    {\LWR@subaddtabularcellcolor{\LWR@cellHTMLcolor}}%
}



\newcommand*{\LWR@printmccoltype}[1]{%
    \LWR@traceinfo{lwr@printmccoltype -#1-}%
    \StrChar{#1}{\arabic{LWR@tablemulticolspos}}[\LWR@strresult]%
    \IfStrEq{\LWR@strresult}{l}{l}{}%
    \IfStrEq{\LWR@strresult}{c}{c}{}%
    \IfStrEq{\LWR@strresult}{r}{r}{}%
    \IfStrEq{\LWR@strresult}{p}{p}{}%
    \IfStrEq{\LWR@strresult}{m}{m}{}%
    \IfStrEq{\LWR@strresult}{b}{b}{}%
    \IfStrEq{\LWR@strresult}{P}{P}{}%
    \IfStrEq{\LWR@strresult}{M}{M}{}%
    \IfStrEq{\LWR@strresult}{B}{B}{}%
    \IfStrEq{\LWR@strresult}{w}{w}{}%
    \IfStrEq{\LWR@strresult}{W}{W}{}%
    \IfStrEq{\LWR@strresult}{S}{c}{}%
    \IfStrEq{\LWR@strresult}{s}{c}{}%
    \IfStrEq{\LWR@strresult}{X}{p}{}%
    \IfStrEq{\LWR@strresult}{|}%
    {%
        \ifbool{LWR@mcolvertbaronleft}%
            {\defaddtocounter{LWR@mcolvertbarsl}{1}}% left edge
            {\defaddtocounter{LWR@mcolvertbarsr}{1}}% not left edge
    }%
    {%
        \IfStrEq{\LWR@strresult}{:}%
        {%
            \ifbool{LWR@mcolvertbaronleft}%
                {\defaddtocounter{LWR@mcolvertbarsldash}{1}}% left edge
                {\defaddtocounter{LWR@mcolvertbarsrdash}{1}}% not left edge
        }%
        {%
            \IfStrEq{\LWR@strresult}{;}%
            {%
                \ifbool{LWR@mcolvertbaronleft}%
                    {\defaddtocounter{LWR@mcolvertbarsldash}{1}}% left edge
                    {\defaddtocounter{LWR@mcolvertbarsrdash}{1}}% not left edge
            }%
            {\boolfalse{LWR@mcolvertbaronleft}}%
        }%
    }%
    \LWR@traceinfo{lwr@printmccoltype done}%
}

\newcommand*{\LWR@multicolpartext}[1]{%
    \LWR@startpars%
    \LWR@multicoltext%
    \defaddtocounter{LWR@tablemulticolspos}{#1}%
    \LWR@stoppars%
}

\newcommand*{\LWR@multicolother}[1]{%
    \defaddtocounter{LWR@tablemulticolspos}{1}%
    \StrChar{#1}{\arabic{LWR@tablemulticolspos}}[\LWR@strresult]%
    \LWR@strresult%
    \booltrue{LWR@validtablecol}%
}

\newcommand*{\LWR@multicolskip}{%
    \booltrue{LWR@validtablecol}%
}

\newcommand*{\LWR@printmccoldata}[1]{%
    \LWR@traceinfo{lwr@printmccoldata -#1}%
    \boolfalse{LWR@validtablecol}%
    \StrChar{#1}{\arabic{LWR@tablemulticolspos}}[\LWR@strresult]%
    \edef\LWR@printmccoldatatoken{\LWR@strresult}%
    \IfStrEq{\LWR@printmccoldatatoken}{l}{\LWR@multicoltext}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{c}{\LWR@multicoltext}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{r}{\LWR@multicoltext}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{D}{%
        \defaddtocounter{LWR@tablemulticolspos}{3}% skip parameters
        \LWR@multicoltext%
    }{}%
    \IfStrEq{\LWR@printmccoldatatoken}{p}{\LWR@multicolpartext{2}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{m}{\LWR@multicolpartext{2}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{b}{\LWR@multicolpartext{2}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{P}{\LWR@multicolpartext{2}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{M}{\LWR@multicolpartext{2}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{B}{\LWR@multicolpartext{2}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{w}{\LWR@multicolpartext{3}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{W}{\LWR@multicolpartext{3}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{S}{\LWR@multicoltext}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{s}{\LWR@multicoltext}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{X}{\LWR@multicolpartext{1}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{|}{\LWR@multicolskip}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{:}{\LWR@multicolskip}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{;}{%
        \LWR@multicolskip%
        \defaddtocounter{LWR@tablemulticolspos}{1}% skip parameter
    }{}%
    \IfStrEq{\LWR@printmccoldatatoken}{\detokenize{@}}{\LWR@multicolother{#1}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{\detokenize{!}}{\LWR@multicolother{#1}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{\detokenize{>}}{\LWR@multicolother{#1}}{}%
    \IfStrEq{\LWR@printmccoldatatoken}{\detokenize{<}}{\LWR@multicolother{#1}}{}%
    \ifbool{LWR@validtablecol}{}{\LWR@multicoltext{}}%
    \LWR@traceinfo{lwr@printmccoldata done}%
}

\newcommand*{\LWR@parsemulticolumnalignment}[2]{%
    \defcounter{LWR@tablemulticolspos}{1}%
    \StrLen{#1}[\LWR@strresult]%
    \defcounter{LWR@tablemulticolswidth}{\LWR@strresult}%
    \whileboolexpr{%
        not test {%
            \ifnumcomp{\value{LWR@tablemulticolspos}}{>}%
                {\value{LWR@tablemulticolswidth}}%
        }%
    }%
    {%
        #2{#1}%
        \defaddtocounter{LWR@tablemulticolspos}{1}%
    }%
}


\newcommand*{\LWR@addmulticolvertrulecolor}{%
    \ifbool{LWR@tabularmutemods}{}{%
        \ifnumcomp{\value{LWR@mcolvertbarsl}}{=}{1}{%
            \LWR@tdaddstyle%
            border-left: 1px solid \LWR@vertruleHTMLcolor%
        }{}%
        \ifnumcomp{\value{LWR@mcolvertbarsl}}{>}{1}{%
            \LWR@tdaddstyle%
            border-left: 4px double \LWR@vertruleHTMLcolor%
        }{}%
        \ifnumcomp{\value{LWR@mcolvertbarsldash}}{=}{1}{%
            \LWR@tdaddstyle%
            border-left: 1px dashed \LWR@vertruleHTMLcolor%
        }{}%
        \ifnumcomp{\value{LWR@mcolvertbarsldash}}{>}{1}{%
            \LWR@tdaddstyle%
            border-left: 2px dashed \LWR@vertruleHTMLcolor%
        }{}%
        \ifnumcomp{\value{LWR@mcolvertbarsr}}{=}{1}{%
            \LWR@tdaddstyle%
            border-right: 1px solid \LWR@vertruleHTMLcolor%
        }{}%
        \ifnumcomp{\value{LWR@mcolvertbarsr}}{>}{1}{%
            \LWR@tdaddstyle%
            border-right: 4px double \LWR@vertruleHTMLcolor%
        }{}%
        \ifnumcomp{\value{LWR@mcolvertbarsrdash}}{=}{1}{%
            \LWR@tdaddstyle%
            border-right: 1px dashed \LWR@vertruleHTMLcolor%
        }{}%
        \ifnumcomp{\value{LWR@mcolvertbarsrdash}}{>}{1}{%
            \LWR@tdaddstyle%
            border-right: 2px dashed \LWR@vertruleHTMLcolor%
        }{}%
    }%
}

\newcommand{\LWR@multicoltext}{}

\newcounter{LWR@lastmulticolumn}

\NewDocumentCommand{\LWR@domulticolumn}{o o m m m +m}{%
    \LWR@traceinfo{LWR@domulticolumn -#1- -#2- -#4- -#5-}%
    \renewcommand{\LWR@multicoltext}{%
        #6%
        \booltrue{LWR@validtablecol}%
    }%
    \defcounter{LWR@lastmulticolumn}{\value{LWR@tableLaTeXcolindex}}%
    \defaddtocounter{LWR@lastmulticolumn}{#3}%
    \defaddtocounter{LWR@lastmulticolumn}{-1}%
    \LWR@maybenewtablerow%
    \LWR@htmltag{%
        td colspan=\textquotedbl#4\textquotedbl\ %
        \IfValueT{#2}{ % rows?
            rowspan=\textquotedbl#2\textquotedbl\ %
        }%
        class=\textquotedbl{}td%
        \defcounter{LWR@mcolvertbarsl}{0}%
        \defcounter{LWR@mcolvertbarsr}{0}%
        \defcounter{LWR@mcolvertbarsldash}{0}%
        \defcounter{LWR@mcolvertbarsrdash}{0}%
        \booltrue{LWR@mcolvertbaronleft}%
        \LWR@parsemulticolumnalignment{#5}{\LWR@printmccoltype}%
        \LWR@subaddcmidruletrim%
            {%
                \LWR@getexparray{LWR@trimlrules}%
                    {\arabic{LWR@tableLaTeXcolindex}}%
            }%
            {%
                \LWR@getexparray{LWR@trimrrules}%
                    {\arabic{LWR@lastmulticolumn}}%
            }%
        \ifnumcomp{\value{LWR@mcolvertbarsl}}{=}{1}{ tvertbarl}{}%
        \ifnumcomp{\value{LWR@mcolvertbarsl}}{>}{1}{ tvertbarldouble}{}%
        \ifnumcomp{\value{LWR@mcolvertbarsr}}{=}{1}{ tvertbarr}{}%
        \ifnumcomp{\value{LWR@mcolvertbarsr}}{>}{1}{ tvertbarrdouble}{}%
        \ifnumcomp{\value{LWR@mcolvertbarsldash}}{=}{1}{ tvertbarldash}{}%
        \ifnumcomp{\value{LWR@mcolvertbarsldash}}{>}{1}%
            { tvertbarldoubledash}{}%
        \ifnumcomp{\value{LWR@mcolvertbarsrdash}}{=}{1}{ tvertbarrdash}{}%
        \ifnumcomp{\value{LWR@mcolvertbarsrdash}}{>}{1}%
            { tvertbarrdoubledash}{}%
        \textquotedbl{}%
        \LWR@tdstartstyles%
        \IfValueT{#1}{% vpos?
            \ifstrequal{#1}{b}%
                {%
                    \LWR@tdaddstyle%
                    \LWR@print@mbox{vertical-align:bottom}%
                }{}%
            \ifstrequal{#1}{t}%
                {%
                    \LWR@tdaddstyle%
                    \LWR@print@mbox{vertical-align:top}%
                }{}%
        }% vpos?
        \LWR@addtabularrowcolor%
        \LWR@addcmidrulewidth%
        \LWR@addcdashline%
        \LWR@addtabularhrulecolor%
        \LWR@addmulticolvertrulecolor%
        \LWR@addformatwpalignment{#5}%
        \LWR@tdendstyles%
    }% end of the opening table data tag
    \boolfalse{LWR@intabularmetadata}%
    \LWR@parsemulticolumnalignment{#5}{\LWR@printmccoldata}%
}


\NewDocumentCommand{\LWR@htmlmulticolumn}{m m +m}%
{%
    \LWR@tabularhtmlcolumns{\arabic{LWR@tableLaTeXcolindex}}{#1}%
    \LWR@domulticolumn{#1}{\arabic{LWR@tabhtmlcoltotal}}{#2}{#3}%
    \defaddtocounter{LWR@tableLaTeXcolindex}{#1}%
    \defaddtocounter{LWR@tableLaTeXcolindex}{-1}%
    \booltrue{LWR@skipatbang}%
}

\providecommand*{\LTcaptype}{table}
\NewDocumentCommand{\LWR@longtabledatacaptiontag}{s o +m}
{%
    \IfValueTF{#2}{% optional given?
        \ifblank{#2}% optional empty?
        {\LWR@setlatestname{#3}}% empty
        {\LWR@setlatestname{#2}}% given and non-empty
    }% optional given
    {\LWR@setlatestname{#3}}% no optional
    \LWR@tabularhtmlcolumns{1}{\arabic{LWR@tabletotalLaTeXcols}}%
    \LWR@domulticolumn{\arabic{LWR@tabletotalLaTeXcols}}%
        {\arabic{LWR@tabhtmlcoltotal}}%
        {P}%
    {% \LWR@domulticolumn
    \IfBooleanTF{#1}% star?
    {% yes star
        \LWR@figcaption%
        \LWR@isolate{#3}%
        \endLWR@figcaption%
    }%
    {% No star:
        \ifbool{LWR@starredlongtable}%
        {%
            \ifblank{#2}% TOC entry
            {}%
            {%
                \refstepcounter{\LTcaptype}%
                \protected@edef\@currentlabel{%
                    \@nameuse{p@\LTcaptype}\@nameuse{the\LTcaptype}%
                }%
            }%
        }{}%
        \LWR@figcaption%
        \LWR@isolate{\@nameuse{fnum@\LTcaptype}}%
        \CaptionSeparator%
        \LWR@isolate{#3}%
        \endLWR@figcaption%
        \ifblank{#2}% TOC entry empty
        {}%
        {% TOC entry not empty
            \IfNoValueTF{#2}% No TOC entry?
            {% No TOC entry
                \addcontentsline%
                {\@nameuse{ext@\LTcaptype}}%
                {\LTcaptype}%
                {%
                    \protect\numberline%
                    {\LWR@isolate{\@nameuse{p@\LTcaptype}}\@nameuse{the\LTcaptype}}%
                    {\ignorespaces \LWR@isolate{#3}\protect\relax}%
                }%
            }% end of No TOC entry
            {% yes TOC entry
                \addcontentsline%
                {\@nameuse{ext@\LTcaptype}}%
                {\LTcaptype}%
                {%
                    \protect\numberline%
                    {\LWR@isolate{\@nameuse{p@\LTcaptype}}\@nameuse{the\LTcaptype}}%
                    {\ignorespaces \LWR@isolate{#2}\protect\relax}%
                }%
            }% end of yes TOC entry
        }% end of TOC entry not empty
    }% end of no star
    \booltrue{LWR@skipatbang}%
    }% end of \LWR@domulticolumn
    \defaddtocounter{LWR@tableLaTeXcolindex}{\value{LWR@tabletotalLaTeXcols}}%
    \defaddtocounter{LWR@tableLaTeXcolindex}{-1}

}



\newcounter{LWR@tabhtmlcolindex}
\newcounter{LWR@tabhtmlcolend}
\newcounter{LWR@tabhtmlcoltotal}

\newcommand*{\LWR@subtabularhtmlcolumns}[1]{%
    \edef\LWR@atbangspec{\LWR@getexparray{LWR@colatspec}{#1}}%
    \ifdefempty{\LWR@atbangspec}%
        {}%
        {\defaddtocounter{LWR@tabhtmlcoltotal}{1}}%
    \edef\LWR@atbangspec{\LWR@getexparray{LWR@colbangspec}{#1}}%
    \ifdefempty{\LWR@atbangspec}%
        {}%
        {\defaddtocounter{LWR@tabhtmlcoltotal}{1}}%
}

\newcommand*{\LWR@tabularhtmlcolumns}[2]{%
    \defcounter{LWR@tabhtmlcolindex}{#1}%
    \defcounter{LWR@tabhtmlcoltotal}{#2}%
    \defcounter{LWR@tabhtmlcolend}{#1}%
    \defaddtocounter{LWR@tabhtmlcolend}{#2}%
    \ifnumcomp{\value{LWR@tabhtmlcolindex}}{=}{1}{%
        \LWR@subtabularhtmlcolumns{leftedge}%
    }{}%
    \whileboolexpr{%
        test {%
            \ifnumcomp{\value{LWR@tabhtmlcolindex}}{<}{\value{LWR@tabhtmlcolend}}%
        }%
    }%
    {%
        \LWR@subtabularhtmlcolumns{\arabic{LWR@tabhtmlcolindex}}%
        \defaddtocounter{LWR@tabhtmlcolindex}{1}%
    }% whiledo
}
\end{warpHTML}
\begin{warpHTML}
\newcommand{\multirow}[2][c]{}
\end{warpHTML}
\begin{warpall}
\AtBeginDocument{
\@ifundefined{@xmultirow}
{
\DeclareExpandableDocumentCommand{\LWR@print@multicolumnrow}%
    {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
    {}%
}% no version of multirow was loaded
{% \@xmultirow defined, so some version of multirow was loaded
\@ifpackageloaded{multirow}{% v2.0 or newer
\@ifpackagelater{multirow}{2016/09/01}% 2016/09/27 for v2.0
{% v2.0+:
\DeclareExpandableDocumentCommand{\LWR@print@multicolumnrow}%
    {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
    {\multicolumn{#1}{#2}{\@xmultirow[#3]{#4}[#5]{#6}[#7]{#8}}}%
}
{% loaded but older, probably not executed:
\DeclareExpandableDocumentCommand{\LWR@print@multicolumnrow}%
    {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
    {\multicolumn{#1}{#2}{\@xmultirow{#4}[#5]{#6}[#7]{#8}}}%
}
}% packageloaded{multirow}
{% v1.6 or older did not \ProvidePackage
\DeclareExpandableDocumentCommand{\LWR@print@multicolumnrow}%
    {+m +m +O{c} +m +O{0} +m +O{0pt} +m}%
    {\multicolumn{#1}{#2}{\@xmultirow{#4}[#5]{#6}[#7]{#8}}}%
}

}% \@ifundefined{@xmultirow}

\providecommand*{\multicolumnrow}{\LWR@print@multicolumnrow}

}% AtBeginDocument
\end{warpall}
\begin{warpHTML}
\newcommand*{\LWR@donothing}{}
\let\firsthline\relax
\let\lasthline\relax
\newcommand*{\firsthline}{}
\newcommand*{\lasthline}{}
\newcommand*{\ldelim}{}
\newcommand*{\rdelim}{}

\end{warpHTML}


\begin{warpall}
\newcommand*{\TabularMacro}{}

\end{warpall}

\begin{warpHTML}

\newcommand*{\ResumeTabular}{%
    \boolfalse{LWR@exitingtabular}%
    \boolfalse{LWR@tabularmutemods}%
    \LWR@getmynexttoken%
}

\end{warpHTML}

\begin{warpprint}

\newcommand*{\ResumeTabular}{}

\end{warpprint}


\begin{warpHTML}

\newcommand*{\LWR@tabledatacolumntag}%
{%
    \LWR@traceinfo{LWR@tabledatacolumntag}%
    \global\let\LWR@mynextaction\LWR@tabledatasinglecolumntag%
    \ifdefequal{\LWR@mynexttoken}{\end}%
        {\booltrue{LWR@exitingtabular}}{}%
    \ifdefequal{\LWR@mynexttoken}{\caption}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\multicolumn}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\multirow}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\multicolumnrow}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\noalign}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\mrowcell}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\mcolrowcell}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\TabularMacro}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\hline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\firsthline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\lasthline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\toprule}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\midrule}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\cmidrule}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\morecmidrules}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\specialrule}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\cline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\bottomrule}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\hhline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\rowcolor}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\arrayrulecolor}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\doublerulesepcolor}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\warpprintonly}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\warpHTMLonly}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\ldelim}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\rdelim}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\hdashline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\cdashline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\firsthdashline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\lasthdashline}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \ifdefequal{\LWR@mynexttoken}{\par}%
        {\global\let\LWR@mynextaction\LWR@donothing}{}%
    \LWR@traceinfo{LWR@tabledatacolumntag: about to do mynext}%
    \LWR@mynextaction%
    \LWR@traceinfo{LWR@tabledatacolumntag: done}%
}

\end{warpHTML}


\begin{warpall}

\newcommand*{\mrowcell}{}

\end{warpall}


\begin{warpall}

\newcommand*{\mcolrowcell}{}

\end{warpall}


\begin{warpHTML}
\providecommand*{\toprule}[1][]{\hline}
\providecommand*{\midrule}[1][]{\hline}
\providecommand*{\cmidrule}{\cline}
\providecommand*{\bottomrule}[1][]{\hline}
\providecommand*{\addlinespace}[1][]{}
\providecommand*{\morecmidrules}{}
\providecommand*{\specialrule}[3]{\hline}
\LetLtxMacro\LWR@orignoalign\noalign

\newcommand{\LWR@tabularnoalign}[1]{%
    \advance\rownum\m@ne%
    \LetLtxMacro\LWR@save@xcolorrowHTMLcolor\LWR@xcolorrowHTMLcolor%
    \renewcommand*{\LWR@xcolorrowHTMLcolor}{}%
    \multicolumn{\value{LWR@tabletotalLaTeXcols}}{l}{#1} \\
    \LetLtxMacro\LWR@xcolorrowHTMLcolor\LWR@save@xcolorrowHTMLcolor%
    % \@rowc@lors%
    \LWR@getmynexttoken%
}
\AtBeginDocument{

\@ifpackageloaded{lwarp-tabls}
{
    \newcommand*{\LWR@HTMLhline}[1][]{%
        \ifbool{FormatWP}%
            {\LWR@docmidrule{1-\arabic{LWR@tabletotalLaTeXcols}}}%
            {\defaddtocounter{LWR@hlines}{1}}%
        \LWR@getmynexttoken}%
}
{
    \newcommand*{\LWR@HTMLhline}{%
        \ifbool{FormatWP}%
            {\LWR@docmidrule{1-\arabic{LWR@tabletotalLaTeXcols}}}%
            {\defaddtocounter{LWR@hlines}{1}}%
        \LWR@getmynexttoken}%
}

}% AtBeginDocument

\NewDocumentCommand{\LWR@HTMLcline}{m}%
    {\LWR@docmidrule{#1}\LWR@getmynexttoken}%

\newcommand{\LWR@tabular@warpprintonly}[1]{%
    \ifbool{warpingprint}{#1}{}%
    \LWR@getmynexttoken%
}

\AtBeginDocument{
\@ifundefined{NoAutoSpacing}%
{% no babel-french
    \newcommand*{\LWR@nullifyNoAutoSpacing}{}
}% no babel-french
{% yes babel-french
    \newcommand*{\LWR@nullifyNoAutoSpacing}{%
        \NoAutoSpacing%
        \renewcommand*{\NoAutoSpacing}{}%
        \renewcommand*{\LWR@FBcancel}{}%
    }
}% yes babel-french
}% AtBeginDocument

\StartDefiningTabulars

\NewDocumentCommand{\LWR@HTML@@tabular}{d<> o m}
{%
    \LWR@traceinfo{LWR@HTML@@tabular started}%
    \LWR@spanwarnformat{tabular}%
    \addtocounter{LWR@tabulardepth}{1}%
    \boolfalse{LWR@startedrow}%
    \defcounter{LWR@hlines}{0}%
    \defcounter{LWR@hdashedlines}{0}%
    \boolfalse{LWR@doingtbrule}%
    \boolfalse{LWR@doingcmidrule}%
    \LWR@nullifyNoAutoSpacing%
    \boolfalse{LWR@exitingtabular}%
    \boolfalse{LWR@tabularmutemods}%
    \boolfalse{LWR@usedmultirow}%
    \boolfalse{LWR@foundmrowcell}%
    \renewcommand*{\LWR@multicoltext}{}%
    \booltrue{LWR@intabularmetadata}%
    \LWR@traceinfo{LWR@@tabular: About to LWR@forecenewpage.}%
    \LWR@forcenewpage
    \LWR@htmlblocktag{table}%
    \LWR@parsetablecols{#3}%
    \LWR@stoppars%
    \defcounter{LWR@tableLaTeXcolindex}{1}%
    \global\boolfalse{LWR@tabularcelladded}%
    \LWR@clearmidrules%
    \LetLtxMacro{\\}{\LWR@tabularendofline}%
    \LetLtxMacro\warpprintonly\LWR@tabular@warpprintonly%
    \LetLtxMacro\arrayrulecolor\arrayrulecolornexttoken%
    \LetLtxMacro\doublerulesepcolor\doublerulesepcolornexttoken%
    \def\LWR@columnHTMLcolor{}%
    \def\LWR@rowHTMLcolor{}%
    \def\LWR@cellHTMLcolor{}%
    \@rowcolors%
    \ifdefvoid{\LWR@ruleHTMLcolor}%
        {\edef\LWR@vertruleHTMLcolor{black}}%
        {\edef\LWR@vertruleHTMLcolor{\LWR@origpound\LWR@ruleHTMLcolor}}%
    \defcounter{LWR@cellcolordepth}{0}%
    \LWR@traceinfo{LWR@@HTML@tabular: redefining macros}%
    \LetLtxMacro\noalign\LWR@tabularnoalign%
    \LetLtxMacro\hline\LWR@HTMLhline%
    \LetLtxMacro\cline\LWR@HTMLcline%
    \DeclareDocumentCommand{\hdashline}{o}{%
        \ifbool{FormatWP}%
            {\LWR@docdashline{1-\arabic{LWR@tabletotalLaTeXcols}}}%
            {\defaddtocounter{LWR@hdashedlines}{1}}%
        \LWR@getmynexttoken%
    }%
    \DeclareDocumentCommand{\cdashline}{m}{%
        \LWR@docdashline{##1}\LWR@getmynexttoken%
    }%
    \DeclareDocumentCommand{\firsthdashline}{o}{%
        \ifbool{FormatWP}%
            {\LWR@docdashline{1-\arabic{LWR@tabletotalLaTeXcols}}}%
            {\defaddtocounter{LWR@hdashedlines}{1}}%
        \LWR@getmynexttoken%
    }%
    \DeclareDocumentCommand{\lasthdashline}{o}{%
        \ifbool{FormatWP}%
            {\LWR@docdashline{1-\arabic{LWR@tabletotalLaTeXcols}}}%
            {\defaddtocounter{LWR@hdashedlines}{1}}%
        \LWR@getmynexttoken%
    }%
    \renewcommand{\multicolumn}{\LWR@htmlmulticolumn}%
    \renewcommand*{\mrowcell}{%
        \LWR@maybenewtablerow%
        \LWR@tabularleftedge%
        \booltrue{LWR@skippingmrowcell}%
        \booltrue{LWR@foundmrowcell}%
    }%
    \renewcommand*{\mcolrowcell}{%
        \LWR@maybenewtablerow%
        \booltrue{LWR@skippingmcolrowcell}%
        \booltrue{LWR@foundmrowcell}%
    }%
    \LetLtxMacro\caption\LWR@longtabledatacaptiontag%
    \boolfalse{LWR@tableparcell}%
    \boolfalse{LWR@skippingmrowcell}%
    \boolfalse{LWR@skippingmcolrowcell}%
    \boolfalse{LWR@skipatbang}%
    \boolfalse{LWR@emptyatbang}%
    \StartDefiningTabulars%
    \protected\gdef&{\LWR@tabularampersand}%
    \booltrue{LWR@forceminipagefullwidth}%
    \addtocounter{LWR@tabularpardepth}{1}%
    \LWR@traceinfo{LWR@@HTML@tabular: about to LWR@getmynexttoken}%
    \LWR@getmynexttoken%
}%
\newcommand*{\LWR@HTML@endtabular}
{%
    \LWR@traceinfo{LWR@HTML@endtabular}%
    \addtocounter{LWR@tabularpardepth}{-1}%
    \ifboolexpr{%
        test {%
            \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{<}%
                {\value{LWR@tabletotalLaTeXcols}}
        } or %
        (%
            bool{LWR@intabularmetadata} and%
            not bool{LWR@tabularcelladded} and%
            test {%
                \ifnumcomp{\value{LWR@tableLaTeXcolindex}}{=}%
                    {\value{LWR@tabletotalLaTeXcols}}%
            }%
        )%
    }%
    {%
        \LWR@tabularfinishrow%
    }%
    {%
        \LWR@closetabledatacell%
    }%
    \LWR@htmlblocktag{/tr}%
    \@rowc@lors%
    \LWR@htmlblocktag{/table}%
    \boolfalse{LWR@intabularmetadata}%
    \addtocounter{LWR@tabulardepth}{-1}%
    \ifnumequal{\value{LWR@tabulardepth}}{0}{%
        \protected\gdef&{\LWR@origampmacro}%
        \StopDefiningTabulars%
    }{}%
    \ifbool{LWR@usedmultirow}{%
        \ifbool{LWR@foundmrowcell}%
            {\relax}%
            {%
                \PackageError{lwarp}%
                {%
                    When using \protect\multirow, \protect\multicolumnrow,\MessageBreak
                    or the bigdelim package,\MessageBreak
                    place \protect\mrowcell\space or \protect\mcolrowcell\MessageBreak
                    in empty cells which are to be skipped.\MessageBreak
                    See the Lwarp package documentation:\MessageBreak
                    "Special cases and limitations" -> "Tabular"
                }%
                {%
                    See the Lwarp package documentation:\MessageBreak
                    "Special cases and limitations" -> "Tabular".
                }%
            }%
    }{}%
    \LWR@traceinfo{LWR@HTML@endtabular finished}%
}

\csletcs{LWR@HTML@endtabular*}{LWR@HTML@endtabular}

\StopDefiningTabulars
\AtBeginDocument{
    \LetLtxMacro\LWR@origendtabular\endtabular
    \csletcs{LWR@origendtabular*}{endtabular*}
    \LWR@formatted{@tabular}
    \LWR@formatted{endtabular}
    \LWR@formatted{endtabular*}
}

\end{warpHTML}


\begin{warpHTML}


\def\@currentlabelname{\linkhomename}%
\def\LWR@stripperiod#1.\ltx@empty#2\@nil{#1}%
\newcommand*{\LWR@setlatestname}[1]{%
    \GetTitleStringExpand{#1}%
    \edef\@currentlabelname{\detokenize\expandafter{\GetTitleStringResult}}%
    \edef\@currentlabelname{%
        \expandafter\LWR@stripperiod\@currentlabelname%
        \ltx@empty.\ltx@empty\@nil%
    }%
}

\def\LWR@setref#1#2#3{%
  \ifx#1\relax%
    ??%
  \else%
   \expandafter#2#1%
  \fi}
\newcommand*{\LWR@nameref}[1]{%
    \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@firstoffive{#1}%
}
\newcommand*{\LWR@currentautosecpageref}[1]{%
    \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@secondoffive{#1}%
}
\newcommand*{\LWR@htmlfileref}[1]{%
    \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@thirdoffive{#1}%
}
\newcommand*{\LWR@lateximagedepthref}[1]{%
    \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@fourthoffive{#1}%
}
\newcommand*{\LWR@lateximagenumberref}[1]{%
    \expandafter\LWR@setref\csname r@#1@lwarp\endcsname\LWR@fifthoffive{#1}%
}
\newcommand*{\LWR@write@lwarplabel}[1]{%
    \LWR@traceinfo{LWR@write@lwarplabel !#1!}%
    \LWR@setlatestname{\@currentlabelname}%
        \@bsphack%
        \protected@write\@auxout{}%
            {%
                \string\newlabel{#1@lwarp}{%
                    {\@currentlabelname}%
                    {\theLWR@currentautosecpage}%
                    {%
                        \ifbool{FileSectionNames}%
                            {\LWR@thisfilename}%
                            {\arabic{LWR@htmlfilenumber}}%
                    }%
                    {\arabic{LWR@lateximagedepth}}%
                    {\arabic{LWR@lateximagenumber}}%
                }%
            }%
        \@esphack%
}


\newcommand*{\LWR@label@subcreatetag}{%
    \LWR@htmltag{a \LWR@print@mbox{id=\textquotedbl\LWR@sanitized\textquotedbl}}%
    \LWR@htmltag{/a}%
}

\newcommand*{\LWR@label@inmathcomment}{%
    \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
    {%
        \mbox{%
            \ifdef{\totwidth@}{\ifbool{LWR@amsmultline}{}{\hspace*{\totwidth@}}}{}%
            \LWR@htmlclosecomment%
            \LWR@label@subcreatetag%
            \LWR@htmlopencomment%
        }% mbox
    }% mathjax
    {%
        \LWR@label@subcreatetag%
    }%
}

\newcommand*{\LWR@label@createtag}[1]{%
    \LWR@traceinfo{LWR@label@createtag !#1!}%
    \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
    {}%
    {% not lateximage
        \LWR@sanitize{#1}%
        \ifbool{LWR@insidemathcomment}%
        {% inside HTML math comment
            \LWR@label@inmathcomment%
        }% inside HTML math comment
        {% not inside HTML math comment
            \ifbool{LWR@doingstartpars}%
            {% pars allowed
                \ifbool{LWR@doingapar}%
                {% par started
                    \LWR@label@subcreatetag%
                }% par started
                {% par not started
                    \LWR@stoppars%
                    \LWR@label@subcreatetag%
                    \LWR@startpars%
                }% par not started
            }% pars allowed
            {% pars not allowed
                    \LWR@label@subcreatetag%
            }% pars not allowed
        }% not inside HTML math comment
    }% not lateximage
}
\newcommand*{\LWR@new@label}[1]{%
    \LWR@traceinfo{LWR@new@label: starting}%
    \LWR@traceinfo{LWR@new@label: !#1!}%
    \LWR@orig@label{#1}%
    \LWR@traceinfo{%
        LWR@new@label: filesectionnames is %
        \ifbool{FileSectionNames}{true}{false}%
    }%
    \LWR@traceinfo{%
        LWR@new@label: LWR@thisfilename is !\LWR@thisfilename!%
    }%
    \LWR@traceinfo{%
        LWR@new@label: LWR@htmlfilenumber is \arabic{LWR@htmlfilenumber}%
    }%
    \LWR@write@lwarplabel{#1}%
    \LWR@label@createtag{#1}%
    % \@esphack%
    \LWR@traceinfo{LWR@new@label: done}%
}


\newcommand*{\LWR@addlinktitle}{%
    \ifdefvoid{\LWR@ThisAltText}{}{ % space
        title=\textquotedbl\LWR@ThisAltText\textquotedbl\ % space
        \gdef\LWR@ThisAltText{}%
    }%
}

\newcommand*{\LWR@startref}[1]
{%
    \LWR@sanitize{#1}%
    \LWR@traceinfo{LWR@startref A: !#1!}%
    \LWR@htmltag{a href=\textquotedbl%
    \LWR@traceinfo{LWR@startref B}%
    \LWR@print@mbox{\LWR@htmlrefsectionfilename{#1}}%
    \LWR@traceinfo{LWR@startref C}%
    \LWR@origpound%
    \LWR@traceinfo{LWR@startref D: !#1!}%
    \ifcsundef{r@#1@lwarp}%
    {%
        \LWR@traceinfo{LWR@startref D0: ??}%
        ??%
    }%
    {%
        \ifthenelse{\cnttest{\LWR@lateximagedepthref{#1}}{>}{0}}%
            {%
                lateximage-\BaseJobname-\LWR@lateximagenumberref{#1}%
            }%
            {%
                \LWR@traceinfo{LWR@startref D3}%
                \LWR@print@mbox{\LWR@sanitized}%
            }%
    }%
    \LWR@traceinfo{LWR@startref E}%
    \textquotedbl%
    \LWR@addlinktitle%
    }%
    \LWR@traceinfo{LWR@startref F}%
}

\NewDocumentCommand{\LWR@subnewref}{m m}{%
    \LWR@traceinfo{LWR@subnewref #1 #2}%
    \LWR@startref{#1}%
    \LWR@print@ref{#2}%
    \LWR@htmltag{/a}%
}

\LWR@absorbstar{ref}%
\NewDocumentCommand{\LWR@HTML@ref}{s m}{%
    \LWR@traceinfo{LWR@HTML@ref !#2!}%
    \IfBooleanTF{#1}%
        {\LWR@print@ref{#2}}%
        {\LWR@subnewref{#2}{#2}}%
}

\LWR@formatted{ref}
\NewDocumentCommand{\LWR@refwithsection}{s m}{%
    \LWR@traceinfo{LWR@refwithsection !#2!}%
    \IfBooleanTF{#1}%
        {\LWR@print@ref{\BaseJobname-autopage-\LWR@currentautosecpageref{#2}}}%
        {%
            \LWR@startref{#2}%
            \LWR@print@ref{\BaseJobname-autopage-\LWR@currentautosecpageref{#2}}%
            \LWR@htmltag{/a}%
        }%
}
\CustomizeMathJax{\let\LWRref\ref}
\CustomizeMathJax{\renewcommand{\ref}{\ifstar\LWRref\LWRref}}
\newcommand*{\pagerefPageFor}{see }
\NewDocumentCommand{\LWR@new@pageref}{s m}{%
    \IfBooleanTF{#1}%
        {(\pagerefPageFor\LWR@print@ref{#2})}%
        {(\cpageref{#2})}%
}

\newrobustcmd*{\nameref}[1]{%
    \LWR@traceinfo{nameref}%
    \LWR@startref{#1}%
    \LWR@traceinfo{nameref B}%
    \LWR@nameref{#1}%
    \LWR@traceinfo{nameref C}%
    \LWR@htmltag{/a}%
    \LWR@traceinfo{nameref: done}%
}

\LetLtxMacro\Nameref\nameref




\AtBeginDocument{
    \def\@currentHref{\BaseJobname-autopage-\theLWR@previousautopagelabel}%
}

\newcommand*{\LWR@linkcatcodes}{%
    \catcode`\#=12%
    \catcode`\%=12%
    \catcode`\&=12%
    \catcode`\~=12%
    \catcode`\_=12%
    \LWR@hook@processingtags%
}

\newcommand*{\LWR@linkmediacatcodes}{%
    \catcode`\#=12%
    \catcode`\%=12%
    \catcode`\~=12%
    \catcode`\_=12%
    \LWR@hook@processingtags%
}

\NewDocumentCommand{\LWR@subhyperref}{m}{%
    \LWR@traceinfo{LWR@subhyperref !#1!}%
    \LWR@sanitize{#1}%
    \LWR@htmltag{%
        a href=\textquotedbl\LWR@sanitized\textquotedbl\ % space
        \LWR@addlinktitle % space
        target=\textquotedbl\_{}blank\textquotedbl\ % space
    }%
}

\newcommand{\LWR@subhyperreftext}[1]{%
    #1%
    \LWR@htmltag{/a}%
    \LWR@ensuredoingapar%
}

\NewDocumentCommand{\LWR@subhyperrefclass}{m +m m}{%
    \LWR@htmltag{%
        a % space
        href=\textquotedbl\begingroup\@sanitize#1\endgroup\textquotedbl\ % space
        class=\textquotedbl#3\textquotedbl\ % space
        \LWR@addlinktitle % space
    }\LWR@orignewline%
    #2%
    \LWR@htmltag{/a}%
    \LWR@ensuredoingapar%
}

\DeclareDocumentCommand{\LWR@hrefb}{O{} m}{%
    \LWR@ensuredoingapar%
    \LWR@subhyperref{#2}%
    \endgroup% restore catcodes
    \LWR@subhyperreftext%
}

\newrobustcmd*{\LWR@href}{%
    \begingroup%
    \LWR@linkcatcodes%
    \LWR@hrefb%
}

\newcommand*{\LWR@nolinkurlb}[1]{%
    \LWR@ensuredoingapar%
    \def\LWR@templink{#1}%
    \@onelevel@sanitize\LWR@templink%
    \LWR@templink%
    \endgroup%
}

\newrobustcmd*{\LWR@nolinkurl}{%
    \begingroup%
    \LWR@linkcatcodes%
    \LWR@nolinkurlb%
}

\DeclareDocumentCommand{\LWR@urlb}{m}{%
    \LWR@ensuredoingapar%
    \def\LWR@templink{#1}%
    \@onelevel@sanitize\LWR@templink%
    \LWR@href{\LWR@templink}{\LWR@templink}%
    \endgroup%
}

\newrobustcmd*{\LWR@url}{%
    \begingroup%
    \LWR@linkcatcodes%
    \LWR@urlb%
}

\newcommand*{\LWR@subinlineimage}[6]{%
    \ifblank{#6}%
        {\renewcommand*{\LWR@tempone}{}}
        {\renewcommand*{\LWR@tempone}{role="#6"\LWR@indentHTML}}
    \ifblank{#1}%
    {%
        \LWR@htmltag{img \LWR@indentHTML
            src=\textquotedbl#3.#4\textquotedbl \LWR@indentHTML
            alt=\textquotedbl#3\textquotedbl \LWR@indentHTML
            \LWR@tempone
            style=\textquotedbl#5\textquotedbl \LWR@indentHTML
            class=\textquotedbl#2\textquotedbl \LWR@orignewline
        }%
    }%
    {%
        \LWR@htmltag{img \LWR@indentHTML
            src=\textquotedbl#3.#4\textquotedbl \LWR@indentHTML
            alt=\textquotedbl#1\textquotedbl \LWR@indentHTML
            \LWR@tempone
            style=\textquotedbl#5\textquotedbl \LWR@indentHTML
            class=\textquotedbl#2\textquotedbl \LWR@orignewline
        }%
    }%
}

\end{warpHTML}






\begin{warpHTML}

\NewDocumentCommand{\LWR@floatbegin}{m o}{%
    \LWR@spanwarninvalid{float}%
    \ifbool{FormatWP}{\newline}{}%
    \LWR@stoppars%
    \addtocounter{LWR@thisautoid}{1}%
    \booltrue{LWR@freezethisautoid}%
    \begingroup%
    \LWR@print@raggedright%
    \LWR@htmltag{%
        figure id=\textquotedbl%
            \LWR@print@mbox{autoid-\arabic{LWR@thisautoid}}%
        \textquotedbl\ % space
        class=\textquotedbl#1 \@nameuse{LWR@floatstyle@#1}\textquotedbl%
    }%
    \ifbool{FormatWP}{%
        \LWR@orignewline%
        \LWR@BlockClassWP{}{}{wp#1}%
    }{}%
    \renewcommand*{\@captype}{#1}%
    \LWR@startpars%
    \ifboolexpr{bool{FormatWP} and bool{WPMarkFloats}}{%

    === begin #1 ===

    }{}%
}
\AtBeginDocument{

\@ifpackageloaded{tocbasic}{

\appto\figure@atbegin{%
    \LWR@futurenonspacelet\LWR@mynexttoken\LWR@floatalignment%
}

}{}% tocbasic

}% AtBeginDocument
\AtBeginDocument{
    \def\@xfloat #1[#2]{%
        \LWR@floatbegin{#1}[#2]
        \LWR@futurenonspacelet\LWR@mynexttoken\LWR@floatalignment%
    }
    \def\@xdblfloat #1[#2]{%
        \LWR@floatbegin{#1}[#2]
        \LWR@futurenonspacelet\LWR@mynexttoken\LWR@floatalignment%
    }
}
\newcommand*{\LWR@floatend}{%
    \LWR@endfloatalignment%
    \ifboolexpr{bool{FormatWP} and bool{WPMarkFloats}}{%

    === end ===

    }{}%
    \LWR@stoppars%
    \ifbool{FormatWP}{\endLWR@BlockClassWP}{}%
    \LWR@htmlelementend{figure}%
    \endgroup%
    \boolfalse{LWR@freezethisautoid}%
    \LWR@startpars%
    \ifbool{FormatWP}{\newline}{}%
}
\AtBeginDocument{
    \let\end@float\LWR@floatend
    \let\end@dblfloat\LWR@floatend
}

\newcounter{LWR@thisautoid}

\newcounter{LWR@thisautoidWP}

\newbool{LWR@freezethisautoid}
\boolfalse{LWR@freezethisautoid}

\newcommand*{\LWR@forcenewautoidanchor}{%
    \addtocounter{LWR@thisautoid}{1}%
    \ifbool{LWR@doingapar}%
    {%
        \LWR@htmltag{a id=\textquotedbl%
            \LWR@print@mbox{autoid-\arabic{LWR@thisautoid}}%
            \textquotedbl\ }% space
        \LWR@htmltag{/a }%
    }%
    {%
        \LWR@stoppars%
        \LWR@htmltag{a id=\textquotedbl%
            \LWR@print@mbox{autoid-\arabic{LWR@thisautoid}}%
        \textquotedbl\ }% space
        \LWR@htmltag{/a }%
        \LWR@startpars%
    }%
}

\newcommand*{\LWR@newautoidanchor}{%
    \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
        {}%
        {\ifbool{LWR@freezethisautoid}{}{\LWR@forcenewautoidanchor}}%
}

\newcommand*{\@captype}{}

\newcommand*{\LWR@floatalignmentname}{}

\newcommand*{\LWR@floatalignment}{%
    \ifdefstrequal{\LWR@mynexttoken}{\centering}{%
        \center%
        \renewcommand*{\LWR@floatalignmentname}{center}%
    }{}%
    \ifdefstrequal{\LWR@mynexttoken}{\raggedright}{%
        \flushleft%
        \renewcommand*{\LWR@floatalignmentname}{flushleft}%
    }{}%
    \ifdefstrequal{\LWR@mynexttoken}{\raggedleft}{%
        \flushright%
        \renewcommand*{\LWR@floatalignmentname}{flushright}%
    }{}%
}

\newcommand*{\LWR@endfloatalignment}{%
    \ifdefvoid{\LWR@floatalignmentname}%
        {}%
        {\@nameuse{end\LWR@floatalignmentname}}%
    \renewcommand*{\LWR@floatalignmentname}{}%
}


\AtBeginDocument{\providecommand*{\CaptionSeparator}{:~}}

\AtBeginDocument{
    \@ifpackageloaded{caption}{}{
        \let\LWR@orig@caption\@caption%
        \long\def\@caption#1[#2]{%
            \LWR@spanwarnformat{caption}%
            \LWR@setlatestname{#2}%
            \LWR@orig@caption{#1}[{#2}]% also takes third argument
        }%

        \renewcommand{\@makecaption}[2]{%
            \LWR@traceinfo{@makecaption}%
            \caption@begin{\@captype}%
            \LWR@isolate{#1}%
            \edef\LWR@tempone{#1}%
            \ifdefvoid{\LWR@tempone}{}{\CaptionSeparator}%
            \LWR@isolate{#2}%
            \caption@end%
            \LWR@traceinfo{@makecaption: done}%
        }%
    }
}


\newcounter{LWR@nextautoid}
\newcounter{LWR@nextautopage}
\newcommand*{\LWRsetnextfloat}[2]{%
    \setcounter{LWR@nextautopage}{#1}%
    \setcounter{LWR@nextautoid}{#2}%
}

\newenvironment*{LWR@figcaption}
    {%
        \ifbool{FormatWP}{%
            \BlockClass[font-style:italic]{figurecaption}%
        }{%
            \BlockClass{figurecaption}%
        }%
            \hbadness=10000\relax%
    }%
    {\endBlockClass}
\newcommand*{\LWR@HTML@caption@begin}[1]
{%
    \LWR@traceinfo{LWR@HTML@caption@begin}%
    \begingroup%
    \RenewDocumentEnvironment{minipage}{O{t} o O{t} m}{}{}%
    \RenewDocumentCommand{\parbox}{O{t} O{} O{t} m +m}{##5}%
    \LWR@figcaption%
    \LWR@traceinfo{LWR@HTML@caption@begin: about to LWR@origcaption@begin}%
    \LWR@print@caption@begin{#1}%
    \LWR@traceinfo{LWR@HTML@caption@begin: done}%
}

\newcommand*{\LWR@HTML@caption@end}
{%
    \LWR@traceinfo{LWR@HTML@caption@end}%
    \LWR@print@caption@end%
    \endLWR@figcaption%
    \endgroup%
    % \leavevmode% avoid bad space factor (0) error
    \LWR@traceinfo{LWR@HTML@caption@end: done}%
}

\AtBeginDocument{
    \providecommand{\caption@begin}[1]{}
    \LWR@formatted{caption@begin}

    \providecommand{\caption@end}{}
    \LWR@formatted{caption@end}
}

\AtBeginDocument{%
\@ifpackageloaded{caption}{
    \let\LWR@origcaptionlistentry\captionlistentry

    \renewcommand*{\captionlistentry}{%
        \LWR@ensuredoingapar%
        \LWR@origcaptionlistentry%
    }
    \def\LWR@LTcaptionlistentry{%
        \LWR@ensuredoingapar%
        \LWR@forcenewautoidanchor%
        \bgroup%
        \@ifstar{\egroup\LWR@LT@captionlistentry}% gobble *
            {\egroup\LWR@LT@captionlistentry}%
    }%

    \def\LWR@LT@captionlistentry#1{%
        \caption@listentry\@firstoftwo[\LTcaptype]{#1}%
    }%
}% caption loaded
{% caption not loaded
    \newcommand{\captionlistentry}[2][]{}%
    \newcommand{\LWR@LT@captionlistentry}[2][]{}%
}
}% AtBeginDocument

\let\LWR@origaddcontentsline\addcontentsline

\renewcommand*{\addcontentsline}[3]{%
    \ifstrequal{#1}{toc}{}{% not TOC
    \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
        {}%
        {\LWR@newautoidanchor}%
        \ifcsvoid{ext@#2}{\csdef{ext@#2}{#1}}{}%
        \addtocontents{\@nameuse{ext@#2}}{%
            \protect\LWRsetnextfloat%
            {\arabic{LWR@currentautosecfloatpage}}%
            {\arabic{LWR@thisautoid}}%
        }%
    }% not TOC
    \LWR@origaddcontentsline{#1}{#2}{#3}%
}
\RequirePackage{capt-of}

\AtBeginDocument{
    \let\LWR@origcaptionof\captionof

    \renewcommand*{\captionof}{%
        \LWR@stoppars%
        \LWR@origcaptionof%
    }
}% AtBeginDocument

\end{warpHTML}


\begin{warpHTML}


\newcommand*{\LWR@myshorttoc}[1]{%
    \LWR@traceinfo{LWR@myshorttoc: #1}%
    \LWR@ensuredoingapar%
    \IfFileExists{\jobname.#1}{%
        \LWR@traceinfo{LWR@myshorttoc: loading}%
        \begingroup%
        \makeatletter%
        \LWR@disablepinyin%
        \@input{\jobname.#1}%
        \endgroup%
    }%
    {}%
    \LWR@traceinfo{LWR@myshorttoc: done}%
}

\NewDocumentCommand{\LWR@subtableofcontents}{m m}{%
    \@ifundefined{chapter}%
        {\LWR@closeprevious{section}}%
        {\LWR@closeprevious{chapter}}%
    \LWR@printpendingfootnotes%
    \@ifundefined{chapter}{\section*{#2}}{\chapter*{#2}}%
    \LWR@htmlelementclass{nav}{#1}%
    \LWR@myshorttoc{#1}%
    \LWR@htmlelementclassend{nav}{#1}%
}

\let\LWR@orig@starttoc\@starttoc

\renewcommand{\@starttoc}[1]{
    \LWR@htmlelementclass{nav}{#1}%
    \LWR@orig@starttoc{#1}%
    \LWR@htmlelementclassend{nav}{#1}%
}
\newbool{LWR@copiedsidetoc}
\boolfalse{LWR@copiedsidetoc}
\AtBeginDocument{

\let\LWR@origtableofcontents\tableofcontents

\renewcommand*{\tableofcontents}{%
    \ifboolexpr{bool{FormatWP} and bool{WPMarkTOC}}{

    === table of contents ===

    }
    {
        \ifbool{LWR@copiedsidetoc}{}{%
            \LWR@copyfile{\jobname.toc}{\jobname.sidetoc}%
            \booltrue{LWR@copiedsidetoc}%
        }%
        \LWR@printpendingfootnotes
        \LWR@origtableofcontents
    }
}% \tableofcontents

}% AtBeginDocument

\let\LWR@origlistoffigures\listoffigures

\renewcommand*{\listoffigures}{
    \ifboolexpr{bool{FormatWP} and bool{WPMarkLOFT}}{

    === list of figures ===

    }
    {
        \LWR@printpendingfootnotes
        \LWR@origlistoffigures
    }
}

\let\LWR@origlistoftables\listoftables

\renewcommand*{\listoftables}{
    \ifboolexpr{bool{FormatWP} and bool{WPMarkLOFT}}{

    === list of tables ===

    }
    {
        \LWR@printpendingfootnotes
        \LWR@origlistoftables
    }
}


\NewDocumentCommand{\LWR@listof}{m +m}{%
    \@ifundefined{l@#1}{%
        \csdef{l@#1}##1##2{\hypertocfloat{1}{#1}{\@nameuse{ext@#1}}{##1}{##2}}%
    }{}%
    \LWR@subtableofcontents{\@nameuse{ext@#1}}{#2}%
    \expandafter\newwrite\csname tf@\csname ext@#1\endcsname\endcsname%
    \immediate\openout \csname tf@\csname ext@#1\endcsname\endcsname%
        \jobname.\@nameuse{ext@#1}\relax%
}



\end{warpHTML}

\begin{warpall}

\newcounter{SideTOCDepth}
\setcounter{SideTOCDepth}{1}

\AtEndDocument{%
    \ifnumcomp{\value{SideTOCDepth}}{<}{\value{FileDepth}}{
        \PackageWarningNoLine{lwarp}
        {%
            SideTOCDepth is less than FileDepth,\MessageBreak
            so some website pages may be inaccessible%
        }
    }{}
}

\newcommand{\sidetocname}{Contents}

\end{warpall}

\begin{warpHTML}

\newcommand*{\LWR@sidetoc}{%
    \LWR@forcenewpage
    \LWR@stoppars

    \LWR@htmlelementclass{div}{sidetoccontainer}
    \LWR@htmlelementclass{nav}{sidetoc}

    \setcounter{tocdepth}{\value{SideTOCDepth}}

    \begin{BlockClass}{sidetoctitle}
    \ifcsvoid{thetitle}{}{\InlineClass{sidetocthetitle}{\thetitle}\par}
    \sidetocname
    \end{BlockClass}
    \begin{BlockClass}{sidetoccontents}
    \LinkHome

    \LWR@myshorttoc{sidetoc}
    \end{BlockClass}
    \LWR@htmlelementclassend{nav}{sidetoc}
    \LWR@htmlelementclassend{div}{sidetoccontainer}
}


\newcommand*{\LWR@numberline}[1]{%
    \LWR@sectionnumber{#1}\quad%
}

\LetLtxMacro\numberline\LWR@numberline

\newcommand*{\LWR@maybetocdata}{}

\NewDocumentCommand{\hypertoc}{m m +m m}{%
    \LWR@traceinfo{hypertoc !#1!#2!#3!#4!}%
    \ifnumcomp{#1}{>}{\value{tocdepth}}%
        {}%
        {%
            \LWR@startpars%
            \LWR@subhyperrefclass{%
                \LWR@htmlrefsectionfilename{\BaseJobname-autopage-#4}%
                    \LWR@origpound\LWR@print@mbox{autosec-#4}%
            }{#3}{toc#2}%
            \LWR@maybetocdata%
            \LWR@stoppars%
        }%
    \LWR@traceinfo{hypertoc done}%
}

\@ifclassloaded{memoir}{}{
    \newcounter{lofdepth}
    \setcounter{lofdepth}{1}
}

\@ifclassloaded{memoir}{}{
    \newcounter{lotdepth}
    \setcounter{lotdepth}{1}
}

\newcommand{\hypertocfloat}[5]{%
    \@ifundefined{c@#3depth}{%
        \newcounter{#3depth}%
        \setcounter{#3depth}{1}%
    }{}%
    \LWR@traceinfo{hypertocfloat depth is #1 #3depth is \arabic{#3depth}}%
    \ifthenelse{\cnttest{#1}{<=}{\arabic{#3depth}}}%
        {%
            \LWR@startpars%
            \LWR@subhyperrefclass{%
            \LWR@htmlrefsectionfilename{%
                \BaseJobname-autopage-\arabic{LWR@nextautopage}%
            }%
            \LWR@origpound\LWR@print@mbox{autoid-\arabic{LWR@nextautoid}}}%
            {#4}{toc#2}%
            \LWR@maybetocdata%
            \LWR@stoppars%
        }%
        {}%
}

\DeclareDocumentCommand{\l@book}{m m}{\hypertoc{-2}{book}{#1}{#2}}

\DeclareDocumentCommand{\l@part}{m m}{\hypertoc{-1}{part}{#1}{#2}}

\@ifundefined{chapter}
{}
{
\DeclareDocumentCommand{\l@chapter}{m m}
    {\hypertoc{0}{chapter}{#1}{#2}}
}

\renewcommand{\l@section}[2]{\hypertoc{1}{section}{#1}{#2}}

\renewcommand{\l@subsection}[2]{\hypertoc{2}{subsection}{#1}{#2}}

\renewcommand{\l@subsubsection}[2]{\hypertoc{3}{subsubsection}{#1}{#2}}

\renewcommand{\l@paragraph}[2]{\hypertoc{4}{paragraph}{#1}{#2}}

\renewcommand{\l@subparagraph}[2]{\hypertoc{5}{subparagraph}{#1}{#2}}

\renewcommand{\l@figure}[2]{\hypertocfloat{1}{figure}{lof}{#1}{#2}}

\renewcommand{\l@table}[2]{\hypertocfloat{1}{table}{lot}{#1}{#2}}

\end{warpHTML}




\begin{warpHTML}

\newcounter{LWR@autoindex}
\setcounter{LWR@autoindex}{0}

\newcounter{LWR@autoglossary}
\setcounter{LWR@autoglossary}{0}

\newcommand*{\IndexPageSeparator}{, }
\newcommand*{\IndexRangeSeparator}{--}

\@ifundefined{chapter}
    {\newcommand*{\LWR@indexsection}[1]{\section*{#1}}}
    {\newcommand*{\LWR@indexsection}[1]{\chapter*{#1}}}

\AtBeginDocument{

\renewenvironment*{theindex}{%
    \LWR@indexsection{\indexname}%
    \let\item\LWR@indexitem%
    \let\subitem\LWR@indexsubitem%
    \let\subsubitem\LWR@indexsubsubitem%
}{}

}% AtBeginDocument

\newcommand{\LWR@indexitem}[1][\@empty]{

    \InlineClass{indexitem}{\LWR@htmlcomment{}}#1%
}

\newcommand{\LWR@indexsubitem}{

    \InlineClass{indexsubitem}{\LWR@htmlcomment{}}%
}

\newcommand{\LWR@indexsubsubitem}{

    \InlineClass{indexsubsubitem}{\LWR@htmlcomment{}}%
}

\NewDocumentCommand{\LWR@xindex@modifyentry}{>{\SplitArgument{1}{|}}m}
    {\LWR@xindex@modifyentrysub#1}
\newcommand*{\LWR@xindex@modifyentrysub}[2]{%
    \edef\LWR@tempone{#1}%
    \edef\LWR@temptwo{#2}%
    \IfValueTF{#2}{%
        \ifx#2(%
            \appto\LWR@tempone{|(}%
        \else%
            \ifx#2)%
                \appto\LWR@tempone{|)}%
            \else%
                \appto\LWR@tempone{%
                    |hyperindexformat\LWRleftbrace%
                    \LWRbackslash#2%
                    \LWRrightbrace%
                }%
            \fi%
        \fi%
    }%
    {}%
}

\newbool{LWR@xindex@tricked}
\boolfalse{LWR@xindex@tricked}

\def\LWR@wrindex#1{%
    \ifbool{LWR@xindex}{%
        \ifbool{LWR@xindex@tricked}{}{%
            \protected@write\@indexfile{}%
            {%
                \LWRpercent\space hyperpage\LWRrightbrace%
                \LWRpercent\space trick xindex to assume hyperref%
            }%
            \global\booltrue{LWR@xindex@tricked}%
        }%
        \LWR@xindex@modifyentry{#1}%
    }{%
        \def\LWR@tempone{#1}%
    }%
    \addtocounter{LWR@autoindex}{1}%
    \label{LWRindex-\arabic{LWR@autoindex}}%
    \protected@write\@indexfile{}%
    {\string\indexentry{\LWR@tempone}{\arabic{LWR@autoindex}}}%
    \endgroup%
    \@esphack%
}

\AtBeginDocument{
\let\@wrindex\LWR@wrindex
}

\def\@wrglossary#1{%
    \addtocounter{LWR@autoglossary}{1}%
    \LWR@new@label{LWRglossary-\theLWR@autoglossary}%
    \protected@write\@glossaryfile{}%
    {\string\glossaryentry{#1}{\theLWR@autoglossary}}%
    \endgroup%
    \@esphack%
}

\newcommand*{\LWR@indexnameref@anonref}[1]{%
    \LWR@startref{LWRindex-#1}%
    (*)%
    \LWR@htmltag{/a}%
}

\newcommand*{\LWR@indexnameref@ref}[1]{%
    \edef\LWR@thisref{\csuse{r@LWRindex-#1}}%
    \ifdefvoid{\LWR@thisref}{}{%
        \edef\LWR@thisref{\expandafter\@firstoftwo\LWR@thisref}%
        \ifdefvoid{\LWR@thisref}%
            {\LWR@indexnameref@anonref{#1}}%
            {\ref{LWRindex-#1}}%
    }%
}

\newcommand*{\LWR@indexnameref@refnameref}[1]{%
    \edef\LWR@thisref{\csuse{r@LWRindex-#1}}%
    \ifdefvoid{\LWR@thisref}{}{%
        \edef\LWR@thisref{\expandafter\@firstoftwo\LWR@thisref}%
        \ifdefvoid{\LWR@thisref}{}{%
            \ifdefstring{\LWR@thisref}{(*)}%
                {}%
                {\ref{LWRindex-#1} }% space
        }%
    }%
    \nameref{LWRindex-#1}%
}

\newcommand*{\LWR@indexnameref@cref}[1]{%
    \edef\LWR@thisref{\csuse{r@LWRindex-#1}}%
    \ifdefvoid{\LWR@thisref}{%
        \nameref{LWRindex-#1}%
    }{%
        \edef\LWR@thisref{\expandafter\@firstoftwo\LWR@thisref}%
        \ifdefvoid{\LWR@thisref}{%
            \nameref{LWRindex-#1}%
        }{%
            \ifdefstring{\LWR@thisref}{(*)}{%
                \LWR@indexnameref@anonref{#1}%
            }{%
                \cref{LWRindex-#1}%
            }%
        }%
    }%
}

\newcommand*{\LWR@indexnameref@crefnameref}[1]{%
    \edef\LWR@thisref{\csuse{r@LWRindex-#1}}%
    \ifdefvoid{\LWR@thisref}%
        {}%
        {%
            \edef\LWR@thisref{\expandafter\@firstoftwo\LWR@thisref}%
            \ifdefvoid{\LWR@thisref}%
                {}%
                {%
                    \ifdefstring{\LWR@thisref}{(*)}%
                        {}%
                        {\cref{LWRindex-#1}} % space
                }%
        }%
    \nameref{LWRindex-#1}%
}

\newcommand*{\LWR@indexnameref}[1]{%
    {% group
        \ifdef{\caption@xref}{%
            \renewcommand*{\caption@xref}[2]{(*)}%
        }{}%
        \ifdefstring{\LWR@IndexRef}{ref}{%
            \LWR@indexnameref@ref{#1}%
        }{%
        \ifdefstring{\LWR@IndexRef}{nameref}{%
            \nameref{LWRindex-#1}%
        }{%
        \ifdefstring{\LWR@IndexRef}{refnameref}{%
            \LWR@indexnameref@refnameref{#1}%
        }{%
        \ifdefstring{\LWR@IndexRef}{cref}{%
            \LWR@indexnameref@cref{#1}%
        }{%
        \ifdefstring{\LWR@IndexRef}{crefnameref}{%
            \LWR@indexnameref@crefnameref{#1}%
        }{%
        \ifdefstring{\LWR@IndexRef}{autoref}{%
            \LWR@indexnameref@cref{#1}%
        }{% text string
            \LWR@startref{LWRindex-#1}%
            \LWR@IndexRef%
            \LWR@htmltag{/a}%
        }}}}}}%
    }% group
}

\newrobustcmd{\LWR@doindexentrysubsub}[2]{%
    \IfInteger{#1}%
        {\LWR@indexnameref{#1}}%
        {#1}%
    \IfValueT{#2}{%
        \IndexRangeSeparator%
        \IfInteger{#2}%
            {\LWR@indexnameref{#2}}%
            {#2}%
    }%
}
\NewDocumentCommand{\LWR@doindexentrysub}{m >{\SplitArgument{1}{#1}}m}
    {\LWR@doindexentrysubsub#2}

\newcommand*{\LWR@doindexentry}[1]{%
    \relax% required
    \expandafter\LWR@doindexentrysub\expandafter{\IndexRangeSeparator}{#1}%
}

\newcommand{\LWR@hyperindexrefnullified}{%
    \renewrobustcmd{\emph}[1]{\LWR@HTML@emph{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textbf}[1]{\LWR@HTML@textbf{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\texteb}[1]{\LWR@HTML@texteb{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textlg}[1]{\LWR@HTML@textlg{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textrm}[1]{\LWR@HTML@textrm{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textsf}[1]{\LWR@HTML@textsf{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\texttt}[1]{\LWR@HTML@texttt{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textup}[1]{\LWR@HTML@textup{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textsc}[1]{\LWR@HTML@textsc{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textulc}[1]{\LWR@HTML@textulc{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textsi}[1]{\LWR@HTML@textsi{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textit}[1]{\LWR@HTML@textit{\LWR@doindexentry{##1}}}%
    \renewrobustcmd{\textsl}[1]{\LWR@HTML@textsl{\LWR@doindexentry{##1}}}%
}

\newcommand*{\hyperindexref}[1]{%
    \relax% required
    \expandafter\LWR@hyperindexref@comma\expandafter{\IndexPageSeparator}{#1}%
}
\NewDocumentCommand{\LWR@hyperindexref@comma}
    {m >{\SplitList{#1}} m}
    {%
        \def\LWR@hyperindexref@thiscomma{}%
        \def\LWR@hyperindexref@nextcomma{#1}%
        \ProcessList{#2}\LWR@hyperindexref@@comma%
    }
\newcommand*{\LWR@hyperindexref@@comma}[1]{%
    \LWR@hyperindexref@thiscomma%
    \renewcommand{\LWR@hyperindexref@thiscomma}{\LWR@hyperindexref@nextcomma}%
    \expandafter\LWR@hyperindexref@range\expandafter{\IndexRangeSeparator}{#1}%
}
\NewDocumentCommand{\LWR@hyperindexref@range}
    {m >{\SplitArgument{1}{#1}} m}
    {\LWR@hyperindexrefsub#2}

\newcommand*{\LWR@hyperindexrefsub}[2]{%
    \LWR@hyperindexrefsubtwo{#1}%
    \IfValueT{#2}{%
        \IndexRangeSeparator%
        \LWR@hyperindexrefsubtwo{#2}%
    }%
}

\newcommand*{\LWR@hyperindexrefsubtwo}[1]{%
    \edef\LWR@tempone{#1}%
    \IfBeginWith{\LWR@tempone}{ }{%
        \StrGobbleLeft{\LWR@tempone}{1}[\LWR@tempone]%
    }{}%
    \IfInteger{\LWR@tempone}%
        {\LWR@indexnameref{\LWR@tempone}}%
        {%
            \begingroup%
            \LWR@hyperindexrefnullified%
            #1%
            \endgroup%
        }%
}

\LetLtxMacro\hyperpage\hyperindexref

\def\nohyperpage#1{}

\def\hyperindexformat#1#2{%
    #1{\hyperpage{#2}}%
}%

\end{warpHTML}

\begin{warpprint}
\newcommand{\hyperindexref}[1]{#1}
\end{warpprint}

\begin{warpall}
\providecommand{\glo@name}{}
\end{warpall}
\begin{warpHTML}
\renewcommand{\@biblabel}[1]{[#1]\quad}
\AtBeginDocument{

\AtBeginEnvironment{thebibliography}{

\providecommand*{\LWR@newem}[1]{\textit{#1}}

\renewrobustcmd{\em}{%
  \begingroup
    \gdef\LWR@em@after{\LWR@em@finish\LWR@newem}%
    \afterassignment\LWR@em@after
    \toks@\bgroup
}

\def\LWR@em@finish#1{%
    \xdef\LWR@em@after{\noexpand#1{\the\toks@}}%
  \endgroup
  \LWR@em@after\egroup
}

}% \AtBeginEnvironment{thebibliography}

}% \AtBeginDocument

\end{warpHTML}

\begin{warpHTML}
\newcommand*{\LWR@restoreMathJaxformatting}{}

\newcommand*{\LWR@restoreorigformatting}{%
    \LWR@traceinfo{LWR@restoreorigformatting}%
    \renewcommand*{\LWR@formatting}{print}%
    \linespread{1}%
    \let\par\LWR@origpar%
    \LWR@select@print@hspace%
    \LetLtxMacro\hfil\LWR@orighfil%
    \let\hss\LWR@orighss%
    \let\llap\LWR@origllap%
    \let\rlap\LWR@origrlap%
    \let\hfilneg\LWR@orighfilneg%
    \let\,\LWR@origcomma% disable HTML short unbreakable space
    \let\thinspace\LWR@origthinspace% disable HTML short unbreakable space
    \let\negthinspace\LWR@orignegthinspace% disable HTML negative short unbreakable space
    \let\textellipsis\LWR@origtextellipsis%
    \let\vdots\LWR@origvdots%
    \let\textless\LWR@origtextless%
    \let\textgreater\LWR@origtextgreater%
    \let\&\LWR@origampersand%
    \LetLtxMacro\em\LWR@origem%
    \LetLtxMacro\normalfont\LWR@orignormalfont%
    \let\sp\LWR@origsp%
    \let\sb\LWR@origsb%
    \LetLtxMacro\underline\LWR@origunderline%
    \let~\LWR@origtilde%
    \let\enskip\LWR@origenskip%
    \let\quad\LWR@origquad%
    \let\qquad\LWR@origqquad%
    \LetLtxMacro\endtabular\LWR@origendtabular%
    \csletcs{endtabular*}{LWR@origendtabular*}%
    \LetLtxMacro\noalign\LWR@orignoalign%
    \LetLtxMacro\hline\LWR@orighline%
    \let\newline\LWR@orignewline%
    \LetLtxMacro\includegraphics\LWR@origincludegraphics%
    \LetLtxMacro\@ensuredmath\LWR@origensuredmath%
    \let\math\LWR@orig@math%
    \let\endmath\LWR@orig@endmath%
    \let\displaymath\LWR@orig@displaymath%
    \let\enddisplaymath\LWR@orig@enddisplaymath%
    \LWR@restoreorigaccents%
    \LWR@restoreoriglists%
    \LWR@hook@processingtags%
    \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
        {\LWR@restoreMathJaxformatting}%
        {}%
}
\end{warpHTML}
\begin{warpHTML}
\newcommand*{\LWR@dash}{-}
\catcode`\$=\active% redefining $ below
\catcode`\_=12% redefining \_ below
\newcommand*{\LWR@nullfonts}{%
    \renewcommand*{\$}{-}%
    \renewcommand*{\%}{-}%
    \renewcommand*{\_}{-}%
    \renewcommand*{\}}{-}%
    \renewcommand*{\{}{-}%
    \renewcommand*{\&}{-}% used to be 'and'
    \renewcommand*{\#}{-}%
    \renewcommand*{\,}{-}%
    \renewcommand*{~}{-}%
    \renewcommand*{\`}[1]{##1}%
    \renewcommand*{\'}[1]{##1}%
    \renewcommand*{\^}[1]{##1}%
    \renewcommand*{\~}[1]{##1}%
    \renewcommand*{\=}[1]{##1}%
    \renewcommand*{\u}[1]{##1}%
    \renewcommand*{\.}[1]{##1}%
    \renewcommand*{\"}[1]{##1}%
    \renewcommand*{\H}[1]{##1}%
    \renewcommand*{\v}[1]{##1}%
    \renewcommand*{\d}[1]{##1}%
    \renewcommand*{\c}[1]{##1}%
    \renewcommand*{\b}[1]{##1}%
    \renewcommand*{\t}[1]{##1}%
    \let\newline\LWR@dash%
    \let\textasciicircum\LWR@dash%
    \let\textasciitilde\LWR@dash%
    \let\textasteriskcentered\LWR@dash%
    \let\textbackslash\LWR@dash%
    \let\textbar\LWR@dash%
    \let\textbardbl\LWR@dash%
    \let\textbigcircle\LWR@dash%
    \let\textbraceleft\LWR@dash%
    \let\textbraceright\LWR@dash%
    \let\textbullet\LWR@dash%
    \let\textcopyright\LWR@dash%
    \let\textdagger\LWR@dash%
    \let\textdaggerdbl\LWR@dash%
    \let\textdollar\LWR@dash%
    \let\textellipsis\LWR@dash%
    \let\textemdash\LWR@dash%
    \let\textendash\LWR@dash%
    \let\textexclamdown\LWR@dash%
    \let\textgreater\LWR@dash%
    \let\textless\LWR@dash%
    \let\textordfeminine\LWR@dash%
    \let\textordmasculine\LWR@dash%
    \let\textparagraph\LWR@dash%
    \let\textperiodcentered\LWR@dash%
    \let\textpertenthousand\LWR@dash%
    \let\textperthousand\LWR@dash%
    \let\textquestiondown\LWR@dash%
    \let\textquotedblleft\LWR@dash%
    \let\textquotedblright\LWR@dash%
    \let\textquoteleft\LWR@dash%
    \let\textquoteright\LWR@dash%
    \let\textregistered\LWR@dash%
    \let\textsection\LWR@dash%
    \let\textsterling\LWR@dash%
    \let\texttrademark\LWR@dash%
    \let\textunderscore\LWR@dash%
    \let\textvisiblespace\LWR@dash%
    \let\copyright\LWR@dash%
    \let\dag\LWR@dash%
    \let\ddag\LWR@dash%
    \let\dots\LWR@dash%
    \let\P\LWR@dash%
    \let\pounds\LWR@dash%
    \let\S\LWR@dash%
    \renewcommand*{\aa}{a}%
    \renewcommand*{\AA}{A}%
    \renewcommand*{\AE}{AE}%
    \renewcommand*{\ae}{ae}%
    \renewcommand*{\dh}{d}%
    \renewcommand*{\DH}{D}%
    \renewcommand*{\DJ}{D}%
    \renewcommand*{\dj}{d}%
    \renewcommand*{\IJ}{IJ}%
    \renewcommand*{\ij}{ij}%
    \renewcommand*{\L}{L}%
    \renewcommand*{\l}{l}%
    \renewcommand*{\NG}{NG}%
    \renewcommand*{\ng}{ng}%
    \renewcommand*{\O}{O}%
    \renewcommand*{\o}{o}%
    \renewcommand*{\oe}{oe}%
    \renewcommand*{\OE}{OE}%
    \renewcommand*{\ss}{ss}%
    \renewcommand*{\SS}{SS}%
    \renewcommand*{\th}{th}%
    \renewcommand*{\TH}{TH}%
    \let\guillemotleft\@empty%
    \let\guilsinglleft\@empty%
    \let\quotedblbase\@empty%
    \let\textquotedbl\@empty%
    \let\guillemotright\@empty%
    \let\guilsinglright\@empty%
    \let\quotesinglbase\@empty%
    \renewcommand*{\HTMLunicode}[1]{}%
    \renewcommand*{\HTMLentity}[1]{}%
    \renewcommand{\textsuperscript}[1]{##1}%
    \renewcommand{\textsubscript}[1]{##1}%
    \renewcommand{\underline}[1]{##1}%
    \RenewDocumentCommand{\hspace}{s m}{}%
    \RenewDocumentCommand{\LWR@htmlspanclass}{o D(){} m +m}{{##4}}%
    \DeclareExpandableDocumentCommand{\InlineClass}{D{(}{)}{} o m +m}{{##4}}%
    \def\(##1\){}%
    \def\[##1\]{}%
    \RenewDocumentCommand{\LWR@subsingledollar}{s m m m}{}%
    \renewcommand*{\TeX}{TeX}%
    \renewcommand*{\LaTeX}{LaTeX}%
    \renewcommand*{\LaTeXe}{LaTeX2e}%
    \renewcommand*{\LuaTeX}{LuaTeX}%
    \renewcommand*{\LuaLaTeX}{LuaLaTeX}%
    \renewcommand*{\XeTeX}{XeTeX}%
    \renewcommand*{\XeLaTeX}{XeLaTeX}%
    \renewcommand*{\ConTeXt}{ConTeXt}%
    \renewcommand*{\BibTeX}{BibTeX}%
    \renewcommand*{\MakeIndex}{MakeIndex}%
    \renewcommand*{\AmS}{AmS}%
    \renewcommand*{\MiKTeX}{MiKTeX}%
    \renewcommand*{\LyX}{LyX}%
    \def\texorpdfstring{\expandafter\@secondoftwo}%
}
\catcode`\$=3%
\catcode`\_=8%
\newcommand*{\FilenameNullify}[1]{%
    \appto{\LWR@nullfonts}{#1}%
}
\end{warpHTML}
\begin{warpall}

\newcommand*{\AltTextOpen}{(}

\newcommand*{\AltTextClose}{)}

\newcommand*{\ImageAltText}{image}

\newcommand*{\MathImageAltText}{math image}

\newcommand*{\LWR@ThisAltText}{}

\newcommand*{\ThisAltText}[1]{%
    \renewcommand{\LWR@ThisAltText}{#1}%
}

\newcommand*{\PackageDiagramAltText}{diagram}

\end{warpall}

\begin{warpHTML}
\newcounter{LWR@externalfilecnt}

\newbool{LWR@indisplaymathimage}

\newbool{LWR@insidemathcomment}
\boolfalse{LWR@insidemathcomment}

\newbool{LWR@xfakebold}
\boolfalse{LWR@xfakebold}

\newcommand*{\LWR@orig@setBold}{}

\newcommand*{\LWR@orig@unsetBold}{}

\newcommand*{\LWR@applyxfakebold}{}

\newcommand*{\LWR@setcurrentfont}{%
    \LWR@traceinfo{Using font family \LWR@f@family}%
    \@nameuse{LWR@print@\LWR@f@family family}%
    \LWR@traceinfo{Using font series \LWR@f@series}%
    \@nameuse{LWR@print@\LWR@f@series series}%
    \LWR@traceinfo{Using font shape \LWR@f@shape}%
    \@nameuse{LWR@print@\LWR@f@shape shape}%
    \LWR@traceinfo{Using font caps shape \LWR@f@shapecaps}%
    \@nameuse{LWR@print@\LWR@f@shapecaps shape}%
}

\let\LWR@origtextdollar\$

\renewcommand*{\$}{%
    \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
    {\LWR@origtextdollar}%
    {\HTMLunicode{00024}}%
}

\AtBeginDocument{

\ifpdf
    \newcommand*{\LWR@baselinename}{lwarp_baseline_marker.png}
\else
    \ifXeTeX
        \newcommand*{\LWR@baselinename}{lwarp_baseline_marker.png}
    \else
        \newcommand*{\LWR@baselinename}{lwarp_baseline_marker.eps}
    \fi
\fi

\IfFileExists{\LWR@baselinename}%
{
    \@ifpackageloaded{graphicx}{
        \newcommand*{\LWR@addbaselinemarker}{%
            \LWR@origincludegraphics{\LWR@baselinename}%
        }
    }{
        \@ifpackageloaded{graphics}{
            \newcommand*{\LWR@addbaselinemarker}{%
                \LWR@origincludegraphics{\LWR@baselinename}%
            }
        }{
            \newcommand*{\LWR@addbaselinemarker}{%
                \global\booltrue{LWR@warnbaselinemarker}%
            }
            \AtEndDocument{
                \ifbool{LWR@warnbaselinemarker}{
                    \PackageWarningNoLine{lwarp}{%
                        Load graphicx or graphics for improved\MessageBreak
                        SVG math sizing and baselines%
                    }
                }{}
            }
        }
    }
}{% lwarp_baseline_marker.png or .eps is not present
    \newcommand*{\LWR@addbaselinemarker}{%
        \global\booltrue{LWR@warnbaselinemarker}%
    }
    \AtEndDocument{
        \ifbool{LWR@warnbaselinemarker}{
            \PackageWarningNoLine{lwarp}{%
                File \LWR@baselinename\space is not installed\MessageBreak
                alongside the lwarp-*.sty files, so\MessageBreak
                SVG math sizing and baselines may not be accurate}
        }{}
    }
}

}% AtBeginDocument

\newbool{LWR@warnbaselinemarker}
\boolfalse{LWR@warnbaselinemarker}

\newbool{LWR@unknownmathsize}

\newcommand*{\LWR@singledollarmeasure}[1]{%
    \begingroup%
    \LWR@restoreorigformatting%
    \RenewDocumentEnvironment{lateximage}{s o s o o d()}{}{}% inside group
    \LWR@print@normalsize%
    \LWR@setcurrentfont%
    \global\advance\c@LWR@lateximagedepth 1\relax%
    \boolfalse{LWR@unknownmathsize}%
    \ifmmode%
        \global\sbox{\LWR@singledollarbox}{#1}%
    \else%
        \ifbool{LWR@dynamicmath}{%
            \ifbool{mathjax}{%
                \global\sbox{\LWR@singledollarbox}%
                    {\LWR@origensuredmath{#1}}%
            }{%
                \global\sbox{\LWR@singledollarbox}{#1}%
            }%
        }{%
            \global\sbox{\LWR@singledollarbox}{#1}%
        }%
    \fi%
    \global\sbox{\LWR@singledollarbox}{%
        \usebox{\LWR@singledollarbox}%
        \raisebox{-\dp\LWR@singledollarbox}{%
            \LWR@addbaselinemarker%
        }%
    }%
    \global\advance\c@LWR@lateximagedepth -1\relax% Due to AmS \text macro.
    \setlength{\LWR@singledollardepth}{%
        \LateximageFontScale\dp\LWR@singledollarbox%
    }%
    \global\LWR@singledollardepth=\LWR@singledollardepth%
    \setlength{\LWR@singledollarwidth}{%
        \LateximageFontScale\wd\LWR@singledollarbox%
    }%
    \global\LWR@singledollarwidth=\LWR@singledollarwidth%
    \setlength{\LWR@singledollarheight}{%
        \LateximageFontScale\ht\LWR@singledollarbox%
    }%
    \addtolength{\LWR@singledollarheight}{%
        \LateximageFontScale\dp\LWR@singledollarbox%
    }%
    \global\LWR@singledollarheight=\LWR@singledollarheight%
    \endgroup%
}

\newcommand*{\LWR@subsingledollarsvg}[4]{%
    \LWR@singledollarmeasure{#4}%
    \ifdimgreater{\LWR@singledollarwidth}{.7\LWR@singledollarheight}{%
        \def\LWR@singledollarstyle{%
            width:\LWR@convertto{em}{\the\LWR@singledollarwidth} em%
        }%
    }{%
        \def\LWR@singledollarstyle{%
            height:\LWR@convertto{em}{\the\LWR@singledollarheight} em%
        }%
    }%
    \ifdimless{\LWR@singledollarwidth}{.2em}%
    {%
        \def\LWR@singledollarstyle{%
            height:\LWR@convertto{em}{\the\LWR@singledollarheight} em%
        }%
    }%
    {}%
    \ifdimless{\LWR@singledollarheight}{.2em}%
    {%
        \def\LWR@singledollarstyle{%
            width:\LWR@convertto{em}{\the\LWR@singledollarwidth} em%
        }%
    }%
    {}%
    \ifdimgreater{\LWR@singledollardepth}{0.05ex}{%
        \def\LWR@singledollardepthstyle{%
            \ ; % extra space
            \LWR@print@mbox{%
                vertical-align:-\LWR@convertto{em}{\the\LWR@singledollardepth} em%
            } % extra space
        }%
    }{%
        \def\LWR@singledollardepthstyle{}%
    }%
    \ifbool{LWR@unknownmathsize}{%
        \def\LWR@singledollarstyle{}%
        \def\LWR@singledollardepthstyle{}%
    }{}%
    \ifbool{LWR@dynamicmath}{%
        \LWR@traceinfo{subsingledollar: dynamic}%
        \begin{lateximage}% no hashing
            [\MathImageAltText]% alt tag
            []% no add'l hashing
            [\LWR@singledollarstyle \LWR@singledollardepthstyle]% CSS
            (math)% ARIA
    }{% not dynamic math
        \LWR@traceinfo{subsingledollar: static}%
        \IfValueTF{#1}{% #1 True
            \LWR@findcurrenttextcolor% sets \LWR@tempcolor
            \ifbool{LWR@xfakebold}%
                {\def\LWR@tempone{Y}}%
                {\def\LWR@tempone{N}}%
            \begin{lateximage}*% use hashing
                [#2]% alt
                *% do not add open/closing braces
                [% addl' hashing
                    #3%
                    FM\LWR@f@family%
                    SR\LWR@f@series%
                    SH\LWR@f@shape%
                    SHC\LWR@f@shapecaps%
                    CL\LWR@tempcolor%
                    FB\LWR@tempone% xfakebold
                ]%
                [\LWR@singledollarstyle \LWR@singledollardepthstyle]% CSS
                (math)% ARIA
        }{% #1 False
            \begin{lateximage}% no hashing
                [#2]% alt
                []% no add'l hashing
                [\LWR@singledollarstyle \LWR@singledollardepthstyle]% CSS
                (math)% ARIA
        }%
    }% not dynamic math
    \LWR@addbaselinemarker%
    \LWR@applyxfakebold%
    \usebox{\LWR@singledollarbox}%
    \LWR@addbaselinemarker%
    \end{lateximage}%
}

\newlength{\LWR@singledollarwidth}
\newlength{\LWR@singledollarheight}
\newlength{\LWR@singledollardepth}

\newsavebox{\LWR@singledollarbox}

\NewDocumentCommand{\LWR@subsingledollar}{s m m m}{%
    \LWR@traceinfo{LWR@subsingledollar}%
    \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
    {%
        \LWR@traceinfo{LWR@subsingledollar: already in a lateximage}%
            #4% contents
    }%
    {% not in a lateximage
        \begingroup%
        \LWR@applyxfakebold%
        \ifboolexpr{%
            (
                bool{mathjax} or
                ( bool{FormatWP} and bool{WPMarkMath} )
            ) and
            ( not test {
                    \ifstrequal {#2}% from \ensuredmath
                        {\AltTextOpen\MathImageAltText\AltTextClose}
                }
            ) and
            ( not bool{LWR@dynamicmath} )
        }%
        {%
            \LWR@traceinfo{LWR@subsingledollar: Mathjax}%
            {%
                \textbackslash(%
                {%
                    \ifmmode\else\LWR@print@ttfamily\fi%
                    \LWR@HTMLsanitize{#4}%
                }%
                \textbackslash)%
            }%
        }% mathjax
        {% not mathjax
            \LWR@traceinfo{%
                LWR@subsingledollar: NOT mathjax, or is ensuremath, or is dynamic%
            }%
            \LWR@subsingledollarsvg{#1}{#2}{#3}{#4}%
        }% not mathjax
        \endgroup%
    }% not in a lateximage
    \gdef\LWR@ThisAltText{}%
    \LWR@traceinfo{LWR@subsingledollar: done}%
}

\LetLtxMacro\LWR@origdollar$
\LetLtxMacro\LWR@secondorigdollar$% balance for editor syntax highlighting

\LetLtxMacro\LWR@origopenparen\(
\LetLtxMacro\LWR@origcloseparen\)
\LetLtxMacro\LWR@origopenbracket\[
\LetLtxMacro\LWR@origclosebracket\]
\begingroup
\catcode`\$=\active%
\protected\gdef${\@ifnextchar$\LWR@doubledollar\LWR@singledollar}%

\protected\gdef\LWR@newsingledollar{\@ifnextchar$\LWR@doubledollar\LWR@singledollar}%

\protected\gdef\LWR@doubledollar$#1$${%
\ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
{

    \IfSubStr{\detokenize\expandafter{#1}}{\detokenize{note}}{%
        \LWR@hidelatexequation{math}{#1}%
        \InlineClass{hidden}{\LWR@syncnotenumbers}%
        \textbackslash[%
        {\LWR@print@ttfamily\LWR@HTMLsanitize{#1}}%
        \textbackslash]
        \InlineClass{hidden}{\LWR@syncnotenames}%
    }{%
        \textbackslash[%
        {\LWR@print@ttfamily\LWR@HTMLsanitize{#1}}%
        \textbackslash]
    }%

}% mathjax
{% not mathjax
    \begin{BlockClass}{displaymath}%
    \LWR@newautoidanchor%
    \booltrue{LWR@indisplaymathimage}%
    \begin{lateximage}%
    [%
        \textbackslash{[} % extra space
        \LWR@HTMLsanitize{#1} % extra space
        \textbackslash{]}%
    ]%
    *% do not add open/closing braces
    (math)% ARIA
    \LWR@applyxfakebold%
    \LWR@origdollar\LWR@origdollar#1\LWR@origdollar\LWR@origdollar%
    \end{lateximage}%
    \end{BlockClass}%
}% not mathjax
\gdef\LWR@ThisAltText{}%
}%
\protected\gdef\LWR@singledollar#1${%
\ifbool{mathjax}{%
    \LWR@subsingledollar*%
    {% alt tag
        \textbackslash( %
        \LWR@HTMLsanitize{#1} % extra space
        \textbackslash)%
    }%
    {singledollar}% add'l hashing
    {#1}% contents
}{% not mathjax
    \LWR@subsingledollar*%
    {% alt tag
        \textbackslash( %
        \LWR@HTMLsanitize{#1} % extra space
        \textbackslash)%
    }%
    {singledollar}% add'l hashing
    {\LWR@origensuredmath{#1}}% contents
}% not mathjax
\gdef\LWR@ThisAltText{}%
}

\AtBeginDocument{
    \protected\gdef\(#1\){$#1$}
    \protected\gdef\[#1\]{$$#1$$}
}

\endgroup% active $
\AtBeginDocument{
\LetLtxMacro\LWR@openbracketnormal\[
\LetLtxMacro\LWR@closebracketnormal\]
}

\LetLtxMacro\LWR@origensuredmath\@ensuredmath

\renewcommand{\@ensuredmath}[1]{%
    \ifbool{mathjax}{%
        \LWR@subsingledollar*{\AltTextOpen\MathImageAltText\AltTextClose}%
        {%
            \protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}%
        }%
        {%
            \relax%
            \LWR@origensuredmath{#1}%
        }%
    }{% SVG math
        \ifmmode%
            \LWR@origensuredmath{#1}%
        \else%
            \ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
                {\LWR@origensuredmath{#1}}%
                {%
                    \LWR@subsingledollar*%
                        {\AltTextOpen\MathImageAltText\AltTextClose}%
                        {\protect\LWR@HTMLsanitize{\detokenize\expandafter{#1}}}%
                        {\LWR@origensuredmath{#1}}%
                }%
        \fi%
    }%
    \gdef\LWR@ThisAltText{}%
}

\let\LWR@orig@math\math
\let\LWR@orig@endmath\endmath

\let\LWR@orig@displaymath\displaymath
\let\LWR@orig@enddisplaymath\enddisplaymath

\let\math\relax
\let\endmath\relax

\let\displaymath\relax
\let\enddisplaymath\relax

\NewEnviron{math}{\expandafter\(\BODY\)}
\NewEnviron{LWR@displaymathnormal}{\expandafter\[\BODY\]\@ignoretrue}

\LetLtxMacro\displaymath\LWR@displaymathnormal%
\LetLtxMacro\enddisplaymath\endLWR@displaymathnormal%
\newenvironment{LWR@displaymathother}
{%
    \begin{BlockClass}{displaymath}%
    \LWR@newautoidanchor%
    \booltrue{LWR@indisplaymathimage}%
    \begin{lateximage}[\MathImageAltText](math)% [alt](ARIA)
    \LWR@origdollar\LWR@origdollar%
}
{%
    \LWR@origdollar\LWR@origdollar%
    \end{lateximage}%
    \end{BlockClass}%
}
\newenvironment{LWR@equationother}
{%
    \begin{BlockClass}{displaymathnumbered}%
    \LWR@newautoidanchor%
    \booltrue{LWR@indisplaymathimage}%
    \begin{lateximage}[\MathImageAltText](math)% [alt](ARIA)
    \LWR@orig@equation%
}
{%
    \LWR@orig@endequation%
    \end{lateximage}%
    \end{BlockClass}%
}

\newcounter{LWR@nextequation}
\newcommand\LWR@article@theequation{\@arabic\c@equation}

\newcommand\LWR@book@theequation
  {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@equation}

\newcommand\LWR@chapter@theequation{\thechapter.\arabic{equation}}
\newcommand\LWR@section@thequation{\thesection.\arabic{equation}}
\newcommand\LWR@subsection@thequation{\thesubsection.\arabic{equation}}

\AtBeginDocument{
    % default per article class:
    \newcommand*{\theMathJaxsubequations}{0}
    \newcommand*{\theMathJaxsection}{}
    \newcommand*{\theMathJaxequation}{\arabic{equation}}

    \ifdefstrequal{\theequation}{\LWR@article@theequation}
    {}{
    \ifdefstrequal{\theequation}{\LWR@book@theequation}{
        \renewcommand*{\theMathJaxsection}{\ifnum \c@chapter>\z@ \thechapter.\fi}
    }{
    \ifdefstrequal{\theequation}{\LWR@subsection@thequation}{
        \renewcommand*{\theMathJaxsection}{\thesubsection{}.}
    }{
    \ifdefstrequal{\theequation}{\LWR@section@thequation}{
        \renewcommand*{\theMathJaxsection}{\thesection{}.}
    }{
    \ifdefstrequal{\theequation}{\LWR@chapter@theequation}{
        \renewcommand*{\theMathJaxsection}{\thechapter{}.}
    }{% unknown format
        \PackageWarningNoLine{lwarp}
        {%
            Unknown equation tag format for \protect\theequation.\MessageBreak
            Article-style equation numbering will be used%
        }
    }}}}}
}
\newcommand*{\LWR@syncmathjax}{%
        \LWR@stoppars%
        \InlineClass{hidden}{
            \textbackslash(%
            \textbackslash{}seteqnumber%
            \{\theMathJaxsubequations\}%
            \{\theMathJaxsection\}%
            \{\theMathJaxequation\}%
            \textbackslash)%
        }
        \LWR@startpars%
}
\NewDocumentCommand{\LWR@hidelatexequation}{m +m}{%
    \LWR@stoppars
    \LWR@htmlopencomment

    \begingroup
    \@nameuse{LWR@orig@#1}
    \LWR@restoreorigformatting
    \booltrue{LWR@insidemathcomment}
    \hbadness=10000\relax%
    #2
    \@nameuse{LWR@orig@end#1}
    \endgroup

    \LWR@htmlclosecomment
    \boolfalse{LWR@insidemathcomment}
    \LWR@startpars
}

\NewDocumentCommand{\LWR@addmathjax}{m +m}{%
    \LWR@origtilde\LWR@orignewline
    {%
        \LWR@print@ttfamily%
        \textbackslash{}begin\{#1\}
        \ifboolexpr{
            test {\ifstrequal{#1}{alignat}} or
            test {\ifstrequal{#1}{alignat*}} or
            test {\ifstrequal{#1}{alignat+}}
        }%
            {\{\arabic{LWR@maxfields@}\}}%
            {}%
        \LWR@orignewline%
        \LWR@HTMLsanitizeexpand{\detokenize\expandafter{#2}}%
        \LWR@orignewline%
        \textbackslash{}end\{#1\}
    }%
    \LWR@orignewline
}

\AtBeginDocument{
    \let\LWR@orig@equation\equation
    \let\LWR@orig@endequation\endequation
    \csletcs{LWR@orig@equation*}{equation*}
    \csletcs{LWR@orig@endequation*}{endequation*}
}
\newcommand*{\LWR@doequation}[2]{%

    \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
    {
        \LWR@syncmathjax%
        \LWR@hidelatexequation{#2}{#1}
    }
    {% not mathjax
        \ifstrequal{#2}{equation*}{%
            \begin{BlockClass}{displaymath}%
        }{%
            \begin{BlockClass}{displaymathnumbered}%
        }%
        \LWR@newautoidanchor%
        \booltrue{LWR@indisplaymathimage}%
        \begin{lateximage}[%
            \ifstrequal{#2}{equation*}{%
                \ifdefequal{\LWR@equationtag}{\theequation}{%
    %                                   no tag was given
                }{%
                    (\LWR@equationtag) % tag was given
                }%
            }{%
                (\LWR@equationtag) % automatic numbering
            }%
            \textbackslash{begin\{#2\}} % extra space
            \LWR@HTMLsanitizeexpand{\detokenize\expandafter{#1}} % extra space
            \textbackslash{end\{#2\}}%
        ]*(math)% alt tag, ARIA
        \LWR@applyxfakebold%
        \@nameuse{LWR@orig@#2}%
        #1% contents collected by \collect@body
        \@nameuse{LWR@orig@end#2}%
        \end{lateximage}%
        \end{BlockClass}%
    }% not mathjax
    \gdef\LWR@ThisAltText{}%
}
\newcommand*{\LWR@doendequation}[1]{%
    \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
    {%
        \IfSubStr{\detokenize\expandafter{\BODY}}{\detokenize{note}}{%
            \InlineClass{hidden}{\LWR@syncnotenumbers}%
            \LWR@addmathjax{#1}{\BODY}%
            \InlineClass{hidden}{\LWR@syncnotenames}%
        }{%
            \LWR@addmathjax{#1}{\BODY}%
        }%
    }{}%

    \gdef\LWR@ThisAltText{}%
}

\newcommand*{\LWR@synconenotenumber}[2]{%
    \textbackslash(
    \textbackslash{}def\textbackslash{}#1\{#2\}
    \textbackslash)
}

\newcommand*{\LWR@syncnotenumbers}{\LWR@synconenotenumber{LWRfootnote}{\thefootnote}}

\newcommand*{\LWR@synconenotename}[2]{%
    \textbackslash(
    \textbackslash{}def\textbackslash{}#1name\{#2\}
    \textbackslash)
}

\newcommand*{\LWR@syncnotenames}{\LWR@synconenotename{LWRfootnote}{\footnotename}}

\AtBeginDocument{
    \let\equation\relax
    \let\endequation\relax
    \csletcs{equation*}{relax}
    \csletcs{endequation*}{relax}
}

\AtBeginDocument{
    \NewEnviron{equation}%
        {\LWR@doequation{\BODY}{equation}}%
        [\LWR@doendequation{equation}]

    \LetLtxMacro\LWR@equationnormal\equation
    \LetLtxMacro\endLWR@equationnormal\endequation
}% AtBeginDocument

\AtBeginDocument{
    \NewEnviron{equation*}%
        {\LWR@doequation{\BODY}{equation*}}%
        [\LWR@doendequation{equation*}]

    \csletcs{LWR@equationnormalstar}{equation*}
    \csletcs{LWR@endequationnormalstar}{endequation*}
}% AtBeginDocument

\AtBeginDocument{
    \LetLtxMacro\LWR@equationless\equation
    \LetLtxMacro\endLWR@equationless\endequation
    \csletcs{LWR@equationlessstar}{equation*}
    \csletcs{LWR@endequationlessstar}{endequation*}
}

\newcommand*{\displaymathnormal}{%
    \ifbool{LWR@origmathjax}{\booltrue{mathjax}}{\boolfalse{mathjax}}%
    \LetLtxMacro\[\LWR@openbracketnormal%
    \LetLtxMacro\]\LWR@closebracketnormal%
    \LetLtxMacro\displaymath\LWR@displaymathnormal%
    \LetLtxMacro\enddisplaymath\endLWR@displaymathnormal%
    \LetLtxMacro\equation\LWR@equationnormal%
    \LetLtxMacro\endequation\endLWR@equationnormal%
    \csletcs{equation*}{LWR@equationnormalstar}%
    \csletcs{endequation*}{LWR@endequationnormalstar}%
}

\newcommand*{\displaymathother}{%
    \boolfalse{mathjax}%
    \LetLtxMacro\displaymath\LWR@displaymathother%
    \LetLtxMacro\enddisplaymath\endLWR@displaymathother%
    \LetLtxMacro\[\LWR@displaymathother%
    \LetLtxMacro\]\endLWR@displaymathother%
    \LetLtxMacro\equation\LWR@equationother%
    \LetLtxMacro\endequation\endLWR@equationother%
    \csletcs{equation*}{displaymath}%
    \csletcs{endequation*}{enddisplaymath}%
}

\end{warpHTML}

\begin{warpprint}

\newcommand*{\displaymathnormal}{}
\newcommand*{\displaymathother}{}

\end{warpprint}

\begin{warpHTML}

\newbool{LWR@amsmultline}
\boolfalse{LWR@amsmultline}

\newcommand*{\LWR@beginhideamsmath}{
    \LWR@stoppars
    \LWR@origtilde\LWR@orignewline
    \LWR@htmlopencomment

    \begingroup
    \LWR@restoreorigformatting
    \hbadness=10000\relax%
    \booltrue{LWR@insidemathcomment}
}

\newcommand*{\LWR@endhideamsmath}{
    \endgroup

    \LWR@htmlclosecomment
    \boolfalse{LWR@insidemathcomment}
    \LWR@orignewline
    \LWR@startpars
}


\let\LWR@origeqnarray\eqnarray
\let\LWR@origendeqnarray\endeqnarray
\newbool{LWR@numbereqnarray}
\booltrue{LWR@numbereqnarray}
\newcommand{\LWR@eqnarrayfactor}{%
    \ifboolexpr{bool{mathjax} or ( bool{FormatWP} and bool{WPMarkMath} ) }%
    {%
        \LWR@syncmathjax%
        \boolfalse{LWR@amsmultline}%
        \ifbool{LWR@numbereqnarray}%
        {%
            \LWR@beginhideamsmath%
            \LWR@origeqnarray%
            \BODY%
            \LWR@origendeqnarray%
            \LWR@endhideamsmath%
            \LWR@addmathjax{eqnarray}{\BODY}%
        }%
        {% not LWR@numbereqnarray
            \LWR@addmathjax{eqnarray*}{\BODY}%
        }% LWR@numbereqnarray
    }% mathjax
    {% not mathjax
        \ifbool{LWR@numbereqnarray}%
        {%
            \begin{BlockClass}{displaymathnumbered}%
            \LWR@newautoidanchor%
            \booltrue{LWR@indisplaymathimage}%
            \begin{lateximage}[(\LWR@startingequationtag\textendash\LWR@equationtag)%
                \LWR@addmathjax{eqnarray}{\BODY}]*(math)%
            \LWR@applyxfakebold%
            \LWR@origeqnarray%
            \BODY%
            \LWR@origendeqnarray%
            \end{lateximage}%
            \end{BlockClass}%
        }%
        {% not LWR@numbereqnarray
            \begin{BlockClass}{displaymath}%
            \LWR@newautoidanchor%
            \booltrue{LWR@indisplaymathimage}%
            \begin{lateximage}[\LWR@addmathjax{eqnarray*}{\BODY}]*(math)%
            \LWR@applyxfakebold%
            \def\@eqncr{\nonumber\@seqncr}
            \csuse{LWR@origeqnarray}%
            \BODY%
            \nonumber\csuse{LWR@origendeqnarray}%
            \end{lateximage}%
            \end{BlockClass}%
        }% LWR@numbereqnarray
    }% not mathjax
    \booltrue{LWR@numbereqnarray}%
    \gdef\LWR@ThisAltText{}%
}
\RenewEnviron{eqnarray}
{%

\LWR@eqnarrayfactor

}
\csgpreto{eqnarray*}{\boolfalse{LWR@numbereqnarray}}
\end{warpHTML}

\begin{warpHTML}
\newcounter{LWR@lateximagenumber}
\setcounter{LWR@lateximagenumber}{0}
\newcounter{LWR@lateximagedepth}
\setcounter{LWR@lateximagedepth}{0}

\edef\LWR@hashmark{\string#} % for use in \write
\edef\LWR@percent{\@percentchar} % for use in \write
\newcounter{LWR@LIpage}
\end{warpHTML}

\begin{warpall}

\newcommand*{\LateximageFontSizeName}{normalsize}

\newcommand*{\LateximageFontScale}{1}

\end{warpall}


\begin{warpHTML}

\newcounter{LWR@startingequation}

\@ifundefined{chapter}
{
\renewcommand{\theLWR@startingequation}{%
    \arabic{LWR@startingequation}%
}
}
{% chapter defined
\renewcommand{\theLWR@startingequation}{%
    \ifnumcomp{\value{chapter}}{>}{0}{\arabic{chapter}.}{}%
    \arabic{LWR@startingequation}%
}
}

\newbool{LWR@isstartingequation}

\let\LWR@startingequationtag\theLWR@startingequation

\newcommand*{\LWR@equationtag}{}

\AtBeginDocument{

\ifbool{mathjax}{}{% not mathjax

\NewDocumentCommand{\LWR@remembertag}{m}{%
    \ifbool{LWR@isstartingequation}%
    {%
        \global\boolfalse{LWR@isstartingequation}%
        \xdef\LWR@startingequationtag{#1}%
    }{}%
    \xdef\LWR@equationtag{#1}%
}%

}% not mathjax
}% AtBeginDocument


\newcommand*{\LWR@amsmathbody}[1]
{%
    \textbackslash\{begin\}\{#1\} % extra space
    \LWR@HTMLsanitizeexpand{\detokenize\expandafter{\the\@envbody}}%
    \textbackslash\{end\}\{#1\}%
}

\newcommand*{\LWR@amsmathbodynumbered}[1]
{%
    \ifnumcomp{\value{LWR@startingequation}}{=}{\value{equation}}%
        {(\LWR@equationtag)}%
        {(\LWR@startingequationtag\textendash\LWR@equationtag)} % extra space
    \LWR@amsmathbody{#1} % extra space
}


\newcommand{\LWR@lateximage@oneimageb}[4]{%
    \LWR@subinlineimage{#1}{lateximage}%
    {%
        \LWR@print@mbox{%
            \LWR@ImagesDirectory\OSPathSymbol%
            #2%
        }%
    }{svg}{#3}{#4}%
}

\newcommand{\LWR@lateximage@oneimage}[5]{%
    \ifdefvoid{\LWR@ThisAltText}{%
        \IfBooleanTF{#4}{%
            \LWR@lateximage@oneimageb{#1}{#2}{#3}{#5}%
        }{%
            \LWR@lateximage@oneimageb%
                {\AltTextOpen#1\AltTextClose}%
                {#2}{#3}{#5}%
        }%
    }{%
        \LWR@lateximage@oneimageb%
            {\AltTextOpen\LWR@ThisAltText\AltTextClose}%
            {#2}{#3}{#5}%
    }%
}

\catcode`\$=\active%

\NewDocumentEnvironment{lateximage}{s O{\ImageAltText} s O{} O{} D(){}}%
{%
\LWR@traceinfo{lateximage: starting on \jobname.pdf page \arabic{page}}%
\LWR@traceinfo{lateximage: entering depth is \arabic{LWR@lateximagedepth}}%
\ifnumcomp{\value{LWR@lateximagedepth}}{>}{0}%
{%
    \global\advance\c@LWR@lateximagedepth 1\relax% Due to AmS \text macro.
}%
{% start of outer-most lateximage
    \LWR@traceinfo{lateximage: starting outer-most lateximage}%
    \setcounter{LWR@startingequation}{\value{equation}}%
    \addtocounter{LWR@startingequation}{1}%
    \booltrue{LWR@isstartingequation}%
    \let\LWR@startingequationtag\theLWR@startingequation%
    \let\LWR@equationtag\theequation%
    \addtocounter{LWR@lateximagenumber}{1}%
    \LWR@traceinfo{lateximage: LWR@lateximagenumber is \arabic{LWR@lateximagenumber}}%
    \boolfalse{mathjax}%
    \LWR@ensuredoingapar%
            \hbadness=10000\relax%
    \addtocounter{LWR@externalfilecnt}{1}%
    \LWR@traceinfo{lateximage: LWR@externalfilecnt is \arabic{LWR@externalfilecnt}}%
    \setcounterpageref{LWR@LIpage}{%
        LWRlateximage-\BaseJobname-\arabic{LWR@lateximagenumber}%
    }%
    \LWR@traceinfo{lateximage: LWR@LIpage is \arabic{LWR@LIpage}}%
    \LWR@htmltag{span\LWR@indentHTML%
        id=\textquotedbl{}%
            lateximage-\BaseJobname-\arabic{LWR@lateximagenumber}%
            \textquotedbl\LWR@indentHTML
        class=\textquotedbl{}lateximagesource\textquotedbl\LWR@orignewline
    }%
    \LWR@traceinfo{lateximage: about to write to \BaseJobname-images.txt}%
    \IfBooleanTF{#1}% starred
    {% hash
        \ifdefvoid{\LWR@ThisAltText}{%
            \IfBooleanTF{#3}{%
                \edef\LWR@hashedname{%
                    \LWR@mdfive{\detokenize\expandafter{#2}-!-#4}%
                }%
            }{%
                \edef\LWR@hashedname{%
                    \LWR@mdfive{\detokenize\expandafter{\AltTextOpen#2\AltTextClose}-!-#4}%
                }%
            }%
        }{%
            \edef\LWR@hashedname{%
                \LWR@mdfive{\detokenize\expandafter{\AltTextOpen\LWR@ThisAltText\AltTextClose}-!-#4}%
            }%
        }%
        \LWR@traceinfo{lateximage: hash is \LWR@hashedname}%
        \immediate\write\LWR@lateximagesfile{%
            |\arabic{LWR@LIpage}|true|\LWR@hashedname|%
        }%
    }% hash
    {% no hash
        \LWR@traceinfo{lateximage: hash false}%
        \immediate\write\LWR@lateximagesfile{%
            |\arabic{LWR@LIpage}|false|\LWR@ImagesName\arabic{LWR@externalfilecnt}|%
        }%
    }% no hash
    \LWR@traceinfo{lateximage: about to create open comment}%
    \LWR@htmlopencomment%
     \addtocounter{LWR@lateximagedepth}{1}%
    \LWR@traceinfo{lateximage: about to create a new page}%
    \LWR@maybe@orignewpage%
    \LWR@traceinfo{lateximage: about to create minipage}%
    \ifdimless{\linewidth}{6in}{%
        \LWR@print@minipage{\linewidth}%
    }{%
        \LWR@print@minipage{6in}%
    }%
    \@nameuse{LWR@print@\LateximageFontSizeName}%
    \LWR@traceinfo{lateximage: about to temporarily restore formatting}%
    \LWR@restoreorigformatting%
    \def\@mpfn{footnote}%
    \def\thempfn{\thefootnote}%
    \LetLtxMacro\@footnotetext\LWR@footnotetext%
    \LWR@traceinfo{lateximage: about to create label}%
    \LWR@orig@label{LWRlateximage-\BaseJobname-\arabic{LWR@lateximagenumber}}%
    \LWR@traceinfo{lateximage: finished creating the label}%
    \ifdefvoid{\LWR@ruleHTMLcolor}{}{%
        \LWR@print@arrayrulecolor[HTML]{\LWR@ruleHTMLcolor}%
    }%
    \LetLtxMacro$\LWR@origdollar%
    \catcode`\$=3% math shift
    \LetLtxMacro\(\LWR@origopenparen%
    \LetLtxMacro\)\LWR@origcloseparen%
    \ifbool{LWR@indisplaymathimage}{}{% not in display math
        \LetLtxMacro\[\LWR@origopenbracket%
        \LetLtxMacro\]\LWR@origclosebracket%
        \let\equation\LWR@orig@equation%
        \let\endequation\LWR@orig@endequation%
        \csletcs{equation*}{LWR@orig@equation*}%
        \csletcs{endequation*}{LWR@orig@endequation*}%
    }% not in display math
    \LetLtxMacro\LWR@newsingledollar$%
    \LetLtxMacro\LWR@newsingledollar$% syntax highlighting
}% end of outer-most lateximage
\LWR@traceinfo{lateximage: finished start of environment}%
}% end of \begin{lateximage}
{% start of \end{lateximage}
\LWR@traceinfo{lateximage: starting end of lateximage}%
\LWR@traceinfo{lateximage: internal depth was \arabic{LWR@lateximagedepth}}%
\ifnumcomp{\value{LWR@lateximagedepth}}{>}{1}%
{%
    \LWR@traceinfo{lateximage: unnesting}%
    \global\advance\c@LWR@lateximagedepth -1\relax%
}%
{% end of outer-most lateximage
\LWR@traceinfo{lateximage: ending outer-most lateximage}%
    \endLWR@print@minipage%
    \LWR@maybe@orignewpage%
    \LWR@print@vspace*{.5\baselineskip}%
    \LWR@htmlclosecomment%
    \LWR@traceinfo{lateximage: The page after the image is \arabic{page}}%
    \IfBooleanTF{#1}% starred
    {% hash
        \LWR@lateximage@oneimage{#2}{\LWR@hashedname}{#5}{#3}{#6}%
    }% hash
    {% no hash
        \LWR@lateximage@oneimage{#2}{\LWR@ImagesName\theLWR@externalfilecnt}{#5}{#3}{#6}%
    }% no hash
    \LWR@ensuredoingapar%
    \LWR@htmltag{/span}%
    \ifbool{HTMLDebugComments}{%
        \LWR@htmlcomment{End of lateximage}%
    }{}%
    \addtocounter{LWR@lateximagedepth}{-1}%
    \gdef\LWR@ThisAltText{}%
}% end of outer-most lateximage
\LWR@traceinfo{lateximage: exiting depth is \arabic{LWR@lateximagedepth}}%
\LWR@traceinfo{lateximage: done}%
}%
\catcode`\$=3% math shift
\end{warpHTML}

\begin{warpprint}

\NewDocumentEnvironment{lateximage}{s o s o o d()}
    {\begin{varwidth}[b]{\linewidth}}
    {\end{varwidth}}

\end{warpprint}


\begin{warpHTML}

\newenvironment*{LWR@HTML@center}
{%
    \LWR@forcenewpage%
    \ifbool{FormatWP}%
        {\BlockClass[\LWR@print@mbox{text-align:center}]{center}}%
        {\BlockClass{center}}%
}
{\endBlockClass}

\LWR@formattedenv{center}

\newenvironment*{LWR@HTML@flushright}
{%
    \LWR@forcenewpage%
    \ifbool{FormatWP}%
        {\BlockClass[\LWR@print@mbox{text-align:right}]{flushright}}%
        {\BlockClass{flushright}}%
}
{\endBlockClass}

\LWR@formattedenv{flushright}

\newenvironment*{LWR@HTML@flushleft}
{%
    \LWR@forcenewpage%
    \ifbool{FormatWP}%
        {\BlockClass[\LWR@print@mbox{text-align:left}]{flushleft}}%
        {\BlockClass{flushleft}}%
}
{\endBlockClass}

\LWR@formattedenv{flushleft}


\newcommand*{\LWR@HTML@centering}{%
    \ifbool{HTMLDebugComments}{%
        \LWR@htmlcomment{centering}%
    }{}%
}
\LWR@formatted{centering}

\newcommand*{\LWR@HTML@raggedleft}{%
    \ifbool{HTMLDebugComments}{%
        \LWR@htmlcomment{raggedleft}%
    }{}%
}
\LWR@formatted{raggedleft}

\newcommand*{\LWR@HTML@raggedright}{%
    \ifbool{HTMLDebugComments}{%
        \LWR@htmlcomment{raggedright}%
    }{}%
}
\LWR@formatted{raggedright}

\renewcommand{\leftline}[1]{\begin{flushleft}#1\end{flushleft}}

\renewcommand{\centerline}[1]{\begin{center}#1\end{center}}

\renewcommand{\rightline}[1]{\begin{flushright}#1\end{flushright}}

\end{warpHTML}

\begin{warpHTML}
\newcommand*{\LWR@PreloadedPackage}[1]{%
    \@ifpackageloaded{#1}%
        {%
            \AtBeginDocument{
                \LWR@origRequirePackage{lwarp-#1}%
            }
        }%
        {}%
}

\LWR@PreloadedPackage{inputtrc}

\LWR@PreloadedPackage{textcomp}

\LWR@PreloadedPackage{xunicode}

\LWR@PreloadedPackage{graphics}
\LWR@PreloadedPackage{graphicx}

\LWR@PreloadedPackage{scalefnt}

\LWR@PreloadedPackage{fontaxes}

\LWR@PreloadedPackage{cmbright}
\LWR@PreloadedPackage{fourier}
\LWR@PreloadedPackage{kpfonts}
\LWR@PreloadedPackage{kpfonts-otf}
\LWR@PreloadedPackage{libertinust1math}
\LWR@PreloadedPackage{pxfonts}
\LWR@PreloadedPackage{txfonts}
\LWR@PreloadedPackage{txgreeks}
\LWR@PreloadedPackage{newpxmath}
\LWR@PreloadedPackage{newtxmath}
\LWR@PreloadedPackage{newtxsf}
\LWR@PreloadedPackage{mathalpha}
\LWR@PreloadedPackage{unicode-math}

\LWR@PreloadedPackage{nfssext-cfr}

\LWR@PreloadedPackage{ulem}

\LWR@PreloadedPackage{xetexko}

\LWR@PreloadedPackage{geometry}

\LWR@PreloadedPackage{plext}

\LWR@PreloadedPackage{stfloats}

\LWR@PreloadedPackage{lltjext}

\LWR@PreloadedPackage{luatexko}

\end{warpHTML}




\begin{warpHTML}

\newrobustcmd{\LWR@siunitx@textcelsius}{\HTMLentity{deg}C}
\newrobustcmd{\LWR@siunitx@textdegree}{\HTMLentity{deg}}
\newrobustcmd{\LWR@siunitx@textprime}{\HTMLunicode{2032}}
\newrobustcmd{\LWR@siunitx@textdblprime}{\HTMLunicode{2033}}
\newrobustcmd{\LWR@siunitx@textplanckbar}{\text{\textit{\HTMLunicode{210F}}}}

\appto\LWR@restoreorigformatting{%
\renewrobustcmd{\LWR@siunitx@textcelsius}{\text{\ensuremath{^\circ}C}}%
\renewrobustcmd{\LWR@siunitx@textdegree}{\text{\ensuremath{^\circ}}}%
\renewrobustcmd{\LWR@siunitx@textprime}{\text{\ensuremath{^\prime}}}%
\renewrobustcmd{\LWR@siunitx@textdblprime}{\text{\ensuremath{^{\prime\prime}}}}%
\renewrobustcmd{\LWR@siunitx@textplanckbar}{\text{\ensuremath{\hbar}}}%
}

\PassOptionsToPackage{
    detect-mode=true,
    per-mode=symbol, % fraction is not seen by pdftotext
    text-celsius = {\LWR@siunitx@textcelsius},
    text-degree = {\LWR@siunitx@textdegree},
    text-arcminute = {\LWR@siunitx@textprime} ,
    text-arcsecond = {\LWR@siunitx@textdblprime} ,
}{siunitx-v2}

\end{warpHTML}

\begin{warpprint}
\define@key{Gin}{class}{}
\define@key{Gin}{alt}{}
\AtBeginDocument{
\@ifpackageloaded{overpic}{
\newcommand*{\overpicfontsize}{12}
\newcommand*{\overpicfontskip}{14}
}{}
}
\end{warpprint}

\begin{warpall}
\AtBeginDocument{
\@ifpackageloaded{xcolor}{
\LWR@traceinfo{patching xcolor}
\LetLtxMacro\colorboxBlock\colorbox
\LetLtxMacro\LWR@orig@print@fcolorbox\fcolorbox

\newsavebox{\LWR@colorminipagebox}

\NewDocumentCommand{\LWR@print@fcolorbox}{o m o m +m}{%
\LWR@traceinfo{LWR@print@fcolorbox #2 #4}%
\begin{lrbox}{\LWR@colorminipagebox}%
#5%
\end{lrbox}%
\ifstrequal{#4}{none}%
{% #4 none
    \LWR@traceinfo{background is none}%
    {% scope the \colorlet
        \colorlet{LWR@currentcolor}{.}%
        \color{#2}%
        \fbox{%
            \color{LWR@currentcolor}%
            \usebox{\LWR@colorminipagebox}%
        }% fbox
    }% colorlet
}% #4 none
{% #4 not none
\LWR@traceinfo{background not none}%
\IfValueTF{#1}%
{%
    \IfValueTF{#3}%
    {\LWR@orig@print@fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR@colorminipagebox}}}%
    {\LWR@orig@print@fcolorbox[#1]{#2}{#4}{\usebox{\LWR@colorminipagebox}}}%
}%
{% no value #1
    \IfValueTF{#3}%
    {\LWR@orig@print@fcolorbox{#2}[#3]{#4}{\usebox{\LWR@colorminipagebox}}}%
    {\LWR@orig@print@fcolorbox{#2}{#4}{\usebox{\LWR@colorminipagebox}}}%
}% no value #1
}% #4 not none
\LWR@traceinfo{LWR@print@fcolorbox done}%
}
\renewrobustcmd*{\fcolorbox}{\LWR@print@fcolorbox}%
\newcommand*{\LWR@print@fcolorboxBlock}{\LWR@print@fcolorbox}

\newrobustcmd*{\fcolorboxBlock}{\LWR@print@fcolorboxBlock}

\NewDocumentEnvironment{LWR@print@fcolorminipage}{o m o m O{c} O{} o m}
{%
\LWR@traceinfo{*** fcolorminipage: #2 #4 #8}%
\begin{lrbox}{\LWR@colorminipagebox}%
\IfValueTF{#7}%
{\begin{minipage}[#5][#6][#7]{#8}}%
{\begin{minipage}[#5][#6][#5]{#8}}%
}%
{%
\end{minipage}%
\end{lrbox}%
\LWR@traceinfo{*** starting end fcolorminipage #1 #2 #3 #4 #8}%
\ifstrequal{#4}{none}%
{% #4 none
    {% scope the \colorlet
        \colorlet{LWR@currentcolor}{.}%
        \color{#2}%
        \fbox{%
            \color{LWR@currentcolor}%
            \usebox{\LWR@colorminipagebox}%
        }% fbox
    }% colorlet
}% #4 none
{% #4 not none
    \IfValueTF{#1}%
    {%
    \IfValueTF{#3}%
    {\LWR@orig@print@fcolorbox[#1]{#2}[#3]{#4}{\usebox{\LWR@colorminipagebox}}}%
    {\LWR@orig@print@fcolorbox[#1]{#2}{#4}{\usebox{\LWR@colorminipagebox}}}%
    }%
    {% no value #1
    \IfValueTF{#3}%
    {\LWR@orig@print@fcolorbox{#2}[#3]{#4}{\usebox{\LWR@colorminipagebox}}}%
    {\LWR@orig@print@fcolorbox{#2}{#4}{\usebox{\LWR@colorminipagebox}}}%
    }% no value #1
}% #4 not none
\LWR@traceinfo{*** finished end fcolorminipage}%
}

\NewDocumentEnvironment{fcolorminipage}{}
    {\LWR@print@fcolorminipage}
    {\endLWR@print@fcolorminipage}

\LWR@traceinfo{xcolor patches done}
}{}% xcolor loaded
}% AtBeginDocument
\end{warpall}

\begin{warpprint}

\AtBeginDocument{
\@ifpackageloaded{chemmacros}{
\DeclareDocumentEnvironment{polymerdelims}{}
    {}{}

\DeclareDocumentEnvironment{redoxreaction}{m m}
    {\rule{0pt}{#1}}{\rule[-#2]{0pt}{#2}}
}{}% chemmacros
}% AtBeginDocument

\end{warpprint}

\begin{warpHTML}

\AtEndPreamble{
    \RequirePackage{cleveref}
}

\end{warpHTML}
\begin{warpHTML}

\LetLtxMacro\LWR@orig@label\label% includes memoir, before cleveref
\LetLtxMacro\label\LWR@new@label

\LetLtxMacro\LWR@orig@pageref\pageref
\LetLtxMacro\pageref\LWR@new@pageref

\end{warpHTML}


\begin{warpHTML}

\BeforeBeginEnvironment{picture}{\begin{lateximage}[picture]}

\AfterEndEnvironment{picture}{\end{lateximage}}

\end{warpHTML}


\begin{warpHTML}

\newlength{\LWR@minipagewidth}
\newlength{\LWR@minipageheight}
\newcounter{LWR@virtualpagedepth}
\setcounter{LWR@virtualpagedepth}{0}
\NewDocumentEnvironment{LWR@setvirtualpage}{s O{1}}{%
    \ifnumequal{\value{LWR@virtualpagedepth}}{0}{%
        \IfBooleanT{#1}{\LWR@maybe@orignewpage}%
        \setlength{\linewidth}{6in/#2}%
        \setlength{\textwidth}{6in}%
        \setlength{\textheight}{9in}%
    }{}%
    \addtocounter{LWR@virtualpagedepth}{1}%
}
{\addtocounter{LWR@virtualpagedepth}{-1}}
\newbool{LWR@minipagefullwidth}
\boolfalse{LWR@minipagefullwidth}
\newbool{LWR@forceminipagefullwidth}
\boolfalse{LWR@forceminipagefullwidth}
\newcommand*{\minipagefullwidth}{\global\booltrue{LWR@minipagefullwidth}}
\newcommand*{\UseMinipageWidths}{\boolfalse{LWR@forceminipagefullwidth}}
\newcommand*{\IgnoreMinipageWidths}{\booltrue{LWR@forceminipagefullwidth}}
\end{warpHTML}
\begin{warpprint}
\newcommand*{\minipagefullwidth}{}
\newcommand*{\UseMinipageWidths}{}
\newcommand*{\IgnoreMinipageWidths}{}
\end{warpprint}
\begin{warpHTML}
\newbool{LWR@minipagethispar}
\boolfalse{LWR@minipagethispar}
\NewDocumentEnvironment{LWR@HTML@sub@minipage}{m m m m}
{%
\LWR@traceinfo{minipage}%
\begin{LWR@setvirtualpage}*%
\setlength{\LWR@minipagewidth}{#4}%
\ifnumequal{\value{LWR@virtualpagedepth}}{1}{%
    \addtolength{\LWR@minipagewidth}{3em}% room for frames
}{}%
\LWR@traceinfo{computed width is \LWR@printlength{\LWR@minipagewidth}}%
\setlength{\LWR@minipageheight}{\textheight}% default unless specified
\ifblank{#2}{}{\setlength{\LWR@minipageheight}{#2}}%
\ifbool{FormatWP}{\newline}{}%
\LWR@stoppars%
\ifbool{FormatWP}{%

\addtocounter{LWR@thisautoidWP}{1}%
\LWR@htmltag{%
    div id=\textquotedbl%
        \LWR@print@mbox{autoidWP-\arabic{LWR@thisautoidWP}}%
    \textquotedbl\ % space
    class=\textquotedbl{}wpminipage\textquotedbl%
}%

}{}%
\LWR@traceinfo{minipage: creating div class}%
\LWR@htmltag{div class=\textquotedbl{}minipage\textquotedbl\ style=\textquotedbl%
\ifthenelse{\equal{#1}{t}}{\LWR@print@mbox{vertical-align:bottom} ; }{}%
\ifthenelse{\equal{#1}{c}}{\LWR@print@mbox{vertical-align:middle} ; }{}%
\ifthenelse{\equal{#1}{b}}{\LWR@print@mbox{vertical-align:top} ; }{}%
\ifthenelse{\equal{#3}{t}}{\LWR@print@mbox{justify-content:flex-start} ; }{}%
\ifthenelse{\equal{#3}{c}}{\LWR@print@mbox{justify-content:center} ; }{}%
\ifthenelse{\equal{#3}{b}}{\LWR@print@mbox{justify-content:flex-end} ; }{}%
\ifthenelse{\equal{#3}{s}}{\LWR@print@mbox{justify-content:space-between} ; }{}%
\LWR@traceinfo{minipage: about to print the width of \LWR@printlength{\LWR@minipagewidth}}%
\ifbool{LWR@minipagefullwidth}%
{\global\boolfalse{LWR@minipagefullwidth}}%
{%
    \ifbool{LWR@forceminipagefullwidth}%
        {}%
        {%
            \ifdimequal{#4}{\linewidth}%
                {}%
                {width:\LWR@printlength{\LWR@minipagewidth} ; }%
        }%
}%
\LWR@traceinfo{minipage: about to print the height}%
\ifblank{#2}{}{height:\LWR@printlength{\LWR@minipageheight} ; }%
\textquotedbl%
}%

\ifnumequal{\value{LWR@virtualpagedepth}}{1}{%
    \addtolength{\LWR@minipagewidth}{-3em}% undo frame padding
}{}%
\setlength{\linewidth}{\LWR@minipagewidth}%
\LWR@print@raggedright%
    \LWR@newautopagelabel{page}%
\def\@mpfn{mpfootnote}%
\def\thempfn{\thempfootnote}\c@mpfootnote\z@%
\let\@footnotetext\@mpfootnotetext%
\LWR@startpars%
\ifboolexpr{bool{FormatWP} and bool{WPMarkMinipages}}{%

=== begin minipage ===

}{}%
\LWR@traceinfo{minipage: finished starting the minipage}%
}% finished \minipage
{% \endminipage
\LWR@printpendingmpfootnotes%
\ifboolexpr{bool{FormatWP} and bool{WPMarkMinipages}}{%

=== end minipage ===

}{}%
\LWR@stoppars%

\ifbool{FormatWP}{%

\LWR@htmlelementend{div}%

}{}%
\LWR@htmldivclassend{minipage}%

\end{LWR@setvirtualpage}%
\LWR@startpars%
\ifbool{FormatWP}{\newline}{}%
\global\booltrue{LWR@minipagethispar}%
\LWR@traceinfo{LWR@minipage: done}%
}

\NewDocumentEnvironment{LWR@HTML@minipage}{O{t} O{} O{t} m}
    {\LWR@HTML@sub@minipage{#1}{#2}{#3}{#4}}
    {\endLWR@HTML@sub@minipage}

\LWR@formattedenv{minipage}
\NewDocumentCommand{\LWR@HTML@parbox}{O{t} O{} O{t} m +m}
{
\LWR@traceinfo{parbox of width #4}%
\begin{minipage}[#1][#2][#3]{#4}%
#5
\end{minipage}%
}

\LWR@formatted{parbox}
\newcommand*{\LWR@HTML@mbox}[1]{{#1}}

\LWR@formatted{mbox}
\NewDocumentCommand{\LWR@@makebox@paren}{m m}{%
\IfValueTF{#2}{%
    \setlength{\LWR@tempwidth}{#1\unitlength}%
    \setlength{\LWR@tempheight}{#2\unitlength}%
    \appto{\LWR@temptwo}{%
        \LWR@print@mbox{width:\LWR@printlength{\LWR@tempwidth}} ; % space
        \LWR@print@mbox{height:\LWR@printlength{\LWR@tempheight}} ; % space
    }%
}{%
    \PackageError{lwarp}%
        {(width,height) is missing a comma ',' character}%
        {\protect\makebox\space and \protect\framebox\space accept
            a size in the format (width,height).}%
}%
}
\newcommand*{\LWR@@makebox@align}[1]{%
    \def\LWR@align{center}%
    \ifstrequal{#1}{l}{\def\LWR@align{left}}{}%
    \ifstrequal{#1}{r}{\def\LWR@align{right}}{}%
    \ifstrequal{#1}{s}{\def\LWR@align{justify}}{}%
    \appto{\LWR@temptwo}{%
        \LWR@print@mbox{text-align:\LWR@align} ; %
    }%
}
\NewDocumentCommand{\LWR@HTML@makebox}{>{\SplitArgument{1}{,}}d() o o +m}{%
    \begin{LWR@setvirtualpage}%
        \def\LWR@temptwo{}%
        \IfValueTF{#1}%
        {% (width,height) ..
            \LWR@@makebox@paren #1%
            \IfValueT{#2}%
            {% (width,height) [posn]
                \LWR@@makebox@align{#2}%
            }%
        }%
        {% [width]
            \IfValueT{#2}% [width]
            {%
                \setlength{\LWR@tempwidth}{#2}%
                \ifdimgreater{\LWR@tempwidth}{0pt}{%
                    \appto{\LWR@temptwo}{%
                        width:\LWR@printlength{\LWR@tempwidth} ; % space
                    }%
                }{}%
            }%
        }%
        \IfValueT{#3}%
        {% [width] [posn]
            \LWR@@makebox@align{#3}%
        }%
        \InlineClass[%
            \LWR@print@mbox{display:inline-block} ; %
            \LWR@temptwo%
        ]%
        {makebox}%
        {#4}%
    \end{LWR@setvirtualpage}%
}
\LWR@formatted{makebox}
\NewDocumentCommand{\LWR@HTML@framebox}{d() o o +m}{%
    \fbox{\makebox(#1)[#2][#3]{#4}}%
}

\LWR@formatted{framebox}
\newlength{\LWR@atleastonept}

\newcommand*{\LWR@forceminwidth}[1]{%
\setlength{\LWR@atleastonept}{#1}%
\ifthenelse{%
    \lengthtest{\LWR@atleastonept>0pt}\AND%
    \lengthtest{\LWR@atleastonept<1pt}%
}%
    {\setlength{\LWR@atleastonept}{1pt}}%
    {}%
}

\newcommand*{\LWR@fboxstyle}{%
\LWR@findcurrenttextcolor%
\LWR@traceinfo{LWR@fboxstyle B}%
border:\LWR@printlength{\LWR@atleastonept} solid \LWR@origpound\LWR@tempcolor ; %
padding:\LWR@printlength{\fboxsep} ; %
color:\LWR@origpound\LWR@tempcolor%
}
\newcommand{\LWR@HTML@fbox}[1]{%
\LWR@traceinfo{HTML fbox}%
\LWR@forceminwidth{\fboxrule}%
\LWR@traceinfo{HTML fbox B}%
\InlineClass[%
    \LWR@print@mbox{display:inline-block} ; %
    \LWR@fboxstyle%
]{fbox}{#1}%
\LWR@traceinfo{HTML fbox: done}%
}
\AtBeginDocument{\LWR@formatted{fbox}}
\end{warpHTML}
\begin{warpall}
\let\fboxBlock\fbox
\end{warpall}

\begin{warpHTML}
\newcommand{\LWR@HTML@fboxBlock}[1]{%
\LWR@forceminwidth{\fboxrule}%
\LWR@stoppars%
\begin{BlockClass}[%
\LWR@fboxstyle%
]{fboxBlock}
#1
\end{BlockClass}
\LWR@startpars%
}

\LWR@formatted{fboxBlock}

\end{warpHTML}
\begin{warpall}

\newsavebox{\LWR@fminipagebox}

\NewDocumentEnvironment{LWR@print@fminipage}{O{t} o O{t} m}
{%
\IfValueTF{#3}%
{\def\LWR@thisalign{#3}}
{\def\LWR@thisalign{#1}}%
\IfValueTF{#2}%
{\minipage[#1][#2+2\fboxsep+2\fboxrule][\LWR@thisalign]{#4+2\fboxsep+2\fboxrule}}%
{\minipage[#1]{#4+2\fboxsep+2\fboxrule}}%
\begin{lrbox}{\LWR@fminipagebox}%
\IfValueTF{#2}%
{\minipage[#1][#2][\LWR@thisalign]{#4}}%
{\minipage[#1]{#4}}%
}
{%
\endminipage%
\end{lrbox}%
\fbox{\usebox{\LWR@fminipagebox}}%
\endminipage%
}

\LetLtxMacro\fminipage\LWR@print@fminipage
\LetLtxMacro\endfminipage\endLWR@print@fminipage

\end{warpall}
\begin{warpHTML}

\NewDocumentEnvironment{LWR@HTML@fminipage}{O{t} o O{t} m}
{%
\LWR@traceinfo{fminipage #1 #2 #3 #4}%
\begin{LWR@setvirtualpage}*%
\setlength{\LWR@tempwidth}{#4}%
\IfValueT{#2}{\setlength{\LWR@tempheight}{#2}}%
\LWR@forceminwidth{\fboxrule}%
\LWR@stoppars%
\begin{BlockClass}[%
\LWR@fboxstyle ; %
\IfValueT{#2}{height:\LWR@printlength{\LWR@tempheight} ; }%
\ifbool{LWR@minipagefullwidth}%
{\global\boolfalse{LWR@minipagefullwidth}}%
{%
    \ifbool{LWR@forceminipagefullwidth}%
        {}%
        {%
            \ifdimequal{\LWR@tempwidth}{\linewidth}%
                {}%
                {width:\LWR@printlength{\LWR@tempwidth} ; }%
        }%
}%
]{fminipage}%
}
{%
\end{BlockClass}%
\end{LWR@setvirtualpage}%
\global\booltrue{LWR@minipagethispar}%
\LWR@traceinfo{fminipage done}%
}

\LWR@formattedenv{fminipage}
\NewDocumentCommand{\LWR@HTML@raisebox}{m o o m}{%
#4%
}

\LWR@formatted{raisebox}

\end{warpHTML}


\begin{warpall}

\newbool{FixSmallCaps}
\boolfalse{FixSmallCaps}

\end{warpall}

\begin{warpHTML}


\DeclareRobustCommand{\LWR@HTML@emph}[1]{%
    {%
        \LWR@HTML@itshape%
        \LWR@htmlspan{em}{#1}%
    }%
}

\LWR@formatted{emph}

\DeclareRobustCommand{\LWR@HTML@textmd}[1]{%
    {%
        \LWR@HTML@mdseries%
        \InlineClass(font-weight:normal){textmd}{#1}%
    }%
}

\LWR@formatted{textmd}

\DeclareRobustCommand{\LWR@HTML@textbf}[1]{%
    {%
        \LWR@HTML@bfseries%
        \LWR@htmlspan{b}{#1}%
    }%
}

\LWR@formatted{textbf}

\DeclareRobustCommand{\LWR@HTML@texteb}[1]{%
    {%
        \LWR@HTML@ebweight%
        \InlineClass{texteb}{#1}%
    }%
}

\LWR@formatted{texteb}

\DeclareRobustCommand{\LWR@HTML@textlg}[1]{%
    {%
        \LWR@HTML@lgweight%
        \InlineClass{textlg}{#1}%
    }%
}

\LWR@formatted{textlg}

\DeclareRobustCommand{\LWR@HTML@textrm}[1]{%
    {%
        \LWR@HTML@rmfamily%
        \InlineClass(font-family:serif){textrm}{#1}%
    }%
}

\LWR@formatted{textrm}

\DeclareRobustCommand{\LWR@HTML@textsf}[1]{%
    {%
        \LWR@HTML@sffamily%
        \InlineClass(font-family:sans){textsf}{#1}%
    }%
}

\LWR@formatted{textsf}

\DeclareRobustCommand{\LWR@HTML@texttt}[1]{%
    {%
        \LWR@HTML@ttfamily%
        \LWR@htmlspan{kbd}{#1}%
    }%
}

\LWR@formatted{texttt}

\DeclareRobustCommand{\LWR@HTML@textup}[1]{%
    {%
        \LWR@HTML@upshape%
        \InlineClass(font-style:normal){textup}{#1}%
    }%
}

\LWR@formatted{textup}

\DeclareRobustCommand{\LWR@HTML@textit}[1]{%
    {%
        \LWR@HTML@itshape%
        \LWR@htmlspan{i}{#1}%
    }%
}

\LWR@formatted{textit}

\DeclareRobustCommand{\LWR@HTML@textsc}[1]{%
    {%
        \LWR@HTML@scshape%
        \InlineClass{textsc}{#1}%
    }%
}

\LWR@formatted{textsc}

\DeclareRobustCommand{\LWR@HTML@textulc}[1]{%
    {%
        \LWR@HTML@ulcshape%
        \InlineClass{textulc}{#1}%
    }%
}

\LWR@formatted{textulc}

\@ifundefined{textsi}{
    \LetLtxMacro\LWR@print@textsi\LWR@print@textsc
}{}

\DeclareRobustCommand{\LWR@HTML@textsi}[1]{%
    {%
        \LWR@HTML@sishape%
        \textsc{\textit{#1}}%
    }%
}

\LWR@formatted{textsi}

\DeclareRobustCommand{\LWR@HTML@textsl}[1]{%
    {%
        \slshape%
        \InlineClass(font-style:oblique){textsl}{#1}%
    }%
}

\LWR@formatted{textsl}

\newrobustcmd{\LWR@HTML@textssc}[1]{\textsc{#1}}
\LWR@formatted{textssc}

\DeclareRobustCommand{\LWR@HTML@textnormal}[1]{\textmd{\textrm{\textup{#1}}}}

\LWR@formatted{textnormal}

\FilenameNullify{%
    \LetLtxMacro\emph\@firstofone%
    \LetLtxMacro\textmd\@firstofone%
    \LetLtxMacro\textbf\@firstofone%
    \LetLtxMacro\texteb\@firstofone%
    \LetLtxMacro\textlg\@firstofone%
    \LetLtxMacro\textrm\@firstofone%
    \LetLtxMacro\textsf\@firstofone%
    \LetLtxMacro\texttt\@firstofone%
    \LetLtxMacro\textup\@firstofone%
    \LetLtxMacro\textit\@firstofone%
    \LetLtxMacro\textsc\@firstofone%
    \LetLtxMacro\textulc\@firstofone%
    \LetLtxMacro\textsi\@firstofone%
    \LetLtxMacro\textsl\@firstofone%
    \LetLtxMacro\textssc\@firstofone%
    \LetLtxMacro\textnormal\@firstofone%
}

\newcommand*{\LWR@f@family}{rm}
\newcommand*{\LWR@f@series}{md}
\newcommand*{\LWR@f@shape}{up}
\newcommand*{\LWR@f@shapecaps}{ulc}

\newcounter{LWR@textcurrentfontdepth}
\setcounter{LWR@textcurrentfontdepth}{0}

\newcommand*{\LWR@textcurrentfont}[1]{%
    \ifnumcomp{\value{LWR@textcurrentfontdepth}}{>}{0}%
        {%
            \addtocounter{LWR@textcurrentfontdepth}{1}%
            #1%
            \addtocounter{LWR@textcurrentfontdepth}{-1}%
        }%
        {%
            \addtocounter{LWR@textcurrentfontdepth}{1}%
            \InlineClass{%
                    text\LWR@f@family\LWR@origtilde{}%
                    text\LWR@f@series\LWR@origtilde{}%
                    text\LWR@f@shape\LWR@origtilde{}%
                    text\LWR@f@shapecaps%
                }%
                {#1}%
            \addtocounter{LWR@textcurrentfontdepth}{-1}%
        }%
}

\newenvironment*{LWR@blocktextcurrentfont}{%
\LWR@stoppars%
\BlockClass{%
        text\LWR@f@family\LWR@origtilde{}%
        text\LWR@f@series\LWR@origtilde{}%
        text\LWR@f@shape\LWR@origtilde{}%
        text\LWR@f@shapecaps%
    }%
}{\endBlockClass\LWR@startpars}

\newrobustcmd*{\LWR@HTML@mdseries}{%
    \LWR@print@mdseries%
    \renewcommand*{\LWR@f@series}{md}%
}
\LWR@formatted{mdseries}

\newrobustcmd*{\LWR@HTML@bfseries}{%
    \LWR@print@bfseries%
    \renewcommand*{\LWR@f@series}{bf}%
}
\LWR@formatted{bfseries}

\newrobustcmd*{\LWR@HTML@ebweight}{%
    \LWR@print@ebweight%
    \renewcommand*{\LWR@f@series}{eb}%
}
\LWR@formatted{ebweight}

\newrobustcmd*{\LWR@HTML@lgweight}{%
    \LWR@print@lgweight%
    \renewcommand*{\LWR@f@series}{lg}%
}
\LWR@formatted{lgweight}

\newrobustcmd*{\LWR@HTML@rmfamily}{%
    \LWR@print@rmfamily%
    \renewcommand*{\LWR@f@family}{rm}%
}
\LWR@formatted{rmfamily}

\newrobustcmd*{\LWR@HTML@sffamily}{%
    \LWR@print@sffamily%
    \renewcommand*{\LWR@f@family}{sf}%
}
\LWR@formatted{sffamily}

\newrobustcmd*{\LWR@HTML@ttfamily}{%
    \LWR@print@ttfamily%
    \renewcommand*{\LWR@f@family}{tt}%
}
\LWR@formatted{ttfamily}
\newrobustcmd*{\LWR@HTML@upshape}{%
    \LWR@print@upshape%
    \renewcommand*{\LWR@f@shape}{up}%
}
\AtBeginDocument{\LWR@formatted{upshape}}

\newrobustcmd*{\LWR@HTML@itshape}{%
    \LWR@print@itshape%
    \renewcommand*{\LWR@f@shape}{it}%
}
\AtBeginDocument{\LWR@formatted{itshape}}

\newrobustcmd*{\LWR@HTML@scshape}{%
    \ifbool{FixSmallCaps}{}{%
        \LWR@print@scshape%
    }%
    \renewcommand*{\LWR@f@shapecaps}{sc}%
}
\AtBeginDocument{\LWR@formatted{scshape}}

\@ifundefined{ulcshape}{
    \LetLtxMacro\ulcshape\upshape
}{}
\newrobustcmd*{\LWR@HTML@ulcshape}{%
    \LWR@print@ulcshape%
    \renewcommand*{\LWR@f@shapecaps}{ulc}%
}
\AtBeginDocument{\LWR@formatted{ulcshape}}

\@ifundefined{sishape}{
    \LetLtxMacro\sishape\scshape
}{}
\newrobustcmd*{\LWR@HTML@sishape}{%
    \ifbool{FixSmallCaps}{}{%
        \LWR@print@sishape%
    }%
    \renewcommand*{\LWR@f@shape}{it}
    \renewcommand*{\LWR@f@shapecaps}{sc}%
}
\AtBeginDocument{\LWR@formatted{sishape}}

\newrobustcmd*{\LWR@HTML@slshape}{%
    \LWR@print@slshape%
    \renewcommand*{\LWR@f@shape}{sl}%
}
\AtBeginDocument{\LWR@formatted{slshape}}

\newrobustcmd{\LWR@HTML@sscshape}{\LWR@HTML@scshape}
\AtBeginDocument{\LWR@formatted{sscshape}}

\newrobustcmd*{\LWR@HTML@normalfont}{\rmfamily\mdseries\upshape\ulcshape}
\LWR@formatted{normalfont}

\FilenameNullify{%
    \LetLtxMacro\rmfamily\@empty%
    \LetLtxMacro\sffamily\@empty%
    \LetLtxMacro\ttfamily\@empty%
    \LetLtxMacro\bfseries\@empty%
    \LetLtxMacro\ebweight\@empty%
    \LetLtxMacro\lgweight\@empty%
    \LetLtxMacro\mdseries\@empty%
    \LetLtxMacro\upshape\@empty%
    \LetLtxMacro\slshape\@empty%
    \LetLtxMacro\sishape\@empty%
    \LetLtxMacro\scshape\@empty%
    \LetLtxMacro\itshape\@empty%
    \LetLtxMacro\ulcshape\@empty%
    \LetLtxMacro\sscshape\@empty%
    \LetLtxMacro\normalfont\@empty%
}


\renewcommand{\sp}[1]{\text{<sup>#1</sup>}{}}


\renewcommand{\sb}[1]{\text{<sub>#1</sub>}{}}

\newrobustcmd{\LWR@HTML@textsuperscript}[1]{\LWR@htmlspan{sup}{#1}}
\LWR@formatted{textsuperscript}

\newcommand{\LWR@HTML@@textsuperscript}[1]{\LWR@htmlspan{sup}{#1}}
\LWR@formatted{@textsuperscript}

    \newrobustcmd{\LWR@HTML@textsubscript}[1]{\LWR@htmlspan{sub}{#1}}
    \LWR@formatted{textsubscript}

    \newcommand{\LWR@HTML@@textsubscript}[1]{\LWR@htmlspan{sub}{#1}}
    \LWR@formatted{@textsubscript}

\AtBeginDocument{\let\up\textsuperscript}

\AtBeginDocument{\let\fup\textsuperscript}

\renewcommand{\underline}[1]{%
    \InlineClass%
        (text-decoration:underline; text-decoration-skip: auto)%
        {underline}{#1}%
}

\newcommand{\LWR@overline}[1]{%
    \InlineClass%
        (text-decoration:overline; text-decoration-skip: auto)%
        {overline}{#1}%
}

\newcommand*{\LWR@currenttextcolor}{black}
\newcommand*{\LWR@tempcolor}{}
\newcommand*{\LWR@tempcolortwo}{}
\newcommand*{\LWR@findcurrenttextcolor}{%
    \renewcommand{\LWR@tempcolor}{000000}%
}
\NewDocumentCommand{\LWR@textcurrentcolor}{m}{%
    \renewcommand*{\LWR@currenttextcolor}{black}%
    #1%
}

\end{warpHTML}

\begin{warpprint}

\newcommand*{\LWR@textcurrentfont}[1]{#1}

\newenvironment*{LWR@blocktextcurrentfont}{}{}

\newcommand*{\FilenameNullify}[1]{}

\end{warpprint}


\begin{warpHTML}
\AtBeginDocument{
\renewrobustcmd*{\,}{\HTMLunicode{202f}} % HTML thin non-breakable space
\renewrobustcmd*{\thinspace}{\HTMLunicode{202f}}    % HTML thin non-breakable space
\renewrobustcmd*{\negthinspace}{\HTMLunicode{202f}}    % HTML thin non-breakable space
\renewrobustcmd*{~}{\HTMLentity{nbsp}}
\renewrobustcmd*{\textellipsis}{\HTMLunicode{2026}}
\renewrobustcmd*{\vdots}{\HTMLunicode{22EE}}
}
\newcommand*{\LWR@font@size}{normalsize}

\newrobustcmd*{\LWR@HTML@normalsize}{\renewcommand*{\LWR@font@size}{normalsize}}
\LWR@formatted{normalsize}

\newrobustcmd*{\LWR@HTML@small}{\renewcommand*{\LWR@font@size}{small}}
\LWR@formatted{small}

\newrobustcmd*{\LWR@HTML@footnotesize}{\renewcommand*{\LWR@font@size}{footnotesize}}
\LWR@formatted{footnotesize}

\newrobustcmd*{\LWR@HTML@scriptsize}{\renewcommand*{\LWR@font@size}{scriptsize}}
\LWR@formatted{scriptsize}

\newrobustcmd*{\LWR@HTML@tiny}{\renewcommand*{\LWR@font@size}{tiny}}
\LWR@formatted{tiny}

\newrobustcmd*{\LWR@HTML@large}{\renewcommand*{\LWR@font@size}{large}}
\LWR@formatted{large}

\newrobustcmd*{\LWR@HTML@Large}{\renewcommand*{\LWR@font@size}{Large}}
\LWR@formatted{Large}

\newrobustcmd*{\LWR@HTML@LARGE}{\renewcommand*{\LWR@font@size}{LARGE}}
\LWR@formatted{LARGE}

\newrobustcmd*{\LWR@HTML@huge}{\renewcommand*{\LWR@font@size}{huge}}
\LWR@formatted{huge}

\newrobustcmd*{\LWR@HTML@Huge}{\renewcommand*{\LWR@font@size}{Huge}}
\LWR@formatted{Huge}
\DeclareDocumentCommand{\onecolumn}{}{}

\DeclareDocumentCommand{\twocolumn}{O{}}{

#1

}

\newcommand*{\LWR@HTML@hfill}{\qquad}
\LWR@formatted{hfill}

\newcommand*{\LWR@HTML@hrulefill}{%
    \ifbool{LWR@doingapar}%
        {\rule{1in}{1pt}}%
        {%
            \LWR@findcurrenttextcolor%
            \ifdefstring{\LWR@tempcolor}{000000}%
            {%
                \begin{BlockClass}{hrule}%
                \end{BlockClass}%
            }%
            {%
                \begin{BlockClass}[%
                    border-top: 1px solid \LWR@origpound\LWR@tempcolor % space
                ]{hrule}%
                \end{BlockClass}%
            }%
        }%
}%
\LWR@formatted{hrulefill}

\newcommand*{\LWR@HTML@dotfill}{\dots}
\LWR@formatted{dotfill}

\renewcommand*{\newpage}{

}

\newrobustcmd*{\LWR@newlinebr}{\unskip\LWR@htmltag{br /}\LWR@orignewline}%
\LetLtxMacro\newline\LWR@newlinebr

\LetLtxMacro\LWR@origendofline\\
\NewDocumentCommand{\LWR@endofline}{s O{0pt}}
{%
\newline%
\setlength{\LWR@templengthone}{#2}%
\ifdimgreater{\LWR@templengthone}{0pt}{\newline}{}%
}

\newcommand*{\LWR@minipagestartpars}{%
    \ifbool{LWR@minipagethispar}{\LWR@startpars}{}%
}

\newcommand*{\LWR@minipagestoppars}{%
    \ifbool{LWR@minipagethispar}{\LWR@stoppars}{}%
}

\renewrobustcmd*{\quad}{%
    \LWR@minipagestoppars%
    \HTMLunicode{2003}%
    \LWR@minipagestartpars%
}

\renewrobustcmd*{\qquad}{\quad\quad}

\renewrobustcmd*{\enskip}{%
    \LWR@minipagestoppars%
    \HTMLunicode{2002}%
    \LWR@minipagestartpars%
}

\newlength{\LWR@tempwidth}
\newlength{\LWR@tempheight}
\newlength{\LWR@tempraise}

\newcommand{\LWR@select@html@hspace}{%
\RenewDocumentCommand{\hspace}{s m}{%
\setlength{\LWR@tempwidth}{##2}%
\ifnum\gluestretchorder\LWR@tempwidth>0%
\setlength{\LWR@tempwidth}{2em}%
\fi%
\ifdimcomp{\LWR@tempwidth}{>}{0pt}{%
    \LWR@minipagestoppars%
    \ifdimcomp{\LWR@tempwidth}{=}{.16667em}%
    {%
        \HTMLunicode{2009}% thin breakable space
    }%
    {%
        \LWR@htmltagc{%
            span style=\textquotedbl{}width:\LWR@printlength{\LWR@tempwidth};  % extra space
                display:inline-block\textquotedbl%
        }%
        \ifbool{FormatWP}{%
            \setlength{\LWR@templengthone}{\LWR@tempwidth}%
            \whiledo{\lengthtest{\LWR@templengthone>1em}}{%
                \quad%
                \addtolength{\LWR@templengthone}{-1em}%
            }%
        }%
        {\LWR@htmlcomment{}}%
        \LWR@htmltagc{/span}%
    }%
    \LWR@minipagestartpars%
}{}% width greater than 0
}%
}
\newcommand{\LWR@select@html@nohspace}{%
    \RenewDocumentCommand{\hspace}{s m}{}%
}

\newcommand*{\LWR@select@print@hspace}{%
    \renewrobustcmd\hspace{\@ifstar\@hspacer\@hspace}%
}

\LWR@select@html@hspace

\NewDocumentCommand{\LWR@HTML@vspace}{s m}{}

\LWR@formatted{vspace}

\renewcommand*{\linebreak}[1][]{\newline}

\renewcommand*{\nolinebreak}[1][]{}

\renewcommand*{\pagebreak}[1][]{

}

\renewcommand*{\nopagebreak}[1][]{}

\RenewDocumentCommand{\enlargethispage}{s m}{}
\renewcommand*{\clearpage}{}
\renewcommand*{\cleardoublepage}{}
\newcommand*{\LWR@HTML@rule}[3][]{%
\setlength{\LWR@tempwidth}{#2}%
\ifthenelse{\lengthtest{\LWR@tempwidth=0pt}}%
{}% zero- width
{% non-zero width
    \ifthenelse{%
        \lengthtest{\LWR@tempwidth>0pt}\AND%
        \lengthtest{\LWR@tempwidth<1pt}%
    }%
        {\setlength{\LWR@tempwidth}{1pt}}%
        {}%
    \setlength{\LWR@tempheight}{#3}%
    \ifthenelse{%
        \lengthtest{\LWR@tempheight>0pt}\AND%
        \lengthtest{\LWR@tempheight<1pt}%
    }%
        {\setlength{\LWR@tempheight}{1pt}}%
        {}%
    \LWR@minipagestoppars%
    \LWR@findcurrenttextcolor%
    \LWR@htmltagc{%
    span\LWR@indentHTML%
    style=\textquotedbl%
    \ifbool{FormatWP}{}{background:\LWR@currenttextcolor ; }%
    width:\LWR@printlength{\LWR@tempwidth} ; %
    height:\LWR@printlength{\LWR@tempheight} ; %
    \ifblank{#1}%
    {}%
    {%
        \setlength{\LWR@tempraise}{0pt-#1}%
        \setlength{\LWR@tempraise}{\LWR@tempraise*2}%
        \LWR@indentHTML%
        -ms-transform: translate(0pt,\LWR@printlength{\LWR@tempraise}); %
        \LWR@indentHTML%
        -webkit-transform: translate(0pt,\LWR@printlength{\LWR@tempraise}); %
        \LWR@indentHTML%
        transform: translate(0pt,\LWR@printlength{\LWR@tempraise}); %
        \LWR@indentHTML%
    }%
    display:inline-block;\textquotedbl\LWR@orignewline%
    }%
        \ifbool{FormatWP}{%
            \setlength{\LWR@templengthone}{\LWR@tempwidth}%
            \whiledo{\lengthtest{\LWR@templengthone>1em}}{%
                \_{}%
                \addtolength{\LWR@templengthone}{-1em}%
            }%
        }%
        {\LWR@htmlcomment{}}%
    \LWR@htmltagc{/span}%
    \LWR@minipagestartpars%
}% non-zero width
}

\LWR@formatted{rule}
\end{warpHTML}


\begin{warpHTML}

\newrobustcmd*{\LWR@phantomsection}{%
    \begingroup%
    \boolfalse{LWR@forcinghtmltoc}%
    \section*{}%
    \endgroup%
}

\end{warpHTML}


\begin{warpall}
\newbool{LWR@warnXe}
\boolfalse{LWR@warnXe}

\newrobustcmd*{\Xe}
    {%
        X\hspace{-.1667em}\raisebox{-.5ex}{E}%
        \global\booltrue{LWR@warnXe}%
    }

\AtBeginDocument{
    \@ifpackageloaded{graphics}{
        \@ifpackageloaded{metalogo}{}{
            \renewrobustcmd*{\Xe}
                {X\hspace{-.1667em}\raisebox{-.5ex}{\reflectbox{E}}}
        }
    }{}
}

\AtEndDocument{
    \ifbool{LWR@warnXe}{
        \PackageWarningNoLine{lwarp}{Load graphicx or graphics
            for improved XeTeX logo}
    }{}
}

\providerobustcmd*{\XeTeX}{\mbox{\Xe\hspace{-.125em}\TeX}}
\providerobustcmd*{\XeLaTeX}{\mbox{\Xe\hspace{-.125em}\LaTeX}}
\providerobustcmd*{\AmS}{%
    \leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
    \hbox{$\mathcal M$}\kern-.2em\mathcal S$}%
}
\newrobustcmd*{\LyX}{\textsf{LyX}}
\providerobustcmd*{\LuaTeX}{\mbox{Lua\TeX}}
\providerobustcmd*{\LuaLaTeX}{\mbox{Lua\LaTeX}}
\providerobustcmd*{\BibTeX}{\mbox{B\textsc{ib}\TeX}}
\providerobustcmd*{\MakeIndex}{\mbox{\textit{MakeIndex}}}
\providerobustcmd*{\ConTeXt}{\mbox{Con\TeX{}t}}
\providerobustcmd*{\MiKTeX}{\mbox{MiK\TeX}}
\end{warpall}
\begin{warpHTML}
\newrobustcmd*{\LWR@HTML@TeX}
{%
    \InlineClass{latexlogofont}%
    {%
        \InlineClass{latexlogo}%
        {%
            T%
            \InlineClass{latexlogosub}{e}%
            X%
        }%
    }%
}
\AtBeginDocument{\LWR@formatted{TeX}}% may have been patched by metalogo
\newrobustcmd*{\LWR@HTML@LaTeX}
{%
    \InlineClass{latexlogofont}%
    {%
        \InlineClass{latexlogo}%
        {%
            L%
            \InlineClass{latexlogosup}{a}%
            T%
            \InlineClass{latexlogosub}{e}%
            X%
        }%
    }%
}

\AtBeginDocument{\LWR@formatted{LaTeX}}% may have been patched by metalogo

\newrobustcmd*{\LWR@HTML@LaTeXe}
{%
    \LaTeX%
    \InlineClass{latexlogofont}{%
        \InlineClass{latexlogotwoe}{%
            2%
            \InlineClass{latexlogotwoesub}{\HTMLunicode{03B5}}%
        }%
    }%
}
\AtBeginDocument{\LWR@formatted{LaTeXe}}% may have been patched by metalogo
\newrobustcmd*{\LWR@HTML@LuaTeX}{\InlineClass{latexlogofont}{Lua}\TeX}
\AtBeginDocument{\LWR@formatted{LuaTeX}}% may have been patched by metalogo

\newrobustcmd*{\LWR@HTML@LuaLaTeX}{\InlineClass{latexlogofont}{Lua}\LaTeX}
\AtBeginDocument{\LWR@formatted{LuaLaTeX}}% may have been patched by metalogo
\newrobustcmd*{\LWR@HTML@Xe}
    {%
        X%
        \InlineClass{xelatexlogosub}{\HTMLunicode{18e}}%
    }
\AtBeginDocument{\LWR@formatted{Xe}}% may have been patched by metalogo

\newrobustcmd*{\LWR@HTML@XeTeX}{\InlineClass{xelatexlogo}{\Xe}\TeX}
\AtBeginDocument{\LWR@formatted{XeTeX}}% may have been patched by metalogo

\newrobustcmd*{\LWR@HTML@XeLaTeX}{\InlineClass{xelatexlogo}{\Xe}\LaTeX}
\AtBeginDocument{\LWR@formatted{XeLaTeX}}% may have been patched by metalogo
\newrobustcmd*{\LWR@HTML@ConTeXt}{%
    \InlineClass{latexlogofont}{Con}\TeX{}%
    \InlineClass{latexlogofont}{t}%
}
\LWR@formatted{ConTeXt}
\newrobustcmd*{\LWR@HTML@BibTeX}
    {\InlineClass{latexlogofont}{B\textsc{ib}}\TeX}
\LWR@formatted{BibTeX}

\newrobustcmd*{\LWR@HTML@MakeIndex}
    {\InlineClass{latexlogofont}{\textit{MakeIndex}}}
\LWR@formatted{MakeIndex}
\AtBeginDocument{%
\newrobustcmd*{\LWR@HTML@AmS}
{%
    \InlineClass{amslogo}{%
        \textit{%
            A%
            \InlineClass{latexlogosub}{M}%
            S%
        }%
    }%
}%
\LWR@formatted{AmS}
}
\newrobustcmd*{\LWR@HTML@MiKTeX}{\InlineClass{latexlogofont}{MiK}\TeX}
\LWR@formatted{MiKTeX}
\newrobustcmd*{\LWR@HTML@LyX}{\InlineClass{lyxlogo}{LyX}}
\LWR@formatted{LyX}
\end{warpHTML}


\begin{warpHTML}

\AfterEndPreamble{\LWR@LwarpStart}
\AtEndDocument{\LWR@LwarpEnd}

\end{warpHTML}

\begin{warpHTML}
\AtBeginDocument{
    \@ifpackageloaded{everyshi}{
        \RequirePackage{lwarp-everyshi}
    }{}
}
\end{warpHTML}

\begin{warpHTML}
\RequirePackage{lwarp-textcomp}
\end{warpHTML}

\begin{warpHTML}
\@ifpackageloaded{amsthm}{
    \RequirePackage{lwarp-amsthm}
}{}
\@ifpackageloaded{amsmath}{
    \RequirePackage{lwarp-amsmath}
}{}
\@ifpackageloaded{centernot}{
    \RequirePackage{lwarp-centernot}
}{}
\end{warpHTML}

\begin{warpHTML}
\@ifclassloaded{scrbook}{\RequirePackage{lwarp-patch-komascript}}{}
\@ifclassloaded{scrartcl}{\RequirePackage{lwarp-patch-komascript}}{}
\@ifclassloaded{scrreprt}{\RequirePackage{lwarp-patch-komascript}}{}
\end{warpHTML}

\begin{warpprint}
\@ifclassloaded{memoir}{\LWR@origRequirePackage{xcolor}}{}
\end{warpprint}

\begin{warpHTML}
\@ifclassloaded{memoir}{\RequirePackage{lwarp-patch-memoir}}{}
\end{warpHTML}

\begin{warpHTML}
\newcommand*{\LWR@patchujtclasses}{
    \def\@partnameformat{}
    \def\@partcntformat##1{%
        \prepartname%
        \csname the##1\endcsname%
        \postpartname%
        \quad%
    }
    \@ifundefined{chapter}{}{
        \def\@chapcntformat##1{%
            \prechaptername%
            \csname the##1\endcsname%
            \postchaptername%
            \quad%
        }
    }
    \renewcommand*{\LWR@printchaptername}{}
    \renewcommand{\thepart}{\@Roman\c@part}
    \@ifundefined{chapter}{
        \renewcommand{\thesection}{\@arabic\c@section}
    }{
        \renewcommand{\thechapter}{\@arabic\c@chapter}
        \renewcommand{\thesection}{\thechapter.\@arabic\c@section}
    }
    \renewcommand{\thesubsection}{\thesection.\@arabic\c@subsection}
    \renewcommand{\thesubsubsection}{%
    \thesubsection.\@arabic\c@subsubsection}
    \renewcommand{\theparagraph}{%
    \thesubsubsection.\@arabic\c@paragraph}
    \renewcommand{\thesubparagraph}{%
    \theparagraph.\@arabic\c@subparagraph}
    \@ifundefined{chapter}{
        \renewcommand{\thefigure}{\@arabic\c@figure}
        \renewcommand{\thetable}{\@arabic\c@table}
    }{
        \renewcommand{\thefigure}{%
        \ifnum\c@chapter>\z@\thechapter.\fi\@arabic\c@figure}
        \renewcommand{\thetable}{%
        \ifnum\c@chapter>\z@\thechapter.\fi\@arabic\c@table}
    }
}

\@ifclassloaded{ujarticle}{\LWR@patchujtclasses}{}
\@ifclassloaded{ujbook}{\LWR@patchujtclasses}{}
\@ifclassloaded{ujreport}{\LWR@patchujtclasses}{}
\@ifclassloaded{utarticle}{\LWR@patchujtclasses}{}
\@ifclassloaded{utbook}{\LWR@patchujtclasses}{}
\@ifclassloaded{utreport}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjarticle}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjbook}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjreport}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjsarticle}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjsbook}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjsreport}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjskiyou}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjspf}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjtarticle}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjtbook}{\LWR@patchujtclasses}{}
\@ifclassloaded{ltjtreport}{\LWR@patchujtclasses}{}
\end{warpHTML}

\begin{warpHTML}
\AtBeginDocument{
    \@ifpackageloaded{ctexpatch}{%
        \def\@partcntformat#1{%
            \LWR@isolate{\CTEX@partname}~%
            \CTEX@part@aftername%
        }%

        \def\@partnameformat{}

        \def\@chapcntformat#1{%
            \LWR@isolate{\CTEX@chaptername}~%
            \CTEX@chapter@aftername%
        }%

        \renewcommand*{\LWR@printchaptername}{}
    }{}
}
\end{warpHTML}
\begin{warpHTML}
\AtBeginDocument{
\@ifpackageloaded{kotexutf}{%
    \def\LWR@kotexutf@setref#1#2#3{%
        \@setref@dhucs@orig{#1}{#2}{#3}%
      \ifx#1\relax\else
        \bgroup
        \dhucs@make@cjkchar@null
        \edef\@temp{\expandafter#2#1}\global\josatoks\expandafter{\@temp}%
        \egroup
      \fi%
    }%

    \ifdefequal{\@setref}{\LWR@kotexutf@setref}{
        \let\@setref\@setref@dhucs@orig
    }{}
}{}
}
\end{warpHTML}

\begin{warpHTML}
\AtBeginDocument{

\@ifpackageloaded{polyglossia}{
    \PackageWarningNoLine{lwarp}
    {%
        Polyglossia has been loaded.  Lwarp also uses cleveref.\MessageBreak
        See the cleveref documentation regarding\MessageBreak
        polyglossia support.  Some languages are not supported%
    }
    \typeout{---}
    \typeout{Package lwarp:}
    \typeout{If the error}
    \typeout{\space\space``! Undefined control sequence.
        \space ... \space \protect\__hook begindocument''}
    \typeout{occurs here, use the polyglossia macro:}
    \typeout{\space\space\protect\setmainlanguage\protect{...\protect}}
    \typeout{---}
}{
    \@ifpackageloaded{babel}{
        \PackageWarningNoLine{lwarp}
        {%
            Babel has been loaded.  Lwarp also uses cleveref.\MessageBreak
            See the cleveref documentation regarding\MessageBreak
            babel support.  Some languages are not supported%
        }
    }{}
}

}
\end{warpHTML}
\newcommand*{\LWR@mathjaxwarn}[2]{%
    \@ifpackageloaded{lwarp-#1}{%
        \ifblank{#2}{%
            \PackageWarningNoLine{lwarp}
                {%
                    Lwarp provides emulation for MathJax when used\MessageBreak
                    with the #1 package%
                }
        }{%
            \PackageWarningNoLine{lwarp}
                {%
                    Lwarp provides emulation for MathJax when used\MessageBreak
                    with the #1 package.\MessageBreak
                    #2%
                }
        }%
    }{}%
}

\newcommand*{\LWR@nomathjaxwarn}[2]{%
    \@ifpackageloaded{lwarp-#1}{%
        \ifblank{#2}{%
            \PackageWarningNoLine{lwarp}
                {%
                    Lwarp does not provide MathJax support for #1.\MessageBreak
                    Use SVG math by removing the Lwarp mathjax option%
                }
        }{%
            \PackageWarningNoLine{lwarp}
                {%
                    Lwarp does not provide MathJax support for #1.\MessageBreak
                    #2%
                }
        }%
    }{}%
}
\newcommand*{\LWR@forceSVGmessage}[1]{%
    SVG math output may be enabled for select math\MessageBreak
    expressions to preserve #1 visual\MessageBreak
    features for those particular expressions.\MessageBreak
    Before the chosen inline math, use \protect\inlinemathother\MessageBreak
    to begin using SVG math, and \protect\inlinemathnormal\MessageBreak
    afterward to resume using MathJax math.\MessageBreak
    Before display math, use \protect\displaymathother\MessageBreak
    to begin using SVG math, and use \protect\displaymathnormal\MessageBreak
    after to resume using MathJax for the following math.\MessageBreak
    Or, use SVG math for all expressions by removing\MessageBreak
    the mathjax option for the lwarp package%
}
\AtBeginDocument{
    \ifbool{mathjax}{
        \LWR@nomathjaxwarn{aligned-overset}{}
        \LWR@nomathjaxwarn{amscdx}
            {\LWR@forceSVGmessage{amscdx}}
        \LWR@mathjaxwarn{arydshln}
            {In a math array, do not use the optional argument\MessageBreak
            for \protect\cdashline.\space\space
            Furthermore, \protect\cline\space is not\MessageBreak
            supported by MathJax}
        \LWR@nomathjaxwarn{autoaligne}{}
        \LWR@mathjaxwarn{autonum}
            {MathJax does not support equation+.\MessageBreak
            You may use the warpprint and warpHTML\MessageBreak
            environments to isolate the package load\MessageBreak
            and the equation+ environments}
        \LWR@mathjaxwarn{bigdelim}
            {Delimiters appear only of the first line}
        \LWR@nomathjaxwarn{boldtensors}{}
        \LWR@mathjaxwarn{booktabs}
            {\protect\cmidrule\space is not displayed}
        \LWR@mathjaxwarn{breqn}
            {Each environment becomes an SVG image}
        \LWR@mathjaxwarn{colortbl}
            {Colors are ignored in MathJax.\MessageBreak
            (Text mode tabular does support colortbl.)\MessageBreak
            \LWR@forceSVGmessage{colortbl}}
        \LWR@mathjaxwarn{delarray}
            {\LWR@forceSVGmessage{delarray}}
        \LWR@nomathjaxwarn{gauss}
            {\LWR@forceSVGmessage{gauss}}
        \LWR@mathjaxwarn{hhline}
            {A simple \protect\hline\space is used}
        \LWR@mathjaxwarn{isomath}
            {Some of the symbol font macros such as \protect\mathsfbfit\MessageBreak
                do not use a sans font because MathJax does not yet\MessageBreak
                have sans Greek.  Tensors may look like vectors%
            }
        \LWR@nomathjaxwarn{jkmath}
            {\LWR@forceSVGmessage{jkmath}}
        \LWR@mathjaxwarn{libertinust1math}
            {Some of the symbol font macros such as \protect\mathsfbfit\MessageBreak
                do not use a sans font because MathJax does not yet\MessageBreak
                have sans Greek.  Tensors may look like vectors%
            }
        \LWR@mathjaxwarn{mathtools}
            {See the Lwarp manual regarding the disallowspaces\MessageBreak
            and showonlyrefs options, the alignat environment,\MessageBreak
            and \protect\DeclarePairedDelimiter\space and related%
            }
        \LWR@mathjaxwarn{mathspec}
            {Double quotes are removed, even inside \protect\text}
        \LWR@mathjaxwarn{multirow}
            {Multirow works as expected in text mode, but\MessageBreak
            limited emulation is provided for MathJax math.\MessageBreak
            \protect\multirow\space ignores all arguments except\MessageBreak
            the text}
        \LWR@mathjaxwarn{nicematrix}
            {Keys/values are ignored in MathJax.\MessageBreak
            \protect\Cdots, etc. do not span multiple cells.\MessageBreak
            AutoNiceMatrix, etc. are not supported for MathJax.\MessageBreak
            \LWR@forceSVGmessage{nicematrix}%
            }
        \LWR@nomathjaxwarn{pb-diagram}
            {\LWR@forceSVGmessage{pb-diagram}}
        \LWR@nomathjaxwarn{tensind}{}
        \LWR@mathjaxwarn{unicode-math}
            {Do not use embedded Unicode characters.\MessageBreak
            (Not all characters are encoded correctly.)\MessageBreak
            Some symbol fonts are not supported by MathJax,\MessageBreak
            and are only approximated.\MessageBreak
            Greek macros such as \protect\alpha\space respond to the math-style\MessageBreak
            option.  Latin symbols does not, per MathJax\MessageBreak
            limitations, unless placed inside \protect\symbit\space or similar}
        \LWR@nomathjaxwarn{unitsdef}{}
        \LWR@mathjaxwarn{witharrows}
            {Arrows can only point to the next line.\MessageBreak
            Text is only placed on a single line}
        \LWR@nomathjaxwarn{xy}
            {In text, xy works as-is.  SVG images will be generated.\MessageBreak
            \LWR@forceSVGmessage{xy}}
    }{}
}
\endinput
%%
%% End of file `lwarp.sty'.
