%% mhchem.sty
%% Copyright 2004-2011   M.a-r.t-i.n   H.e-n.s-e.l
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License version 1.3c
% which can be found at
%   http://www.latex-project.org/lppl/lppl-1-3c.txt
%
% This work has the LPPL maintenance status "maintained".
% The Current Maintainer of this work is   M.a-r.t-i.n   H.e-n.s-e.l.
%
% ( In order to fight spam, the maintainer's contact      )
% ( information is "encrypted" with ROT13.                )
% ( If you do not know ROT13 yet and have no tool for     )
% ( decryption, simply do an Internet search for "ROT13". )
%
% ,---[ ROT 13 ]---
% | Gur Pheerag Znvagnvare bs guvf jbex vf Znegva Urafry
% |   jub pna or pbagnpgrq ivn
% |     zupurz@ZnegvaUrafry.qr
% |   be ivn znvy
% |     Znegva Urafry
% |     Cbfgfge. 20
% |     09232 Unegznaafqbes
% |     Treznal
% `----------
%
% This work consists of the files mhchem.sty, rsphrase.sty,
% mhchem.pdf and legal.txt.
%
%
\ProvidesPackage{mhchem}[2011/06/03 v3.11 for typesetting chemical formulae]
\RequirePackage{ifthen}
\RequirePackage{calc}[1998/07/07]
\RequirePackage{twoopt}
\RequirePackage{amsmath}
\RequirePackage{keyval}
\RequirePackage{graphics}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%   misc   %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\DeclareMathSymbol{\mhchem@hyphen}{0}{operators}{45}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%   \cee   %%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newcommand*{\cee}[1]{%
  \ifnum 1<\mhchem@option@version%
    \def\mhchem@ce@out{}%
      {\mhchem@ce@v#1\mhchem@empty\\\mhchem@END\mhchem@ENDEND}%
    \ensuremath{%
      \mhchem@ce@out%
    }%
  \else%
    \PackageWarningNoLine{mhchem}{%
      The \string\cee{} command of mhchem is only available\MessageBreak
      when you secify [version=2] or greater}%
  \fi%
}%

\def\mhchem@ce@v#1\\#2#3\mhchem@ENDEND{%
  \ifx\mhchem@END#2%
    \mhchem@ce@vii#1&\mhchem@END\mhchem@ENDEND%
  \else%
    \mhchem@ce@vii#1&\mhchem@END\mhchem@ENDEND%
    \g@addto@macro\mhchem@ce@out{\\}%
    \mhchem@ce@v#2#3\mhchem@ENDEND%
  \fi%
}

\long\def\mhchem@ce@vii#1&#2#3\mhchem@ENDEND{%
  \ifx\mhchem@END#2%
    \g@addto@macro\mhchem@ce@out{\ce@main{#1}}%
  \else%
    \g@addto@macro\mhchem@ce@out{\ce@main{#1}}%
    \g@addto@macro\mhchem@ce@out{&}%
    \mhchem@ce@vii#2#3\mhchem@ENDEND%
  \fi% 
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%   \ce   %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%

\def\mhchem@protect{\protect\noexpand\protect}%

\newcommand\ce[1]{\mhchem@ce@xiii{\mhchem@ce@viii#1 \mhchem@END\mhchem@ENDEND}}%
%
%
\def\mhchem@ce@viii#1 #2\mhchem@ENDEND{%
  \ifx\mhchem@END#2%
    \ifx\@empty#1\@empty
    \else
      \mhchem@ce@x#1\mhchem@END\mhchem@ENDEND%
    \fi
  \else%
    \mhchem@ce@x#1\mhchem@END\mhchem@ENDEND%
    \space\mhchem@ce@viii#2\mhchem@ENDEND%
  \fi
}
\def\mhchem@ce@x#1#2\mhchem@ENDEND{%
  \ifx\@empty#1\@empty%
    \mhchem@ce@xi{}\mhchem@END\mhchem@ENDEND%
  \else%\ifx\mhchem@END#1\else
    \mhchem@ce@xi#1\mhchem@END\mhchem@ENDEND%
  \fi%\fi%
  \ifx\mhchem@END#2%
  \else%
    \mhchem@ce@x#2\mhchem@ENDEND%
  \fi%
}
\def\mhchem@ce@xi#1#2\mhchem@ENDEND{%
  \ifx\mhchem@END#2%
    \ifx\@empty#1\@empty%
      {}%
    \else\if\noexpand#1##%
      \mhchem@protect\tbond%
    \else%
      \mhchem@protect#1%
    \fi\fi%
  \else%
    {\mhchem@ce@xii#1#2}%
  \fi%
}
\def\mhchem@ce@xii#1\mhchem@END{\mhchem@ce@viii#1 \mhchem@END\mhchem@ENDEND}%
\DeclareRobustCommand\mhchem@ce@xiii[1]{%
  \bgroup%
  \ifnum 4>\mhchem@option@version%
    \def\hyphen{\mhchem@hyphen}%
  \fi%
  \def\mhchem@protect{\noexpand}%
  \edef\mhchem@tmp{#1}%
    %
  \expandafter\ce@main\expandafter{\mhchem@tmp}%
  \egroup
}


%%%

\DeclareRobustCommand*{\ce@main}[1]{%
  \bgroup%
  \ifnum 1<\mhchem@option@version%
    \ifmmode\else\def\mhchem@option@alwaystextmode{1}\fi%
  \fi%
  \def\bond{}\def\sbond{}\def\dbond{}\def\tbond{}%
  \ifx\@empty#1\@empty\else%
    \ifmmode\else\mhchem@option@textFont\fi%
    \ensuremath{%
      \mhchem@ce@xx#1 \mhchem@END\mhchem@ENDEND%
    }%
  \fi%
  \egroup%
}%

\def\mhchem@ce@xx#1 #2\mhchem@ENDEND{%
  \mhchem@ce@i#1\mhchem@empty\mhchem@ENDEND%
  \ifx\mhchem@END#2%
  \else%
    \mhchem@ce@xx#2 \mhchem@ENDEND%
  \fi%
}
\def\mhchem@ce@i#1#2\mhchem@ENDEND{%
  \ifcat a#1 {\mhchem@ce@ii{#1#2}}%
  \else\ifx 1#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 2#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 3#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 4#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 5#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 6#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 7#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 8#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 9#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx 0#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx (#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx [#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx \{#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx ^#1{\mhchem@ce@ii{#1#2}}%
  \else\if ^#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx _#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx $#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx -#1{\ifx\@empty#2\@empty#1\else\mhchem@ce@dash#2\mhchem@END\fi}%
  \else\if\noexpand#1<{\ifx\@empty#2\@empty#1\else\mhchem@ce@lt#2\mhchem@END\fi}%
  \else\ifx +#1+ \mhchem@ce@ii{#2}%
  \else\ifx \protect#1{\mhchem@ce@ii{#1#2}}%
  %
  \else\ifx\ce#1 \mhchem@ce@i #2 \mhchem@END%
  \else\ifx\cf#1 \mhchem@cf{#2}%
  \else\ifx\cmath#1 \mhchem@ce@cmath#2\mhchem@END%
  \else\ifx\bond#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx\sbond#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx\dbond#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx\tond#1{\mhchem@ce@ii{#1#2}}%
  \else\ifx\label#1 \mhchem@ce@label#2\mhchem@END%
  \else\ifx\tag#1 \mhchem@ce@tag#2\mhchem@END%
  %
  \else #1#2%
  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
}

%
\def\mhchem@ce@dash#1#2\mhchem@END{%
  \if\noexpand#1>%
    {}\ifx\@empty#2\@empty\mhchem@gives#2%
    \else\mhchem@ce@deploycommand{mhchem@gives}#2{}\mhchem@END\fi{}%
  \else%
    -#1#2%
  \fi%
}%
\def\mhchem@ce@lt#1#2\mhchem@END{%
  \ifx =#1\mhchem@ce@equal#2\mhchem@END%
  \else\if\noexpand#1<\mhchem@ce@equiL#2\mhchem@END%
  \else\ifx-#1%
    \ifx\@empty#2\@empty%
      {}\mhchem@givesleft#2{}%
    \else%
      \mhchem@ce@dashtwo#2\mhchem@END%
    \fi%
  \else%
    <#1#2%
  \fi\fi\fi%
}
\def\mhchem@ce@equal#1#2\mhchem@END{%
  \if\noexpand#1>% (<=)>...
    \ifx\@empty#2\@empty{}\mhchem@equilibrium#2{}%
    \else%
      \mhchem@ce@equi#2\mhchem@END%
    \fi%
  \else%
    <=#1#2%
  \fi%
}
\def\mhchem@ce@equi#1#2\mhchem@END{%
  \if\noexpand#1>%
    {}\ifx\@empty#2\@empty\mhchem@equilibriumRight#2%
    \else\mhchem@ce@deploycommand{mhchem@equilibriumRight}#2{}\mhchem@END\fi{}%
  \else%
    {}\mhchem@ce@deploycommand{mhchem@equilibrium}#1#2{}\mhchem@END{}%
  \fi%
}
\def\mhchem@ce@equiL#1#2\mhchem@END{%
  \ifx =#1\mhchem@ce@equiLi#2\mhchem@END%
  \else<=#1#2%
  \fi%
}
\def\mhchem@ce@equiLi#1#2\mhchem@END{%
  \if\noexpand#1>% (<<=)>
    {}\ifx\@empty#2\@empty\mhchem@equilibriumLeft#2%
    \else\mhchem@ce@deploycommand{mhchem@equilibriumLeft}#2{}\mhchem@END\fi{}%
  \else%
    <<=#1#2%
  \fi%
}
\def\mhchem@ce@dashtwo#1#2\mhchem@END{%
  \if\noexpand#1>%
    {}\ifx\@empty#2\@empty\mhchem@mesomeric#2%
    \else\mhchem@ce@deploycommand{mhchem@mesomeric}#2{}\mhchem@END\fi{}%
  \else%
    {}\mhchem@ce@deploycommand{mhchem@givesleft}#1#2{}\mhchem@END{}%
  \fi%
}
\def\mhchem@ce@deploycommand#1#2#3\mhchem@END{%
  \ifx T#2\csname#1T\endcsname#3%
  \else\ifx C#2\csname#1C\endcsname#3%
  \else\csname#1\endcsname#2#3\fi\fi%
}

\def\mhchem@ce@ii#1{%
  \mhchem@ce@iii#1%
}
\newtoks\tok@mhchem@ce@iii%
\def\mhchem@ce@iii@tmp@i{}%
\def\mhchem@ce@iii@tmp@ii{}%
\def\mhchem@ce@iii#1\mhchem@empty{%
  \tok@mhchem@ce@iii{#1}%
  \edef\mhchem@ce@iii@tmp@i{\the\tok@mhchem@ce@iii}%
  %
  \def\mhchem@ce@iii@tmp@ii{(^)}%
  \ifx\mhchem@ce@iii@tmp@i\mhchem@ce@iii@tmp@ii%
    {}\mathop{\uparrow}{}%
  \else\def\mhchem@ce@iii@tmp@ii{^}%
  \ifx\mhchem@ce@iii@tmp@i\mhchem@ce@iii@tmp@ii%
    {}\mathop{\uparrow}{}%
  \else\def\mhchem@ce@iii@tmp@ii{(v)}%
  \ifx\mhchem@ce@iii@tmp@i\mhchem@ce@iii@tmp@ii%
    {}\mathop{\downarrow}{}%
  \else\def\mhchem@ce@iii@tmp@ii{v}%
  \ifx\mhchem@ce@iii@tmp@i\mhchem@ce@iii@tmp@ii%
    {}\mathop{\downarrow}{}%
  \else%
    \mhchem@cf{#1}%
  \fi\fi\fi\fi%
}%

\def\mhchem@ce@cmath#1#2\mhchem@END{\mhchem@cmath{#1}\mhchem@cf{#2}}
\def\mhchem@ce@label#1#2\mhchem@END{\label{#1}\mhchem@cf{#2}}
\def\mhchem@ce@tag#1#2\mhchem@END{\tag{#1}\mhchem@cf{#2}}

%%%%%%%%%%%%%
%%% arrows

\newlength{\mhchem@arrowminlength}
\setlength{\mhchem@arrowminlength}{1em}
%TODO: adapt min length to each of the math modes

%%% for font arrows
%%%%% idea taken from http://www.texnik.de/misc/harpoon.phtml
\def\mhchem@rightharpoonupfill@{\arrowfill@\relbar\relbar\rightharpoonup}
\def\mhchem@leftharpoondownfill@{\arrowfill@\leftharpoondown\relbar\relbar}
\newcommand*\mhchem@xrightleftharpoons[2][]{%
  \mathrel{%
  \rlap{\protect\raisebox{.22ex}{$\ext@arrow 3399\mhchem@rightharpoonupfill@{}{\mhchem@mathbox[#1]{#2}}$}}%
  \raisebox{-.22ex}{$\ext@arrow 3399\mhchem@leftharpoondownfill@{#1}{\hphantom{#2}}$}}}%
\newsavebox\mhchem@arrows@box%
\newcommand*\mhchem@xlongrightshortleftharpoons[2][]{\mathrel{%
  \sbox{\mhchem@arrows@box}%
    {$\mkern9mu\ext@arrow 3399\mhchem@leftharpoondownfill@%
     {#1}{\hphantom{#2}\mkern-6mu\mkern-12mu}$}%
  \rlap{\protect\raisebox{-.22ex}{\usebox{\mhchem@arrows@box}}}%     
  \protect\raisebox{.22ex}{$\ext@arrow 3399\mhchem@rightharpoonupfill@%
    {\hphantom{\usebox{\mhchem@arrows@box}}\mkern-6mu}{#2}$}%
  }}
\newcommand*\mhchem@xshortrightlongleftharpoons[2][]{\mathrel{%
  \sbox{\mhchem@arrows@box}%
    {$\mkern9mu\ext@arrow 3399\mhchem@rightharpoonupfill@%
     {\hphantom{#1}\mkern-6mu\mkern-12mu}{#2}$}%
  \rlap{\protect\raisebox{.22ex}{\usebox{\mhchem@arrows@box}}}%
  \protect\raisebox{-.22ex}{$\ext@arrow 3399\mhchem@leftharpoondownfill@%
    {#1}{\hphantom{\usebox{\mhchem@arrows@box}}\mkern-6mu}$}%
  }}
%\newcommand*\mhchem@xleftrightarrow[2][]{\ext@arrow 3095\leftrightarrowfill@{#1}{#2}}
  
  
%%% for pgf arrows
\newcommand*\mhchem@rightarrow@pgf[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,0.85ex);
    \draw[cap=round, join=round, line width=0.09ex]
      (0cm,0.575ex) -- ++(#1,0cm)
      arc (250:198:0.6ex) arc (198:250:0.6ex)
      arc (110:162:0.6ex);
  \end{tikzpicture}%
}%
\newcommand*\mhchem@leftarrow@pgf[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,0.85ex);
    \draw[cap=round, join=round, line width=0.09ex]
      (#1,0.575ex) -- (0cm,0.575ex)
      arc (70:18:0.6ex) arc (18:70:0.6ex)
      arc (-70:-18:0.6ex);
  \end{tikzpicture}%
}%
\newcommand*\mhchem@leftrightarrow@pgf[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,0.85ex);
    \draw[cap=round, join=round, line width=0.09ex]
        (0cm,0.575ex) 
        arc (70:18:0.6ex) arc (18:70:0.6ex)
        arc (-70:-18:0.6ex) arc (-18:-70:0.6ex)
        -- ++(#1,0cm)
        arc (250:198:0.6ex) arc (198:250:0.6ex) 
        arc (110:162:0.6ex);
  \end{tikzpicture}%
}%
\newcommand*\mhchem@leftrightharpoon@pgf[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,1ex);
    \draw[cap=round, join=round, line width=0.09ex]
        (0cm,0.575ex+0.22ex) -- ++(#1,0cm) arc (250:198:0.9ex);  
    \draw[cap=round, join=round, line width=0.09ex]
        (#1,0.575ex-0.22ex) -- ++(-#1,0cm) arc (70:18:0.9ex);
  \end{tikzpicture}%
}%      
\newcommand*\mhchem@longrightshortleftharpoons@pgf[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,1ex);
    \draw[cap=round, join=round, line width=0.09ex]
        (0.0cm,0.575ex+0.22ex) -- ++(#1,0cm) arc (250:198:0.9ex);  
    \draw[cap=round, join=round, line width=0.09ex]
        (#1+0.5em-1em,0.575ex-0.22ex) -- (0.5em,0.575ex-0.22ex) arc (70:18:0.9ex);
  \end{tikzpicture}%
}% 
\newcommand*\mhchem@shortrightlongleftharpoons@pgf[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,1ex);
    \draw[cap=round, join=round, line width=0.09ex]
        (0.5em,0.575ex+0.22ex) -- ++(#1-1em,0cm) arc (250:198:0.9ex);  
    \draw[cap=round, join=round, line width=0.09ex]
        (#1,0.575ex-0.22ex) -- ++(-#1,0cm) arc (70:18:0.9ex);
  \end{tikzpicture}%
}%

%%% for pgf-filled arrows
\newcommand*\mhchem@rightarrow@pgffilled[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,0.85ex);
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0cm,0.575ex) -- ++(#1,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (#1,0.575ex)
      -- ++(-0.6ex,0.2ex) -- ++(0.15ex,-0.2ex)
      -- ++(-0.15ex,-0.2ex)
      -- cycle;
  \end{tikzpicture}%
}%
\newcommand*\mhchem@leftarrow@pgffilled[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,0.85ex);
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0cm,0.575ex) -- ++(#1,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (0cm,0.575ex)
      -- ++(0.6ex,0.2ex) -- ++(-0.15ex,-0.2ex)
      -- ++(+0.15ex,-0.2ex)
      -- cycle;
  \end{tikzpicture}%
}%
\newcommand*\mhchem@leftrightarrow@pgffilled[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,0.85ex);
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0cm,0.575ex) -- ++(#1,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (#1,0.575ex)
      -- ++(-0.6ex,0.2ex) -- ++(0.15ex,-0.2ex)
      -- ++(-0.15ex,-0.2ex)
      -- cycle;
    \filldraw[cap=round, join=round, line width=0.09ex]
      (0cm,0.575ex)
      -- ++(0.6ex,0.2ex) -- ++(-0.15ex,-0.2ex)
      -- ++(+0.15ex,-0.2ex)
      -- cycle;      
  \end{tikzpicture}%
}%
\newcommand*\mhchem@leftrightharpoon@pgffilled[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,1ex);
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0cm,0.575ex+0.22ex) -- ++(#1,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (#1,0.575ex+0.22ex)
      -- ++(-0.6ex,0.25ex) -- ++(0.15ex,-0.25ex)
      -- cycle;
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0cm,0.575ex-0.22ex) -- ++(#1,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (0cm,0.575ex-0.22ex)
      -- ++(0.6ex,-0.25ex) -- ++(-0.15ex,0.25ex)
      -- cycle;
  \end{tikzpicture}%
}%      
\newcommand*\mhchem@longrightshortleftharpoons@pgffilled[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,1ex);
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0cm,0.575ex+0.22ex) -- ++(#1,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (#1,0.575ex+0.22ex)
      -- ++(-0.6ex,0.25ex) -- ++(0.15ex,-0.25ex)
      -- cycle;
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0.5em,0.575ex-0.22ex) -- ++(#1-1em,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (0.5em,0.575ex-0.22ex)
      -- ++(0.6ex,-0.25ex) -- ++(-0.15ex,0.25ex)
      -- cycle;
  \end{tikzpicture}%
}% 
\newcommand*\mhchem@shortrightlongleftharpoons@pgffilled[1]{%
  \begin{tikzpicture}[baseline]%
    \draw[use as bounding box] (0,0) (#1,1ex);
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0.5em,0.575ex+0.22ex) -- ++(#1-1em,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (#1-0.5em,0.575ex+0.22ex)
      -- ++(-0.6ex,0.25ex) -- ++(0.15ex,-0.25ex)
      -- cycle;
    \draw[cap=round, join=round, line width=0.09ex, shorten >=0.01ex]
      (0cm,0.575ex-0.22ex) -- ++(#1,0cm);
    \filldraw[cap=round, join=round, line width=0.09ex]
      (0cm,0.575ex-0.22ex)
      -- ++(0.6ex,-0.25ex) -- ++(-0.15ex,0.25ex)
      -- cycle;
  \end{tikzpicture}%
}%

\newlength{\mhchem@arrowlength@pgf}
\newlength{\mhchem@arrowminlength@pgf}
%TODO: use \mhchem@arrowminlength
\def\mhchem@labeledarrow@pgf#1#2#3#4#5#6#7{% 1-4 muskips 5 arrow 6 text above 7 below
  \setlength\mhchem@arrowlength@pgf{\widthof{\ensuremath{%
    \mkern#3mu%
    \mathop{}%
    \limits%
    \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
                       #7\if0#2\else\mkern#2mu\fi}}%
    \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
                       #6\if0#2\else\mkern#2mu\fi}}%          
    \mkern#4mu%
  }}}%
  %
  \setlength\mhchem@arrowminlength@pgf{10pt+0.5em}%
  \ifthenelse{\equal{mhchem@longrightshortleftharpoons@pgf}{#5}}{
    \setlength\mhchem@arrowminlength@pgf{1.85em}%
    \setlength\mhchem@arrowlength@pgf{\widthof{\ensuremath{%
      \mkern#3mu%
      \mathop{}%
      \limits%
      \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
                         #7\if0#2\else\mkern#2mu\fi}}%
      \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
                         \hspace{1em}% %%
                         #6\if0#2\else\mkern#2mu\fi}}%          
      \mkern#4mu%
    }}}%
  }{}%
  \ifthenelse{\equal{mhchem@shortrightlongleftharpoons@pgf}{#5}}{
    \setlength\mhchem@arrowminlength@pgf{1.85em}%
    \setlength\mhchem@arrowlength@pgf{\widthof{\ensuremath{%
      \mkern#3mu%
      \mathop{}%
      \limits%
      \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
                         \hspace{1em}% %%
                         #7\if0#2\else\mkern#2mu\fi}}%
      \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
                         #6\if0#2\else\mkern#2mu\fi}}%          
      \mkern#4mu%
    }}}%
  }{}%
  \ifthenelse{\equal{mhchem@longrightshortleftharpoons@pgffilled}{#5}}{
    \setlength\mhchem@arrowminlength@pgf{1.85em}%
    \setlength\mhchem@arrowlength@pgf{\widthof{\ensuremath{%
      \mkern#3mu%
      \mathop{}%
      \limits%
      \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
                         #7\if0#2\else\mkern#2mu\fi}}%
      \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
                         \hspace{1em}% %%
                         #6\if0#2\else\mkern#2mu\fi}}%          
      \mkern#4mu%
    }}}%
  }{}%
  \ifthenelse{\equal{mhchem@shortrightlongleftharpoons@pgffilled}{#5}}{
    \setlength\mhchem@arrowminlength@pgf{1.85em}%
    \setlength\mhchem@arrowlength@pgf{\widthof{\ensuremath{%
      \mkern#3mu%
      \mathop{}%
      \limits%
      \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
                         \hspace{1em}% %%
                         #7\if0#2\else\mkern#2mu\fi}}%
      \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
                         #6\if0#2\else\mkern#2mu\fi}}%          
      \mkern#4mu%
    }}}%
  }{}%  
  %          
  \ifdim\mhchem@arrowlength@pgf<\mhchem@arrowminlength@pgf%
    \setlength\mhchem@arrowlength@pgf{\mhchem@arrowminlength@pgf}%
  \fi%
  \mathrel{\mkern#3mu\mathop{\csname#5\endcsname{\mhchem@arrowlength@pgf}%
    }%
    \limits
    \@ifnotempty{#7}{^{\if0#1\else\mkern#1mu\fi%
                       #7\if0#2\else\mkern#2mu\fi}}%
    \@ifnotempty{#6}{_{\if0#1\else\mkern#1mu\fi%
                       #6\if0#2\else\mkern#2mu\fi}}%
    \mkern#4mu%
    }%}
}%       
          
\newcommandtwoopt*\mhchem@gives[2][][]{}
\newcommandtwoopt*\mhchem@givesleft[2][][]{}
\newcommandtwoopt*\mhchem@mesomeric[2][][]{}
\newcommandtwoopt*\mhchem@equilibrium[2][][]{}
\newcommandtwoopt*\mhchem@equilibriumRight[2][][]{}
\newcommandtwoopt*\mhchem@equilibriumLeft[2][][]{}

\newcommand\mhchem@definearrows[1]{%
  %%% font
  \ifthenelse{\equal{#1}{font}}{%
    \renewcommandtwoopt*\mhchem@gives[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
      \xrightarrow%
        [{##2}]%
        {##1}}}%
    \renewcommandtwoopt*\mhchem@givesleft[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
      \xleftarrow%
        [{##2}]%
        {##1}}}%
    \renewcommandtwoopt*\mhchem@mesomeric[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
      \ext@arrow 3399\leftrightarrowfill@%
      {##2}%
      {##1}}}%
    \renewcommandtwoopt*{\mhchem@equilibrium}[2][\hspace{\mhchem@arrowminlength}][]{\ensuremath{%
      \mhchem@xrightleftharpoons%
      [{##2}]%
      {##1}}}%
    \renewcommandtwoopt*{\mhchem@equilibriumRight}[2][\hphantom{\makebox[\mhchem@arrowminlength]{}}][]{\ensuremath{%
      \mhchem@xlongrightshortleftharpoons%
      [{##2}]%
      {##1}}}%
    \renewcommandtwoopt*{\mhchem@equilibriumLeft}[2][][\hspace{\mhchem@arrowminlength}]{\ensuremath{%
      \mhchem@xshortrightlongleftharpoons%
      [{##2}]%
      {##1}}}%
  }{%%% pgf
    \ifthenelse{\equal{#1}{pgf}}{%
      \renewcommandtwoopt*\mhchem@gives[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{1.5}{5}{1.5}{1}{mhchem@rightarrow@pgf}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@givesleft[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{5}{1.5}{1}{1.5}{mhchem@leftarrow@pgf}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@mesomeric[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{5}{5}{1}{1}{mhchem@leftrightarrow@pgf}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@equilibrium[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{6}{6}{1}{1}{mhchem@leftrightharpoon@pgf}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@equilibriumRight[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{6}{6}{1}{1}{mhchem@longrightshortleftharpoons@pgf}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@equilibriumLeft[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{6}{6}{1}{1}{mhchem@shortrightlongleftharpoons@pgf}{##2}{##1}}}%
  }{%%% pgf-filled
    \ifthenelse{\equal{#1}{pgf-filled}}{%
      \renewcommandtwoopt*\mhchem@gives[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{1.5}{7}{1.5}{1}{mhchem@rightarrow@pgffilled}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@givesleft[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{7}{1.5}{1}{1.5}{mhchem@leftarrow@pgffilled}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@mesomeric[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{7}{7}{1}{1}{mhchem@leftrightarrow@pgffilled}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@equilibrium[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{7}{7}{1}{1}{mhchem@leftrightharpoon@pgffilled}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@equilibriumRight[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{7}{7}{1}{1}{mhchem@longrightshortleftharpoons@pgffilled}{##2}{##1}}}%
      \renewcommandtwoopt*\mhchem@equilibriumLeft[2][][]%
        {\ensuremath{\mhchem@labeledarrow@pgf{7}{7}{1}{1}{mhchem@shortrightlongleftharpoons@pgffilled}{##2}{##1}}}%
     }{%
      \PackageError{mhchem}{The option font=#1 is not supported}%
    }%
  }}%
}

\newcommandtwoopt*\mhchem@givesT[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@gives[\text{#1}][\text{#2}]}%
\newcommandtwoopt*\mhchem@givesC[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@gives[\ce@main{#1}][\ce@main{#2}]}%
\newcommandtwoopt*\mhchem@givesleftT[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@givesleft[\text{#1}][\text{#2}]}%
\newcommandtwoopt*\mhchem@givesleftC[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@givesleft[\ce@main{#1}][\ce@main{#2}]}%
\newcommandtwoopt*\mhchem@mesomericT[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@mesomeric[\text{#1}][\text{#2}]}%
\newcommandtwoopt*\mhchem@mesomericC[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@mesomeric[\ce@main{#1}][\ce@main{#2}]}%
\newcommandtwoopt*{\mhchem@equilibriumT}[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@equilibrium[\text{#1}][\text{#2}]}
\newcommandtwoopt*{\mhchem@equilibriumC}[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@equilibrium[\ce@main{#1}][\ce@main{#2}]}
\newcommandtwoopt*{\mhchem@equilibriumRightT}[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@equilibriumRight[\text{#1}][\text{#2}]}
\newcommandtwoopt*{\mhchem@equilibriumRightC}[2][\hspace{\mhchem@arrowminlength}][]%
  {\mhchem@equilibriumRight[\ce@main{#1}][\ce@main{#2}]}
\newcommandtwoopt*{\mhchem@equilibriumLeftT}[2][][\hspace{\mhchem@arrowminlength}]%
  {\mhchem@equilibriumLeft[\text{#1}][\text{#2}]}
\newcommandtwoopt*{\mhchem@equilibriumLeftC}[2][][\hspace{\mhchem@arrowminlength}]%
  {\mhchem@equilibriumLeft[\ce@main{#1}][\ce@main{#2}]}


%%%%%%%%%%%%%
%%% bonds %%%
%
\newlength\mhchem@bondwidth%
\newlength\mhchem@bondheight%
\newlength\mhchem@smallbondwidth@tmpA%
\newlength\mhchem@smallbondwidth@tmpB%
\newlength\mhchem@smallbondwidth%

\def\mhchem@setbondwidth{%
  \setlength\mhchem@bondwidth{\widthof{\sbond}}%
  \setlength\mhchem@bondheight{\heightof{\sbond}}%
  \setlength\mhchem@smallbondwidth@tmpA{%
    \mhchem@bondwidth-\mhchem@option@minussidebearingleft-\mhchem@option@minussidebearingright}%
  \setlength\mhchem@smallbondwidth@tmpB{%
    \widthof{\sbond\sbond\sbond}-\mhchem@option@minussidebearingleft-%
    \mhchem@option@minussidebearingright}%
  \setlength\mhchem@smallbondwidth{\mhchem@bondwidth*%
    \ratio{\mhchem@smallbondwidth@tmpA}{\mhchem@smallbondwidth@tmpB}}%
}
\def\mhchem@halfbond{\rlap{\hspace{\mhchem@option@minussidebearingleft}%
                     \resizebox{\mhchem@smallbondwidth}{\mhchem@bondheight}{\sbond}\unskip%
                     \resizebox{\mhchem@smallbondwidth}{\mhchem@bondheight}{\sbond}%
                     \resizebox{\mhchem@smallbondwidth}{\mhchem@bondheight}{\sbond}}%
                     \phantom{\sbond}}
\def\mhchem@bond#1{%
  %
  \if ##\noexpand#1%
    \tbond%
  \else\ifx \tbond#1%
    \tbond%
  \else%
    \ifthenelse{\equal{#1}{-}}{\sbond}{%
    \ifthenelse{\equal{#1}{=}}{\dbond}{%
    \ifthenelse{\equal{#1}{~}}{%
      \mhchem@setbondwidth%
      \mhchem@halfbond}{%
    \ifthenelse{\equal{#1}{~-}}{%
      \mhchem@setbondwidth%
      \rlap{\protect\raisebox{.2ex}{\mhchem@halfbond}}%
      \protect\raisebox{-.2ex}{\sbond}}{%
    \ifthenelse{\equal{#1}{~--}}{%            
      \mhchem@setbondwidth%
      \rlap{\protect\raisebox{.4ex}{\mhchem@halfbond}}%
      \rlap{\sbond}%
      \protect\raisebox{-.4ex}{\sbond}}{%
    \ifthenelse{\equal{#1}{~=}}{%            
      \mhchem@setbondwidth%
      \rlap{\protect\raisebox{.4ex}{\mhchem@halfbond}}%
      \rlap{\sbond}%
      \protect\raisebox{-.4ex}{\sbond}}{%
    \ifthenelse{\equal{#1}{-~-}}{%            
      \mhchem@setbondwidth%
      \rlap{\protect\raisebox{.4ex}{\sbond}}%
      \rlap{\mhchem@halfbond}%
      \protect\raisebox{-.4ex}{\sbond}}{%
    \ifthenelse{\equal{#1}{...}}{{\cdot}{\cdot}{\cdot}}{%
    \ifthenelse{\equal{#1}{....}}{{\cdot}{\cdot}{\cdot}{\cdot}}{%
    \ifthenelse{\equal{#1}{->}}{{\rightarrow}}{%
    \ifthenelse{\equal{#1}{<-}}{{\leftarrow}}{%
    %
      \PackageError{mhchem}{unknown bond type in \string\bond (#1)}%
    }}}}}}}}}}}%
  \fi\fi%
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%   \cf   %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newtoks\mhchem@cf@result%
\newcommand*\mhchem@cf[2][]{%
  \bgroup%
  %%%
  \def\sbond{{\ensuremath{-}}}%
  \ifnum 2=\mhchem@option@version%
    \let\bond\sbond%
  \else\ifnum 2<\mhchem@option@version%
    \DeclareRobustCommand*\bond{\mhchem@bond}%
  \fi\fi%
  \DeclareRobustCommand\dbond{\rlap{\protect\raisebox{.2ex}{\sbond}}\protect\raisebox{-.2ex}{\sbond}}%
  \DeclareRobustCommand\tbond{\rlap{\protect\raisebox{.4ex}{\sbond}}%
    \rlap{\sbond}\protect\raisebox{-.4ex}{\sbond}}%
  \def\hyphen{\mhchem@hyphen}%
  %%%
  \ifmmode\else\def\mhchem@option@alwaystextmode{1}\fi%
  \if 1\mhchem@option@alwaystextmode%
    \edef\mhchem@mathOrText##1{\noexpand\text{##1}}%
    \edef\mhchem@mathOrText@ii##1##2{##2}%
  \else%
    \ifnum 1<\mhchem@option@version%
      \edef\mhchem@mathOrText##1{\ifmmode\noexpand\mhchem@option@mathFont{##1}\else\noexpand\text{##1}\fi}%
      \edef\mhchem@mathOrText@ii##1##2{\ifmmode\noexpand\mhchem@option@mathFont{##1}\else ##2\fi}%
    \else%
      \edef\mhchem@mathOrText##1{\ifmmode ##1\else\noexpand\text{##1}\fi}%
      \edef\mhchem@mathOrText@ii##1##2{\ifmmode ##1\else ##2\fi}%
    \fi%
  \fi%
  \ifmmode\else\mhchem@option@textFont\fi%
  %%%
  \def\mhchem@cf@state{s}%
    %
    %
    %
    %
    %
    %
    %
    %
    %
    %
  \def\mhchem@cf@startedWithBond{0}%
  %%%
  \mhchem@cf@outputReset%
  \mhchem@cf@result={}%
  %%%
  \mhchem@cf@continue#2\mhchem@END%
  %%%
    %
    %
  \ifthenelse{\equal{#1}{}}%
    {%
       \ensuremath{\the\mhchem@cf@result}%
    }{%
      \ensuremath{\overset{#1}{\the\mhchem@cf@result}}%
    }%
  %TODO: insert kerning if full stop (or similar) follows superscript
  %\@ifnextchar,{\kern-0.2em}{} ??%
  \egroup%
}%
\def\mhchem@cf@i{%
    %
    %
  %%%
  \ifx\mhchem@END\mhchem@cf@lookahead%
    \if -\mhchem@cf@state%
      \ifnum 4>\mhchem@option@version%
        \mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup -}%
      \else%
        \if 0\mhchem@cf@startedWithBond%
          \mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup -}%
        \else%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \mhchem@cf@result=\expandafter{\the\mhchem@cf@result\sbond}%
        \fi%
      \fi%
    \fi%
    \mhchem@cf@outputAndReset{\mhchem@cf@result}%
    \let\mhchem@cf@action\mhchem@gobble%
  \else\ifx\relax\mhchem@cf@lookahead%
    \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
  \else\ifx\protect\mhchem@cf@lookahead%
    \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
  %%%
  \else%
%
%
%
%
    \if -\mhchem@cf@state%
      %
      \mhchem@cf@outputAndReset{\mhchem@cf@result}%
      \mhchem@cf@result=\expandafter{\the\mhchem@cf@result\sbond}%
      \def\mhchem@cf@state{+}%
    \fi%
    \if s\mhchem@cf@state%
      \ifx \{\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx \}\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx\bond\mhchem@cf@lookahead%
        \ifnum 2=\mhchem@option@version%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \else%
          \def\mhchem@cf@state{C}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \fi%
			\else\if =\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\dbond}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
			\else\if ##\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\tbond}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
        \def\mhchem@cf@state{c}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if ^\mhchem@cf@lookahead%
        \def\mhchem@cf@state{p}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if _\mhchem@cf@lookahead%
        \def\mhchem@cf@state{q}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if `\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{P}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
        \fi%
      \else\if ,\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{Q}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@state{1}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{{,}}}%
        \fi%
      \else\if .\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
            {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
        \else%
          \def\mhchem@cf@state{1}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
        \fi%
      \else\if +\mhchem@cf@lookahead%
        \def\mhchem@cf@state{+}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
      \else\if -\mhchem@cf@lookahead%
        \ifnum 1<\mhchem@option@version%
          \def\mhchem@cf@state{-}%
          \def\mhchem@cf@startedWithBond{1}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@state{+}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
        \fi%
      \else\if |\mhchem@cf@lookahead%
        \let\mhchem@cf@action\mhchem@cf@switchState%
      \else\if (\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if )\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if [\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if ]\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if *\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
          {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
      \else\ifcat a\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifcat 1\mhchem@cf@lookahead%
        \def\mhchem@cf@state{1}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
      \else\if\mhchem@lbracechar\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
        \else%
           \def\mhchem@cf@state{1}%
           \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@amount}}%
        \fi%
      \else\if $\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
        \else%
          \def\mhchem@cf@state{1}%
          \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@amount}}%
        \fi%
      \else%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
    \else\if C\mhchem@cf@state%
      \if\mhchem@lbracechar\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
      \else%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \fi%
      \def\mhchem@cf@state{c}%
    \else\if c\mhchem@cf@state%
      \if\mhchem@lbracechar\mhchem@cf@lookahead%
         \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
      \else%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@continue}%
      \fi%
    \else\if 1\mhchem@cf@state%
      \ifx \{\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx \}\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx\bond\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \ifnum 2=\mhchem@option@version%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \else%
          \def\mhchem@cf@state{C}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \fi%
			\else\if =\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\dbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
			\else\if ##\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\tbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{c}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if ^\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{p}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if _\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{q}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if `\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{E}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
        \fi%
      \else\if ,\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{F}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{{,}}}%
        \fi%
      \else\if .\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
            {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
        \fi%
      \else\if |\mhchem@cf@lookahead%
        \PackageWarning{mhchem}{The symbol | is not allowed here}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if (\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if )\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if [\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if ]\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if *\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
          {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
      \else\ifcat a\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifcat 1\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
      \else\if\mhchem@lbracechar\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@amount}}%
        \fi%
      \else\if $\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@amount}}%
      \else%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
    \else\if a\mhchem@cf@state%
      \ifx \{\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx \}\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx\bond\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \ifnum 2=\mhchem@option@version%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \else%
          \def\mhchem@cf@state{C}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \fi%
			\else\if =\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\dbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
			\else\if ##\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\tbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
         \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{c}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if ^\mhchem@cf@lookahead%
        \def\mhchem@cf@state{e}%
        \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
          \mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup ,}%
        \fi%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if _\mhchem@cf@lookahead%
        \def\mhchem@cf@state{f}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if `\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{E}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
        \fi%
      \else\if ,\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}%
        \fi%
      \else\if .\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
            {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
        \fi%
      \else\if +\mhchem@cf@lookahead%
        \def\mhchem@cf@state{+}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
      \else\if -\mhchem@cf@lookahead%
        \ifnum 1<\mhchem@option@version%
          \def\mhchem@cf@state{-}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@state{+}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
        \fi%
      \else\if |\mhchem@cf@lookahead%
        \PackageWarning{mhchem}{The symbol | is not allowed here}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if (\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if )\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if [\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if ]\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if *\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
          {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
      \else\ifcat a\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifcat 1\mhchem@cf@lookahead%
        \def\mhchem@cf@state{2}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
      \else\if\mhchem@lbracechar\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@action{\mhchem@cf@appendNextGroupAsMath{%
            \mhchem@cf@element}}%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}%
        \fi%
      \else\if $\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
      \else%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
    \else\if 2\mhchem@cf@state%
      \ifx \{\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx \}\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx\bond\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \ifnum 2=\mhchem@option@version%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \else%
          \def\mhchem@cf@state{C}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \fi%
			\else\if =\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\dbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
			\else\if ##\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\tbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{c}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if ^\mhchem@cf@lookahead%
        \def\mhchem@cf@state{e}%
        \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
          \mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup ,}%
        \fi%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if _\mhchem@cf@lookahead%
        \def\mhchem@cf@state{f}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if `\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{E}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
        \fi%
      \else\if ,\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{F}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@amount}{,}}%
        \fi%
      \else\if .\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
            {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
        \else%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
        \fi%
      \else\if +\mhchem@cf@lookahead%
        \def\mhchem@cf@state{+}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
      \else\if -\mhchem@cf@lookahead%
        \ifnum 1<\mhchem@option@version%
          \def\mhchem@cf@state{-}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@state{+}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
        \fi%
      \else\if |\mhchem@cf@lookahead%
        \PackageWarning{mhchem}{The symbol | is not allowed here}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if (\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if )\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if [\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if ]\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if *\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
          {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
      \else\ifcat a\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifcat 1\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
      \else\if\mhchem@lbracechar\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
        \else%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{a}%
           \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}%
        \fi%
      \else\if $\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
      \else%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
    \else\if e\mhchem@cf@state%
      \def\mhchem@cf@state{+}%
      \if $\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@sup}}%
      \else%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
      \fi%
    \else\if f\mhchem@cf@state%
      \def\mhchem@cf@state{+}%
      \if $\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@amount}}%
      \else%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
      \fi%
    \else\if p\mhchem@cf@state%
      \def\mhchem@cf@state{*}%
      \if $\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@presup}}%
      \else%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@presup}}%
      \fi%
    \else\if q\mhchem@cf@state%
      \def\mhchem@cf@state{*}%
      \if $\mhchem@cf@lookahead%
        \def\mhchem@cf@action{\mhchem@cf@appendMathAsGroup{\mhchem@cf@presub}}%
      \else%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@presub}}%
      \fi%
    \else\if E\mhchem@cf@state%
      \def\mhchem@cf@state{+}%
      \def\mhchem@cf@action{%
        \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@sup}}%
    \else\if F\mhchem@cf@state%
      \def\mhchem@cf@state{+}%
      \def\mhchem@cf@action{%
        \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@amount}}%
    \else\if P\mhchem@cf@state%
      \def\mhchem@cf@state{*}%
      \def\mhchem@cf@action{%
        \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@presup}}%
    \else\if Q\mhchem@cf@state%
      \def\mhchem@cf@state{*}%
      \def\mhchem@cf@action{%
        \mhchem@cf@appendNextTokenAsMathrm{\mhchem@cf@presub}}%
    \else\if +\mhchem@cf@state%
      \ifx \{\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx \}\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifx\bond\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \ifnum 2=\mhchem@option@version%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \else%
          \def\mhchem@cf@state{C}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \fi%
			\else\if =\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\dbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
			\else\if ##\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\tbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{c}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if ^\mhchem@cf@lookahead%
        \def\mhchem@cf@state{e}%
        \expandafter\ifx\expandafter\@empty\the\mhchem@cf@sup\@empty\else%
          \mhchem@cf@sup=\expandafter{\the\mhchem@cf@sup ,}%
        \fi%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if _\mhchem@cf@lookahead%
        \def\mhchem@cf@state{f}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if `\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{E}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
        \fi%
      \else\if ,\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{F}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}%
        \fi%
      \else\if .\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
            {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
        \else%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
        \fi%
      \else\if +\mhchem@cf@lookahead%
        \def\mhchem@cf@state{+}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@sup}}%
      \else\if -\mhchem@cf@lookahead%
        \ifnum 1<\mhchem@option@version%
          \def\mhchem@cf@state{-}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@state{+}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@sup}{-}}%
        \fi%
      \else\if |\mhchem@cf@lookahead%
        \PackageWarning{mhchem}{The symbol | is not allowed here}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if (\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if )\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if [\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if ]\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if *\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
          {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
      \else\ifcat a\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifcat 1\mhchem@cf@lookahead%
        %
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\if\mhchem@lbracechar\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@result}}%
        \else%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}%
        \fi%
      \else\if $\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
      \else%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%       .                                                 
    \else\if *\mhchem@cf@state%
      \ifx \{\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\ifx \}\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\ifx\bond\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \ifnum 2=\mhchem@option@version%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \else%
          \def\mhchem@cf@state{C}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
        \fi%
			\else\if =\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\dbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
			\else\if ##\mhchem@cf@lookahead%
				\mhchem@cf@outputAndReset{\mhchem@cf@result}%
				\mhchem@cf@result=\expandafter{\the\mhchem@cf@result\tbond}%
				\def\mhchem@cf@state{+}%
				\let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\ifcat\noexpand\mhchem@macro\noexpand\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{c}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if ^\mhchem@cf@lookahead%
        \def\mhchem@cf@state{p}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if _\mhchem@cf@lookahead%
        \def\mhchem@cf@state{q}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if `\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{P}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
        \fi%
      \else\if ,\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \def\mhchem@cf@state{Q}%
          \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
        \else%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@element}{,}}%
        \fi%
      \else\if .\mhchem@cf@lookahead%
        \ifnum 4>\mhchem@option@version%
          \mhchem@cf@outputAndReset{\mhchem@cf@result}%
          \def\mhchem@cf@state{s}%
          \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
            {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
        \else%
          \def\mhchem@cf@state{a}%
          \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
        \fi%
      \else\if |\mhchem@cf@lookahead%
        \PackageWarning{mhchem}{The symbol | is not allowed here}%
        \let\mhchem@cf@action\mhchem@cf@gobbleNextToken%
      \else\if (\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if )\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if [\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if ]\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \else\if *\mhchem@cf@lookahead%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@append{\mhchem@cf@result}%
          {\mhchem@mathOrText@ii{{}\cdot{}}{\mhchem@option@textcdot}}}%
      \else\ifcat a\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@element}}%
      \else\ifcat 1\mhchem@cf@lookahead%
        %
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{1}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@amount}}%
      \else\if\mhchem@lbracechar\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextGroup{\mhchem@cf@element}}%
      \else\if $\mhchem@cf@lookahead%
        \def\mhchem@cf@state{a}%
        \def\mhchem@cf@action{\mhchem@cf@appendMath{\mhchem@cf@element}}%
      \else%
        \mhchem@cf@outputAndReset{\mhchem@cf@result}%
        \def\mhchem@cf@state{s}%
        \def\mhchem@cf@action{\mhchem@cf@appendNextToken{\mhchem@cf@result}}%
      \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%             .                                         
    \else%
      \PackageWarning{mhchem}{Assertion failed: unknown internal state \mhchem@cf@state}%
    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi%
  \fi\fi\fi%
  \mhchem@cf@action%
}%
%%%
\def\mhchem@cf@continue{%
  \futurelet\mhchem@cf@lookahead\mhchem@cf@i%
}%
\def\mhchem@cf@gobbleNextToken#1{%
  \mhchem@cf@continue%
}%
\def\mhchem@cf@append#1#2#3{%
  %\showthe#1%
  #1=\expandafter{\the#1#2}%
  %\showthe#1%
  \mhchem@cf@continue%
}%
\def\mhchem@cf@appendExpand#1#2#3{%
  \edef\mhchem@cf@appendExpand@i{\noexpand\mhchem@cf@append\noexpand{#1}{#2}}%
  \mhchem@cf@appendExpand@i%
}%
\def\mhchem@cf@appendAndExecute#1#2#3#4{%
  #1=\expandafter{\the#1#2}%
  #3%
  \mhchem@cf@continue%
}%
\def\mhchem@cf@appendAndExecuteExpand#1#2#3#4{%
  \edef\mhchem@cf@appendExpand@i{\noexpand\mhchem@cf@appendAndExecute\noexpand{#1}{#2}{#3}}%
  \mhchem@cf@appendExpand@i%
}%
\def\mhchem@cf@appendNextGroup#1#2{%
  #1=\expandafter{\the#1{#2}}%
  \mhchem@cf@continue%
}
\def\mhchem@cf@appendNextGroupAsMath#1#2{%
  #1=\expandafter{\the#1{\text{\ensuremath{#2}}}}%
  \mhchem@cf@continue%
}
\def\mhchem@cf@appendNextToken#1#2{%
  %\showthe#1%
  #1=\expandafter{\the#1#2}%
  %\showthe#1%
  \mhchem@cf@continue%
}
\def\mhchem@cf@appendNextTokenAsMathrm#1#2{%
  #1=\expandafter{\the#1{\ensuremath{\mathrm{#2}}}}%
  \mhchem@cf@continue%
}
\def\mhchem@cf@appendMath#1#2#3${%
  #1=\expandafter{\the#1\text{\ensuremath{#3}}}%
  \mhchem@cf@continue%
}%
\def\mhchem@cf@appendMathAsGroup#1#2#3${%
  #1=\expandafter{\the#1{\text{\ensuremath{#3}}}}%
  \mhchem@cf@continue%
}%
\def\mhchem@cf@switchState#1#2|{%
  \ifthenelse{\equal{1}{#2}}{%  if 1
    \def\mhchem@cf@state{a}%     switch to [a]element
  }{%
    \PackageWarning{mhchem}{Command |#2| unknown}%
  }%
  \mhchem@cf@continue%
}%

%%%%%
\newtoks\mhchem@cf@element%
\newtoks\mhchem@cf@amount%
%\newtoks\mhchem@cf@sub%
\newtoks\mhchem@cf@sup%
\newtoks\mhchem@cf@presub%
\newtoks\mhchem@cf@presup%
\def\mhchem@cf@output{%
    %
  \if\mhchem@cf@state s%
  \else\if\mhchem@cf@state 1%
     \noexpand\mhchem@mathOrText{\noexpand\mhchem@cf@frac\the\mhchem@cf@amount/\noexpand\mhchem@END}%
  \else%
    \if\mhchem@option@usenonsimultaneoussubsuperscripts 0\relax%
      \noexpand\mhchem@chemfive%
        {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presup}}%
        {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presub}}%
        {\the\mhchem@cf@element}%
        {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@amount}}%
        {\noexpand\mhchem@cf@replaceMathMinusDot{\the\mhchem@cf@sup}}%
        {}%
    \else%
      \noexpand\mhchem@chemfive%
        {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presup}}%
        {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@presub}}%
        {\the\mhchem@cf@element}%
        {\noexpand\mhchem@cf@replaceMath{\the\mhchem@cf@amount}}%
        {}%
        {\noexpand\mhchem@cf@replaceMathMinusDot{\the\mhchem@cf@sup}}%
    \fi%
  \fi\fi%\fi%
}
\def\mhchem@cf@outputReset{%
    %\showthe\mhchem@cf@element%
    %\showthe\mhchem@cf@sup%
  %
  \mhchem@cf@element={}%
  \mhchem@cf@amount={}%
  \mhchem@cf@sup={}%
  \mhchem@cf@presub={}%
  \mhchem@cf@presup={}%
}
\def\mhchem@cf@outputAndReset#1{%
  \edef\mhchem@cf@outputAndReset@i{#1={\the#1\mhchem@cf@output}}%
  \mhchem@cf@outputAndReset@i%
  %\showthe#1%
  \mhchem@cf@outputReset%
}



%%% frac
\def\mhchem@cf@frac#1/#2\mhchem@END{%
  \ifthenelse{\equal{#2}{}}{%
    #1\mhchem@option@skipAfterAmount%
  }{%
    \ensuremath{\mathchoice%
      {\textstyle%
       \frac{\mhchem@mathOrText{#1}}{\mhchem@mathOrText{\mhchem@getfirstchar#2\mhchem@ENDgetfirstchar}}\mhchem@option@skipAfterFracAmount}%
      {\frac{\mhchem@mathOrText{#1}}{\mhchem@mathOrText{\mhchem@getfirstchar#2\mhchem@ENDgetfirstchar}}\mhchem@option@skipAfterFracAmount}%
      {\frac{\mhchem@mathOrText{#1}}{\mhchem@mathOrText{\mhchem@getfirstchar#2\mhchem@ENDgetfirstchar}}\mhchem@option@skipAfterFracAmount}%
      {\frac{\mhchem@mathOrText{#1}}{\mhchem@mathOrText{\mhchem@getfirstchar#2\mhchem@ENDgetfirstchar}}\mhchem@option@skipAfterFracAmount}%
    }%
  }%
}%
\def\mhchem@getfirstchar#1#2\mhchem@ENDgetfirstchar{#1}
\def\mhchem@getlastchars#1#2\mhchem@ENDgetlastchars{#2}

%%% replaceMath
  %
  %
  %
\newtoks\mhchem@cf@replaceMath@result
\newcommand\mhchem@cf@replaceMath[1]{%
  \mhchem@cf@replaceMath@result={}%
  \mhchem@cf@replaceMath@continue#1\mhchem@END%
  %
  \the\mhchem@cf@replaceMath@result%
}
\def\mhchem@cf@replaceMath@i{%
  \ifx\mhchem@END\mhchem@cf@replaceMath@lookahead%
    \let\mhchem@cf@replaceMath@action\mhchem@gobble%
  \else\if\mhchem@lbracechar\mhchem@cf@replaceMath@lookahead%
    \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendNextGroup%
  \else\if $\mhchem@cf@replaceMath@lookahead%
    \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendMath%
  \else%
    \let\mhchem@cf@replaceMath@action\mhchem@cf@replaceMath@appendNextToken%
  \fi\fi\fi%
  \mhchem@cf@replaceMath@action%
}
%%%
\def\mhchem@cf@replaceMath@continue{%
  \futurelet\mhchem@cf@replaceMath@lookahead\mhchem@cf@replaceMath@i%
}
\def\mhchem@cf@replaceMath@appendNextGroup#1{%
  \mhchem@cf@replaceMath@result=\expandafter{\the\mhchem@cf@replaceMath@result{#1}}%
  \mhchem@cf@replaceMath@continue%
}
\def\mhchem@cf@replaceMath@appendNextToken#1{%
  \mhchem@cf@replaceMath@result=\expandafter{\the\mhchem@cf@replaceMath@result#1}%
  \mhchem@cf@replaceMath@continue%
}
\def\mhchem@cf@replaceMath@appendMath#1#2${%
  \mhchem@cf@replaceMath@result=\expandafter{\the\mhchem@cf@replaceMath@result\text{\ensuremath{#2}}}%
  \mhchem@cf@replaceMath@continue%
}%
%%% replaceMathMinusDot
%%%
%%%
%%%
%%%
%%%
\newtoks\mhchem@cf@replaceMathMinusDot@result
\newcommand\mhchem@cf@replaceMathMinusDot[1]{%
  \mhchem@cf@replaceMathMinusDot@result={}%
  \mhchem@cf@replaceMathMinusDot@continue#1\mhchem@END%
  %
  \the\mhchem@cf@replaceMathMinusDot@result%
}
\def\mhchem@cf@replaceMathMinusDot@i{%
  \ifx\mhchem@END\mhchem@cf@replaceMathMinusDot@lookahead%
    \let\mhchem@cf@replaceMathMinusDot@action\mhchem@gobble%
  \else\if -\mhchem@cf@replaceMathMinusDot@lookahead\relax%
    \def\mhchem@cf@replaceMathMinusDot@action{\mhchem@cf@replaceMathMinusDot@append{\mhchem@mathOrText@ii{-}{\mhchem@option@textminus}}}%
  \else\if .\mhchem@cf@replaceMathMinusDot@lookahead\relax%
    \def\mhchem@cf@replaceMathMinusDot@action{\mhchem@cf@replaceMathMinusDot@append{\ensuremath{\textbf{\fontfamily{cmr}\selectfont\textperiodcentered}}}}%
  \else\if\mhchem@lbracechar\mhchem@cf@replaceMathMinusDot@lookahead%
    \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendNextGroup%
  \else\if $\mhchem@cf@replaceMathMinusDot@lookahead%
    \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendMath%
  \else%
    \let\mhchem@cf@replaceMathMinusDot@action\mhchem@cf@replaceMathMinusDot@appendNextToken%
  \fi\fi\fi\fi\fi%
  \mhchem@cf@replaceMathMinusDot@action%
}
%%%
\def\mhchem@cf@replaceMathMinusDot@continue{%
  \futurelet\mhchem@cf@replaceMathMinusDot@lookahead\mhchem@cf@replaceMathMinusDot@i%
}
\def\mhchem@cf@replaceMathMinusDot@append#1#2{%
  \mhchem@cf@replaceMathMinusDot@result=\expandafter{\the\mhchem@cf@replaceMathMinusDot@result#1}%
  \mhchem@cf@replaceMathMinusDot@continue%
}
\def\mhchem@cf@replaceMathMinusDot@appendNextGroup#1{%
  \mhchem@cf@replaceMathMinusDot@result=\expandafter{\the\mhchem@cf@replaceMathMinusDot@result{#1}}%
  \mhchem@cf@replaceMathMinusDot@continue%
}
\def\mhchem@cf@replaceMathMinusDot@appendNextToken#1{%
  \mhchem@cf@replaceMathMinusDot@result=\expandafter{\the\mhchem@cf@replaceMathMinusDot@result#1}%
  \mhchem@cf@replaceMathMinusDot@continue%
}
\def\mhchem@cf@replaceMathMinusDot@appendMath#1#2${%
  \mhchem@cf@replaceMathMinusDot@result=\expandafter{\the\mhchem@cf@replaceMathMinusDot@result\text{\ensuremath{#2}}}%
  \mhchem@cf@replaceMathMinusDot@continue%
}%


%%%%%%%%%%%%%%%%%%%%%
%%%   @chemfive   %%%
%%%%%%%%%%%%%%%%%%%%%
%%%
%%%
%%%
%%%
%%%
%%%
%%%
\newcommand*\mhchem@chemfive[6]{%
  {%
    \mhchem@prepostscript%
      [\mhchem@mathOrText{\smash[t]{2+}}]%
      {\mhchem@mathOrText{#1}}%
      {\mhchem@mathOrText{#2}}%
      {\mhchem@mathOrText@ii{\mhchem@option@mathFont{#3}}{\text{#3}}}%
      {\mhchem@mathOrText{#4}}%
      {\mhchem@mathOrText{#5}}%
      {\mhchem@mathOrText{#6}}%
  }%
}

%%% @prepostscript
%%%
%%%
%%%
%%%
%%%
%%%
%%%
\newlength\mhchem@prepostscript@tmp@i%
\newlength\mhchem@prepostscript@tmp@ii%
\newcommand*\mhchem@prepostscript[7][]{%
  \m@th%
  \ensuremath{%
    \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#2#3$}}%
    \ifdim\mhchem@prepostscript@tmp@i>0pt%
      \setlength{\mhchem@prepostscript@tmp@i}{\widthof{${}^{#2}$}}% [1]
      \setlength{\mhchem@prepostscript@tmp@ii}{\widthof{${}_{#3}$}}% [1]
      \ifdim\mhchem@prepostscript@tmp@i<\mhchem@prepostscript@tmp@ii%
        \setlength{\mhchem@prepostscript@tmp@i}{\mhchem@prepostscript@tmp@ii}\fi% [1]
      \vphantom{#4}% [2]
      {}%
      ^{%
        \mhchem@mathboxright{\mhchem@prepostscript@tmp@i}{% [1]
          \vphantom{#6#7}% [2]
          \vphantom{#1}% [4]
          #2%
        }% [1]
       }%
      _{%
        \mhchem@mathboxright{\mhchem@prepostscript@tmp@i}{% [1]
          \vphantom{#5}% [2]
          #3%
        }% [1]
       }%
      \mhchem@minispace% [3]
    \fi%
    #4%
    \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#5#6$}}%
    \ifdim\mhchem@prepostscript@tmp@i>0pt%    
      _{%
        \vphantom{#3}% [2]
        #5%
       }%
      ^{%
        \vphantom{#2#7}% [2]
        \vphantom{#1}% [4]
        #6
       }%
    \fi%
    \setlength{\mhchem@prepostscript@tmp@i}{\widthof{$#7$}}%
    \ifdim\mhchem@prepostscript@tmp@i>0pt%    
      \mhchem@minispace% [3]
      {}%
      _{\vphantom{#3#5}}% [2]
      ^{%
        \vphantom{#2#6}% [2]
        \vphantom{#1}% [4]
        #7%
       }%
    \fi%
  }%
%
%
%
%
%
%
%
}

%%% @mathbox
%%%
%%%
\newcommand*\mhchem@mathbox[2][]{%
  \mathchoice%
    {\mhchem@mathbox@ii{\displaystyle}{#1}{#2}}%
    {\mhchem@mathbox@ii{\textstyle}{#1}{#2}}%
    {\mhchem@mathbox@ii{\scriptstyle}{#1}{#2}}%
    {\mhchem@mathbox@ii{\scriptscriptstyle}{#1}{#2}}}%
\newlength\mhchem@mathbox@tmp@i
\newlength\mhchem@mathbox@tmp@ii
\newcommand*\mhchem@mathbox@ii[3]{%    
  \setlength{\mhchem@mathbox@tmp@i}{\widthof{\ensuremath{#1#2}}}%
  \setlength{\mhchem@mathbox@tmp@ii}{\widthof{\ensuremath{#1#3}}}%
  \ifdim\mhchem@mathbox@tmp@i<\mhchem@mathbox@tmp@ii%
    \mhchem@mathbox@i{#3}%
  \else%
    \makebox[\mhchem@mathbox@tmp@i]{\ensuremath{#1#3}}%
  \fi}
\newcommand*\mhchem@mathbox@i[1]{\mathchoice%
  {\mbox{\ensuremath{\displaystyle#1}}}%
  {\mbox{\ensuremath{\textstyle#1}}}%
  {\mbox{\ensuremath{\scriptstyle#1}}}%
  {\mbox{\ensuremath{\scriptscriptstyle#1}}}}

%%% @mathboxright  
\newcommand*\mhchem@mathboxright[2]{\mathchoice%
  {\makebox[#1][r]{\ensuremath{\displaystyle#2}}}%
  {\makebox[#1][r]{\ensuremath{\textstyle#2}}}%
  {\makebox[#1][r]{\ensuremath{\scriptstyle#2}}}%
  {\makebox[#1][r]{\ensuremath{\scriptscriptstyle#2}}}}

%%% @minispace
%%%
%%%
\newlength\mhchem@minispace@tmp
\newcommand*\mhchem@minispace{%
  \setlength{\mhchem@minispace@tmp}{0pt-\widthof{${}^8_8$}+%
    \widthof{$\text{C}^8_8$}-\widthof{$\text{C}^{}_{}$}}% [3]
  \kern\mhchem@minispace@tmp%
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%   Package Options   %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\def\mhchem@option@version{0}
\define@key{mhchem}{version}{\def\mhchem@option@version{#1}}

\def\mhchem@option@mathFont{\mathrm}
\def\mhchem@option@textFont{}
\define@key{mhchem}{textfontcommand}{\def\mhchem@option@textFont{#1}}
\define@key{mhchem}{textfontname}{\def\mhchem@option@textFont{\csname#1\endcsname}}
\define@key{mhchem}{mathfontcommand}{\def\mhchem@option@mathFont{#1}}
\define@key{mhchem}{mathfontname}{\def\mhchem@option@mathFont{\csname#1\endcsname}}
\define@key{mhchem}{font}{%
  \ifthenelse{\equal{sf}{#1}}{%
    \def\mhchem@option@textFont{\sffamily}%
    \def\mhchem@option@mathFont{\mathsf}%
  }{\ifthenelse{\equal{}{#1}}{%
    \def\mhchem@option@textFont{}%
    \def\mhchem@option@mathFont{\mathrm}%
  }{\PackageError{mhchem}{Font option `#1' unknown}}}%
}

%
\def\mhchem@option@alwaystextmode{0}%

\newlength\mhchem@option@minussidebearingleft
\newlength\mhchem@option@minussidebearingright
\setlength\mhchem@option@minussidebearingleft{0.06em}
\setlength\mhchem@option@minussidebearingright{0.11em}
\define@key{mhchem}{minus-sidebearing-left}{\setlength\mhchem@option@minussidebearingleft{#1}}
\define@key{mhchem}{minus-sidebearing-right}{\setlength\mhchem@option@minussidebearingright{#1}}

%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

% Replicate layout of MS Word (superscript after subscript, not over)
\def\mhchem@option@usenonsimultaneoussubsuperscripts{0}%
% There is no key defined for this option, as to promote good typographic conventions.

\mhchem@definearrows{font}
\define@key{mhchem}{arrows}{%
  \ifthenelse{\equal{pgf}{#1} \or \equal{pgf-filled}{#1}}{% 
     \RequirePackage{pgf}% for finding the tikz package more easily
     \RequirePackage{tikz}%
  }{}%
  \mhchem@definearrows{#1}%
}

\def\mhchem@option@skipAfterAmount{\,}
\define@key{mhchem}{skip-after-amount}{\def\mhchem@option@skipAfterAmount{#1}\def\mhchem@option@skipAfterFracAmount{#1}}
\def\mhchem@option@skipAfterFracAmount{\,}
\define@key{mhchem}{skip-after-frac-amount}{\def\mhchem@option@skipAfterFracAmount{#1}}
%

\def\mhchem@option@textminus{--}
\define@key{mhchem}{textminus}{\def\mhchem@option@textminus{#1}}
%

\def\mhchem@option@textcdot{\cdot}
\define@key{mhchem}{textcdot}{\def\mhchem@option@textcdot{#1}}
%

%%% begin: standard keyval handling as in many other packages 
\def\ProcessOptionsWithKV#1{%
  \let\@tempc\relax%
  \let\mhchem@tempa\@empty%
  \@for\CurrentOption:=\@classoptionslist\do{%
    \@ifundefined{KV@#1@\CurrentOption}%
    {}%
    {%
      \edef\mhchem@tempa{\mhchem@tempa,\CurrentOption,}%
      \@expandtwoargs\@removeelement\CurrentOption%
        \@unusedoptionlist\@unusedoptionlist%
    }%
  }%
  \edef\mhchem@tempa{%
    \noexpand\setkeys{#1}{%
      \mhchem@tempa\@ptionlist{\@currname.\@currext}%
    }%
  }%
  \mhchem@tempa%
  \let\CurrentOption\@empty%
  \AtEndOfPackage{\let\@unprocessedoptions\relax}%
}
\ProcessOptionsWithKV{mhchem}\relax
%%% end:

\define@key{mhchem}{arrows}{\mhchem@definearrows{#1}}%

\newcommand*\mhchemoptions[1]{\setkeys{mhchem}{#1}}

\ifnum 0=\mhchem@option@version%
  \PackageWarningNoLine{mhchem}{%
    You did not specify a 'version' option for the mhchem\MessageBreak
    package. If you are about to create a new document,\MessageBreak
    please write \string\usepackage[version=3]{mhchem} in your preamble in\MessageBreak
    order to use the most recent version of mhchem}%
  \def\mhchem@option@version{3}%
\else\ifnum 4=\mhchem@option@version%
  \PackageWarningNoLine{mhchem}{%
    You are using version 3.09 of mhchem. You entered\MessageBreak
    the parameter version=4. This means, you are using\MessageBreak
    some beta features of mhchem that are subject\MessageBreak
    to change without notice}%
\fi\fi%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%   misc    %%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\ifnum 4>\mhchem@option@version
  \newcommand*\mhchem@cmath[1]{\ensuremath{\text{\ensuremath{#1}}}}%
  \newcommand*\cmath[1]{\mhchem@cmath{#1}}
  \newcommand*\cf[2][]{\mhchem@cf[#1]{#2}}
\fi









%
%
%
%
%
%
%
%
%
%
%
%
%
%
%
%

%
\def\mhchem@END{}
\def\mhchem@macro{}
\def\mhchem@empty{}
%
\edef\mhchem@lbracechar{\string{} %}
\def\mhchem@gobble#1{}%
%
%
