%
\begin{versionhistory}
\vhEntry{1.0}{24.06.2010}{ikuz, amarp}{Initial version}
+\vhEntry{2.0}{04.12.2013}{troscoe,shindep}{Extensively updated}
\end{versionhistory}
% \intro{Abstract} % Insert abstract here
% \intro{Acknowledgements} % Uncomment (if needed) for acknowledgements
-% \tableofcontents % Uncomment (if needed) for final draft
+\tableofcontents % Uncomment (if needed) for final draft
% \listoffigures % Uncomment (if needed) for final draft
% \listoftables % Uncomment (if needed) for final draft
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\chapter{Barrelfish Architecture Overview}
-We start with a high level overview of the architecture of the Barrelfish
-Operating System.
+This document is intended as an introduction to Barrelfish.
+It presents a high level overview of the architecture of the Barrelfish
+Operating System, together with the most important concepts used
+inside the OS at various levels.
+
+It does not provide a ``getting started'' guide to running Barrelfish
+on a PC, or in an emulation enviroment like Qemu or GEM5 - this is
+provided in other documentation.
+
+\section{High level overview}\label{sec:overview}
+
+Barrelfish is ``multikernel'' operating
+system~\cite{barrelfish:sosp09}: it consists of a small kernel running on each core (one kernel per core), and while rest of the
+OS is structured as a distributed system of single-core processes atop
+these kernels. Kernels share no memory, even on a machine with
+cache-coherent shared RAM, and the rest of the OS does not use shared
+memory except for transferring messages and data between cores, and
+booting other cores. Applications can use multiple cores and share
+address spaces (and therefore cache-coherent shared memory) between
+cores, but this facility is provided by user-space runtime libraries.
-\section{High level Architecture Overview}\label{sec:overview}
Figure~\ref{fig:os-arch} shows an overview of the components of the OS. Each
core runs a kernel which is called a "CPU driver". The CPU driver maintains
capabilities, executes syscalls on capabilities, schedules dispatchers, and
processes interrupts, pagefaults, traps, and exceptions.
-The kernel schedules and runs "Dispatchers". Dispatchers are an implementation
-of scheduler activations, thus each dispatcher can run and schedule its own
-threads. Multiple dispatchers can be combined into a domain. Typically this is
-used to combine related dispatchers running on different cores. Often
-dispatchers in a domain share (all or part of) their vspace. Unless dispatchers
-in a domain run on the same core (which is possible, but rare) they cannot share
-a cspace (since cspaces are core specific).
+The kernel schedules and runs "Dispatchers". Dispatchers are an
+implementation of a form of scheduler
+activations~\cite{Anderson:1991:SAE:121132.121151} (the term is
+borrowed from K42~\cite{k42:scheduling}), thus each dispatcher can run
+and schedule its own threads. Multiple dispatchers can be combined
+into a domain. Typically this is used to combine related dispatchers
+running on different cores. Often dispatchers in a domain share (all
+or part of) their vspace. Unless dispatchers in a domain run on the
+same core (which is possible, but rare) they cannot share a cspace
+(since cspaces are core specific).
Typically we refer to user level processes (or services or servers) as "user
-domains". Often these consist of single dispatchers running on a single core.
+domains". Often these consist of a single dispatcher running on a single core.
\begin{figure}[hbt]
\begin{center}
\caption{High level overview of the Barrelfish OS architecture}\label{fig:os-arch}
\end{figure}
+\section{CPU drivers}
+
+The kernel which runs on a given core in a Barrelfish machine is
+called a \emph{CPU driver}. Each core runs a separate instance of the
+CPU driver, and there is no reason why these drivers have to be the
+same code.
+
+In a heterogeneous Barrelfish system, CPU drivers will be different
+for each architecture. However, even on a homogeneous machine, CPU
+drivers for different cores can be specialized for some purposes (for
+example, some might suppose virtualization extensions, while others
+might be optimized for running a single application).
+
+CPU drivers are single-threaded and non-preemptible.
+They run with interrupts disabled on their core, and share no state
+with other cores. CPU drivers can be thought of as serially executing
+exception handlers for events such as interrupts, faults, and system
+calls from user-space tasks. Each such handler executes in bounded time
+and runs to completion. If there are no such handlers to execute, the
+CPU driver executes a user-space task.
+
+The functions of a CPU driver are to provide:
+\begin{itemize}
+\item Scheduling of different user-space \textit{dispatchers} on the
+ local core.
+\item Core-local communication of short messages between dispatchers
+ using a variant of Lightweight RPC~\cite{lrpc:tocs90} or L4
+ RPC~\cite{Liedtke:1993:IIK:168619.168633}.
+\item Secure access to the core hardware, MMU, APIC, etc.
+\item Local access control to kernel objects and physical memory by
+ means of capabilities
+\end{itemize}
+
+CPU drivers do not provide kernel threads, for two reasons. Firstly,
+the abstraction of the processor provided to user space programs is a
+dispatcher, rather than a thread. Secondly, since the kernel is
+single-threaded and non-preemptible, it uses only a single, statically
+allocated stack for all operations. After executing a single exception
+handler, the contents of this stack are discarded and reset.
+
+CPU drivers schedule dispatchers. The scheduling algorithm employed
+by a given CPU driver binary is configurable at compile time, and two
+are currently implemented:
+\begin{itemize}
+\item A simple round-robin scheduler. This is primarily used for
+ debugging purposes, since its behavior is easy to understand.
+\item A rate-based scheduler implementing a version of the RBED
+ algorithm~\cite{Brandt:2003:DIS:956418.956606}. This is the
+ preferred per-core scheduler for Barrelfish, and provides efficient
+ scheduling of tasks with a variety of hard and soft realtime jobs
+ with good support for best-effort processes as well.
+\end{itemize}
+
+\section{Dispatchers}
+
+The dispatcher is the unit of kernel scheduling, and on a single core
+roughly corresponds to the concept of process in Unix.
+
+A dispatcher can be thought of as the local component of an
+application (often called a \textit{domain} in Barrelfish) on a
+particular core. An application which spans multiple cores (for
+example, an OpenMP program) has a dispatcher on each core that it
+might potentially execute on.
-\section{Dispatcher}
-The dispatcher is unit of kernel scheduling, and it is responsible for managing
-its own threads.
+Operating system tasks in Barrelfish are always single-core by design,
+and therefore have only one dispatcher. Applications, however,
+frequently have more, one on each core.
+
+Dispatchers do not migrate between cores.
+
+When a CPU driver decides to run a dispatcher as a result of a
+scheduling decision, it
+\emph{upcalls}~\cite{Clark:1985:SSU:323647.323645} into the dispatcher
+as an exit from kernel mode in the manner described below. The
+user-level code associated with the dispatcher then executes
+user-space thread scheduling, as well as handling other events (such
+as a page fault signal from the kernel or the arrival of an
+inter-domain message).
\begin{figure}[hbt]
\begin{center}
it restores the registers stored in the disabled save area. This causes the
dispatcher to resume execution from where it was preempted.
+\section{Runtime libraries}
+
+The basic runtime of any Barrelfish program is two libraries: a
+standard C library (currently a version of
+\texttt{newlib}~\cite{newlib}), and \texttt{libbarrelfish}. In
+practice the two libraries are inter-dependent, though there is an
+ongoing effort to minimize truly cyclic dependencies. The principal
+cycles involve \texttt{malloc()} and communication with the memory
+server.
+
+The barrelfish library implements the following functionality:
+\begin{itemize}
+\item User-level thread scheduling, based on the upcall model of the
+ dispatcher.
+\item Physical memory management by communication with the memory
+ server.
+\item Capability management (maintaining the domain's cspace),
+ including allocating new CNodes where necessary.
+\item Construction of virtual address spaces using capability
+ invocations.
+\item User-level page fault handling.
+\item Communications using message channels, including blocking and
+ nonblocking calls on channels, and the implementation of
+ \texttt{waitset}s (analogous to Unix \texttt{select()} and
+ \texttt{epoll()}).
+\end{itemize}
+
\section{Capabilities}
-The Barrelfish capability model is similar to the seL4 model. Kernel objects are
-referenced by partitioned capabilities. The actual capability can only be
-directly accessed and manipulated by the kernel, while user level only has
-access to capability references (\texttt{struct capref}), which are addresses in
-a cspace. User level can only manipulate capabilities using kernel system calls
-(to which it passes capability references). In processing a system call the
+Barrelfish uses a single model of
+\emph{capabilities}~\cite{hank:capabilities} to control access to all
+physical memory, kernel objects, communication end-points, and other
+miscellaneous access rights.
+
+The Barrelfish capability model is similar to the seL4
+model~\cite{sel4:iies08}, with a considerably larger type system and
+extensions for distributed capability management between cores.
+
+Kernel objects are referenced by partitioned capabilities. The actual
+capability can only be directly accessed and manipulated by the
+kernel, while user level only has access to capability references
+(\texttt{struct capref}), which are addresses in a cspace. User level
+can only manipulate capabilities using kernel system calls (to which
+it passes capability references). In processing a system call the
kernel looks up the capability reference in the appropriate cspace to find the
actual capability; this process is similar to the translation of a virtual
address to a physical address (Figure~\ref{fig:cap_translation}). A capability
used in system calls (see \texttt{include/barrelfish/caddr.h}). Valid bits are
used when the user wants to access cnode type capabilities (else, the
translation process would continue by looking at entries in the cnode).
-
\begin{figure}
\centering
A Dispatcher only has access to the capability references in its cspace. As in
seL4, capabilities are typed, and there is a strictly defined derivation
-hierarchy (e.g. Figure~\ref{fig:cap_hierarchy}).
+hierarchy (e.g. Figure~\ref{fig:cap_hierarchy}). The type system for
+capabilities is defined using a domain-specific language called
+Hamlet.
-\section{Virtual Memory}
-Virtual memory in Barrelfish is similar to seL4. Frames are mapped into various
-(platform specific) page table data structures to create an address
-space. Shared memory is achieved by sharing Frames mapped into respective
-vspaces.
-
-\textbf{XXX: some more details needed}
-
-\section{Monitor}
-A monitor user domain runs on every core. It is special in that it is
-responsible for managing the kernel data structures on that core, as well as
-coordinating intra and inter core communication.
+\section{Physical Memory}
-There is an communication channel between every pair of monitors running on a
-system. This is set up automatically at startup time.
+All regions of physical address space are referred to by means of
+capabilities. At present, a memory capability refers to a
+naturally-aligned, power-of-two-sized area of at least a physical page
+in size, though this restriction is likely to go away in the future.
-\textbf{XXX: some more details needed}
+A memory capability can be split into smaller capabilities, and this
+basic mechanism is used for low-level physical memory allocation.
-\section{Memory Server}
-The memory server is responsible for serving RAM capabilities. It receives all
-RAM capabilities at startup and distributes them to other dispatchers as
-requested.
+Memory capabilities are \emph{typed}, and each region type supports a
+limited set of operations. Initially, memory consists of untyped RAM
+and \emph{device frames}, which are used to refer to memory-mapped I/O
+regions.
-\textbf{XXX: some more details needed}
-
-\section{Boot sequence}
-Grub reads menu.lst and starts domains as specified in the file. It first
-starts the "kernel" entry, which is typically the cpu driver, on core 0. The
-kernel starts init, which starts mem\_server and monitor. Monitor then starts all
-entries marked with "boot", which is typically:
+RAM capabilities can be retyped into other types; the precise number
+is defined in the Hamlet language in a file currently located in
+\texttt{/capabilities/caps.hl}. Some of the more common types of
+memory capability are:
\begin{itemize}
-\item chips (the name server)
-\item skb (system knowledge base)
-\item pci (hardware eval, as well as core enumeration, pci access, etc.)
-\item boot\_manager (starts up all other domains)
+\item \emph{Frame} capabilities are RAM capabilities which can be
+ mapped into a user's virtual address space.
+\item \emph{CNode} capabilities are used to hold the bit
+ representation of other capabilities, and construct a domain's
+ cspace. CNodes can never be mapped as writeable virtual memory,
+ since this would remove the security of the capability system by
+ allowing an application to forge a capability.
+\item \emph{Dispatcher} capabilities hold dispatcher control blocks.
+\item \emph{Page table} capabilities refer to memory which holds page
+ table pages. There is a different capability type for each level of
+ each type of MMU architecture.
\end{itemize}
-When pci figures out what cores there are, then boot manager(?) starts up
-kernels and monitors on all cores.
-
-Boot manager starts up any other user domains. Extra parameters in menu.lst for
-grub specify which cores the domains start on. The menu.lst info is passed to
-the initial kernel by grub. The kernel passes this on to init, which passes it
-on to other domains as required.
-
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\chapter{Source Code}\label{chap:benchmarks}
-
-\section{Directory Structure Overview}
-Files related to the material covered in this document
-
-\begin{verbatim}
-
-barrelfish:
-kernel/dispatch.c
- include/dispatch.h
-
-include/
- barrelfish/
- dispatch.h
- dispatcher.h
- lmp_chan.h
- lmp_endpoints.h
- ump_chan.h
- ump_endpoint.h
- ump_impl.h
- waitset.h
-
-lib/
- barrelfish/
- lmp_chan.c
- lmp_endpoints.c
- ump_chan.c
- ump_endpoint.c
- arch/x86_64/
- dispatch.c
-
-if/
- myapp.if
-
-usr/
- myapp/
- myapp.c
- Hakefile
-build:
- arch/usr/myapp/_for_app_myapp/
- myappif_flounder_bindings.c
-
-arch/include/if
- myappif_defs.h
- myappif_lmp_defs.h
- myappif_ump_defs.h
-
-\end{verbatim}
-
-
-\section{Writing A Sample Barrelfish Application}
-
-Here we show how to write a simple program on Barrelfish. \textbf{XXX:} no
-error handling yet. Refer to \texttt{usr/tests/idctest} for code with proper
-error handling.
-
-\subsection{A Simple Hello World Program}
-
-The source for user domains is stored under \begin{verbatim}/usr\end{verbatim}.
-
-A simple hello world domain consists of a source file, and a Hakefile. e.g.,
-\begin{verbatim}
-usr/myapp
- myapp.c
- Hakefile
-\end{verbatim}
-
-For a simple hello world app, the source is trivial: a simple printf in main
-will suffice (note that for output printf either uses a debug syscall to print
-to the serial output, or a proper serial server if one is available).
-
-\begin{verbatim}
-#include <stdio.h>
-int main(void) {
- printf("Hello World\n");
- return 0;
-}
-\end{verbatim}
-
-To build the domain, call hake.sh in the build directory. This will create a
-Config.hs, Makefile, and symbolic\_targets.mk. You can add myapp in the
-symbolic\_tagets, then run make to build everything. You can also explicitly ask
-make to build the domain. e.g.:
-\begin{verbatim}
-make x86_64/sbin/myapp
-\end{verbatim}
-
-After all is built, the menu.lst needs to be modified to add the domain and have
-it started. Run everything in a simulator using:
-
-\begin{verbatim}
-make sim
-\end{verbatim}
-
-\subsection{A Simple Hello World Program Using IDC}
+\section{Virtual Memory}
-Adding IDC (inter-dispatcher communication) is a bit more complicated. It
-requires defining an interface in Flounder IDL, updating the interfaces
-Hakefile, updating the domain's (myapp) Hakefile, and then adding initialization
-code as well as appropriate callbacks to the source file.
+Barrelfish applications are
+\emph{self-paging}~\cite{Hand:1999:SNO:296806.296812}: they securely
+construct and maintain their own page tables, and page faults are
+reflected back to the application by means of an upcall.
+
+An application constructs its own virtual address space (generally
+abbreviated to \emph{vspace}) using the capability system. It
+acquires RAM from a memory allocator in the form of RAM capabilities,
+and then retypes these to frames and page tables.
+
+To take a 32-bit x86 machine without Physical Address Extensions (PAE)
+as a simple example, to map a frame into its vspace an application
+invokes the capability refering to a Page Table page using a system
+call. The arguments to this capability invocation are (1) a
+capability for a 4kB frame, (2) a slot number (from 0 to 1023), and
+(3) a set of mapping flags. This will cause the kernel to insert a
+Page Table Entry (PTE) with the appropriate flags into the
+corresponding slot in the Page Table.
+
+Note that, while the user determines exactly what mapping is entered
+in the page table, the process is secure: the user cannot map a frame
+that they do not already hold a capability for, that capability must
+refer to a frame (and not some other type of memory, such as a
+dispatcher control block or CNode), and they must also hold a
+capability for the page table itself.
+
+Similarly, in this example, for the Page Table page to be useful it
+must itself be referenced from a Page Directory. To ensure this, the
+user program must perform a similar invocation on the Page Directory
+capability, passing the slot number, flags, and the capability to the
+Page Table page. As before, the capability type system allows neither
+the construction of an invalid page table for any architecture, nor
+the mapping of any page that the user has no authorization for.
+
+This model also has the additional feature that any core can construct
+a valid page table for any other core, even if the cores have
+different MMU architectures. An x86\_64 core can construct a valid
+and secure ARMv7 virtual address space, and pass a capability for the
+L1 Page Table of this vspace to an ARMv7 core for installation.
+
+Furthermore, since the application is responsible for constructing
+page tables and allocating physical memory itself, it can handle page
+faults by changing its own mappings, potentially paging data to and
+from stable storage in the process.
+
+Naturally, this pushes significant complexity into the application.
+Paging functionaly is generally hidden in the runtime
+\texttt{libbarrelfish} library, though is available for direct
+manipulation for non-common use cases.
+
+\section{Inter-domain communication}
+
+Barrelfish provides a uniform interface for passing messages between
+domains, which handles message formating and marshalling, name
+lookup, and end-point binding.
+
+This interface is \emph{channel-based}: for two domains to
+communicate, they must first establish a channel (which may involve
+agreeing on some shared state). Messages are thereafter sent on this
+channel. The process of establishing channel state is known as
+\emph{binding}.
+
+A channel is typed, and the type determines the kinds of messages that
+can be sent on it. As with many RPC systems, channel types are
+defined using an \emph{interface definition language}, which in
+Barrelfish is known as Flounder. Flounder interface types are
+generally found in the \texttt{/if} directory in the Barrelfish tree.
+Messages can pass both simple data types and, optionally,
+capabilities.
+
+To establish a communications channel, a domain typically has to
+acquire an \emph{interface reference} from somewhere, which identifies
+the remote endpoint it will try to connect to. In the common case,
+this is obtained from the System Knowledge Base, acting as a name
+server. After having bound an interface reference, the result is a
+local stub object at either end of the channel which can be called to
+send a message, and also implements dispatch of received messages.
+
+In turn, an interface reference is created by a server creating a
+service (analogous to a listening socket) and registering this with a
+name service.
+
+There are a variety of underlying implementations of message passing
+in Barrelfish, known as \emph{Message Transports}. Each one is highly
+optimized for a particular hardware scenario. In general, the binding
+process automatically selects the appropriate transport for a channel,
+though this process can also be overwritten.
+
+A message transport itself consists of several components:
+\begin{enumerate}
+\item An \emph{interconnect driver} or ICD sends small, fixed-size
+ units of data between domains. This is highly optimized: for
+ same-core message passing, the LMP (``local message passing'') ICD
+ is based on L4's RPC path, while between cache-coherent cores the
+ UMP (``user-level message passing'') ICD is similar to
+ URPC~\cite{urpc:tocs91} or
+ FastForward~\cite{Giacomoni:2008:FEP:1345206.1345215} and transfers
+ single cache lines without involving the kernel. Other ICDs exist
+ for specialized messaging hardware, and/or network communication.
+
+ ICDs do \emph{not} export a standard interface; each one is
+ different.
+\item \emph{Stubs} generated by Flounder from an interface
+ specification provide the uniform interface to clients and servers,
+ and perform the abstraction of ICDs, as well as handling message
+ fragmentation and reassembly in the cases where an application
+ message is larger than the unit transferred by the ICD. Since
+ different ICDs do not export the same interface, there is a
+ different Flounder code generator for each ICD type, enabling
+ cross-layer optimizations not possible otherwise.
+\item Finally, some stubs can also invoke separate \emph{Notification
+ Drivers}, which provide a synchronous signal to the receiving domain
+ in cases where the transfer of the message payload itself does not.
+ For example, UMP messages have to be polled by the reciever by
+ default, but on some architectures an additional notification driver
+ can be invoked by the stub to cause an inter-processor interrupt
+ (IPI) after some time if the other end of the channel appears to be
+ asleep.
+\end{enumerate}
+
+In addition, stubs can also handle other areas of complexity resulting
+from the optimized nature of interconnect drivers. For example,
+capabilities cannot be sent directly over a UMP channel, since their
+bit representations cannot be safely made available to user-space
+applications. Instead, the stubs for UMP transport send capabilities
+over a separate, secure channel via the Monitors on the sending and
+receiving cores, which are themselves contacted using LMP (which can
+transfer capabilities) by the sending and receiving domains.
+
+In this way, transfer of pure data over message transports can be
+extremely fast, at the cost of extra delay when transferring
+capabilities.
+
+\section{System Knowledge Base}
+
+Barrelfish includes a system service called the System Knowledge Base,
+which is used to store, query, unify, and compute on a variety of data
+about the current running state of the system. The SKB is widely used
+in Barrelfish; examples are:
-An example of hello world extended with an IDC. This will run on two cores (it
-can also be run on the same core), with the client dispatcher sending a message
-to the server who will print out "hello message received!" when it receives the
-message.
+\begin{itemize}
+\item The Octopus lock manager and pub/sub system is built as an
+ extension to the SKB (with a somewhat different interface
+ language).
+\item Devices are discovered and entered into the SKB, and the SKB
+ contains rules to determine the appropriate driver for each device.
+ This forms device management (see below).
+\item The PCI driver uses constraint solving in the SKB to correctly
+ configure PCI devices and bridges. The SKB contains a list of known
+ PCI quirks, bugs, and special cases that have to taken in to account
+ when allocating BAR values for address ranges. Interrupt routing is
+ also performed in the SKB.
+\item The SKB functions as a general-purpose name server / interface
+ trader for the rest of the OS.
+\item The results of online hardware profiling are entered into the
+ SKB at boottime, and can be used to construct optimal communication
+ patterns in the system.
+\end{itemize}
+The SKB implemention for Intel architectures is currently based on a
+port of the eCLiPse constraint logic programming
+system~\cite{eclipse}. This consists of a Prolog interpreter with
+constraint solving extensions, and has been extended with a fast
+key-value store which can also retain capabilities. Aside from the
+Octopus interface, it is possible to communicate with the SKB by
+sending Prolog expressions as messages.
+
+\section{Device drivers}
+
+Device drivers in Barrelfish are implemented as individual dispatchers
+or domains. When they start up, they are supplied with arguments
+which include various option variables, together with a set of
+capabilities which authorize the driver to access the hardware device.
+
+The capabilities a driver needs are generally:
+\begin{enumerate}
+\item \emph{Device frame} capabilities for regions of the physical
+ address space containing hardware registers; these regions are then
+ memory-mapped by the driver domain as part of its initialization
+ sequence.
+\item \emph{Interrupt} capabilities, which can be used to direct the
+ local CPU driver to deliver particular interrupt vectors to the
+ driver domain.
+\item On x86 machines, \emph{I/O capabilities} allow access to regions
+ of the I/O port space for the driver.
+\item For message-based device interfaces, such as USB, there may be
+ \emph{communication end-point capabilities} which allow messages to
+ be sent between the driver domain and the driver for the host
+ interface adaptor itself.
+\end{enumerate}
+
+Hardware interrupts are received by a core, demultiplexed if
+necessary, and then turned into local inter-domain messages which are
+dispatched to the appropriate driver domain. Each first-level
+interrupt handler disables the interrupt as it is raised. As in L4,
+interrupts are renabled by the driver domain sending a reply message
+back to the CPU driver.
+
+Driver domains themselves then export their functionality to clients
+(such as file systems, or network stacks) via further message-passing
+interfaces.
+
+\section{Device management}
+
+Device management in Barrelfish is performed by a combination of
+components:
+\begin{itemize}
+\item The System Knowledge Base is used to store information about all
+ discovered hardware in the system. It also holds the information
+ about which driver binaries should be used with which devices, and
+ contains rules to determine on which core each device's driver domain
+ should run.
+\item Octopus, the Barrelfish locking and pub/sub system built on top
+ of the SKB, is used to propagate events corresponding to device
+ discovery, hotplug, and driver startup and shutdown.
+\item Kaluga is the Barrelfish device manager, and is responsible to
+ starting up driver domains based on information in the SKB and in
+ response to events disseminated by Octopus. It handles passing the
+ appropriate authorizations (in the form of device, I/O, and
+ interrupt capabilities) to new driver domains.
+\item The driver domains themselves populate the SKB with further
+ information about devices. For example, the PCI driver stores
+ information about enumerated buses and functions in the SKB, and USB
+ Host Adaptor drivers so something similar for enumerated devices.
+\end{itemize}
-The interface consists of a single message that carries no data payload.
+In newer versions of Barrelfish, the same framework is also used for
+booting (and suspending or shutting down) cores. In addition to an
+appropriate CPU driver, each core other than the bootstrap core has a
+\emph{Boot Driver}, which is responsible for booting the new core and
+encapsules the protocol (usually platform-specific) for core startup.
-The server exports the interface, providing callback functions that are invoked
-when the export completes, and when a client connects to the interface. After
-the binding is exported it is registered with the name service so that the
-client can find it. When a connection is made, and a binding created, the actual
-message callback handler is registered in the binding so that whenever a message
-is received on the binding it is invoked.
+\section{Monitor}
-The client uses the name service to look up the iref of the server, then uses
-this iref to bind (connect) to the server. It provides a callback that is
-invoked when the bind completes. In this example the callback sends a message
-over the newly formed channel.
+Each Barrelfish core runs a special process called the \emph{Monitor},
+which is responsible for distributed coordination between cores. All
+monitors maintain a network of communication channels among
+themselves; any monitor can talk to (and identify) any other monitor.
+All dispatchers on a core have a local message-passing channel to
+their monitor.
-After setting up connections, both client and server sit in a loop dispatching
-incoming events (causing the appropriate callbacks to be invoked).
+Monitors are trusted: they can fabricate capabilities. This is because
+they are responsible for transferring capabilities between cores, and
+so must be able to serialize a capability into bits and reconstruct it
+at the other end. Monitors therefore posess a special capability (the
+\emph{Kernel capability}) which allows them to manipulate their local
+core's capability database.
+The monitor performs many low-level OS functions which require
+inter-core communication (since CPU drivers by design do not
+communicate with each other, nor share any memory). For example:
+\begin{itemize}
+\item Monitors route inter-core bind requests for communication
+ channels between domains which have not previously communicated
+ directly.
+\item They send capabilities along side channels, since regular
+ domains on different cores cannot send capabilities directly
+ themselves without involving the kernel.
+\item Monitors help with domain startup by supplying dispatchers with
+ useful initial capabilities (such as a communication channel back
+ to the monitor, and ones to the memory allocator and SKB).
+\item They perform distributed capability revocation, using a form of
+ two-phase commit protocol among themselves over the capability
+ database.
+\end{itemize}
-\textbf{myappif.if}
-%\lstinputlisting{myapp/if/myappif.if}
-\verbatiminput{myapp/if/myappif.if}
+The monitor contains a distributed implementation of the functionality
+found in the lower-levels of a monolithic kernel. The choice to make
+it into a user-space process rather than amalgamating it with the CPU
+driver was an engineering decision: it results in lower performance
+(many operations which would be a single syscall on Unix require two
+full context switches to and from the monitor on Barrelfish).
+However, running the monitor as a user-space process means it can be
+time-sliced along with other processes, can block when waiting for I/O
+(the CPU driver has no blocking operations), can be implemented using
+threads, and provides a useful degree of fault isolation (it is quite
+hard to crash the CPU driver in Barrelfish, since it performs no
+blocking operations and requires no dynamic memory allocation).
+
+\section{Memory Servers}
+
+Memory servers are responsible for serving RAM capabilities to
+domains. A memory server is started with an initial (small) set of
+capabilities which list the regions of memory the server is
+responsible, and they respond to requests from other domains for RAM
+capabilities of different sizes.
+
+At system startup, there is an initial Memory Server running on the
+bootstrap core which is created with a capability to the entire range
+of RAM addressable from that core. However, the use of capabilities
+allows this to delegate management of subregions of this space to
+other servers. This is desirable for two reasons:
+\begin{itemize}
+\item It allows core to have their own memory allocators, greatly
+ improving parallelism and scalability of the system. As in other
+ systems, Barrelfish's per-core allocators can also steal memory from
+ other cores if they become short.
+\item It permits different allocators for different types of memory,
+ such as different NUMA nodes, or low-memory accessible to legacy DMA
+ devices.
+\end{itemize}
-\textbf{myapp.c}
-%\lstinputlisting{myapp/usr/myapp/myapp.c}
-\verbatiminput{myapp/usr/myapp/myapp.c}
+Each new dispatcher in Barrelfish is started with a bootstrapped
+message channel to its own local memory server.
-\textbf{Hakefile}
-%\lstinputlisting{myapp/usr/myapp/Hakefile}
-\verbatiminput{myapp/usr/myapp/Hakefile}
+\section{Filing system}
+Barrelfish at present has no native file system. However, runtime
+libraries do provide a Virtual File System (VFS) interface, and a
+number of backends to this exist (and are used in the system),
+including:
+\begin{itemize}
+\item An NFSv3 client.
+\item A simple RAM-based file system.
+\item Access to the OS multiboot image via the VFS interface.
+\item A FAT file system which can be used with the AHCI driver and ATA
+ library.
+\end{itemize}
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\chapter{IDC: Inter Dispatcher Communication}
-
-
-IDC is performed over different underlying channels, depending on the
-communication mechanisms available. For example, for IDC between dispatchers on
-the same core, LMP is used, while for IDC between cores, UMP (or another
-mechanism depending on the architecture and what is available) is used. The
-mechanism used is determined at binding time. Code for all possible bindings is
-generated from the IDL descriptions.
-
-Performing IDC involves an interface specific binding struct, a waitset, and
-channels.
-
-The binding struct is channel-type specific. It includes an appropriate channel
-struct, and a channel-type independent, but interface specific, binding struct.
-
-For example, for LMP, the channel specific binding struct is: \\
-\texttt{struct myappif\_lmp\_binding (myappif\_lmp\_defs.h)}
-
-The generic binding struct is: \texttt{struct myappif\_binding (myappif\_defs.h)}
-
-The LMP specific channel struct is: \texttt{struct lmp\_chan in (lmp\_defs.h)}
-
-The generic binding struct contains pointers to the sending stubs (stored in a
-vtable filled in by the binder), the message handlers (provided by the client
-and also stored in a vtable), and the waitset associated with the binding.
-
-The channel struct contains all the channel-type specific data necessary to
-perform the actual communication.
-
-The waitset tracks the state of channels and threads waiting for messages
-(actually events, since it also tracks things like connection events, etc.) on
-those channels. It contains several queues of channel structs: the idle queue,
-which stores all channels that don't have any events ready for delivery, the
-pending queue, which stores the channels that have events available for
-delivery, and the polled queue, which stores channels that need to be
-polled. The waitset also keeps a queue of threads that are blocked waiting for
-something to happen on one of the channels.
-
-The way that channels in a waitset work is that a channel is 'triggered' when an
-event occurs (or is discovered during polling) and the channel is moved to the
-pending queue. Once a channel is in the pending queue, further events do not
-trigger it until it has been processed and put back in the idle or polled
-queues. The waitset's thread queue tracks threads that are blocked on the
-waitset. Every time an event triggers a channel and causes it to be moved to the
-pending queue, one thread from the waiting threads queue is unblocked, allowing
-it to process a channel from the pending queue. There should never be threads in
-the waiting queue if there is more than one channel in the pending queue.
-
-see: \texttt{struct waitset (waitset.h)}
-
-The \texttt{event\_dispatch()} function picks up the next pending channel and
-returns its handler. If there are no pending channels it polls any channels on
-the polled queue, triggering (and thus moving to the pending queue) any that has
-an event available. If no channels have events, and there is nothing to poll
-then it blocks.
-
-Sending messages is channel-type specific.
-
-\section{IDC\---LMP: Local Message Passing}
-IDC between dispatchers on the same core uses LMP (local message passing). LMP
-uses endpoint capabilities for communication. In this case the channel struct
-contains a reference to a remote endpoint cap (for the sender) and a local
-endpoint cap (for the receiver). It also contains a reference to an endpoint
-structure. This is a struct contained in the receiver's dispatcher and refers to
-a buffer that is used to store incoming messages. The dispatcher can have
-multiple such endpoint buffers.
+\section{Network stack}
-\begin{figure}
- \begin{center}
- \includegraphics[width=0.5\columnwidth]{LMP.pdf}
- \end{center}
- \caption{Local Message Passing}
- \label{fig:lmp}
+\begin{figure}[hbt]
+ \begin{center}
+ \includegraphics[width=0.7\columnwidth]{net-arch.pdf}
+ \end{center}
+ \caption{High level overview of the Barrelfish network stack}\label{fig:net-arch}
\end{figure}
+At time of writing, the Barrelfish network stack is evolving, but
+Figure~\ref{fig:net-arch} shows the high-level structure. Barrelfish
+aims at removing as much OS code from the datapath as possible, and
+uses a design inspired by Nemesis~\cite{Black:1997:PIV:648046.745222}
+and Exokernel~\cite{Ganger:2002:FFA:505452.505455}.
+
+Each physical network interface has a driver which is started by the
+Kaluga device manager service. This driver is in turn capable of
+initiating a separate \emph{queue manager} for each hardware queue
+supported by the network hardware, and configuring the NIC hardware to
+demultiplex incoming packets to the appropriate queue.
+
+Applications run their own network stack on a per-flow basis, either
+reading and writing packets directly to and from hardware queues (if
+possible), or with the queue manager performing an extra level of
+multiplexing on each queue. The queue manager receives events from
+the NIC hardware signalling transmission and reception of packets.
+
+An additional domain, the network daemon (\texttt{netd}), is
+responsible for non-application network traffic (such as ARP requests
+and responses, and ICMP packets). This daemon also handles allocation
+of ports from talking to a given network interface.
-The sender's remote endpoint cap is derived from the receiver's dispatcher cap,
-and contains a pointer back to the DCB and an offset into the associated
-endpoint buffer.
-
-When a message is sent, the sender invokes the remote endpoint cap with the
-message to send. This causes the kernel to copy the message into the associated
-endpoint buffer and then make the receiver dispatcher runnable (which will cause
-it's \texttt{run()} upcall to be invoked when it is scheduled). The run function
-then finds the endpoint with a message in it and invokes the trigger on the
-appropriate waitset. The channel's event handler is responsible for getting the
-rest of the message out of the buffer and invoking appropriate user-defined
-handlers.
-
-Sender: \texttt{lmp\_deliver\_payload (dispatch.c)}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{The Barrelfish source tree}\label{chap:sourcetree}
-Receiver: \texttt{disp\_run (dispatch.c)}
- \texttt{lmp\_endpoints\_poll\_disabled (lmp\_endpoints.c)}
+\newenvironment{dirlist}{%
+\let\olditem\item%
+\renewcommand\item[2][]{\olditem \texttt{##1}:\\[0.3\baselineskip]##2}%
+\begin{description}}{\end{description}%
+}
-Event handler: \texttt{myappif\_lmp\_rx\_handler (myappif\_flounder\_bindings.c)}
+The Barrelfish source tree is organized as follows:
+\begin{dirlist}
+\item[capabilities/] Definitions of the capability type system,
+ written in the Hamlet language.
+\item[devices/] Definitions of hardware devices, written in the
+ Mackerel language.
+\item[doc/] \LaTeX Source code for the Barrelfish Technical Notes, including
+ this one.
+\item[errors/] Definitions of Barrelfish system error codes, written
+ in the Fugu language.
+\item[hake/] Source code for the Hake build tool.
+\item[if/] Definitions of Barrelfish message-passing interface types,
+ written in the Flounder language.
+\item[include/] Barrelfish general header files.
+\item[kernel/] Source code for Barrelfish CPU drivers.
+\item[kernel/include/] Header files internal to Barrelfish CPU drivers.
+\item[lib/] Source code for libraries.
+\item[tools/] Source code for a variety of tools used during the build
+ process.
+\item[trace\_definitions/] Constant definitions for use by the
+ Barrelfish tracing infrastructure, written in the Pleco language.
+\item[usr/] Source code for Barrelfish binaries.
+\item[usr/drivers/] Source code for Barrelfish device driver binaries.
+\end{dirlist}
-\textbf{Binding:} The process of binding for LMP involves the sender creating
-the endpoint capability and appropriate buffers, then invoking
-\texttt{lmp\_bind\_request} on the monitor. The monitor sends the request to the
-receiver, where it sets up its own endpoint cap and buffer and binding struct,
-and returns the cap through the monitor to the sender.
-\textbf{Passing capabilities - LMP:} When a capability is sent in a message, then
-the kernel must additionally copy the cap to the receiver's cspace (a slot for
-this is setup in the endpoint). The receive handler must ensure that it copies
-the cap out of this cspace slot in order to free it for future transfers.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{The Barrelfish build tree}\label{chap:buildtree}
+
+Successfully building Barrelfish results in a series of files and
+directories in the build directory. Regardless of the architectures
+requested, the following are likely to be present:
+
+\begin{dirlist}
+\item[docs/] PDF files corresponding to the Barrelfish technical
+ notes, including this one. Note that these files are probably not
+ built by default, you make have to invoke \texttt{make docs}.
+\item[hake/] Build files and binary for \texttt{hake}, the Barrelfish
+ build tool. You should not need to look in here unless you need to
+ edit \texttt{Config.hs}, the system-wide configuration file.
+\item[Hakefiles.hs] A very large Haskell source file containing all
+ the Hakefiles in the system, concatenated together along with some
+ dynamic information on the files in the build tree. You should not
+ need to refer to this file unless you encounter a bug in Hake.
+\item[Makefile] A very large Makefile, which contains explicit rules
+ to build every file (including intermediate results) in the
+ Barrelfish build tree. It is sometimes useful to search through
+ this file if the build is failing in some unexpected way. The only
+ files this Makefile includes are \texttt{symbolic\_targets.mk} and
+ generated C dependency files; all other make information is in this
+ one file.
+\item[menu.lst] An initial file for booting Barrelfish via grub.
+\item[skb\_ramfs.cpio.gz] A RAM filing system image in the form of a
+ CPIO archive containing support Prolog files for the Barrelfish
+ System Knowledge Base (SKB).
+\item[sshd\_ramfs.cpio.gz] A RAM filing system image in the form of a
+ CPIO archive containing support files for the Barrelfish port of the
+ OpenSSH server.
+\item[symbolic\_targets.mk] A file containing symbolic \texttt{make}
+ targets, since all rules in the main, generated Makefile are
+ explicit. This file contains the definitions necessary to build
+ complete platform images of Barrelfish for various hardware
+ architectures.
+\item[tools/bin/] Directory containing binaries (for the host system)
+ of various tools needed to building Barrelfish, such as
+ \texttt{flounder}, \texttt{fugu}, \texttt{hamlet}, and
+ \texttt{mackerel}.
+\item[tools/tools/] Intermediate object files for building the tools
+ binaries
+\item[tools/tmp/] Miscellaneous intermediate files, mostly from
+ building Technical Note PDF files.
+\end{dirlist}
+
+In addition, there will be a directory for each architecture for which
+this build was configured, such as \texttt{x86\_64}, \texttt{86\_32},
+\texttt{ARMv7}, etc. This will contain the following items of
+interest (taking \texttt{x86\_64} as a concrete example):
+
+\begin{dirlist}
+\item[x86\_64/capabilities/] C code generated by Hamlet to encode the
+ capability type system.
+\item[x86\_64/errors/] C code generated by Fugu to encode the core OS
+ error conditions.
+\item[x86\_64/include/] Assorted include files, both generated and
+ copied from the source tree.
+\item[x86\_64/include/dev] Device access function header files
+ generated by Mackerel.
+\item[x86\_64/include/if] Stub definition header files
+ generated by Flounder.
+\item[x86\_64/kernel/] Intermediate build files for all the CPU
+ drivers built for this architecture.
+\item[x86\_64/lib/] Static libraries for the system, together with
+ intermediate build files for the libraries.
+\item[x86\_64/sbin/] All the executable binaries built for this
+ architecture. The CPU driver is generally known as
+ \texttt{/sbin/cpu}, or a similar name more specific to a given
+ core.
+\item[x86\_64/tools/] Miscellaneous tools specific to a target
+ architecture. Typically ELF code, bootloaders, and code to
+ calculate assembly offsets from C definitions.
+\item[x86\_64/trace\_definitions/] Generated files giving constants
+ for the tracing system in C and JSON (for use by Aquarium2).
+\item[x86\_64/usr/] Intermediate build files for all the executable
+ binaries whose source is in \texttt{/usr}.
+\end{dirlist}
-\section{IDC\---UMP: Inter-core User-level Message Passing}
-IDC between dispatchers on different cores uses UMP (user-level message passing)
-(on x86).
-\begin{figure}
- \begin{center}
- \includegraphics[width=0.5\columnwidth]{UMP.pdf}
- \end{center}
- \caption{User-level Message Passing}
- \label{fig:ump}
-\end{figure}
-UMP uses shared memory and polling and inter-processor interrupts for
-communication. The shared memory is split into a send buffer and a receive
-buffer (Figure~\ref{fig:ump}), with each entry in the buffers being the size of
-a cache line. The sender writes into the send buffer, and the receiver reads
-from it. The receiver polls to determine whether new messages have been
-received.
-
-The binding struct for a UMP channel contains UMP specific channel structs
-(nested within various included structs) which contain a reference to the shared
-memory, as well as a counter specifying the current read or write position.
-
-In order to detect whether the write position has been reached when reading, the
-channel also contains an epoch flag. Every buffer entry has an epoch bit that is
-flipped every time a new entry is added. When reading a new entry the channels's
-epoch is compared to the epoch bit of the buffer slot to be read. If it is the
-same, then the entry is valid, if it is different then it is not valid. The
-channel's epoch flag is flipped every time the counter wraps around.
-
-The sender also has to know whether it is going to run up against the
-receivers's read position. Rather than flip epoch bits on a read (in order to
-avoid bouncing cache lines the buffer is kept write-only for the sender and
-read-only for the receiver) each message has a sequence id. When replying to the
-sender the receiver sends its latest read sequence id. The sender then knows how
-many messages are outstanding and together with knowledge of the buffer size,
-can avoid overwriting messages that haven't been read yet.
-
-\textbf{Binding:} The UMP binding process involves the source creating the
-channel buffers, then sending a cap to the buffer along with a bind request
-through LMP to the monitor. The monitor serialises the cap and sends it through
-to the destination monitor. The destination monitor recreates the cap, and sends
-it on to the receiver. This sets up its channel struct accordingly and finalises
-the binding.
-
-\textbf{Passing capabilities - UMP:} UMP messages containing capabilities must
-be sent in two phases. The non-cap message is sent as normal. The capability
-must be sent through the monitor as only the monitor is able to invoke a syscall
-to serialise and deserialise a capability. The sender sends the capability with
-a request to the monitor, the monitor serialises it and sends it to the
-destination monitor, where it is deserialised, and send through LMP to the
-destination.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\chapter{An overview of Barrelfish documentation}\label{chap:docs}
+
+Barrelfish a rapidly-changing research operating system, and
+consequently it is difficult and resource-intensive to maintain
+coherent, up-to-date documentation at the same time. However, efforts
+are made to document the system in a number of ways, summarized below.
+
+\section{Technical notes}
+
+The Barrelfish source contains a number of technical notes, which are
+rough-and-ready (and incomplete) documentation, tutorials, reference
+manuals, etc. for the system. The documents evolve over time, but are
+often the best source of documentation for the system.
+
+This document is Barrelfish Technical Note 0. The remaining technical
+notes are as follows:
+\begin{enumerate}
+\item \textbf{Glossary:} A list of Barrelfish-specific terms with
+ definitions.
+\item \textbf{Mackerel:} Reference manual for the Barrelfish language
+ for specifying hardware registers and in-memory datastructure
+ layouts.
+\item \textbf{Hake:} A comprehensive manual for the Barrelfish build
+ utility.
+\item \textbf{Virtual Memory in Barrelfish \textit{obsolete}:} A brief
+ description of virtual memory support in Barrelfish, now superceded
+ by Simon Gerber's dissertation ``Virtual Memory in a Multikernel''.
+\item \textbf{Barrelfish on the Intel Single-chip Cloud Computer:} A
+ description of the Barrelfish support for the SCC (Rock Creek)
+ processor, together with some performance evaluations and discussion
+ of the hardware.
+\item \textbf{Routing in Barrelfish:} An early design for routing
+ inter-core messages over multiple hops within the system.
+\item \textbf{The Beehive Processors \textit{obsolete:}} The
+ Barrelfish port to the Chuck Thacker's Beehive processor at
+ Microsoft Research; now removed.
+\item \textbf{Tracing and Visualization:} The Barrelfish trace
+ infrastructure and associated tools.
+\item \textbf{Message notifications:} A discussion of the use of notification
+ drivers to mitigate the effect of polling when using UMP message
+ channels.
+\item \textbf{Specification \textit{obsolete:}} An early attempt to
+ document the Barrelfish API, now superceded by other documentation.
+\item \textbf{Inter-dispatcher communication in Barrelfish:}
+ Documentation for the IDC system, including the Flounder interface
+ definition language, and some of the more commonly used interconnect
+ drivers and message transports.
+\item \textbf{Barrelfish OS Services:} A list of services running in a
+ typical Barrelfish machine, together with their interdependencies.
+\item \textbf{Capability Management in Barrelfish:} Documentation
+ for the user-level capability primitives for maniulating caprefs and
+ CNodes.
+\item \textbf{Bulk Transfer:} A proposed design for transferring large
+ contiguous areas of memory between Barrelfish domains.
+\item \textbf{A Messaging interface to disks:} A comprehensive
+ description of the Barrelfish AHCI driver.
+\item \textbf{Serial ports:} A discussion of how serial ports are
+ represented in Barrelfish, both inside the CPU driver and from user
+ space.
+\end{enumerate}
+
+Barrelfish technical notes are built from the Barrelfish tree (using
+\texttt{make docs}), and are also available pre-built from the
+Barrelfish web site at \url{http://www.barrelfish.org/}.
+
+\section{The Barrelfish Wiki}
+
+The Barrelfish project public wiki (at
+\url{http://wiki.barrelfish.org/}) contains a variety of additional
+documentation, including many contributions from users outside the
+core Barrelfish team.
+
+\section{Academic publications}
+
+Many publications related to Barrelfish can be found on the Barrelfish
+web site. They are not generally detailed documentation for the
+system, but often convey high-level design decisions, concepts, and
+rationales.
+
+\section{Doxygen}
+
+The Barrelfish libraries are annotated for use with Doxygen.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\bibliographystyle{abbrvnat}
-\bibliography{paper}
+\bibliographystyle{abbrv}
+\bibliography{barrelfish}
\end{document}
--- /dev/null
+%%
+%% This is file `hyperref.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% hyperref.dtx (with options: `package')
+%%
+%% File: hyperref.dtx Copyright 1995-2001 Sebastian Rahtz,
+%% with portions written by David Carlisle and Heiko Oberdiek,
+%% 2001-2012 Heiko Oberdiek.
+%%
+%% This file is part of the `Hyperref Bundle'.
+%% -------------------------------------------
+%%
+%% This work may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either version 1.3
+%% of this license or (at your option) any later version.
+%% The latest version of this license is in
+%% http://www.latex-project.org/lppl.txt
+%% and version 1.3 or later is part of all distributions of LaTeX
+%% version 2005/12/01 or later.
+%%
+%% This work has the LPPL maintenance status `maintained'.
+%%
+%% The Current Maintainer of this work is Heiko Oberdiek.
+%%
+%% The list of all files belonging to the `Hyperref Bundle' is
+%% given in the file `manifest.txt'.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{hyperref}
+ [2012/02/06 v6.82o %
+ Hypertext links for LaTeX]
+\begingroup
+ \@makeother\`%
+ \@makeother\=%
+ \edef\x{%
+ \edef\noexpand\x{%
+ \endgroup
+ \noexpand\toks@{%
+ \catcode 96=\noexpand\the\catcode`\noexpand\`\relax
+ \catcode 61=\noexpand\the\catcode`\noexpand\=\relax
+ }%
+ }%
+ \noexpand\x
+ }%
+\x
+\@makeother\`
+\@makeother\=
+\def\Hy@SetCatcodes{%
+ \@makeother\`%
+ \@makeother\=%
+ \catcode`\$=3 %
+ \catcode`\&=4 %
+ \catcode`\^=7 %
+ \catcode`\_=8 %
+ \@makeother\|%
+ \@makeother\:%
+ \@makeother\(%
+ \@makeother\)%
+ \@makeother\[%
+ \@makeother\]%
+ \@makeother\/%
+ \@makeother\!%
+ \@makeother\<%
+ \@makeother\>%
+ \@makeother\.%
+ \@makeother\;%
+ \@makeother\+%
+ \@makeother\-%
+ \@makeother\"%
+ \@makeother\'%
+}
+\begingroup
+ \def\x#1{\catcode`\noexpand#1=\the\catcode`#1\relax}%
+ \xdef\Hy@RestoreCatcodes{%
+ \the\toks@
+ \x\$%
+ \x\&%
+ \x\^%
+ \x\_%
+ \x\|%
+ \x\:%
+ \x\(%
+ \x\)%
+ \x\[%
+ \x\]%
+ \x\/%
+ \x\!%
+ \x\<%
+ \x\>%
+ \x\.%
+ \x\;%
+ \x\+%
+ \x\-%
+ \x\"%
+ \x\'%
+ }%
+\endgroup
+\Hy@SetCatcodes
+\IfFileExists{hobsub-hyperref.sty}{%
+ \RequirePackage{hobsub-hyperref}[2011/01/30]%
+}{}
+\RequirePackage{ltxcmds}[2010/10/25]
+\RequirePackage{ifpdf}[2006/02/20]
+\RequirePackage{pdftexcmds}[2009/04/10]
+\@ifpackagelater{pdftexcmds}{2010/11/04}{}{%
+ \ltx@IfUndefined{pdfdraftmode}{%
+ \let\pdf@ifdraftmode\ltx@secondoftwo
+ }{%
+ \ifpdf
+ \def\pdf@ifdraftmode{%
+ \ifnum\pdfdraftmode=\ltx@one
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ }%
+ \else
+ \let\pdf@ifdraftmode\ltx@secondoftwo
+ \fi
+ }%
+}
+\RequirePackage{infwarerr}[2010/04/08]
+\RequirePackage{keyval}[1997/11/10]
+\RequirePackage{kvsetkeys}[2007/09/29]
+\RequirePackage{pdfescape}[2007/11/11]
+\RequirePackage{ifvtex}
+\RequirePackage{ifxetex}[2006/08/21]
+\RequirePackage{hycolor}
+\RequirePackage{letltxmacro}[2008/06/13]
+\def\Hy@Error{\@PackageError{hyperref}}
+\def\Hy@Warning{\@PackageWarning{hyperref}}
+\def\Hy@WarningNoLine{\@PackageWarningNoLine{hyperref}}
+\def\Hy@Info{\@PackageInfo{hyperref}}
+\def\Hy@InfoNoLine{\@PackageInfoNoLine{hyperref}}
+\def\Hy@Message#1{%
+ \GenericWarning{%
+ (hyperref)\@spaces\@spaces\@spaces\@spaces
+ }{%
+ Package hyperref Message: #1\ltx@gobble
+ }%
+}
+\chardef\Hy@VersionChecked=0 %
+\def\Hy@VersionCheck#1{%
+ \begingroup
+ \ltx@IfUndefined{ver@hyperref.sty}{%
+ \Hy@Error{%
+ This should not happen!\MessageBreak
+ Missing hyperref version%
+ }\@ehd
+ }{%
+ \ltx@IfUndefined{ver@#1}{%
+ \Hy@Error{%
+ This should not happen!\MessageBreak
+ Missing version of `#1'%
+ }\@ehd
+ }{%
+ \def\x##1##2##3{%
+ \expandafter\expandafter\expandafter\Hy@@VersionCheck
+ \expandafter\expandafter\expandafter##2%
+ \csname ver@##3\endcsname##1##1\@nil
+ }%
+ \x{ }\y{hyperref.sty}%
+ \x{ }\z{#1}%
+ \ifx\y\z
+ \else
+ \Hy@Error{%
+ Version mismatch!\MessageBreak
+ * \y: hyperref.sty\MessageBreak
+ * \z: #1%
+ }\@ehd
+ \fi
+ }%
+ }%
+ \endgroup
+ \chardef\Hy@VersionChecked=1 %
+}
+\def\Hy@@VersionCheck #1#2 #3 #4\@nil{%
+ \def#1{#2 #3}%
+}
+\ltx@IfUndefined{pdfmatch}{%
+ \let\Hy@Match\ltx@gobblefour
+}{%
+ \def\Hy@Match#1#2{%
+ \begingroup
+ \edef\^{\ltx@backslashchar\string^}%
+ \edef\.{\ltx@backslashchar.}%
+ \edef\[{\ltx@backslashchar[}% ]]
+ \edef\${\ltx@backslashchar$}%
+ \edef\({\ltx@backslashchar(}%
+ \edef\){\ltx@backslashchar)}%
+ \edef\|{\ltx@backslashchar|}%
+ \edef\*{\ltx@backslashchar*}%
+ \edef\+{\ltx@backslashchar+}%
+ \edef\?{\ltx@backslashchar?}%
+ \edef\{{\ltx@backslashchar\ltx@leftbracechar}%
+ \edef\}{\ltx@rightbracechar}%
+ \edef\\{\ltx@backslashchar\ltx@backslashchar}%
+ \let\ \ltx@space
+ \ifcase\pdfmatch{#2}{#1} %
+ \endgroup
+ \expandafter\ltx@secondoftwo
+ \or
+ \endgroup
+ \expandafter\ltx@firstoftwo
+ \else
+ \Hy@Warning{%
+ Internal error: Wrong pattern!\MessageBreak
+ --> #2 <--\MessageBreak
+ Pattern check ignored%
+ }%
+ \endgroup
+ \expandafter\ltx@firstoftwo
+ \fi
+ }%
+ \ltx@ifpackagelater{ltxcmds}{2010/09/11}{}{%
+ \begingroup
+ \lccode`0=`\{\relax
+ \lowercase{\endgroup
+ \def\ltx@leftbracechar{0}%
+ }%
+ \begingroup
+ \lccode`0=`\}\relax
+ \lowercase{\endgroup
+ \def\ltx@rightbracechar{0}%
+ }%
+ }%
+}
+\@ifundefined{AfterBeginDocument}{%
+ \def\AfterBeginDocument{\AtBeginDocument}%
+}{}%
+\def\Hy@AtBeginDocument{%
+ \ltx@LocalAppendToMacro\Hy@AtBeginDocumentHook
+}
+\def\Hy@AtEndOfPackage{%
+ \ltx@LocalAppendToMacro\Hy@AtEndOfPackageHook
+}
+\let\Hy@AtBeginDocumentHook\ltx@empty
+\let\Hy@AtEndOfPackageHook\ltx@empty
+\AtEndOfPackage{%
+ \Hy@AtEndOfPackageHook
+ \let\Hy@AtEndOfPackageHook\@undefined
+ \AfterBeginDocument{%
+ \Hy@AtBeginDocumentHook{}%
+ \let\Hy@AtBeginDocumentHook\@undefined
+ }%
+}
+\RequirePackage{kvoptions}[2009/07/21]
+\newif\ifHy@stoppedearly
+\newif\ifHy@typexml
+\newif\ifHy@activeanchor
+\newif\ifHy@backref
+\newif\ifHy@bookmarks
+\newif\ifHy@bookmarksnumbered
+\newif\ifHy@bookmarksopen
+\newif\ifHy@breaklinks
+\newif\ifHy@pdfcenterwindow
+\newif\ifHy@CJKbookmarks
+\newif\ifHy@colorlinks
+\newif\ifHy@draft
+\let\Hy@finaltrue\Hy@draftfalse
+\let\Hy@finalfalse\Hy@drafttrue
+\newif\ifHy@pdfescapeform
+\newif\ifHy@hyperfigures
+\newif\ifHy@pdffitwindow
+\newif\ifHy@frenchlinks
+\newif\ifHy@hyperfootnotes
+\newif\ifHy@hyperindex
+\newif\ifHy@hypertexnames
+\newif\ifHy@implicit
+\newif\ifHy@linktocpage
+\newif\ifHy@localanchorname
+\newif\ifHy@pdfmenubar
+\newif\ifHy@naturalnames
+\newif\ifHy@nesting
+\newif\ifHy@pdfnewwindowset
+\newif\ifHy@pdfnewwindow
+\newif\ifHy@ocgcolorlinks
+\newif\ifHy@pageanchor
+\newif\ifHy@pdfpagelabels
+\newif\ifHy@pdfpagehidden
+\newif\ifHy@pdfstring
+\newif\ifHy@plainpages
+\newif\ifHy@psize
+\newif\ifHy@raiselinks
+\newif\ifHy@seminarslides
+\newif\ifHy@setpagesize
+\newif\ifHy@texht
+\newif\ifHy@pdftoolbar
+\newif\ifHy@unicode
+\newif\ifHy@pdfusetitle
+\newif\ifHy@verbose
+\let\Hy@debugtrue\Hy@verbosetrue
+\let\Hy@debugfalse\Hy@verbosefalse
+\newif\ifHy@pdfwindowui
+\newif\ifHy@pdfdisplaydoctitle
+\newif\ifHy@pdfa
+\Hy@backreffalse
+\Hy@bookmarksnumberedfalse
+\Hy@bookmarksopenfalse
+\Hy@bookmarkstrue
+\Hy@breaklinksfalse
+\Hy@pdfcenterwindowfalse
+\Hy@CJKbookmarksfalse
+\Hy@pdfescapeformfalse
+\Hy@hyperfiguresfalse
+\Hy@pdffitwindowfalse
+\Hy@hyperfootnotestrue
+\Hy@hyperindextrue
+\Hy@hypertexnamestrue
+\Hy@implicittrue
+\Hy@linktocpagefalse
+\Hy@localanchornamefalse
+\Hy@pdfmenubartrue
+\Hy@naturalnamesfalse
+\Hy@nestingfalse
+\Hy@pdfnewwindowsetfalse
+\Hy@pdfnewwindowfalse
+\Hy@pageanchortrue
+\Hy@pdfpagelabelstrue
+\Hy@pdfpagehiddenfalse
+\Hy@pdfstringfalse
+\Hy@plainpagesfalse
+\Hy@raiselinksfalse
+\Hy@setpagesizetrue
+\Hy@texhtfalse
+\Hy@pdftoolbartrue
+\Hy@typexmlfalse
+\Hy@unicodefalse
+\Hy@pdfusetitlefalse
+\Hy@verbosefalse
+\Hy@pdfwindowuitrue
+\Hy@pdfdisplaydoctitlefalse
+\Hy@pdfafalse
+\def\Hy@StepCount#1{\advance#1 by 1 }%
+\def\Hy@GlobalStepCount#1{\global\advance#1 by 1 }%
+\newdimen\@linkdim
+\let\Hy@driver\ltx@empty
+\let\MaybeStopEarly\relax
+\newcount\Hy@linkcounter
+\newcount\Hy@pagecounter
+\Hy@linkcounter0
+\Hy@pagecounter0
+\let\Hy@ReturnEnd\@empty
+\long\def\Hy@ReturnAfterFiFiEnd#1\fi#2\Hy@ReturnEnd{\fi\fi#1}
+\long\def\Hy@ReturnAfterElseFiFiEnd#1\else#2\Hy@ReturnEnd{\fi\fi#1}
+\def\Hy@safe@activestrue{\csname @safe@activestrue\endcsname}
+\def\Hy@safe@activesfalse{\csname @safe@activesfalse\endcsname}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname dimexpr\endcsname\relax
+ \def\hypercalcbpdef#1#2{%
+ \begingroup
+ \toks@{}%
+ \HyCal@scan#2\hypercalcbp\@nil
+ \expandafter\endgroup
+ \expandafter\def\expandafter#1\expandafter{\the\toks@}%
+ }%
+ \def\HyCal@scan#1\hypercalcbp#2\@nil{%
+ \toks@\expandafter{\the\toks@ #1}%
+ \ifx\\#2\\%
+ \else
+ \ltx@ReturnAfterFi{%
+ \HyCal@do#2\@nil
+ }%
+ \fi
+ }%
+ \def\HyCal@do#1#2\@nil{%
+ \@ifpackageloaded{calc}{}{%
+ \Hy@Warning{%
+ For calculations \string\hypercalcbp\space needs\MessageBreak
+ package calc or e-TeX%
+ }%
+ }%
+ \setlength{\dimen@}{#1}%
+ \setlength{\dimen@}{0.99626401\dimen@}%
+ \edef\x{%
+ \toks@{%
+ \the\toks@
+ \strip@pt\dimen@
+ }%
+ }\x
+ \HyCal@scan#2\@nil
+ }%
+\else
+ \def\hypercalcbp#1{%
+ \strip@pt\dimexpr 0.99626401\dimexpr(#1)\relax\relax
+ }%
+ \def\hypercalcbpdef{\def}%
+\fi
+\def\pdfstringdef#1#2{%
+ \begingroup
+ \escapechar`\\%
+ \edef\0{\string\0}%
+ \edef\1{\string\1}%
+ \edef\2{\string\2}%
+ \edef\3{\string\3}%
+ \ifHy@unicode
+ \edef\8{\string\8}%
+ \edef\9{\string\9}%
+ \fontencoding{PU}%
+ \HyPsd@UTFviii
+ \def\ifpdfstringunicode##1##2{##1}%
+ \else
+ \fontencoding{PD1}%
+ \def\ifpdfstringunicode##1##2{##2}%
+ \fi
+ \let\utf@viii@undeferr\HyPsd@utf@viii@undeferr
+ \enc@update
+ \@inmathwarn\pdfstringdef
+ \let\@inmathwarn\HyPsd@inmathwarn
+ \let\add@accent\HyPsd@add@accent
+ \let\{\textbraceleft
+ \let\}\textbraceright
+ \let\\\textbackslash
+ \let\#\textnumbersign
+ \let\$\textdollar
+ \let\%\textpercent
+ \let\&\textampersand
+ \let\_\textunderscore
+ \let\P\textparagraph
+ \let\ldots\textellipsis
+ \let\dots\textellipsis
+ \def\\{\pdfstringdefWarn\\}%
+ \def\newline{\pdfstringdefWarn\newline}%
+ \def\TeX{TeX}%
+ \def\LaTeX{La\TeX}%
+ \def\LaTeXe{%
+ \LaTeX2%
+ \ifHy@unicode\textepsilon\else e\fi
+ }%
+ \def\eTeX{%
+ \ifHy@unicode\textepsilon\else e\fi
+ -\TeX%
+ }%
+ \def\SliTeX{Sli\TeX}%
+ \def\MF{Metafont}%
+ \def\MP{Metapost}%
+ \let\fontencoding\@gobble
+ \let\fontfamily\@gobble
+ \let\fontseries\@gobble
+ \let\fontshape\@gobble
+ \let\fontsize\@gobbletwo
+ \let\selectfont\@empty
+ \let\usefont\@gobblefour
+ \let\emph\@firstofone
+ \let\textnormal\@firstofone
+ \let\textrm\@firstofone
+ \let\textsf\@firstofone
+ \let\texttt\@firstofone
+ \let\textbf\@firstofone
+ \let\textmd\@firstofone
+ \let\textit\@firstofone
+ \let\textsc\@firstofone
+ \let\textsl\@firstofone
+ \let\textup\@firstofone
+ \let\normalfont\@empty
+ \let\rmfamily\@empty
+ \let\sffamily\@empty
+ \let\ttfamily\@empty
+ \let\bfseries\@empty
+ \let\mdseries\@empty
+ \let\itshape\@empty
+ \let\scshape\@empty
+ \let\slshape\@empty
+ \let\upshape\@empty
+ \let\em\@empty
+ \let\rm\@empty
+ \let\Huge\@empty
+ \let\LARGE\@empty
+ \let\Large\@empty
+ \let\footnotesize\@empty
+ \let\huge\@empty
+ \let\large\@empty
+ \let\normalsize\@empty
+ \let\scriptsize\@empty
+ \let\small\@empty
+ \let\tiny\@empty
+ \let\mathversion\@gobble
+ \let\phantom\@gobble
+ \let\vphantom\@gobble
+ \let\hphantom\@gobble
+ \def\begin#1{\csname#1\endcsname}%
+ \def\end#1{\csname end#1\endcsname}%
+ \def\textcolor##1##{\@secondoftwo}%
+ \def\MakeUppercase{\MakeUppercaseUnsupportedInPdfStrings}%
+ \def\MakeLowercase{\MakeLowercaseUnsupportedInPdfStrings}%
+ \let\foreignlanguage\@secondoftwo
+ \let\textlatin\@firstofone
+ \ltx@IfUndefined{language@group}{}{%
+ \csname HyPsd@babel@\language@group\endcsname
+ }%
+ \HyPsd@GreekPatch
+ \HyPsd@SpanishPatch
+ \HyPsd@RussianPatch
+ \HyPsd@BabelPatch
+ \let\@safe@activestrue\relax
+ \let\@safe@activesfalse\relax
+ \let\cyr\relax
+ \let\es@roman\@Roman
+ \let\glqq\textglqq
+ \let\grqq\textgrqq
+ \let\glq\textglq
+ \let\grq\textgrq
+ \let\flqq\textflqq
+ \let\frqq\textfrqq
+ \let\flq\textflq
+ \let\frq\textfrq
+ \let\if@mid@expandable\@firstoftwo
+ \HyPsd@AMSclassfix
+ \let\hspace\HyPsd@hspace
+ \let\label\@gobble
+ \let\index\@gobble
+ \let\glossary\@gobble
+ \let\href\HyPsd@href
+ \let\@mkboth\@gobbletwo
+ \let\ref\HyPsd@ref
+ \let\pageref\HyPsd@pageref
+ \let\nameref\HyPsd@nameref
+ \let\autoref\HyPsd@autoref
+ \let\leavevmode\@empty
+ \let\mbox\@empty
+ \def\halign{\pdfstringdefWarn\halign\@gobble}%
+ \let\ignorespaces\HyPsd@ignorespaces
+ \let\Hy@SectionAnchorHref\@gobble
+ \HyPsd@CJKhook
+ \Hy@pdfstringtrue
+ \pdfstringdefPreHook
+ \HyPsd@LetUnexpandableSpace\space
+ \HyPsd@LetUnexpandableSpace\ %
+ \HyPsd@LetUnexpandableSpace~%
+ \HyPsd@LetUnexpandableSpace\nobreakspace
+ \ltx@IfUndefined{@xspace}{%
+ \let\xspace\HyPsd@ITALCORR
+ }{%
+ \let\xspace\HyPsd@XSPACE
+ }%
+ \let\/\HyPsd@ITALCORR
+ \let\bgroup\/%
+ \let\egroup\/%
+ \let\discretionary\@gobbletwo
+ \def\@ifnextchar{\HyPsd@ifnextchar\@ifnextchar}%
+ \def\kernel@ifnextchar{\HyPsd@ifnextchar\kernel@ifnextchar}%
+ \def\new@ifnextchar{\HyPsd@ifnextchar\new@ifnextchar}%
+ \let\@protected@testopt\HyPsd@protected@testopt
+ \let\@protected@testopt@xargs\HyPsd@protected@testopt
+ \begingroup
+ \let\GenericError\@gobblefour
+ \let\GenericWarning\@gobbletwo
+ \let\GenericInfo\@gobbletwo
+ \ifx\nofrenchguillemets\@undefined
+ \else
+ \nofrenchguillemets
+ \fi
+ \let\Hy@temp\xdef
+ \let\def\HyPsd@DefCommand
+ \let\gdef\HyPsd@DefCommand
+ \let\edef\HyPsd@DefCommand
+ \let\xdef\HyPsd@DefCommand
+ \let\futurelet\HyPsd@LetCommand
+ \let\let\HyPsd@LetCommand
+ \Hy@temp#1{#2}%
+ \endgroup
+ \ifx#1\@empty
+ \else
+ \HyPsd@ProtectSpaces#1%
+ \let\HyPsd@String\@empty
+ \expandafter\HyPsd@RemoveBraces\expandafter{#1|}%
+ \global\let#1\HyPsd@String
+ \let\HyPsd@SPACEOPTI\relax
+ {%
+ \let\HyPsd@String\@empty
+ \expandafter\HyPsd@CheckCatcodes#1\HyPsd@End
+ \global\let#1\HyPsd@String
+ }%
+ \expandafter\HyPsd@RemoveMask\expandafter
+ |\expandafter\@empty#1\HyPsd@End#1%
+ \expandafter\HyPsd@Subst\expandafter{\HyPsd@GLYPHERR}{\relax}#1%
+ \let\HyPsd@String\@empty
+ \expandafter\HyPsd@GlyphProcess#1\relax\@empty
+ \global\let#1\HyPsd@String
+ \HyPsd@StringSubst{\\}{\textbackslash}#1%
+ \ifHy@unicode
+ \expandafter\HyPsd@StringSubst\csname 80\040\endcsname
+ \HyPsd@SPACEOPTI#1%
+ \edef\Hy@temp@A{\HyPsd@SPACEOPTI\HyPsd@SPACEOPTI\80\273}%
+ \expandafter\HyPsd@Subst\expandafter{\Hy@temp@A}%
+ {\HyPsd@SPACEOPTI\80\273}#1%
+ \else
+ \HyPsd@StringSubst{\040}\HyPsd@SPACEOPTI#1%
+ \expandafter\HyPsd@Subst\expandafter{%
+ \expandafter\HyPsd@SPACEOPTI\expandafter\HyPsd@SPACEOPTI
+ \string\273}{\HyPsd@SPACEOPTI\273}#1%
+ \fi
+ \ifHy@unicode
+ \HyPsd@StringSubst{\)}{\80\051}#1%
+ \HyPsd@Subst){\80\051}#1%
+ \let\HyPsd@empty\relax
+ \expandafter\HyPsd@StringSubst\csname 80\051\endcsname
+ {\HyPsd@empty\80\051}#1%
+ \else
+ \HyPsd@StringSubst{\)}{\051}#1%
+ \HyPsd@Subst){\051}#1%
+ \let\HyPsd@empty\relax
+ \HyPsd@StringSubst{\051}{\HyPsd@empty\string\)}#1%
+ \fi
+ \expandafter\HyPsd@Subst\expandafter{\/}\HyPsd@empty#1%
+ \ltx@IfUndefined{@xspace}{%
+ }{%
+ \let\HyPsd@xspace\relax
+ \expandafter\HyPsd@Subst\expandafter
+ {\HyPsd@XSPACE}\HyPsd@xspace#1%
+ \let\HyPsd@xspace\HyPsd@doxspace
+ }%
+ \xdef#1{#1\HyPsd@empty}%
+ \HyPsd@Subst{---}\textemdash#1%
+ \HyPsd@Subst{--}\textendash#1%
+ \HyPsd@Subst{!`}\textexclamdown#1%
+ \HyPsd@Subst{?`}\textquestiondown#1%
+ \let\HyPsd@empty\@empty
+ \ifHy@unicode
+ \HyPsd@StringSubst\(\textparenleft#1%
+ \HyPsd@Subst(\textparenleft#1%
+ \else
+ \HyPsd@StringSubst\({\050}#1%
+ \HyPsd@Subst({\050}#1%
+ \HyPsd@StringSubst{\050}{\string\(}#1%
+ \fi
+ \ifHy@unicode
+ \edef\HyPsd@SPACEOPTI{\80\040}%
+ \else
+ \let\HyPsd@SPACEOPTI\HyPsd@spaceopti
+ \fi
+ \xdef#1{#1\@empty}%
+ \fi
+ \endgroup
+ \begingroup
+ \ifHy@unicode
+ \HyPsd@ConvertToUnicode#1%
+ \ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
+ \ltx@IfUndefined{StringEncodingConvertTest}{%
+ }{%
+ \EdefUnescapeString\HyPsd@temp#1%
+ \ifxetex
+ \let\HyPsd@UnescapedString\HyPsd@temp
+ \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
+ {utf16be}{ascii-print}{%
+ \EdefEscapeString\HyPsd@temp\HyPsd@temp
+ \global\let#1\HyPsd@temp
+ \HyPsd@EscapeTeX#1%
+ \Hy@unicodefalse
+ }{%
+ \HyPsd@ToBigChars#1%
+ }%
+ \else
+ \StringEncodingConvertTest\HyPsd@temp\HyPsd@temp
+ {utf16be}{pdfdoc}{%
+ \EdefEscapeString\HyPsd@temp\HyPsd@temp
+ \global\let#1\HyPsd@temp
+ \HyPsd@EscapeTeX#1%
+ \Hy@unicodefalse
+ }{}%
+ \fi
+ }%
+ \fi
+ \fi
+ \HyPsd@XeTeXBigCharsfalse
+ \pdfstringdefPostHook#1%
+ \endgroup
+}
+\def\Hy@pdfstringdef#1#2{%
+ \pdfstringdef\Hy@gtemp{#2}%
+ \let#1\Hy@gtemp
+}
+\edef\Hy@temp{\catcode0=\the\catcode0\relax}
+\catcode\z@=12 %
+\ifxetex
+ \expandafter\@firstofone
+\else
+ \let\HyPsd@XeTeXBigCharstrue\@empty
+ \let\HyPsd@XeTeXBigCharsfalse\@empty
+ \expandafter\@gobble
+\fi
+{%
+ \newif\ifHyPsd@XeTeXBigChars
+ \def\HyPsd@XeTeXBigCharsfalse{%
+ \global\let\ifHyPsd@XeTeXBigChars\iffalse
+ }%
+ \def\HyPsd@XeTeXBigCharstrue{%
+ \global\let\ifHyPsd@XeTeXBigChars\iftrue
+ }%
+ \def\HyPsd@ToBigChars#1{%
+ \ifHyPsd@XeTeXBigChars
+ \EdefEscapeHex\HyPsd@UnescapedString{%
+ \expandafter\@gobbletwo\HyPsd@UnescapedString
+ }%
+ \begingroup
+ \toks@{}%
+ \escapechar=92\relax
+ \let\x\HyPsd@ToBigChar
+ \expandafter\HyPsd@ToBigChar\HyPsd@UnescapedString
+ \relax\relax\relax\relax\relax\relax\relax
+ \edef\x{%
+ \endgroup
+ \gdef\noexpand#1{\the\toks@}%
+ }%
+ \x
+ \fi
+ }%
+ \def\HyPsd@ToBigChar#1#2#3#4{%
+ \ifx\relax#1\relax
+ \let\x\relax
+ \else
+ \count@="#1#2#3#4\relax
+ \let\y\@empty
+ \lccode\z@=\count@
+ \ifnum\count@=40 % (
+ \let\y\@backslashchar
+ \else
+ \ifnum\count@=41 % )
+ \let\y\@backslashchar
+ \else
+ \ifnum\count@=92 % backslash
+ \let\y\@backslashchar
+ \else
+ \ifnum\count@=10 % newline
+ \edef\y##1{\string\n}%
+ \else
+ \ifnum\count@=13 % carriage return
+ \edef\y##1{\string\r}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \lowercase{%
+ \toks@\expandafter{%
+ \the\expandafter\toks@
+ \y
+ ^^@%
+ }%
+ }%
+ \fi
+ \x
+ }%
+}
+\Hy@temp
+\@ifpackageloaded{linguex}{%
+ \let\HyLinguex@OrgB\b
+ \let\HyLinguex@OrgC\c
+ \let\HyLinguex@OrgD\d
+ \def\HyLinguex@Restore{%
+ \let\b\HyLinguex@OrgB
+ \let\c\HyLinguex@OrgC
+ \let\d\HyLinguex@OrgD
+ }%
+ \Hy@AtEndOfPackage{%
+ \pdfstringdefDisableCommands{%
+ \ltx@IfUndefined{oldb}{}{\let\b\oldb}%
+ \ltx@IfUndefined{oldc}{}{\let\c\oldc}%
+ \ltx@IfUndefined{oldd}{}{\let\d\oldd}%
+ }%
+ }%
+}{%
+ \let\HyLinguex@Restore\relax
+}%
+\@ifundefined{T@PD1}{%
+ \input{pd1enc.def}%
+ \HyLinguex@Restore
+}{}
+\DeclareFontFamily{PD1}{pdf}{}
+\DeclareFontShape{PD1}{pdf}{m}{n}{ <-> cmr10 }{}
+\DeclareFontSubstitution{PD1}{pdf}{m}{n}
+\def\HyPsd@InitUnicode{%
+ \@ifundefined{T@PU}{%
+ \input{puenc.def}%
+ \HyLinguex@Restore
+ }{}%
+ \DeclareFontFamily{PU}{pdf}{}%
+ \DeclareFontShape{PU}{pdf}{m}{n}{ <-> cmr10 }{}%
+ \DeclareFontSubstitution{PU}{pdf}{m}{n}%
+ \let\HyPsd@InitUnicode\relax
+}
+\def\texorpdfstring{%
+ \ifHy@pdfstring
+ \expandafter\@secondoftwo
+ \else
+ \expandafter\@firstoftwo
+ \fi
+}
+\@ifundefined{pdfstringdefPreHook}{%
+ \let\pdfstringdefPreHook\@empty
+}{}
+\@ifundefined{pdfstringdefPostHook}{%
+ \let\pdfstringdefPostHook\@gobble
+}{}
+\def\pdfstringdefDisableCommands{%
+ \begingroup
+ \makeatletter
+ \HyPsd@DisableCommands
+}
+\long\def\HyPsd@DisableCommands#1{%
+ \ltx@GlobalAppendToMacro\pdfstringdefPreHook{#1}%
+ \endgroup
+}
+\def\pdfstringdefWarn#1{%
+ \expandafter\noexpand\csname<>-\string#1\endcsname
+}
+\begingroup
+ \catcode0=12 %
+ \def\x{\endgroup
+ \def\HyPsd@ignorespaces{%
+ \romannumeral\expandafter`\expandafter^^@%
+ \romannumeral`^^@%
+ }%
+ }%
+\x
+\def\HyPsd@BabelPatch{%
+ \let\HyOrg@languageshorthands\languageshorthands
+ \let\languageshorthands\HyPsd@LanguageShorthands
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname pdf@strcmp\endcsname\relax
+ \let\HyPsd@langshort@system\@empty
+ \def\HyPsd@LanguageShorthands#1{%
+ \expandafter\ifx\csname HyPsd@langshort@#1\endcsname
+ \HyPsd@langshort@system
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {%
+ \HyOrg@languageshorthands{#1}%
+ }%
+ }%
+\else
+ \def\HyPsd@LanguageShorthands#1{%
+ \ifnum\pdf@strcmp{#1}{system}=\z@
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {%
+ \HyOrg@languageshorthands{#1}%
+ }%
+ }%
+\fi
+\def\Hy@temp{%
+ \@ifpackageloaded{babel}{%
+ \@ifpackagelater{babel}{2008/03/16}{%
+ \let\Hy@temp\@empty
+ }{%
+ \def\HyPsd@BabelPatch{%
+ \let\HyOrg@languageshorthands\languageshorthands
+ }%
+ }%
+ }{}%
+}
+\Hy@temp
+\expandafter\Hy@AtBeginDocument\expandafter{\Hy@temp}
+\newif\ifHy@next
+\ltx@IfUndefined{danish@sh@"@sel}{}{%
+ \def\HyPsd@babel@danish{%
+ \declare@shorthand{danish}{"|}{}%
+ \declare@shorthand{danish}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{dutch@sh@"@sel}{}{%
+ \def\HyPsd@babel@dutch{%
+ \declare@shorthand{dutch}{"|}{}%
+ \declare@shorthand{dutch}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{finnish@sh@"@sel}{}{%
+ \def\HyPsd@babel@finnish{%
+ \declare@shorthand{finnish}{"|}{}%
+ }%
+}
+\ltx@IfUndefined{french@sh@:@sel}{}{%
+ \def\HyPsd@babel@frenchb{%
+ \def\guill@spacing{ }%
+ }%
+}
+\ltx@IfUndefined{german@sh@"@sel}{}{%
+ \def\HyPsd@babel@german{%
+ \declare@shorthand{german}{"f}{f}%
+ \declare@shorthand{german}{"|}{}%
+ \declare@shorthand{german}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{macedonian@sh@"@sel}{}{%
+ \def\HyPsd@babel@macedonian{%
+ \declare@shorthand{macedonian}{"|}{}%
+ \declare@shorthand{macedonian}{"~}{-}%
+ }%
+}{}
+\ltx@IfUndefined{ngerman@sh@"@sel}{}{%
+ \def\HyPsd@babel@ngerman{%
+ \declare@shorthand{ngerman}{"|}{}%
+ \declare@shorthand{ngerman}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{portuges@sh@"@sel}{}{%
+ \def\HyPsd@babel@portuges{%
+ \declare@shorthand{portuges}{"|}{}%
+ }%
+}
+\ltx@IfUndefined{russian@sh@"@sel}{}{%
+ \def\HyPsd@babel@russian{%
+ \declare@shorthand{russian}{"|}{}%
+ \declare@shorthand{russian}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{slovene@sh@"@sel}{}{%
+ \def\HyPsd@babel@slovene{%
+ \declare@shorthand{slovene}{"|}{}%
+ }%
+}
+\ltx@IfUndefined{spanish@sh@>@sel}{}{%
+ \def\HyPsd@babel@spanish{%
+ \declare@shorthand{spanish}{<<}{\guillemotleft}%
+ \declare@shorthand{spanish}{>>}{\guillemotright}%
+ \declare@shorthand{spanish}{"=}{-}%
+ \declare@shorthand{spanish}{"~}{-}%
+ \declare@shorthand{spanish}{"!}{\textexclamdown}%
+ \declare@shorthand{spanish}{"?}{\textquestiondown}%
+ }%
+}
+\ltx@IfUndefined{swedish@sh@"@sel}{}{%
+ \def\HyPsd@babel@swedish{%
+ \declare@shorthand{swedish}{"|}{}%
+ \declare@shorthand{swedish}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{ukrainian@sh@"@sel}{}{%
+ \def\HyPsd@babel@ukrainian{%
+ \declare@shorthand{ukrainian}{"|}{}%
+ \declare@shorthand{ukrainian}{"~}{-}%
+ }%
+}
+\ltx@IfUndefined{usorbian@sh@"@sel}{}{%
+ \def\HyPsd@babel@usorbian{%
+ \declare@shorthand{usorbian}{"f}{f}%
+ \declare@shorthand{usorbian}{"|}{}%
+ }%
+}
+\ltx@IfUndefined{greek@sh@\string~@sel}{%
+ \let\HyPsd@GreekPatch\@empty
+}{%
+ \def\HyPsd@GreekPatch{%
+ \let\greeknumeral\HyPsd@greeknumeral
+ \let\Greeknumeral\HyPsd@Greeknumeral
+ }%
+}
+\def\HyPsd@greeknumeral#1{%
+ \HyPsd@GreekNum\@firstoftwo{#1}%
+}
+\def\HyPsd@Greeknumeral#1{%
+ \HyPsd@GreekNum\@secondoftwo{#1}%
+}
+\def\HyPsd@GreekNum#1#2{%
+ \ifHy@unicode
+ \ifnum#2<\@ne
+ \@arabic{#2}%
+ \else
+ \ifnum#2<1000000 %
+ \HyPsd@@GreekNum#1{#2}%
+ \else
+ \@arabic{#2}%
+ \fi
+ \fi
+ \else
+ \@arabic{#2}%
+ \fi
+}
+\def\HyPsd@@GreekNum#1#2{%
+ \ifnum#2<\@m
+ \ifnum#2<10 %
+ \expandafter\HyPsd@GreekNumI
+ \expandafter\@gobble\expandafter#1\number#2%
+ \else
+ \ifnum#2<100 %
+ \expandafter\HyPsd@GreekNumII
+ \expandafter\@gobble\expandafter#1\number#2%
+ \else
+ \expandafter\HyPsd@GreekNumIII
+ \expandafter\@gobble\expandafter#1\number#2%
+ \fi
+ \fi
+ \ifnum#2>\z@
+ \textnumeralsigngreek
+ \fi
+ \else
+ \ifnum#2<\@M
+ \expandafter\HyPsd@GreekNumIV\expandafter#1\number#2%
+ \else
+ \ifnum#2<100000 %
+ \expandafter\HyPsd@GreekNumV\expandafter#1\number#2%
+ \else
+ \expandafter\HyPsd@GreekNumVI\expandafter#1\number#2%
+ \fi
+ \fi
+ \fi
+}
+\def\HyPsd@GreekNumI#1#2#3{%
+ #1{%
+ \ifnum#3>\z@
+ \textnumeralsignlowergreek
+ \fi
+ }%
+ \expandafter#2%
+ \ifcase#3 %
+ {}{}%
+ \or\textalpha\textAlpha
+ \or\textbeta\textBeta
+ \or\textgamma\textGamma
+ \or\textdelta\textDelta
+ \or\textepsilon\textEpsilon
+ \or\textstigmagreek\textStigmagreek
+ \or\textzeta\textZeta
+ \or\texteta\textEta
+ \or\texttheta\textTheta
+ \else
+ {}{}%
+ \fi
+}
+\def\HyPsd@GreekNumII#1#2#3#4{%
+ #1{%
+ \ifnum#3>\z@
+ \textnumeralsignlowergreek
+ \fi
+ }%
+ \expandafter#2%
+ \ifcase#3 %
+ {}{}%
+ \or\textiota\textIota
+ \or\textkappa\textKappa
+ \or\textlambda\textLambda
+ \or\textmu\textMu
+ \or\textnu\textNu
+ \or\textxi\textXi
+ \or\textomicron\textOmicron
+ \or\textpi\textPi
+ \or\textkoppagreek\textKoppagreek
+ \else
+ {}{}%
+ \fi
+ \HyPsd@GreekNumI#1#2#4%
+}
+\def\HyPsd@GreekNumIII#1#2#3#4#5{%
+ #1{%
+ \ifnum#3>\z@
+ \textnumeralsignlowergreek
+ \fi
+ }%
+ \expandafter#2%
+ \ifcase#3 %
+ {}{}%
+ \or\textrho\textRho
+ \or\textsigma\textSigma
+ \or\texttau\textTau
+ \or\textupsilon\textUpsilon
+ \or\textphi\textPhi
+ \or\textchi\textChi
+ \or\textpsi\textPsi
+ \or\textomega\textOmega
+ \or\textsampigreek\textSampigreek
+ \else
+ {}{}%
+ \fi
+ \HyPsd@GreekNumII#1#2#4#5%
+}
+\def\HyPsd@GreekNumIV#1#2#3#4#5{%
+ \HyPsd@GreekNumI\@firstofone#1#2%
+ \HyPsd@@GreekNum#1{#3#4#5}%
+}
+\def\HyPsd@GreekNumV#1#2#3#4#5#6{%
+ \HyPsd@GreekNumII\@firstofone#1#2#3%
+ \HyPsd@@GreekNum#1{#4#5#6}%
+}
+\def\HyPsd@GreekNumVI#1#2#3#4#5#6#7{%
+ \HyPsd@GreekNumIII\@firstofone#1#2#3#4%
+ \HyPsd@@GreekNum#1{#5#6#7}%
+}
+\def\HyPsd@SpanishPatch{%
+ \ltx@IfUndefined{es@save@dot}{%
+ }{%
+ \let\.\es@save@dot
+ }%
+}
+\def\HyPsd@RussianPatch{%
+ \ltx@IfUndefined{russian@sh@"@-@}{%
+ }{%
+ \@namedef{russian@sh@"@-@}{-}%
+ }%
+}
+\RequirePackage{intcalc}[2007/09/27]
+\def\HyPsd@CJKhook{%
+ \ltx@ifpackageloaded{CJK}{%
+ \let\CJK@kern\relax
+ \let\CJKkern\relax
+ \let\CJK@CJK\relax
+ \ifHy@CJKbookmarks
+ \HyPsd@CJKhook@bookmarks
+ \fi
+ \HyPsd@CJKhook@unicode
+ }{}%
+}
+\begingroup
+ \catcode"7F=\active
+ \toks@{%
+ \let\CJK@ignorespaces\empty
+ \def\CJK@char#1{\@gobbletwo}%
+ \let\CJK@charx\@gobblefour
+ \let\CJK@punctchar\@gobblefour
+ \def\CJK@punctcharx#1{\@gobblefour}%
+ \catcode"7F=\active
+ \def^^7f#1^^7f#2^^7f{%
+ \string #1\HyPsd@DecimalToOctal{#2}%
+ }%
+ % ... ?
+ \ifHy@unicode
+ \def\Hy@cjkpu{\80}%
+ \else
+ \let\Hy@cjkpu\@empty
+ \fi
+ \HyPsd@CJKActiveChars
+ }%
+ \count@=127 %
+ \@whilenum\count@<255 \do{%
+ \advance\count@ by 1 %
+ \lccode`\~=\count@
+ \lowercase{%
+ \toks@\expandafter{\the\toks@ ~}%
+ }%
+ }%
+ \toks@\expandafter{\the\toks@ !}%
+ \xdef\HyPsd@CJKhook@bookmarks{%
+ \the\toks@
+ }%
+\endgroup
+\def\HyPsd@CJKActiveChars#1{%
+ \ifx#1!%
+ \let\HyPsd@CJKActiveChars\relax
+ \else
+ \edef#1{\noexpand\Hy@cjkpu\string#1}%
+ \fi
+ \HyPsd@CJKActiveChars
+}
+\def\HyPsd@DecimalToOctal#1{%
+ \ifcase #1 %
+ \000\or \001\or \002\or \003\or \004\or \005\or \006\or \007%
+ \or \010\or \011\or \012\or \013\or \014\or \015\or \016\or \017%
+ \or \020\or \021\or \022\or \023\or \024\or \025\or \026\or \027%
+ \or \030\or \031\or \032\or \033\or \034\or \035\or \036\or \037%
+ \or \040\or \041\or \042\or \043\or \044\or \045\or \046\or \047%
+ \or \050\or \051\or \052\or \053\or \054\or \055\or \056\or \057%
+ \or 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7%
+ \or 8\or 9\or \072\or \073\or \074\or \075\or \076\or \077%
+ \or @\or A\or B\or C\or D\or E\or F\or G%
+ \or H\or I\or J\or K\or L\or M\or N\or O%
+ \or P\or Q\or R\or S\or T\or U\or V\or W%
+ \or X\or Y\or Z\or \133\or \134\or \135\or \136\or \137%
+ \or \140\or a\or b\or c\or d\or e\or f\or g%
+ \or h\or i\or j\or k\or l\or m\or n\or o%
+ \or p\or q\or r\or s\or t\or u\or v\or w%
+ \or x\or y\or z\or \173\or \174\or \175\or \176\or \177%
+ \or \200\or \201\or \202\or \203\or \204\or \205\or \206\or \207%
+ \or \210\or \211\or \212\or \213\or \214\or \215\or \216\or \217%
+ \or \220\or \221\or \222\or \223\or \224\or \225\or \226\or \227%
+ \or \230\or \231\or \232\or \233\or \234\or \235\or \236\or \237%
+ \or \240\or \241\or \242\or \243\or \244\or \245\or \246\or \247%
+ \or \250\or \251\or \252\or \253\or \254\or \255\or \256\or \257%
+ \or \260\or \261\or \262\or \263\or \264\or \265\or \266\or \267%
+ \or \270\or \271\or \272\or \273\or \274\or \275\or \276\or \277%
+ \or \300\or \301\or \302\or \303\or \304\or \305\or \306\or \307%
+ \or \310\or \311\or \312\or \313\or \314\or \315\or \316\or \317%
+ \or \320\or \321\or \322\or \323\or \324\or \325\or \326\or \327%
+ \or \330\or \331\or \332\or \333\or \334\or \335\or \336\or \337%
+ \or \340\or \341\or \342\or \343\or \344\or \345\or \346\or \347%
+ \or \350\or \351\or \352\or \353\or \354\or \355\or \356\or \357%
+ \or \360\or \361\or \362\or \363\or \364\or \365\or \366\or \367%
+ \or \370\or \371\or \372\or \373\or \374\or \375\or \376\or \377%
+ \fi
+}
+\def\HyPsd@CJKhook@unicode{%
+ \let\Unicode\HyPsd@CJK@Unicode
+ \let\CJKnumber\HyPsd@CJKnumber
+ \let\CJKdigits\HyPsd@CJKdigits
+}
+\def\HyPsd@CJK@Unicode#1#2{%
+ \ifnum#1<256 %
+ \HyPsd@DecimalToOctalFirst{#1}%
+ \HyPsd@DecimalToOctalSecond{#2}%
+ \else
+ \933%
+ \expandafter\expandafter\expandafter\HyPsd@HighA
+ \intcalcDiv{#1}{4}!%
+ \933%
+ \ifcase\intcalcMod{#1}{4} %
+ 4\or 5\or 6\or 7%
+ \fi
+ \HyPsd@DecimalToOctalSecond{#2}%
+ \fi
+}
+\def\HyPsd@HighA#1!{%
+ \expandafter\expandafter\expandafter\HyPsd@HighB
+ \IntCalcDiv#1!64!!%
+ \expandafter\expandafter\expandafter\HyPsd@HighD
+ \IntCalcMod#1!64!!%
+}
+\def\HyPsd@HighB#1!{%
+ \expandafter\expandafter\expandafter\HyPsd@HighC
+ \IntCalcDec#1!!%
+}
+\def\HyPsd@HighC#1!{%
+ \IntCalcDiv#1!4!%
+ \@backslashchar
+ \IntCalcMod#1!4!%
+}
+\def\HyPsd@HighD#1!{%
+ \ifcase\IntCalcDiv#1!8! %
+ 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7%
+ \fi
+ \ifcase\IntCalcMod#1!8! %
+ 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7%
+ \fi
+}
+\def\HyPsd@DecimalToOctalFirst#1{%
+ \9%
+ \ifcase#1 %
+ 000\or 001\or 002\or 003\or 004\or 005\or 006\or 007%
+ \or 010\or 011\or 012\or 013\or 014\or 015\or 016\or 017%
+ \or 020\or 021\or 022\or 023\or 024\or 025\or 026\or 027%
+ \or 030\or 031\or 032\or 033\or 034\or 035\or 036\or 037%
+ \or 040\or 041\or 042\or 043\or 044\or 045\or 046\or 047%
+ \or 050\or 051\or 052\or 053\or 054\or 055\or 056\or 057%
+ \or 060\or 061\or 062\or 063\or 064\or 065\or 066\or 067%
+ \or 070\or 071\or 072\or 073\or 074\or 075\or 076\or 077%
+ \or 100\or 101\or 102\or 103\or 104\or 105\or 106\or 107%
+ \or 120\or 111\or 112\or 113\or 114\or 115\or 116\or 117%
+ \or 120\or 121\or 122\or 123\or 124\or 125\or 126\or 127%
+ \or 130\or 131\or 132\or 133\or 134\or 135\or 136\or 137%
+ \or 140\or 141\or 142\or 143\or 144\or 145\or 146\or 147%
+ \or 150\or 151\or 152\or 153\or 154\or 155\or 156\or 157%
+ \or 160\or 161\or 162\or 163\or 164\or 165\or 166\or 167%
+ \or 170\or 171\or 172\or 173\or 174\or 175\or 176\or 177%
+ \or 200\or 201\or 202\or 203\or 204\or 205\or 206\or 207%
+ \or 210\or 211\or 212\or 213\or 214\or 215\or 216\or 217%
+ \or 220\or 221\or 222\or 223\or 224\or 225\or 226\or 227%
+ \or 230\or 231\or 232\or 233\or 234\or 235\or 236\or 237%
+ \or 240\or 241\or 242\or 243\or 244\or 245\or 246\or 247%
+ \or 250\or 251\or 252\or 253\or 254\or 255\or 256\or 257%
+ \or 260\or 261\or 262\or 263\or 264\or 265\or 266\or 267%
+ \or 270\or 271\or 272\or 273\or 274\or 275\or 276\or 277%
+ \or 300\or 301\or 302\or 303\or 304\or 305\or 306\or 307%
+ \or 310\or 311\or 312\or 313\or 314\or 315\or 316\or 317%
+ \or 320\or 321\or 322\or 323\or 324\or 325\or 326\or 327%
+ \or 330\or 331\or 332\or 333\or 334\or 335\or 336\or 337%
+ \or 340\or 341\or 342\or 343\or 344\or 345\or 346\or 347%
+ \or 350\or 351\or 352\or 353\or 354\or 355\or 356\or 357%
+ \or 360\or 361\or 362\or 363\or 364\or 365\or 366\or 367%
+ \or 370\or 371\or 372\or 373\or 374\or 375\or 376\or 377%
+ \fi
+}
+\def\HyPsd@DecimalToOctalSecond#1{%
+ \ifcase #1 %
+ \000\or \001\or \002\or \003\or \004\or \005\or \006\or \007%
+ \or \010\or \011\or \012\or \013\or \014\or \015\or \016\or \017%
+ \or \020\or \021\or \022\or \023\or \024\or \025\or \026\or \027%
+ \or \030\or \031\or \032\or \033\or \034\or \035\or \036\or \037%
+ \or \040\or \041\or \042\or \043\or \044\or \045\or \046\or \047%
+ \or \050\or \051\or \052\or \053\or \054\or \055\or \056\or \057%
+ \or \060\or \061\or \062\or \063\or \064\or \065\or \066\or \067%
+ \or \070\or \071\or \072\or \073\or \074\or \075\or \076\or \077%
+ \or \100\or \101\or \102\or \103\or \104\or \105\or \106\or \107%
+ \or \110\or \111\or \112\or \113\or \114\or \115\or \116\or \117%
+ \or \120\or \121\or \122\or \123\or \124\or \125\or \126\or \127%
+ \or \130\or \131\or \132\or \133\or \134\or \135\or \136\or \137%
+ \or \140\or \141\or \142\or \143\or \144\or \145\or \146\or \147%
+ \or \150\or \151\or \152\or \153\or \154\or \155\or \156\or \157%
+ \or \160\or \161\or \162\or \163\or \164\or \165\or \166\or \167%
+ \or \170\or \171\or \172\or \173\or \174\or \175\or \176\or \177%
+ \or \200\or \201\or \202\or \203\or \204\or \205\or \206\or \207%
+ \or \210\or \211\or \212\or \213\or \214\or \215\or \216\or \217%
+ \or \220\or \221\or \222\or \223\or \224\or \225\or \226\or \227%
+ \or \230\or \231\or \232\or \233\or \234\or \235\or \236\or \237%
+ \or \240\or \241\or \242\or \243\or \244\or \245\or \246\or \247%
+ \or \250\or \251\or \252\or \253\or \254\or \255\or \256\or \257%
+ \or \260\or \261\or \262\or \263\or \264\or \265\or \266\or \267%
+ \or \270\or \271\or \272\or \273\or \274\or \275\or \276\or \277%
+ \or \300\or \301\or \302\or \303\or \304\or \305\or \306\or \307%
+ \or \310\or \311\or \312\or \313\or \314\or \315\or \316\or \317%
+ \or \320\or \321\or \322\or \323\or \324\or \325\or \326\or \327%
+ \or \330\or \331\or \332\or \333\or \334\or \335\or \336\or \337%
+ \or \340\or \341\or \342\or \343\or \344\or \345\or \346\or \347%
+ \or \350\or \351\or \352\or \353\or \354\or \355\or \356\or \357%
+ \or \360\or \361\or \362\or \363\or \364\or \365\or \366\or \367%
+ \or \370\or \371\or \372\or \373\or \374\or \375\or \376\or \377%
+ \fi
+}
+\def\HyPsd@CJKnumber#1{%
+ \ifnum#1<\z@
+ \CJK@minus
+ \expandafter\HyPsd@@CJKnumber\expandafter{\number-\number#1}%
+ \else
+ \expandafter\HyPsd@@CJKnumber\expandafter{\number#1}%
+ \fi
+}
+\def\HyPsd@@CJKnumber#1{%
+ \ifcase#1 %
+ \CJK@zero\or\CJK@one\or\CJK@two\or\CJK@three\or\CJK@four\or
+ \CJK@five\or\CJK@six\or\CJK@seven\or\CJK@eight\or\CJK@nine\or
+ \CJK@ten\or\CJK@ten\CJK@one\or\CJK@ten\CJK@two\or
+ \CJK@ten\CJK@three\or\CJK@ten\CJK@four\or\CJK@ten\CJK@five\or
+ \CJK@ten\CJK@six\or\CJK@ten\CJK@seven\or\CJK@ten\CJK@eight\or
+ \CJK@ten\CJK@nine
+ \else
+ \ifnum#1<10000 %
+ \HyPsd@CJKnumberFour#1!\@empty{20}%
+ \@empty
+ \else
+ \ifnum#1<100000000 %
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
+ \IntCalcDiv#1!10000!%
+ !{}{20}%
+ \CJK@tenthousand
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
+ \IntCalcMod#1!10000!%
+ !\CJK@zero{10}%
+ \@empty
+ \else
+ \expandafter\HyPsd@CJKnumberLarge
+ \number\IntCalcDiv#1!100000000!\expandafter!%
+ \number\IntCalcMod#1!100000000!!%
+ \fi
+ \fi
+ \fi
+}
+\def\HyPsd@CJKnumberLarge#1!#2!{%
+ \HyPsd@CJKnumberFour#1!{}{20}%
+ \CJK@hundredmillion
+ \ifnum#2=\z@
+ \else
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
+ \IntCalcDiv#2!10000!%
+ !\CJK@zero{10}%
+ \CJK@tenthousand
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberFour
+ \IntCalcMod#2!10000!%
+ !\CJK@zero{10}%
+ \@empty
+ \fi
+}
+\def\HyPsd@CJKnumberFour#1!#2#3{%
+ \ifnum#1=\z@
+ \expandafter\@gobble
+ \else
+ \ifnum#1<1000 %
+ #2%
+ \HyPsd@CJKnumberThree#1!{}{#3}%
+ \else
+ \HyPsd@@CJKnumber{\IntCalcDiv#1!1000!}%
+ \CJK@thousand
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberThree
+ \IntCalcMod#1!1000!%
+ !\CJK@zero{10}%
+ \fi
+ \fi
+}
+\def\HyPsd@CJKnumberThree#1!#2#3{%
+ \ifnum#1=\z@
+ \else
+ \ifnum#1<100 %
+ #2%
+ \HyPsd@CJKnumberTwo#1!{}{#3}%
+ \else
+ \HyPsd@@CJKnumber{\IntCalcDiv#1!100!}%
+ \CJK@hundred
+ \expandafter\expandafter\expandafter\HyPsd@CJKnumberTwo
+ \IntCalcMod#1!100!%
+ !\CJK@zero{10}%
+ \fi
+ \fi
+}
+\def\HyPsd@CJKnumberTwo#1!#2#3{%
+ \ifnum#1=\z@
+ \else
+ \ifnum#1<#3 %
+ #2%
+ \HyPsd@@CJKnumber{#1}%
+ \else
+ \HyPsd@@CJKnumber{\IntCalcDiv#1!10!}%
+ \CJK@ten
+ \ifnum\IntCalcMod#1!10!=\z@
+ \else
+ \HyPsd@@CJKnumber{\IntCalcMod#1!10!}%
+ \fi
+ \fi
+ \fi
+}
+\def\HyPsd@CJKdigits#1{%
+ \ifx*#1\relax
+ \expandafter\HyPsd@@CJKdigits\expandafter\CJK@zero
+ \else
+ \HyPsd@@CJKdigits\CJK@null{#1}%
+ \fi
+}
+\def\HyPsd@@CJKdigits#1#2{%
+ \ifx\\#2\\%
+ \else
+ \HyPsd@@@CJKdigits#1#2\@nil
+ \fi
+}%
+\def\HyPsd@@@CJKdigits#1#2#3\@nil{%
+ \HyPsd@CJKdigit#1{#2}%
+ \ifx\\#3\\%
+ \expandafter\@gobble
+ \else
+ \expandafter\@firstofone
+ \fi
+ {%
+ \HyPsd@@@CJKdigits#1#3\@nil
+ }%
+}
+\def\HyPsd@CJKdigit#1#2{%
+ \ifcase#2 %
+ #1\or
+ \CJK@one\or\CJK@two\or\CJK@three\or\CJK@four\or
+ \CJK@five\or\CJK@six\or\CJK@seven\or\CJK@eight\or\CJK@nine
+ \fi
+}
+\def\HyPsd@inmathwarn#1#2{%
+ \ifx#2\expandafter
+ \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
+ \HyPsd@GLYPHERR
+ \expandafter\@gobble\string#1%
+ >%
+ \expandafter\expandafter\expandafter\HyPsd@EndWithElse
+ \else
+ \expandafter\expandafter\expandafter\HyPsd@GobbleFiFi
+ \fi
+ \else
+ \expandafter#2%
+ \fi
+}
+\def\HyPsd@GobbleFiFi#1\fi#2\fi{}
+\def\HyPsd@EndWithElse#1\else{\else}
+\def\HyPsd@add@accent#1#2{%
+ \HyPsd@GLYPHERR\expandafter\@gobble\string#1+\string#2>%
+ #2%
+}%
+\def\HyPsd@LetUnexpandableSpace#1{%
+ \expandafter\futurelet\expandafter#1\expandafter\@gobble\space\relax
+}
+\HyPsd@LetUnexpandableSpace\HyPsd@UnexpandableSpace
+\edef\HyPsd@XSPACE{\string#\string X}
+\edef\HyPsd@ITALCORR{\string#\string I}
+\edef\HyPsd@GLYPHERR{\string#\string G}
+\def\HyPsd@hspace#1{\HyPsd@@hspace#1*\END}
+\def\HyPsd@@hspace#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@hspacetest{#1}%
+ \else
+ \expandafter\HyPsd@hspacetest
+ \fi
+}
+\def\HyPsd@hspacetest#1{\ifdim#1>\z@\space\fi}
+\ltx@IfUndefined{tocsection}{%
+ \let\HyPsd@AMSclassfix\relax
+}{%
+ \def\HyPsd@AMSclassfix{%
+ \let\tocpart\HyPsd@tocsection
+ \let\tocchapter\HyPsd@tocsection
+ \let\tocappendix\HyPsd@tocsection
+ \let\tocsection\HyPsd@tocsection
+ \let\tocsubsection\HyPsd@tocsection
+ \let\tocsubsubsection\HyPsd@tocsection
+ \let\tocparagraph\HyPsd@tocsection
+ }%
+ \def\HyPsd@tocsection#1#2#3{%
+ \if @#2@\else\if @#1@\else#1 \fi#2. \fi
+ #3%
+ }%
+}
+\def\HyPsd@href#1#{\@secondoftwo}
+\def\HyPsd@ref#1{\HyPsd@@ref#1*\END}%
+\def\HyPsd@@ref#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@@@ref{#1}%
+ \else
+ \expandafter\HyPsd@@@ref
+ \fi
+}%
+\def\HyPsd@@@ref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ ??%
+ \else
+ \expandafter\expandafter\expandafter
+ \@car\csname r@#1\endcsname\@nil
+ \fi
+}
+\def\HyPsd@pageref#1{\HyPsd@@pageref#1*\END}
+\def\HyPsd@@pageref#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@@@pageref{#1}%
+ \else
+ \expandafter\HyPsd@@@pageref
+ \fi
+}
+\def\HyPsd@@@pageref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ ??%
+ \else
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\@car
+ \expandafter\expandafter\expandafter\@gobble
+ \csname r@#1\endcsname{}\@nil
+ \fi
+}
+\def\HyPsd@nameref#1{\HyPsd@@nameref#1*\END}
+\def\HyPsd@@nameref#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@@@nameref{#1}%
+ \else
+ \expandafter\HyPsd@@@nameref
+ \fi
+}
+\def\HyPsd@@@nameref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ ??%
+ \else
+ \expandafter\expandafter\expandafter\expandafter
+ \expandafter\expandafter\expandafter\@car
+ \expandafter\expandafter\expandafter\@gobbletwo
+ \csname r@#1\endcsname{}{}\@nil
+ \fi
+}
+\def\HyPsd@autoref#1{\HyPsd@@autoref#1*\END}
+\def\HyPsd@@autoref#1*#2\END{%
+ \ifx\\#2\\%
+ \HyPsd@@@autoref{#1}%
+ \else
+ \expandafter\HyPsd@@@autoref
+ \fi
+}
+\def\HyPsd@@@autoref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ ??%
+ \else
+ \expandafter\expandafter\expandafter\HyPsd@autorefname
+ \csname r@#1\endcsname{}{}{}{}\@nil
+ \expandafter\expandafter\expandafter
+ \@car\csname r@#1\endcsname\@nil
+ \fi
+}
+\def\HyPsd@autorefname#1#2#3#4#5\@nil{%
+ \ifx\\#4\\%
+ \else
+ \HyPsd@@autorefname#4.\@nil
+ \fi
+}
+\def\HyPsd@@autorefname#1.#2\@nil{%
+ \ltx@IfUndefined{#1autorefname}{%
+ \ltx@IfUndefined{#1name}{%
+ }{%
+ \csname#1name\endcsname\space
+ }%
+ }{%
+ \csname#1autorefname\endcsname\space
+ }%
+}
+\begingroup
+ \def\x#1#2{%
+ \endgroup
+ \let#1\def
+ \def\HyPsd@DefCommand##1##2##{%
+ #1%
+ \expandafter\noexpand
+ \csname\expandafter\@gobble\string##1\@empty\endcsname
+ \@gobble
+ }%
+ \let#2\let
+ \def\HyPsd@@LetCommand##1{%
+ \expandafter\ifx\csname##1\expandafter\endcsname
+ \csname iftrue\endcsname
+ \pdfstringdefWarn\let
+ \expandafter\@gobble
+ \else
+ \expandafter\ifx\csname##1\expandafter\endcsname
+ \csname iffalse\endcsname
+ \pdfstringdefWarn\let
+ \expandafter\expandafter\expandafter\@gobble
+ \else
+ #2%
+ \expandafter\noexpand
+ \csname##1\expandafter\expandafter\expandafter\endcsname
+ \fi
+ \fi
+ }%
+ }%
+\expandafter\x\csname <def>-command\expandafter\endcsname
+ \csname <let>-command\endcsname
+\def\HyPsd@LetCommand#1{%
+ \expandafter\expandafter\expandafter\HyPsd@@LetCommand
+ \expandafter\expandafter\expandafter{%
+ \expandafter\@gobble\string#1\@empty
+ }%
+}
+\def\HyPsd@ifnextchar#1{%
+ \pdfstringdefWarn#1%
+ \expandafter\@gobbletwo\@gobble
+}
+\def\HyPsd@protected@testopt#1{%
+ \pdfstringdefWarn#1%
+ \@gobbletwo
+}
+\def\HyPsd@Warning#1{%
+ \begingroup
+ \let\space\ltx@space
+ \Hy@Warning{#1}%
+ \endgroup
+}
+\RequirePackage{etexcmds}[2007/09/09]
+\ifetex@unexpanded
+ \expandafter\@secondoftwo
+\else
+ \expandafter\@firstoftwo
+\fi
+{%
+ \def\HyPsd@ProtectSpaces#1{%
+ \iftrue
+ \expandafter\HyPsd@@ProtectSpacesFi
+ \expandafter|\expandafter\@empty#1| \HyPsd@End#1%
+ \fi
+ }%
+ \def\HyPsd@@ProtectSpacesFi#1 #2\HyPsd@End#3\fi{%
+ \fi
+ \ifx\scrollmode#2\scrollmode
+ \HyPsd@RemoveMask#1\HyPsd@End#3%
+ \else
+ \gdef#3{#1\HyPsd@UnexpandableSpace#2}%
+ \expandafter\HyPsd@@ProtectSpacesFi#3\HyPsd@End#3%
+ \fi
+ }%
+ \def\HyPsd@RemoveMask|#1|\HyPsd@End#2{%
+ \toks@\expandafter{#1}%
+ \xdef#2{\the\toks@}%
+ }%
+}{%
+ \let\HyPsd@fi\fi
+ \def\HyPsd@ProtectSpaces#1{%
+ \xdef#1{%
+ \iftrue
+ \expandafter\HyPsd@@ProtectSpacesFi
+ \expandafter|\expandafter\@empty#1| %
+ \HyPsd@fi
+ }%
+ \expandafter\HyPsd@RemoveMask#1\HyPsd@End#1%
+ }%
+ \def\HyPsd@@ProtectSpacesFi#1 #2\HyPsd@fi{%
+ \fi
+ \etex@unexpanded{#1}%
+ \ifx\scrollmode#2\scrollmode
+ \else
+ \HyPsd@@ProtectSpacesFi\HyPsd@UnexpandableSpace#2%
+ \HyPsd@fi
+ }%
+ \def\HyPsd@RemoveMask|#1|\HyPsd@End#2{%
+ \xdef#2{\etex@unexpanded\expandafter{#1}}%
+ }%
+}
+\def\HyPsd@RemoveBraces#1{%
+ \ifx\scrollmode#1\scrollmode
+ \else
+ \HyPsd@@RemoveBracesFi#1\HyPsd@End{#1}%
+ \fi
+}
+\def\HyPsd@@RemoveBracesFi#1#2\HyPsd@End#3\fi{%
+ \fi
+ \def\Hy@temp@A{#1#2}%
+ \def\Hy@temp@B{#3}%
+ \ifx\Hy@temp@A\Hy@temp@B
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String#1%
+ }%
+ \ifx\scrollmode#2\scrollmode
+ \else
+ \Hy@ReturnAfterFiFiEnd{%
+ \HyPsd@RemoveBraces{#2}%
+ }%
+ \fi
+ \else
+ \def\Hy@temp@A{#1}%
+ \HyPsd@AppendItalcorr\HyPsd@String
+ \ifx\Hy@temp@A\@empty
+ \Hy@ReturnAfterElseFiFiEnd{%
+ \HyPsd@RemoveBraces{#2}%
+ }%
+ \else
+ \HyPsd@ProtectSpaces\Hy@temp@A
+ \HyPsd@AppendItalcorr\Hy@temp@A
+ \Hy@ReturnAfterFiFiEnd{%
+ \expandafter\HyPsd@RemoveBraces\expandafter
+ {\Hy@temp@A#2}%
+ }%
+ \fi
+ \fi
+ \Hy@ReturnEnd
+}
+\def\HyPsd@AppendItalcorr#1{%
+ \expandafter\HyPsd@@AppendItalcorr\expandafter{\/}#1%
+}
+\def\HyPsd@@AppendItalcorr#1#2{%
+ \expandafter\def\expandafter#2\expandafter{#2#1}%
+}
+\def\HyPsd@CheckCatcodes#1#2\HyPsd@End{%
+ \global\let\HyPsd@Rest\relax
+ \ifcat\relax\noexpand#1\relax
+ \ifx#1\protect
+ \else
+ \ifx#1\penalty
+ \setbox\z@=\hbox{%
+ \afterassignment\HyPsd@AfterCountRemove
+ \count@=#2\HyPsd@End
+ }%
+ \else
+ \ifx#1\kern
+ \setbox\z@=\hbox{%
+ \afterassignment\HyPsd@AfterDimenRemove
+ \dimen@=#2\HyPsd@End
+ }%
+ \else
+ \ifx#1\hskip
+ \setbox\z@=\hbox{%
+ \afterassignment\HyPsd@AfterSkipRemove
+ \skip@=#2\HyPsd@End
+ }%
+ \else
+ \HyPsd@CatcodeWarning{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \else
+ \ifcat#1A% letter
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String#1%
+ }%
+ \else
+ \ifcat#1 % SPACE
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String\HyPsd@SPACEOPTI
+ }%
+ \else
+ \ifcat$#1%
+ \HyPsd@CatcodeWarning{math shift}%
+ \else
+ \ifcat%
+ \HyPsd@CatcodeWarning{alignment tab}%
+ \else
+ \ifcat^#1%
+ \HyPsd@CatcodeWarning{superscript}%
+ \else
+ \ifcat_#1%
+ \HyPsd@CatcodeWarning{subscript}%
+ \else
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String#1%
+ }%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifx\HyPsd@Rest\relax
+ \ifx\scrollmode#2\scrollmode
+ \else
+ \Hy@ReturnAfterFiFiEnd{%
+ \HyPsd@CheckCatcodes#2\HyPsd@End
+ }%
+ \fi
+ \else
+ \ifx\HyPsd@Rest\@empty
+ \else
+ \Hy@ReturnAfterFiFiEnd{%
+ \expandafter\HyPsd@CheckCatcodes\HyPsd@Rest\HyPsd@End
+ }%
+ \fi
+ \fi
+ \Hy@ReturnEnd
+}
+\def\HyPsd@AfterCountRemove#1\HyPsd@End{%
+ \gdef\HyPsd@Rest{#1}%
+}
+\def\HyPsd@AfterDimenRemove#1\HyPsd@End{%
+ \ifdim\ifx\HyPsd@String\@empty\z@\else\dimen@\fi>1ex %
+ \HyPsd@ReplaceSpaceWarning{\string\kern\space\the\dimen@}%
+ \gdef\HyPsd@Rest{\HyPsd@UnexpandableSpace #1}%
+ \else
+ \ifdim\dimen@=\z@
+ \else
+ \HyPsd@RemoveSpaceWarning{\string\kern\space\the\dimen@}%
+ \fi
+ \gdef\HyPsd@Rest{#1}%
+ \fi
+}
+\def\HyPsd@AfterSkipRemove#1\HyPsd@End{%
+ \ifdim\ifx\HyPsd@String\@empty\z@\else\skip@\fi>1ex %
+ \HyPsd@ReplaceSpaceWarning{\string\hskip\space\the\skip@}%
+ \gdef\HyPsd@Rest{\HyPsd@UnexpandableSpace #1}%
+ \else
+ \ifdim\skip@=\z@
+ \else
+ \HyPsd@RemoveSpaceWarning{\string\kern\space\the\skip@}%
+ \fi
+ \gdef\HyPsd@Rest{#1}%
+ \fi
+}
+\def\HyPsd@CatcodeWarning#1{%
+ \HyPsd@Warning{%
+ Token not allowed in a PDF string (%
+ \ifHy@unicode
+ Unicode%
+ \else
+ PDFDocEncoding%
+ \fi
+ ):%
+ \MessageBreak removing `\HyPsd@RemoveCmdPrefix#1'%
+ }%
+}
+\begingroup
+ \catcode`\|=0 %
+ \catcode`\\=12 %
+ |gdef|HyPsd@RemoveCmdPrefix#1{%
+ |expandafter|HyPsd@@RemoveCmdPrefix
+ |string#1|@empty\<>-|@empty|@empty
+ }%
+ |gdef|HyPsd@@RemoveCmdPrefix#1\<>-#2|@empty#3|@empty{#1#2}%
+|endgroup
+\def\HyPsd@RemoveSpaceWarning#1{%
+ \HyPsd@Warning{%
+ Token not allowed in a PDF string (%
+ \ifHy@unicode
+ Unicode%
+ \else
+ PDFDocEncoding%
+ \fi
+ ):%
+ \MessageBreak #1\MessageBreak
+ removed%
+ }%
+}
+\def\HyPsd@ReplaceSpaceWarning#1{%
+ \HyPsd@Warning{%
+ Token not allowed in a PDF string (%
+ \ifHy@unicode
+ Unicode%
+ \else
+ PDFDocEncoding%
+ \fi
+ ):%
+ \MessageBreak #1\MessageBreak
+ replaced by space%
+ }%
+}
+\def\HyPsd@GlyphProcess#1\relax#2\@empty{%
+ \expandafter\def\expandafter\HyPsd@String\expandafter{%
+ \HyPsd@String#1%
+ }%
+ \ifx\\#2\\%
+ \else
+ \ltx@ReturnAfterFi{%
+ \HyPsd@GlyphProcessWarning#2\@empty
+ }%
+ \fi
+}
+\def\HyPsd@GlyphProcessWarning#1>#2\@empty{%
+ \HyPsd@@GlyphProcessWarning#1++>%
+ \HyPsd@GlyphProcess#2\@empty
+}
+\def\HyPsd@@GlyphProcessWarning#1+#2+#3>{%
+ \ifx\\#2\\%
+ \HyPsd@Warning{%
+ Glyph not defined in %
+ P\ifHy@unicode U\else D1\fi\space encoding,\MessageBreak
+ removing `\@backslashchar#1'%
+ }%
+ \else
+ \HyPsd@Warning{%
+ Composite letter `\@backslashchar#1+#2'\MessageBreak
+ not defined in P\ifHy@unicode U\else D1\fi\space encoding,%
+ \MessageBreak
+ removing `\@backslashchar#1'%
+ }%
+ \fi
+}
+\def\HyPsd@spaceopti#1{ % first space
+ \ifx\HyPsd@spaceopti#1%
+ \040%
+ \else
+ #1%
+ \fi
+}%
+\def\HyPsd@Subst#1#2#3{%
+ \def\HyPsd@@ReplaceFi##1#1##2\END\fi{%
+ \fi
+ ##1%
+ \ifx\scrollmode##2\scrollmode
+ \else
+ #2%
+ \HyPsd@@ReplaceFi##2\END
+ \fi
+ }%
+ \xdef#3{%
+ \iftrue
+ \expandafter\HyPsd@@ReplaceFi#3#1\END
+ \fi
+ }%
+}
+\def\HyPsd@StringSubst#1{%
+ \expandafter\HyPsd@Subst\expandafter{\string#1}%
+}
+\begingroup
+ \lccode`\!=`\%%
+ \lccode`\|=`\\%
+ \lccode`\(=`\{%
+ \lccode`\)=`\}%
+ \lccode`0=\ltx@zero
+ \lccode`1=\ltx@zero
+ \lccode`3=\ltx@zero
+ \lccode`4=\ltx@zero
+ \lccode`5=\ltx@zero
+ \lccode`7=\ltx@zero
+\lowercase{\endgroup
+ \def\HyPsd@EscapeTeX#1{%
+ \HyPsd@Subst!{|045}#1%
+ \HyPsd@Subst({|173}#1%
+ \HyPsd@Subst){|175}#1%
+ }%
+}
+\def\HyPsd@doxspace#1{%
+ \ifx#1\relax\else
+ \ifx#1.\else
+ \ifx#1:\else
+ \ifx#1,\else
+ \ifx#1;\else
+ \ifx#1!\else
+ \ifx#1?\else
+ \ifx#1/\else
+ \ifx#1-\else
+ \ifx#1'\else
+ \HyPsd@SPACEOPTI
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ #1%
+}%
+\begingroup
+ \catcode`\|=0 %
+ \catcode`\\=12 %
+ |gdef|HyPsd@ConvertToUnicode#1{%
+ |xdef#1{%
+ |expandafter|HyPsd@DoConvert#1|@empty|@empty|@empty
+ }%
+ |ifx#1|@empty
+ |else
+ |xdef#1{%
+ \376\377%
+ #1%
+ }%
+ |fi
+ }%
+ |gdef|HyPsd@DoConvert#1{%
+ |ifx#1|@empty
+ |else
+ |ltx@ReturnAfterFi{%
+ |ifx#1\%%
+ \%%
+ |expandafter|HyPsd@DoEscape
+ |else
+ |HyPsd@Char{#1}%
+ |expandafter|HyPsd@DoConvert
+ |fi
+ }%
+ |fi
+ }%
+ |gdef|HyPsd@DoEscape#1{%
+ |ifx#19%
+ |expandafter|HyPsd@GetTwoBytes
+ |else
+ |ltx@ReturnAfterFi{%
+ |ifx#18%
+ 00%
+ |expandafter|HyPsd@GetTwoBytes
+ |else
+ #1%
+ |expandafter|HyPsd@GetOneByte
+ |fi
+ }%
+ |fi
+ }%
+ |gdef|HyPsd@GetTwoBytes#1\#2#3#4{%
+ #1\#2#3#4%
+ |HyPsd@DoConvert
+ }%
+ |gdef|HyPsd@GetOneByte#1#2{%
+ #1#2%
+ |HyPsd@DoConvert
+ }%
+|endgroup
+\def\HyPsd@GetNextTwoTokens#1#2#3\END#4{%
+ \xdef#4{#4#1#2}%
+ \HyPsd@@ConvertToUnicode#3\END#4%
+}
+\begingroup
+ \catcode0=9 %
+ \catcode`\^=7 %
+ \catcode`\^^^=12 %
+ \def\x{^^^^0000}%
+\expandafter\endgroup
+\ifx\x\@empty
+ \def\HyPsd@Char#1{%
+ \ifnum`#1<128 %
+ \@backslashchar 000#1%
+ \else
+ \ifnum`#1<65536 %
+ \expandafter\HyPsd@CharTwoByte\number`#1!%
+ \else
+ \expandafter\expandafter\expandafter\HyPsd@CharSurrogate
+ \intcalcSub{`#1}{65536}!%
+ \fi
+ \fi
+ }%
+ \def\HyPsd@CharTwoByte#1!{%
+ \expandafter\expandafter\expandafter\HyPsd@CharOctByte
+ \IntCalcDiv#1!256!!%
+ \expandafter\expandafter\expandafter\HyPsd@CharOctByte
+ \IntCalcMod#1!256!!%
+ }%
+ \def\HyPsd@CharOctByte#1!{%
+ \@backslashchar
+ \IntCalcDiv#1!64!%
+ \intcalcDiv{\IntCalcMod#1!64!}{8}%
+ \IntCalcMod#1!8!%
+ }%
+ \def\HyPsd@CharSurrogate#1!{%
+ \@backslashchar 33%
+ \IntCalcDiv#1!262144!%
+ \expandafter\expandafter\expandafter\HyPsd@CharOctByte
+ \intcalcDiv{\IntCalcMod#1!262144!}{1024}!%
+ \@backslashchar 33%
+ \expandafter\expandafter\expandafter\IntCalcAdd
+ \intcalcDiv{\IntCalcMod#1!1024!}{256}!4!%
+ \expandafter\expandafter\expandafter\HyPsd@CharOctByte
+ \IntCalcMod#1!256!!%
+ }%
+\else
+ \def\HyPsd@Char#1{%
+ \@backslashchar 000#1%
+ }%
+\fi
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname numexpr\endcsname\relax
+ \let\HyPsd@UTFviii\relax
+\else
+ \begingroup
+ \lccode`\~=`^^f4\relax
+ \lowercase{\endgroup
+ \def\HyPsd@UTFviii{%
+ \let\UTFviii@two@octets\HyPsd@UTFviii@two
+ \let\UTFviii@three@octets\HyPsd@UTFviii@three
+ \let\UTFviii@four@octets\HyPsd@UTFviii@four
+ \ifx~\HyPsd@UTFviii@ccxliv@undef
+ \let~\HyPsd@UTFviii@ccxliv@def
+ \fi
+ \let\unichar\HyPsd@unichar
+ }%
+ }%
+ \def\HyPsd@UTFviii@ccxliv@undef{\@inpenc@undefined@{utf8}}%
+ \edef\HyPsd@UTFviii@ccxliv@def{%
+ \noexpand\UTFviii@four@octets\string ^^f4%
+ }%
+ \def\HyPsd@UTFviii@two#1#2{%
+ \expandafter\HyPsd@UTFviii@@two
+ \number\dimexpr.25\dimexpr`#1sp\expandafter\relax\expandafter|%
+ \number`#1\expandafter|%
+ \number\dimexpr.125\dimexpr`#2sp\expandafter\relax\expandafter|%
+ \number`#2 \@nil
+ }%
+ \def\HyPsd@UTFviii@@two#1|#2|#3|#4\@nil{%
+ \expandafter\8%
+ \number\numexpr #1-48\expandafter\relax
+ \csname\number\numexpr #2-4*#1\relax\expandafter\endcsname
+ \number\numexpr #3-8*%
+ \number\dimexpr.125\dimexpr#3sp\relax\relax\expandafter\relax
+ \number\numexpr #4-8*#3\relax
+ }%
+ \def\HyPsd@UTFviii@three#1#2#3{%
+ \expandafter\HyPsd@UTFviii@@three
+ \number\dimexpr.25\dimexpr`#1sp\expandafter\relax\expandafter|%
+ \number`#1\expandafter|%
+ \number\ifnum\numexpr`#2-128\relax <32 0\else 1\fi\expandafter|%
+ \number\dimexpr.25\dimexpr`#2sp\expandafter\relax\expandafter|%
+ \number`#2\expandafter|%
+ \number\dimexpr.125\dimexpr`#3sp\expandafter\relax\expandafter|%
+ \number`#3 \@nil
+ }%
+ \def\HyPsd@UTFviii@@three#1|#2|#3|#4|#5|#6|#7\@nil{%
+ \expandafter\9%
+ \number\numexpr #1-56\expandafter\relax
+ \number\numexpr 2*(#2-4*#1)+#3\expandafter\relax
+ \number\numexpr #4 - 32 -\ifcase#3 0\else 8\fi\expandafter\relax
+ \csname\number\numexpr #5-4*#4\relax\expandafter\endcsname
+ \number\numexpr #6-16\expandafter\relax
+ \number\numexpr #7-8*#6\relax
+ }%
+ \def\HyPsd@UTFviii@four#1#2{%
+ \expandafter\HyPsd@@UTFviii@four\number
+ \numexpr-1+(`#1-240)*4+\dimexpr.0625\dimexpr`#2sp-128sp%
+ \expandafter|\number
+ \numexpr`#2-16*\dimexpr.0625\dimexpr`#2sp|%
+ }%
+ \def\HyPsd@@UTFviii@four#1|#2|#3{%
+ \933\number\dimexpr.25\dimexpr#1sp\relax\relax
+ \csname\number\numexpr#1-4*\dimexpr.25\dimexpr#1sp\endcsname
+ \ifodd#2 %
+ \number\numexpr(#2-1)/2\relax
+ \else
+ \number\numexpr#2/2\relax
+ \fi
+ \number\numexpr\ifodd#2 4+\fi
+ \dimexpr.0625\dimexpr`#3sp-128sp\relax\relax\relax
+ \933%
+ \expandafter\HyPsd@@@UTFviii@four\number
+ \numexpr`#3-16*\dimexpr.0625\dimexpr`#3sp|%
+ }%
+ \def\HyPsd@@@UTFviii@four#1|#2{%
+ \number\numexpr4+\dimexpr.25\dimexpr#1sp\relax\relax\relax
+ \csname\number\numexpr#1-4*\dimexpr.25\dimexpr#1sp\endcsname
+ \number\dimexpr.125\dimexpr`#2sp-128sp\relax\relax
+ \number\numexpr`#2-8*\dimexpr.125\dimexpr`#2sp\relax\relax\relax
+ }%
+ \def\HyPsd@unichar#1{%
+ \ifHy@unicode
+ \ifnum#1>"10FFFF %
+ \HyPsd@UnicodeReplacementCharacter % illegal
+ \else
+ \ifnum#1>"FFFF %
+ \expandafter\HyPsd@unichar\expandafter{%
+ \number\numexpr 55296+%
+ \dimexpr.0009765625\dimexpr\number#1sp-\p@
+ \relax\relax\relax
+ }%
+ \expandafter\HyPsd@unichar\expandafter{%
+ \number\numexpr#1-9216%
+ -1024*\dimexpr.0009765625\dimexpr\number#1sp-\p@
+ \relax\relax\relax
+ }%
+ \else
+ \ifnum#1>"7FF %
+ \9%
+ \expandafter\HyPsd@unichar@first@byte\expandafter{%
+ \number
+ \dimexpr.00390625\dimexpr\number#1sp\relax\relax
+ }%
+ \else
+ \8%
+ \number\dimexpr.00390625\dimexpr\number#1sp\relax\relax
+ \fi
+ \expandafter\HyPsd@unichar@second@byte\expandafter{%
+ \number
+ \numexpr#1-256*\number
+ \dimexpr.00390625\dimexpr\number#1sp\relax\relax\relax
+ }%
+ \fi
+ \fi
+ \else
+ .% unsupported (Unicode -> PDF Doc Encoding)
+ \fi
+ }%
+ \def\HyPsd@UnicodeReplacementCharacter{\9377\375}%
+ \def\HyPsd@unichar@first@byte#1{%
+ \number\dimexpr.015625\dimexpr#1sp\relax\relax
+ \expandafter\HyPsd@unichar@octtwo\expandafter{%
+ \number
+ \numexpr#1-64*\number\dimexpr.015625\dimexpr#1sp%
+ \relax\relax\relax
+ }%
+ }%
+ \def\HyPsd@unichar@second@byte#1{%
+ \csname\number\dimexpr.015625\dimexpr#1sp\relax\relax\endcsname
+ \expandafter\HyPsd@unichar@octtwo\expandafter{%
+ \number
+ \numexpr#1-64*\number\dimexpr.015625\dimexpr#1sp%
+ \relax\relax\relax
+ }%
+ }%
+ \def\HyPsd@unichar@octtwo#1{%
+ \number\dimexpr.125\dimexpr#1sp\relax\relax
+ \number\numexpr#1-8*\number\dimexpr.125\dimexpr#1sp%
+ \relax\relax\relax
+ }%
+\fi
+\def\HyPsd@utf@viii@undeferr#1#2#3#4#5#6{%
+ \ifx\@gobble#1%
+ \else
+ [Please insert \textbackslash PrerenderUnicode%
+ \textbraceleft#1\textbraceright\space
+ into preamble]%
+ \fi
+}%
+\@ifclassloaded{memoir}{%
+ \Hy@AtEndOfPackage{\RequirePackage{memhfixc}}%
+}{}
+\@ifpackageloaded{subfigure}{%
+ \ltx@IfUndefined{sub@label}{%
+ \Hy@hypertexnamesfalse
+ }{%
+ \renewcommand*{\sub@label}[1]{%
+ \@bsphack
+ \subfig@oldlabel{#1}%
+ \if@filesw
+ \begingroup
+ \edef\@currentlabstr{%
+ \expandafter\strip@prefix\meaning\@currentlabelname
+ }%
+ \protected@write\@auxout{}{%
+ \string\newlabel{sub@#1}{%
+ {\@nameuse{@@thesub\@captype}}%
+ {\thepage}%
+ {%
+ \expandafter\strip@period\@currentlabstr
+ \relax.\relax\@@@%
+ }%
+ {\@currentHref}%
+ {}%
+ }%
+ }%
+ \endgroup
+ \fi
+ \@esphack
+ }%
+ \@ifpackagelater{subfigure}{2002/03/26}{}{%
+ \providecommand*{\toclevel@subfigure}{1}%
+ \providecommand*{\toclevel@subtable}{1}%
+ }%
+ }%
+}{}
+\ltx@IfUndefined{XR@addURL}{%
+}{%
+ \def\XR@addURL#1{\XR@@dURL#1{}{}{}{}\\}%
+ \def\XR@@dURL#1#2#3#4#5\\{%
+ {#1}{#2}%
+ \if!#4!%
+ \else
+ {#3}{#4}{\XR@URL}%
+ \fi
+ }%
+}
+\def\Hy@true{true}
+\def\Hy@false{false}
+\let\literalps@out\@gobble
+\newcommand\pdfbookmark[3][]{}
+\def\Acrobatmenu#1#2{\leavevmode#2}
+\def\Hy@writebookmark#1#2#3#4#5{}%
+\let\HyperRaiseLinkHook\@empty
+\def\HyperRaiseLinkDefault{\baselineskip}
+\newcount\Hy@SavedSpaceFactor
+\def\Hy@SaveSpaceFactor{%
+ \global\Hy@SavedSpaceFactor=\ifhmode\spacefactor\else\z@\fi
+}
+\def\Hy@RestoreSpaceFactor{%
+ \relax
+ \ifhmode
+ \ifnum\Hy@SavedSpaceFactor>\z@
+ \spacefactor=\Hy@SavedSpaceFactor
+ \fi
+ \fi
+}
+\def\Hy@SaveSavedSpaceFactor{%
+ \edef\Hy@RestoreSavedSpaceFactor{%
+ \global\Hy@SavedSpaceFactor=\the\Hy@SavedSpaceFactor\relax
+ }%
+}
+\def\Hy@raisedlink#1{%
+ \ifvmode
+ #1%
+ \else
+ \Hy@SaveSpaceFactor
+ \penalty\@M
+ \smash{%
+ \begingroup
+ \let\HyperRaiseLinkLength\@tempdima
+ \setlength\HyperRaiseLinkLength\HyperRaiseLinkDefault
+ \HyperRaiseLinkHook
+ \expandafter\endgroup
+ \expandafter\raise\the\HyperRaiseLinkLength\hbox{%
+ \Hy@RestoreSpaceFactor
+ #1%
+ \Hy@SaveSpaceFactor
+ }%
+ }%
+ \Hy@RestoreSpaceFactor
+ \fi
+}
+\def\Hy@SaveLastskip{%
+ \let\Hy@RestoreLastskip\relax
+ \ifvmode
+ \ifdim\lastskip=\z@
+ \let\Hy@RestoreLastskip\nobreak
+ \else
+ \begingroup
+ \skip@=-\lastskip
+ \edef\x{%
+ \endgroup
+ \def\noexpand\Hy@RestoreLastskip{%
+ \noexpand\ifvmode
+ \noexpand\nobreak
+ \vskip\the\skip@
+ \vskip\the\lastskip\relax
+ \noexpand\fi
+ }%
+ }%
+ \x
+ \fi
+ \else
+ \ifhmode
+ \ifdim\lastskip=\z@
+ \let\Hy@RestoreLastskip\nobreak
+ \else
+ \begingroup
+ \skip@=-\lastskip
+ \edef\x{%
+ \endgroup
+ \def\noexpand\Hy@RestoreLastskip{%
+ \noexpand\ifhmode
+ \noexpand\nobreak
+ \hskip\the\skip@
+ \hskip\the\lastskip\relax
+ \noexpand\fi
+ }%
+ }%
+ \x
+ \fi
+ \fi
+ \fi
+}%
+\SetupKeyvalOptions{%
+ family=Hyp,%
+ prefix=HyOpt%
+}
+\def\IfHyperBooleanExists#1{%
+ \ltx@ifundefined{Hy@#1false}\ltx@secondoftwo{%
+ \ltx@ifundefined{KV@Hyp@#1@default}\ltx@secondoftwo\ltx@firstoftwo
+ }%
+}
+\@namedef{KV@Hyp@stoppedearly@default}{}
+\def\IfHyperBoolean#1{%
+ \IfHyperBooleanExists{#1}{%
+ \csname ifHy@#1\endcsname
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ }\ltx@secondoftwo
+}
+\def\Hy@boolkey#1#2{%
+ \edef\Hy@tempa{#2}%
+ \lowercase\expandafter{%
+ \expandafter\def\expandafter\Hy@tempa\expandafter{\Hy@tempa}%
+ }%
+ \ifx\Hy@tempa\@empty
+ \let\Hy@tempa\Hy@true
+ \fi
+ \ifx\Hy@tempa\Hy@true
+ \else
+ \ifx\Hy@tempa\Hy@false
+ \else
+ \let\Hy@tempa\relax
+ \fi
+ \fi
+ \ifx\Hy@tempa\relax
+ \Hy@WarnOptionValue{#2}{#1}{`true' or 'false'}%
+ \else
+ \Hy@Info{Option `#1' set `\Hy@tempa'}%
+ \csname Hy@#1\Hy@tempa\endcsname
+ \fi
+}
+\def\Hy@WarnOptionValue#1#2#3{%
+ \Hy@Warning{%
+ Unexpected value `#1'\MessageBreak
+ of option `#2' instead of\MessageBreak
+ #3%
+ }%
+}
+\def\Hy@DisableOption#1{%
+ \ltx@ifundefined{KV@Hyp@#1@default}{%
+ \define@key{Hyp}{#1}%
+ }{%
+ \define@key{Hyp}{#1}[]%
+ }%
+ {\Hy@WarnOptionDisabled{#1}}%
+}
+\def\Hy@WarnOptionDisabled#1{%
+ \Hy@Warning{%
+ Option `#1' has already been used,\MessageBreak
+ setting the option has no effect%
+ }%
+}
+\def\Hy@CheckOptionValue#1#2#3{%
+ \begingroup
+ \edef\x{#1}%
+ \@onelevel@sanitize\x
+ \let\y=y%
+ \def\do##1##2{%
+ \def\z{##1}%
+ \@onelevel@sanitize\z
+ \ifx\x\z
+ \let\y=n%
+ \let\do\@gobbletwo
+ \fi
+ }%
+ #3%
+ \ifx\y y%
+ \def\do##1##2{%
+ * `##1'%
+ \ifx\\##2\\\else\space(##2)\fi
+ \MessageBreak
+ }%
+ \Hy@Warning{%
+ Values of option `#2':\MessageBreak
+ #3%
+ * An empty value disables the option.\MessageBreak
+ Unknown value `\x'%
+ }%
+ \fi
+ \endgroup
+}
+\def\Hy@DefNameKey#1{%
+ \expandafter\Hy@@DefNameKey\csname @#1\endcsname{#1}%
+}
+\def\Hy@@DefNameKey#1#2#3{%
+ \define@key{Hyp}{#2}{%
+ \edef#1{##1}%
+ \ifx#1\@empty
+ \else
+ \Hy@CheckOptionValue{##1}{#2}{#3}%
+ \fi
+ }%
+ \let#1\@empty
+}
+\def\Hy@UseNameKey#1#2{%
+ \ifx#2\@empty
+ \else
+ /#1/#2%
+ \fi
+}
+\define@key{Hyp}{implicit}[true]{%
+ \Hy@boolkey{implicit}{#1}%
+}
+\define@key{Hyp}{draft}[true]{%
+ \Hy@boolkey{draft}{#1}%
+}
+\define@key{Hyp}{final}[true]{%
+ \Hy@boolkey{final}{#1}%
+}
+\let\KV@Hyp@nolinks\KV@Hyp@draft
+\def\Hy@ObsoletePaperOption#1{%
+ \Hy@WarningNoLine{%
+ Option `#1' is no longer used%
+ }%
+ \define@key{Hyp}{#1}[true]{}%
+}
+\def\Hy@temp#1{%
+ \define@key{Hyp}{#1}[true]{%
+ \Hy@ObsoletePaperOption{#1}%
+ }%
+}
+\Hy@temp{a4paper}
+\Hy@temp{a5paper}
+\Hy@temp{b5paper}
+\Hy@temp{letterpaper}
+\Hy@temp{legalpaper}
+\Hy@temp{executivepaper}
+\define@key{Hyp}{setpagesize}[true]{%
+ \Hy@boolkey{setpagesize}{#1}%
+}
+\define@key{Hyp}{debug}[true]{%
+ \Hy@boolkey{debug}{#1}%
+}
+\define@key{Hyp}{linktocpage}[true]{%
+ \Hy@boolkey{linktocpage}{#1}%
+ \ifHy@linktocpage
+ \let\Hy@linktoc\Hy@linktoc@page
+ \else
+ \let\Hy@linktoc\Hy@linktoc@section
+ \fi
+}
+\chardef\Hy@linktoc@none=0 %
+\chardef\Hy@linktoc@section=1 %
+\chardef\Hy@linktoc@page=2 %
+\chardef\Hy@linktoc@all=3 %
+\ifHy@linktocpage
+ \let\Hy@linktoc\Hy@linktoc@page
+\else
+ \let\Hy@linktoc\Hy@linktoc@section
+\fi
+\define@key{Hyp}{linktoc}{%
+ \@ifundefined{Hy@linktoc@#1}{%
+ \Hy@Warning{%
+ Unexpected value `#1' of\MessageBreak
+ option `linktoc' instead of `none',\MessageBreak
+ `section', `page' or `all'%
+ }%
+ }{%
+ \expandafter\let\expandafter\Hy@linktoc
+ \csname Hy@linktoc@#1\endcsname
+ }%
+}
+\define@key{Hyp}{extension}{\def\XR@ext{#1}}
+\let\XR@ext\relax
+\define@key{Hyp}{verbose}[true]{%
+ \Hy@boolkey{verbose}{#1}%
+}
+\define@key{Hyp}{typexml}[true]{%
+ \Hy@boolkey{typexml}{#1}%
+}
+\define@key{Hyp}{raiselinks}[true]{%
+ \Hy@boolkey{raiselinks}{#1}%
+}
+\def\Hy@setbreaklinks#1{%
+ \csname breaklinks#1\endcsname
+}
+\def\Hy@breaklinks@unsupported{%
+ \ifx\Hy@setbreaklinks\@gobble
+ \ifHy@breaklinks
+ \Hy@WarningNoLine{%
+ You have enabled option `breaklinks'.\MessageBreak
+ But driver `\Hy@driver.def' does not suppport this.\MessageBreak
+ Expect trouble with the link areas of broken links%
+ }%
+ \fi
+ \fi
+}
+\define@key{Hyp}{breaklinks}[true]{%
+ \Hy@boolkey{breaklinks}{#1}%
+ \let\Hy@setbreaklinks\@gobble
+}
+\define@key{Hyp}{localanchorname}[true]{%
+ \Hy@boolkey{localanchorname}{#1}%
+}
+\define@key{Hyp}{pageanchor}[true]{%
+ \Hy@boolkey{pageanchor}{#1}%
+}
+\define@key{Hyp}{plainpages}[true]{%
+ \Hy@boolkey{plainpages}{#1}%
+}
+\define@key{Hyp}{naturalnames}[true]{%
+ \Hy@boolkey{naturalnames}{#1}%
+}
+\define@key{Hyp}{hypertexnames}[true]{%
+ \Hy@boolkey{hypertexnames}{#1}%
+}
+\define@key{Hyp}{nesting}[true]{%
+ \Hy@boolkey{nesting}{#1}%
+}
+\define@key{Hyp}{unicode}[true]{%
+ \Hy@boolkey{unicode}{#1}%
+ \ifHy@unicode
+ \def\HyPsd@pdfencoding{unicode}%
+ \HyPsd@LoadUnicode
+ \else
+ \def\HyPsd@pdfencoding{pdfdoc}%
+ \fi
+}
+\def\HyPsd@LoadUnicode{%
+ \@ifundefined{T@PU}{%
+ \input{puenc.def}%
+ \HyLinguex@Restore
+ }{}%
+ \DeclareFontFamily{PU}{pdf}{}%
+ \DeclareFontShape{PU}{pdf}{m}{n}{ <-> cmr10 }{}%
+ \DeclareFontSubstitution{PU}{pdf}{m}{n}%
+ \global\let\HyPsd@LoadUnicode\relax
+}
+\Hy@AtBeginDocument{%
+ \ifx\HyPsd@LoadUnicode\relax
+ \else
+ \def\HyPsd@LoadUnicode{%
+ \Hy@Error{%
+ Unicode support for bookmarks is not available.\MessageBreak
+ Activate unicode support by using one of the options\MessageBreak
+ `unicode', `pdfencoding=unicode', `pdfencoding=auto'\MessageBreak
+ in the preamble%
+ }\@ehc
+ \global\let\HyPsd@LoadUnicode\relax
+ \global\Hy@unicodefalse
+ \global\let\Hy@unicodetrue\Hy@unicodefalse
+ }%
+ \fi
+}
+\define@key{Hyp}{pdfencoding}{%
+ \edef\HyPsd@temp{#1}%
+ \ifx\HyPsd@temp\HyPsd@pdfencoding@pdfdoc
+ \let\HyPsd@pdfencoding\HyPsd@temp
+ \Hy@unicodefalse
+ \else
+ \ifcase\ifx\HyPsd@temp\HyPsd@pdfencoding@unicode
+ \z@
+ \else
+ \ifx\HyPsd@temp\HyPsd@pdfencoding@auto
+ \z@
+ \else
+ \@ne
+ \fi
+ \fi
+ \let\HyPsd@pdfencoding\HyPsd@temp
+ \hypersetup{unicode}%
+ \ifHy@unicode
+ \def\HyPsd@pdfencoding{#1}%
+ \ifx\HyPsd@pdfencoding\HyPsd@pdfencoding@auto
+ \HyPsd@LoadStringEnc
+ \fi
+ \else
+ \Hy@Warning{Cannot switch to unicode bookmarks}%
+ \let\HyPsd@pdfencoding\HyPsd@pdfencoding@pdfdoc
+ \fi
+ \else
+ \@onelevel@sanitize\HyPsd@temp
+ \Hy@Warning{%
+ Values of option `pdfencoding':\MessageBreak
+ `pdfdoc', `unicode', `auto'.\MessageBreak
+ Ignoring unknown value `\HyPsd@temp'%
+ }%
+ \fi
+ \fi
+}
+\def\HyPsd@pdfencoding@auto{auto}
+\def\HyPsd@pdfencoding@pdfdoc{pdfdoc}
+\def\HyPsd@pdfencoding@unicode{unicode}
+\let\HyPsd@pdfencoding\Hy@pdfencoding@pdfdoc
+\def\HyPsd@LoadStringEnc{%
+ \RequirePackage{stringenc}[2009/12/15]%
+ \let\HyPsd@LoadStringEnc\relax
+}
+\Hy@AtBeginDocument{%
+ \@ifpackageloaded{stringenc}{%
+ \let\HyPsd@LoadStringEnc\relax
+ }{%
+ \def\HyPsd@LoadStringEnc{%
+ \Hy@WarningNoLine{%
+ Missing package `stringenc'. Use `pdfencoding=auto'\MessageBreak
+ in the preamble or load the package there%
+ }%
+ }%
+ }%
+}
+\def\hypersetup{\kvsetkeys{Hyp}}
+\newif\ifHy@setpdfversion
+\define@key{Hyp}{pdfversion}{%
+ \@ifundefined{Hy@pdfversion@#1}{%
+ \PackageWarning{hyperref}{%
+ Unsupported PDF version `#1'.\MessageBreak
+ Valid values: 1.2 until 1.9%
+ }%
+ }{%
+ \Hy@setpdfversiontrue
+ \edef\Hy@pdfversion{\@nameuse{Hy@pdfversion@#1}}%
+ }%
+}
+\@namedef{Hy@pdfversion@1.2}{2}%
+\@namedef{Hy@pdfversion@1.3}{3}%
+\@namedef{Hy@pdfversion@1.4}{4}%
+\@namedef{Hy@pdfversion@1.5}{5}%
+\@namedef{Hy@pdfversion@1.6}{6}%
+\@namedef{Hy@pdfversion@1.7}{7}%
+\@namedef{Hy@pdfversion@1.8}{8}%
+\@namedef{Hy@pdfversion@1.9}{9}%
+\def\Hy@pdfversion{2}
+\newif\ifHy@DviMode
+\let\Hy@DviErrMsg\ltx@empty
+\ifpdf
+ \def\Hy@DviErrMsg{pdfTeX or LuaTeX is running in PDF mode}%
+\else
+ \ifxetex
+ \def\Hy@DviErrMsg{XeTeX is running}%
+ \else
+ \ifvtex
+ \ifvtexdvi
+ \Hy@DviModetrue
+ \else
+ \def\Hy@DviErrMsg{VTeX is running, but not in DVI mode}%
+ \fi
+ \else
+ \Hy@DviModetrue
+ \fi
+ \fi
+\fi
+\def\HyOpt@CheckDvi#1{%
+ \ifHy@DviMode
+ \expandafter\ltx@firstofone
+ \else
+ \Hy@Error{%
+ Wrong DVI mode driver option `#1',\MessageBreak
+ because \Hy@DviErrMsg
+ }\@ehc
+ \expandafter\ltx@gobble
+ \fi
+}
+\DeclareVoidOption{tex4ht}{%
+ \Hy@texhttrue
+ \kvsetkeys{Hyp}{colorlinks=true}%
+ \def\BeforeTeXIVht{\RequirePackage{color}}%
+ \def\Hy@driver{htex4ht}%
+ \def\MaybeStopEarly{%
+ \Hy@Message{Stopped early}%
+ \Hy@AtBeginDocument{%
+ \PDF@FinishDoc
+ \gdef\PDF@FinishDoc{}%
+ }%
+ \endinput
+ }%
+}
+\DeclareVoidOption{pdftex}{%
+ \ifpdf
+ \def\Hy@driver{hpdftex}%
+ \else
+ \Hy@Error{%
+ Wrong driver option `pdftex',\MessageBreak
+ because pdfTeX in PDF mode is not detected%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{nativepdf}{%
+ \HyOpt@CheckDvi{nativepdf}{%
+ \def\Hy@driver{hdvips}%
+ }%
+}
+\DeclareVoidOption{dvipdfm}{%
+ \HyOpt@CheckDvi{dvipdfm}{%
+ \def\Hy@driver{hdvipdfm}%
+ }%
+}
+\DeclareVoidOption{dvipdfmx}{%
+ \HyOpt@CheckDvi{dvipdfmx}{%
+ \def\Hy@driver{hdvipdfm}%
+ }%
+}
+\define@key{Hyp}{dvipdfmx-outline-open}[true]{%
+ \expandafter\ifx\csname if#1\expandafter\endcsname
+ \csname iftrue\endcsname
+ \chardef\SpecialDvipdfmxOutlineOpen\@ne
+ \else
+ \chardef\SpecialDvipdfmxOutlineOpen\z@
+ \fi
+}
+\DeclareVoidOption{xetex}{%
+ \ifxetex
+ \def\Hy@driver{hxetex}%
+ \else
+ \Hy@Error{%
+ Wrong driver option `xetex',\MessageBreak
+ because XeTeX is not detected%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{pdfmark}{%
+ \HyOpt@CheckDvi{pdfmark}{%
+ \def\Hy@driver{hdvips}%
+ }%
+}
+\DeclareVoidOption{dvips}{%
+ \HyOpt@CheckDvi{dvips}{%
+ \def\Hy@driver{hdvips}%
+ }%
+}
+\DeclareVoidOption{hypertex}{%
+ \HyOpt@CheckDvi{hypertex}{%
+ \def\Hy@driver{hypertex}%
+ }%
+}
+\let\Hy@MaybeStopNow\relax
+\DeclareVoidOption{vtex}{%
+ \ifvtex
+ \ifnum 0\ifnum\OpMode<1 1\fi \ifnum\OpMode>3 1\fi =0 %
+ \def\Hy@driver{hvtex}%
+ \else
+ \ifnum\OpMode=10\relax
+ \def\Hy@driver{hvtexhtm}%
+ \def\MaybeStopEarly{%
+ \Hy@Message{Stopped early}%
+ \Hy@AtBeginDocument{%
+ \PDF@FinishDoc
+ \gdef\PDF@FinishDoc{}%
+ }%
+ \endinput
+ }%
+ \else
+ \Hy@Error{%
+ Wrong driver option `vtex',\MessageBreak
+ because of wrong OpMode (\the\OpMode)%
+ }\@ehc
+ \fi
+ \fi
+ \else
+ \Hy@Error{%
+ Wrong driver option `vtex',\MessageBreak
+ because VTeX is not running%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{vtexpdfmark}{%
+ \ifvtex
+ \ifnum 0\ifnum\OpMode<1 1\fi \ifnum\OpMode>3 1\fi =0 %
+ \def\Hy@driver{hvtexmrk}%
+ \else
+ \Hy@Error{%
+ Wrong driver option `vtexpdfmark',\MessageBreak
+ because of wrong OpMode (\the\OpMode)%
+ }\@ehc
+ \fi
+ \else
+ \Hy@Error{%
+ Wrong driver option `vtexpdfmark,\MessageBreak
+ because VTeX is not running%
+ }\@ehc
+ \fi
+}
+\DeclareVoidOption{dviwindo}{%
+ \HyOpt@CheckDvi{dviwindo}{%
+ \def\Hy@driver{hdviwind}%
+ \kvsetkeys{Hyp}{colorlinks}%
+ \PassOptionsToPackage{dviwindo}{color}%
+ }%
+}
+\DeclareVoidOption{dvipsone}{%
+ \HyOpt@CheckDvi{dvipsone}{%
+ \def\Hy@driver{hdvipson}%
+ }%
+}
+\DeclareVoidOption{textures}{%
+ \HyOpt@CheckDvi{textures}{%
+ \def\Hy@driver{htexture}%
+ }%
+}
+\DeclareVoidOption{latex2html}{%
+ \HyOpt@CheckDvi{latex2html}{%
+ \Hy@AtBeginDocument{\@@latextohtmlX}%
+ }%
+}
+\DeclareVoidOption{ps2pdf}{%
+ \HyOpt@CheckDvi{ps2pdf}{%
+ \def\Hy@driver{hdvips}%
+ }%
+}
+\let\HyOpt@DriverFallback\ltx@empty
+\define@key{Hyp}{driverfallback}{%
+ \ifHy@DviMode
+ \def\HyOpt@DriverFallback{#1}%
+ \Hy@Match\HyOpt@DriverFallback{%
+ ^(|dvipdfm|dvipdfmx|dvips|dvipsone|dviwindo|hypertex|ps2pdf|%
+ latex2html|tex4ht)$%
+ }{}{%
+ \let\HyOpt@DriverFallback\ltx@empty
+ }%
+ \fi
+}
+\define@key{Hyp}{hyperfigures}[true]{%
+ \Hy@boolkey{hyperfigures}{#1}%
+}
+\define@key{Hyp}{hyperfootnotes}[true]{%
+ \Hy@boolkey{hyperfootnotes}{#1}%
+}
+\def\back@none{none}
+\def\back@section{section}
+\def\back@page{page}
+\def\back@slide{slide}
+\define@key{Hyp}{backref}[section]{%
+ \lowercase{\def\Hy@tempa{#1}}%
+ \ifx\Hy@tempa\@empty
+ \let\Hy@tempa\back@section
+ \fi
+ \ifx\Hy@tempa\Hy@false
+ \let\Hy@tempa\back@none
+ \fi
+ \ifx\Hy@tempa\back@slide
+ \let\Hy@tempa\back@section
+ \fi
+ \ifx\Hy@tempa\back@page
+ \PassOptionsToPackage{hyperpageref}{backref}%
+ \Hy@backreftrue
+ \else
+ \ifx\Hy@tempa\back@section
+ \PassOptionsToPackage{hyperref}{backref}%
+ \Hy@backreftrue
+ \else
+ \ifx\Hy@tempa\back@none
+ \Hy@backreffalse
+ \else
+ \Hy@WarnOptionValue{#1}{backref}{%
+ `section', `slide', `page', `none',\MessageBreak
+ or `false'}%
+ \fi
+ \fi
+ \fi
+}
+\define@key{Hyp}{pagebackref}[true]{%
+ \edef\Hy@tempa{#1}%
+ \lowercase\expandafter{%
+ \expandafter\def\expandafter\Hy@tempa\expandafter{\Hy@tempa}%
+ }%
+ \ifx\Hy@tempa\@empty
+ \let\Hy@tempa\Hy@true
+ \fi
+ \ifx\Hy@tempa\Hy@true
+ \PassOptionsToPackage{hyperpageref}{backref}%
+ \Hy@backreftrue
+ \else
+ \ifx\Hy@tempa\Hy@false
+ \Hy@backreffalse
+ \else
+ \Hy@WarnOptionValue{#1}{pagebackref}{`true' or `false'}%
+ \fi
+ \fi
+}
+\define@key{Hyp}{hyperindex}[true]{%
+ \Hy@boolkey{hyperindex}{#1}%
+}
+\define@key{Hyp}{encap}[\|]{%
+ \def\HyInd@EncapChar{#1}%
+}
+\def\HyLang@afrikaans{%
+ \def\equationautorefname{Vergelyking}%
+ \def\footnoteautorefname{Voetnota}%
+ \def\itemautorefname{Item}%
+ \def\figureautorefname{Figuur}%
+ \def\tableautorefname{Tabel}%
+ \def\partautorefname{Deel}%
+ \def\appendixautorefname{Bylae}%
+ \def\chapterautorefname{Hoofstuk}%
+ \def\sectionautorefname{Afdeling}%
+ \def\subsectionautorefname{Subafdeling}%
+ \def\subsubsectionautorefname{Subsubafdeling}%
+ \def\paragraphautorefname{Paragraaf}%
+ \def\subparagraphautorefname{Subparagraaf}%
+ \def\FancyVerbLineautorefname{Lyn}%
+ \def\theoremautorefname{Teorema}%
+ \def\pageautorefname{Bladsy}%
+}
+\def\HyLang@english{%
+ \def\equationautorefname{Equation}%
+ \def\footnoteautorefname{footnote}%
+ \def\itemautorefname{item}%
+ \def\figureautorefname{Figure}%
+ \def\tableautorefname{Table}%
+ \def\partautorefname{Part}%
+ \def\appendixautorefname{Appendix}%
+ \def\chapterautorefname{chapter}%
+ \def\sectionautorefname{section}%
+ \def\subsectionautorefname{subsection}%
+ \def\subsubsectionautorefname{subsubsection}%
+ \def\paragraphautorefname{paragraph}%
+ \def\subparagraphautorefname{subparagraph}%
+ \def\FancyVerbLineautorefname{line}%
+ \def\theoremautorefname{Theorem}%
+ \def\pageautorefname{page}%
+}
+\def\HyLang@french{%
+ \def\equationautorefname{\'Equation}%
+ \def\footnoteautorefname{note}%
+ \def\itemautorefname{item}%
+ \def\figureautorefname{Figure}%
+ \def\tableautorefname{Tableau}%
+ \def\partautorefname{Partie}%
+ \def\appendixautorefname{Appendice}%
+ \def\chapterautorefname{chapitre}%
+ \def\sectionautorefname{section}%
+ \def\subsectionautorefname{sous-section}%
+ \def\subsubsectionautorefname{sous-sous-section}%
+ \def\paragraphautorefname{paragraphe}%
+ \def\subparagraphautorefname{sous-paragraphe}%
+ \def\FancyVerbLineautorefname{ligne}%
+ \def\theoremautorefname{Th\'eor\`eme}%
+ \def\pageautorefname{page}%
+}
+\def\HyLang@german{%
+ \def\equationautorefname{Gleichung}%
+ \def\footnoteautorefname{Fu\ss note}%
+ \def\itemautorefname{Punkt}%
+ \def\figureautorefname{Abbildung}%
+ \def\tableautorefname{Tabelle}%
+ \def\partautorefname{Teil}%
+ \def\appendixautorefname{Anhang}%
+ \def\chapterautorefname{Kapitel}%
+ \def\sectionautorefname{Abschnitt}%
+ \def\subsectionautorefname{Unterabschnitt}%
+ \def\subsubsectionautorefname{Unterunterabschnitt}%
+ \def\paragraphautorefname{Absatz}%
+ \def\subparagraphautorefname{Unterabsatz}%
+ \def\FancyVerbLineautorefname{Zeile}%
+ \def\theoremautorefname{Theorem}%
+ \def\pageautorefname{Seite}%
+}
+\def\HyLang@italian{%
+ \def\equationautorefname{Equazione}%
+ \def\footnoteautorefname{nota}%
+ \def\itemautorefname{punto}%
+ \def\figureautorefname{Figura}%
+ \def\tableautorefname{Tabella}%
+ \def\partautorefname{Parte}%
+ \def\appendixautorefname{Appendice}%
+ \def\chapterautorefname{Capitolo}%
+ \def\sectionautorefname{sezione}%
+ \def\subsectionautorefname{sottosezione}%
+ \def\subsubsectionautorefname{sottosottosezione}%
+ \def\paragraphautorefname{paragrafo}%
+ \def\subparagraphautorefname{sottoparagrafo}%
+ \def\FancyVerbLineautorefname{linea}%
+ \def\theoremautorefname{Teorema}%
+ \def\pageautorefname{Pag.\@}%
+}
+\def\HyLang@magyar{%
+ \def\equationautorefname{Egyenlet}%
+ \def\footnoteautorefname{l\'abjegyzet}%
+ \def\itemautorefname{Elem}%
+ \def\figureautorefname{\'Abra}%
+ \def\tableautorefname{T\'abl\'azat}%
+ \def\partautorefname{R\'esz}%
+ \def\appendixautorefname{F\"uggel\'ek}%
+ \def\chapterautorefname{fejezet}%
+ \def\sectionautorefname{szakasz}%
+ \def\subsectionautorefname{alszakasz}%
+ \def\subsubsectionautorefname{alalszakasz}%
+ \def\paragraphautorefname{bekezd\'es}%
+ \def\subparagraphautorefname{albekezd\'es}%
+ \def\FancyVerbLineautorefname{sor}%
+ \def\theoremautorefname{T\'etel}%
+ \def\pageautorefname{oldal}%
+}
+\def\HyLang@portuges{%
+ \def\equationautorefname{Equa\c c\~ao}%
+ \def\footnoteautorefname{Nota de rodap\'e}%
+ \def\itemautorefname{Item}%
+ \def\figureautorefname{Figura}%
+ \def\tableautorefname{Tabela}%
+ \def\partautorefname{Parte}%
+ \def\appendixautorefname{Ap\^endice}%
+ \def\chapterautorefname{Cap\'itulo}%
+ \def\sectionautorefname{Se\c c\~ao}%
+ \def\subsectionautorefname{Subse\c c\~ao}%
+ \def\subsubsectionautorefname{Subsubse\c c\~ao}%
+ \def\paragraphautorefname{par\'agrafo}%
+ \def\subparagraphautorefname{subpar\'agrafo}%
+ \def\FancyVerbLineautorefname{linha}%
+ \def\theoremautorefname{Teorema}%
+ \def\pageautorefname{P\'agina}%
+}
+\def\HyLang@russian{%
+ \def\equationautorefname{\cyr\cyrv\cyrery\cyrr.}%
+ \def\footnoteautorefname{%
+ \cyr\cyrp\cyro\cyrd\cyrs\cyrt\cyrr.\ \cyrp\cyrr\cyri\cyrm.%
+ }%
+ \def\itemautorefname{\cyr\cyrp.}%
+ \def\figureautorefname{\cyr\cyrr\cyri\cyrs.}%
+ \def\tableautorefname{\cyr\cyrt\cyra\cyrb\cyrl.}%
+ \def\partautorefname{\cyr\cyrch.}%
+ \def\chapterautorefname{\cyr\cyrg\cyrl.}%
+ \def\sectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
+ \def\appendixautorefname{\cyr\cyrp\cyrr\cyri\cyrl.}%
+ \def\subsectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
+ \def\subsubsectionautorefname{\cyr\cyrr\cyra\cyrz\cyrd.}%
+ \def\paragraphautorefname{\cyr\cyrp.}%
+ \def\subparagraphautorefname{\cyr\cyrp.}%
+ \def\FancyVerbLineautorefname{\cyr\cyrs\cyrt\cyrr.}%
+ \def\theoremautorefname{\cyr\cyrt\cyre\cyro\cyrr.}%
+ \def\pageautorefname{\cyr\cyrs.}%
+}
+\def\HyLang@spanish{%
+ \def\equationautorefname{Ecuaci\'on}%
+ \def\footnoteautorefname{Nota a pie de p\'agina}%
+ \def\itemautorefname{Elemento}%
+ \def\figureautorefname{Figura}%
+ \def\tableautorefname{Tabla}%
+ \def\partautorefname{Parte}%
+ \def\appendixautorefname{Ap\'endice}%
+ \def\chapterautorefname{Cap\'itulo}%
+ \def\sectionautorefname{Secci\'on}%
+ \def\subsectionautorefname{Subsecci\'on}%
+ \def\subsubsectionautorefname{Subsubsecci\'on}%
+ \def\paragraphautorefname{P\'arrafo}%
+ \def\subparagraphautorefname{Subp\'arrafo}%
+ \def\FancyVerbLineautorefname{L\'inea}%
+ \def\theoremautorefname{Teorema}%
+ \def\pageautorefname{P\'agina}%
+}
+\def\HyLang@vietnamese{%
+ \def\equationautorefname{Ph\uhorn{}\ohorn{}ng tr\`inh}%
+ \def\footnoteautorefname{Ch\'u th\'ich}%
+ \def\itemautorefname{m\d{u}c}%
+ \def\figureautorefname{H\`inh}%
+ \def\tableautorefname{B\h{a}ng}%
+ \def\partautorefname{Ph\`\acircumflex{}n}%
+ \def\appendixautorefname{Ph\d{u} l\d{u}c}%
+ \def\chapterautorefname{ch\uhorn{}\ohorn{}ng}%
+ \def\sectionautorefname{m\d{u}c}%
+ \def\subsectionautorefname{m\d{u}c}%
+ \def\subsubsectionautorefname{m\d{u}c}%
+ \def\paragraphautorefname{\dj{}o\d{a}n}%
+ \def\subparagraphautorefname{\dj{}o\d{a}n}%
+ \def\FancyVerbLineautorefname{d\`ong}%
+ \def\theoremautorefname{\DJ{}\d{i}nh l\'y}%
+ \def\pageautorefname{Trang}%
+}
+\def\HyLang@addto#1#2{%
+ #2%
+ \@temptokena{#2}%
+ \ifx#1\relax
+ \let#1\@empty
+ \fi
+ \ifx#1\@undefined
+ \edef#1{\the\@temptokena}%
+ \else
+ \toks@\expandafter{#1}%
+ \edef#1{\the\toks@\the\@temptokena}%
+ \fi
+ \@temptokena{}\toks@\@temptokena
+}
+\def\HyLang@DeclareLang#1#2#3{%
+ \@ifpackagewith{babel}{#1}{%
+ \expandafter\HyLang@addto
+ \csname extras#1\expandafter\endcsname
+ \csname HyLang@#2\endcsname
+ \begingroup
+ \edef\x{\endgroup
+ #3%
+ }%
+ \x
+ \@namedef{HyLang@#1@done}{}%
+ }{}%
+ \begingroup
+ \edef\x##1##2{%
+ \noexpand\ifx##2\relax
+ \errmessage{No definitions for language #2' found!}%
+ \noexpand\fi
+ \endgroup
+ \noexpand\define@key{Hyp}{#1}[]{%
+ \noexpand\@ifundefined{HyLang@#1@done}{%
+ \noexpand\HyLang@addto{\noexpand##1}{\noexpand##2}%
+ #3%
+ \noexpand\@namedef{HyLang@#1@done}{}%
+ }{}%
+ }%
+ }%
+ \expandafter\x\csname extras#1\expandafter\endcsname
+ \csname HyLang@#2\endcsname
+}
+\HyLang@DeclareLang{english}{english}{}
+\HyLang@DeclareLang{UKenglish}{english}{}
+\HyLang@DeclareLang{british}{english}{}
+\HyLang@DeclareLang{USenglish}{english}{}
+\HyLang@DeclareLang{american}{english}{}
+\HyLang@DeclareLang{german}{german}{}
+\HyLang@DeclareLang{austrian}{german}{}
+\HyLang@DeclareLang{ngerman}{german}{}
+\HyLang@DeclareLang{naustrian}{german}{}
+\HyLang@DeclareLang{russian}{russian}{\noexpand\hypersetup{unicode}}
+\HyLang@DeclareLang{brazil}{portuges}{}
+\HyLang@DeclareLang{brazilian}{portuges}{}
+\HyLang@DeclareLang{portuguese}{portuges}{}
+\HyLang@DeclareLang{spanish}{spanish}{}
+\HyLang@DeclareLang{afrikaans}{afrikaans}{}
+\HyLang@DeclareLang{french}{french}{}
+\HyLang@DeclareLang{frenchb}{french}{}
+\HyLang@DeclareLang{francais}{french}{}
+\HyLang@DeclareLang{acadian}{french}{}
+\HyLang@DeclareLang{canadien}{french}{}
+\HyLang@DeclareLang{italian}{italian}{}
+\HyLang@DeclareLang{magyar}{magyar}{}
+\HyLang@DeclareLang{hungarian}{magyar}{}
+\DeclareVoidOption{vietnamese}{%
+ \HyLang@addto\extrasvietnamese\HyLang@vietnamese
+ \Hy@AtEndOfPackage{%
+ \@ifundefined{T@PU}{}{%
+ \input{puvnenc.def}%
+ }%
+ }%
+}
+\DeclareVoidOption{vietnam}{%
+ \HyLang@addto\extrasvietnam\HyLang@vietnamese
+ \Hy@AtEndOfPackage{%
+ \@ifundefined{T@PU}{}{%
+ \input{puvnenc.def}%
+ }%
+ }%
+}
+\DeclareVoidOption{arabic}{%
+ \Hy@AtEndOfPackage{%
+ \@ifundefined{T@PU}{}{%
+ \input{puarenc.def}%
+ }%
+ }%
+}
+\define@key{Hyp}{colorlinks}[true]{%
+ \Hy@boolkey{colorlinks}{#1}%
+}
+\DeclareVoidOption{hidelinks}{%
+ \Hy@colorlinksfalse
+ \Hy@ocgcolorlinksfalse
+ \Hy@frenchlinksfalse
+ \def\Hy@colorlink##1{\begingroup}%
+ \def\Hy@endcolorlink{\endgroup}%
+ \def\@pdfborder{0 0 0}%
+ \let\@pdfborderstyle\ltx@empty
+}
+\define@key{Hyp}{ocgcolorlinks}[true]{%
+ \Hy@boolkey{ocgcolorlinks}{#1}%
+}
+\Hy@AtBeginDocument{%
+ \begingroup
+ \@ifundefined{OBJ@OCG@view}{%
+ \ifHy@ocgcolorlinks
+ \Hy@Warning{%
+ Driver does not support `ocgcolorlinks',\MessageBreak
+ using `colorlinks' instead%
+ }%
+ \fi
+ }{}%
+ \endgroup
+}
+\define@key{Hyp}{frenchlinks}[true]{%
+ \Hy@boolkey{frenchlinks}{#1}%
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname chapter\endcsname\relax
+ \def\toclevel@part{0}%
+\else
+ \def\toclevel@part{-1}%
+\fi
+\def\toclevel@chapter{0}
+\def\toclevel@section{1}
+\def\toclevel@subsection{2}
+\def\toclevel@subsubsection{3}
+\def\toclevel@paragraph{4}
+\def\toclevel@subparagraph{5}
+\def\toclevel@figure{0}
+\def\toclevel@table{0}
+\@ifpackageloaded{listings}{%
+ \providecommand*\theHlstlisting{\thelstlisting}%
+ \providecommand*\toclevel@lstlisting{0}%
+}{}
+\@ifpackageloaded{listing}{%
+ \providecommand*\theHlisting{\thelisting}%
+ \providecommand*\toclevel@listing{0}%
+}{}
+\define@key{Hyp}{bookmarks}[true]{%
+ \Hy@boolkey{bookmarks}{#1}%
+}
+\define@key{Hyp}{bookmarksopen}[true]{%
+ \Hy@boolkey{bookmarksopen}{#1}%
+}
+\let\Hy@bookmarksdepth\c@tocdepth
+\define@key{Hyp}{bookmarksdepth}[]{%
+ \begingroup
+ \edef\x{#1}%
+ \ifx\x\empty
+ \global\let\Hy@bookmarksdepth\c@tocdepth
+ \else
+ \@ifundefined{toclevel@\x}{%
+ \@onelevel@sanitize\x
+ \edef\y{\expandafter\@car\x\@nil}%
+ \ifcase 0\expandafter\ifx\y-1\fi
+ \expandafter\ifnum\expandafter`\y>47 %
+ \expandafter\ifnum\expandafter`\y<58 1\fi\fi\relax
+ \Hy@Warning{Unknown document division name (\x)}%
+ \else
+ \setbox\z@=\hbox{%
+ \count@=\x
+ \xdef\Hy@bookmarksdepth{\the\count@}%
+ }%
+ \fi
+ }{%
+ \setbox\z@=\hbox{%
+ \count@=\csname toclevel@\x\endcsname
+ \xdef\Hy@bookmarksdepth{\the\count@}%
+ }%
+ }%
+ \fi
+ \endgroup
+}
+\define@key{Hyp}{bookmarksopenlevel}{%
+ \def\@bookmarksopenlevel{#1}%
+}
+\def\@bookmarksopenlevel{\maxdimen}
+\define@key{Hyp}{bookmarkstype}{%
+ \def\Hy@bookmarkstype{#1}%
+}
+\def\Hy@bookmarkstype{toc}
+\define@key{Hyp}{bookmarksnumbered}[true]{%
+ \Hy@boolkey{bookmarksnumbered}{#1}%
+}
+\define@key{Hyp}{CJKbookmarks}[true]{%
+ \Hy@boolkey{CJKbookmarks}{#1}%
+}
+\def\Hy@temp#1{%
+ \expandafter\Hy@@temp\csname @#1color\endcsname{#1}%
+}
+\def\Hy@@temp#1#2#3{%
+ \define@key{Hyp}{#2color}{%
+ \HyColor@HyperrefColor{##1}#1%
+ }%
+ \def#1{#3}%
+}
+\Hy@temp{link}{red}
+\Hy@temp{anchor}{black}
+\Hy@temp{cite}{green}
+\Hy@temp{file}{cyan}
+\Hy@temp{url}{magenta}
+\Hy@temp{menu}{red}
+\Hy@temp{run}{\@filecolor}
+\define@key{Hyp}{pagecolor}{%
+ \Hy@WarningPageColor
+}
+\def\Hy@WarningPageColor{%
+ \Hy@WarningNoLine{Option `pagecolor' is not available anymore}%
+ \global\let\Hy@WarningPageColor\relax
+}
+\define@key{Hyp}{allcolors}{%
+ \HyColor@HyperrefColor{#1}\@linkcolor
+ \HyColor@HyperrefColor{#1}\@anchorcolor
+ \HyColor@HyperrefColor{#1}\@citecolor
+ \HyColor@HyperrefColor{#1}\@filecolor
+ \HyColor@HyperrefColor{#1}\@urlcolor
+ \HyColor@HyperrefColor{#1}\@menucolor
+ \HyColor@HyperrefColor{#1}\@runcolor
+}
+\def\hyperbaseurl#1{\def\@baseurl{#1}}
+\define@key{Hyp}{baseurl}{\hyperbaseurl{#1}}
+\let\@baseurl\@empty
+\def\hyperlinkfileprefix#1{\def\Hy@linkfileprefix{#1}}
+\define@key{Hyp}{linkfileprefix}{\hyperlinkfileprefix{#1}}
+\hyperlinkfileprefix{file:}
+\let\@pdfpagetransition\relax
+\define@key{Hyp}{pdfpagetransition}{%
+ \def\@pdfpagetransition{#1}%
+}
+\let\@pdfpageduration\relax
+\define@key{Hyp}{pdfpageduration}{%
+ \def\@pdfpageduration{#1}%
+ \Hy@Match\@pdfpageduration{%
+ ^(|[0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+)$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfpageduration'\MessageBreak
+ of option `pdfpageduration'\MessageBreak
+ is replaced by an empty value%
+ }%
+ \let\@pdfpageduration\ltx@empty
+ }%
+}
+\newif\ifHy@useHidKey
+\Hy@useHidKeyfalse
+\define@key{Hyp}{pdfpagehidden}[true]{%
+ \Hy@boolkey{pdfpagehidden}{#1}%
+ \ifHy@pdfpagehidden
+ \global\Hy@useHidKeytrue
+ \fi
+}
+\def\Hy@ColorList{cite,file,link,menu,run,url}
+\@for\Hy@temp:=\Hy@ColorList\do{%
+ \edef\Hy@temp{%
+ \noexpand\define@key{Hyp}{\Hy@temp bordercolor}{%
+ \noexpand\HyColor@HyperrefBorderColor
+ {##1}%
+ \expandafter\noexpand\csname @\Hy@temp bordercolor\endcsname
+ {hyperref}%
+ {\Hy@temp bordercolor}%
+ }%
+ }%
+ \Hy@temp
+}
+\define@key{Hyp}{pagebordercolor}{%
+ \Hy@WarningPageBorderColor
+}
+\def\Hy@WarningPageBorderColor{%
+ \Hy@WarningNoLine{Option `pagebordercolor' is not available anymore}%
+ \global\let\Hy@WarningPageBorderColor\relax
+}
+\define@key{Hyp}{allbordercolors}{%
+ \def\Hy@temp##1##2{%
+ \HyColor@HyperrefBorderColor{#1}##1{hyperref}{##2bordercolor}%
+ }%
+ \Hy@temp\@citebordercolor{cite}%
+ \Hy@temp\@filebordercolor{file}%
+ \Hy@temp\@linkbordercolor{link}%
+ \Hy@temp\@menubordercolor{menu}%
+ \Hy@temp\@runbordercolor{run}%
+ \Hy@temp\@urlbordercolor{url}%
+}
+\define@key{Hyp}{pdfhighlight}{\def\@pdfhighlight{#1}}
+\Hy@DefNameKey{pdfhighlight}{%
+ \do{/I}{Invert}%
+ \do{/N}{None}%
+ \do{/O}{Outline}%
+ \do{/P}{Push}%
+}
+\define@key{Hyp}{pdfborder}{%
+ \let\Hy@temp\@pdfborder
+ \def\@pdfborder{#1}%
+ \Hy@Match\@pdfborder{%
+ ^\HyPat@NonNegativeReal/ %
+ \HyPat@NonNegativeReal/ %
+ \HyPat@NonNegativeReal/%
+ ( ?\[\HyPat@NonNegativeReal/( \HyPat@NonNegativeReal/)*])?$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfborder'\MessageBreak
+ for option `pdfborder'.\MessageBreak
+ Option setting is ignored%
+ }%
+ \let\@pdfborder\Hy@temp
+ }%
+}
+\define@key{Hyp}{pdfborderstyle}{%
+ \let\Hy@temp\@pdfborderstyle
+ \def\@pdfborderstyle{#1}%
+ \Hy@Match\@pdfborderstyle{%
+ ^%
+ ( */Type */Border%
+ | */W +\HyPat@NonNegativeReal/%
+ | */S */[SDBIU]%
+ | */D *\[ *(\HyPat@NonNegativeReal/( \HyPat@NonNegativeReal/)?)?]%
+ )* *$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfborderstyle'\MessageBreak
+ for option `pdfborderstyle'.\MessageBreak
+ Option setting is ignored%
+ }%
+ \let\@pdfborderstyle\Hy@temp
+ }%
+}
+\def\Hy@setpdfborder{%
+ \ifx\@pdfborder\@empty
+ \else
+ /Border[\@pdfborder]%
+ \fi
+ \ifx\@pdfborderstyle\@empty
+ \else
+ /BS<<\@pdfborderstyle>>%
+ \fi
+}
+\Hy@DefNameKey{pdfpagemode}{%
+ \do{UseNone}{}%
+ \do{UseOutlines}{}%
+ \do{UseThumbs}{}%
+ \do{FullScreen}{}%
+ \do{UseOC}{PDF 1.5}%
+ \do{UseAttachments}{PDF 1.6}%
+}
+\Hy@DefNameKey{pdfnonfullscreenpagemode}{%
+ \do{UseNone}{}%
+ \do{UseOutlines}{}%
+ \do{UseThumbs}{}%
+ \do{FullScreen}{}%
+ \do{UseOC}{PDF 1.5}%
+ \do{UseAttachments}{PDF 1.6}%
+}
+\Hy@DefNameKey{pdfdirection}{%
+ \do{L2R}{Left to right}%
+ \do{R2L}{Right to left}%
+}
+\Hy@DefNameKey{pdfviewarea}{%
+ \do{MediaBox}{}%
+ \do{CropBox}{}%
+ \do{BleedBox}{}%
+ \do{TrimBox}{}%
+ \do{ArtBox}{}%
+}
+\Hy@DefNameKey{pdfviewclip}{%
+ \do{MediaBox}{}%
+ \do{CropBox}{}%
+ \do{BleedBox}{}%
+ \do{TrimBox}{}%
+ \do{ArtBox}{}%
+}
+\Hy@DefNameKey{pdfprintarea}{%
+ \do{MediaBox}{}%
+ \do{CropBox}{}%
+ \do{BleedBox}{}%
+ \do{TrimBox}{}%
+ \do{ArtBox}{}%
+}
+\Hy@DefNameKey{pdfprintclip}{%
+ \do{MediaBox}{}%
+ \do{CropBox}{}%
+ \do{BleedBox}{}%
+ \do{TrimBox}{}%
+ \do{ArtBox}{}%
+}
+\Hy@DefNameKey{pdfprintscaling}{%
+ \do{AppDefault}{}%
+ \do{None}{}%
+}
+\Hy@DefNameKey{pdfduplex}{%
+ \do{Simplex}{}%
+ \do{DuplexFlipShortEdge}{}%
+ \do{DuplexFlipLongEdge}{}%
+}
+\Hy@DefNameKey{pdfpicktraybypdfsize}{%
+ \do{true}{}%
+ \do{false}{}%
+}
+\define@key{Hyp}{pdfprintpagerange}{%
+ \def\@pdfprintpagerange{#1}%
+}
+\Hy@DefNameKey{pdfnumcopies}{%
+ \do{2}{two copies}%
+ \do{3}{three copies}%
+ \do{4}{four copies}%
+ \do{5}{five copies}%
+}
+\define@key{Hyp}{pdfusetitle}[true]{%
+ \Hy@boolkey{pdfusetitle}{#1}%
+}
+\def\HyXeTeX@CheckUnicode{%
+ \ifxetex
+ \ifHy@unicode
+ \else
+ \Hy@WarningNoLine{%
+ XeTeX driver only supports unicode.\MessageBreak
+ Enabling option `unicode'%
+ }%
+ \kvsetkeys{Hyp}{unicode}%
+ \fi
+ \else
+ \let\HyXeTeX@CheckUnicode\relax
+ \fi
+}
+\def\HyPsd@PrerenderUnicode#1{%
+ \begingroup
+ \expandafter\ifx\csname PrerenderUnicode\endcsname\relax
+ \else
+ \sbox0{%
+ \let\GenericInfo\@gobbletwo
+ \let\GenericWarning\@gobbletwo
+ \let\GenericError\@gobblefour
+ \PrerenderUnicode{#1}%
+ }%
+ \fi
+ \endgroup
+}
+\define@key{Hyp}{pdftitle}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdftitle{#1}%
+}
+\define@key{Hyp}{pdfauthor}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfauthor{#1}%
+}
+\define@key{Hyp}{pdfproducer}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfproducer{#1}%
+}
+\define@key{Hyp}{pdfcreator}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfcreator{#1}%
+}
+\define@key{Hyp}{pdfcreationdate}{%
+ \begingroup
+ \Hy@unicodefalse
+ \pdfstringdef\@pdfcreationdate{#1}%
+ \endgroup
+}
+\define@key{Hyp}{pdfmoddate}{%
+ \begingroup
+ \Hy@unicodefalse
+ \pdfstringdef\@pdfmoddate{#1}%
+ \endgroup
+}
+\define@key{Hyp}{pdfsubject}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfsubject{#1}%
+}
+\define@key{Hyp}{pdfkeywords}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{#1}%
+ \pdfstringdef\@pdfkeywords{#1}%
+}
+\define@key{Hyp}{pdftrapped}{%
+ \lowercase{\edef\Hy@temp{#1}}%
+ \ifx\Hy@temp\HyInfo@trapped@true
+ \def\@pdftrapped{True}%
+ \else
+ \ifx\Hy@temp\HyInfo@trapped@false
+ \def\@pdftrapped{False}%
+ \else
+ \ifx\Hy@temp\HyInfo@trapped@unknown
+ \def\@pdftrapped{Unknown}%
+ \else
+ \ifx\Hy@temp\@empty
+ \else
+ \Hy@Warning{%
+ Unsupported value `#1'\MessageBreak
+ for option `pdftrapped'%
+ }%
+ \fi
+ \def\@pdftrapped{}%
+ \fi
+ \fi
+ \fi
+}
+\def\HyInfo@trapped@true{true}
+\def\HyInfo@trapped@false{false}
+\def\HyInfo@trapped@unknown{unknown}
+\def\HyInfo@TrappedUnsupported{%
+ \ifx\@pdftrapped\@empty
+ \else
+ \Hy@WarningNoLine{`pdftrapped' is not supported by this driver}%
+ \gdef\HyInfo@TrappedUnsupported{}%
+ \fi
+}
+\define@key{Hyp}{pdfinfo}{%
+ \kvsetkeys{pdfinfo}{#1}%
+}
+\def\Hy@temp#1{%
+ \lowercase{\Hy@temp@A{#1}}{#1}%
+}
+\def\Hy@temp@A#1#2{%
+ \define@key{pdfinfo}{#2}{%
+ \hypersetup{pdf#1={##1}}%
+ }%
+}
+\Hy@temp{Title}
+\Hy@temp{Author}
+\Hy@temp{Keywords}
+\Hy@temp{Subject}
+\Hy@temp{Creator}
+\Hy@temp{Producer}
+\Hy@temp{CreationDate}
+\Hy@temp{ModDate}
+\Hy@temp{Trapped}
+\newif\ifHyInfo@AddonUnsupported
+\kv@set@family@handler{pdfinfo}{%
+ \HyInfo@AddonHandler{#1}{#2}%
+}
+\let\HyInfo@do\relax
+\def\HyInfo@AddonHandler#1#2{%
+ \ifx\kv@value\relax
+ \Hy@Warning{%
+ Option `pdfinfo': ignoring key `\kv@key' without value%
+ }%
+ \else
+ \EdefEscapeName\HyInfo@KeyEscaped{\kv@key}%
+ \EdefUnescapeName\HyInfo@Key{\HyInfo@KeyEscaped}%
+ \expandafter\ifx\csname KV@pdfinfo@\HyInfo@Key\endcsname\relax
+ \ifHyInfo@AddonUnsupported
+ \Hy@Warning{%
+ This driver does not support additional\MessageBreak
+ information entries, therefore\MessageBreak
+ `\kv@key' is ignored%
+ }%
+ \else
+ \define@key{pdfinfo}{\HyInfo@Key}{%
+ \HyXeTeX@CheckUnicode
+ \HyPsd@XeTeXBigCharstrue
+ \HyPsd@PrerenderUnicode{##1}%
+ \pdfstringdef\HyInfo@Value{##1}%
+ \expandafter\let\csname HyInfo@Value@\HyInfo@Key\endcsname
+ \HyInfo@Value
+ }%
+ \edef\HyInfo@AddonList{%
+ \HyInfo@AddonList
+ \HyInfo@do{\HyInfo@Key}%
+ }%
+ \kv@parse@normalized{%
+ \HyInfo@Key={#2}%
+ }{%
+ \kv@processor@default{pdfinfo}%
+ }%
+ \fi
+ \else
+ \kv@parse@normalized{%
+ \HyInfo@Key={#2}%
+ }{%
+ \kv@processor@default{pdfinfo}%
+ }%
+ \fi
+ \fi
+}
+\def\HyInfo@GenerateAddons{%
+ \ifHyInfo@AddonUnsupported
+ \def\HyInfo@Addons{}%
+ \else
+ \begingroup
+ \toks@{}%
+ \def\HyInfo@do##1{%
+ \EdefEscapeName\HyInfo@Key{##1}%
+ \edef\x{%
+ \toks@{%
+ \the\toks@
+ /\HyInfo@Key(\csname HyInfo@Value@##1\endcsname)%
+ }%
+ }%
+ \x
+ }%
+ \HyInfo@AddonList
+ \edef\x{\endgroup
+ \def\noexpand\HyInfo@Addons{\the\toks@}%
+ }%
+ \x
+ \fi
+}
+\let\HyInfo@AddonList\ltx@empty
+\define@key{Hyp}{pdfview}{\calculate@pdfview#1 \\}
+\define@key{Hyp}{pdflinkmargin}{\setpdflinkmargin{#1}}
+\let\setpdflinkmargin\@gobble
+\def\calculate@pdfview#1 #2\\{%
+ \def\@pdfview{#1}%
+ \ifx\\#2\\%
+ \def\@pdfviewparams{ -32768}%
+ \else
+ \def\@pdfviewparams{ #2}%
+ \fi
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname numexpr\endcsname\relax
+ \def\Hy@number#1{%
+ \expandafter\@firstofone\expandafter{\number#1}%
+ }%
+\else
+ \def\Hy@number#1{%
+ \the\numexpr#1\relax
+ }%
+\fi
+\define@key{Hyp}{pdfstartpage}{%
+ \ifx\\#1\\%
+ \let\@pdfstartpage\ltx@empty
+ \else
+ \edef\@pdfstartpage{\Hy@number{#1}}%
+ \fi
+}%
+\define@key{Hyp}{pdfstartview}{%
+ \ifx\\#1\\%
+ \let\@pdfstartview\ltx@empty
+ \else
+ \hypercalcbpdef\@pdfstartview{/#1}%
+ \fi
+}
+\def\HyPat@NonNegativeReal/{%
+ \ *([0-9]+\.?[0-9]*|[0-9]*\.?[0-9]+) *%
+}
+\define@key{Hyp}{pdfremotestartview}{%
+ \ifx\\#1\\%
+ \def\@pdfremotestartview{/Fit}%
+ \else
+ \hypercalcbpdef\@pdfremotestartview{#1}%
+ \edef\@pdfremotestartview{\@pdfremotestartview}%
+ \Hy@Match\@pdfremotestartview{%
+ ^(XYZ -?(null|\HyPat@NonNegativeReal/) %
+ -?(null|\HyPat@NonNegativeReal/) %
+ (null|\HyPat@NonNegativeReal/)|%
+ Fit(|B|%
+ (H|V|BH|BV) (null|\HyPat@NonNegativeReal/)|%
+ R \HyPat@NonNegativeReal/ \HyPat@NonNegativeReal/ %
+ \HyPat@NonNegativeReal/ \HyPat@NonNegativeReal/%
+ ))$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfremotestartview'\MessageBreak
+ of `pdfremotestartview'\MessageBreak
+ is replaced by `Fit'%
+ }%
+ \let\@pdfremotestartview\@empty
+ }%
+ \ifx\@pdfremotestartview\@empty
+ \def\@pdfremotestartview{/Fit}%
+ \else
+ \edef\@pdfremotestartview{/\@pdfremotestartview}%
+ \fi
+ \fi
+}
+\define@key{Hyp}{pdfpagescrop}{\edef\@pdfpagescrop{#1}}
+\define@key{Hyp}{pdftoolbar}[true]{%
+ \Hy@boolkey{pdftoolbar}{#1}%
+}
+\define@key{Hyp}{pdfmenubar}[true]{%
+ \Hy@boolkey{pdfmenubar}{#1}%
+}
+\define@key{Hyp}{pdfwindowui}[true]{%
+ \Hy@boolkey{pdfwindowui}{#1}%
+}
+\define@key{Hyp}{pdffitwindow}[true]{%
+ \Hy@boolkey{pdffitwindow}{#1}%
+}
+\define@key{Hyp}{pdfcenterwindow}[true]{%
+ \Hy@boolkey{pdfcenterwindow}{#1}%
+}
+\define@key{Hyp}{pdfdisplaydoctitle}[true]{%
+ \Hy@boolkey{pdfdisplaydoctitle}{#1}%
+}
+\define@key{Hyp}{pdfa}[true]{%
+ \Hy@boolkey{pdfa}{#1}%
+}
+\define@key{Hyp}{pdfnewwindow}[true]{%
+ \def\Hy@temp{#1}%
+ \ifx\Hy@temp\@empty
+ \Hy@pdfnewwindowsetfalse
+ \else
+ \Hy@pdfnewwindowsettrue
+ \Hy@boolkey{pdfnewwindow}{#1}%
+ \fi
+}
+\def\Hy@SetNewWindow{%
+ \ifHy@pdfnewwindowset
+ /NewWindow %
+ \ifHy@pdfnewwindow true\else false\fi
+ \fi
+}
+\Hy@DefNameKey{pdfpagelayout}{%
+ \do{SinglePage}{}%
+ \do{OneColumn}{}%
+ \do{TwoColumnLeft}{}%
+ \do{TwoColumnRight}{}%
+ \do{TwoPageLeft}{PDF 1.5}%
+ \do{TwoPageRight}{PDF 1.5}%
+}
+\define@key{Hyp}{pdflang}{%
+ \def\@pdflang{#1}%
+}
+\define@key{Hyp}{pdfpagelabels}[true]{%
+ \Hy@boolkey{pdfpagelabels}{#1}%
+}
+\define@key{Hyp}{pdfescapeform}[true]{%
+ \Hy@boolkey{pdfescapeform}{#1}%
+}
+\def\@linkbordercolor{1 0 0}
+\def\@urlbordercolor{0 1 1}
+\def\@menubordercolor{1 0 0}
+\def\@filebordercolor{0 .5 .5}
+\def\@runbordercolor{0 .7 .7}
+\def\@citebordercolor{0 1 0}
+\def\@pdfhighlight{/I}
+\let\@pdftitle\ltx@empty
+\let\@pdfauthor\ltx@empty
+\let\@pdfproducer\relax
+\def\@pdfcreator{LaTeX with hyperref package}
+\let\@pdfcreationdate\ltx@empty
+\let\@pdfmoddate\ltx@empty
+\let\@pdfsubject\ltx@empty
+\let\@pdfkeywords\ltx@empty
+\let\@pdftrapped\ltx@empty
+\let\@pdfpagescrop\ltx@empty
+\def\@pdfstartview{/Fit}
+\def\@pdfremotestartview{/Fit}
+\def\@pdfstartpage{1}
+\let\@pdfprintpagerange\ltx@empty
+\let\@pdflang\ltx@empty
+\let\PDF@SetupDoc\@empty
+\let\PDF@FinishDoc\@empty
+\let\phantomsection\@empty
+\let\special@paper\@empty
+\def\HyperDestNameFilter#1{#1}
+\Hy@AtBeginDocument{%
+ \begingroup
+ \edef\x{\@ifundefined{stockheight}\paperheight\stockheight}%
+ \dimen@=\x\relax
+ \ifdim\dimen@>\z@
+ \else
+ \dimen@=11in\relax
+ \Hy@WarningNoLine{%
+ Height of page (\expandafter\string\x) %
+ is invalid (\the\x),\MessageBreak
+ using 11in%
+ }%
+ \fi
+ \dimen@=0.99626401\dimen@
+ \xdef\Hy@pageheight{\strip@pt\dimen@}%
+ \endgroup
+}
+\def\HyInd@EncapChar{\|}
+\let\hyper@normalise\ExecuteOptions
+\let\ExecuteOptions\hypersetup
+\Hy@RestoreCatcodes
+\InputIfFileExists{hyperref.cfg}{}{}
+\Hy@SetCatcodes
+\let\ExecuteOptions\hyper@normalise
+\ifx\Hy@MaybeStopNow\relax
+\else
+ \Hy@stoppedearlytrue
+ \expandafter\Hy@MaybeStopNow
+\fi
+\Hy@stoppedearlyfalse
+\SetupKeyvalOptions{family=Hyp}
+\DeclareLocalOptions{%
+ a4paper,a5paper,b5paper,letterpaper,legalpaper,executivepaper%
+}
+\@ifpackageloaded{tex4ht}{%
+ \@ifpackagewith{hyperref}{tex4ht}{}{%
+ \PassOptionsToPackage{tex4ht}{hyperref}%
+ }%
+}{}
+\let\ReadBookmarks\relax
+\ProcessKeyvalOptions{Hyp}
+\def\Hy@xspace@end{}
+\ltx@IfUndefined{xspaceaddexceptions}{%
+ \Hy@AtBeginDocument{%
+ \ltx@IfUndefined{xspaceaddexceptions}{%
+ }{%
+ \def\Hy@xspace@end{%
+ \ltx@gobble{end for xspace}%
+ }%
+ \xspaceaddexceptions{\Hy@xspace@end,\hyper@linkend,\hyper@anchorend}%
+ }%
+ }%
+}{%
+ \def\Hy@xspace@end{%
+ \ltx@gobble{end for xspace}%
+ }%
+ \xspaceaddexceptions{\Hy@xspace@end,\hyper@linkend,\hyper@anchorend}%
+}
+\Hy@AtBeginDocument{%
+ \ifHy@draft
+ \let\hyper@@anchor\@gobble
+ \gdef\hyper@link#1#2#3{#3\Hy@xspace@end}%
+ \def\hyper@anchorstart#1#2{#2\Hy@xspace@end}%
+ \def\hyper@anchorend{\Hy@xspace@end}%
+ \let\hyper@linkstart\@gobbletwo
+ \def\hyper@linkend{\Hy@xspace@end}%
+ \def\hyper@linkurl#1#2{#1\Hy@xspace@end}%
+ \def\hyper@linkfile#1#2#3{#1\Hy@xspace@end}%
+ \def\hyper@link@[#1]#2#3#4{#4\Hy@xspace@end}%
+ \def\Acrobatmenu#1#2{\leavevmode#2\Hy@xspace@end}%
+ \let\PDF@SetupDoc\@empty
+ \let\PDF@FinishDoc\@empty
+ \let\@fifthoffive\@secondoftwo
+ \let\@secondoffive\@secondoftwo
+ \let\ReadBookmarks\relax
+ \let\WriteBookmarks\relax
+ \Hy@WarningNoLine{Draft mode on}%
+ \fi
+ \Hy@DisableOption{draft}%
+ \Hy@DisableOption{nolinks}%
+ \Hy@DisableOption{final}%
+}
+\Hy@DisableOption{pdfa}
+\ifHy@pdfa
+ \kvsetkeys{Hyp}{pdfversion=1.4}%
+ \def\Hy@Acrobatmenu#1#2{%
+ \leavevmode
+ \begingroup
+ \edef\x{#1}%
+ \@onelevel@sanitize\x
+ \ifx\x\Hy@NextPage
+ \let\y=Y%
+ \else
+ \ifx\x\Hy@PrevPage
+ \let\y=Y%
+ \else
+ \ifx\x\Hy@FirstPage
+ \let\y=Y%
+ \else
+ \ifx\x\Hy@LastPage
+ \let\y=Y%
+ \else
+ \let\y=N%
+ \fi
+ \fi
+ \fi
+ \fi
+ \expandafter\endgroup
+ \ifx\y Y%
+ \else
+ \Hy@Error{%
+ PDF/A: Named action `#1' is not permitted%
+ }\@ehc
+ {#2}%
+ \expandafter\@gobble
+ \fi
+ }%
+ \def\Hy@temp#1{%
+ \expandafter\def\csname Hy@#1\endcsname{#1}%
+ \expandafter\@onelevel@sanitize\csname Hy@#1\endcsname
+ }%
+ \Hy@temp{NextPage}%
+ \Hy@temp{PrevPage}%
+ \Hy@temp{FirstPage}%
+ \Hy@temp{LastPage}%
+\else
+ \def\Hy@Acrobatmenu#1#2{\leavevmode}%
+\fi
+\Hy@nextfalse
+\ltx@IfUndefined{spanish@sh@"@sel}{}{\Hy@nexttrue}
+\ltx@IfUndefined{galician@sh@"@sel}{}{\Hy@nexttrue}
+\ltx@IfUndefined{estonian@sh@"@sel}{}{\Hy@nexttrue}
+\ifHy@next
+ \let\texttilde\~%
+\fi
+\def\Hy@wrapper@babel#1#2{%
+ \begingroup
+ \Hy@safe@activestrue
+ \set@display@protect
+ \edef\x{#2}%
+ \@onelevel@sanitize\x
+ \toks@{#1}%
+ \edef\x{\endgroup\the\toks@{\x}}%
+ \x
+}
+\def\Hy@WrapperDef#1{%
+ \begingroup
+ \escapechar=\m@ne
+ \xdef\Hy@gtemp{%
+ \expandafter\noexpand\csname HyWrap@\string#1\endcsname
+ }%
+ \endgroup
+ \edef#1{%
+ \noexpand\Hy@wrapper@babel
+ \expandafter\noexpand\Hy@gtemp
+ }%
+ \expandafter\def\Hy@gtemp
+}
+\ifHy@hyperfigures
+ \Hy@Info{Hyper figures ON}%
+\else
+ \Hy@Info{Hyper figures OFF}%
+\fi
+\ifHy@nesting
+ \Hy@Info{Link nesting ON}%
+\else
+ \Hy@Info{Link nesting OFF}%
+\fi
+\ifHy@hyperindex
+ \Hy@Info{Hyper index ON}%
+\else
+ \Hy@Info{Hyper index OFF}%
+\fi
+\ifHy@plainpages
+ \Hy@Info{Plain pages ON}%
+\else
+ \Hy@Info{Plain pages OFF}%
+\fi
+\ifHy@backref
+ \Hy@Info{Backreferencing ON}%
+\else
+ \Hy@Info{Backreferencing OFF}%
+\fi
+\ifHy@typexml
+ \Hy@AtEndOfPackage{%
+ \RequirePackage{color}%
+ \RequirePackage{nameref}%
+ }%
+\fi
+\Hy@DisableOption{typexml}
+\ifHy@implicit
+ \Hy@InfoNoLine{Implicit mode ON; LaTeX internals redefined}%
+\else
+ \Hy@InfoNoLine{Implicit mode OFF; no redefinition of LaTeX internals}%
+ \def\MaybeStopEarly{%
+ \Hy@Message{Stopped early}%
+ \Hy@AtBeginDocument{%
+ \PDF@FinishDoc
+ \gdef\PDF@FinishDoc{}%
+ }%
+ \endinput
+ }%
+ \Hy@AtBeginDocument{%
+ \let\autoref\ref
+ \let\autopageref\pageref
+ \ifx\@pdfpagemode\@empty
+ \gdef\@pdfpagemode{UseNone}%
+ \fi
+ \global\Hy@backreffalse
+ }%
+ \Hy@AtEndOfPackage{%
+ \global\let\ReadBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ }%
+\fi
+\Hy@DisableOption{implicit}
+\Hy@AtEndOfPackage{%
+ \@ifpackageloaded{tex4ht}{%
+ \def\Hy@driver{htex4ht}%
+ \Hy@texhttrue
+ }{}%
+ \ifx\Hy@driver\@empty
+ \else
+ \def\Hy@temp{hpdftex}%
+ \ifpdf
+ \ifx\Hy@driver\Hy@temp
+ \else
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ pdfTeX is running in PDF mode.\MessageBreak
+ Forcing driver `\Hy@temp.def'%
+ }%
+ \let\Hy@driver\Hy@temp
+ \fi
+ \else
+ \ifx\Hy@driver\Hy@temp
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ pdfTeX is not running in PDF mode.\MessageBreak
+ Using default driver%
+ }%
+ \let\Hy@driver\@empty
+ \fi
+ \fi
+ \fi
+ \ifHy@texht
+ \else
+ \ifx\Hy@driver\@empty
+ \else
+ \def\Hy@temp{hxetex}%
+ \ifxetex
+ \ifx\Hy@driver\Hy@temp
+ \else
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ XeTeX is running.\MessageBreak
+ Forcing driver `\Hy@temp.def' for XeTeX%
+ }%
+ \let\Hy@driver\Hy@temp
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifx\Hy@driver\@empty
+ \else
+ \def\Hy@temp{hvtexhtm}%
+ \ifvtexhtml
+ \ifx\Hy@driver\Hy@temp
+ \else
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ VTeX is running in HTML mode.\MessageBreak
+ Forcing driver `\Hy@temp.def'%
+ }%
+ \let\Hy@driver\Hy@temp
+ \fi
+ \else
+ \ifx\Hy@driver\Hy@temp
+ \Hy@WarningNoLine{%
+ Wrong driver `\Hy@driver.def';\MessageBreak
+ VTeX is not running in HTML mode.\MessageBreak
+ Using default driver%
+ }%
+ \let\Hy@driver\@empty
+ \fi
+ \fi
+ \fi
+ \def\HyOpt@DriverType{}%
+ \ifx\Hy@driver\@empty
+ \def\HyOpt@DriverType{ (autodetected)}%
+ \providecommand*{\Hy@defaultdriver}{hypertex}%
+ \ifpdf
+ \def\Hy@driver{hpdftex}%
+ \else
+ \ifxetex
+ \def\Hy@driver{hxetex}%
+ \else
+ \ifvtexhtml
+ \def\Hy@driver{hvtexhtm}%
+ \def\MaybeStopEarly{%
+ \Hy@Message{Stopped early}%
+ \Hy@AtBeginDocument{%
+ \PDF@FinishDoc
+ \gdef\PDF@FinishDoc{}%
+ }%
+ \endinput
+ }%
+ \else
+ \ifvtexpdf
+ \def\Hy@driver{hvtex}%
+ \else
+ \ifvtexps
+ \def\Hy@driver{hvtex}%
+ \else
+ \ifx\HyOpt@DriverFallback\ltx@empty
+ \let\Hy@driver\Hy@defaultdriver
+ \def\HyOpt@DriverType{ (default)}%
+ \else
+ \begingroup
+ \toks@\expandafter{\HyOpt@DriverFallback}%
+ \edef\x{\endgroup
+ \noexpand\kvsetkeys{Hyp}{\the\toks@}%
+ }%
+ \x
+ \ifx\Hy@driver\ltx@empty
+ \let\Hy@driver\Hy@defaultdriver
+ \def\HyOpt@DriverType{ (default)}%
+ \else
+ \def\HyOpt@DriverType{ (fallback)}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifx\Hy@driver\Hy@defaultdriver
+ \def\Hy@temp{hdviwind}%
+ \ifx\Hy@temp\Hy@driver
+ \kvsetkeys{Hyp}{colorlinks}%
+ \PassOptionsToPackage{dviwindo}{color}%
+ \fi
+ \fi
+ \fi
+ \Hy@Message{Driver\HyOpt@DriverType: \Hy@driver}%
+ \chardef\Hy@VersionChecked=0 %
+ \input{\Hy@driver.def}%
+ \ifcase\Hy@VersionChecked
+ \Hy@VersionCheck{\Hy@driver.def}%
+ \fi
+ \let\@unprocessedoptions\relax
+ \Hy@RestoreCatcodes
+ \Hy@DisableOption{tex4ht}%
+ \Hy@DisableOption{pdftex}%
+ \Hy@DisableOption{nativepdf}%
+ \Hy@DisableOption{dvipdfm}%
+ \Hy@DisableOption{dvipdfmx}%
+ \Hy@DisableOption{dvipdfmx-outline-open}%
+ \Hy@DisableOption{pdfmark}%
+ \Hy@DisableOption{dvips}%
+ \Hy@DisableOption{hypertex}%
+ \Hy@DisableOption{vtex}%
+ \Hy@DisableOption{vtexpdfmark}%
+ \Hy@DisableOption{dviwindo}%
+ \Hy@DisableOption{dvipsone}%
+ \Hy@DisableOption{textures}%
+ \Hy@DisableOption{latex2html}%
+ \Hy@DisableOption{ps2pdf}%
+ \Hy@DisableOption{xetex}%
+ \Hy@DisableOption{pdfversion}%
+}
+\newif\ifHy@DvipdfmxOutlineOpen
+\ifxetex
+ \ifdim\number\XeTeXversion\XeTeXrevision in<0.9995in %
+ \else
+ \chardef\SpecialDvipdfmxOutlineOpen\@ne
+ \Hy@DvipdfmxOutlineOpentrue
+ \fi
+\fi
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname SpecialDvipdfmxOutlineOpen\endcsname\relax
+\else
+ \ifnum\SpecialDvipdfmxOutlineOpen>\z@
+ \Hy@DvipdfmxOutlineOpentrue
+ \fi
+\fi
+\def\WriteBookmarks{0}
+\def\@bookmarkopenstatus#1{%
+ \ifHy@bookmarksopen
+ \ifnum#1<\expandafter\@firstofone\expandafter
+ {\number\@bookmarksopenlevel} % explicit space
+ \else
+ -%
+ \fi
+ \else
+ -%
+ \fi
+}
+\ifHy@bookmarks
+ \Hy@Info{Bookmarks ON}%
+ \ifx\@pdfpagemode\@empty
+ \def\@pdfpagemode{UseOutlines}%
+ \fi
+\else
+ \let\@bookmarkopenstatus\ltx@gobble
+ \Hy@Info{Bookmarks OFF}%
+ \Hy@AtEndOfPackage{%
+ \global\let\ReadBookmarks\relax
+ \global\let\WriteBookmarks\relax
+ }%
+ \ifx\@pdfpagemode\@empty
+ \def\@pdfpagemode{UseNone}%
+ \fi
+\fi
+\Hy@DisableOption{bookmarks}
+\def\Hy@CatcodeWrapper#1{%
+ \let\Hy@EndWrap\ltx@empty
+ \def\TMP@EnsureCode##1##2{%
+ \edef\Hy@EndWrap{%
+ \Hy@EndWrap
+ \catcode##1 \the\catcode##1\relax
+ }%
+ \catcode##1 ##2\relax
+ }%
+ \TMP@EnsureCode{10}{12}% ^^J
+ \TMP@EnsureCode{33}{12}% !
+ \TMP@EnsureCode{34}{12}% "
+ \TMP@EnsureCode{36}{3}% $ (math)
+ \TMP@EnsureCode{38}{4}% & (alignment)
+ \TMP@EnsureCode{39}{12}% '
+ \TMP@EnsureCode{40}{12}% (
+ \TMP@EnsureCode{41}{12}% )
+ \TMP@EnsureCode{42}{12}% *
+ \TMP@EnsureCode{43}{12}% +
+ \TMP@EnsureCode{44}{12}% ,
+ \TMP@EnsureCode{45}{12}% -
+ \TMP@EnsureCode{46}{12}% .
+ \TMP@EnsureCode{47}{12}% /
+ \TMP@EnsureCode{58}{12}% :
+ \TMP@EnsureCode{59}{12}% ;
+ \TMP@EnsureCode{60}{12}% <
+ \TMP@EnsureCode{61}{12}% =
+ \TMP@EnsureCode{62}{12}% >
+ \TMP@EnsureCode{63}{12}% ?
+ \TMP@EnsureCode{91}{12}% [
+ \TMP@EnsureCode{93}{12}% ]
+ \TMP@EnsureCode{94}{7}% ^ (superscript)
+ \TMP@EnsureCode{95}{8}% _ (subscript)
+ \TMP@EnsureCode{96}{12}% `
+ \TMP@EnsureCode{124}{12}% |
+ \TMP@EnsureCode{126}{13}% ~ (active)
+ #1\relax
+ \Hy@EndWrap
+}
+\Hy@AtBeginDocument{%
+ \ifHy@ocgcolorlinks
+ \kvsetkeys{Hyp}{colorlinks}%
+ \ifHy@pdfa
+ \Hy@Warning{%
+ PDF/A: Optional Content Groups are prohibited,\MessageBreak
+ using `colorlinks' instead of `ocgcolorlinks'%
+ }%
+ \Hy@ocgcolorlinksfalse
+ \fi
+ \fi
+ \ifHy@ocgcolorlinks
+ \else
+ \Hy@DisableOption{ocgcolorlinks}%
+ \fi
+ \ifHy@colorlinks
+ \def\@pdfborder{0 0 0}%
+ \let\@pdfborderstyle\@empty
+ \ifHy@typexml
+ \else
+ \Hy@CatcodeWrapper{%
+ \RequirePackage{color}%
+ }%
+ \fi
+ \def\Hy@colorlink#1{%
+ \begingroup
+ \HyColor@UseColor#1%
+ }%
+ \def\Hy@endcolorlink{\endgroup}%
+ \Hy@Info{Link coloring ON}%
+ \else
+ \ifHy@frenchlinks
+ \def\Hy@colorlink#1{\begingroup\fontshape{sc}\selectfont}%
+ \def\Hy@endcolorlink{\endgroup}%
+ \Hy@Info{French linking ON}%
+ \else
+ \def\Hy@colorlink#1{\begingroup}%
+ \def\Hy@endcolorlink{\endgroup}%
+ \Hy@Info{Link coloring OFF}%
+ \fi
+ \fi
+ \Hy@DisableOption{colorlinks}%
+ \Hy@DisableOption{frenchlinks}%
+ \ifHy@texht
+ \long\def\@firstoffive#1#2#3#4#5{#1}%
+ \long\def\@secondoffive#1#2#3#4#5{#2}%
+ \long\def\@thirdoffive#1#2#3#4#5{#3}%
+ \long\def\@fourthoffive#1#2#3#4#5{#4}%
+ \long\def\@fifthoffive#1#2#3#4#5{#5}%
+ \providecommand*\@safe@activestrue{}%
+ \providecommand*\@safe@activesfalse{}%
+ \def\T@ref#1{%
+ \Hy@safe@activestrue
+ \expandafter\@setref\csname r@#1\endcsname\@firstoffive{#1}%
+ \Hy@safe@activesfalse
+ }%
+ \def\T@pageref#1{%
+ \Hy@safe@activestrue
+ \expandafter\@setref\csname r@#1\endcsname\@secondoffive{#1}%
+ \Hy@safe@activesfalse
+ }%
+ \else
+ \ifHy@typexml
+ \else
+ \Hy@CatcodeWrapper{%
+ \RequirePackage{nameref}%
+ }%
+ \fi
+ \fi
+ \DeclareRobustCommand\ref{%
+ \@ifstar\@refstar\T@ref
+ }%
+ \DeclareRobustCommand\pageref{%
+ \@ifstar\@pagerefstar\T@pageref
+ }%
+ \DeclareRobustCommand*{\nameref}{%
+ \@ifstar\@namerefstar\T@nameref
+ }%
+}
+\Hy@AtBeginDocument{%
+ \ifHy@texht
+ \else
+ \Hy@CatcodeWrapper\ReadBookmarks
+ \fi
+}
+\ifHy@backref
+ \RequirePackage{backref}%
+\else
+ \let\Hy@backout\@gobble
+\fi
+\Hy@DisableOption{backref}
+\Hy@DisableOption{pagebackref}
+\Hy@activeanchorfalse
+\begingroup
+ \endlinechar=-1 %
+ \catcode`\^^A=14 %
+ \catcode`\^^M\active
+ \catcode`\%\active
+ \catcode`\#\active
+ \catcode`\_\active
+ \catcode`\$\active
+ \catcode`\&\active
+ \gdef\hyper@normalise{^^A
+ \begingroup
+ \catcode`\^^M\active
+ \def^^M{ }^^A
+ \catcode`\%\active
+ \let%\@percentchar
+ \let\%\@percentchar
+ \catcode`\#\active
+ \def#{\hyper@hash}^^A
+ \def\#{\hyper@hash}^^A
+ \@makeother\&^^A
+ \edef&{\string&}^^A
+ \edef\&{\string&}^^A
+ \edef\textunderscore{\string_}^^A
+ \let\_\textunderscore
+ \catcode`\_\active
+ \let_\textunderscore
+ \let~\hyper@tilde
+ \let\~\hyper@tilde
+ \let\textasciitilde\hyper@tilde
+ \let\\\@backslashchar
+ \edef${\string$}^^A
+ \Hy@safe@activestrue
+ \hyper@n@rmalise
+ }^^A
+ \catcode`\#=6 ^^A
+ \gdef\Hy@ActiveCarriageReturn{^^M}^^A
+ \gdef\hyper@n@rmalise#1#2{^^A
+ \def\Hy@tempa{#2}^^A
+ \ifx\Hy@tempa\Hy@ActiveCarriageReturn
+ \ltx@ReturnAfterElseFi{^^A
+ \hyper@@normalise{#1}^^A
+ }^^A
+ \else
+ \ltx@ReturnAfterFi{^^A
+ \hyper@@normalise{#1}{#2}^^A
+ }^^A
+ \fi
+ }^^A
+ \gdef\hyper@@normalise#1#2{^^A
+ \edef\Hy@tempa{^^A
+ \endgroup
+ \noexpand#1{\Hy@RemovePercentCr#2%^^M\@nil}^^A
+ }^^A
+ \Hy@tempa
+ }^^A
+ \gdef\Hy@RemovePercentCr#1%^^M#2\@nil{^^A
+ #1^^A
+ \ifx\limits#2\limits
+ \else
+ \ltx@ReturnAfterFi{^^A
+ \Hy@RemovePercentCr #2\@nil
+ }^^A
+ \fi
+ }^^A
+\endgroup
+\providecommand*\hyper@chars{%
+ \let\#\hyper@hash
+ \let\%\@percentchar
+ \Hy@safe@activestrue
+}
+\def\hyperlink#1#2{%
+ \hyper@@link{}{#1}{#2}%
+}
+\def\Hy@VerboseLinkStart#1#2{%
+ \ifHy@verbose
+ \begingroup
+ \Hy@safe@activestrue
+ \xdef\Hy@VerboseGlobalTemp{(#1) `#2'}%
+ \Hy@Info{Reference \Hy@VerboseGlobalTemp}%
+ \xdef\Hy@VerboseGlobalTemp{%
+ \Hy@VerboseGlobalTemp, %
+ line \the\inputlineno
+ }%
+ \endgroup
+ \let\Hy@VerboseLinkInfo\Hy@VerboseGlobalTemp
+ \@onelevel@sanitize\Hy@VerboseLinkInfo
+ \fi
+}
+\def\Hy@VerboseLinkInfo{<VerboseLinkInfo>}
+\def\Hy@VerboseLinkStop{%
+ \ifHy@verbose
+ \begingroup
+ \edef\x{\endgroup
+ \write\m@ne{%
+ Package `hyperref' Info: %
+ End of reference \Hy@VerboseLinkInfo.%
+ }%
+ }%
+ \x
+ \fi
+}
+\def\Hy@VerboseAnchor#1{%
+ \ifHy@verbose
+ \begingroup
+ \Hy@safe@activestrue
+ \Hy@Info{Anchor `\HyperDestNameFilter{#1}'}%
+ \endgroup
+ \fi
+}
+\def\Hy@AllowHyphens{%
+ \relax
+ \ifhmode
+ \penalty\@M
+ \hskip\z@skip
+ \fi
+}
+\DeclareRobustCommand*{\href}[1][]{%
+ \begingroup
+ \setkeys{href}{#1}%
+ \@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}%
+}
+\def\Hy@href#{%
+ \hyper@normalise\href@
+}
+\begingroup
+ \catcode`\$=6 %
+ \catcode`\#=12 %
+ \gdef\href@$1{\expandafter\href@split$1##\\}%
+ \gdef\href@split$1#$2#$3\\$4{%
+ \hyper@@link{$1}{$2}{$4}%
+ \endgroup
+ }%
+\endgroup
+\define@key{href}{page}{%
+ \def\Hy@href@page{#1}%
+}
+\let\Hy@href@page\@empty
+\newcount\c@Hy@tempcnt
+\def\theHy@tempcnt{\the\c@Hy@tempcnt}
+\def\Hy@MakeRemoteAction{%
+ \ifx\Hy@href@page\@empty
+ \def\Hy@href@page{0}%
+ \else
+ \setcounter{Hy@tempcnt}{\Hy@href@page}%
+ \ifnum\c@Hy@tempcnt<\@ne
+ \Hy@Warning{%
+ Invalid page number (\theHy@tempcnt)\MessageBreak
+ for remote PDF file.\MessageBreak
+ Using page 1%
+ }%
+ \def\Hy@href@page{0}%
+ \else
+ \global\advance\c@Hy@tempcnt\m@ne
+ \edef\Hy@href@page{\theHy@tempcnt}%
+ \fi
+ \fi
+ \ifx\Hy@href@nextactionraw\@empty
+ \else
+ \Hy@pdfnewwindowsettrue
+ \Hy@pdfnewwindowtrue
+ \fi
+}
+\define@key{href}{pdfremotestartview}{%
+ \setkeys{Hyp}{pdfremotestartview={#1}}%
+}
+\let\KV@href@pdfnewwindow\KV@Hyp@pdfnewwindow
+\let\KV@href@pdfnewwindow@default\KV@Hyp@pdfnewwindow@default
+\newif\ifHy@href@ismap
+\define@key{href}{ismap}[true]{%
+ \ltx@IfUndefined{Hy@href@ismap#1}{%
+ \Hy@Error{%
+ Invalid value (#1) for key `ismap'.\MessageBreak
+ Permitted values are `true' or `false'.\MessageBreak
+ Ignoring `ismap'%
+ }\@ehc
+ }{%
+ \csname Hy@href@ismap#1\endcsname
+ }%
+}
+\let\Hy@href@nextactionraw\@empty
+\define@key{href}{nextactionraw}{%
+ \edef\Hy@href@nextactionraw{#1}%
+ \ifx\Hy@href@nextactionraw\@empty
+ \else
+ \Hy@Match\Hy@href@nextactionraw{%
+ ^(\HyPat@ObjRef/|<<.*/S[ /].+>>|%
+ \[( ?\HyPat@ObjRef/|<<.*/S[ /].+>>)+ ?])$%
+ }{}{%
+ \Hy@Warning{Invalid value for `nextactionraw':\MessageBreak
+ \Hy@href@nextactionraw\MessageBreak
+ The action is discarded%
+ }%
+ }%
+ \ifx\Hy@href@nextactionraw\@empty
+ \else
+ \edef\Hy@href@nextactionraw{/Next \Hy@href@nextactionraw}%
+ \fi
+ \fi
+}
+\def\HyPat@ObjRef/{.+}
+\RequirePackage{url}
+\let\HyOrg@url\url
+\def\Hurl{\begingroup \Url}
+\DeclareRobustCommand*{\nolinkurl}{\hyper@normalise\nolinkurl@}
+\def\nolinkurl@#1{\Hurl{#1}}
+\DeclareRobustCommand*{\url}{\hyper@normalise\url@}
+\def\url@#1{\hyper@linkurl{\Hurl{#1}}{#1}}
+\DeclareRobustCommand*{\hyperimage}{\hyper@normalise\hyper@image}
+\providecommand\hyper@image[2]{#2}
+\def\hypertarget#1#2{%
+ \ifHy@nesting
+ \hyper@@anchor{#1}{#2}%
+ \else
+ \hyper@@anchor{#1}{\relax}#2%
+ \fi
+}
+\DeclareRobustCommand*{\hyperref}{%
+ \@ifnextchar[{\Hy@babelnormalise\label@hyperref}\@hyperref
+}
+\def\Hy@babelnormalise#1[#2]{%
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\Hy@tempa{%
+ \endgroup
+ \noexpand#1[{#2}]%
+ }%
+ \Hy@tempa
+}
+\def\@hyperref{\hyper@normalise\@@hyperref}
+\def\@@hyperref#1#2#3{%
+ \edef\ref@one{\ifx\\#2\\\else#2.\fi#3}%
+ \expandafter\tryhyper@link\ref@one\\{#1}%
+}
+\def\tryhyper@link#1\\#2{%
+ \hyper@@link{#2}{#1}%
+}
+\def\hyperdef{\@ifnextchar[{\label@hyperdef}{\@hyperdef}}
+\def\@hyperdef#1#2#3{%, category, name, text
+ \ifx\\#1\\%
+ \def\Hy@AnchorName{#2}%
+ \else
+ \def\Hy@AnchorName{#1.#2}%
+ \fi
+ \ifHy@nesting
+ \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{#3}%
+ \else
+ \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{\relax}#3%
+ \fi
+}
+\def\label@hyperref[#1]{%
+ \expandafter\label@@hyperref\csname r@#1\endcsname{#1}%
+}%
+\def\label@@hyperref#1#2#3{%
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \@latex@warning{%
+ Hyper reference `#2' on page \thepage \space undefined%
+ }%
+ \begingroup
+ #3%
+ \endgroup
+ \else
+ \hyper@@link{\expandafter\@fifthoffive#1}%
+ {\expandafter\@fourthoffive#1\@empty\@empty}{#3}%
+ \fi
+}
+\def\label@hyperdef[#1]#2#3#4{% label name, category, name,
+ % anchor text
+ \@bsphack
+ \ifx\\#2\\%
+ \def\Hy@AnchorName{#3}%
+ \else
+ \def\Hy@AnchorName{#2.#3}%
+ \fi
+ \if@filesw
+ \protected@write\@auxout{}{%
+ \string\newlabel{#1}{{}{}{}{\Hy@AnchorName}{}}%
+ }%
+ \fi
+ \@esphack
+ \ifHy@nesting
+ \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{#4}%
+ \else
+ \expandafter\hyper@@anchor\expandafter{\Hy@AnchorName}{\relax}#4%
+ \fi
+}
+\def\hyper@@link{\let\Hy@reserved@a\relax
+ \@ifnextchar[{\hyper@link@}{\hyper@link@[link]}%
+}
+\def\hyper@link@[#1]#2#3#4{%
+ \begingroup
+ \protected@edef\Hy@tempa{#2}%
+ \Hy@safe@activestrue
+ \edef\x{#3}%
+ \ifx\Hy@tempa\@empty
+ \toks0{\hyper@link{#1}}%
+ \else
+ \toks0{\expandafter\hyper@readexternallink#2\\{#1}}%
+ \fi
+ \toks2{%
+ \Hy@safe@activesfalse
+ #4%
+ }%
+ \edef\Hy@tempa{\the\toks2}%
+ \edef\x{\endgroup
+ \ifx\Hy@tempa\@empty
+ \noexpand\Hy@Warning{Suppressing empty link}%
+ \else
+ \the\toks0 {\x}{\the\toks2}%%
+ \fi
+ }%
+ \x
+}
+\def\hyper@readexternallink#1\\#2#3#4{%
+ \begingroup
+ \let\\\relax
+ \expandafter\endgroup
+ \expandafter\@@hyper@@readexternallink#1\\{#2}{#3}{#4}%
+}
+\def\@@hyper@@readexternallink#1\\#2#3#4{%
+ \@hyper@readexternallink{#2}{#3}{#4}#1::\\{#1}%
+}
+\def\@pdftempwordfile{file}%
+\def\@pdftempwordrun{run}%
+\def\@hyper@readexternallink#1#2#3#4:#5:#6\\#7{%
+ \ifx\\#6\\%
+ \@hyper@linkfile file:#7\\{#3}{#2}{#7}%
+ \else
+ \ifx\\#4\\%
+ \@hyper@linkfile file:#7\\{#3}{#2}{#7}%
+ \else
+ \def\@pdftempa{#4}%
+ \ifx\@pdftempa\@pdftempwordfile
+ \@hyper@linkfile#7\\{#3}{#2}{#7}%
+ \else
+ \ifx\@pdftempa\@pdftempwordrun
+ \ifHy@pdfa
+ \Hy@Error{%
+ PDF/A: Launch action is prohibited%
+ }\@ehc
+ \begingroup
+ \leavevmode
+ #2%
+ \endgroup
+ \else
+ \@hyper@launch#7\\{#3}{#2}%
+ \fi
+ \else
+ \hyper@linkurl{#3}{#7\ifx\\#2\\\else\hyper@hash#2\fi}%
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\def\@hyper@launch run:#1\\#2#3{% filename, anchor text, linkname
+ \hyper@linkurl{#2}{%
+ \Hy@linkfileprefix
+ #1%
+ \ifx\\#3\\%
+ \else
+ \hyper@hash
+ #3%
+ \fi
+ }%
+}
+\def\@hyper@linkfile file:#1\\#2#3#4{%
+ %file url,link string, name, original uri
+ \filename@parse{#1}%
+ \ifx\filename@ext\relax
+ \edef\filename@ext{\XR@ext}%
+ \fi
+ \def\use@file{\filename@area\filename@base.\filename@ext}%
+ \Hy@IfStringEndsWith\filename@ext\XR@ext{%
+ \hyper@linkfile{#2}{\use@file}{#3}%
+ }{%
+ \ifx\@baseurl\@empty
+ \hyper@linkurl{#2}{%
+ #4\ifx\\#3\\\else\hyper@hash#3\fi
+ }%
+ \else
+ \hyper@linkurl{#2}{\use@file\ifx\\#3\\\else\hyper@hash#3\fi}%
+ \fi
+ }%
+}
+\def\Hy@IfStringEndsWith#1#2{%
+ \begingroup
+ \edef\x{#1}%
+ \@onelevel@sanitize\x
+ \edef\x{.\x$}%
+ \edef\y{#2}%
+ \@onelevel@sanitize\y
+ \edef\y{.\y$}%
+ \expandafter\def\expandafter\z\expandafter##\expandafter1\y##2\@nil{%
+ \endgroup
+ \ifx\relax##2\relax
+ \expandafter\ltx@secondoftwo
+ \else
+ \expandafter\ltx@firstoftwo
+ \fi
+ }%
+ \expandafter\expandafter\expandafter\z\expandafter\x\y\@nil
+}
+\def\Hy@StringLocalhost{localhost}
+\@onelevel@sanitize\Hy@StringLocalhost
+\def\Hy@CleanupFile#1{%
+ \edef#1{#1}%
+ \expandafter\Hy@@CleanupFile#1\hbox///\hbox\@nil{#1}%
+}
+\def\Hy@@CleanupFile#1//#2/#3\hbox#4\@nil#5{%
+ \begingroup
+ \toks@{\endgroup}%
+ \def\x{#1}%
+ \ifx\x\@empty
+ \def\x{#2}%
+ \ifx\x\@empty
+ \toks@{\endgroup\def#5{/#3}}%
+ \else
+ \@onelevel@sanitize\x
+ \ifx\x\Hy@StringLocalhost
+ \toks@{\endgroup\def#5{/#3}}%
+ \fi
+ \fi
+ \fi
+ \the\toks@
+}
+\long\def\hyper@@anchor#1#2{\@hyper@@anchor#1\relax#2\relax}
+\long\def\@hyper@@anchor#1\relax#2#3\relax{%
+ \ifx\\#1\\%
+ #2\Hy@Warning{Ignoring empty anchor}%
+ \else
+ \def\anchor@spot{#2#3}%
+ \let\put@me@back\@empty
+ \ifx\relax#2\relax
+ \else
+ \ifHy@nesting
+ \else
+ \ifcat a\noexpand#2\relax
+ \else
+ \ifcat 0\noexpand#2 \relax
+ \else
+ \let\anchor@spot\@empty
+ \def\put@me@back{#2#3}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \ifHy@activeanchor
+ \anchor@spot
+ \else
+ \hyper@anchor{#1}%
+ \fi
+ \expandafter\put@me@back
+ \fi
+ \let\anchor@spot\@empty
+}
+\let\anchor@spot\ltx@empty
+\let\htmladdimg\hyperimage
+\def\htmladdnormallink#1#2{\href{#2}{#1}}
+\def\htmladdnormallinkfoot#1#2{\href{#2}{#1}\footnote{#2}}
+\def\htmlref#1#2{% anchor text, label
+ \label@hyperref[{#2}]{#1}%
+}
+\def\@@latextohtmlX{%
+ \let\hhyperref\hyperref
+ \def\hyperref##1##2##3##4{% anchor text for HTML
+ % text to print before label in print
+ % label
+ % post-label text in print
+ ##2\ref{##4}##3%
+ }%
+}
+\RequirePackage{bitset}
+\def\HyField@NewFlag#1#2{%
+ \lowercase{\HyField@NewOption{#2}}%
+ \lowercase{\HyField@NewBitsetFlag{#2}}{#2}{#1}%
+}
+\def\HyField@NewFlagOnly#1#2{%
+ \lowercase{\HyField@NewBitsetFlag{#2}}{#2}{#1}%
+}
+\def\HyField@NewOption#1{%
+ \expandafter\newif\csname ifFld@#1\endcsname
+ \define@key{Field}{#1}[true]{%
+ \lowercase{\Field@boolkey{##1}}{#1}%
+ }%
+}
+\def\HyField@NewBitsetFlag#1#2#3#4{%
+ \begingroup
+ \count@=#4\relax
+ \advance\count@\m@ne
+ \def\x##1{%
+ \endgroup
+ \expandafter\def\csname HyField@#3@#1\endcsname{##1}%
+ \expandafter\ifx\csname HyField@#3@##1\endcsname\relax
+ \expandafter\edef\csname HyField@#3@##1\endcsname{%
+ (\number#4) #2%
+ }%
+ \else
+ \expandafter\edef\csname HyField@#3@##1\endcsname{%
+ \csname HyField@#3@##1\endcsname
+ /#2%
+ }%
+ \fi
+ }%
+ \expandafter\x\expandafter{\the\count@}%
+}
+\def\HyField@UseFlag#1#2{%
+ \lowercase{\HyField@@UseFlag{#2}}{#1}%
+}
+\def\HyField@@UseFlag#1#2{%
+ \bitsetSetValue{HyField@#2}{%
+ \csname HyField@#2@#1\endcsname
+ }{%
+ \csname ifFld@#1\endcsname 1\else 0\fi
+ }%
+}
+\def\HyField@SetFlag#1#2{%
+ \lowercase{\HyField@@SetFlag{#2}}{#1}%
+}
+\def\HyField@@SetFlag#1#2{%
+ \bitsetSetValue{HyField@#2}{%
+ \csname HyField@#2@#1\endcsname
+ }{1}%
+}
+\def\HyField@PrintFlags#1#2{%
+ \ifHy@verbose
+ \begingroup
+ \let\Hy@temp\@empty
+ \let\MessageBreak\relax
+ \expandafter\@for\expandafter\x\expandafter:\expandafter=%
+ \bitsetGetSetBitList{HyField@#1}\do{%
+ \edef\Hy@temp{%
+ \Hy@temp
+ \csname HyField@#1@\x\endcsname\MessageBreak
+ }%
+ }%
+ \edef\x{\endgroup
+ \noexpand\Hy@Info{%
+ Field flags: %
+ \expandafter\ifx\@car#1\@nil S\else/\fi
+ #1 %
+ \bitsetGetDec{HyField@#1} %
+ (0x\bitsetGetHex{HyField@#1}{32})\MessageBreak
+ \Hy@temp
+ for #2%
+ }%
+ }\x
+ \fi
+}
+\HyField@NewFlag{Ff}{ReadOnly}{1}
+\HyField@NewFlag{Ff}{Required}{2}
+\HyField@NewFlag{Ff}{NoExport}{3}
+\HyField@NewFlag{Ff}{NoToggleToOff}{15}
+\HyField@NewFlag{Ff}{Radio}{16}
+\HyField@NewFlag{Ff}{Pushbutton}{17}
+\HyField@NewFlag{Ff}{RadiosInUnison}{26}
+\HyField@NewFlag{Ff}{Multiline}{13}
+\HyField@NewFlag{Ff}{Password}{14}
+\HyField@NewFlag{Ff}{FileSelect}{21}% PDF 1.4
+\HyField@NewFlag{Ff}{DoNotSpellCheck}{23}% PDF 1.4
+\HyField@NewFlag{Ff}{DoNotScroll}{24}% PDF 1.4
+\HyField@NewFlag{Ff}{Comb}{25}% PDF 1.4
+\HyField@NewFlag{Ff}{RichText}{26}% PDF 1.5
+\HyField@NewFlag{Ff}{Combo}{18}
+\HyField@NewFlag{Ff}{Edit}{19}
+\HyField@NewFlag{Ff}{Sort}{20}
+\HyField@NewFlag{Ff}{MultiSelect}{22}% PDF 1.4
+\HyField@NewFlag{Ff}{CommitOnSelChange}{27}% PDF 1.5
+\newif\ifFld@popdown
+\define@key{Field}{popdown}[true]{%
+ \lowercase{\Field@boolkey{#1}}{popdown}%
+}
+\HyField@NewFlag{F}{Invisible}{1}
+\HyField@NewFlag{F}{Hidden}{2}% PDF 1.2
+\HyField@NewFlag{F}{Print}{3}% PDF 1.2
+\HyField@NewFlag{F}{NoZoom}{4}% PDF 1.2
+\HyField@NewFlag{F}{NoRotate}{5}% PDF 1.3
+\HyField@NewFlag{F}{NoView}{6}% PDF 1.3
+\HyField@NewFlag{F}{Locked}{8}% PDF 1.4
+\HyField@NewFlag{F}{ToggleNoView}{9}% PDF 1.5
+\HyField@NewFlag{F}{LockedContents}{10}% PDF 1.7
+\ifHy@pdfa
+ \def\HyField@PDFAFlagWarning#1#2{%
+ \Hy@Warning{%
+ PDF/A: Annotation flag `#1' must\MessageBreak
+ be set to `#2'%
+ }%
+ }%
+ \Fld@invisiblefalse
+ \def\Fld@invisibletrue{%
+ \HyField@PDFAFlagWarning{invisible}{false}%
+ }%
+ \Fld@hiddenfalse
+ \def\Fld@hiddentrue{%
+ \HyField@PDFAFlagWarning{hidden}{false}%
+ }%
+ \Fld@printtrue
+ \def\Fld@printfalse{%
+ \HyField@PDFAFlagWarning{print}{true}%
+ }%
+ \Fld@nozoomtrue
+ \def\Fld@nozoomfalse{%
+ \HyField@PDFAFlagWarning{nozoom}{true}%
+ }%
+ \Fld@norotatetrue
+ \def\Fld@norotatefalse{%
+ \HyField@PDFAFlagWarning{norotate}{true}%
+ }%
+ \Fld@noviewfalse
+ \def\Fld@noviewtrue{%
+ \HyField@PDFAFlagWarning{noview}{false}%
+ }%
+\fi
+\HyField@NewFlag{Submit}{IncludeNoValueFields}{2}
+\HyField@NewFlagOnly{Submit}{ExportFormat}{3}
+\HyField@NewFlag{Submit}{GetMethod}{4}
+\HyField@NewFlag{Submit}{SubmitCoordinates}{5}
+\HyField@NewFlagOnly{Submit}{XFDF}{6}
+\HyField@NewFlag{Submit}{IncludeAppendSaves}{7}
+\HyField@NewFlag{Submit}{IncludeAnnotations}{8}
+\HyField@NewFlagOnly{Submit}{SubmitPDF}{9}
+\HyField@NewFlag{Submit}{CanonicalFormat}{10}
+\HyField@NewFlag{Submit}{ExclNonUserAnnots}{11}
+\HyField@NewFlag{Submit}{ExclFKey}{12}
+\HyField@NewFlag{Submit}{EmbedForm}{14}
+\define@key{Field}{export}{%
+ \lowercase{\def\Hy@temp{#1}}%
+ \@ifundefined{Fld@export@\Hy@temp}{%
+ \@onelevel@sanitize\Hy@temp
+ \Hy@Error{%
+ Unknown export format `\Hy@temp'.\MessageBreak
+ Known formats are `FDF', `HTML', `XFDF', and `PDF'%
+ }\@ehc
+ }{%
+ \let\Fld@export\Hy@temp
+ }%
+}
+\def\Fld@export{fdf}
+\@namedef{Fld@export@fdf}{0}%
+\@namedef{Fld@export@html}{1}%
+\@namedef{Fld@export@xfdf}{2}%
+\@namedef{Fld@export@pdf}{3}%
+\def\HyField@FlagsSubmit{%
+ \bitsetReset{HyField@Submit}%
+ \ifcase\@nameuse{Fld@export@\Fld@export} %
+ % FDF
+ \HyField@UseFlag{Submit}{IncludeNoValueFields}%
+ \HyField@UseFlag{Submit}{SubmitCoordinates}%
+ \HyField@UseFlag{Submit}{IncludeAppendSaves}%
+ \HyField@UseFlag{Submit}{IncludeAnnotations}%
+ \HyField@UseFlag{Submit}{CanonicalFormat}%
+ \HyField@UseFlag{Submit}{ExclNonUserAnnots}%
+ \HyField@UseFlag{Submit}{ExclFKey}%
+ \HyField@UseFlag{Submit}{EmbedForm}%
+ \or % HTML
+ \HyField@SetFlag{Submit}{ExportFormat}%
+ \HyField@UseFlag{Submit}{IncludeNoValueFields}%
+ \HyField@UseFlag{Submit}{GetMethod}%
+ \HyField@UseFlag{Submit}{SubmitCoordinates}%
+ \HyField@UseFlag{Submit}{CanonicalFormat}%
+ \or % XFDF
+ \HyField@SetFlag{Submit}{XFDF}%
+ \HyField@UseFlag{Submit}{IncludeNoValueFields}%
+ \HyField@UseFlag{Submit}{SubmitCoordinates}%
+ \HyField@UseFlag{Submit}{CanonicalFormat}%
+ \or % PDF
+ \HyField@SetFlag{Submit}{SubmitPDF}%
+ \HyField@UseFlag{Submit}{GetMethod}%
+ \fi
+ \HyField@PrintFlags{Submit}{submit button field}%
+ \bitsetIsEmpty{HyField@Submit}{%
+ \let\Fld@submitflags\ltx@empty
+ }{%
+ \edef\Fld@submitflags{/Flags \bitsetGetDec{HyField@Submit}}%
+ }%
+}
+\def\HyField@FlagsAnnot#1{%
+ \bitsetReset{HyField@F}%
+ \HyField@UseFlag{F}{Invisible}%
+ \HyField@UseFlag{F}{Hidden}%
+ \HyField@UseFlag{F}{Print}%
+ \HyField@UseFlag{F}{NoZoom}%
+ \HyField@UseFlag{F}{NoRotate}%
+ \HyField@UseFlag{F}{NoView}%
+ \HyField@UseFlag{F}{Locked}%
+ \HyField@UseFlag{F}{ToggleNoView}%
+ \HyField@UseFlag{F}{LockedContents}%
+ \HyField@PrintFlags{F}{#1}%
+ \bitsetIsEmpty{HyField@F}{%
+ \let\Fld@annotflags\ltx@empty
+ }{%
+ \edef\Fld@annotflags{/F \bitsetGetDec{HyField@F}}%
+ }%
+}
+\def\HyField@FlagsPushButton{%
+ \HyField@FlagsAnnot{push button field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@SetFlag{Ff}{Pushbutton}%
+ \HyField@PrintFlags{Ff}{push button field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+\def\HyField@FlagsCheckBox{%
+ \HyField@FlagsAnnot{check box field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@PrintFlags{Ff}{check box field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+\def\HyField@FlagsRadioButton{%
+ \HyField@FlagsAnnot{radio button field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@UseFlag{Ff}{NoToggleToOff}%
+ \HyField@SetFlag{Ff}{Radio}%
+ \HyField@UseFlag{Ff}{RadiosInUnison}%
+ \HyField@PrintFlags{Ff}{radio button field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+\def\HyField@FlagsText{%
+ \HyField@FlagsAnnot{text field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@UseFlag{Ff}{Multiline}%
+ \HyField@UseFlag{Ff}{Password}%
+ \HyField@UseFlag{Ff}{FileSelect}%
+ \HyField@UseFlag{Ff}{DoNotSpellCheck}%
+ \HyField@UseFlag{Ff}{DoNotScroll}%
+ \ifFld@comb
+ \ifcase0\ifFld@multiline
+ \else\ifFld@password
+ \else\ifFld@fileselect
+ \else 1\fi\fi\fi\relax
+ \Hy@Error{%
+ Field option `comb' cannot used together with\MessageBreak
+ `multiline', `password', or `fileselect'%
+ }\@ehc
+ \else
+ \HyField@UseFlag{Ff}{Comb}%
+ \fi
+ \fi
+ \HyField@UseFlag{Ff}{RichText}%
+ \HyField@PrintFlags{Ff}{text field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+\def\HyField@FlagsChoice{%
+ \HyField@FlagsAnnot{choice field}%
+ \bitsetReset{HyField@Ff}%
+ \HyField@UseFlag{Ff}{ReadOnly}%
+ \HyField@UseFlag{Ff}{Required}%
+ \HyField@UseFlag{Ff}{NoExport}%
+ \HyField@UseFlag{Ff}{Combo}%
+ \ifFld@combo
+ \HyField@UseFlag{Ff}{Edit}%
+ \fi
+ \HyField@UseFlag{Ff}{Sort}%
+ \HyField@UseFlag{Ff}{MultiSelect}%
+ \ifFld@combo
+ \ifFld@edit
+ \HyField@UseFlag{Ff}{DoNotSpellCheck}%
+ \fi
+ \fi
+ \HyField@UseFlag{Ff}{CommitOnSelChange}%
+ \HyField@PrintFlags{Ff}{choice field}%
+ \bitsetIsEmpty{HyField@Ff}{%
+ \let\Fld@flags\ltx@empty
+ }{%
+ \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
+ }%
+}
+\def\HyField@PDFChoices#1{%
+ \begingroup
+ \global\let\Fld@choices\ltx@empty
+ \let\HyTmp@optlist\ltx@empty
+ \let\HyTmp@optitem\relax
+ \count@=0 %
+ \kv@parse{#1}{%
+ \Hy@pdfstringdef\kv@key\kv@key
+ \ifx\kv@value\relax
+ \ifnum\Hy@pdfversion<3 % implementation note 122, PDF spec 1.7
+ \xdef\Fld@choices{\Fld@choices[(\kv@key)(\kv@key)]}%
+ \else
+ \xdef\Fld@choices{\Fld@choices(\kv@key)}%
+ \fi
+ \else
+ \Hy@pdfstringdef\kv@value\kv@value
+ \xdef\Fld@choices{\Fld@choices[(\kv@value)(\kv@key)]}%
+ \fi
+ \edef\HyTmp@optlist{%
+ \HyTmp@optlist
+ \HyTmp@optitem{\the\count@}{\kv@key}0%
+ }%
+ \advance\count@ by 1 %
+ \@gobbletwo
+ }%
+ \xdef\Fld@choices{/Opt[\Fld@choices]}%
+ \ifFld@multiselect
+ \HyField@@PDFChoices{DV}\Fld@default
+ \HyField@@PDFChoices{V}\Fld@value
+ \else
+ \ifx\Fld@default\relax
+ \else
+ \pdfstringdef\Hy@gtemp\Fld@default
+ \xdef\Fld@choices{\Fld@choices/DV(\Hy@gtemp)}%
+ \fi
+ \ifx\Fld@value\relax
+ \else
+ \pdfstringdef\Hy@gtemp\Fld@value
+ \xdef\Fld@choices{\Fld@choices/V(\Hy@gtemp)}%
+ \fi
+ \fi
+ \endgroup
+}
+\def\HyField@@PDFChoices#1#2{%
+ \ifx#2\relax
+ \else
+ \count@=0 %
+ \def\HyTmp@optitem##1##2##3{%
+ \def\HyTmp@key{##2}%
+ \ifx\HyTmp@key\Hy@gtemp
+ \expandafter\def\expandafter\HyTmp@optlist\expandafter{%
+ \HyTmp@optlist
+ \HyTmp@optitem{##1}{##2}1%
+ }%
+ \let\HyTmp@found=Y%
+ \else
+ \expandafter\def\expandafter\HyTmp@optlist\expandafter{%
+ \HyTmp@optlist
+ \HyTmp@optitem{##1}{##2}##3%
+ }%
+ \fi
+ }%
+ \expandafter\comma@parse\expandafter{#2}{%
+ \pdfstringdef\Hy@gtemp\comma@entry
+ \let\HyTmp@found=N %
+ \expandafter\let\expandafter\HyTmp@optlist\expandafter\@empty
+ \HyTmp@optlist
+ \ifx\HyTmp@found Y%
+ \advance\count@ by 1 %
+ \else
+ \@onelevel@sanitize\comma@entry
+ \PackageWarning{hyperref}{%
+ \string\ChoiceBox: Ignoring value `\comma@entry',%
+ \MessageBreak
+ it cannot be found in the choices%
+ }%
+ \fi
+ \@gobble
+ }%
+ \def\HyTmp@optitem##1##2##3{%
+ \ifnum##3=1 %
+ (##2)%
+ \fi
+ }%
+ \ifcase\count@
+ \or
+ \xdef\Fld@choices{\Fld@choices/#1\HyTmp@optlist}%
+ \else
+ \xdef\Fld@choices{\Fld@choices/#1[\HyTmp@optlist]}%
+ \ifx#1V%
+ \def\HyTmp@optitem##1##2##3{%
+ \ifnum##3=1 %
+ \@firstofone{ ##1}%
+ \fi
+ }%
+ \edef\HyTmp@optlist{\HyTmp@optlist}%
+ \xdef\Fld@choices{%
+ \Fld@choices
+ /I[\expandafter\@firstofone\HyTmp@optlist]%
+ }%
+ \fi
+ \fi
+ \fi
+}
+\def\HyField@SetKeys{%
+ \kvsetkeys{Field}%
+}
+\newif\ifFld@checked
+\newif\ifFld@disabled
+\Fld@checkedfalse
+\Fld@disabledfalse
+\newcount\Fld@menulength
+\newdimen\Field@Width
+\newdimen\Fld@charsize
+\Fld@charsize=10\p@
+\def\Fld@maxlen{0}
+\def\Fld@align{0}
+\def\Fld@color{0 0 0 rg}
+\def\Fld@bcolor{1 1 1}
+\def\Fld@bordercolor{1 0 0}
+\def\Fld@bordersep{1\p@}
+\def\Fld@borderwidth{1}
+\def\Fld@borderstyle{S}
+\def\Fld@cbsymbol{4}
+\def\Fld@radiosymbol{H}
+\def\Fld@rotation{0}
+\def\Form{\@ifnextchar[{\@Form}{\@Form[]}}
+\def\endForm{\@endForm}
+\newif\ifForm@html
+\Form@htmlfalse
+\def\Form@boolkey#1#2{%
+ \csname Form@#2\ifx\relax#1\relax true\else#1\fi\endcsname
+}
+\define@key{Form}{action}{%
+ \hyper@normalise\Hy@DefFormAction{#1}%
+}
+\def\Hy@DefFormAction{\def\Form@action}
+\def\enc@@html{html}
+\define@key{Form}{encoding}{%
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\enc@@html
+ \Form@htmltrue
+ \def\Fld@export{html}%
+ \else
+ \Hy@Warning{%
+ Form `encoding' key with \MessageBreak
+ unknown value `#1'%
+ }%
+ \Form@htmlfalse
+ \fi
+}
+\define@key{Form}{method}{%
+ \lowercase{\def\Hy@temp{#1}}%
+ \@ifundefined{Form@method@\Hy@temp}{%
+ \@onelevel@sanitize\Hy@temp
+ \Hy@Error{%
+ Unknown method `\Hy@temp'.\MessageBreak
+ Known values are `post' and `get'%
+ }\@ehc
+ }{%
+ \let\Form@method\Hy@temp
+ \ifcase\@nameuse{Form@method@\Hy@temp} %
+ \Fld@getmethodfalse
+ \else
+ \Fld@getmethodtrue
+ \fi
+ }%
+}
+\def\Form@method{}
+\@namedef{Form@method@post}{0}
+\@namedef{Form@method@get}{1}
+\newif\ifHyField@NeedAppearances
+\def\HyField@NeedAppearancesfalse{%
+ \global\let\ifHyField@NeedAppearances\iffalse
+}
+\def\HyField@NeedAppearancestrue{%
+ \global\let\ifHyField@NeedAppearances\iftrue
+}
+\HyField@NeedAppearancestrue
+\define@key{Form}{NeedAppearances}[true]{%
+ \edef\Hy@tempa{#1}%
+ \ifx\Hy@tempa\Hy@true
+ \HyField@NeedAppearancestrue
+ \else
+ \ifx\Hy@tempa\Hy@false
+ \HyField@NeedAppearancesfalse
+ \else
+ \Hy@Error{%
+ Unexpected value `\Hy@tempa'\MessageBreak
+ of option `NeedAppearances' instead of\MessageBreak
+ `true' or `false'%
+ }\@ehc
+ \fi
+ \fi
+}
+\def\Field@boolkey#1#2{%
+ \csname Fld@#2\ifx\relax#1\relax true\else#1\fi\endcsname
+}
+\ifHy@texht
+ \newtoks\Field@toks
+ \Field@toks={ }%
+ \def\Field@addtoks#1#2{%
+ \edef\@processme{\Field@toks{\the\Field@toks\space #1="#2"}}%
+ \@processme
+ }%
+\else
+ \def\Hy@WarnHTMLFieldOption#1{%
+ \Hy@Warning{%
+ HTML field option `#1'\MessageBreak
+ is ignored%
+ }%
+ }%
+\fi
+\def\Fld@checkequals#1=#2=#3\\{%
+ \def\@currDisplay{#1}%
+ \ifx\\#2\\%
+ \def\@currValue{#1}%
+ \else
+ \def\@currValue{#2}%
+ \fi
+}
+\define@key{Field}{loc}{%
+ \def\Fld@loc{#1}%
+}
+\define@key{Field}{checked}[true]{%
+ \lowercase{\Field@boolkey{#1}}{checked}%
+}
+\define@key{Field}{disabled}[true]{%
+ \lowercase{\Field@boolkey{#1}}{disabled}%
+}
+\ifHy@texht
+ \define@key{Field}{accesskey}{%
+ \Field@addtoks{accesskey}{#1}%
+ }%
+ \define@key{Field}{tabkey}{%
+ \Field@addtoks{tabkey}{#1}%
+ }%
+\else
+ \define@key{Field}{accesskey}{%
+ \Hy@WarnHTMLFieldOption{accesskey}%
+ }%
+ \define@key{Field}{tabkey}{%
+ \Hy@WarnHTMLFieldOption{tabkey}%
+ }%
+\fi
+\define@key{Field}{name}{%
+ \def\Fld@name{#1}%
+}
+\let\Fld@altname\relax
+\define@key{Field}{altname}{%
+ \def\Fld@altname{#1}%
+}
+\let\Fld@mappingname\relax
+\define@key{Field}{mappingname}{%
+ \def\Fld@mappingname{#1}%
+}
+\define@key{Field}{width}{%
+ \def\Fld@width{#1}%
+ \Field@Width#1\setbox0=\hbox{m}%
+}
+\define@key{Field}{maxlen}{%
+ \def\Fld@maxlen{#1}%
+}
+\define@key{Field}{menulength}{%
+ \Fld@menulength=#1\relax
+}
+\define@key{Field}{height}{%
+ \def\Fld@height{#1}%
+}
+\define@key{Field}{charsize}{%
+ \setlength{\Fld@charsize}{#1}%
+}
+\define@key{Field}{borderwidth}{%
+ \Hy@defaultbp\Fld@borderwidth{#1}%
+}
+\def\Hy@defaultbp#1#2{%
+ \begingroup
+ \afterassignment\Hy@defaultbpAux
+ \dimen@=#2bp\relax{#1}{#2}%
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname dimexpr\endcsname\relax
+ \def\Hy@defaultbpAux#1\relax#2#3{%
+ \ifx!#1!%
+ \endgroup
+ \def#2{#3}%
+ \else
+ \dimen@=.99626\dimen@
+ \edef\x{\endgroup
+ \def\noexpand#2{%
+ \strip@pt\dimen@
+ }%
+ }\x
+ \fi
+ }%
+\else
+ \def\Hy@defaultbpAux#1\relax#2#3{%
+ \ifx!#1!%
+ \endgroup
+ \def#2{#3}%
+ \else
+ \edef\x{\endgroup
+ \def\noexpand#2{%
+ \strip@pt\dimexpr\dimen@*800/803\relax
+ }%
+ }\x
+ \fi
+ }%
+\fi
+\define@key{Field}{borderstyle}{%
+ \let\Hy@temp\Fld@borderstyle
+ \def\Fld@borderstyle{#1}%
+ \Hy@Match\Fld@borderstyle{%
+ ^[SDBIU]$%
+ }{}{%
+ \Hy@Warning{%
+ Invalid value `\@pdfborderstyle'\MessageBreak
+ for option `pdfborderstyle'. Valid values:\MessageBreak
+ \space\space S (Solid), D (Dashed), B (Beveled),\MessageBreak
+ \space\space I (Inset), U (Underline)\MessageBreak
+ Option setting is ignored%
+ }%
+ \let\Fld@borderstyle\Hy@temp
+ }%
+}
+\define@key{Field}{bordersep}{%
+ \def\Fld@bordersep{#1}%
+}
+\define@key{Field}{default}{%
+ \def\Fld@default{#1}%
+}
+\define@key{Field}{align}{%
+ \def\Fld@align{#1}%
+}
+\define@key{Field}{value}{%
+ \def\Fld@value{#1}%
+}
+\define@key{Field}{checkboxsymbol}{%
+ \Fld@DingDef\Fld@cbsymbol{#1}%
+}
+\define@key{Field}{radiosymbol}{%
+ \Fld@DingDef\Fld@radiosymbol{#1}%
+}
+\def\Fld@DingDef#1#2{%
+ \let\Fld@temp\ltx@empty
+ \Fld@@DingDef#2\ding{}\@nil
+ \let#1\Fld@temp
+}
+\def\Fld@@DingDef#1\ding#2#3\@nil{%
+ \expandafter\def\expandafter\Fld@temp\expandafter{%
+ \Fld@temp
+ #1%
+ }%
+ \ifx\\#3\\%
+ \expandafter\@gobble
+ \else
+ \begingroup
+ \lccode`0=#2\relax
+ \lowercase{\endgroup
+ \expandafter\def\expandafter\Fld@temp\expandafter{%
+ \Fld@temp
+ 0%
+ }%
+ }%
+ \expandafter\@firstofone
+ \fi
+ {%
+ \Fld@@DingDef#3\@nil
+ }%
+}
+\define@key{Field}{rotation}{%
+ \def\Fld@rotation{#1}%
+}
+\define@key{Field}{backgroundcolor}{%
+ \HyColor@FieldBColor{#1}\Fld@bcolor{hyperref}{backgroundcolor}%
+}
+\define@key{Field}{bordercolor}{%
+ \HyColor@FieldBColor{#1}\Fld@bordercolor{hyperref}{bordercolor}%
+}
+\define@key{Field}{color}{%
+ \HyColor@FieldColor{#1}\Fld@color{hyperref}{color}%
+}
+\let\Fld@onclick@code\ltx@empty
+\let\Fld@format@code\ltx@empty
+\let\Fld@validate@code\ltx@empty
+\let\Fld@calculate@code\ltx@empty
+\let\Fld@keystroke@code\ltx@empty
+\let\Fld@onfocus@code\ltx@empty
+\let\Fld@onblur@code\ltx@empty
+\let\Fld@onmousedown@code\ltx@empty
+\let\Fld@onmouseup@code\ltx@empty
+\let\Fld@onenter@code\ltx@empty
+\let\Fld@onexit@code\ltx@empty
+\def\Hy@temp#1{%
+ \expandafter\Hy@@temp\csname Fld@#1@code\endcsname{#1}%
+}
+\def\Hy@@temp#1#2{%
+ \ifHy@pdfa
+ \define@key{Field}{#2}{%
+ \Hy@Error{%
+ PDF/A: Additional action `#2' is prohibited%
+ }\@ehc
+ }%
+ \else
+ \define@key{Field}{#2}{%
+ \def#1{##1}%
+ }%
+ \fi
+}
+\Hy@temp{keystroke}
+\Hy@temp{format}
+\Hy@temp{validate}
+\Hy@temp{calculate}
+\Hy@temp{onfocus}
+\Hy@temp{onblur}
+\Hy@temp{onenter}
+\Hy@temp{onexit}
+\ifHy@texht
+ \def\Hy@temp#1{%
+ \define@key{Field}{#1}{%
+ \Field@addtoks{#1}{##1}%
+ }%
+ }%
+\else
+ \def\Hy@temp#1{%
+ \define@key{Field}{#1}{%
+ \Hy@WarnHTMLFieldOption{#1}%
+ }%
+ }%
+\fi
+\Hy@temp{ondblclick}
+\Hy@temp{onmousedown}
+\Hy@temp{onmouseup}
+\Hy@temp{onmouseover}
+\Hy@temp{onmousemove}
+\Hy@temp{onmouseout}
+\Hy@temp{onkeydown}
+\Hy@temp{onkeyup}
+\Hy@temp{onselect}
+\Hy@temp{onchange}
+\Hy@temp{onkeypress}
+\ifHy@texht
+ \define@key{Field}{onclick}{%
+ \Field@addtoks{onclick}{#1}%
+ }%
+\else
+ \ifHy@pdfa
+ \define@key{Field}{onclick}{%
+ \Hy@Error{%
+ PDF/A: Action `onclick' is prohibited%
+ }\@ehc
+ }%
+ \else
+ \define@key{Field}{onclick}{%
+ \def\Fld@onclick@code{#1}%
+ }%
+ \fi
+\fi
+\DeclareRobustCommand\TextField{%
+ \@ifnextchar[{\@TextField}{\@TextField[]}%
+}
+\DeclareRobustCommand\ChoiceMenu{%
+ \@ifnextchar[{\@ChoiceMenu}{\@ChoiceMenu[]}%
+}
+\DeclareRobustCommand\CheckBox{%
+ \@ifnextchar[{\@CheckBox}{\@CheckBox[]}%
+}
+\DeclareRobustCommand\PushButton{%
+ \@ifnextchar[{\@PushButton}{\@PushButton[]}%
+}
+\DeclareRobustCommand\Gauge{%
+ \@ifnextchar[{\@Gauge}{\@Gauge[]}%
+}
+\DeclareRobustCommand\Submit{%
+ \@ifnextchar[{\@Submit}{\@Submit[]}%
+}
+\DeclareRobustCommand\Reset{%
+ \@ifnextchar[{\@Reset}{\@Reset[]}%
+}
+\def\LayoutTextField#1#2{% label, field
+ #1 #2%
+}
+\def\LayoutChoiceField#1#2{% label, field
+ #1 #2%
+}
+\def\LayoutCheckField#1#2{% label, field
+ #1 #2%
+}
+\def\LayoutPushButtonField#1{% button
+ #1%
+}
+\def\MakeRadioField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
+\def\MakeCheckField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
+\def\MakeTextField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
+\def\MakeChoiceField#1#2{\vbox to #2{\hbox to #1{\hfill}\vfill}}
+\def\MakeButtonField#1{%
+ \sbox0{%
+ \hskip\Fld@borderwidth bp#1\hskip\Fld@borderwidth bp%
+ }%
+ \@tempdima\ht0 %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \ht0\@tempdima
+ \@tempdima\dp0 %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \advance\@tempdima by \Fld@borderwidth bp %
+ \dp0\@tempdima
+ \box0\relax
+}
+\def\DefaultHeightofSubmit{14pt}
+\def\DefaultWidthofSubmit{2cm}
+\def\DefaultHeightofReset{14pt}
+\def\DefaultWidthofReset{2cm}
+\def\DefaultHeightofCheckBox{\baselineskip}
+\def\DefaultWidthofCheckBox{\baselineskip}
+\def\DefaultHeightofChoiceMenu{\baselineskip}
+\def\DefaultWidthofChoiceMenu{\baselineskip}
+\def\DefaultHeightofText{\baselineskip}
+\def\DefaultHeightofTextMultiline{4\baselineskip}
+\def\DefaultWidthofText{3cm}
+\def\DefaultOptionsofSubmit{print,name=Submit,noexport}
+\def\DefaultOptionsofReset{print,name=Reset,noexport}
+\def\DefaultOptionsofPushButton{print}
+\def\DefaultOptionsofCheckBox{print}
+\def\DefaultOptionsofText{print}
+\def\DefaultOptionsofListBox{print}
+\def\DefaultOptionsofComboBox{print,edit,sort}
+\def\DefaultOptionsofPopdownBox{print}
+\def\DefaultOptionsofRadio{print,notoggletooff}
+\ifHy@hyperfigures
+ \Hy@Info{Hyper figures ON}%
+\else
+ \Hy@Info{Hyper figures OFF}%
+\fi
+\ifHy@nesting
+ \Hy@Info{Link nesting ON}%
+\else
+ \Hy@Info{Link nesting OFF}%
+\fi
+\ifHy@hyperindex
+ \Hy@Info{Hyper index ON}%
+\else
+ \Hy@Info{Hyper index OFF}%
+\fi
+\ifHy@backref
+ \Hy@Info{backreferencing ON}%
+\else
+ \Hy@Info{backreferencing OFF}%
+\fi
+\ifHy@colorlinks
+ \Hy@Info{Link coloring ON}%
+\else
+ \Hy@Info{Link coloring OFF}%
+\fi
+\ifHy@ocgcolorlinks
+ \Hy@Info{Link coloring with OCG ON}%
+\else
+ \Hy@Info{Link coloring with OCG OFF}%
+\fi
+\ifHy@pdfa
+ \Hy@Info{PDF/A mode ON}%
+\else
+ \Hy@Info{PDF/A mode OFF}%
+\fi
+\edef\hyper@hash{\string#}
+\edef\hyper@tilde{\string~}
+\edef\hyper@quote{\string"}
+\def\@currentHref{Doc-Start}
+\let\Hy@footnote@currentHref\@empty
+\Hy@AtBeginDocument{%
+ \Hy@pdfstringtrue
+ \PDF@SetupDoc
+ \let\PDF@SetupDoc\@empty
+ \Hy@DisableOption{pdfpagescrop}%
+ \Hy@DisableOption{pdfpagemode}%
+ \Hy@DisableOption{pdfnonfullscreenpagemode}%
+ \Hy@DisableOption{pdfdirection}%
+ \Hy@DisableOption{pdfviewarea}%
+ \Hy@DisableOption{pdfviewclip}%
+ \Hy@DisableOption{pdfprintarea}%
+ \Hy@DisableOption{pdfprintclip}%
+ \Hy@DisableOption{pdfprintscaling}%
+ \Hy@DisableOption{pdfduplex}%
+ \Hy@DisableOption{pdfpicktraybypdfsize}%
+ \Hy@DisableOption{pdfprintpagerange}%
+ \Hy@DisableOption{pdfnumcopies}%
+ \Hy@DisableOption{pdfstartview}%
+ \Hy@DisableOption{pdfstartpage}%
+ \Hy@DisableOption{pdftoolbar}%
+ \Hy@DisableOption{pdfmenubar}%
+ \Hy@DisableOption{pdfwindowui}%
+ \Hy@DisableOption{pdffitwindow}%
+ \Hy@DisableOption{pdfcenterwindow}%
+ \Hy@DisableOption{pdfdisplaydoctitle}%
+ \Hy@DisableOption{pdfpagelayout}%
+ \Hy@DisableOption{pdflang}%
+ \Hy@DisableOption{baseurl}%
+ \ifHy@texht\else\hyper@anchorstart{Doc-Start}\hyper@anchorend\fi
+ \Hy@pdfstringfalse
+}
+
+\LetLtxMacro\NoHy@OrgRef\ref
+\DeclareRobustCommand*{\ref}{%
+ \@ifstar\NoHy@OrgRef\NoHy@OrgRef
+}
+\LetLtxMacro\NoHy@OrgPageRef\pageref
+\DeclareRobustCommand*{\pageref}{%
+ \@ifstar\NoHy@OrgPageRef\NoHy@OrgPageRef
+}
+\def\NoHyper{%
+ \def\hyper@link@[##1]##2##3##4{##4\Hy@xspace@end}%
+ \def\hyper@@anchor##1##2{##2\Hy@xspace@end}%
+ \global\let\hyper@livelink\hyper@link
+ \gdef\hyper@link##1##2##3{##3\Hy@xspace@end}%
+ \let\hyper@anchor\ltx@gobble
+ \let\hyper@anchorstart\ltx@gobble
+ \def\hyper@anchorend{\Hy@xspace@end}%
+ \let\hyper@linkstart\ltx@gobbletwo
+ \def\hyper@linkend{\Hy@xspace@end}%
+ \def\hyper@linkurl##1##2{##1\Hy@xspace@end}%
+ \def\hyper@linkfile##1##2##3{##1\Hy@xspace@end}%
+ \let\Hy@backout\@gobble
+}
+\def\stop@hyper{%
+ \def\hyper@link@[##1]##2##3##4{##4\Hy@xspace@end}%
+ \let\Hy@backout\@gobble
+ \let\hyper@@anchor\ltx@gobble
+ \def\hyper@link##1##2##3{##3\Hy@xspace@end}%
+ \let\hyper@anchor\ltx@gobble
+ \let\hyper@anchorstart\ltx@gobble
+ \def\hyper@anchorend{\Hy@xspace@end}%
+ \let\hyper@linkstart\ltx@gobbletwo
+ \def\hyper@linkend{\Hy@xspace@end}%
+ \def\hyper@linkurl##1##2{##1\Hy@xspace@end}%
+ \def\hyper@linkfile##1##2##3{##1\Hy@xspace@end}%
+}
+\def\endNoHyper{%
+ \global\let\hyper@link\hyper@livelink
+}
+\Hy@AtBeginDocument{%
+ \if@filesw
+ \ifHy@typexml
+ \immediate\closeout\@mainaux
+ \immediate\openout\@mainaux\jobname.aux\relax
+ \immediate\write\@auxout{<relaxxml>\relax}%
+ \fi
+ \immediate\write\@auxout{%
+ \string\providecommand\string\HyperFirstAtBeginDocument{%
+ \string\AtBeginDocument}^^J%
+ \string\HyperFirstAtBeginDocument{%
+ \string\ifx\string\hyper@anchor\string\@undefined^^J%
+ \string\global\string\let\string\oldcontentsline\string\contentsline^^J%
+ \string\gdef\string\contentsline%
+ \string#1\string#2\string#3\string#4{%
+ \string\oldcontentsline%
+ {\string#1}{\string#2}{\string#3}}^^J%
+ \string\global\string\let\string\oldnewlabel\string\newlabel^^J%
+ \string\gdef\string\newlabel\string#1\string#2{%
+ \string\newlabelxx{\string#1}\string#2}^^J%
+ \string\gdef\string\newlabelxx%
+ \string#1\string#2\string#3\string#4\string#5\string#6{%
+ \string\oldnewlabel{\string#1}{{\string#2}{\string#3}}}^^J%
+ \string\AtEndDocument{%
+ \string\ifx\string\hyper@anchor\string\@undefined^^J%
+ \string\let\string\contentsline\string\oldcontentsline^^J%
+ \string\let\string\newlabel\string\oldnewlabel^^J%
+ \string\fi%
+ }^^J%
+ \string\fi%
+ }^^J%
+ \string\global\string\let\string\hyper@last\relax^^J%
+ \string\gdef\string\HyperFirstAtBeginDocument\string#1{\string#1}%
+ }%
+ \fi
+ \let\HyperFirstAtBeginDocument\ltx@firstofone
+ \ifx\hyper@last\@undefined
+ \def\@starttoc#1{%
+ \begingroup
+ \makeatletter
+ \IfFileExists{\jobname.#1}{%
+ \Hy@WarningNoLine{%
+ old #1 file detected, not used; run LaTeX again%
+ }%
+ }{}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout\csname tf@#1\endcsname \jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \endgroup
+ }%
+ \def\newlabel#1#2{\@newl@bel r{#1}{#2{}{}{}{}}}%
+ \fi
+}
+\ifHy@pdfusetitle
+ \let\HyOrg@title\title
+ \let\HyOrg@author\author
+ \def\title{\@ifnextchar[{\Hy@scanopttitle}{\Hy@scantitle}}%
+ \def\Hy@scanopttitle[#1]{%
+ \gdef\Hy@title{#1}%
+ \HyOrg@title[{#1}]%
+ }%
+ \def\Hy@scantitle#1{%
+ \gdef\Hy@title{#1}%
+ \HyOrg@title{#1}%
+ }%
+ \def\author{\@ifnextchar[{\Hy@scanoptauthor}{\Hy@scanauthor}}%
+ \def\Hy@scanoptauthor[#1]{%
+ \gdef\Hy@author{#1}%
+ \HyOrg@author[{#1}]%
+ }%
+ \def\Hy@scanauthor#1{%
+ \gdef\Hy@author{#1}%
+ \HyOrg@author{#1}%
+ }%
+ \begingroup
+ \def\process@me#1\@nil#2{%
+ \expandafter\let\expandafter\x\csname @#2\endcsname
+ \edef\y{\expandafter\strip@prefix\meaning\x}%
+ \def\c##1#1##2\@nil{%
+ \ifx\\##1\\%
+ \else
+ \expandafter\gdef\csname Hy@#2\expandafter\endcsname
+ \expandafter{\x}%
+ \fi
+ }%
+ \expandafter\c\y\relax#1\@nil
+ }%
+ \expandafter\process@me\string\@latex@\@nil{title}%
+ \expandafter\process@me\string\@latex@\@nil{author}%
+ \endgroup
+\fi
+\Hy@DisableOption{pdfusetitle}
+\def\Hy@UseMaketitleString#1{%
+ \ltx@IfUndefined{Hy@#1}{}{%
+ \begingroup
+ \let\Hy@saved@hook\pdfstringdefPreHook
+ \pdfstringdefDisableCommands{%
+ \expandafter\let\expandafter\\\csname Hy@newline@#1\endcsname
+ \let\newline\\%
+ }%
+ \expandafter\ifx\csname @pdf#1\endcsname\@empty
+ \expandafter\pdfstringdef\csname @pdf#1\endcsname{%
+ \csname Hy@#1\endcsname\@empty
+ }%
+ \fi
+ \global\let\pdfstringdefPreHook\Hy@saved@hook
+ \endgroup
+ }%
+}
+\def\Hy@newline@title#1{ #1}
+\def\Hy@newline@author#1{, #1}
+\def\Hy@UseMaketitleInfos{%
+ \Hy@UseMaketitleString{title}%
+ \Hy@UseMaketitleString{author}%
+}
+\RequirePackage{atbegshi}[2007/09/09]
+\let\Hy@EveryPageHook\ltx@empty
+\let\Hy@EveryPageBoxHook\ltx@empty
+\let\Hy@FirstPageHook\ltx@empty
+\AtBeginShipout{%
+ \Hy@EveryPageHook
+ \ifx\Hy@EveryPageBoxHook\ltx@empty
+ \else
+ \setbox\AtBeginShipoutBox=\vbox{%
+ \offinterlineskip
+ \Hy@EveryPageBoxHook
+ \box\AtBeginShipoutBox
+ }%
+ \fi
+}
+\AtBeginShipoutFirst{%
+ \Hy@FirstPageHook
+}
+\g@addto@macro\Hy@FirstPageHook{%
+ \PDF@FinishDoc
+ \global\let\PDF@FinishDoc\ltx@empty
+}
+\ifHy@pdfpagelabels
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname thepage\endcsname\relax
+ \Hy@pdfpagelabelsfalse
+ \Hy@WarningNoLine{%
+ Option `pdfpagelabels' is turned off\MessageBreak
+ because \string\thepage\space is undefined%
+ }%
+ \csname fi\endcsname
+ \csname iffalse\expandafter\endcsname
+ \fi
+ \def\thispdfpagelabel#1{%
+ \gdef\HyPL@thisLabel{#1}%
+ }%
+ \global\let\HyPL@thisLabel\relax
+ \let\HyPL@Labels\ltx@empty
+ \newcount\Hy@abspage
+ \Hy@abspage=0 %
+ \def\HyPL@LastType{init}%
+ \def\HyPL@LastNumber{0}%
+ \let\HyPL@LastPrefix\ltx@empty
+ \def\HyPL@arabic{D}%
+ \def\HyPL@Roman{R}%
+ \def\HyPL@roman{r}%
+ \def\HyPL@Alph{A}%
+ \def\HyPL@alph{a}%
+ \let\HyPL@SlidesSetPage\ltx@empty
+ \ltx@ifclassloaded{slides}{%
+ \def\HyPL@SlidesSetPage{%
+ \advance\c@page\ltx@one
+ \ifnum\value{page}>\ltx@one
+ \protected@edef\HyPL@SlidesOptionalPage{%
+ \Hy@SlidesFormatOptionalPage{\thepage}%
+ }%
+ \else
+ \let\HyPL@SlidesOptionalPage\ltx@empty
+ \fi
+ \advance\c@page-\ltx@one
+ \def\HyPL@page{%
+ \csname the\Hy@SlidesPage\endcsname
+ \HyPL@SlidesOptionalPage
+ }%
+ }%
+ }{}%
+ \def\HyPL@EveryPage{%
+ \begingroup
+ \ifx\HyPL@thisLabel\relax
+ \let\HyPL@page\thepage
+ \HyPL@SlidesSetPage
+ \else
+ \let\HyPL@page\HyPL@thisLabel
+ \global\let\HyPL@thisLabel\relax
+ \fi
+ \let\HyPL@Type\relax
+ \ifnum\c@page>0 %
+ \ifx\HyPL@SlidesSetPage\ltx@empty
+ \expandafter\HyPL@CheckThePage\HyPL@page\@nil
+ \fi
+ \fi
+ \let\Hy@temp Y%
+ \ifx\HyPL@Type\HyPL@LastType
+ \else
+ \let\Hy@temp N%
+ \fi
+ \ifx\HyPL@Type\relax
+ \pdfstringdef\HyPL@Prefix{\HyPL@page}%
+ \else
+ \pdfstringdef\HyPL@Prefix\HyPL@Prefix
+ \fi
+ \ifx\HyPL@Prefix\HyPL@LastPrefix
+ \else
+ \let\Hy@temp N%
+ \fi
+ \if Y\Hy@temp
+ \advance\c@page by -1 %
+ \ifnum\HyPL@LastNumber=\the\c@page\relax
+ \else
+ \let\Hy@temp N%
+ \fi
+ \Hy@StepCount\c@page
+ \fi
+ \if N\Hy@temp
+ \ifx\HyPL@Type\relax
+ \HyPL@StorePageLabel{/P(\HyPL@Prefix)}%
+ \else
+ \HyPL@StorePageLabel{%
+ \ifx\HyPL@Prefix\@empty
+ \else
+ /P(\HyPL@Prefix)%
+ \fi
+ /S/\csname HyPL\HyPL@Type\endcsname
+ \ifnum\the\c@page=1 %
+ \else
+ \space/St \the\c@page
+ \fi
+ }%
+ \fi
+ \fi
+ \xdef\HyPL@LastNumber{\the\c@page}%
+ \global\let\HyPL@LastType\HyPL@Type
+ \global\let\HyPL@LastPrefix\HyPL@Prefix
+ \endgroup
+ \Hy@GlobalStepCount\Hy@abspage
+ }%
+ \def\HyPL@CheckThePage#1\@nil{%
+ \HyPL@@CheckThePage{#1}#1\csname\endcsname\c@page\@nil
+ }%
+ \def\HyPL@@CheckThePage#1#2\csname#3\endcsname\c@page#4\@nil{%
+ \def\Hy@tempa{#4}%
+ \def\Hy@tempb{\csname\endcsname\c@page}%
+ \ifx\Hy@tempa\Hy@tempb
+ \expandafter\ifx\csname HyPL#3\endcsname\relax
+ \else
+ \def\HyPL@Type{#3}%
+ \def\HyPL@Prefix{#2}%
+ \fi
+ \else
+ \begingroup
+ \let\Hy@next\endgroup
+ \let\HyPL@found\@undefined
+ \def\arabic{\HyPL@Format{arabic}}%
+ \def\Roman{\HyPL@Format{Roman}}%
+ \def\roman{\HyPL@Format{roman}}%
+ \def\Alph{\HyPL@Format{Alph}}%
+ \def\alph{\HyPL@Format{alph}}%
+ \protected@edef\Hy@temp{#1}%
+ \ifx\HyPL@found\relax
+ \toks@\expandafter{\Hy@temp}%
+ \edef\Hy@next{\endgroup
+ \noexpand\HyPL@@@CheckThePage\the\toks@
+ \noexpand\HyPL@found\relax\noexpand\@nil
+ }%
+ \fi
+ \Hy@next
+ \fi
+ }%
+ \def\HyPL@Format#1#2{%
+ \ifx\HyPL@found\@undefined
+ \expandafter\ifx\csname c@#2\endcsname\c@page
+ \expandafter\noexpand\csname HyPL@found\endcsname{#1}%
+ \else
+ \expandafter\noexpand\csname#1\endcsname{#2}%
+ \fi
+ \else
+ \expandafter\noexpand\csname#1\endcsname{#2}%
+ \fi
+ }%
+ \def\HyPL@@@CheckThePage#1\HyPL@found#2#3\@nil{%
+ \def\Hy@tempa{#3}%
+ \def\Hy@tempb{\HyPL@found\relax}%
+ \ifx\Hy@tempa\Hy@tempb
+ \def\HyPL@Type{@#2}%
+ \def\HyPL@Prefix{#1}%
+ \fi
+ }%
+ \providecommand*{\HyPL@StorePageLabel}[1]{}%
+ \def\HyPL@Useless{0<</S/D>>}%
+ \@onelevel@sanitize\HyPL@Useless
+ \def\HyPL@SetPageLabels{%
+ \@onelevel@sanitize\HyPL@Labels
+ \ifx\HyPL@Labels\@empty
+ \else
+ \ifx\HyPL@Labels\HyPL@Useless
+ \else
+ \Hy@PutCatalog{/PageLabels<</Nums[\HyPL@Labels]>>}%
+ \fi
+ \fi
+ }%
+ \g@addto@macro\Hy@EveryPageHook{\HyPL@EveryPage}%
+\fi
+\Hy@DisableOption{pdfpagelabels}
+\ifx\MaybeStopEarly\relax
+\else
+ \Hy@stoppedearlytrue
+ \expandafter\MaybeStopEarly
+\fi
+\Hy@stoppedearlyfalse
+\def\Hy@CounterExists#1{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname c@#1\endcsname\relax
+ \expandafter\@gobble
+ \else
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname the#1\endcsname\relax
+ \expandafter\expandafter\expandafter\@gobble
+ \else
+ \expandafter\expandafter\expandafter\@firstofone
+ \fi
+ \fi
+}
+\Hy@CounterExists{section}{%
+ \providecommand\theHequation{\theHsection.\arabic{equation}}%
+}
+\Hy@CounterExists{part}{%
+ \providecommand\theHpart{\arabic{part}}%
+}
+\ltx@IfUndefined{thechapter}{%
+ \providecommand\theHsection {\arabic{section}}%
+ \providecommand\theHfigure {\arabic{figure}}%
+ \providecommand\theHtable {\arabic{table}}%
+}{%
+ \providecommand\theHchapter {\arabic{chapter}}%
+ \providecommand\theHfigure {\theHchapter.\arabic{figure}}%
+ \providecommand\theHtable {\theHchapter.\arabic{table}}%
+ \providecommand\theHsection {\theHchapter.\arabic{section}}%
+}
+\providecommand\theHsubsection {\theHsection.\arabic{subsection}}
+\providecommand\theHsubsubsection{\theHsubsection.\arabic{subsubsection}}
+\providecommand\theHparagraph {\theHsubsubsection.\arabic{paragraph}}
+\providecommand\theHsubparagraph {\theHparagraph.\arabic{subparagraph}}
+\providecommand\theHtheorem {\theHsection.\arabic{theorem}}
+\providecommand\theHthm {\theHsection.\arabic{thm}}
+\let\H@item\item
+\newcounter{Item}
+\def\theHItem{\arabic{Item}}
+\def\item{%
+ \@hyper@itemfalse
+ \if@nmbrlist\@hyper@itemtrue\fi
+ \H@item
+}
+\providecommand\theHenumi {\theHItem}
+\providecommand\theHenumii {\theHItem}
+\providecommand\theHenumiii {\theHItem}
+\providecommand\theHenumiv {\theHItem}
+\providecommand\theHHfootnote {\arabic{Hfootnote}}
+\providecommand\theHmpfootnote{\arabic{mpfootnote}}
+\@ifundefined{theHHmpfootnote}{%
+ \let\theHHmpfootnote\theHHfootnote
+}{}
+\let\H@refstepcounter\refstepcounter
+\edef\name@of@eq{equation}%
+\edef\name@of@slide{slide}%
+\newif\if@hyper@item
+\newif\if@skiphyperref
+\@hyper@itemfalse
+\@skiphyperreffalse
+\def\refstepcounter#1{%
+ \ifHy@pdfstring
+ \else
+ \H@refstepcounter{#1}%
+ \edef\This@name{#1}%
+ \ifx\This@name\name@of@slide
+ \else
+ \if@skiphyperref
+ \else
+ \if@hyper@item
+ \stepcounter{Item}%
+ \hyper@refstepcounter{Item}%
+ \@hyper@itemfalse
+ \else
+ \hyper@refstepcounter{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\let\Hy@saved@refstepcounter\refstepcounter
+\@ifpackageloaded{amsmath}{}{\newif\ifmeasuring@\measuring@false}
+\def\hyper@refstepcounter#1{%
+ \edef\This@name{#1}%
+ \ifx\This@name\name@of@eq
+ \@ifundefined{theHequation}{%
+ \make@stripped@name{\theequation}%
+ \let\theHequation\newname
+ }{}%
+ \fi
+ \@ifundefined{theH#1}{%
+ \expandafter\def\csname theH#1\endcsname{\arabic{#1}}%
+ }{}%
+ \hyper@makecurrent{#1}%
+ \ifmeasuring@
+ \else
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ \fi
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname chapter\endcsname\relax
+ \def\Hy@chapterstring{section}%
+\else
+ \def\Hy@chapterstring{chapter}%
+\fi
+\def\Hy@appendixstring{appendix}
+\def\Hy@chapapp{\Hy@chapterstring}
+\ltx@IfUndefined{appendix}{%
+}{%
+ \let\HyOrg@appendix\appendix
+ \def\Hy@AlphNoErr#1{%
+ \ifnum\value{#1}>26 %
+ Alph\number\value{#1}%
+ \else
+ \ifnum\value{#1}<1 %
+ Alph\number\value{#1}%
+ \else
+ \Alph{#1}%
+ \fi
+ \fi
+ }%
+ \def\appendix{%
+ \ltx@IfUndefined{chapter}{%
+ \gdef\theHsection{\Hy@AlphNoErr{section}}%
+ }{%
+ \gdef\theHchapter{\Hy@AlphNoErr{chapter}}%
+ }%
+ \xdef\Hy@chapapp{\Hy@appendixstring}%
+ \HyOrg@appendix
+ }%
+}
+\def\Hy@Test@alph#1{%
+ \ifcase#1\or
+ a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
+ k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or
+ u\or v\or w\or x\or y\or z%
+ \else
+ \@ctrerr
+ \fi
+}
+\def\Hy@Test@Alph#1{%
+ \ifcase#1\or
+ A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
+ K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or
+ U\or V\or W\or X\or Y\or Z%
+ \else
+ \@ctrerr
+ \fi
+}
+\def\hyper@makecurrent#1{%
+ \begingroup
+ \edef\Hy@param{#1}%
+ \ifx\Hy@param\Hy@chapterstring
+ \let\Hy@param\Hy@chapapp
+ \fi
+ \ifHy@hypertexnames
+ \let\@number\@firstofone
+ \def\@fnsymbol##1{fnsymbol\number##1}%
+ \def\@arabic##1{\number##1}%
+ \ifx\@alph\Hy@Test@alph
+ \else
+ \def\@alph{alph\number}%
+ \fi
+ \ifx\@Alph\Hy@Test@Alph
+ \else
+ \def\@Alph{Alph\number}%
+ \fi
+ \ifHy@naturalnames
+ \let\textlatin\@firstofone
+ \xdef\HyperGlobalCurrentHref{\csname the#1\endcsname}%
+ \else
+ \xdef\HyperGlobalCurrentHref{%
+ \csname
+ the%
+ \expandafter\ifx\csname theH#1\endcsname\relax\else H\fi
+ #1%
+ \endcsname
+ }%
+ \fi
+ \xdef\HyperGlobalCurrentHref{%
+ \Hy@param.\expandafter\strip@prefix\meaning\HyperGlobalCurrentHref
+ }%
+ \else
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \xdef\HyperGlobalCurrentHref{\Hy@param.\the\Hy@linkcounter}%
+ \fi
+ \endgroup
+ \let\HyperLocalCurrentHref\HyperGlobalCurrentHref
+ \ifHy@localanchorname
+ \let\@currentHref\HyperLocalCurrentHref
+ \else
+ \global\let\@currentHref\HyperGlobalCurrentHref
+ \fi
+}
+\def\Hy@MakeCurrentHref#1{%
+ \edef\HyperLocalCurrentHref{#1}%
+ \@onelevel@sanitize\HyperLocalCurrentHref
+ \global\let\HyperGlobalCurrentHref\HyperLocalCurrentHref
+ \let\HyperLocalCurrentHref\HyperGlobalCurrentHref
+ \ifHy@localanchorname
+ \let\@currentHref\HyperLocalCurrentHref
+ \else
+ \global\let\@currentHref\HyperGlobalCurrentHref
+ \fi
+}
+\def\Hy@MakeCurrentHrefAuto#1{%
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \Hy@MakeCurrentHref{#1.\the\Hy@linkcounter}%
+}
+\def\@currentHlabel{\@currentHref}
+\@ifpackageloaded{fancyvrb}{%
+ \@ifpackagelater{fancyvrb}{1998/05/20}{}{%
+ \def\FV@StepLineNo{%
+ \FV@SetLineNo
+ \def\FV@StepLineNo{\H@refstepcounter{FancyVerbLine}}%
+ \FV@StepLineNo
+ }%
+ }%
+}{}
+\Hy@AtBeginDocument{%
+ \@ifclassloaded{revtex4}{%
+ \@namedef{ver@lastpage.sty}{1994/06/25}%
+ }{}%
+ \@ifpackageloaded{lastpage}{%
+ \ifHy@pageanchor
+ \else
+ \Hy@WarningNoLine{%
+ The \string\pageref{LastPage} link doesn't work\MessageBreak
+ with disabled option `pageanchor'%
+ }%
+ \fi
+ \def\lastpage@putlabel{%
+ \addtocounter{page}{-1}%
+ \if@filesw
+ \begingroup
+ \let\@number\@firstofone
+ \ifHy@pageanchor
+ \ifHy@hypertexnames
+ \ifHy@plainpages
+ \def\Hy@temp{\arabic{page}}%
+ \else
+ \Hy@unicodefalse
+ \pdfstringdef\Hy@temp{\thepage}%
+ \fi
+ \else
+ \def\Hy@temp{\the\Hy@pagecounter}%
+ \fi
+ \fi
+ \immediate\write\@auxout{%
+ \string\newlabel
+ {LastPage}{{}{\thepage}{}{%
+ \ifHy@pageanchor page.\Hy@temp\fi}{}}%
+ }%
+ \endgroup
+ \fi
+ \addtocounter{page}{1}%
+ }%
+ \@ifclassloaded{revtex4}{%
+ \begingroup
+ \toks@\expandafter{\lastpage@putlabel}%
+ \edef\x{\endgroup
+ \def\noexpand\lastpage@putlabel{%
+ \noexpand\stepcounter{page}%
+ \the\toks@
+ \noexpand\addtocounter{page}\noexpand\m@ne
+ }%
+ }%
+ \x
+ }{}%
+ }{}%
+}
+\def\hypergetref#1{\getrefbykeydefault{#1}{}{??}}
+\def\hypergetpageref#1{\getrefbykeydefault{#1}{page}{0}}
+\@ifpackageloaded{titlesec}{%
+ \def\ttl@Hy@steplink#1{%
+ \Hy@MakeCurrentHrefAuto{#1*}%
+ \edef\ttl@Hy@saveanchor{%
+ \noexpand\Hy@raisedlink{%
+ \noexpand\hyper@anchorstart{\@currentHref}%
+ \noexpand\hyper@anchorend
+ \def\noexpand\ttl@Hy@SavedCurrentHref{\@currentHref}%
+ \noexpand\ttl@Hy@PatchSaveWrite
+ }%
+ }%
+ }%
+ \def\ttl@Hy@PatchSaveWrite{%
+ \begingroup
+ \toks@\expandafter{\ttl@savewrite}%
+ \edef\x{\endgroup
+ \def\noexpand\ttl@savewrite{%
+ \let\noexpand\@currentHref
+ \noexpand\ttl@Hy@SavedCurrentHref
+ \the\toks@
+ }%
+ }%
+ \x
+ }%
+ \def\ttl@Hy@refstepcounter#1{%
+ \let\ttl@b\Hy@raisedlink
+ \def\Hy@raisedlink##1{%
+ \def\ttl@Hy@saveanchor{\Hy@raisedlink{##1}}%
+ }%
+ \refstepcounter{#1}%
+ \let\Hy@raisedlink\ttl@b
+ }%
+}{}
+\@ifpackageloaded{titletoc}{%
+ \def\ttl@gobblecontents#1#2#3#4{\ignorespaces}%
+}{}
+\def\Hy@varioref@undefined{{??}{??}{}{}{}}
+\@ifpackageloaded{varioref}{%
+ \def\vref@pagenum#1#2{%
+ \@ifundefined{r@#2}{%
+ \expandafter\let\csname r@#2\endcsname\Hy@varioref@undefined
+ }{}%
+ \edef#1{\getpagerefnumber{#2}}%
+ }%
+}{}
+\def\Hy@varioref@refstepcounter#1{%
+ \stepcounter{#1}%
+ \protected@edef\@currentlabel{%
+ \csname p@#1\expandafter\endcsname\csname the#1\endcsname
+ }%
+}
+\AtBeginDocument{%
+ \ifx\refstepcounter\Hy@varioref@refstepcounter
+ \let\H@refstepcounter\refstepcounter
+ \let\refstepcounter\Hy@saved@refstepcounter
+ \fi
+}
+\@ifpackageloaded{longtable}{%
+ \begingroup
+ \def\y{\LT@array}%
+ \@ifundefined{scr@LT@array}{%
+ \@ifundefined{adl@LT@array}{}{\def\y{\adl@LT@array}}%
+ }{\def\y{\scr@LT@array}}%
+ \long\def\x\refstepcounter#1#2\@sharp#3#4\@nil{%
+ \expandafter\endgroup
+ \expandafter\def\y[##1]##2{%
+ \H@refstepcounter{#1}%
+ \hyper@makecurrent{table}%
+ \let\Hy@LT@currentHref\@currentHref
+ #2\@sharp#####4%
+ }%
+ }%
+ \expandafter\expandafter\expandafter\x\y[{#1}]{#2}\@nil
+ \begingroup
+ \def\x#1\ifvoid\LT@foot#2\fi#3\@nil{%
+ \endgroup
+ \def\LT@start{%
+ #1%
+ \ifvoid\LT@foot#2\fi
+ \let\@currentHref\Hy@LT@currentHref
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ #3%
+ }%
+ }%
+ \expandafter\x\LT@start\@nil
+}{}
+\let\new@refstepcounter\refstepcounter
+\let\H@equation\equation
+\let\H@endequation\endequation
+\@ifpackageloaded{amsmath}{%
+ \long\def\Hy@temp{%
+ \incr@eqnum
+ \mathdisplay@push
+ \st@rredfalse \global\@eqnswtrue
+ \mathdisplay{equation}%
+ }%
+ \ifx\Hy@temp\equation
+ \expandafter\ifx\csname if@fleqn\expandafter\endcsname
+ \csname iftrue\endcsname
+ \else
+ \long\def\equation{%
+ \mathdisplay@push
+ \st@rredfalse \global\@eqnswtrue
+ \mathdisplay{equation}%
+ \incr@eqnum
+ }%
+ \fi
+ \fi
+}{%
+ \def\equation{%
+ \let\refstepcounter\H@refstepcounter
+ \H@equation
+ \@ifundefined{theHequation}{%
+ \make@stripped@name{\theequation}%
+ \let\theHequation\newname
+ }{}%
+ \hyper@makecurrent{equation}%
+ \mathopen{%
+ \Hy@raisedlink{\hyper@anchorstart{\@currentHref}}%
+ }%
+ \let\refstepcounter\new@refstepcounter
+ }%
+ \def\endequation{%
+ \ifx\Hy@raisedlink\ltx@empty
+ \hyper@anchorend
+ \else
+ \mathclose{\Hy@raisedlink{\hyper@anchorend}}%
+ \fi
+ \H@endequation
+ }%
+}
+\newif\if@eqnstar
+\@eqnstarfalse
+\let\H@eqnarray\eqnarray
+\let\H@endeqnarray\endeqnarray
+\def\eqnarray{%
+ \let\Hy@reserved@a\relax
+ \def\@currentHref{}%
+ \H@eqnarray
+ \if@eqnstar
+ \else
+ \ifx\\\@currentHref\\%
+ \else
+ \@ifundefined{theHequation}{%
+ \make@stripped@name{\theequation}%
+ \let\theHequation\newname
+ }{}%
+ \hyper@makecurrent{equation}%
+ \mathopen{%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ }%
+ \fi
+ \fi
+}
+\def\endeqnarray{%
+ \H@endeqnarray
+}
+\@namedef{eqnarray*}{%
+ \def\@eqncr{\nonumber\@seqncr}\@eqnstartrue\eqnarray
+}
+\@namedef{endeqnarray*}{%
+ \nonumber\endeqnarray\@eqnstarfalse
+}
+\ltx@IfUndefined{subeqnarray}{}{%
+ \let\H@subeqnarray\subeqnarray
+ \let\H@endsubeqnarray\endsubeqnarray
+ \def\subeqnarray{%
+ \let\Hy@reserved@a\relax
+ \H@subeqnarray
+ \@ifundefined{theHequation}{%
+ \make@stripped@name{\theequation}%
+ \let\theHequation\newname
+ }{}%
+ \hyper@makecurrent{equation}%
+ \hyper@anchorstart{\@currentHref}{}\hyper@anchorend
+ }%
+ \def\endsubeqnarray{%
+ \H@endsubeqnarray
+ }%
+ \providecommand\theHsubequation{\theHequation\alph{subequation}}%
+}
+\def\make@stripped@name#1{%
+ \begingroup
+ \escapechar\m@ne
+ \global\let\newname\@empty
+ \protected@edef\Hy@tempa{#1}%
+ \edef\@tempb{%
+ \noexpand\@tfor\noexpand\Hy@tempa:=%
+ \expandafter\strip@prefix\meaning\Hy@tempa
+ }%
+ \@tempb\do{%
+ \if{\Hy@tempa\else
+ \if}\Hy@tempa\else
+ \xdef\newname{\newname\Hy@tempa}%
+ \fi
+ \fi
+ }%
+ \endgroup
+}
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname subequations\endcsname\relax
+\else
+ \let\HyOrg@subequations\subequations
+ \def\subequations{%
+ \stepcounter{equation}%
+ \protected@edef\theHparentequation{%
+ \@ifundefined{theHequation}\theequation\theHequation
+ }%
+ \addtocounter{equation}{-1}%
+ \HyOrg@subequations
+ \def\theHequation{\theHparentequation\alph{equation}}%
+ \ignorespaces
+ }%
+\fi
+\@ifpackageloaded{amsthm}{%
+ \def\Hy@temp#1#2#3{%
+ \ifhmode\unskip\unskip\par\fi
+ \normalfont
+ \trivlist
+ \let\thmheadnl\relax
+ \let\thm@swap\@gobble
+ \let\thm@indent\indent % indent
+ \thm@headfont{\scshape}% heading font small caps
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax
+ \thm@space@setup
+ #1% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\@tempa{#2}\ifx\@empty\@tempa
+ \def\@tempa{\@oparg{\@begintheorem{#3}{}}[]}%
+ \else
+ \refstepcounter{#2}%
+ \def\@tempa{\@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]}%
+ \fi
+ \@tempa
+ }%
+ \ifx\Hy@temp\@thm
+ \def\@thm#1#2#3{%
+ \ifhmode
+ \unskip\unskip\par
+ \fi
+ \normalfont
+ \trivlist
+ \let\thmheadnl\relax
+ \let\thm@swap\@gobble
+ \let\thm@indent\indent % indent
+ \thm@headfont{\scshape}% heading font small caps
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax
+ \thm@space@setup
+ #1% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\dth@counter{#2}%
+ \ifx\@empty\dth@counter
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{}}[]%
+ }%
+ \else
+ \H@refstepcounter{#2}%
+ \hyper@makecurrent{#2}%
+ \let\Hy@dth@currentHref\@currentHref
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]%
+ }%
+ \fi
+ \@tempa
+ }%
+ \else
+ \def\@thm#1#2#3{%
+ \ifhmode
+ \unskip\unskip\par
+ \fi
+ \normalfont
+ \trivlist
+ \let\thmheadnl\relax
+ \let\thm@swap\@gobble
+ \thm@notefont{\fontseries\mddefault\upshape}%
+ \thm@headpunct{.}% add period after heading
+ \thm@headsep 5\p@ plus\p@ minus\p@\relax
+ \thm@space@setup
+ #1% style overrides
+ \@topsep \thm@preskip % used by thm head
+ \@topsepadd \thm@postskip % used by \@endparenv
+ \def\dth@counter{#2}%
+ \ifx\@empty\dth@counter
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{}}[]%
+ }%
+ \else
+ \H@refstepcounter{#2}%
+ \hyper@makecurrent{#2}%
+ \let\Hy@dth@currentHref\@currentHref
+ \def\@tempa{%
+ \@oparg{\@begintheorem{#3}{\csname the#2\endcsname}}[]%
+ }%
+ \fi
+ \@tempa
+ }%
+ \fi
+ \dth@everypar={%
+ \@minipagefalse
+ \global\@newlistfalse
+ \@noparitemfalse
+ \if@inlabel
+ \global\@inlabelfalse
+ \begingroup
+ \setbox\z@\lastbox
+ \ifvoid\z@
+ \kern-\itemindent
+ \fi
+ \endgroup
+ \ifx\@empty\dth@counter
+ \else
+ \Hy@raisedlink{%
+ \hyper@anchorstart{%
+ \ltx@ifundefined{Hy@dth@currentHref}%
+ \@currentHref\Hy@dth@currentHref
+ }\hyper@anchorend
+ }%
+ \fi
+ \unhbox\@labels
+ \fi
+ \if@nobreak
+ \@nobreakfalse \clubpenalty\@M
+ \else
+ \clubpenalty\@clubpenalty \everypar{}%
+ \fi
+ }%
+}{}
+\ifHy@hyperfootnotes
+ \newcounter{Hfootnote}%
+ \let\H@@footnotetext\@footnotetext
+ \let\H@@footnotemark\@footnotemark
+ \def\@xfootnotenext[#1]{%
+ \begingroup
+ \csname c@\@mpfn\endcsname #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thempfn}%
+ \endgroup
+ \ifx\@footnotetext\@mpfootnotetext
+ \expandafter\H@@mpfootnotetext
+ \else
+ \expandafter\H@@footnotetext
+ \fi
+ }%
+ \def\@xfootnotemark[#1]{%
+ \begingroup
+ \c@footnote #1\relax
+ \unrestored@protected@xdef\@thefnmark{\thefootnote}%
+ \endgroup
+ \H@@footnotemark
+ }%
+ \let\H@@mpfootnotetext\@mpfootnotetext
+ \long\def\@mpfootnotetext#1{%
+ \H@@mpfootnotetext{%
+ \ifHy@nesting
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ {%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{#1}%
+ }{%
+ \Hy@raisedlink{%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{\relax}%
+ }#1%
+ }%
+ }%
+ }%
+ \long\def\@footnotetext#1{%
+ \H@@footnotetext{%
+ \ifHy@nesting
+ \expandafter\ltx@firstoftwo
+ \else
+ \expandafter\ltx@secondoftwo
+ \fi
+ {%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{#1}%
+ }{%
+ \Hy@raisedlink{%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{\relax}%
+ }%
+ \let\@currentHref\Hy@footnote@currentHref
+ \let\@currentlabelname\@empty
+ #1%
+ }%
+ }%
+ }%
+ \def\@footnotemark{%
+ \leavevmode
+ \ifhmode\edef\@x@sf{\the\spacefactor}\nobreak\fi
+ \stepcounter{Hfootnote}%
+ \global\let\Hy@saved@currentHref\@currentHref
+ \hyper@makecurrent{Hfootnote}%
+ \global\let\Hy@footnote@currentHref\@currentHref
+ \global\let\@currentHref\Hy@saved@currentHref
+ \hyper@linkstart{link}{\Hy@footnote@currentHref}%
+ \@makefnmark
+ \hyper@linkend
+ \ifhmode\spacefactor\@x@sf\fi
+ \relax
+ }%
+ \@ifpackageloaded{tabularx}{%
+ \let\HyOrg@TX@endtabularx\TX@endtabularx
+ \def\Hy@tabularx@hook{%
+ \let\@footnotetext\H@@footnotetext
+ \let\@footnotemark\H@@footnotemark
+ \let\@mpfootnotetext\H@@mpfootnotetext
+ }%
+ \begingroup
+ \toks@\expandafter{\TX@endtabularx}%
+ \xdef\Hy@gtemp{%
+ \noexpand\Hy@tabularx@hook
+ \the\toks@
+ }%
+ \endgroup
+ \let\TX@endtabularx\Hy@gtemp
+ }{}%
+ \@ifpackageloaded{longtable}{%
+ \CheckCommand*{\LT@p@ftntext}[1]{%
+ \edef\@tempa{%
+ \the\LT@p@ftn
+ \noexpand\footnotetext[\the\c@footnote]%
+ }%
+ \global\LT@p@ftn\expandafter{\@tempa{#1}}%
+ }%
+ \long\def\LT@p@ftntext#1{%
+ \edef\@tempa{%
+ \the\LT@p@ftn
+ \begingroup
+ \noexpand\c@footnote=\the\c@footnote\relax
+ \noexpand\protected@xdef\noexpand\@thefnmark{%
+ \noexpand\thempfn
+ }%
+ \noexpand\Hy@LT@footnotetext{%
+ \Hy@footnote@currentHref
+ }%
+ }%
+ \global\LT@p@ftn\expandafter{%
+ \@tempa{#1}%
+ \endgroup
+ }%
+ }%
+ \long\def\Hy@LT@footnotetext#1#2{%
+ \H@@footnotetext{%
+ \ifHy@nesting
+ \hyper@@anchor{#1}{#2}%
+ \else
+ \Hy@raisedlink{%
+ \hyper@@anchor{#1}{\relax}%
+ }%
+ \def\@currentHref{#1}%
+ \let\@currentlabelname\@empty
+ #2%
+ \fi
+ }%
+ }%
+ }{}%
+ \@ifpackageloaded{fancyvrb}{%
+ \def\V@@footnotetext{%
+ \insert\footins\bgroup
+ \csname reset@font\endcsname
+ \footnotesize
+ \interlinepenalty\interfootnotelinepenalty
+ \splittopskip\footnotesep
+ \splitmaxdepth\dp\strutbox
+ \floatingpenalty \@MM
+ \hsize\columnwidth
+ \@parboxrestore
+ \edef\@currentlabel{\csname p@footnote\endcsname\@thefnmark}%
+ \@makefntext{}%
+ \rule{\z@}{\footnotesep}%
+ \bgroup
+ \aftergroup\V@@@footnotetext
+ \Hy@raisedlink{%
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@footnote@currentHref
+ }{\relax}%
+ }%
+ \let\@currentHref\Hy@footnote@currentHref
+ \let\@currentlabelname\@empty
+ \ignorespaces
+ }%
+ }{}%
+ \def\Hy@temp#1{%
+ \begingroup
+ \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
+ \endgroup
+ \@footnotemark
+ }%
+ \ifx\Hy@temp\footref
+ \def\footref#1{%
+ \begingroup
+ \unrestored@protected@xdef\@thefnmark{\ref{#1}}%
+ \endgroup
+ \H@@footnotemark
+ }%
+ \fi
+ \let\HyOrg@maketitle\maketitle
+ \def\maketitle{%
+ \let\Hy@saved@footnotemark\@footnotemark
+ \let\Hy@saved@footnotetext\@footnotetext
+ \let\@footnotemark\H@@footnotemark
+ \let\@footnotetext\H@@footnotetext
+ \@ifnextchar[\Hy@maketitle@optarg{% ]
+ \HyOrg@maketitle
+ \Hy@maketitle@end
+ }%
+ }%
+ \def\Hy@maketitle@optarg[#1]{%
+ \HyOrg@maketitle[{#1}]%
+ \Hy@maketitle@end
+ }%
+ \def\Hy@maketitle@end{%
+ \ifx\@footnotemark\H@@footnotemark
+ \let\@footnotemark\Hy@saved@footnotemark
+ \fi
+ \ifx\@footnotetext\H@@footnotetext
+ \let\@footnotetext\Hy@saved@footnotetext
+ \fi
+ }%
+ \def\realfootnote{%
+ \@ifnextchar[\@xfootnote{%
+ \stepcounter{\@mpfn}%
+ \protected@xdef\@thefnmark{\thempfn}%
+ \H@@footnotemark\H@@footnotetext
+ }%
+ }%
+\fi
+\Hy@DisableOption{hyperfootnotes}
+\def\caption{%
+ \ifx\@captype\@undefined
+ \@latex@error{\noexpand\caption outside float}\@ehd
+ \expandafter\@gobble
+ \else
+ \H@refstepcounter\@captype
+ \let\Hy@tempa\@caption
+ \@ifundefined{float@caption}{%
+ }{%
+ \expandafter\ifx\csname @float@c@\@captype\endcsname
+ \float@caption
+ \let\Hy@tempa\Hy@float@caption
+ \fi
+ }%
+ \expandafter\@firstofone
+ \fi
+ {\@dblarg{\Hy@tempa\@captype}}%
+}
+\long\def\@caption#1[#2]#3{%
+ \expandafter\ifx\csname if@capstart\expandafter\endcsname
+ \csname iftrue\endcsname
+ \global\let\@currentHref\hc@currentHref
+ \else
+ \hyper@makecurrent{\@captype}%
+ \fi
+ \@ifundefined{NR@gettitle}{%
+ \def\@currentlabelname{#2}%
+ }{%
+ \NR@gettitle{#2}%
+ }%
+ \par\addcontentsline{\csname ext@#1\endcsname}{#1}{%
+ \protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}%
+ }%
+ \begingroup
+ \@parboxrestore
+ \if@minipage
+ \@setminipage
+ \fi
+ \normalsize
+ \expandafter\ifx\csname if@capstart\expandafter\endcsname
+ \csname iftrue\endcsname
+ \global\@capstartfalse
+ \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces#3}%
+ \else
+ \@makecaption{\csname fnum@#1\endcsname}{%
+ \ignorespaces
+ \ifHy@nesting
+ \expandafter\hyper@@anchor\expandafter{\@currentHref}{#3}%
+ \else
+ \Hy@raisedlink{%
+ \expandafter\hyper@@anchor\expandafter{%
+ \@currentHref
+ }{\relax}%
+ }%
+ #3%
+ \fi
+ }%
+ \fi
+ \par
+ \endgroup
+}
+\let\Hy@float@caption\@caption
+\@ifpackageloaded{float}{%
+ \def\Hy@float@caption{%
+ \ifx\Hy@float@currentHref\@undefined
+ \hyper@makecurrent{\@captype}%
+ \global\let\Hy@float@currentHref\@currentHref
+ \else
+ \let\@currentHref\Hy@float@currentHref
+ \fi
+ \float@caption
+ }%
+ \let\HyOrg@float@makebox\float@makebox
+ \renewcommand{\float@makebox}[1]{%
+ \HyOrg@float@makebox{%
+ #1\relax
+ \ifx\Hy@float@currentHref\@undefined
+ \else
+ \expandafter\hyper@@anchor\expandafter{%
+ \Hy@float@currentHref
+ }{\relax}%
+ \global\let\Hy@float@currentHref\@undefined
+ \fi
+ }%
+ }%
+}{}
+\def\hyper@natlinkstart#1{%
+ \Hy@backout{#1}%
+ \hyper@linkstart{cite}{cite.#1}%
+ \def\hyper@nat@current{#1}%
+}
+\def\hyper@natlinkend{%
+ \hyper@linkend
+}
+\def\hyper@natlinkbreak#1#2{%
+ \hyper@linkend#1\hyper@linkstart{cite}{cite.#2}%
+}
+\def\hyper@natanchorstart#1{%
+ \Hy@raisedlink{\hyper@anchorstart{cite.#1}}%
+}
+\def\hyper@natanchorend{\hyper@anchorend}
+\ltx@IfUndefined{NAT@parse}{%
+ \providecommand*\@extra@binfo{}%
+ \providecommand*\@extra@b@citeb{}%
+ \def\bibcite#1#2{%
+ \@newl@bel{b}{#1\@extra@binfo}{%
+ \hyper@@link[cite]{}{cite.#1\@extra@b@citeb}{#2}%
+ }%
+ }%
+ \gdef\@extra@binfo{}%
+ \let\Hy@bibcite\bibcite
+ \begingroup
+ \@ifundefined{bbl@cite@choice}{}{%
+ \g@addto@macro\bbl@cite@choice{%
+ \let\bibcite\Hy@bibcite
+ }%
+ }%
+ \endgroup
+ \providecommand*{\@BIBLABEL}{\@biblabel}%
+ \def\@lbibitem[#1]#2{%
+ \@skiphyperreftrue
+ \H@item[%
+ \ifx\Hy@raisedlink\@empty
+ \hyper@anchorstart{cite.#2\@extra@b@citeb}%
+ \@BIBLABEL{#1}%
+ \hyper@anchorend
+ \else
+ \Hy@raisedlink{%
+ \hyper@anchorstart{cite.#2\@extra@b@citeb}\hyper@anchorend
+ }%
+ \@BIBLABEL{#1}%
+ \fi
+ \hfill
+ ]%
+ \@skiphyperreffalse
+ \if@filesw
+ \begingroup
+ \let\protect\noexpand
+ \immediate\write\@auxout{%
+ \string\bibcite{#2}{#1}%
+ }%
+ \endgroup
+ \fi
+ \ignorespaces
+ }%
+ \def\@bibitem#1{%
+ \@skiphyperreftrue\H@item\@skiphyperreffalse
+ \Hy@raisedlink{%
+ \hyper@anchorstart{cite.#1\@extra@b@citeb}\relax\hyper@anchorend
+ }%
+ \if@filesw
+ \begingroup
+ \let\protect\noexpand
+ \immediate\write\@auxout{%
+ \string\bibcite{#1}{\the\value{\@listctr}}%
+ }%
+ \endgroup
+ \fi
+ \ignorespaces
+ }%
+}{}
+\@ifclassloaded{revtex}{%
+ \Hy@Info{*** compatibility with revtex **** }%
+ \def\revtex@checking#1#2{%
+ \expandafter\let\expandafter\T@temp\csname b@#1\endcsname
+ \expandafter\def\csname b@#1\endcsname{#2}%
+ \@SetMaxRnhefLabel{#1}%
+ \expandafter\let\csname b@#1\endcsname\T@temp
+ }%
+ \@ifundefined{@CITE}{\def\@CITE{\@cite}}{}%
+ \providecommand*{\@extra@b@citeb}{}%
+ \def\@CITEX[#1]#2{%
+ \let\@citea\@empty
+ \leavevmode
+ \unskip
+ $^{%
+ \scriptstyle
+ \@CITE{%
+ \@for\@citeb:=#2\do{%
+ \@citea
+ \def\@citea{,\penalty\@m\ }%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{\@citeb}}%
+ \fi
+ \@ifundefined{b@\@citeb\extra@b@citeb}{%
+ \mbox{\reset@font\bfseries ?}%
+ \G@refundefinedtrue
+ \@latex@warning{%
+ Citation `\@citeb' on page \thepage \space undefined%
+ }%
+ }{%
+ {\csname b@\@citeb\@extra@b@citeb\endcsname}%
+ }%
+ }%
+ }{#1}%
+ }$%
+ }%
+ \def\@citex[#1]#2{%
+ \let\@citea\@empty
+ \@cite{%
+ \@for\@citeb:=#2\do{%
+ \@citea
+ \def\@citea{,\penalty\@m\ }%
+ \edef\@citeb{\expandafter\@firstofone\@citeb}%
+ \if@filesw
+ \immediate\write\@auxout{\string\citation{\@citeb}}%
+ \fi
+ \@ifundefined{b@\@citeb\@extra@b@citeb}{%
+ \mbox{\reset@font\bfseries ?}%
+ \G@refundefinedtrue
+ \@latex@warning{%
+ Citation `\@citeb' on page \thepage \space undefined%
+ }%
+ }{%
+ \hbox{\csname b@\@citeb\@extra@b@citeb\endcsname}%
+ }%
+ }%
+ }{#1}%
+ }%
+}{}
+\@ifpackageloaded{harvard}{%
+ \Hy@AtBeginDocument{%
+ \Hy@Info{*** compatibility with harvard **** }%
+ \Hy@raiselinksfalse
+ \def\harvardcite#1#2#3#4{%
+ \global\@namedef{HAR@fn@#1}{\hyper@@link[cite]{}{cite.#1}{#2}}%
+ \global\@namedef{HAR@an@#1}{\hyper@@link[cite]{}{cite.#1}{#3}}%
+ \global\@namedef{HAR@yr@#1}{\hyper@@link[cite]{}{cite.#1}{#4}}%
+ \global\@namedef{HAR@df@#1}{\csname HAR@fn@#1\endcsname}%
+ }%
+ \def\HAR@citetoaux#1{%
+ \if@filesw\immediate\write\@auxout{\string\citation{#1}}\fi%
+ \ifHy@backref
+ \ifx\@empty\@currentlabel
+ \else
+ \@bsphack
+ \if@filesw
+ \protected@write\@auxout{}{%
+ \string\@writefile{brf}{%
+ \string\backcite{#1}{%
+ {\thepage}{\@currentlabel}{\@currentHref}%
+ }%
+ }%
+ }%
+ \fi
+ \@esphack
+ \fi
+ \fi
+ }%
+ \def\harvarditem{%
+ \@ifnextchar[{\@harvarditem}{\@harvarditem[\null]}%
+ }%
+ \def\@harvarditem[#1]#2#3#4#5\par{%
+ \item[]%
+ \hyper@anchorstart{cite.#4}\relax\hyper@anchorend
+ \if@filesw
+ \begingroup
+ \def\protect##1{\string ##1\space}%
+ \ifthenelse{\equal{#1}{\null}}%
+ {\def\next{{#4}{#2}{#2}{#3}}}%
+ {\def\next{{#4}{#2}{#1}{#3}}}%
+ \immediate\write\@auxout{\string\harvardcite\codeof\next}%
+ \endgroup
+ \fi
+ \protect\hspace*{-\labelwidth}%
+ \protect\hspace*{-\labelsep}%
+ \ignorespaces
+ #5%
+ \ifHy@backref
+ \newblock
+ \backref{\csname br@#4\endcsname}%
+ \fi
+ \par
+ }%
+ \long\def\HAR@checkcitations#1#2#3#4{%
+ \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#2}}%
+ \expandafter\ifx\csname HAR@fn@#1\endcsname\HAR@tempa
+ \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#3}}%
+ \expandafter\ifx\csname HAR@an@#1\endcsname\HAR@tempa
+ \def\HAR@tempa{\hyper@@link[cite]{}{cite.#1}{#4}}%
+ \expandafter\ifx\csname HAR@yr@#1\endcsname\HAR@tempa
+ \else
+ \@tempswatrue
+ \fi
+ \else
+ \@tempswatrue
+ \fi
+ \else
+ \@tempswatrue
+ \fi
+ }%
+ }%
+}{}
+\@ifpackageloaded{chicago}{%
+ \def\citeN{%
+ \def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1}%
+ \def\citeauthoryear##1##2##3{##1 (##3\@cite@opt)}%
+ \@citedata@opt
+ }%
+ \def\shortciteN{%
+ \def\@citeseppen{-1000}%
+ \def\@cite##1##2{##1}%
+ \def\citeauthoryear##1##2##3{##2 (##3\@cite@opt)}%
+ \@citedata@opt
+ }%
+ \def\@citedata@opt{%
+ \let\@cite@opt\@empty
+ \@ifnextchar [{%
+ \@tempswatrue
+ \@citedatax@opt
+ }{%
+ \@tempswafalse
+ \@citedatax[]%
+ }%
+ }%
+ \def\@citedatax@opt[#1]{%
+ \def\@cite@opt{, #1}%
+ \@citedatax[{#1}]%
+ }%
+}{}
+\ltx@ifclassloaded{slides}{%
+ \def\Hy@SlidesFormatOptionalPage#1{(#1)}%
+ \def\Hy@PageAnchorSlidesPlain{%
+ \advance\c@page\ltx@one
+ \edef\Hy@TempPageAnchor{%
+ \noexpand\hyper@@anchor{%
+ page.\the\c@slide.\the\c@overlay.\the\c@note%
+ \ifnum\c@page=\ltx@one
+ \else
+ .\the\c@page
+ \fi
+ }%
+ }%
+ \advance\c@page-\ltx@one
+ }%
+ \def\Hy@PageAnchorSlide{%
+ \advance\c@page\ltx@one
+ \ifnum\c@page>\ltx@one
+ \ltx@IfUndefined{theHpage}{%
+ \protected@edef\Hy@TheSlideOptionalPage{%
+ \Hy@SlidesFormatOptionalPage{\thepage}%
+ }%
+ }{%
+ \protected@edef\Hy@TheSlideOptionalPage{%
+ \Hy@SlidesFormatOptionalPage{\theHpage}%
+ }%
+ }%
+ \else
+ \def\Hy@TheSlideOptionalPage{}%
+ \fi
+ \advance\c@page-\ltx@one
+ \pdfstringdef\@the@H@page{%
+ \csname
+ the%
+ \ltx@ifundefined{theH\Hy@SlidesPage}{}{H}%
+ \Hy@SlidesPage
+ \endcsname
+ \Hy@TheSlideOptionalPage
+ }%
+ \ltx@gobblethree
+ }%
+ \def\Hy@SlidesPage{slide}%
+ \g@addto@macro\slide{%
+ \def\Hy@SlidesPage{slide}%
+ }%
+ \g@addto@macro\overlay{%
+ \def\Hy@SlidesPage{overlay}%
+ }%
+ \g@addto@macro\note{%
+ \def\Hy@SlidesPage{note}%
+ }%
+}{%
+ \def\Hy@PageAnchorSlidesPlain{}%
+ \def\Hy@PageAnchorSlide{}%
+}
+\def\Hy@EveryPageAnchor{%
+ \Hy@DistillerDestFix
+ \ifHy@pageanchor
+ \ifHy@hypertexnames
+ \ifHy@plainpages
+ \def\Hy@TempPageAnchor{\hyper@@anchor{page.\the\c@page}}%
+ \Hy@PageAnchorSlidesPlain
+ \else
+ \begingroup
+ \let\@number\@firstofone
+ \Hy@unicodefalse
+ \Hy@PageAnchorSlide
+ \pdfstringdef\@the@H@page{\thepage}%
+ \endgroup
+ \EdefUnescapeString\@the@H@page{\@the@H@page}%
+ \def\Hy@TempPageAnchor{\hyper@@anchor{page.\@the@H@page}}%
+ \fi
+ \else
+ \Hy@GlobalStepCount\Hy@pagecounter
+ \def\Hy@TempPageAnchor{%
+ \hyper@@anchor{page.\the\Hy@pagecounter}%
+ }%
+ \fi
+ \vbox to 0pt{%
+ \kern\voffset
+ \kern\topmargin
+ \kern-1bp\relax
+ \hbox to 0pt{%
+ \kern\hoffset
+ \kern\ifodd\value{page}%
+ \oddsidemargin
+ \else
+ \evensidemargin
+ \fi
+ \kern-1bp\relax
+ \Hy@TempPageAnchor\relax
+ \hss
+ }%
+ \vss
+ }%
+ \fi
+}
+\g@addto@macro\Hy@EveryPageBoxHook{%
+ \Hy@EveryPageAnchor
+}
+\def\addcontentsline#1#2#3{% toc extension, type, tag
+ \begingroup
+ \let\label\@gobble
+ \ifx\@currentHref\@empty
+ \Hy@Warning{%
+ No destination for bookmark of \string\addcontentsline,%
+ \MessageBreak destination is added%
+ }%
+ \phantomsection
+ \fi
+ \expandafter\ifx\csname toclevel@#2\endcsname\relax
+ \begingroup
+ \def\Hy@tempa{#1}%
+ \ifx\Hy@tempa\Hy@bookmarkstype
+ \Hy@WarningNoLine{%
+ bookmark level for unknown #2 defaults to 0%
+ }%
+ \else
+ \Hy@Info{bookmark level for unknown #2 defaults to 0}%
+ \fi
+ \endgroup
+ \expandafter\gdef\csname toclevel@#2\endcsname{0}%
+ \fi
+ \edef\Hy@toclevel{\csname toclevel@#2\endcsname}%
+ \Hy@writebookmark{\csname the#2\endcsname}%
+ {#3}%
+ {\@currentHref}%
+ {\Hy@toclevel}%
+ {#1}%
+ \ifHy@verbose
+ \begingroup
+ \def\Hy@tempa{#3}%
+ \@onelevel@sanitize\Hy@tempa
+ \let\temp@online\on@line
+ \let\on@line\@empty
+ \Hy@Info{%
+ bookmark\temp@online:\MessageBreak
+ thecounter {\csname the#2\endcsname}\MessageBreak
+ text {\Hy@tempa}\MessageBreak
+ reference {\@currentHref}\MessageBreak
+ toclevel {\Hy@toclevel}\MessageBreak
+ type {#1}%
+ }%
+ \endgroup
+ \fi
+ \addtocontents{#1}{%
+ \protect\contentsline{#2}{#3}{\thepage}{\@currentHref}%
+ }%
+ \endgroup
+}
+\def\contentsline#1#2#3#4{%
+ \ifx\\#4\\%
+ \csname l@#1\endcsname{#2}{#3}%
+ \else
+ \ifcase\Hy@linktoc % none
+ \csname l@#1\endcsname{#2}{#3}%
+ \or % section
+ \csname l@#1\endcsname{%
+ \hyper@linkstart{link}{#4}{#2}\hyper@linkend
+ }{#3}%
+ \or % page
+ \csname l@#1\endcsname{{#2}}{%
+ \hyper@linkstart{link}{#4}{#3}\hyper@linkend
+ }%
+ \else % all
+ \csname l@#1\endcsname{%
+ \hyper@linkstart{link}{#4}{#2}\hyper@linkend
+ }{%
+ \hyper@linkstart{link}{#4}{#3}\hyper@linkend
+ }%
+ \fi
+ \fi
+}
+\let\H@definecounter\@definecounter
+\def\@definecounter#1{%
+ \H@definecounter{#1}%
+ \expandafter\def\csname theH#1\endcsname{\arabic{#1}}%
+}
+\let\H@newctr\@newctr
+\def\@newctr#1[#2]{%
+ \H@newctr#1[{#2}]%
+ \expandafter\def\csname theH#1\endcsname{%
+ \csname the\@ifundefined{theH#2}{}{H}#2\endcsname.\arabic{#1}%
+ }%
+}
+\@ifpackageloaded{amsmath}{%
+ \def\Hy@make@anchor{%
+ \Hy@MakeCurrentHrefAuto{AMS}%
+ \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
+ }%
+ \def\Hy@make@df@tag@@#1{%
+ \gdef\df@tag{%
+ \maketag@@@{\Hy@make@anchor#1}%
+ \def\@currentlabel{#1}%
+ }%
+ }%
+ \def\Hy@make@df@tag@@@#1{%
+ \gdef\df@tag{%
+ \tagform@{\Hy@make@anchor#1}%
+ \toks@\@xp{\p@equation{#1}}%
+ \edef\@currentlabel{\the\toks@}%
+ }%
+ }%
+ \let\HyOrg@make@df@tag@@\make@df@tag@@
+ \let\HyOrg@make@df@tag@@@\make@df@tag@@@
+ \let\make@df@tag@@\Hy@make@df@tag@@
+ \let\make@df@tag@@@\Hy@make@df@tag@@@
+}{}
+\@ifpackagewith{hyperref}{pdftex}{%
+ \let\H@seteqlabel\@seteqlabel
+ \def\@seteqlabel#1{%
+ \H@seteqlabel{#1}%
+ \xdef\@currentHref{AMS.\the\Hy@linkcounter}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ }%
+}{}
+\let\HyOrg@addtoreset\@addtoreset
+\def\@addtoreset#1#2{%
+ \HyOrg@addtoreset{#1}{#2}%
+ \expandafter\xdef\csname theH#1\endcsname{%
+ \expandafter\noexpand
+ \csname the\@ifundefined{theH#2}{}H#2\endcsname
+ .\noexpand\the\noexpand\value{#1}%
+ }%
+}
+\@ifpackageloaded{amsmath}{%
+ \@ifpackagelater{amsmath}{1999/12/14}{%
+ \renewcommand*{\numberwithin}[3][\arabic]{%
+ \@ifundefined{c@#2}{\@nocounterr{#2}}{%
+ \@ifundefined{c@#3}{\@nocnterr{#3}}{%
+ \HyOrg@addtoreset{#2}{#3}%
+ \@xp\xdef\csname the#2\endcsname{%
+ \@xp\@nx\csname the#3\endcsname .\@nx#1{#2}%
+ }%
+ \@xp\xdef\csname theH#2\endcsname{%
+ \@xp\@nx
+ \csname the\@ifundefined{theH#3}{}H#3\endcsname
+ .\@nx#1{#2}%
+ }%
+ }%
+ }%
+ }%
+ }{%
+ \Hy@WarningNoLine{%
+ \string\numberwithin\space of package `amsmath' %
+ only fixed\MessageBreak
+ for version 2000/06/06 v2.12 or newer%
+ }%
+ }%
+}{}
+\ifHy@hyperfigures
+ \let\Hy@Gin@setfile\Gin@setfile
+ \def\Gin@setfile#1#2#3{%
+ \hyperimage{#3}{\Hy@Gin@setfile{#1}{#2}{#3}}%
+ }%
+\fi
+\Hy@DisableOption{hyperfigures}
+\ifHy@hyperindex
+ \def\HyInd@ParenLeft{(}%
+ \def\HyInd@ParenRight{)}%
+ \def\hyperindexformat#1#2{%
+ \let\HyOrg@hyperpage\hyperpage
+ \let\hyperpage\@firstofone
+ #1{\HyOrg@hyperpage{#2}}%
+ \let\hyperpage\HyOrg@hyperpage
+ }%
+ \Hy@nextfalse
+ \@ifpackageloaded{multind}{\Hy@nexttrue}{}%
+ \@ifpackageloaded{index}{\Hy@nexttrue}{}%
+ \@ifpackageloaded{amsmidx}{\Hy@nexttrue}{}%
+ \begingroup
+ \lccode`\|=\expandafter`\HyInd@EncapChar\relax
+ \lccode`\/=`\\\relax
+ \lowercase{\endgroup
+ \ifHy@next
+ \let\HyInd@org@wrindex\@wrindex
+ \def\@wrindex#1#2{\HyInd@@wrindex{#1}#2||\\}%
+ \def\HyInd@@wrindex#1#2|#3|#4\\{%
+ \ifx\\#3\\%
+ \HyInd@org@wrindex{#1}{#2|hyperpage}%
+ \else
+ \HyInd@@@wrindex{#1}{#2}#3\\%
+ \fi
+ }%
+ \def\HyInd@@@wrindex#1#2#3#4\\{%
+ \def\Hy@temp@A{#3}%
+ \ifcase0\ifx\Hy@temp@A\HyInd@ParenLeft 1\fi
+ \ifx\Hy@temp@A\HyInd@ParenRight 1\fi
+ \relax
+ \HyInd@org@wrindex{#1}{%
+ #2|hyperindexformat{/#3#4}%
+ }%
+ \else
+ \ifx\\#4\\%
+ \ifx\Hy@temp@A\HyInd@ParenRight
+ \HyInd@org@wrindex{#1}{#2|#3}%
+ \else
+ \HyInd@org@wrindex{#1}{#2|#3hyperpage}%
+ \fi
+ \else
+ \HyInd@org@wrindex{#1}{%
+ #2|#3hyperindexformat{/#4}%
+ }%
+ \fi
+ \fi
+ }%
+ \else
+ \def\@wrindex#1{\@@wrindex#1||\\}%
+ \def\@@wrindex#1|#2|#3\\{%
+ \if@filesw
+ \ifx\\#2\\%
+ \protected@write\@indexfile{}{%
+ \string\indexentry{#1|hyperpage}{\thepage}%
+ }%
+ \else
+ \HyInd@@@wrindex{#1}#2\\%
+ \fi
+ \fi
+ \endgroup
+ \@esphack
+ }%
+ \def\HyInd@@@wrindex#1#2#3\\{%
+ \def\Hy@temp@A{#2}%
+ \ifcase0\ifx\Hy@temp@A\HyInd@ParenLeft 1\fi
+ \ifx\Hy@temp@A\HyInd@ParenRight 1\fi
+ \relax
+ \protected@write\@indexfile{}{%
+ \string\indexentry{%
+ #1|hyperindexformat{/#2#3}%
+ }{\thepage}%
+ }%
+ \else
+ \ifx\\#3\\%
+ \ifx\Hy@temp@A\HyInd@ParenRight
+ \protected@write\@indexfile{}{%
+ \string\indexentry{#1|#2}{\thepage}%
+ }%
+ \else
+ \protected@write\@indexfile{}{%
+ \string\indexentry{#1|#2hyperpage}{\thepage}%
+ }%
+ \fi
+ \else
+ \protected@write\@indexfile{}{%
+ \string\indexentry{%
+ #1|#2hyperindexformat{/#3}%
+ }{\thepage}%
+ }%
+ \fi
+ \fi
+ }%
+ \fi
+ }%
+\fi
+\Hy@DisableOption{hyperindex}
+\Hy@DisableOption{encap}
+\def\nohyperpage#1{#1}
+\def\hyperpage#1{%
+ \HyInd@hyperpage#1\nohyperpage{}\@nil
+}
+\def\HyInd@hyperpage#1\nohyperpage#2#3\@nil{%
+ \HyInd@@hyperpage{#1}%
+ #2%
+ \def\Hy@temp{#3}%
+ \ifx\Hy@temp\@empty
+ \else
+ \ltx@ReturnAfterFi{%
+ \HyInd@hyperpage#3\@nil
+ }%
+ \fi
+}
+\def\HyInd@@hyperpage#1{\@hyperpage#1----\\}
+\def\@hyperpage#1--#2--#3\\{%
+ \ifx\\#2\\%
+ \@commahyperpage{#1}%
+ \else
+ \HyInd@pagelink{#1}--\HyInd@pagelink{#2}%
+ \fi
+}
+\def\@commahyperpage#1{\@@commahyperpage#1, ,\\}
+\def\@@commahyperpage#1, #2,#3\\{%
+ \ifx\\#2\\%
+ \HyInd@pagelink{#1}%
+ \else
+ \HyInd@pagelink{#1}, \HyInd@pagelink{#2}%
+ \fi
+}
+\def\HyInd@pagelink#1{%
+ \begingroup
+ \toks@={}%
+ \HyInd@removespaces#1 \@nil
+ \endgroup
+}
+\def\HyInd@removespaces#1 #2\@nil{%
+ \toks@=\expandafter{\the\toks@#1}%
+ \ifx\\#2\\%
+ \edef\x{\the\toks@}%
+ \ifx\x\@empty
+ \else
+ \hyperlink{page.\the\toks@}{\the\toks@}%
+ \fi
+ \else
+ \ltx@ReturnAfterFi{%
+ \HyInd@removespaces#2\@nil
+ }%
+ \fi
+}
+\@ifclassloaded{foils}{%
+ \providecommand*\ext@table{lot}%
+ \providecommand*\ext@figure{lof}%
+}{}
+\@ifclassloaded{seminar}{%
+ \Hy@seminarslidestrue
+ \providecommand\theHslide{\arabic{slide}}%
+}{%
+ \Hy@seminarslidesfalse
+}
+\@ifpackageloaded{slidesec}{%
+ \providecommand\theHslidesection {\arabic{slidesection}}%
+ \providecommand\theHslidesubsection{%
+ \theHslidesection.\arabic{slidesubsection}%
+ }%
+ \def\slide@heading[#1]#2{%
+ \H@refstepcounter{slidesection}%
+ \@addtoreset{slidesubsection}{slidesection}%
+ \addtocontents{los}{%
+ \protect\l@slide{\the\c@slidesection}{\ignorespaces#1}%
+ {\@SCTR}{slideheading.\theslidesection}%
+ }%
+ \def\Hy@tempa{#2}%
+ \ifx\Hy@tempa\@empty
+ \else
+ {%
+ \edef\@currentlabel{%
+ \csname p@slidesection\endcsname\theslidesection
+ }%
+ \makeslideheading{#2}%
+ }%
+ \fi
+ \gdef\theslideheading{#1}%
+ \gdef\theslidesubheading{}%
+ \ifHy@bookmarksnumbered
+ \def\Hy@slidetitle{\theslidesection\space #1}%
+ \else
+ \def\Hy@slidetitle{#1}%
+ \fi
+ \ifHy@hypertexnames
+ \ifHy@naturalnames
+ \hyper@@anchor{slideheading.\theslidesection}{\relax}%
+ \Hy@writebookmark
+ {\theslidesection}%
+ {\Hy@slidetitle}%
+ {slideheading.\theslidesection}%
+ {1}%
+ {toc}%
+ \else
+ \hyper@@anchor{slideheading.\theHslidesection}{\relax}%
+ \Hy@writebookmark
+ {\theslidesection}%
+ {\Hy@slidetitle}%
+ {slideheading.\theHslidesection}%
+ {1}%
+ {toc}%
+ \fi
+ \else
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \hyper@@anchor{slideheading.\the\Hy@linkcounter}{\relax}%
+ \Hy@writebookmark
+ {\theslidesection}%
+ {\Hy@slidetitle}%
+ {slideheading.\the\Hy@linkcounter}%
+ {1}%
+ {toc}%
+ \fi
+ }%
+ \def\slide@subheading[#1]#2{%
+ \H@refstepcounter{slidesubsection}%
+ \addtocontents{los}{%
+ \protect\l@subslide{\the\c@slidesubsection}{\ignorespaces#1}%
+ {\@SCTR}{slideheading.\theslidesubsection}%
+ }%
+ \def\Hy@tempa{#2}%
+ \ifx\Hy@tempa\@empty
+ \else
+ {%
+ \edef\@currentlabel{%
+ \csname p@slidesubsection\endcsname\theslidesubsection
+ }%
+ \makeslidesubheading{#2}%
+ }%
+ \fi
+ \gdef\theslidesubheading{#1}%
+ \ifHy@bookmarksnumbered
+ \def\Hy@slidetitle{\theslidesubsection\space #1}%
+ \else
+ \def\Hy@slidetitle{#1}%
+ \fi
+ \ifHy@hypertexnames
+ \ifHy@naturalnames
+ \hyper@@anchor{slideheading.\theslidesubsection}{\relax}%
+ \Hy@writebookmark
+ {\theslidesubsection}%
+ {\Hy@slidetitle}%
+ {slideheading.\theslidesubsection}%
+ {2}%
+ {toc}%
+ \else
+ \hyper@@anchor{slideheading.\theHslidesubsection}{\relax}%
+ \Hy@writebookmark
+ {\theslidesubsection}%
+ {\Hy@slidetitle}%
+ {slideheading.\theHslidesubsection}%
+ {2}%
+ {toc}%
+ \fi
+ \else
+ \Hy@GlobalStepCount\Hy@linkcounter
+ \hyper@@anchor{slideheading.\the\Hy@linkcounter}{\relax}%
+ \Hy@writebookmark
+ {\theslidesubsection}%
+ {\Hy@slidetitle}%
+ {slideheading.\the\Hy@linkcounter}%
+ {1}%
+ {toc}%
+ \fi
+ }%
+ \providecommand*{\listslidename}{List of Slides}%
+ \def\listofslides{%
+ \section*{%
+ \listslidename
+ \@mkboth{%
+ \expandafter\MakeUppercase\listslidename
+ }{%
+ \expandafter\MakeUppercase\listslidename
+ }%
+ }%
+ \def\l@slide##1##2##3##4{%
+ \slide@undottedcline{%
+ \slidenumberline{##3}{\hyperlink{##4}{##2}}%
+ }{}%
+ }%
+ \let\l@subslide\l@slide
+ \@startlos
+ }%
+ \def\slide@contents{%
+ \def\l@slide##1##2##3##4{%
+ \slide@cline{\slidenumberline{##3}{\hyperlink{##4}{##2}}}{##3}%
+ }%
+ \let\l@subslide\@gobblefour
+ \@startlos
+ }%
+ \def\Slide@contents{%
+ \def\l@slide##1##2##3##4{%
+ \ifcase\lslide@flag
+ \message{##1 ** \the\c@slidesection}%
+ \ifnum##1>\c@slidesection
+ \def\lslide@flag{1}%
+ {%
+ \large
+ \slide@cline{%
+ \slidenumberline{$\Rightarrow\bullet$}%
+ {\hyperlink{##4}{##2}}%
+ }{##3}%
+ }%
+ \else
+ {%
+ \large
+ \slide@cline{%
+ \slidenumberline{$\surd\;\bullet$}%
+ {\hyperlink{##4}{##2}}%
+ }{##3}%
+ }%
+ \fi
+ \or
+ \def\lslide@flag{2}%
+ {%
+ \large
+ \slide@cline{%
+ \slidenumberline{$\bullet$}%
+ {\hyperlink{##4}{##2}}%
+ }{##3}%
+ }%
+ \or
+ {%
+ \large
+ \slide@cline{%
+ \slidenumberline{$\bullet$}%
+ {\hyperlink{##4}{##2}}%
+ }{##3}%
+ }%
+ \fi
+ }%
+ \def\l@subslide##1##2##3##4{%
+ \ifnum\lslide@flag=1 %
+ \@undottedtocline{2}{3.8em}{3.2em}{\hyperlink{##4}{##2}}{}%
+ \fi
+ }%
+ \def\lslide@flag{0}%
+ \@startlos
+ }%
+}{}
+\ifHy@texht
+ \expandafter\endinput
+\fi
+\let\real@setref\@setref
+\def\@setref#1#2#3{% csname, extract group, refname
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{%
+ Reference `#3' on page \thepage \space undefined%
+ }%
+ \else
+ \expandafter\Hy@setref@link#1\@empty\@empty\@nil{#2}%
+ \fi
+}
+\def\Hy@setref@link#1#2#3#4#5#6\@nil#7{%
+ \begingroup
+ \toks0={\hyper@@link{#5}{#4}}%
+ \toks1=\expandafter{#7{#1}{#2}{#3}{#4}{#5}}%
+ \edef\x{\endgroup
+ \the\toks0 {\the\toks1 }%
+ }%
+ \x
+}
+\def\@pagesetref#1#2#3{% csname, extract macro, ref
+ \ifx#1\relax
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{%
+ Reference `#3' on page \thepage \space undefined%
+ }%
+ \else
+ \protect\hyper@@link
+ {\expandafter\@fifthoffive#1}%
+ {page.\expandafter\@secondoffive#1}%
+ {\expandafter\@secondoffive#1}%
+ \fi
+}
+\def\HyRef@StarSetRef#1{%
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\x{#1}%
+ \@onelevel@sanitize\x
+ \edef\x{\endgroup
+ \noexpand\HyRef@@StarSetRef
+ \expandafter\noexpand\csname r@\x\endcsname{\x}%
+ }%
+ \x
+}
+\def\HyRef@@StarSetRef#1#2#3{%
+ \ifx#1\@undefined
+ \let#1\relax
+ \fi
+ \real@setref#1#3{#2}%
+}
+\def\@refstar#1{%
+ \HyRef@StarSetRef{#1}\@firstoffive
+}
+\def\@pagerefstar#1{%
+ \HyRef@StarSetRef{#1}\@secondoffive
+}
+\def\@namerefstar#1{%
+ \HyRef@StarSetRef{#1}\@thirdoffive
+}
+\Hy@AtBeginDocument{%
+ \@ifpackageloaded{varioref}{%
+ \def\@Refstar#1{%
+ \HyRef@StarSetRef{#1}\HyRef@MakeUppercaseFirstOfFive
+ }%
+ \def\HyRef@MakeUppercaseFirstOfFive#1#2#3#4#5{%
+ \MakeUppercase#1%
+ }%
+ \DeclareRobustCommand*{\Ref}{%
+ \@ifstar\@Refstar\HyRef@Ref
+ }%
+ \def\HyRef@Ref#1{%
+ \hyperref[{#1}]{\Ref*{#1}}%
+ }%
+ \def\Vr@f#1{%
+ \leavevmode\unskip\vref@space
+ \hyperref[{#1}]{%
+ \Ref*{#1}%
+ \let\vref@space\nobreakspace
+ \@vpageref[\unskip]{#1}%
+ }%
+ }%
+ \def\vr@f#1{%
+ \leavevmode\unskip\vref@space
+ \begingroup
+ \let\T@pageref\@pagerefstar
+ \hyperref[{#1}]{%
+ \ref*{#1}%
+ \vpageref[\unskip]{#1}%
+ }%
+ \endgroup
+ }%
+ }{}%
+}
+\DeclareRobustCommand*{\autopageref}{%
+ \@ifstar{%
+ \HyRef@autopagerefname\pageref*%
+ }\HyRef@autopageref
+}
+\def\HyRef@autopageref#1{%
+ \hyperref[{#1}]{\HyRef@autopagerefname\pageref*{#1}}%
+}
+\def\HyRef@autopagerefname{%
+ \ltx@IfUndefined{pageautorefname}{%
+ \ltx@IfUndefined{pagename}{%
+ \Hy@Warning{No autoref name for `page'}%
+ }{%
+ \pagename\nobreakspace
+ }%
+ }{%
+ \pageautorefname\nobreakspace
+ }%
+}
+\DeclareRobustCommand*{\autoref}{%
+ \leavevmode
+ \@ifstar{\HyRef@autoref\@gobbletwo}{\HyRef@autoref\hyper@@link}%
+}
+\def\HyRef@autoref#1#2{%
+ \begingroup
+ \Hy@safe@activestrue
+ \expandafter\HyRef@autosetref\csname r@#2\endcsname{#2}{#1}%
+ \endgroup
+}
+\def\HyRef@autosetref#1#2#3{% link command, csname, refname
+ \HyRef@ShowKeysRef{#2}%
+ \ifcase 0\ifx#1\relax 1\fi\ifx#1\Hy@varioref@undefined 1\fi\relax
+ \edef\HyRef@thisref{%
+ \expandafter\@fourthoffive#1\@empty\@empty\@empty
+ }%
+ \expandafter\HyRef@testreftype\HyRef@thisref.\\%
+ \Hy@safe@activesfalse
+ #3{%
+ \expandafter\@fifthoffive#1\@empty\@empty\@empty
+ }{%
+ \expandafter\@fourthoffive#1\@empty\@empty\@empty
+ }{%
+ \HyRef@currentHtag
+ \expandafter\@firstoffive#1\@empty\@empty\@empty
+ \null
+ }%
+ \else
+ \protect\G@refundefinedtrue
+ \nfss@text{\reset@font\bfseries ??}%
+ \@latex@warning{%
+ Reference `#2' on page \thepage\space undefined%
+ }%
+ \fi
+}
+\def\HyRef@testreftype#1.#2\\{%
+ \ltx@IfUndefined{#1autorefname}{%
+ \ltx@IfUndefined{#1name}{%
+ \HyRef@StripStar#1\\*\\\@nil{#1}%
+ \ltx@IfUndefined{\HyRef@name autorefname}{%
+ \ltx@IfUndefined{\HyRef@name name}{%
+ \def\HyRef@currentHtag{}%
+ \Hy@Warning{No autoref name for `#1'}%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand\csname\HyRef@name name\endcsname
+ \noexpand~%
+ }%
+ }%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand
+ \csname\HyRef@name autorefname\endcsname
+ \noexpand~%
+ }%
+ }%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand\csname#1name\endcsname
+ \noexpand~%
+ }%
+ }%
+ }{%
+ \edef\HyRef@currentHtag{%
+ \expandafter\noexpand\csname#1autorefname\endcsname
+ \noexpand~%
+ }%
+ }%
+}
+\def\HyRef@StripStar#1*\\#2\@nil#3{%
+ \def\HyRef@name{#2}%
+ \ifx\HyRef@name\HyRef@CaseStar
+ \def\HyRef@name{#1}%
+ \else
+ \def\HyRef@name{#3}%
+ \fi
+}
+\def\HyRef@CaseStar{*\\}
+\def\HyRef@currentHtag{}
+\let\HyRef@ShowKeysRef\@gobble
+\def\HyRef@ShowKeysInit{%
+ \begingroup\expandafter\expandafter\expandafter\endgroup
+ \expandafter\ifx\csname SK@@label\endcsname\relax
+ \else
+ \ifx\SK@ref\@empty
+ \else
+ \def\HyRef@ShowKeysRef{%
+ \SK@\SK@@ref
+ }%
+ \fi
+ \fi
+}
+\@ifpackageloaded{showkeys}{%
+ \HyRef@ShowKeysInit
+}{%
+ \Hy@AtBeginDocument{%
+ \@ifpackageloaded{showkeys}{%
+ \HyRef@ShowKeysInit
+ }{}%
+ }%
+}
+\providecommand*\AMSautorefname{\equationautorefname}
+\providecommand*\Hfootnoteautorefname{\footnoteautorefname}
+\providecommand*\Itemautorefname{\itemautorefname}
+\providecommand*\itemautorefname{item}
+\providecommand*\equationautorefname{Equation}
+\providecommand*\footnoteautorefname{footnote}
+\providecommand*\itemautorefname{item}
+\providecommand*\figureautorefname{Figure}
+\providecommand*\tableautorefname{Table}
+\providecommand*\partautorefname{Part}
+\providecommand*\appendixautorefname{Appendix}
+\providecommand*\chapterautorefname{chapter}
+\providecommand*\sectionautorefname{section}
+\providecommand*\subsectionautorefname{subsection}
+\providecommand*\subsubsectionautorefname{subsubsection}
+\providecommand*\paragraphautorefname{paragraph}
+\providecommand*\subparagraphautorefname{subparagraph}
+\providecommand*\FancyVerbLineautorefname{line}
+\providecommand*\theoremautorefname{Theorem}
+\providecommand*\pageautorefname{page}
+\providecommand*{\Hy@DistillerDestFix}{}
+\def\phantomsection{%
+ \Hy@MakeCurrentHrefAuto{section*}%
+ \Hy@raisedlink{\hyper@anchorstart{\@currentHref}\hyper@anchorend}%
+}
+\endinput
+%%
+%% End of file `hyperref.sty'.