packages feed

pandoc 1.11.1 → 1.12

raw patch · 151 files changed

+11805/−4810 lines, 151 filesdep +aesondep +arraydep +attoparsecdep −citeproc-hsdep −jsondep ~blaze-htmldep ~criteriondep ~highlighting-katePVP ok

version bump matches the API change (PVP)

Dependencies added: aeson, array, attoparsec, hslua, http-conduit, http-types, stringable, unordered-containers, vector, yaml

Dependencies removed: citeproc-hs, json

Dependency ranges changed: blaze-html, criterion, highlighting-kate, pandoc-types, tagsoup, texmath

API changes (from Hackage documentation)

- Text.Pandoc: instance Data a => ToJsonFilter (a -> IO [a])
- Text.Pandoc: instance Data a => ToJsonFilter (a -> IO a)
- Text.Pandoc: instance Data a => ToJsonFilter (a -> [a])
- Text.Pandoc: instance Data a => ToJsonFilter (a -> a)
- Text.Pandoc: jsonFilter :: (Pandoc -> Pandoc) -> String -> String
- Text.Pandoc.Biblio: processBiblio :: Maybe Style -> [Reference] -> Pandoc -> Pandoc
- Text.Pandoc.Options: readerCitationStyle :: ReaderOptions -> Maybe Style
- Text.Pandoc.Options: readerReferences :: ReaderOptions -> [Reference]
- Text.Pandoc.Options: writerBiblioFiles :: WriterOptions -> [FilePath]
- Text.Pandoc.Options: writerSourceDirectory :: WriterOptions -> FilePath
- Text.Pandoc.PDF: tex2pdf :: String -> String -> IO (Either ByteString ByteString)
- Text.Pandoc.XML: stripTags :: String -> String
+ Text.Pandoc: readHaddock :: ReaderOptions -> String -> Pandoc
+ Text.Pandoc: readJSON :: ReaderOptions -> String -> Pandoc
+ Text.Pandoc: readOPML :: ReaderOptions -> String -> Pandoc
+ Text.Pandoc: writeCustom :: FilePath -> WriterOptions -> Pandoc -> IO String
+ Text.Pandoc: writeJSON :: WriterOptions -> Pandoc -> String
+ Text.Pandoc: writeOPML :: WriterOptions -> Pandoc -> String
+ Text.Pandoc.Options: Ext_ascii_identifiers :: Extension
+ Text.Pandoc.Options: Ext_ignore_line_breaks :: Extension
+ Text.Pandoc.Options: Ext_lists_without_preceding_blankline :: Extension
+ Text.Pandoc.Options: Ext_yaml_metadata_block :: Extension
+ Text.Pandoc.Options: RevealJsSlides :: HTMLSlideVariant
+ Text.Pandoc.Options: writerSourceURL :: WriterOptions -> Maybe String
+ Text.Pandoc.PDF: makePDF :: String -> (WriterOptions -> Pandoc -> String) -> WriterOptions -> Pandoc -> IO (Either ByteString ByteString)
+ Text.Pandoc.Process: pipeProcess :: Maybe [(String, String)] -> FilePath -> [String] -> ByteString -> IO (ExitCode, ByteString, ByteString)
+ Text.Pandoc.Readers.Haddock: readHaddock :: ReaderOptions -> String -> Pandoc
+ Text.Pandoc.Readers.OPML: instance Show OPMLState
+ Text.Pandoc.Readers.OPML: readOPML :: ReaderOptions -> String -> Pandoc
+ Text.Pandoc.Shared: addMetaField :: ToMetaValue a => String -> a -> Meta -> Meta
+ Text.Pandoc.Shared: instance Walkable Block Element
+ Text.Pandoc.Shared: instance Walkable Inline Element
+ Text.Pandoc.Shared: makeMeta :: [Inline] -> [[Inline]] -> [Inline] -> Meta
+ Text.Pandoc.Templates: compileTemplate :: Text -> Either String Template
+ Text.Pandoc.Templates: data Template
+ Text.Pandoc.Templates: instance Monoid Template
+ Text.Pandoc.Templates: instance TemplateTarget Text
+ Text.Pandoc.Templates: renderTemplate' :: (ToJSON a, TemplateTarget b) => String -> a -> b
+ Text.Pandoc.Templates: toTarget :: TemplateTarget a => Text -> a
+ Text.Pandoc.Templates: varListToJSON :: [(String, String)] -> Value
+ Text.Pandoc.Writers.Custom: instance [overlap ok] (StackValue a, StackValue b) => StackValue (Map a b)
+ Text.Pandoc.Writers.Custom: instance [overlap ok] (StackValue a, StackValue b) => StackValue (a, b)
+ Text.Pandoc.Writers.Custom: instance [overlap ok] StackValue ByteString
+ Text.Pandoc.Writers.Custom: instance [overlap ok] StackValue Format
+ Text.Pandoc.Writers.Custom: instance [overlap ok] StackValue MetaValue
+ Text.Pandoc.Writers.Custom: instance [overlap ok] StackValue [Block]
+ Text.Pandoc.Writers.Custom: instance [overlap ok] StackValue [Inline]
+ Text.Pandoc.Writers.Custom: instance [overlap ok] StackValue a => StackValue [a]
+ Text.Pandoc.Writers.Custom: writeCustom :: FilePath -> WriterOptions -> Pandoc -> IO String
+ Text.Pandoc.Writers.LaTeX: instance Eq StringContext
+ Text.Pandoc.Writers.OPML: writeOPML :: WriterOptions -> Pandoc -> String
- Text.Pandoc: class ToJsonFilter a
+ Text.Pandoc: class ToJSONFilter a => ToJsonFilter a where toJsonFilter = toJSONFilter
- Text.Pandoc.Options: ReaderOptions :: Set Extension -> Bool -> Bool -> Bool -> Bool -> Int -> Int -> Bool -> [Reference] -> Maybe Style -> Bool -> [String] -> String -> ReaderOptions
+ Text.Pandoc.Options: ReaderOptions :: Set Extension -> Bool -> Bool -> Bool -> Bool -> Int -> Int -> Bool -> Bool -> [String] -> String -> ReaderOptions
- Text.Pandoc.Options: WriterOptions :: Bool -> String -> [(String, String)] -> Int -> Bool -> HTMLSlideVariant -> Bool -> HTMLMathMethod -> Bool -> Bool -> [Int] -> Bool -> Set Extension -> Bool -> Bool -> Int -> ObfuscationMethod -> String -> FilePath -> Maybe FilePath -> CiteMethod -> [FilePath] -> Bool -> Bool -> Bool -> Maybe Int -> Bool -> Bool -> Bool -> Style -> Bool -> Bool -> Maybe EPUBVersion -> String -> Maybe String -> [FilePath] -> Int -> Int -> Maybe FilePath -> Maybe FilePath -> WriterOptions
+ Text.Pandoc.Options: WriterOptions :: Bool -> String -> [(String, String)] -> Int -> Bool -> HTMLSlideVariant -> Bool -> HTMLMathMethod -> Bool -> Bool -> [Int] -> Bool -> Set Extension -> Bool -> Bool -> Int -> ObfuscationMethod -> String -> Maybe String -> Maybe FilePath -> CiteMethod -> Bool -> Bool -> Bool -> Maybe Int -> Bool -> Bool -> Bool -> Style -> Bool -> Bool -> Maybe EPUBVersion -> String -> Maybe String -> [FilePath] -> Int -> Int -> Maybe FilePath -> Maybe FilePath -> WriterOptions
- Text.Pandoc.Shared: fetchItem :: String -> String -> IO (ByteString, Maybe String)
+ Text.Pandoc.Shared: fetchItem :: Maybe String -> String -> IO (Either SomeException (ByteString, Maybe String))
- Text.Pandoc.Shared: openURL :: String -> IO (ByteString, Maybe String)
+ Text.Pandoc.Shared: openURL :: String -> IO (Either SomeException (ByteString, Maybe String))
- Text.Pandoc.Shared: stringify :: [Inline] -> String
+ Text.Pandoc.Shared: stringify :: Walkable Inline a => a -> String
- Text.Pandoc.Templates: renderTemplate :: TemplateTarget a => [(String, String)] -> String -> a
+ Text.Pandoc.Templates: renderTemplate :: (ToJSON a, TemplateTarget b) => Template -> a -> b

Files

BUGS view
@@ -1,2 +1,4 @@ To view a list of known bugs, or to enter a bug report, please use-Pandoc's issue tracker: <https://github.com/jgm/pandoc/issues>+Pandoc's issue tracker: <https://github.com/jgm/pandoc/issues>.++See also CONTRIBUTING.md.
+ CONTRIBUTING.md view
@@ -0,0 +1,181 @@+Contributing to pandoc+======================++Found a bug?+------------++Bug reports are welcome!  Please report all bugs on pandoc's github+[issue tracker].++Before you submit a bug report, search the (open *and* closed) issues to make+sure the issue hasn't come up before. Also, check the [User's Guide] and [FAQs]+for anything relevant.++Make sure you can reproduce the bug with the latest released version of pandoc+(or, even better, the development version).++Your report should give detailed instructions for how to reproduce the problem,+including++  * the exact command line used+  * the exact input used+  * the output received+  * the output you expected instead++A small test case (just a few lines) is ideal.  If your input is large,+try to whittle it down to the minimum necessary to illustrate the problem.++Have an idea for a new feature?+-------------------------------++First, search [pandoc-discuss] and the issue tracker (both open and closed+issues) to make sure that the idea has not been discussed before.++Explain the rationale for the feature you're requesting.  Why would this+feature be useful?  Consider also any possible drawbacks, including backwards+compatibility, new library dependencies, and performance issues.++It is best to discuss a potential new feature on [pandoc-discuss]+before opening an issue.++Patches and pull requests+-------------------------++Patches and pull requests are welcome.  Before you put time into a nontrivial+patch, it is a good idea to discuss it on [pandoc-discuss], especially if it is+for a new feature (rather than fixing a bug).++Please follow these guidelines:++1.  Each patch (commit) should make a single logical change (fix a bug, add+    a feature, clean up some code, add documentation).  Everything+    related to that change should be included (including tests and+    documentation), and nothing unrelated should be included.++2.  The first line of the commit message should be a short description+    of the whole commit (ideally <= 50 characters).  Then there should+    be a blank line, followed by a more detailed description of the+    change.++3.  Follow the stylistic conventions you find in the existing+    pandoc code.  Use spaces, not tabs, and wrap code to 80 columns.+    Always include type signatures for top-level functions.++4.  Your code should compile without warnings (`-Wall` clean).++5.  Run the tests to make sure your code does not introduce new bugs.+    (See below under [Tests](#tests).)  All tests should pass.++6.  It is a good idea to add test cases for the bug you are fixing.  (See+    below under [Tests](#tests).)  If you are adding a new writer or reader,+    you must include tests.++7.  If you are adding a new feature, include updates to the README.++8.  All code must be released under the general license governing pandoc+    (GPL v2).++9.  It is better not to introduce new dependencies.  Dependencies on+    external C libraries should especially be avoided.++Tests+-----++Tests can be run as follows:++    cabal configure --enable-tests+    cabal build+    cabal test++The test program is `tests/test-pandoc.hs`.++Benchmarks can be enabled by passing the `--enable-benchmarks` flag+to `cabal configure`, and run using `cabal bench`.++The code+--------++Pandoc has a publicly accessible git repository on+github: <http://github.com/jgm/pandoc>.  To get a local copy of the source:++    git clone git://github.com/jgm/pandoc.git++Note:  after cloning the repository (and in the future after pulling from it),+you should do++    git submodule update --init++to pull in changes to the templates (`data/templates/`).  You can automate this+by creating a file `.git/hooks/post-merge` with the contents:++    #!/bin/sh+    git submodule update --init++and making it executable:++    chmod +x .git/hooks/post-merge++The source for the main pandoc program is `pandoc.hs`.  The source for+the pandoc library is in `src/`, the source for the tests is in+`tests/`, and the source for the benchmarks is in `benchmark/`.++The modules `Text.Pandoc.Definition`, `Text.Pandoc.Builder`, and+`Text.Pandoc.Generics` are in a separate library `pandoc-types`.  The code can+be found in a <http://github.com/jgm/pandoc-types>.++To build pandoc, you will need a working installation of the+[Haskell platform].++The library is structured as follows:++  - `Text.Pandoc` is a top-level module that exports what is needed+    by most users of the library.  Any patches that add new readers+    or writers will need to make changes here, too.+  - `Text.Pandoc.Definition` (in `pandoc-types`) defines the types+    used for representing a pandoc document.+  - `Text.Pandoc.Builder` (in `pandoc-types`) provides functions for+    building pandoc documents programatically.+  - `Text.Pandoc.Generics` (in `pandoc-types`) provides functions allowing+    you to promote functions that operate on parts of pandoc documents+    to functions that operate on whole pandoc documents, walking the+    tree automatically.+  - `Text.Pandoc.Readers.*` are the readers, and `Text.Pandoc.Writers.*`+    are the writers.+  - `Text.Pandoc.Biblio` is a utility module for formatting citations+    using citeproc-hs.+  - `Text.Pandoc.Data` is used to embed data files when the `embed_data_files`+    cabal flag is used.  It is generated from `src/Text/Pandoc/Data.hsb` using+    the preprocessor [hsb2hs].+  - `Text.Pandoc.Highlighting` contains the interface to the+    highlighting-kate library, which is used for code syntax highlighting.+  - `Text.Pandoc.ImageSize` is a utility module containing functions for+    calculating image sizes from the contents of image files.+  - `Text.Pandoc.MIME` contains functions for associating MIME types+    with extensions.+  - `Text.Pandoc.Options` defines reader and writer options.+  - `Text.Pandoc.PDF` contains functions for producing a PDF from a+    LaTeX source.+  - `Text.Pandoc.Parsing` contains parsing functions used in multiple readers.+  - `Text.Pandoc.Pretty` is a pretty-printing library specialized to+    the needs of pandoc.+  - `Text.Pandoc.SelfContained` contains functions for making an HTML+    file "self-contained," by importing remotely linked images, CSS,+    and javascript and turning them into `data:` URLs.+  - `Text.Pandoc.Shared` is a grab-bag of shared utility functions.+  - `Text.Pandoc.Writers.Shared` contains utilities used in writers only.+  - `Text.Pandoc.Slides` contains functions for splitting a markdown document+    into slides, using the conventions described in the README.+  - `Text.Pandoc.Templates` defines pandoc's templating system.+  - `Text.Pandoc.UTF8` contains functions for converting text to and from+    UTF8 bytestrings (strict and lazy).+  - `Text.Pandoc.Asciify` contains functions to derive ascii versions of+    identifiers that use accented characters.+  - `Text.Pandoc.UUID` contains functions for generating UUIDs.+  - `Text.Pandoc.XML` contains functions for formatting XML.++[pandoc-discuss]: http://groups.google.com/group/pandoc-discuss+[issue tracker]: https://github.com/jgm/pandoc/issues+[User's Guide]: http://johnmacfarlane.net/pandoc/README.html+[FAQs]:  http://johnmacfarlane.net/pandoc/faqs.html+[Haskell platform]: http://www.haskell.org/platform/+[hsb2hs]: http://hackage.haskell.org/package/hsb2hs
INSTALL view
@@ -3,16 +3,27 @@ These instructions explain how to install pandoc from source. Binary packages or ports of pandoc are available for freebsd and several linux distributions, so check your package manager.-There is also a Windows installer.+There are also binary installers for Windows and Mac OS X. +If you are installing the development version from github, see also:+https://github.com/jgm/pandoc/wiki/Installing-the-development-version-of-pandoc+ Quick install -------------  1.  Install the [Haskell platform].  This will give you [GHC] and-the [cabal-install] build tool.+    the [cabal-install] build tool, as well as `alex` and `happy`.+    If you do not use the Haskell platform, you'll need to install+    `alex` and `happy` separately: -2.  Use `cabal` to install pandoc and its dependencies:+        cabal install alex happy +2.  Update your package database:++        cabal update++3.  Use `cabal` to install pandoc and its dependencies:+         cabal install pandoc      This procedure will install the released version of pandoc,@@ -23,16 +34,31 @@          cabal install -3.  Make sure the `$CABALDIR/bin` directory is in your path.  You should-now be able to run `pandoc`:+    Note: If you obtained the source from the git repository (rather+    than a release tarball), you'll need to do +        git submodule update --init++    to fetch the contents of `data/templates` before `cabal install`.++4.  Make sure the `$CABALDIR/bin` directory is in your path.  You should+    now be able to run `pandoc`:+         pandoc --help -4.  Make sure the `$CABALDIR/share/man/man1` directory is in your `MANPATH`.-You should now be able to access the `pandoc` man page:+    [Not sure where `$CABALDIR` is?](http://www.haskell.org/haskellwiki/Cabal-Install#The_cabal-install_configuration_file) +5.  Make sure the `$CABALDIR/share/man/man1` directory is in your `MANPATH`.+    You should now be able to access the `pandoc` man page:+         man pandoc +6.  If you want to process citations with pandoc, you will also need to+    install a separate package, `pandoc-citeproc`.  This can be installed+    using cabal:++        cabal install pandoc-citeproc+ [GHC]: http://www.haskell.org/ghc/ [Haskell platform]: http://hackage.haskell.org/platform/ [cabal-install]: http://hackage.haskell.org/trac/hackage/wiki/CabalInstall@@ -43,14 +69,19 @@ This is a step-by-step procedure that offers maximal control over the build and installation.  Most users should use the quick install, but this information may be of use to packagers.-For more details, see the [Cabal User's Guide].+For more details, see the [Cabal User's Guide].  These instructions+assume that the pandoc source directory is your working directory.  1.  Install dependencies:  in addition to the [Haskell platform],-you will need [zip-archive], [blaze-html], and [highlighting-kate].+    you will need a number of additional libraries.  You can install+    them all with +        cabal update+        cabal install --only-dependencies+ 2.  Configure: -        runghc Setup.hs configure --prefix=DIR --bindir=DIR --libdir=DIR \+        cabal configure --prefix=DIR --bindir=DIR --libdir=DIR \           --datadir=DIR --libsubdir=DIR --datasubdir=DIR --docdir=DIR \           --htmldir=DIR --program-prefix=PREFIX --program-suffix=SUFFIX \           --mandir=DIR --flags=FLAGSPEC@@ -62,26 +93,34 @@     preceded by a `-` (to force the flag to `false`), and separated     by spaces.  Pandoc's flags include: -    - `blaze_html_0_5`: Use blaze-html >= 0.5 (default yes)-    - `embed_data_files`: embed all data files into the binary (default no)+    - `embed_data_files`: embed all data files into the binary (default no).+      This is helpful if you want to create a relocatable binary.+      Note:  if this option is selected, you need to install the+      `hsb2hs` preprocessor: +          cabal install hsb2hs++    - `http-conduit`:  use the `http-conduit` library to fetch external+      resources (default yes -- without this, pandoc cannot make SSL+      connections)+ 3.  Build: -        runghc Setup.hs build+        cabal build  4.  Build API documentation: -        runghc Setup.hs haddock --html-location=URL --hyperlink-source+        cabal haddock --html-location=URL --hyperlink-source  5.  Copy the files: -        runghc Setup.hs copy --destdir=PATH+        cabal copy --destdir=PATH      The default destdir is `/`.  6.  Register pandoc as a GHC package: -        runghc Setup.hs register+        cabal register      Package managers may want to use the `--gen-script` option to     generate a script that can be run to register the package at@@ -107,7 +146,6 @@ [blaze-html]: http://hackage.haskell.org/package/blaze-html [Cabal User's Guide]: http://www.haskell.org/cabal/release/latest/doc/users-guide/builders.html#setup-configure-paths - Running tests ------------- @@ -115,13 +153,6 @@ To build the tests:      cabal configure --enable-tests && cabal build--Note: If you obtained the source via git, you should first do--    git submodule update --init templates--to populate the templates subdirectory.  (You can skip this step-if you obtained the source from a release tarball.)  To run the tests: 
README view
@@ -13,14 +13,14 @@ Pandoc is a [Haskell] library for converting from one markup format to another, and a command-line tool that uses this library. It can read [markdown] and (subsets of) [Textile], [reStructuredText], [HTML],-[LaTeX], [MediaWiki markup], and [DocBook XML]; and it can write plain-text, [markdown], [reStructuredText], [XHTML], [HTML 5], [LaTeX]-(including [beamer] slide shows), [ConTeXt], [RTF], [DocBook XML],-[OpenDocument XML], [ODT], [Word docx], [GNU Texinfo], [MediaWiki-markup], [EPUB] (v2 or v3), [FictionBook2], [Textile], [groff man] pages, [Emacs-Org-Mode], [AsciiDoc], and [Slidy], [Slideous], [DZSlides], or [S5] HTML-slide shows. It can also produce [PDF] output on systems where LaTeX is-installed.+[LaTeX], [MediaWiki markup], [Haddock markup], [OPML], and [DocBook]; and+it can write plain text, [markdown], [reStructuredText], [XHTML], [HTML 5],+[LaTeX] (including [beamer] slide shows), [ConTeXt], [RTF], [OPML], [DocBook],+[OpenDocument], [ODT], [Word docx], [GNU Texinfo], [MediaWiki markup],+[EPUB] (v2 or v3), [FictionBook2], [Textile], [groff man] pages, [Emacs+Org-Mode], [AsciiDoc], and [Slidy], [Slideous], [DZSlides], [reveal.js]+or [S5] HTML slide shows. It can also produce [PDF] output on systems+where LaTeX is installed.  Pandoc's enhanced version of markdown includes syntax for footnotes, tables, flexible ordered lists, definition lists, fenced code blocks,@@ -143,9 +143,10 @@     `markdown_phpextra` (PHP Markdown Extra extended markdown),     `markdown_github` (github extended markdown),     `textile` (Textile), `rst` (reStructuredText), `html` (HTML),-    `docbook` (DocBook XML), `mediawiki` (MediaWiki markup),-    or `latex` (LaTeX). If `+lhs` is appended to `markdown`, `rst`,-    `latex`, the input will be treated as literate Haskell source:+    `docbook` (DocBook), `opml` (OPML), `mediawiki` (MediaWiki markup),+    `haddock` (Haddock markup), or `latex` (LaTeX).+    If `+lhs` is appended to `markdown`, `rst`, `latex`, or `html`,+    the input will be treated as literate Haskell source:     see [Literate Haskell support](#literate-haskell-support), below.     Markdown syntax extensions can be individually enabled or disabled     by appending `+EXTENSION` or `-EXTENSION` to the format name.@@ -162,23 +163,27 @@     `markdown` (pandoc's extended markdown), `markdown_strict` (original     unextended markdown), `markdown_phpextra` (PHP Markdown extra     extended markdown), `markdown_github` (github extended markdown),-    `rst` (reStructuredText), `html` (XHTML-    1), `html5` (HTML 5), `latex` (LaTeX), `beamer` (LaTeX beamer slide show),+    `rst` (reStructuredText), `html` (XHTML 1), `html5` (HTML 5),+    `latex` (LaTeX), `beamer` (LaTeX beamer slide show),     `context` (ConTeXt), `man` (groff man), `mediawiki` (MediaWiki markup),     `textile` (Textile), `org` (Emacs Org-Mode), `texinfo` (GNU Texinfo),-    `docbook` (DocBook XML), `opendocument` (OpenDocument XML), `odt`-    (OpenOffice text document), `docx` (Word docx), `epub` (EPUB book), `epub3`+    `opml` (OPML), `docbook` (DocBook), `opendocument` (OpenDocument), `odt`+    (OpenOffice text document), `docx` (Word docx),+    `rtf` (rich text format), `epub` (EPUB v2 book), `epub3`     (EPUB v3), `fb2` (FictionBook2 e-book), `asciidoc` (AsciiDoc), `slidy`     (Slidy HTML and javascript slide show), `slideous` (Slideous HTML and-    javascript slide show), `dzslides` (HTML5 + javascript slide show), `s5`-    (S5 HTML and javascript slide show), or `rtf` (rich text format). Note that-    `odt`, `epub`, and `epub3` output will not be directed to *stdout*; an output-    filename must be specified using the `-o/--output` option. If `+lhs` is-    appended to `markdown`, `rst`, `latex`, `beamer`, `html`, or `html5`, the-    output will be rendered as literate Haskell source: see [Literate Haskell-    support](#literate-haskell-support), below.  Markdown syntax extensions can-    be individually enabled or disabled by appending `+EXTENSION` or-    `-EXTENSION` to the format name, as described above under `-f`.+    javascript slide show), `dzslides` (DZSlides HTML5 + javascript slide+    show), `revealjs` (reveal.js HTML5 + javascript slide show), `s5`+    (S5 HTML and javascript slide show), or the path of a custom+    lua writer (see [Custom writers](#custom-writers), below). Note that+    `odt`, `epub`, and `epub3` output will not be directed to *stdout*; an+    output filename must be specified using the `-o/--output` option. If+    `+lhs` is appended to `markdown`, `rst`, `latex`, `beamer`, `html`, or+    `html5`, the output will be rendered as literate Haskell source: see+    [Literate Haskell support](#literate-haskell-support), below.  Markdown+    syntax extensions can be individually enabled or disabled by appending+    `+EXTENSION` or `-EXTENSION` to the format name, as described above+    under `-f`.  `-o` *FILE*, `--output=`*FILE* :   Write output to *FILE* instead of *stdout*.  If *FILE* is@@ -219,12 +224,11 @@ :   Parse untranslatable HTML codes and LaTeX environments as raw HTML     or LaTeX, instead of ignoring them.  Affects only HTML and LaTeX     input. Raw HTML can be printed in markdown, reStructuredText, HTML,-    Slidy, Slideous,-    DZSlides, and S5 output; raw LaTeX can be printed in markdown,-    reStructuredText, LaTeX, and ConTeXt output. The default is for the-    readers to omit untranslatable HTML codes and LaTeX environments.-    (The LaTeX reader does pass through untranslatable LaTeX *commands*,-    even if `-R` is not specified.)+    Slidy, Slideous, DZSlides, reveal.js, and S5 output; raw LaTeX+    can be printed in markdown, reStructuredText, LaTeX, and ConTeXt output.+    The default is for the readers to omit untranslatable HTML codes and+    LaTeX environments.  (The LaTeX reader does pass through untranslatable+    LaTeX *commands*, even if `-R` is not specified.)  `-S`, `--smart` :   Produce typographically correct output, converting straight quotes@@ -255,6 +259,38 @@     require different kinds of images.  Currently this option only affects     the markdown and LaTeX readers. +`--filter=`*EXECUTABLE*+:   Specify an executable to be used as a filter transforming the+    Pandoc AST after the input is parsed and before the output is+    written.  The executable should read JSON from stdin and write+    JSON to stdout.  The JSON must be formatted like  pandoc's own+    JSON input and output.  The name of the output format will be+    passed to the filter as the first argument.  Hence,++        pandoc --filter ./caps.py -t latex++    is equivalent to++        pandoc -t json | ./caps.py latex | pandoc -f json -t latex++    The latter form may be useful for debugging filters.++    Filters may be written in any language.  `Text.Pandoc.JSON`+    exports `toJSONFilter` to facilitate writing filters in Haskell.+    Those who would prefer to write filters in python can use the+    module `pandocfilters`, installable from PyPI. See+    <http://github.com/jgm/pandocfilters> for the module and several+    examples.  Note that the *EXECUTABLE* will be sought in the user's+    `PATH`, and not in the working directory, if no directory is+    provided.  If you want to run a script in the working directory,+    preface the filename with `./`.++`-M` *KEY[=VAL]*, `--metadata=`*KEY[:VAL]*+:   Set the metadata field *KEY* to the value *VAL* after+    parsing.  A value specified on the command line overrides a value+    specified in the document.  Values will be interpreted as raw strings.+    If no value is specified, the value will be treated as Boolean true.+ `--normalize` :   Normalize the document after reading:  merge adjacent     `Str` or `Emph` elements, for example, and remove repeated `Space`s.@@ -299,6 +335,9 @@ :   Print the default template for an output *FORMAT*. (See `-t`     for a list of possible *FORMAT*s.) +`--print-default-data-file=`*FILE*+:   Print a default data file.+ `--no-wrap` :   Disable text wrapping in output. By default, text is wrapped     appropriately for the output format.@@ -310,12 +349,12 @@ :   Include an automatically generated table of contents (or, in     the case of `latex`, `context`, and `rst`, an instruction to create     one) in the output document. This option has no effect on `man`,-    `docbook`, `slidy`, `slideous`, or `s5` output.+    `docbook`, `slidy`, `slideous`, `s5`, `docx`, or `odt` output.  `--toc-depth=`*NUMBER* :   Specify the number of section levels to include in the table     of contents.  The default is 3 (which means that level 1, 2, and 3-    headers will be listed in the contents).  Implies `--toc`.+    headers will be listed in the contents).  `--no-highlight` :   Disables syntax highlighting for code blocks and inlines, even when@@ -358,11 +397,12 @@     in the sense that it needs no external files and no net access to be     displayed properly by a browser. This option works only with HTML output     formats, including `html`, `html5`, `html+lhs`, `html5+lhs`, `s5`,-    `slidy`, `slideous`,-    and `dzslides`. Scripts, images, and stylesheets at absolute URLs-    will be downloaded; those at relative URLs will be sought first relative-    to the working directory, then relative to the user data directory (see-    `--data-dir`), and finally relative to pandoc's default data directory.+    `slidy`, `slideous`, `dzslides`, and `revealjs`. Scripts, images, and+    stylesheets at absolute URLs will be downloaded; those at relative URLs+    will be sought first relative to the working directory, then relative to+    the user data directory (see `--data-dir`), and finally relative to+    pandoc's default data directory.  `--self-contained` does not+    work with `--mathjax`.  `--offline` :   Deprecated synonym for `--self-contained`.@@ -384,8 +424,8 @@     or reStructuredText.  By default inline links are used.  `--atx-headers`-:   Use ATX style headers in markdown output. The default is to use-    setext-style headers for levels 1-2, and then ATX headers.+:   Use ATX style headers in markdown and asciidoc output. The default is+    to use setext-style headers for levels 1-2, and then ATX headers.  `--chapters` :   Treat top-level headers as chapters in LaTeX, ConTeXt, and DocBook@@ -483,7 +523,7 @@     for a file `reference.docx` in the user data directory (see     `--data-dir`). If this is not found either, sensible defaults will be     used. The following styles are used by pandoc: [paragraph]-    Normal, Title, Authors, Date, Heading 1, Heading 2, Heading 3,+    Normal, Compact, Title, Authors, Date, Heading 1, Heading 2, Heading 3,     Heading 4, Heading 5, Block Quote, Definition Term, Definition,     Body Text, Table Caption, Image Caption; [character] Default     Paragraph Font, Body Text Char, Verbatim Char, Footnote Ref,@@ -566,52 +606,20 @@ ------------------  `--bibliography=`*FILE*-:   Specify bibliography database to be used in resolving-    citations. The database type will be determined from the-    extension of *FILE*, which may be `.mods` (MODS format),-    `.bib` (BibLaTeX format, which will normally work for BibTeX-    files as well), `.bibtex` (BibTeX format),-    `.ris` (RIS format), `.enl` (EndNote format),-    `.xml` (EndNote XML format), `.wos` (ISI format),-    `.medline` (MEDLINE format), `.copac` (Copac format),-    or `.json` (citeproc JSON).  If you want to use multiple-    bibliographies, just use this option repeatedly.+:   Set the `bibliography` field in the document's metadata to *FILE*,+    overriding any value set in the metadata, and process citations+    using `pandoc-citeproc`. (This is equivalent to+    `--metadata bibliography=FILE --filter pandoc-citeproc`.)  `--csl=`*FILE*-:   Specify [CSL] style to be used in formatting citations and-    the bibliography. If *FILE* is not found, pandoc will look-    for it in--        $HOME/.csl--    in unix,--        C:\Documents And Settings\USERNAME\Application Data\csl--    in Windows XP, and--        C:\Users\USERNAME\AppData\Roaming\csl--    in Windows 7. If the `--csl` option is not specified, pandoc-    will use a default style:  either `default.csl` in the-    user data directory (see `--data-dir`), or, if that is-    not present, the Chicago author-date style.+:   Set the `csl` field in the document's metadata to *FILE*,+    overriding any value set in the metadata.  (This is equivalent to+    `--metadata csl=FILE`.)  `--citation-abbreviations=`*FILE*-:   Specify a file containing abbreviations for journal titles and-    other bibliographic fields (indicated by setting `form="short"`-    in the CSL node for the field).  The format is described at-    <http://citationstylist.org/2011/10/19/abbreviations-for-zotero-test-release/>.-    Here is a short example:--        { "default": {-            "container-title": {-                    "Lloyd's Law Reports": "Lloyd's Rep",-                    "Estates Gazette": "EG",-                    "Scots Law Times": "SLT"-            }-          }-        }+:   Set the `citation-abbreviations` field in the document's metadata to+    *FILE*, overriding any value set in the metadata.  (This is equivalent to+    `--metadata citation-abbreviations=FILE`.)  `--natbib` :   Use natbib for citations in LaTeX output.@@ -724,7 +732,8 @@ To write a literal `$` in a template, use `$$`.  Some variables are set automatically by pandoc.  These vary somewhat-depending on the output format, but include:+depending on the output format, but include metadata fields (such+as `title`, `author`, and `date`) as well as the following:  `header-includes` :   contents specified by `-H/--include-in-header` (may have multiple@@ -739,13 +748,6 @@     multiple values) `body` :   body of document-`title`-:   title of document, as specified in title block-`author`-:   author of document, as specified in title block (may have-    multiple values)-`date`-:   date of document, as specified in title block `lang` :   language code for HTML or LaTeX documents `slidy-url`@@ -755,31 +757,50 @@ :   base URL for Slideous documents (defaults to `default`) `s5-url` :   base URL for S5 documents (defaults to `ui/default`)+`revealjs-url`+:   base URL for reveal.js documents (defaults to `reveal.js`)+`theme`+:   reveal.js or LaTeX beamer theme+`transition`+:   reveal.js transition `fontsize` :   font size (10pt, 11pt, 12pt) for LaTeX documents `documentclass` :   document class for LaTeX documents+`classoption`+:   option for LaTeX documentclass, e.g. `oneside`; may be repeated+    for multiple options `geometry` :   options for LaTeX `geometry` class, e.g. `margin=1in`;     may be repeated for multiple options `mainfont`, `sansfont`, `monofont`, `mathfont` :   fonts for LaTeX documents (works only with xelatex     and lualatex)-`theme`-:   theme for LaTeX beamer documents `colortheme` :   colortheme for LaTeX beamer documents+`fonttheme`+:   fonttheme for LaTeX beamer documents `linkcolor` :   color for internal links in LaTeX documents (`red`, `green`,     `magenta`, `cyan`, `blue`, `black`) `urlcolor` :   color for external links in LaTeX documents+`citecolor`+:   color for citation links in LaTeX documents `links-as-notes` :   causes links to be printed as footnotes in LaTeX documents+`biblio-style`+:   bibliography style in LaTeX, when used with `--natbib`+`section`+:   section number in man pages+`header`+:   header in man pages+`footer`+:   footer in man pages  Variables may be set at the command line using the `-V/--variable`-option. This allows users to include custom variables in their-templates.+option.  Variables set in this way override metadata fields with+the same name.  Templates may contain conditionals.  The syntax is as follows: @@ -806,6 +827,11 @@      $for(author)$$author$$sep$, $endfor$ +A dot can be used to select a field of a variable that takes+an object as its value.  So, for example:++    $author.name$ ($author.affiliation$)+ If you use custom templates, you may need to revise them as pandoc changes.  We recommend tracking the changes in the default templates, and modifying your custom templates accordingly. An easy way to do this@@ -867,7 +893,7 @@ ### Setext-style headers ###  A setext-style header is a line of text "underlined" with a row of `=` signs-(for a level one header) of `-` signs (for a level two header):+(for a level one header) or `-` signs (for a level two header):      A level-one header     ==================@@ -946,6 +972,7 @@ To derive the identifier from the header text,    - Remove all formatting, links, etc.+  - Remove all footnotes.   - Remove all punctuation, except underscores, hyphens, and periods.   - Replace all spaces and newlines with hyphens.   - Convert all alphabetic characters to lowercase.@@ -1315,6 +1342,12 @@          (C\) 2007 Joe Smith +The `fancy_lists` extension also allows '`#`' to be used as an+ordered list marker in place of a numeral:++    #. one+    #. two+ **Extension: `startnum`**  Pandoc also pays attention to the type of list marker used, and to the@@ -1752,7 +1785,55 @@  will also have "Version 4.0" in the header. +YAML metadata block+------------------- +**Extension: `yaml_metadata_block`**++A YAML metadata block is a valid YAML object, delimited by a line of three+hyphens (`---`) at the top and a line of three hyphens (`---`) or three dots+(`...`) at the bottom.  A YAML metadata block may occur anywhere in the+document, but if it is not at the beginning, it must be preceded by a blank+line.++Metadata will be taken from the fields of the YAML object and added to any+existing document metadata.  Metadata can contain lists and objects (nested+arbitrarily), but all string scalars will be interpreted as markdown.  Fields+with names ending in an underscore will be ignored by pandoc.  (They may be+given a role by external processors.)++A document may contain multiple metadata blocks.  The metadata fields will+be combined through a *left-biased union*:  if two metadata blocks attempt+to set the same field, the value from the first block will be taken.++Note that YAML escaping rules must be followed. Thus, for example,+if a title contains a colon, it must be quoted.  The pipe character+(`|`) can be used to begin an indented block that will be interpreted+literally, without need for escaping.  This form is necessary+when the field contains blank lines:++    ---+    title:  'This is the title: it contains a colon'+    author:+    - name: Author One+      affiliation: University of Somewhere+    - name: Author Two+      affiliation: University of Nowhere+    tags: [nothing, nothingness]+    abstract: |+      This is the abstract.++      It consists of two paragraphs.+    ...++Template variables will be set automatically from the metadata.  Thus, for+example, in writing HTML, the variable `abstract` will be set to the HTML+equivalent of the markdown in the `abstract` field:++    <p>This is the abstract.</p>+    <p>It consists of two paragraphs.</p>++ Backslash escapes ----------------- @@ -2272,10 +2353,15 @@  **Extension: `citations`** -Pandoc can automatically generate citations and a bibliography in a number of-styles (using Andrea Rossato's `hs-citeproc`). In order to use this feature,-you will need a bibliographic database in one of the following formats:+Using an external filter, `pandoc-citeproc`, pandoc can automatically generate+citations and a bibliography in a number of styles.  Basic usage is +    pandoc --filter pandoc-citeproc myinput.txt++In order to use this feature, you will need to specify a bibliography file+using the `bibliography` metadata field in a YAML metadata section.+The bibliography may have any of these formats:+   Format            File extension   ------------      --------------   MODS              .mods@@ -2292,19 +2378,41 @@ Note that `.bib` can generally be used with both BibTeX and BibLaTeX files, but you can use `.bibtex` to force BibTeX. -You will need to specify the bibliography file using the `--bibliography`-command-line option (which may be repeated if you have several-bibliographies).+Alternatively you can use a `references` field in the document's YAML+metadata.  This should include an array of YAML-encoded references,+for example: -By default, pandoc will use a Chicago author-date format for citations-and references.  To use another style, you will need to use the-`--csl` option to specify a [CSL] 1.0 style file.  A primer on-creating and modifying CSL styles can be found at-<http://citationstyles.org/downloads/primer.html>.-A repository of CSL styles can be found at-<https://github.com/citation-style-language/styles>.-See also <http://zotero.org/styles> for easy browsing.+    ---+    references:+    - id: fenner2012a+      title: One-click science marketing+      author:+      - family: Fenner+        given: Martin+      container-title: Nature Materials+      volume: 11+      URL: 'http://dx.doi.org/10.1038/nmat3283'+      DOI: 10.1038/nmat3283+      issue: 4+      publisher: Nature Publishing Group+      page: 261-263+      type: article-journal+      issued:+        year: 2012+        month: 3+    ... +(The program `mods2yaml`, which comes with `pandoc-citeproc`, can help produce+these from a MODS reference collection.)++By default, `pandoc-citeproc` will use a Chicago author-date format for+citations and references.  To use another style, you will need to specify+a [CSL] 1.0 style file in the `csl` metadata field.  A primer on creating and+modifying CSL styles can be found at+<http://citationstyles.org/downloads/primer.html>.  A repository of CSL styles+can be found at <https://github.com/citation-style-language/styles>.  See also+<http://zotero.org/styles> for easy browsing.+ Citations go inside square brackets and are separated by semicolons. Each citation must have a key, composed of '@' + the citation identifier from the database, and may optionally have a prefix,@@ -2339,17 +2447,27 @@ The bibliography will be inserted after this header.  Non-pandoc extensions-=====================+---------------------  The following markdown syntax extensions are not enabled by default in pandoc, but may be enabled by adding `+EXTENSION` to the format name, where `EXTENSION` is the name of the extension.  Thus, for example, `markdown+hard_line_breaks` is markdown with hard line breaks. +**Extension:  `lists_without_preceding_blankline`**\+Allow a list to occur right after a paragraph, with no intervening+blank space.+ **Extension:  `hard_line_breaks`**\ Causes all newlines within a paragraph to be interpreted as hard line breaks instead of spaces. +**Extension:  `ignore_line_breaks`**\+Causes newlines within a paragraph to be ignored, rather than being+treated as spaces or as hard line breaks.  This option is intended for+use with East Asian languages where spaces are not used between words,+but text is divided into lines for readability.+ **Extension: `tex_math_single_backslash`**\ Causes anything between `\(` and `\)` to be interpreted as inline TeX math, and anything between `\[` and `\]` to be interpreted@@ -2378,12 +2496,12 @@  See the MultiMarkdown documentation for details. Note that only title, author, and date are recognized; other fields are simply ignored by-pandoc. If `pandoc_title_block` is enabled, it will take precedence over-`mmd_title_block`.+pandoc. If `pandoc_title_block` or `yaml_metadata_block` is enabled,+it will take precedence over `mmd_title_block`.    [MultiMarkdown]: http://fletcherpenney.net/multimarkdown/ -**Extension: `abbrevations`**\+**Extension: `abbreviations`**\ Parses PHP Markdown Extra abbreviation keys, like      *[HTML]: Hyper Text Markup Language@@ -2396,6 +2514,11 @@ Makes all absolute URIs into links, even when not surrounded by pointy braces `<...>`. +**Extension: `ascii_identifiers`**\+Causes the identifiers produced by `auto_identifiers` to be pure ASCII.+Accents are stripped off of accented latin letters, and non-latin+letters are omitted.+ **Extension: `link_attributes`**\ Parses multimarkdown style key-value attributes on link and image references. Note that pandoc's internal document model provides nowhere to put@@ -2405,13 +2528,40 @@ Parses multimarkdown style header identifiers (in square brackets, after the header but before any trailing `#`s in an ATX header). +Markdown variants+-----------------++In addition to pandoc's extended markdown, the following markdown+variants are supported:++`markdown_phpextra` (PHP Markdown Extra)+:   `footnotes`, `pipe_tables`, `raw_html`, `markdown_attribute`,+    `fenced_code_blocks`, `definition_lists`, `intraword_underscores`,+    `header_attributes`, `abbreviations`.++`markdown_github` (Github-flavored Markdown)+:   `pipe_tables`, `raw_html`, `tex_math_single_backslash`,+    `fenced_code_blocks`, `fenced_code_attributes`, `auto_identifiers`,+    `ascii_identifiers`, `backtick_code_blocks`, `autolink_bare_uris`,+    `intraword_underscores`, `strikeout`, `hard_line_breaks`++`markdown_mmd` (MultiMarkdown)+:   `pipe_tables` `raw_html`, `markdown_attribute`, `link_attributes`,+    `raw_tex`, `tex_math_double_backslash`, `intraword_underscores`,+    `mmd_title_block`, `footnotes`, `definition_lists`,+    `all_symbols_escapable`, `implicit_header_references`,+    `auto_identifiers`, `mmd_header_identifiers`++`markdown_strict` (Markdown.pl)+:   `raw_html`+ Producing slide shows with Pandoc =================================  You can use Pandoc to produce an HTML + javascript slide presentation-that can be viewed via a web browser.  There are four ways to do this,-using [S5], [DZSlides], [Slidy], or [Slideous].  You can also produce a-PDF slide show using LaTeX [beamer].+that can be viewed via a web browser.  There are five ways to do this,+using [S5], [DZSlides], [Slidy], [Slideous], or [reveal.js].+You can also produce a PDF slide show using LaTeX [beamer].  Here's the markdown source for a simple slide show, `habits.txt`: @@ -2447,31 +2597,31 @@     - Get in bed     - Count sheep -To produce the slide show, simply type--    pandoc -t s5 -s habits.txt -o habits.html--for S5,--    pandoc -t slidy -s habits.txt -o habits.html+To produce an HTML/javascript slide show, simply type -for Slidy,+    pandoc -t FORMAT -s habits.txt -o habits.html -    pandoc -t slideous -s habits.txt -o habits.html+where `FORMAT` is either `s5`, `slidy`, `slideous`, `dzslides`, or `revealjs`. -for Slideous,+For Slidy, Slideous, reveal.js, and S5, the file produced by pandoc with the+`-s/--standalone` option embeds a link to javascripts and CSS files, which are+assumed to be available at the relative path `s5/default` (for S5), `slideous`+(for Slideous), `reveal.js` (for reveal.js), or at the Slidy website at+`w3.org` (for Slidy).  (These paths can be changed by setting the `slidy-url`,+`slideous-url`, `revealjs-url`, or `s5-url` variables; see `--variable`,+above.) For DZSlides, the (relatively short) javascript and css are included in+the file by default. -    pandoc -t dzslides -s habits.txt -o habits.html+With all HTML slide formats, the `--self-contained` option can be used to+produce a single file that contains all of the data necessary to display the+slide show, including linked scripts, stylesheets, images, and videos. -for DZSlides, or+To produce a PDF slide show using beamer, type      pandoc -t beamer habits.txt -o habits.pdf -for beamer.--With all HTML slide formats, the `--self-contained` option can be used to-produce a single file that contains all of the data necessary to display the-slide show, including linked scripts, stylesheets, images, and videos.+Note that a reveal.js slide show can also be converted to a PDF+by printing it to a file from the browser.  Structuring the slide show --------------------------@@ -2507,15 +2657,10 @@ will be the slide level.) But you can also structure the slide show into sections, as in the example above. -For Slidy, Slideous and S5, the file produced by pandoc with the-`-s/--standalone`-option embeds a link to javascripts and CSS files, which are assumed to-be available at the relative path `s5/default` (for S5) or `slideous`-(for Slideous), or at the Slidy-website at `w3.org` (for Slidy). (These paths can be changed by setting-the `slidy-url`, `slideous-url` or `s5-url` variables; see `--variable`,-above.) For DZSlides,-the (relatively short) javascript and css are included in the file by default.+Note:  in reveal.js slide shows, if slide level is 2, a two-dimensional+layout will be produced, with level 1 headers building horizontally+and level 2 headers building vertically.  It is not recommended that+you use deeper nesting of section levels with reveal.js.  Incremental lists -----------------@@ -2532,6 +2677,20 @@ In this way incremental and nonincremental lists can be mixed in a single document. +Inserting pauses+----------------++You can add "pauses" within a slide by including a paragraph containing+three dots, separated by spaces:++    # Slide with a pause++    content before the pause++    . . .++    content after the pause+ Styling the slides ------------------ @@ -2546,11 +2705,28 @@ For dzslides, the CSS is included in the HTML file itself, and may be modified there. +For reveal.js, themes can be used by setting the `theme` variable,+for example:++    -V theme=moon++Or you can specify a custom stylesheet using the `--css` option.+ To style beamer slides, you can specify a beamer "theme" or "colortheme" using the `-V` option:      pandoc -t beamer habits.txt -V theme:Warsaw -o habits.pdf +Note that header attributes will turn into slide attributes+(on a `<div>` or `<section>`) in HTML slide formats, allowing you+to style individual slides.  In Beamer, the only header attribute+that affects slides is the `allowframebreaks` class, which sets the+`allowframebreaks` option, causing multiple slides to be created+if the content overfills the frame.  This is recommended especially for+bibliographies:++    # References {.allowframebreaks}+ Literate Haskell support ======================== @@ -2597,6 +2773,23 @@ writes HTML with the Haskell code in bird tracks, so it can be copied and pasted as literate Haskell source. +Custom writers+==============++Pandoc can be extended with custom writers written in [lua].  (Pandoc+includes a lua interpreter, so lua need not be installed separately.)++To use a custom writer, simply specify the path to the lua script+in place of the output format. For example:++    pandoc -t data/sample.lua++Creating a custom writer requires writing a lua function for each+possible element in a pandoc document.  To get a documented example+which you can modify according to your needs, do++    pandoc --print-default-data-file sample.lua+ Authors ======= @@ -2609,7 +2802,8 @@ Nathan Gass, Jonathan Daugherty, Jérémy Bobbio, Justin Bogner, qerub, Christopher Sawicki, Kelsey Hightower, Masayoshi Takahashi, Antoine Latter, Ralf Stephan, Eric Seidel, B. Scott Michel, Gavin Beatty,-Sergey Astanin, Arlo O'Keeffe, Denis Laxalde, Brent Yorgey.+Sergey Astanin, Arlo O'Keeffe, Denis Laxalde, Brent Yorgey, David Lazar,+Jamie F. Olson.  [markdown]: http://daringfireball.net/projects/markdown/ [reStructuredText]: http://docutils.sourceforge.net/docs/ref/rst/introduction.html@@ -2623,11 +2817,13 @@ [beamer]: http://www.tex.ac.uk/CTAN/macros/latex/contrib/beamer [ConTeXt]: http://www.pragma-ade.nl/ [RTF]:  http://en.wikipedia.org/wiki/Rich_Text_Format-[DocBook XML]:  http://www.docbook.org/-[OpenDocument XML]: http://opendocument.xml.org/+[DocBook]:  http://www.docbook.org/+[OPML]: http://dev.opml.org/spec2.html+[OpenDocument]: http://opendocument.xml.org/ [ODT]: http://en.wikipedia.org/wiki/OpenDocument [Textile]: http://redcloth.org/textile [MediaWiki markup]: http://www.mediawiki.org/wiki/Help:Formatting+[Haddock markup]: http://www.haskell.org/haddock/doc/html/ch03s08.html [groff man]: http://developer.apple.com/DOCUMENTATION/Darwin/Reference/ManPages/man7/groff_man.7.html [Haskell]:  http://www.haskell.org/ [GNU Texinfo]: http://www.gnu.org/software/texinfo/@@ -2639,4 +2835,7 @@ [ISO 8601 format]: http://www.w3.org/TR/NOTE-datetime [Word docx]: http://www.microsoft.com/interop/openup/openxml/default.aspx [PDF]: http://www.adobe.com/pdf/+[reveal.js]: http://lab.hakim.se/reveal-js/ [FictionBook2]: http://www.fictionbook.org/index.php/Eng:XML_Schema_Fictionbook_2.1+[lua]: http://www.lua.org+
benchmark/benchmark-pandoc.hs view
@@ -1,8 +1,6 @@ import Text.Pandoc-import Text.Pandoc.Shared (normalize) import Criterion.Main import Criterion.Config-import Text.JSON.Generic import System.Environment (getArgs) import Data.Monoid @@ -15,8 +13,7 @@                      _ -> error $ "Could not find writer for " ++ name       inp = writer def{ writerWrapText = True } doc       -- we compute the length to force full evaluation-      getLength (Pandoc (Meta a b c) d) =-            length a + length b + length c + length d+      getLength (Pandoc (Meta _) d) = length d   in  bench (name ++ " reader") $ whnfIO $ getLength `fmap`       (reader def{ readerSmart = True }) inp @@ -26,11 +23,6 @@ writerBench doc (name, writer) = bench (name ++ " writer") $ nf     (writer def{ writerWrapText = True }) doc -normalizeBench :: Pandoc -> [Benchmark]-normalizeBench doc = [ bench "normalize - with" $ nf (encodeJSON . normalize) doc-                     , bench "normalize - without" $ nf encodeJSON doc-                     ]- main :: IO () main = do   args <- getArgs@@ -39,8 +31,9 @@   inp2 <- readFile "tests/testsuite.txt"   let opts = def{ readerSmart = True }   let doc = readMarkdown opts $ inp ++ unlines (drop 3 $ lines inp2)-  let readerBs = map (readerBench doc) readers+  let readerBs = map (readerBench doc)+                 $ filter (\(n,_) -> n /="haddock") readers   let writers' = [(n,w) | (n, PureStringWriter w) <- writers]   defaultMainWith conf (return ()) $-    map (writerBench doc) writers' ++ readerBs ++ normalizeBench doc+    map (writerBench doc) writers' ++ readerBs 
changelog view
@@ -1,3 +1,613 @@+pandoc (1.12)++  [new features]++  * Much more flexible metadata, including arbitrary fields and structured+    values.  Metadata can be specified flexibly in pandoc markdown using+    YAML metadata blocks, which may occur anywhere in the document:++        ---+        title: Here is my title.+        abstract: |+          This is the abstract.++          1. It can contain+          2. block content+             and *inline markup*++        tags: [cat, dog, animal]+        ...++    Metadata fields automatically populate template variables.++  * Added `opml` (OPML) as input and output format.  The `_note` attribute,+    used in OmniOutliner and supported by multimarkdown, is supported.+    We treat the contents as markdown blocks under a section header.++  * Added `haddock` (Haddock markup) as input format (David Lazar).++  * Added `revealjs` output format, for reveal.js HTML 5 slide shows.+    (Thanks to Jamie F. Olson for the initial patch.)+    Nested vertical stacks are used for hierarchical structure.+    Results for more than one level of nesting may be odd.++  * Custom writers can now be written in lua.++        pandoc -t data/sample.lua++    will load the script sample.lua and use it as a custom writer.+    (For a sample, do `pandoc --print-default-data-file sample.lua`.)+    Note that pandoc embeds a lua interpreter, so lua need not be+    installed separately.++  * New `--filter/-F` option to make it easier to run "filters"+    (Pandoc AST transformations that operate on JSON serializations).+    Filters are always passed the name of the output format, so their+    behavior can be tailored to it.  The repository+    <https://github.com/jgm/pandocfilters> contains+    a python module for writing pandoc filters in python, with+    a number of examples.++  * Added `--metadata/-M` option.+    This is like `--variable/-V`, but actually adds to metadata, not+    just variables.++  * Added `--print-default-data-file` option, which allows printing+    of any of pandoc's data files. (For example,+    `pandoc --print-default-data-file reference.odt` will print+    `reference.odt`.)++  * Added syntax for "pauses" in slide shows:++        This gives++        . . .++        me pause.++  * New markdown extensions:++    + `ignore_line_breaks`:  causes intra-paragraph line breaks to be ignored,+      rather than being treated as hard line breaks or spaces.  This is useful+      for some East Asian languages, where spaces aren't used between words,+      but text is separated into lines for readability.+    + `yaml_metadata_block`:  Parse YAML metadata blocks.  (Default.)+    + `ascii_identifiers`: This will force `auto_identifiers` to use ASCII+       only. (Default for `markdown_github`.) (#807)+    + `lists_without_preceding_blankline`:  Allow lists to start without+      preceding blank space.  (Default for `markdown_github`.) (#972)++  [behavior changes]++  * `--toc-level` no longer implies `--toc`.+    Reason: EPUB users who don't want a visible TOC may still want+    to set the TOC level for in the book navigation.++  * `--help` now prints in and out formats in alphabetical order, and+    says something about PDF output (#720).++  * `--self-contained` now returns less verbose output (telling you+    which URLs it is fetching, but not giving the full header).  In+    addition, there are better error messages when fetching a URL fails.++  * Citation support is no longer baked in to core pandoc. Users who+    need citations will need to install and use a separate filter+    (`--filter pandoc-citeproc`).  This filter will take `bibliography`,+    `csl`, and `citation-abbreviations` from the metadata, though it+    may still be specified on the command line as before.++  * A `Cite` element is now created in parsing markdown whether or not+    there is a matching reference.++  * The `pandoc-citeproc` script will put the bibliography at the+    end of the document, as before.  However, it will be put inside a `Div`+    element with class "references", allowing users some control+    over the styling of references.  A final header, if any, will+    be included in the `Div`.++  * The markdown writer will not print a bibliography if the+    `citations` extension is enabled.  (If the citations are formatted+    as markdown citations, it is redundant to have a bibliography,+    since one will be generated automatically.)++  * Previously we used to store the directory of the first input file,+    even if it was local, and used this as a base directory for finding+    images in ODT, EPUB, Docx, and PDF.  This has been confusing to many+    users.  So we now look for images relative to the current+    working directory, even if the first file argument is in another+    directory.   Note that this change may break some existing workflows.+    If you have been assuming that relative links will be interpreted+    relative to the directory of the first file argument, you'll need+    to make that the current directory before running pandoc. (#942)++  * Better error reporting in some readers, due to changes in `readWith`:+    the line in which the error occured is printed, with a caret pointing+    to the column.++  * All slide formats now support incremental slide view for definition lists.++  * Parse `\(..\)` and `\[..\]` as math in MediaWiki reader.+    Parse `:<math>...</math>` as display math.  These notations are used with+    the MathJax MediaWiki extension.++  * All writers: template variables are set automatically from metadata+    fields.  However, variables specified on the command line with+    `--variable` will completely shadow metadata fields.++  * If `--variable` is used to set many variables with the same name,+    a list is created.++  * Man writer:  The `title`, `section`, `header`, and `footer` can now+    all be set individually in metadata.  The `description` variable has been+    removed.  Quotes have been added so that spaces are allowed in the+    title.  If you have a title that begins++        COMMAND(1) footer here | header here++    pandoc will still parse it into a title, section, header, and+    footer.  But you can also specify these elements explicitly (#885).++  * Markdown reader++    + Added support for YAML metadata blocks, which can come anywhere+      in the document (not just at the beginning).  A document can contain+      multiple YAML metadata blocks.+    + HTML span and div tags are parsed as pandoc Span and Div elements.++  * Markdown writer++    + Allow simple tables to be printed as grid tables,+      if other table options are disabled.  This means you can do+      `pandoc -t markdown-pipe_tables-simple_tables-multiline_tables`+      and all tables will render as grid tables.+    + Support YAML title block (render fields in alphabetical order+      to make output predictable).++  [API changes]++  * `Meta` in `Text.Pandoc.Definition` has been changed to allow+    structured metadata.  (Note:  existing code that pattern-matches+    on `Meta` will have to be revised.)  Metadata can now contain+    indefinitely many fields, with content that can be a string,+    a Boolean, a list of `Inline` elements, a list of `Block`+    elements, or a map or list of these.++  * A new generic block container (`Div`) has been added to `Block`,+    and a generic inline container (`Span`) has been added to `Inline`.+    These can take attributes.  They will render in HTML, Textile,+    MediaWiki, Org, RST and and Markdown (with `markdown_in_html`+    extension) as HTML `<div>` and `<span>` elements; in other formats+    they will simply pass through their contents.  But they can be+    targeted by scripts.++  * `Format` is now a newtype, not an alias for String.+    Equality comparisons are case-insensitive.++  * Added `Text.Pandoc.Walk`, which exports hand-written tree-walking+    functions that are much faster than the SYB functions from+    `Text.Pandoc.Generic`.  These functions are now used where possible+    in pandoc's code.  (`Tests.Walk` verifies that `walk` and `query`+    match the generic traversals `bottomUp` and `queryWith`.)++  * Added `Text.Pandoc.JSON`, which provides `ToJSON` and `FromJSON`+    instances for the basic pandoc types. They use GHC generics and+    should be faster than the old JSON serialization using+    `Data.Aeson.Generic`.++  * Added `Text.Pandoc.Process`, exporting `pipeProcess`.+    This is a souped-up version of `readProcessWithErrorcode` that+    uses lazy bytestrings instead of strings and allows setting+    environment variables.  (Used in `Text.Pandoc.PDF`.)++  * New module `Text.Pandoc.Readers.OPML`.++  * New module `Text.Pandoc.Writers.OPML`.++  * New module `Text.Pandoc.Readers.Haddock` (David Lazar).+    This is based on Haddock's own lexer/parser.++  * New module `Text.Pandoc.Writers.Custom`.++  * In `Text.Pandoc.Shared`, `openURL` and `fetchItem` now return an+    Either, for better error handling.++  * Made `stringify` polymorphic in `Text.Pandoc.Shared`.++  * Removed `stripTags` from `Text.Pandoc.XML`.++  * `Text.Pandoc.Templates`:++    + Simplified `Template` type to a newtype.+    + Removed `Empty`.+    + Changed type of `renderTemplate`: it now takes a JSON context+      and a compiled template.+    + Export `compileTemplate`.+    + Export `renderTemplate'` that takes a string instead of a compiled+      template.+    + Export `varListToJSON`.++  * `Text.Pandoc.PDF` exports `makePDF` instead of `tex2pdf`.++  * `Text.Pandoc`:++    + Made `toJsonFilter` an alias for `toJSONFilter` from `Text.Pandoc.JSON`.+    + Removed `ToJsonFilter` typeclass.  `ToJSONFilter` from+      `Text.Pandoc.JSON` should be used instead.  (Compiling against+      pandoc-types instead of pandoc will also produce smaller executables.)+    * Removed the deprecated `jsonFilter` function.+    + Added `readJSON`, `writeJSON` to the API (#817).++  * `Text.Pandoc.Options`:++    + Added `Ext_lists_without_preceding_blankline`,+      `Ext_ascii_identifiers`, `Ext_ignore_line_breaks`,+      `Ext_yaml_metadataBlock` to `Extension`.+    + Changed `writerSourceDirectory` to `writerSourceURL` and changed the+      type to a `Maybe`.  `writerSourceURL` is set to 'Just url' when the+      first command-line argument is an absolute URL.  (So, relative links+      will be resolved in relation to the first page.)  Otherwise, 'Nothing'.+    + All bibliography-related fields have been removed from+      `ReaderOptions` and `WriterOptions`: `writerBiblioFiles`,+      `readerReferences`, `readerCitationStyle`.++  * The `Text.Pandoc.Biblio` module has been removed.  Users of the+    pandoc library who want citation support will need to use+    `Text.CSL.Pandoc` from `pandoc-citations`.+ ++  [bug fixes]++  * In markdown, don't autolink a bare URI that is followed by `</a>`+    (#937).++  * `Text.Pandoc.Shared`++    + `openURL` now follows redirects (#701), properly handles `data:`+      URIs, and prints diagnostic output to stderr rather than stdout.+    + `readDefaultDataFile`: normalize the paths.  This fixes bugs in+      `--self-contained` on pandoc compiled with `embed_data_files` (#833).+    + Fixed `readDefaultDataFile` so it works on Windows.+    + Better error messages for `readDefaultDataFile`.  Instead of+      listing the last path tried, which can confuse people who are+      using `--self-contained`, so now we just list the data file name.+    + URL-escape pipe characters.  Even though these are legal, `Network.URI`+      doesn't regard them as legal in URLs.  So we escape them first (#535).++  * Mathjax in HTML slide shows:  include explicit "Typeset" call.+    This seems to be needed for some formats (e.g. slideous) and won't+    hurt in others (#966).++  * `Text.Pandoc.PDF`++    + On Windows, create temdir in working directory, since the system+      temp directory path may contain tildes, which can cause+      problems in LaTeX (#777).+    + Put temporary output directory in `TEXINPUTS` (see #917).+    + `makePDF` tries to download images that are not found locally,+      if the first argument is a URL (#917).+    + If compiling with `pdflatex` yields an encoding error, offer+      the suggestion to use `--latex-engine=xelatex`.++  * Produce automatic header identifiers in parsing textile, RST,+    and LaTeX, unless `auto_identifiers` extension is disabled (#967).++  * `Text.Pandoc.SelfContained`:  Strip off fragment, query of relative URL+     before treating as a filename.  This fixes `--self-contained` when used+     with CSS files that include web fonts using the method described here:+      <http://paulirish.com/2009/bulletproof-font-face-implementation-syntax/>+      (#739).  Handle `src` in `embed`, `audio`, `source`, `input` tags.++  * `Text.Pandoc.Parsing`: `uri` parser no longer treats punctuation before+    percent-encoding, or a `+` character, as final punctuation.++  * `Text.Pandoc.ImageSize`:  Handle EPS (#903).  This change will make+    EPS images properly sized on conversion to Word.++  * Slidy:  Use slidy.js rather than slidy.js.gz.+    Reason:  some browsers have trouble with the gzipped js file,+    at least on the local file system (#795).++  * Markdown reader++    + Properly handle blank line at beginning of input (#882).+    + Fixed bug in unmatched reference links.  The input+      `[*infile*] [*outfile*]` was getting improperly parsed:+      "infile" was emphasized, but "*outfile*" was literal (#883).+    + Allow internal `+` in citation identifiers (#856).+    + Allow `.` or `)` after `#` in ATX headers if no `fancy_lists`.+    + Do not generate blank title, author, or date metadata elements.+      Leave these out entirely if they aren't present.+    + Allow backtick code blocks not to be preceded by blank line (#975).++  * Textile reader:++    + Correctly handle entities.+    + Improved handling of `<pre>` blocks (#927). Remove internal HTML tags+      in code blocks, rather than printing them verbatim. Parse attributes+      on `<pre>` tag for code blocks.++  * HTML reader: Handle non-simple tables (#893).  Column widths are read from+    `col` tags if present, otherwise divided equally.++  * LaTeX reader++    + Support alltt environment (#892).+    + Support `\textasciitilde`, `\textasciicircum` (#810).+    + Treat `\textsl` as emphasized text reader (#850).+    + Skip positional options after `\begin{figure}`.+    + Support `\v{}` for hacek (#926).+    + Don't add spurious ", " to citation suffixes.+      This is added when needed in pandoc-citeproc.+    + Allow spaces in alignment spec in tables, e.g. `{ l r c }`.+    + Improved support for accented characters (thanks to Scott Morrison).+    + Parse label after section command and set id (#951).++  * RST reader:++    + Don't insert paragraphs where docutils doesn't.+      `rst2html` doesn't add `<p>` tags to list items (even when they are+      separated by blank lines) unless there are multiple paragraphs in the+      list.  This commit changes the RST reader to conform more closely to+      what docutils does (#880).+    + Improved metadata.  Treat initial field list as metadata when+      standalone specified.  Previously ALL fields "title", "author",+      "date" in field lists were treated as metadata, even if not at+      the beginning.  Use `subtitle` metadata field for subtitle.+    + Fixed 'authors' metadata parsing in reST.  Semicolons separate+      different authors.++  * MediaWiki reader++    + Allow space before table rows.+    + Fixed regression for `<ref>URL</ref>`.+      `<` is no longer allowed in URLs, according to the uri parser+      in `Text.Pandoc.Parsing`.  Added a test case.+    + Correctly handle indented preformatted text without preceding+      or following blank line.+    + Fixed `|` links inside table cells.  Improved attribute parsing.+    + Skip attributes on table rows.  Previously we just crashed if+      rows had attributes, now we ignore them.+    + Ignore attributes on headers.+    + Allow `Image:` for images (#971).+    + Parse an image with caption in a paragraph by itself as a figure.++  * LaTeX writer++    + Don't use ligatures in escaping inline code.+    + Fixed footnote numbers in LaTeX/PDF tables.  This fixes a bug+      wherein notes were numbered incorrectly in tables (#827).+    + Always create labels for sections.  Previously the labels were only+      created when there were links to the section in the document (#871).+    + Stop escaping `|` in LaTeX math.+      This caused problems with array environments (#891).+    + Change `\` to `/` in paths.  `/` works even on Windows in LaTeX.+      `\` will cause major problems if unescaped.+    + Write id for code block to label attribute in LaTeX when listings+      is used (thanks to Florian Eitel).+    + Scale LaTeX tables so they don't exceed columnwidth.+    + Avoid problem with footnotes in unnumbered headers (#940).++  * Beamer writer: when creating beamer slides, add `allowframebreaks` option+      to the slide if it is one of the header classes.  It is recommended+      that your bibliography slide have this attribute:++        # References {.allowframebreaks}++    This causes multiple slides to be created if necessary, depending+    on the length of the bibliography.++  * ConTeXt writer: Properly handle tables without captions.  The old output+    only worked in MkII. This should work in MkIV as well (#837).++  * MediaWiki writer: Use native mediawiki tables instead of HTML (#720).++  * HTML writer:++    + Fixed `--no-highlight` (Alexander Kondratskiy).+    + Don't convert to lowercase in email obfuscation (#839).+    + Ensure proper escaping in `<title>` and `<meta>` fields.++  * AsciiDoc writer:++    + Support `--atx-headers` (Max Rydahl Andersen).+    + Don't print empty identifier blocks `([[]])` on headers (Max+      Rydahl Andersen).++  * ODT writer:++    + Fixing wrong numbered-list indentation in open document format+      (Alexander Kondratskiy) (#369).+    + `reference.odt`: Added pandoc as "generator" in `meta.xml`.+    + Minor changes for ODF 1.2 conformance (#939). We leave the+      nonconforming `contextual-spacing` attribute, which is provided by+      LibreOffice itself and seems well supported.++  * Docx writer:++    + Fixed rendering of display math in lists.+      In 1.11 and 1.11.1, display math in lists rendered as a new list+      item.  Now it always appears centered, just as outside of lists,+      and in proper display math style, no matter how far indented the+      containing list item is (#784).+    + Use `w:br` with `w:type` `textWrapping` for linebreaks.+      Previously we used `w:cr` (#873).+    + Use Compact style for Plain block elements, to+      differentiate between tight and loose lists (#775).+    + Ignore most components of `reference.docx`.+      We take the `word/styles.xml`, `docProps/app.xml`,+      `word/theme/theme1.xml`, and `word/fontTable.xml` from+      `reference.docx`, ignoring everything else.  This should help+      with the corruption problems caused when different versions of+      Word resave the reference.docx and reorganize things.+    +  Made `--no-highlight` work properly.++  * EPUB writer++    + Don't add `dc:creator` tags if present in EPUB metadata.+    + Add `id="toc-title"` to `h1` in `nav.xhtml` (#799).+    + Don't put blank title page in reading sequence.+      Set `linear="no"` if no title block.  Addresses #797.+    + Download webtex images and include as data URLs.+      This allows you to use `--webtex` in creating EPUBs.+      Math with `--webtex` is automatically made self-contained.+    + In `data/epub.css`, removed highlighting styles (which+      are no longer needed, since styles are added by the HTML+      writer according to `--highlighting-style`).  Simplified+      margin fields.+    + If resource not found, skip it, as in Docx writer (#916).++  * RTF writer:++    + Properly handle characters above the 0000-FFFF range.+      Uses surrogate pairs.  Thanks to Hiromi Ishii for the patch.+    + Fixed regression with RTF table of contents.+    + Only autolink absolute URIs.  This fixes a regression, #830.++  * Markdown writer:++    + Only autolink absolute URIs.  This fixes a regression, #830.+    + Don't wrap attributes in fenced code blocks.+    + Write full metadata in MMD style title blocks.+    + Put multiple authors on separate lines in pandoc titleblock.+      Also, don't wrap long author entries, as new lines get treated+      as new authors.++  * `Text.Pandoc.Templates`:++    + Fixed bug retrieving default template for markdown variants.+    + Templates can now contain "record lookups" in variables;+      for example, `author.institution` will retrieve the `institution`+      field of the `author` variable.+    + More consistent behavior of `$for$`.  When `foo` is not a list,+      `$for(foo)$...$endfor$` should behave like $if(foo)$...$endif$.+      So if `foo` resolves to "", no output should be produced.+      See pandoc-templates#39.++  * Citation processing improvements (now part of pandoc-citeproc):++    + Fixed `endWithPunct` The new version correctly sees a sentence+      ending in '.)' as ending with punctuation.  This fixes a bug which+      led such sentences to receive an extra period at the end: '.).'.+      Thanks to Steve Petersen for reporting.+    + Don't interfere with Notes that aren't citation notes.+      This fixes a bug in which notes not generated from citations were+      being altered (e.g. first letter capitalized) (#898).+    + Only capitalize footnote citations when they have a prefix.+    + Changes in suffix parsing.  A suffix beginning with a digit gets 'p'+      inserted before it before passing to citeproc-hs, so that bare numbers+      are treated as page numbers by default.  A suffix not beginning with+      punctuation has a space added at the beginning (rather than a comma and+      space, as was done before for not-author-in-text citations).+      The result is that `\citep[23]{item1}` in LaTeX will be interpreted+      properly, with '23' treated as a locator of type 'page'.+    + Many improvements to citation rendering, due to fixes in citeproc-hs+      (thanks to Andrea Rossato).+    + Warnings are issued for undefined citations, which are rendered+      as `???`.+    + Fixed hanging behavior when locale files cannot be found.++  [template changes]++  * DocBook:  Use DocBook 4.5 doctype.++  * Org: '#+TITLE:' is inserted before the title.+    Previously the writer did this.++  * LaTeX:  Changes to make mathfont work with xelatex.+    We need the mathspec library, not just fontspec, for this.+    We also need to set options for setmathfont (#734).++  * LaTeX: Use `tex-ansi` mapping for `monofont`.+    This ensures that straight quotes appear as straight, rather than+    being treated as curly.  See #889.++  * Made `\includegraphics` more flexible in LaTeX template.+    Now it can be used with options, if needed.  Thanks to Bernhard Weichel.++  * LaTeX/Beamer: Added `classoption` variable.+    This is intended for class options like `oneside`; it may+    be repeated with different options.  (Thanks to Oliver Matthews.)++  * Beamer: Added `fonttheme` variable.  (Thanks to Luis Osa.)++  * LaTeX: Added `biblio-style` variable (#920).++  * DZSlides: title attribute on title section.++  * HTML5: add meta tag to allow scaling by user (Erik Evenson)++  [under-the-hood improvements]++  * Markdown reader:Improved strong/emph parsing, using the strategy of+    <https://github.com/jgm/Markdown>.  The new parsing algorithm requires+    no backtracking, and no keeping track of nesting levels.  It will give+    different results in some edge cases, but these should not affect normal+    uses.++  * Added `Text.Pandoc.Compat.Monoid`.+    This allows pandoc to compile with `base` < 4.5, where `Data.Monoid`+    doesn't export `<>`.  Thanks to Dirk Ullirch for the patch.++  * Added `Text.Pandoc.Compat.TagSoupEntity`.+    This allows pandoc to compile with `tagsoup` 0.13.x.+    Thanks to Dirk Ullrich for the patch.++  * Most of `Text.Pandoc.Readers.TeXMath` has been moved to the+    `texmath` module (0.6.4).  (This allows `pandoc-citeproc` to+    handle simple math in bibliography fields.)++  * Added `Text.Pandoc.Writers.Shared` for shared functions used+    only in writers.  `metaToJSON` is used in writers to create a+    JSON object for use in the templates from the pandoc metadata+    and variables.  `getField`, `setField`, and `defField` are+    for working with JSON template contexts.++  * Added `Text.Pandoc.Asciify` utility module.+    This exports functions to create ASCII-only versions of identifiers.++  * `Text.Pandoc.Parsing`++    + Generalized state type on `readWith` (API change).+    + Specialize readWith to `String` input. (API change).+    + In `ParserState`, replace `stateTitle`, `stateAuthors`, `stateDate`+      with `stateMeta` and `stateMeta'`.++  * `Text.Pandoc.UTF8`: use strict bytestrings in reading.  The use of lazy+     bytestrings seemed to cause problems using pandoc on 64-bit Windows+     7/8 (#874).++  * Factored out `registerHeader` from markdown reader, added to+    `Text.Pandoc.Parsing`.++  * Removed `blaze_html_0_5` flag, require `blaze-html` >= 0.5.+    Reason:  < 0.5 does not provide a monoid instance for Attribute,+    which is now needed by the HTML writer (#803).++  * Added `http-conduit` flag, which allows fetching https resources.+    It also brings in a large number of dependencies (`http-conduit`+    and its dependencies), which is why for now it is an optional flag+    (#820).++  * Added CONTRIBUTING.md.++  * Improved INSTALL instructions.++  * `make-windows-installer.bat`: Removed explicit paths for executables.++  * `aeson` is now used instead of `json` for JSON.++  * Set default stack size to 16M.  This is needed for some large+    conversions, esp. if pandoc is compiled with 64-bit ghc.++  * Various small documentation improvements.+    Thanks to achalddave and drothlis for patches.++  * Removed comment that chokes recent versions of CPP (#933).++  * Removed support for GHC version < 7.2, since pandoc-types now+    requires at least GHC 7.2 for GHC generics.++ pandoc (1.11.1)    * Markdown reader:@@ -10,7 +620,7 @@       paragraphs.  The unmatched quotes now get turned into literal       left double quotes. (No `Quoted` inline is generated, however.)       Closes #99 (again).-    +   * HTML writer: Fixed numbering mismatch between TOC and sections.     `--number-offset` now affects TOC numbering as well     as section numbering, as it should have all along.  Closes #789.@@ -45,7 +655,7 @@   * Added `--number-offset` option.  (See README for description.)    * Added `--default-image-extension` option.  (See README for description.)-  +   * `--number-sections` behavior change: headers with class `unnumbered`     will not be numbered. @@ -96,7 +706,7 @@     + Better support for Verbatim and minted environments.  Closes #763.    * Markdown reader:-  +     + `-` in an attribute context = `.unnumbered`.  The point of this       is to provide a way to specify unnumbered headers in non-English       documents.@@ -122,7 +732,7 @@       Closes #723.    * Textile reader:-  +     + Handle attributes on headers.    * LaTeX reader:@@ -155,7 +765,7 @@       `unnumbered` class.    * Textile writer:-  +     + Support header attributes.    * Markdown writer:@@ -169,11 +779,11 @@       use `pandoc -t markdown-citations`.    * RST writer:-  +     + Support `:number-lines:` in code blocks.    * Docx writer:-  +     + Better treatment of display math.  Display math inside a       paragraph is now put in a separate paragraph, so it will render       properly (centered and without extra blank lines around it).@@ -191,7 +801,7 @@       edited.  Closes #414.    * EPUB writer:-  +     + Fix section numbering.  Previously the numbering restarted from 1       in each chapter (with `--number-sections`), though the numbers in       the table of contents were correct.@@ -214,7 +824,7 @@     section number.    * `Text.Pandoc.Pretty`:-  +     + Fixed `chomp` so it works inside `Prefixed` elements.     + Changed `Show` instance so it is better for debugging. @@ -284,7 +894,7 @@     Thanks to Nick Bart for the suggestion of using @{}.    * `Text.Pandoc.Parsing`:-  +     + More efficient version of `anyLine`.     + Type of `macro` has changed; the parser now returns `Blocks`       instead of `Block`.@@ -307,7 +917,7 @@     Thanks to Andrew Lee for pointing out the bug.    * Markdown reader: Fixed regressions in fenced code blocks. Closes #722.-    +     + Tilde code fences can again take a bare language string       (`~~~ haskell`), not just curly-bracketed attributes       (`~~~ {.haskell}`).@@ -338,7 +948,7 @@     `hsb2hs`.    * Changes to `make-windows-installer.bat`.-    +     + Exit batch file if any of the cabal-dev installs fail.     + There's no longer any need to reinstall `highlighting-kate`.     + Don't start with a `cabal update`; leave that to the user.@@ -1090,19 +1700,19 @@     checks for the base version that intelligibly enable encoding/decoding     when needed. Fixes a bug with multilingual filenames when pandoc was     compiled with ghc 7.4 (#540).-    +   * Don't generate an empty H1 after hrule slide breaks.     We now use a slide-level header with contents `[Str "\0"]` to mark     an hrule break.  This avoids creation of an empty H1 in these     contexts.  Closes #484.-    +   * Docbook reader: Added support for "bold" emphasis.  Thanks to mb21.-  +   * In make_osx_package.sh, ensure citeproc-hs is built with the     embed_data_files flag.-    +   * MediaWiki writer: Avoid extra blank lines after sublists (Gavin Beatty).-    +   * ConTeXt writer: Don't escape `&`, `^`, `<`, `>`, `_`,     simplified escapes for `}` and `{` to `\{` and `\}` (Aditya Mahajan). @@ -1113,7 +1723,7 @@    * Added some missing exports and tests to the cabal file     (Alexander V Vershilov).-    +   * Compile with `-rtsopts` and `-threaded` by default.  pandoc (1.9.4.1)@@ -1131,7 +1741,7 @@     + Use microtype if available.    * Biblio:-  +     + Add comma to beginning of bare suffix, e.g. `@item1 [50]`.       Motivation: `@item1 [50]` should be as close as possible to       `[@item1, 50]`.@@ -1435,12 +2045,12 @@ pandoc (1.9.1)    * LaTeX reader:-  +     + Fixed regression in 1.9; properly handle escaped $ in latex math.     + Put LaTeX verse environments in blockquotes.    * Markdown reader:-  +     + Limit nesting of strong/emph.  This avoids exponential lookahead       in parasitic cases, like `a**a*a**a*a**a*a**a*a**a*a**a*a**a*a**`.     + Improved attributes syntax (inn code blocks/spans):@@ -1659,7 +2269,7 @@         </sidebar>      will not be wrapped in `<para>` tags.-  +   * The LaTeX parser has been completely rewritten; it is now much more     accurate, robust, and extensible. However, there are two important     changes in how it treats unknown LaTeX. (1) Previously, unknown@@ -4077,7 +4687,7 @@       HTML reader now uses rawHtmlBlock', which excludes </html> and </body>,       since these are handled in parseHtml.  (Resolves Issue #38.) -    + Fixed bug (emph parser was looking for <IT> tag, not <I>).+    + Fixed bug (emph parser was looking for `<IT>` tag, not `<I>`).      + Don't interpret contents of style tags as markdown.       (Resolves Issue #40.)@@ -4162,15 +4772,15 @@     + readTeXMath is now used for default HTML output in HTML, S5, RTF,       and Docbook, if no other method for displaying math in HTML is       specified.  Enclosing $'s are no longer printed by default.-    + By default, math is put inside <span class="math">. This way it can be+    + By default, math is put inside `<span class="math">`. This way it can be       distinguished from the surrounding text, e.g. put in a different       font.    * New --gladtex and --mimetex options for display of math in HTML: -    + If --gladtex is specified, math is output between <eq> tags, so+    + If --gladtex is specified, math is output between `<eq>` tags, so       it can be processed by gladTeX.-    + If --mimetex is specified, math is put in <img> tags with a link+    + If --mimetex is specified, math is put in `<img>` tags with a link       to the mimetex CGI script (or any other script that takes TeX math       as input and outputs an image).  The URL of the script may be       specified, but defaults to /cgi-bin/mimetex.cgi.@@ -4184,13 +4794,13 @@     + Fixed bug: parser for minimized attributes should not swallow       trailing spaces.     + Simplified HTML attribute parsing.-    + Changed parsing of code blocks in HTML reader:  <code> tag is no-      longer needed. <pre> suffices. All HTML tags in the code block+    + Changed parsing of code blocks in HTML reader:  `<code>` tag is no+      longer needed. `<pre>` suffices. All HTML tags in the code block       (e.g. for syntax highlighting) are skipped, because they are not-      portable to other output formats. A <code>...</code> block not-      surrounded by <pre> now counts as inline HTML, not a code block.+      portable to other output formats. A `<code>...</code>` block not+      surrounded by `<pre>` now counts as inline HTML, not a code block.     + Remove just one leading and one trailing newline from contents of-      <pre>...</pre> in codeBlock parser.+      `<pre>...</pre>` in codeBlock parser.    * Markdown reader: @@ -4512,8 +5122,8 @@       end code block with a nonindented line.)     + Changed definition of 'emph': italics with '_' must not       be followed by an alphanumeric character. This is to help-      prevent interpretation of e.g. [LC_TYPE]: my_type as-      '[LC<em>TYPE]:my</em>type'.+      prevent interpretation of e.g. `[LC_TYPE]: my_type` as+      `[LC<em>TYPE]:my</em>type`.     + Improved Markdown.pl-compatibility in referenceLink: the two parts       of a reference-style link may be separated by one space, but not       more... [a] [link], [not]    [a link].@@ -4521,7 +5131,7 @@       Markdown.pl: the marker for the end of the code section is a clump       of the same number of `'s with which the section began, followed       by a non-` character. So, for example,-         ` h ``` i ` -> <code>h ``` i</code>.+         ` h ``` i ` -> `<code>h ``` i</code>`.     + Split 'title' into 'linkTitle' and 'referenceTitle', since the       rules are slightly different.     + Rewrote 'para' for greater efficiency.@@ -4628,7 +5238,7 @@   [ John MacFarlane ]    * Fixed bugs in HTML reader:-    + Skip material at end *only if* </html> is present (previously,+    + Skip material at end *only if* `</html>` is present (previously,       only part of the document would be parsed if an error was       found; now a proper error message is given).     + Added new constant eitherBlockOrInline with elements that may@@ -4837,9 +5447,9 @@       may cause documents to be parsed differently. Users should take       care in upgrading.     + Changed autoLink parsing to conform better to Markdown.pl's-      behavior. <google.com> is not treated as a link, but-      <http://google.com>, <ftp://google.com>, and <mailto:google@google.com>-      are.+      behavior. `<google.com>` is not treated as a link, but+      `<http://google.com>`, `<ftp://google.com>`, and+      `<mailto:google@google.com>` are.     + Cleaned up handling of embedded quotes in link titles.  Now these are       stored as a '"' character, not as '&quot;'.     + Use lookAhead parser for the 'first pass' (looking for reference keys),@@ -4903,7 +5513,7 @@       been removed, since they are written programatically. This change       introduces a new dependency on the xhtml package.     + Fixed two bugs in email obfuscation involving improper escaping-      of '&' in the <noscript> section and in --strict mode. Resolves+      of '&' in the `<noscript>` section and in `--strict` mode. Resolves       Issue #9.     + Fixed another bug in email obfuscation: If the text to be obfuscated       contains an entity, this needs to be decoded before obfuscation.@@ -4935,8 +5545,8 @@     + Links in markdown output are now printed as inline links by default,       rather than reference links.  A --reference-links option has been added       that forces links to be printed as reference links.  Resolves Issue #4.-    + Use autolinks when possible.  Instead of [site.com](site.com),-      use <site.com>.+    + Use autolinks when possible.  Instead of `[site.com](site.com)`,+      use `<site.com>`.    * LaTeX writer: @@ -5152,7 +5762,7 @@       only non-alphanumeric characters can be escaped.  Strict mode       follows Markdown.pl in only allowing a select group of punctuation       characters to be escaped.-    + Modified HTML reader to skip a newline following a <br> tag.+    + Modified HTML reader to skip a newline following a `<br>` tag.       Otherwise the newline will be treated as a space at the beginning       of the next line. @@ -5182,7 +5792,7 @@   * Moved handling of "smart typography" from the writers to the Markdown     and LaTeX readers.  This allows great simplification of the writers     and more accurate smart quotes, dashes, and ellipses.  DocBook can-    now use '<quote>'.  The '--smart' option now toggles an option in+    now use `<quote>`.  The '--smart' option now toggles an option in     the parser state rather than a writer option.  Several new kinds     of inline elements have been added: Quoted, Ellipses, Apostrophe,     EmDash, EnDash.
− data/default.csl
@@ -1,422 +0,0 @@-<?xml version="1.0" encoding="utf-8"?>-<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="sort-only">-   <info>-      <title>Chicago Manual of Style (Author-Date format)</title>-      <id>http://www.zotero.org/styles/chicago-author-date</id>-      <link href="http://www.zotero.org/styles/chicago-author-date" rel="self"/>-      <author>-         <name>Julian Onions</name>-         <email>julian.onions@gmail.com</email>-      </author>-      <contributor>-         <name>Sebastian Karcher</name>-      </contributor>-      <category citation-format="author-date"/>-      <category field="generic-base"/>-      <updated>2011-11-17T22:01:05+00:00</updated>-      <summary>The author-date variant of the Chicago style</summary>-      <link href="http://www.chicagomanualofstyle.org/tools_citationguide.html" rel="documentation"/>-      <rights>This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/</rights>-   </info>-   <macro name="secondary-contributors">-      <choose>-         <if type="chapter paper-conference" match="none">-            <group delimiter=". ">-               <choose>-                  <if variable="author">-                     <names variable="editor">-                        <label form="verb-short" text-case="capitalize-first" suffix=". " strip-periods="true"/>-                        <name and="text" delimiter=", "/>-                     </names>-                  </if>-               </choose>-               <choose>-                  <if variable="author editor" match="any">-                     <names variable="translator">-                        <label form="verb-short" text-case="capitalize-first" suffix=". " strip-periods="true"/>-                        <name and="text" delimiter=", "/>-                     </names>-                  </if>-               </choose>-            </group>-         </if>-      </choose>-   </macro>-   <macro name="container-contributors">-      <choose>-         <if type="chapter paper-conference" match="any">-            <group prefix="," delimiter=", ">-               <choose>-                  <if variable="author">-                     <names variable="editor">-                        <label form="verb-short" prefix=" " text-case="lowercase" suffix=". " strip-periods="true"/>-                        <name and="text" delimiter=", "/>-                     </names>-                     <choose>-                        <if variable="container-author">-                           <group>-                              <names variable="container-author">-                                 <label form="verb-short" prefix=" " text-case="lowercase" suffix=" " strip-periods="true"/>-                                 <name and="text" delimiter=", "/>-                              </names>-                           </group>-                        </if>-                     </choose>-                  </if>-               </choose>-               <choose>-                  <if variable="author editor" match="any">-                     <names variable="translator">-                        <label form="verb-short" prefix=" " text-case="lowercase" suffix=". " strip-periods="true"/>-                        <name and="text" delimiter=", "/>-                     </names>-                  </if>-               </choose>-            </group>-         </if>-      </choose>-   </macro>-   <macro name="anon">-      <text term="anonymous" form="short" text-case="capitalize-first" suffix="." strip-periods="true"/>-   </macro>-   <macro name="editor">-      <names variable="editor">-         <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>-         <label form="short" prefix=", " suffix="." strip-periods="true"/>-      </names>-   </macro>-   <macro name="translator">-      <names variable="translator">-         <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>-         <label form="verb-short" prefix=", " suffix="." strip-periods="true"/>-      </names>-   </macro>-   <macro name="recipient">-      <choose>-         <if type="personal_communication">-            <choose>-               <if variable="genre">-                  <text variable="genre" text-case="capitalize-first"/>-               </if>-               <else>-                  <text term="letter" text-case="capitalize-first"/>-               </else>-            </choose>-         </if>-      </choose>-      <names variable="recipient" delimiter=", ">-         <label form="verb" prefix=" " text-case="lowercase" suffix=" "/>-         <name and="text" delimiter=", "/>-      </names>-   </macro>-   <macro name="contributors">-      <names variable="author">-         <name and="text" name-as-sort-order="first" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>-         <label form="verb-short" prefix=", " suffix="." text-case="lowercase" strip-periods="true"/>-         <substitute>-            <text macro="editor"/>-            <text macro="translator"/>-            <text macro="anon"/>-         </substitute>-      </names>-      <text macro="recipient"/>-   </macro>-   <macro name="contributors-short">-      <names variable="author">-         <name form="short" and="text" delimiter=", " initialize-with=". "/>-         <substitute>-            <names variable="editor"/>-            <names variable="translator"/>-            <text macro="anon"/>-         </substitute>-      </names>-   </macro>-   <macro name="interviewer">-      <names variable="interviewer" delimiter=", ">-         <label form="verb" prefix=" " text-case="capitalize-first" suffix=" "/>-         <name and="text" delimiter=", "/>-      </names>-   </macro>-   <macro name="archive">-      <group delimiter=". ">-         <text variable="archive_location" text-case="capitalize-first"/>-         <text variable="archive"/>-         <text variable="archive-place"/>-      </group>-   </macro>-   <macro name="access">-      <group delimiter=". ">-         <choose>-            <if type="graphic report" match="any">-               <text macro="archive"/>-            </if>-            <else-if type="bill book graphic legal_case motion_picture report song article-magazine article-newspaper thesis chapter paper-conference" match="none">-               <text macro="archive"/>-            </else-if>-         </choose>-         <text variable="DOI" prefix="doi:"/>-         <choose>-            <if type="legal_case" match="none">-               <text variable="URL"/>-            </if>-         </choose>-      </group>-   </macro>-   <macro name="title">-      <choose>-         <if variable="title" match="none">-            <choose>-               <if type="personal_communication" match="none">-                  <text variable="genre" text-case="capitalize-first"/>-               </if>-            </choose>-         </if>-         <else-if type="bill book graphic legal_case motion_picture report song" match="any">-            <text variable="title" font-style="italic"/>-         </else-if>-	 <else>-            <text variable="title" quotes="true"/>-         </else>-      </choose>-   </macro>-   <macro name="edition">-      <choose>-         <if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any">-            <choose>-               <if is-numeric="edition">-                  <group delimiter=" ">-                     <number variable="edition" form="ordinal"/>-                     <text term="edition" form="short" suffix="." strip-periods="true"/>-                  </group>-               </if>-               <else>-                  <text variable="edition" suffix="."/>-               </else>-            </choose>-         </if>-      </choose>-   </macro>-   <macro name="locators">-      <choose>-         <if type="article-journal">-            <text variable="volume" prefix=" "/>-            <text variable="issue" prefix=" (" suffix=")"/>-         </if>-         <else-if type="legal_case">-            <text variable="volume" prefix=", "/>-            <text variable="container-title" prefix=" "/>-            <text variable="page" prefix=" "/>-         </else-if>-         <else-if type="bill book graphic legal_case motion_picture report song" match="any">-            <group prefix=". " delimiter=". ">-               <group>-                  <text term="volume" form="short" text-case="capitalize-first" suffix=". " strip-periods="true"/>-                  <number variable="volume" form="numeric"/>-               </group>-               <group>-                  <number variable="number-of-volumes" form="numeric"/>-                  <text term="volume" form="short" prefix=" " suffix="." plural="true" strip-periods="true"/>-               </group>-            </group>-         </else-if>-         <else-if type="chapter paper-conference" match="any">-            <choose>-               <if variable="page" match="none">-                  <group prefix=". ">-                     <text term="volume" form="short" text-case="capitalize-first" suffix=". " strip-periods="true"/>-                     <number variable="volume" form="numeric"/>-                  </group>-               </if>-            </choose>-         </else-if>-      </choose>-   </macro>-   <macro name="locators-chapter">-      <choose>-         <if type="chapter paper-conference" match="any">-            <choose>-               <if variable="page">-                  <group prefix=", ">-                     <text variable="volume" suffix=":"/>-                     <text variable="page"/>-                  </group>-               </if>-            </choose>-         </if>-      </choose>-   </macro>-   <macro name="locators-article">-      <choose>-         <if type="article-newspaper">-            <group prefix=", " delimiter=", ">-               <group>-                  <text variable="edition" suffix=" "/>-                  <text term="edition" prefix=" "/>-               </group>-               <group>-                  <text term="section" form="short" suffix=". " strip-periods="true"/>-                  <text variable="section"/>-               </group>-            </group>-         </if>-         <else-if type="article-journal">-            <text variable="page" prefix=": "/>-         </else-if>-      </choose>-   </macro>-   <macro name="point-locators">-      <choose>-         <if variable="locator">-            <choose>-               <if locator="page" match="none">-                  <choose>-                     <if type="bill book graphic legal_case motion_picture report song" match="any">-                        <choose>-                           <if variable="volume">-                              <group>-                                 <text term="volume" form="short" text-case="lowercase" suffix=". " strip-periods="true"/>-                                 <number variable="volume" form="numeric"/>-                                 <label variable="locator" form="short" prefix=", " suffix=" "/>-                              </group>-                           </if>-                           <else>-                              <label variable="locator" form="short" suffix=" "/>-                           </else>-                        </choose>-                     </if>-                  </choose>-               </if>-               <else-if type="bill book graphic legal_case motion_picture report song" match="any">-                  <number variable="volume" form="numeric" suffix=":"/>-               </else-if>-            </choose>-            <text variable="locator"/>-         </if>-      </choose>-   </macro>-   <macro name="container-prefix">-      <text term="in" text-case="capitalize-first"/>-   </macro>-   <macro name="container-title">-      <choose>-         <if type="chapter paper-conference" match="any">-            <text macro="container-prefix" suffix=" "/>-         </if>-      </choose>-      <choose>-         <if type="legal_case" match="none">-            <text variable="container-title" font-style="italic"/>-         </if>-      </choose>-   </macro>-   <macro name="publisher">-      <group delimiter=": ">-         <text variable="publisher-place"/>-         <text variable="publisher"/>-      </group>-   </macro>-   <macro name="date">-      <date variable="issued">-         <date-part name="year"/>-      </date>-   </macro>-   <macro name="day-month">-      <date variable="issued">-         <date-part name="month"/>-         <date-part name="day" prefix=" "/>-      </date>-   </macro>-   <macro name="collection-title">-      <text variable="collection-title"/>-      <text variable="collection-number" prefix=" "/>-   </macro>-   <macro name="event">-      <group>-         <text term="presented at" suffix=" "/>-         <text variable="event"/>-      </group>-   </macro>-   <macro name="description">-      <choose>-         <if type="interview">-            <group delimiter=". ">-               <text macro="interviewer"/>-               <text variable="medium" text-case="capitalize-first"/>-            </group>-         </if>-         <else>-            <text variable="medium" text-case="capitalize-first" prefix=". "/>-         </else>-      </choose>-      <choose>-         <if variable="title" match="none"/>-         <else-if type="thesis"/>-         <else>-            <text variable="genre" text-case="capitalize-first" prefix=". "/>-         </else>-      </choose>-   </macro>-   <macro name="issue">-      <choose>-         <if type="article-journal">-            <text macro="day-month" prefix=" (" suffix=")"/>-         </if>-         <else-if type="legal_case">-            <text variable="authority" prefix=". "/>-         </else-if>-         <else-if type="speech">-            <group prefix=" " delimiter=", ">-               <text macro="event"/>-               <text macro="day-month"/>-               <text variable="event-place"/>-            </group>-         </else-if>-         <else-if type="article-newspaper article-magazine" match="any">-            <text macro="day-month" prefix=", "/>-         </else-if>-         <else>-            <group prefix=". " delimiter=", ">-               <choose>-                  <if type="thesis">-                     <text variable="genre" text-case="capitalize-first"/>-                  </if>-               </choose>-               <text macro="publisher"/>-               </group>-         </else>-      </choose>-   </macro>-   <citation et-al-min="4" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" givenname-disambiguation-rule="primary-name">-      <layout prefix="(" suffix=")" delimiter="; ">-         <group delimiter=", ">-            <group delimiter=" ">-               <text macro="contributors-short"/>-               <text macro="date"/>-            </group>-            <text macro="point-locators"/>-         </group>-      </layout>-   </citation>-   <bibliography hanging-indent="true" et-al-min="11" et-al-use-first="7" subsequent-author-substitute="———" entry-spacing="0">-      <sort>-         <key macro="contributors"/>-         <key variable="issued"/>-      </sort>-      <layout suffix=".">-         <text macro="contributors" suffix=". "/>-         <text macro="date" suffix=". "/>-         <text macro="title"/>-         <text macro="description"/>-         <text macro="secondary-contributors" prefix=". "/>-         <text macro="container-title" prefix=". "/>-         <text macro="container-contributors"/>-         <text macro="locators-chapter"/>-         <text macro="edition" prefix=". "/>-         <text macro="locators"/>-         <text macro="collection-title" prefix=". "/>-         <text macro="issue"/>-         <text macro="locators-article"/>-         <text macro="access" prefix=". "/>-      </layout>-   </bibliography>-</style>
data/epub.css view
@@ -1,5 +1,5 @@ /* This defines styles and classes used in the book */-body { margin-left: 5%; margin-right: 5%; margin-top: 5%; margin-bottom: 5%; text-align: justify; font-size: medium; }+body { margin: 5%; text-align: justify; font-size: medium; } code { font-family: monospace; } h1 { text-align: left; } h2 { text-align: left; }@@ -12,22 +12,3 @@ h3.date { } ol.toc { padding: 0; margin-left: 1em; } ol.toc li { list-style-type: none; margin: 0; padding: 0; }-/* For source-code highlighting */-table.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode, table.sourceCode pre-   { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; }-td.lineNumbers { border-right: 1px solid #AAAAAA; text-align: right; color: #AAAAAA; padding-right: 5px; padding-left: 5px; }-td.sourceCode { padding-left: 5px; }-pre.sourceCode { }-code.sourceCode span.kw { color: #007020; font-weight: bold; }-code.sourceCode span.dt { color: #902000; }-code.sourceCode span.dv { color: #40a070; }-code.sourceCode span.bn { color: #40a070; }-code.sourceCode span.fl { color: #40a070; }-code.sourceCode span.ch { color: #4070a0; }-code.sourceCode span.st { color: #4070a0; }-code.sourceCode span.co { color: #60a0b0; font-style: italic; }-code.sourceCode span.ot { color: #007020; }-code.sourceCode span.al { color: red; font-weight: bold; }-code.sourceCode span.fu { color: #06287e; }-code.sourceCode span.re { }-code.sourceCode span.er { color: red; font-weight: bold; }
data/reference.docx view

binary file changed (9757 → 9782 bytes)

data/reference.odt view

binary file changed (7058 → 10595 bytes)

+ data/sample.lua view
@@ -0,0 +1,320 @@+-- This is a sample custom writer for pandoc.  It produces output+-- that is very similar to that of pandoc's HTML writer.+-- There is one new feature: code blocks marked with class 'dot'+-- are piped through graphviz and images are included in the HTML+-- output using 'data:' URLs.+--+-- Invoke with: pandoc -t sample.lua+--+-- Note:  you need not have lua installed on your system to use this+-- custom writer.  However, if you do have lua installed, you can+-- use it to test changes to the script.  'lua sample.lua' will+-- produce informative error messages if your code contains+-- syntax errors.++-- Character escaping+local function escape(s, in_attribute)+  return s:gsub("[<>&\"']",+    function(x)+      if x == '<' then+        return '&lt;'+      elseif x == '>' then+        return '&gt;'+      elseif x == '&' then+        return '&amp;'+      elseif x == '"' then+        return '&quot;'+      elseif x == "'" then+        return '&#39;'+      else+        return x+      end+    end)+end++-- Helper function to convert an attributes table into+-- a string that can be put into HTML tags.+local function attributes(attr)+  local attr_table = {}+  for x,y in pairs(attr) do+    if y and y ~= "" then+      table.insert(attr_table, ' ' .. x .. '="' .. escape(y,true) .. '"')+    end+  end+  return table.concat(attr_table)+end++-- Run cmd on a temporary file containing inp and return result.+local function pipe(cmd, inp)+  local tmp = os.tmpname()+  local tmph = io.open(tmp, "w")+  tmph:write(inp)+  tmph:close()+  local outh = io.popen(cmd .. " " .. tmp,"r")+  local result = outh:read("*all")+  outh:close()+  os.remove(tmp)+  return result+end++-- Table to store footnotes, so they can be included at the end.+local notes = {}++-- Blocksep is used to separate block elements.+function Blocksep()+  return "\n\n"+end++-- This function is called once for the whole document. Parameters:+-- body is a string, metadata is a table, variables is a table.+-- One could use some kind of templating+-- system here; this just gives you a simple standalone HTML file.+function Doc(body, metadata, variables)+  local buffer = {}+  local function add(s)+    table.insert(buffer, s)+  end+  add('<!DOCTYPE html>')+  add('<html>')+  add('<head>')+  add('<title>' .. (metadata['title'] or '') .. '</title>')+  add('</head>')+  add('<body>')+  if metadata['title'] and metadata['title'] ~= "" then+    add('<h1 class="title">' .. metadata['title'] .. '</h1>')+  end+  for _, author in pairs(metadata['author'] or {}) do+    add('<h2 class="author">' .. author .. '</h2>')+  end+  if metadata['date'] and metadata['date'] ~= "" then+    add('<h3 class="date">' .. metadata.date .. '</h3>')+  end+  add(body)+  if #notes > 0 then+    add('<ol class="footnotes">')+    for _,note in pairs(notes) do+      add(note)+    end+    add('</ol>')+  end+  add('</body>')+  add('</html>')+  return table.concat(buffer,'\n')+end++-- The functions that follow render corresponding pandoc elements.+-- s is always a string, attr is always a table of attributes, and+-- items is always an array of strings (the items in a list).+-- Comments indicate the types of other variables.++function Str(s)+  return escape(s)+end++function Space()+  return " "+end++function LineBreak()+  return "<br/>"+end++function Emph(s)+  return "<em>" .. s .. "</em>"+end++function Strong(s)+  return "<strong>" .. s .. "</strong>"+end++function Subscript(s)+  return "<sub>" .. s .. "</sub>"+end++function Superscript(s)+  return "<sup>" .. s .. "</sup>"+end++function SmallCaps(s)+  return '<span style="font-variant: small-caps;">' .. s .. '</span>'+end++function Strikeout(s)+  return '<del>' .. s .. '</del>'+end++function Link(s, src, tit)+  return "<a href='" .. escape(src,true) .. "' title='" ..+         escape(tit,true) .. "'>" .. s .. "</a>"+end++function Image(s, src, tit)+  return "<img src='" .. escape(src,true) .. "' title='" ..+         escape(tit,true) .. "'/>"+end++function Code(s, attr)+  return "<code" .. attributes(attr) .. ">" .. escape(s) .. "</code>"+end++function InlineMath(s)+  return "\\(" .. escape(s) .. "\\)"+end++function DisplayMath(s)+  return "\\[" .. escape(s) .. "\\]"+end++function Note(s)+  local num = #notes + 1+  -- insert the back reference right before the final closing tag.+  s = string.gsub(s,+          '(.*)</', '%1 <a href="#fnref' .. num ..  '">&#8617;</a></')+  -- add a list item with the note to the note table.+  table.insert(notes, '<li id="fn' .. num .. '">' .. s .. '</li>')+  -- return the footnote reference, linked to the note.+  return '<a id="fnref' .. num .. '" href="#fn' .. num ..+            '"><sup>' .. num .. '</sup></a>'+end++function Span(s, attr)+  return "<span" .. attributes(attr) .. ">" .. s .. "</span>"+end++function Plain(s)+  return s+end++function Para(s)+  return "<p>" .. s .. "</p>"+end++-- lev is an integer, the header level.+function Header(lev, s, attr)+  return "<h" .. lev .. attributes(attr) ..  ">" .. s .. "</h" .. lev .. ">"+end++function BlockQuote(s)+  return "<blockquote>\n" .. s .. "\n</blockquote>"+end++function HorizontalRule()+  return "<hr/>"+end++function CodeBlock(s, attr)+  -- If code block has class 'dot', pipe the contents through dot+  -- and base64, and include the base64-encoded png as a data: URL.+  if attr.class and string.match(' ' .. attr.class .. ' ',' dot ') then+    local png = pipe("base64", pipe("dot -Tpng", s))+    return '<img src="data:image/png;base64,' .. png .. '"/>'+  -- otherwise treat as code (one could pipe through a highlighter)+  else+    return "<pre><code" .. attributes(attr) .. ">" .. escape(s) ..+           "</code></pre>"+  end+end++function BulletList(items)+  local buffer = {}+  for _, item in pairs(items) do+    table.insert(buffer, "<li>" .. item .. "</li>")+  end+  return "<ul>\n" .. table.concat(buffer, "\n") .. "\n</ul>"+end++function OrderedList(items)+  local buffer = {}+  for _, item in pairs(items) do+    table.insert(buffer, "<li>" .. item .. "</li>")+  end+  return "<ol>\n" .. table.concat(buffer, "\n") .. "\n</ol>"+end++-- Revisit association list STackValue instance.+function DefinitionList(items)+  local buffer = {}+  for _,item in pairs(items) do+    for k, v in pairs(item) do+      table.insert(buffer,"<dt>" .. k .. "</dt>\n<dd>" ..+                        table.concat(v,"</dd>\n<dd>") .. "</dd>")+    end+  end+  return "<dl>\n" .. table.concat(buffer, "\n") .. "\n</dl>"+end++-- Convert pandoc alignment to something HTML can use.+-- align is AlignLeft, AlignRight, AlignCenter, or AlignDefault.+function html_align(align)+  if align == 'AlignLeft' then+    return 'left'+  elseif align == 'AlignRight' then+    return 'right'+  elseif align == 'AlignCenter' then+    return 'center'+  else+    return 'left'+  end+end++-- Caption is a string, aligns is an array of strings,+-- widths is an array of floats, headers is an array of+-- strings, rows is an array of arrays of strings.+function Table(caption, aligns, widths, headers, rows)+  local buffer = {}+  local function add(s)+    table.insert(buffer, s)+  end+  add("<table>")+  if caption ~= "" then+    add("<caption>" .. caption .. "</caption>")+  end+  if widths and widths[1] ~= 0 then+    for _, w in pairs(widths) do+      add('<col width="' .. string.format("%d%%", w * 100) .. '" />')+    end+  end+  local header_row = {}+  local empty_header = true+  for i, h in pairs(headers) do+    local align = html_align(aligns[i])+    table.insert(header_row,'<th align="' .. align .. '">' .. h .. '</th>')+    empty_header = empty_header and h == ""+  end+  if empty_header then+    head = ""+  else+    add('<tr class="header">')+    for _,h in pairs(header_row) do+      add(h)+    end+    add('</tr>')+  end+  local class = "even"+  for _, row in pairs(rows) do+    class = (class == "even" and "odd") or "even"+    add('<tr class="' .. class .. '">')+    for i,c in pairs(row) do+      add('<td align="' .. html_align(aligns[i]) .. '">' .. c .. '</td>')+    end+    add('</tr>')+  end+  add('</table')+  return table.concat(buffer,'\n')+end++function Div(s, attr)+  return "<div" .. attributes(attr) .. ">\n" .. s .. "</div>"+end++-- The following code will produce runtime warnings when you haven't defined+-- all of the functions you need for the custom writer, so it's useful+-- to include when you're working on a writer.+local meta = {}+meta.__index =+  function(_, key)+    io.stderr:write(string.format("WARNING: Undefined function '%s'\n",key))+    return function() return "" end+  end+setmetatable(_G, meta)+
+ data/slidy/scripts/slidy.js view
@@ -0,0 +1,3016 @@+/* slidy.js++   Copyright (c) 2005-2011 W3C (MIT, ERCIM, Keio), All Rights Reserved.+   W3C liability, trademark, document use and software licensing+   rules apply, see:++   http://www.w3.org/Consortium/Legal/copyright-documents+   http://www.w3.org/Consortium/Legal/copyright-software++   Defines single name "w3c_slidy" in global namespace+   Adds event handlers without trampling on any others+*/++// the slidy object implementation+var w3c_slidy = {+  // classify which kind of browser we're running under+  ns_pos: (typeof window.pageYOffset!='undefined'),+  khtml: ((navigator.userAgent).indexOf("KHTML") >= 0 ? true : false),+  opera: ((navigator.userAgent).indexOf("Opera") >= 0 ? true : false),+  ipad: ((navigator.userAgent).indexOf("iPad") >= 0 ? true : false),+  iphone: ((navigator.userAgent).indexOf("iPhone") >= 0 ? true : false),+  android: ((navigator.userAgent).indexOf("Android") >= 0 ? true : false),+  ie: (typeof document.all != "undefined" && !this.opera),+  ie6: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 6") != -1),+  ie7: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 7") != -1),+  ie8: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 8") != -1),+  ie9: (!this.ns_pos && navigator.userAgent.indexOf("MSIE 9") != -1),++  // data for swipe and double tap detection on touch screens+  last_tap: 0,+  prev_tap: 0,+  start_x: 0,+  start_y: 0,+  delta_x: 0,+  delta_y: 0,++  // are we running as XHTML? (doesn't work on Opera)+  is_xhtml: /xml/.test(document.contentType),++  slide_number: 0, // integer slide count: 0, 1, 2, ...+  slide_number_element: null, // element containing slide number+  slides: [], // set to array of slide div's+  notes: [], // set to array of handout div's+  backgrounds: [], // set to array of background div's+  toolbar: null, // element containing toolbar+  title: null, // document title+  last_shown: null, // last incrementally shown item+  eos: null,  // span element for end of slide indicator+  toc: null, // table of contents+  outline: null, // outline element with the focus+  selected_text_len: 0, // length of drag selection on document+  view_all: 0,  // 1 to view all slides + handouts+  want_toolbar: true,  // user preference to show/hide toolbar+  mouse_click_enabled: true, // enables left click for next slide+  scroll_hack: 0, // IE work around for position: fixed+  disable_slide_click: false,  // used by clicked anchors++  lang: "en", // updated to language specified by html file++  help_anchor: null, // used for keyboard focus hack in showToolbar()+  help_page: "http://www.w3.org/Talks/Tools/Slidy2/help/help.html",+  help_text: "Navigate with mouse click, space bar, Cursor Left/Right, " ++             "or Pg Up and Pg Dn. Use S and B to change font size.",++  size_index: 0,+  size_adjustment: 0,+  sizes:  new Array("10pt", "12pt", "14pt", "16pt", "18pt", "20pt",+                    "22pt", "24pt", "26pt", "28pt", "30pt", "32pt"),++  // needed for efficient resizing+  last_width: 0,+  last_height: 0,+++  // Needed for cross browser support for relative width/height on+  // object elements. The work around is to save width/height attributes+  // and then to recompute absolute width/height dimensions on resizing+   objects: [],++  // attach initialiation event handlers+  set_up: function () {+    var init = function() { w3c_slidy.init(); };+    if (typeof window.addEventListener != "undefined")+      window.addEventListener("load", init, false);+    else+      window.attachEvent("onload", init);+  },++  hide_slides: function () {+    if (document.body && !w3c_slidy.initialized)+      document.body.style.visibility = "hidden";+    else+      setTimeout(w3c_slidy.hide_slides, 50);+  },++  // hack to persuade IE to compute correct document height+  // as needed for simulating fixed positioning of toolbar+  ie_hack: function () {+    window.resizeBy(0,-1);+    window.resizeBy(0, 1);+  },++  init: function () {+    //alert("slidy starting test 10");+    document.body.style.visibility = "visible";+    this.init_localization();+    this.add_toolbar();+    this.wrap_implicit_slides();+    this.collect_slides();+    this.collect_notes();+    this.collect_backgrounds();+    this.objects = document.body.getElementsByTagName("object");+    this.patch_anchors();+    this.slide_number = this.find_slide_number(location.href);+    window.offscreenbuffering = true;+    this.size_adjustment = this.find_size_adjust();+    this.time_left = this.find_duration();+    this.hide_image_toolbar();  // suppress IE image toolbar popup+    this.init_outliner();  // activate fold/unfold support+    this.title = document.title;+    this.keyboardless = (this.ipad||this.iphone||this.android);++    if (this.keyboardless)+    {+      w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden")+      this.want_toolbar = 0;+    }++    // work around for opera bug+    this.is_xhtml = (document.body.tagName == "BODY" ? false : true);++    if (this.slides.length > 0)+    {+      var slide = this.slides[this.slide_number];+   +      if (this.slide_number > 0)+      {+        this.set_visibility_all_incremental("visible");+        this.last_shown = this.previous_incremental_item(null);+        this.set_eos_status(true);+      }+      else+      {+        this.last_shown = null;+        this.set_visibility_all_incremental("hidden");+        this.set_eos_status(!this.next_incremental_item(this.last_shown));+      }++      this.set_location();+      this.add_class(this.slides[0], "first-slide");+      w3c_slidy.show_slide(slide);+    }++    this.toc = this.table_of_contents();++    this.add_initial_prompt();++    // bind event handlers without interfering with custom page scripts+    // Tap events behave too weirdly to support clicks reliably on+    // iPhone and iPad, so exclude these from click handler++    if (!this.keyboardless)+    {+      this.add_listener(document.body, "click", this.mouse_button_click);+      this.add_listener(document.body, "mousedown", this.mouse_button_down);+    }++    this.add_listener(document, "keydown", this.key_down);+    this.add_listener(document, "keypress", this.key_press);+    this.add_listener(window, "resize", this.resized);+    this.add_listener(window, "scroll", this.scrolled);+    this.add_listener(window, "unload", this.unloaded);++    //this.add_listener(document.body, "touchstart", this.touchstart);+    //this.add_listener(document.body, "touchmove", this.touchmove);+    //this.add_listener(document.body, "touchend", this.touchend);++    this.add_listener(document, "gesturechange", function ()+    {+      return false;+    });++    this.attach_touch_handers(this.slides);++    // this seems to be a debugging hack+    //if (!document.body.onclick)+    //  document.body.onclick = function () { };++    this.single_slide_view();++    //this.set_location();++    this.resized();++    if (this.ie7)+      setTimeout(w3c_slidy.ie_hack, 100);++    this.show_toolbar();++    // for back button detection+    setInterval(function () { w3c_slidy.check_location(); }, 200);+    w3c_slidy.initialized = true;+  },++  // create div element with links to each slide+  table_of_contents: function () {+    var toc = this.create_element("div");+    this.add_class(toc, "slidy_toc hidden");+    //toc.setAttribute("tabindex", "0");++    var heading = this.create_element("div");+    this.add_class(heading, "toc-heading");+    heading.innerHTML = this.localize("Table of Contents");++    toc.appendChild(heading);+    var previous = null;++    for (var i = 0; i < this.slides.length; ++i)+    {+      var title = this.has_class(this.slides[i], "title");+      var num = document.createTextNode((i + 1) + ". ");++      toc.appendChild(num);++      var a = this.create_element("a");+      a.setAttribute("href", "#(" + (i+1) + ")");++      if (title)+        this.add_class(a, "titleslide");++      var name = document.createTextNode(this.slide_name(i));+      a.appendChild(name);+      a.onclick = w3c_slidy.toc_click;+      a.onkeydown = w3c_slidy.toc_key_down;+      a.previous = previous;++      if (previous)+        previous.next = a;++      toc.appendChild(a);++      if (i == 0)+        toc.first = a;++      if (i < this.slides.length - 1)+      {+        var br = this.create_element("br");+        toc.appendChild(br);+      }++      previous = a;+    }++    toc.focus = function () {+      if (this.first)+        this.first.focus();+    }++    toc.onmouseup = w3c_slidy.mouse_button_up;++    toc.onclick = function (e) {+      e||(e=window.event);++      if (w3c_slidy.selected_text_len <= 0)+         w3c_slidy.hide_table_of_contents(true);++      w3c_slidy.stop_propagation(e);+    +      if (e.cancel != undefined)+        e.cancel = true;+      +      if (e.returnValue != undefined)+        e.returnValue = false;+      +      return false;+    };++    document.body.insertBefore(toc, document.body.firstChild);+    return toc;+  },++  is_shown_toc: function () {+    return !w3c_slidy.has_class(w3c_slidy.toc, "hidden");+  },++  show_table_of_contents: function () {+    w3c_slidy.remove_class(w3c_slidy.toc, "hidden");+    var toc = w3c_slidy.toc;+    toc.focus();++    if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0)+      setTimeout(w3c_slidy.ie_hack, 100);+  },++  hide_table_of_contents: function (focus) {+    w3c_slidy.add_class(w3c_slidy.toc, "hidden");++    if (focus && !w3c_slidy.opera &&+        !w3c_slidy.has_class(w3c_slidy.toc, "hidden"))+      w3c_slidy.help_anchor.focus();+  },++  toggle_table_of_contents: function () {+    if (w3c_slidy.is_shown_toc())+      w3c_slidy.hide_table_of_contents(true);+    else+      w3c_slidy.show_table_of_contents();+  },++  // called on clicking toc entry+  toc_click: function (e) {+    if (!e)+      e = window.event;++    var target = w3c_slidy.get_target(e);++    if (target && target.nodeType == 1)+    {+      var uri = target.getAttribute("href");++      if (uri)+      {+        //alert("going to " + uri);+        var slide = w3c_slidy.slides[w3c_slidy.slide_number];+        w3c_slidy.hide_slide(slide);+        w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);+        slide = w3c_slidy.slides[w3c_slidy.slide_number];+        w3c_slidy.last_shown = null;+        w3c_slidy.set_location();+        w3c_slidy.set_visibility_all_incremental("hidden");+        w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));+        w3c_slidy.show_slide(slide);+        //target.focus();++        try+        {+          if (!w3c_slidy.opera)+            w3c_slidy.help_anchor.focus();+        }+        catch (e)+        {+        }+      }+    }++    w3c_slidy.hide_table_of_contents(true);+    if (w3c_slidy.ie7) w3c_slidy.ie_hack();+    w3c_slidy.stop_propagation(e);+    return w3c_slidy.cancel(e);+  },++  // called onkeydown for toc entry+  toc_key_down: function (event) {+    var key;++    if (!event)+      var event = window.event;++    // kludge around NS/IE differences +    if (window.event)+      key = window.event.keyCode;+    else if (event.which)+      key = event.which;+    else+      return true; // Yikes! unknown browser++    // ignore event if key value is zero+    // as for alt on Opera and Konqueror+    if (!key)+      return true;++    // check for concurrent control/command/alt key+    // but are these only present on mouse events?++    if (event.ctrlKey || event.altKey)+      return true;++    if (key == 13)+    {+      var uri = this.getAttribute("href");++      if (uri)+      {+        //alert("going to " + uri);+       var slide = w3c_slidy.slides[w3c_slidy.slide_number];+        w3c_slidy.hide_slide(slide);+        w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);+        slide = w3c_slidy.slides[w3c_slidy.slide_number];+        w3c_slidy.last_shown = null;+        w3c_slidy.set_location();+        w3c_slidy.set_visibility_all_incremental("hidden");+        w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));+        w3c_slidy.show_slide(slide);+        //target.focus();++        try+        {+          if (!w3c_slidy.opera)+            w3c_slidy.help_anchor.focus();+        }+        catch (e)+        {+        }+      }++      w3c_slidy.hide_table_of_contents(true);++      if (self.ie7)+       w3c_slidy.ie_hack();++      return w3c_slidy.cancel(event);+    }++    if (key == 40 && this.next)+    {+      this.next.focus();+      return w3c_slidy.cancel(event);+    }++    if (key == 38 && this.previous)+    {+      this.previous.focus();+      return w3c_slidy.cancel(event);+    }++    return true;+  },++  touchstart: function (e)+  {+    //e.preventDefault();+    this.prev_tap = this.last_tap;+    this.last_tap = (new Date).getTime();++    var tap_delay = this.last_tap - this.prev_tap;++    if (tap_delay <= 200)+    {+      // double tap+    }++    var touch = e.touches[0];++    this.start_x = touch.pageX;+    this.start_y = touch.pageY;+    this.delta_x = this.delta_y = 0;+  },++  touchmove: function (e)+  {+    //e.preventDefault();+    var touch = e.touches[0];+    this.delta_x = touch.pageX - this.start_x;+    this.delta_y = touch.pageY - this.start_y;+  },++  touchend: function (e)+  {+    //e.preventDefault();+    var delay = (new Date).getTime() - this.last_tap;+    var dx = this.delta_x;+    var dy = this.delta_y;+    var abs_dx = Math.abs(dx);+    var abs_dy = Math.abs(dy);++    if (delay < 500 && (abs_dx > 100 || abs_dy > 100))+    {+      if (abs_dx > 0.5 * abs_dy)+      {+        if (dx < 0)+          w3c_slidy.next_slide(true);+        else+          w3c_slidy.previous_slide(true);+      }+      else if (abs_dy > 2 * abs_dx)+      {+        w3c_slidy.toggle_table_of_contents();+      }+    }+  },++  // ### OBSOLETE ###+  before_print: function () {+    this.show_all_slides();+    this.hide_toolbar();+    alert("before print");+  },++  // ### OBSOLETE ###+  after_print: function () {+    if (!this.view_all)+    {+      this.single_slide_view();+      this.show_toolbar();+    }+    alert("after print");+  },++  // ### OBSOLETE ###+  print_slides: function () {+    this.before_print();+    window.print();+    this.after_print();+  },++  // ### OBSOLETE ?? ###+  toggle_view: function () {+    if (this.view_all)+    {+      this.single_slide_view();+      this.show_toolbar();+      this.view_all = 0;+    }+    else+    {+      this.show_all_slides();+      this.hide_toolbar();+      this.view_all = 1;+    }+  },++  // prepare for printing  ### OBSOLETE ###+  show_all_slides: function () {+    this.remove_class(document.body, "single_slide");+    this.set_visibility_all_incremental("visible");+  },++  // restore after printing  ### OBSOLETE ###+  single_slide_view: function () {+    this.add_class(document.body, "single_slide");+    this.set_visibility_all_incremental("visible");+    this.last_shown = this.previous_incremental_item(null);+  },++  // suppress IE's image toolbar pop up+  hide_image_toolbar: function () {+    if (!this.ns_pos)+    {+      var images = document.getElementsByTagName("IMG");++      for (var i = 0; i < images.length; ++i)+        images[i].setAttribute("galleryimg", "no");+    }+  },++  unloaded: function (e) {+    //alert("unloaded");+  },++  // Safari and Konqueror don't yet support getComputedStyle()+  // and they always reload page when location.href is updated+  is_KHTML: function () {+    var agent = navigator.userAgent;+    return (agent.indexOf("KHTML") >= 0 ? true : false);+  },++  // find slide name from first h1 element+  // default to document title + slide number+  slide_name: function (index) {+    var name = null;+    var slide = this.slides[index];++    var heading = this.find_heading(slide);++    if (heading)+      name = this.extract_text(heading);++    if (!name)+      name = this.title + "(" + (index + 1) + ")";++    name.replace(/\&/g, "&amp;");+    name.replace(/\</g, "&lt;");+    name.replace(/\>/g, "&gt;");++    return name;+  },++  // find first h1 element in DOM tree+  find_heading: function (node) {+    if (!node || node.nodeType != 1)+      return null;++    if (node.nodeName == "H1" || node.nodeName == "h1")+      return node;++    var child = node.firstChild;++    while (child)+    {+      node = this.find_heading(child);++      if (node)+        return node;++      child = child.nextSibling;+    }++    return null;+  },++  // recursively extract text from DOM tree+  extract_text: function (node) {+    if (!node)+      return "";++    // text nodes+    if (node.nodeType == 3)+      return node.nodeValue;++    // elements+    if (node.nodeType == 1)+    {+      node = node.firstChild;+      var text = "";++      while (node)+      {+        text = text + this.extract_text(node);+        node = node.nextSibling;+      }++      return text;+    }++    return "";+  },++  // find copyright text from meta element+  find_copyright: function () {+    var name, content;+    var meta = document.getElementsByTagName("meta");++    for (var i = 0; i < meta.length; ++i)+    {+      name = meta[i].getAttribute("name");+      content = meta[i].getAttribute("content");++      if (name == "copyright")+        return content;+    }++    return null;+  },++  find_size_adjust: function () {+    var name, content, offset;+    var meta = document.getElementsByTagName("meta");++    for (var i = 0; i < meta.length; ++i)+    {+      name = meta[i].getAttribute("name");+      content = meta[i].getAttribute("content");++      if (name == "font-size-adjustment")+        return 1 * content;+    }++    return 1;+  },++  // <meta name="duration" content="20" />  for 20 minutes+  find_duration: function () {+    var name, content, offset;+    var meta = document.getElementsByTagName("meta");++    for (var i = 0; i < meta.length; ++i)+    {+      name = meta[i].getAttribute("name");+      content = meta[i].getAttribute("content");++      if (name == "duration")+        return 60000 * content;+    }++    return null;+  },++  replace_by_non_breaking_space: function (str) {+    for (var i = 0; i < str.length; ++i)+      str[i] = 160;+  },++  // ### CHECK ME ### is use of "li" okay for text/html?+  // for XHTML do we also need to specify namespace?+  init_outliner: function () {+    var items = document.getElementsByTagName("li");++    for (var i = 0; i < items.length; ++i)+    {+      var target = items[i];++      if (!this.has_class(target.parentNode, "outline"))+        continue;++      target.onclick = this.outline_click;+/* ### more work needed for IE6+      if (!this.ns_pos)+      {+        target.onmouseover = this.hover_outline;+        target.onmouseout = this.unhover_outline;+      }+*/+      if (this.foldable(target))+      {+        target.foldable = true;+        target.onfocus = function () {w3c_slidy.outline = this;};+        target.onblur = function () {w3c_slidy.outline = null;};++        if (!target.getAttribute("tabindex"))+          target.setAttribute("tabindex", "0");++        if (this.has_class(target, "expand"))+          this.unfold(target);+        else+          this.fold(target);+      }+      else+      {+        this.add_class(target, "nofold");+        target.visible = true;+        target.foldable = false;+      }+    }+  },++  foldable: function (item) {+    if (!item || item.nodeType != 1)+      return false;++    var node = item.firstChild;++    while (node)+    {+      if (node.nodeType == 1 && this.is_block(node))+        return true;++      node = node.nextSibling;+    }++    return false;+  },++  // ### CHECK ME ### switch to add/remove "hidden" class+  fold: function (item) {+    if (item)+    {+      this.remove_class(item, "unfolded");+      this.add_class(item, "folded");+    }++    var node = item ? item.firstChild : null;++    while (node)+    {+      if (node.nodeType == 1 && this.is_block(node)) // element+      {+         w3c_slidy.add_class(node, "hidden");+      }++      node = node.nextSibling;+    }++    item.visible = false;+  },++  // ### CHECK ME ### switch to add/remove "hidden" class+  unfold: function (item) {+    if (item)+    {+      this.add_class(item, "unfolded");+      this.remove_class(item, "folded");+    }++    var node = item ? item.firstChild : null;++    while (node)+    {+      if (node.nodeType == 1 && this.is_block(node)) // element+      {+        w3c_slidy.remove_class(node, "hidden");+      }++      node = node.nextSibling;+    }++    item.visible = true;+  },++  outline_click: function (e) {+    if (!e)+      e = window.event;++    var rightclick = false;+    var target = w3c_slidy.get_target(e);++    while (target && target.visible == undefined)+      target = target.parentNode;++    if (!target)+      return true;++    if (e.which)+      rightclick = (e.which == 3);+    else if (e.button)+      rightclick = (e.button == 2);++    if (!rightclick && target.visible != undefined)+    {+      if (target.foldable)+      {+        if (target.visible)+          w3c_slidy.fold(target);+        else+          w3c_slidy.unfold(target);+      }++      w3c_slidy.stop_propagation(e);+      e.cancel = true;+      e.returnValue = false;+    }++    return false;+  },++  add_initial_prompt: function () {+    var prompt = this.create_element("div");+    prompt.setAttribute("class", "initial_prompt");++    var p1 = this.create_element("p");+    prompt.appendChild(p1);+    p1.setAttribute("class", "help");++    if (this.keyboardless)+      p1.innerHTML = "swipe left to move to next slide";+    else+      p1.innerHTML = "Space, Right Arrow or swipe left to move to " ++                     "next slide, click help below for more details";++    this.add_listener(prompt, "click", function (e) {+      document.body.removeChild(prompt);+      w3c_slidy.stop_propagation(e);+    +      if (e.cancel != undefined)+        e.cancel = true;+      +      if (e.returnValue != undefined)+        e.returnValue = false;+      +      return false;+    });++    document.body.appendChild(prompt);+    this.initial_prompt = prompt;+    setTimeout(function() {document.body.removeChild(prompt);}, 5000);+  },++  add_toolbar: function () {+    var counter, page;++     this.toolbar = this.create_element("div");+     this.toolbar.setAttribute("class", "toolbar");++     // a reasonably behaved browser+     if (this.ns_pos || !this.ie6)+     {+       var right = this.create_element("div");+       right.setAttribute("style", "float: right; text-align: right");++       counter = this.create_element("span")+       counter.innerHTML = this.localize("slide") + " n/m";+       right.appendChild(counter);+       this.toolbar.appendChild(right);++       var left = this.create_element("div");+       left.setAttribute("style", "text-align: left");++       // global end of slide indicator+       this.eos = this.create_element("span");+       this.eos.innerHTML = "* ";+       left.appendChild(this.eos);++       var help = this.create_element("a");+       help.setAttribute("href", this.help_page);+       help.setAttribute("title", this.localize(this.help_text));+       help.innerHTML = this.localize("help?");+       left.appendChild(help);+       this.help_anchor = help;  // save for focus hack++       var gap1 = document.createTextNode(" ");+       left.appendChild(gap1);++       var contents = this.create_element("a");+       contents.setAttribute("href", "javascript:w3c_slidy.toggle_table_of_contents()");+       contents.setAttribute("title", this.localize("table of contents"));+       contents.innerHTML = this.localize("contents?");+       left.appendChild(contents);++       var gap2 = document.createTextNode(" ");+       left.appendChild(gap2);++       var copyright = this.find_copyright();++       if (copyright)+       {+         var span = this.create_element("span");+         span.className = "copyright";+         span.innerHTML = copyright;+         left.appendChild(span);+       }++       this.toolbar.setAttribute("tabindex", "0");+       this.toolbar.appendChild(left);+     }+     else // IE6 so need to work around its poor CSS support+     {+       this.toolbar.style.position = (this.ie7 ? "fixed" : "absolute");+       this.toolbar.style.zIndex = "200";+       this.toolbar.style.width = "99.9%";+       this.toolbar.style.height = "1.2em";+       this.toolbar.style.top = "auto";+       this.toolbar.style.bottom = "0";+       this.toolbar.style.left = "0";+       this.toolbar.style.right = "0";+       this.toolbar.style.textAlign = "left";+       this.toolbar.style.fontSize = "60%";+       this.toolbar.style.color = "red";+       this.toolbar.borderWidth = 0;+       this.toolbar.className = "toolbar";+       this.toolbar.style.background = "rgb(240,240,240)";++       // would like to have help text left aligned+       // and page counter right aligned, floating+       // div's don't work, so instead use nested+       // absolutely positioned div's.++       var sp = this.create_element("span");+       sp.innerHTML = "&nbsp;&nbsp;*&nbsp;";+       this.toolbar.appendChild(sp);+       this.eos = sp;  // end of slide indicator++       var help = this.create_element("a");+       help.setAttribute("href", this.help_page);+       help.setAttribute("title", this.localize(this.help_text));+       help.innerHTML = this.localize("help?");+       this.toolbar.appendChild(help);+       this.help_anchor = help;  // save for focus hack++       var gap1 = document.createTextNode(" ");+       this.toolbar.appendChild(gap1);++       var contents = this.create_element("a");+       contents.setAttribute("href", "javascript:toggleTableOfContents()");+       contents.setAttribute("title", this.localize("table of contents".localize));+       contents.innerHTML = this.localize("contents?");+       this.toolbar.appendChild(contents);++       var gap2 = document.createTextNode(" ");+       this.toolbar.appendChild(gap2);++       var copyright = this.find_copyright();++       if (copyright)+       {+         var span = this.create_element("span");+         span.innerHTML = copyright;+         span.style.color = "black";+         span.style.marginLeft = "0.5em";+         this.toolbar.appendChild(span);+       }++       counter = this.create_element("div")+       counter.style.position = "absolute";+       counter.style.width = "auto"; //"20%";+       counter.style.height = "1.2em";+       counter.style.top = "auto";+       counter.style.bottom = 0;+       counter.style.right = "0";+       counter.style.textAlign = "right";+       counter.style.color = "red";+       counter.style.background = "rgb(240,240,240)";++       counter.innerHTML = this.localize("slide") + " n/m";+       this.toolbar.appendChild(counter);+     }++     // ensure that click isn't passed through to the page+     this.toolbar.onclick =+         function (e) {+           if (!e)+             e = window.event;++           var target = e.target;++           if (!target && e.srcElement)+             target = e.srcElement;++           // work around Safari bug+           if (target && target.nodeType == 3)+             target = target.parentNode;++           w3c_slidy.stop_propagation(e);++           if (target && target.nodeName.toLowerCase() != "a")+             w3c_slidy.mouse_button_click(e);+         };++     this.slide_number_element = counter;+     this.set_eos_status(false);+     document.body.appendChild(this.toolbar);+  },++  // wysiwyg editors make it hard to use div elements+  // e.g. amaya loses the div when you copy and paste+  // this function wraps div elements around implicit+  // slides which start with an h1 element and continue+  // up to the next heading or div element+  wrap_implicit_slides: function () {+    var i, heading, node, next, div;+    var headings = document.getElementsByTagName("h1");++    if (!headings)+      return;++    for (i = 0; i < headings.length; ++i)+    {+      heading = headings[i];++      if (heading.parentNode != document.body)+        continue;++      node = heading.nextSibling;++      div = document.createElement("div");+      this.add_class(div, "slide");+      document.body.replaceChild(div, heading);+      div.appendChild(heading);++      while (node)+      {+        if (node.nodeType == 1) // an element+        {+           if (node.nodeName == "H1" || node.nodeName == "h1")+             break;++           if (node.nodeName == "DIV" || node.nodeName == "div")+           {+             if (this.has_class(node, "slide"))+               break;++             if (this.has_class(node, "handout"))+               break;+           }+        }++        next = node.nextSibling;+        node = document.body.removeChild(node);+        div.appendChild(node);+        node = next;+      } +    }+  },++  attach_touch_handers: function(slides)+  {+    var i, slide;++    for (i = 0; i < slides.length; ++i)+    {+      slide = slides[i];+      this.add_listener(slide, "touchstart", this.touchstart);+      this.add_listener(slide, "touchmove", this.touchmove);+      this.add_listener(slide, "touchend", this.touchend);+    }+  },++// return new array of all slides+  collect_slides: function () {+    var slides = new Array();+    var divs = document.body.getElementsByTagName("div");++    for (var i = 0; i < divs.length; ++i)+    {+      div = divs.item(i);++      if (this.has_class(div, "slide"))+      {+        // add slide to collection+        slides[slides.length] = div;++        // hide each slide as it is found+        this.add_class(div, "hidden");++        // add dummy <br/> at end for scrolling hack+        var node1 = document.createElement("br");+        div.appendChild(node1);+        var node2 = document.createElement("br");+        div.appendChild(node2);+      }+      else if (this.has_class(div, "background"))+      {  // work around for Firefox SVG reload bug+        // which otherwise replaces 1st SVG graphic with 2nd+        div.style.display = "block";+      }+    }++    this.slides = slides;+  },++  // return new array of all <div class="handout">+  collect_notes: function () {+    var notes = new Array();+    var divs = document.body.getElementsByTagName("div");++    for (var i = 0; i < divs.length; ++i)+    {+      div = divs.item(i);++      if (this.has_class(div, "handout"))+      {+        // add note to collection+        notes[notes.length] = div;++        // and hide it+        this.add_class(div, "hidden");+      }+    }++    this.notes = notes;+  },++  // return new array of all <div class="background">+  // including named backgrounds e.g. class="background titlepage"+  collect_backgrounds: function () {+    var backgrounds = new Array();+    var divs = document.body.getElementsByTagName("div");++    for (var i = 0; i < divs.length; ++i)+    {+      div = divs.item(i);++      if (this.has_class(div, "background"))+      {+        // add background to collection+        backgrounds[backgrounds.length] = div;++        // and hide it+        this.add_class(div, "hidden");+      }+    }++    this.backgrounds = backgrounds;+  },++  // set click handlers on all anchors+  patch_anchors: function () {+    var self = w3c_slidy;+    var handler = function (event) {+      // compare this.href with location.href+      // for link to another slide in this doc++      if (self.page_address(this.href) == self.page_address(location.href))+      {+        // yes, so find new slide number+        var newslidenum = self.find_slide_number(this.href);++        if (newslidenum != self.slide_number)+        {+          var slide = self.slides[self.slide_number];+          self.hide_slide(slide);+          self.slide_number = newslidenum;+          slide = self.slides[self.slide_number];+          self.show_slide(slide);+          self.set_location();+        }+      }+      else+        w3c_slidy.stop_propagation(event);++//      else if (this.target == null)+//        location.href = this.href;++      this.blur();+      self.disable_slide_click = true;+    };++    var anchors = document.body.getElementsByTagName("a");++    for (var i = 0; i < anchors.length; ++i)+    {+      if (window.addEventListener)+        anchors[i].addEventListener("click", handler, false);+      else+        anchors[i].attachEvent("onclick", handler);+    }+  },++  // ### CHECK ME ### see which functions are invoked via setTimeout+  // either directly or indirectly for use of w3c_slidy vs this+  show_slide_number: function () {+    var timer = w3c_slidy.get_timer();+    w3c_slidy.slide_number_element.innerHTML = timer + w3c_slidy.localize("slide") + " " ++           (w3c_slidy.slide_number + 1) + "/" + w3c_slidy.slides.length;+  },++  // every 200mS check if the location has been changed as a+  // result of the user activating the Back button/menu item+  // doesn't work for Opera < 9.5+  check_location: function () {+    var hash = location.hash;++    if (w3c_slidy.slide_number > 0 && (hash == "" || hash == "#"))+      w3c_slidy.goto_slide(0);+    else if (hash.length > 2 && hash != "#("+(w3c_slidy.slide_number+1)+")")+    {+      var num = parseInt(location.hash.substr(2));++      if (!isNaN(num))+        w3c_slidy.goto_slide(num-1);+    }++    if (w3c_slidy.time_left && w3c_slidy.slide_number > 0)+    {+      w3c_slidy.show_slide_number();++      if (w3c_slidy.time_left > 0)+        w3c_slidy.time_left -= 200;+    } +  },++  get_timer: function () {+    var timer = "";+    if (w3c_slidy.time_left)+    {+      var mins, secs;+      secs = Math.floor(w3c_slidy.time_left/1000);+      mins = Math.floor(secs / 60);+      secs = secs % 60;+      timer = (mins ? mins+"m" : "") + secs + "s ";+    }++    return timer;+  },++  // this doesn't push location onto history stack for IE+  // for which a hidden iframe hack is needed: load page into+  // the iframe with script that set's parent's location.hash+  // but that won't work for standalone use unless we can+  // create the page dynamically via a javascript: URL+  // ### use history.pushState if available+  set_location: function () {+     var uri = w3c_slidy.page_address(location.href);+     var hash = "#(" + (w3c_slidy.slide_number+1) + ")";++     if (w3c_slidy.slide_number >= 0)+       uri = uri + hash;++     if (typeof(history.pushState) != "undefined")+     {+       document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";+       history.pushState(0, document.title, hash);+       w3c_slidy.show_slide_number();+       return;+     }++     if (w3c_slidy.ie && (w3c_slidy.ie6 || w3c_slidy.ie7))+       w3c_slidy.push_hash(hash);++     if (uri != location.href) // && !khtml+        location.href = uri;++     if (this.khtml)+        hash = "(" + (w3c_slidy.slide_number+1) + ")";++     if (!this.ie && location.hash != hash && location.hash != "")+       location.hash = hash;++     document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";+     w3c_slidy.show_slide_number();+  },++  page_address: function (uri) {+    var i = uri.indexOf("#");++    if (i < 0)+      i = uri.indexOf("%23");++    // check if anchor is entire page++    if (i < 0)+      return uri;  // yes++    return uri.substr(0, i);+  },++  // only used for IE6 and IE7+  on_frame_loaded: function (hash) {+    location.hash = hash;+    var uri = w3c_slidy.page_address(location.href);+    location.href = uri + hash;+  },++  // history hack with thanks to Bertrand Le Roy+  push_hash: function (hash) {+    if (hash == "") hash = "#(1)";+      window.location.hash = hash;++    var doc = document.getElementById("historyFrame").contentWindow.document;+    doc.open("javascript:'<html></html>'");+    doc.write("<html><head><script type=\"text/javascript\">window.parent.w3c_slidy.on_frame_loaded('"++      (hash) + "');</script></head><body>hello mum</body></html>");+      doc.close();+  },++  // find current slide based upon location+  // first find target anchor and then look+  // for associated div element enclosing it+  // finally map that to slide number+  find_slide_number: function (uri) {+    // first get anchor from page location++    var i = uri.indexOf("#");++    // check if anchor is entire page+    if (i < 0)+      return 0;  // yes++    var anchor = unescape(uri.substr(i+1));++    // now use anchor as XML ID to find target+    var target = document.getElementById(anchor);++    if (!target)+    {+      // does anchor look like "(2)" for slide 2 ??+      // where first slide is (1)+      var re = /\((\d)+\)/;++      if (anchor.match(re))+      {+        var num = parseInt(anchor.substring(1, anchor.length-1));++        if (num > this.slides.length)+          num = 1;++        if (--num < 0)+          num = 0;++        return num;+      }++      // accept [2] for backwards compatibility+      re = /\[(\d)+\]/;++      if (anchor.match(re))+      {+         var num = parseInt(anchor.substring(1, anchor.length-1));++         if (num > this.slides.length)+            num = 1;++         if (--num < 0)+            num = 0;++         return num;+      }++      // oh dear unknown anchor+      return 0;+    }++    // search for enclosing slide++    while (true)+    {+      // browser coerces html elements to uppercase!+      if (target.nodeName.toLowerCase() == "div" &&+            this.has_class(target, "slide"))+      {+        // found the slide element+        break;+      }++      // otherwise try parent element if any++      target = target.parentNode;++      if (!target)+      {+        return 0;   // no luck!+      }+    };++    for (i = 0; i < slides.length; ++i)+    {+      if (slides[i] == target)+        return i;  // success+    }++    // oh dear still no luck+    return 0;+  },++  previous_slide: function (incremental) {+    if (!w3c_slidy.view_all)+    {+      var slide;++      if ((incremental || w3c_slidy.slide_number == 0) && w3c_slidy.last_shown != null)+      {+        w3c_slidy.last_shown = w3c_slidy.hide_previous_item(w3c_slidy.last_shown);+        w3c_slidy.set_eos_status(false);+      }+      else if (w3c_slidy.slide_number > 0)+      {+        slide = w3c_slidy.slides[w3c_slidy.slide_number];+        w3c_slidy.hide_slide(slide);++        w3c_slidy.slide_number = w3c_slidy.slide_number - 1;+        slide = w3c_slidy.slides[w3c_slidy.slide_number];+        w3c_slidy.set_visibility_all_incremental("visible");+        w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);+        w3c_slidy.set_eos_status(true);+        w3c_slidy.show_slide(slide);+      }++      w3c_slidy.set_location();++      if (!w3c_slidy.ns_pos)+        w3c_slidy.refresh_toolbar(200);+    }+  },++  next_slide: function (incremental) {+    if (!w3c_slidy.view_all)+    {+      var slide, last = w3c_slidy.last_shown;++      if (incremental || w3c_slidy.slide_number == w3c_slidy.slides.length - 1)+         w3c_slidy.last_shown = w3c_slidy.reveal_next_item(w3c_slidy.last_shown);++      if ((!incremental || w3c_slidy.last_shown == null) &&+             w3c_slidy.slide_number < w3c_slidy.slides.length - 1)+      {+         slide = w3c_slidy.slides[w3c_slidy.slide_number];+         w3c_slidy.hide_slide(slide);++         w3c_slidy.slide_number = w3c_slidy.slide_number + 1;+         slide = w3c_slidy.slides[w3c_slidy.slide_number];+         w3c_slidy.last_shown = null;+         w3c_slidy.set_visibility_all_incremental("hidden");+         w3c_slidy.show_slide(slide);+      }+      else if (!w3c_slidy.last_shown)+      {+         if (last && incremental)+           w3c_slidy.last_shown = last;+      }++      w3c_slidy.set_location();++      w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));++      if (!w3c_slidy.ns_pos)+         w3c_slidy.refresh_toolbar(200);+     }+  },++  // to first slide with nothing revealed+  // i.e. state at start of presentation+  first_slide: function () {+     if (!w3c_slidy.view_all)+     {+       var slide;++       if (w3c_slidy.slide_number != 0)+       {+         slide = w3c_slidy.slides[w3c_slidy.slide_number];+         w3c_slidy.hide_slide(slide);++         w3c_slidy.slide_number = 0;+         slide = w3c_slidy.slides[w3c_slidy.slide_number];+         w3c_slidy.last_shown = null;+         w3c_slidy.set_visibility_all_incremental("hidden");+         w3c_slidy.show_slide(slide);+       }++       w3c_slidy.set_eos_status(+         !w3c_slidy.next_incremental_item(w3c_slidy.last_shown));+       w3c_slidy.set_location();+     }+  },++  // goto last slide with everything revealed+  // i.e. state at end of presentation+  last_slide: function () {+    if (!w3c_slidy.view_all)+    {+      var slide;++      w3c_slidy.last_shown = null; //revealNextItem(lastShown);++      if (w3c_slidy.last_shown == null &&+          w3c_slidy.slide_number < w3c_slidy.slides.length - 1)+      {+         slide = w3c_slidy.slides[w3c_slidy.slide_number];+         w3c_slidy.hide_slide(slide);+         w3c_slidy.slide_number = w3c_slidy.slides.length - 1;+         slide = w3c_slidy.slides[w3c_slidy.slide_number];+         w3c_slidy.set_visibility_all_incremental("visible");+         w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);++         w3c_slidy.show_slide(slide);+      }+      else+      {+         w3c_slidy.set_visibility_all_incremental("visible");+         w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);+      }++      w3c_slidy.set_eos_status(true);+      w3c_slidy.set_location();+    }+  },+++  // ### check this and consider add/remove class+  set_eos_status: function (state) {+    if (this.eos)+      this.eos.style.color = (state ? "rgb(240,240,240)" : "red");+  },++  // first slide is 0+  goto_slide: function (num) {+    //alert("going to slide " + (num+1));+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];+    w3c_slidy.hide_slide(slide);+    w3c_slidy.slide_number = num;+    slide = w3c_slidy.slides[w3c_slidy.slide_number];+    w3c_slidy.last_shown = null;+    w3c_slidy.set_visibility_all_incremental("hidden");+    w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));+    document.title = w3c_slidy.title + " (" + (w3c_slidy.slide_number+1) + ")";+    w3c_slidy.show_slide(slide);+    w3c_slidy.show_slide_number();+  },+++  show_slide: function (slide) {+    this.sync_background(slide);+    this.remove_class(slide, "hidden");++    // work around IE9 object rendering bug+    setTimeout("window.scrollTo(0,0);", 1);+  },++  hide_slide: function (slide) {+    this.add_class(slide, "hidden");+  },++  // show just the backgrounds pertinent to this slide+  // when slide background-color is transparent+  // this should now work with rgba color values+  sync_background: function (slide) {+    var background;+    var bgColor;++    if (slide.currentStyle)+      bgColor = slide.currentStyle["backgroundColor"];+    else if (document.defaultView)+    {+      var styles = document.defaultView.getComputedStyle(slide,null);++      if (styles)+        bgColor = styles.getPropertyValue("background-color");+      else // broken implementation probably due Safari or Konqueror+      {+        //alert("defective implementation of getComputedStyle()");+        bgColor = "transparent";+      }+    }+    else+      bgColor == "transparent";++    if (bgColor == "transparent" ||+        bgColor.indexOf("rgba") >= 0 ||+        bgColor.indexOf("opacity") >= 0)+    {+      var slideClass = this.get_class_list(slide);++      for (var i = 0; i < this.backgrounds.length; i++)+      {+        background = this.backgrounds[i];++        var bgClass = this.get_class_list(background);++        if (this.matching_background(slideClass, bgClass))+          this.remove_class(background, "hidden");+        else+          this.add_class(background, "hidden");+      }+    }+    else // forcibly hide all backgrounds+      this.hide_backgrounds();+  },++  hide_backgrounds: function () {+    for (var i = 0; i < this.backgrounds.length; i++)+    {+      background = this.backgrounds[i];+      this.add_class(background, "hidden");+    }+  },++  // compare classes for slide and background+  matching_background: function (slideClass, bgClass) {+    var i, count, pattern, result;++    // define pattern as regular expression+    pattern = /\w+/g;++    // check background class names+    result = bgClass.match(pattern);++    for (i = count = 0; i < result.length; i++)+    {+      if (result[i] == "hidden")+        continue;++      if (result[i] == "background")+	continue;++      ++count;+    }++    if (count == 0)  // default match+      return true;++    // check for matches and place result in array+    result = slideClass.match(pattern);++    // now check if desired name is present for background+    for (i = count = 0; i < result.length; i++)+    {+      if (result[i] == "hidden")+        continue;++      if (this.has_token(bgClass, result[i]))+        return true;+    }++    return false;+  },++  resized: function () {+     var width = 0;++     if ( typeof( window.innerWidth ) == 'number' )+       width = window.innerWidth;  // Non IE browser+     else if (document.documentElement && document.documentElement.clientWidth)+       width = document.documentElement.clientWidth;  // IE6+     else if (document.body && document.body.clientWidth)+       width = document.body.clientWidth; // IE4++     var height = 0;++     if ( typeof( window.innerHeight ) == 'number' )+       height = window.innerHeight;  // Non IE browser+     else if (document.documentElement && document.documentElement.clientHeight)+       height = document.documentElement.clientHeight;  // IE6+     else if (document.body && document.body.clientHeight)+       height = document.body.clientHeight; // IE4++     if (height && (width/height > 1.05*1024/768))+     {+       width = height * 1024.0/768;+     }++     // IE fires onresize even when only font size is changed!+     // so we do a check to avoid blocking < and > actions+     if (width != w3c_slidy.last_width || height != w3c_slidy.last_height)+     {+       if (width >= 1100)+         w3c_slidy.size_index = 5;    // 4+       else if (width >= 1000)+         w3c_slidy.size_index = 4;    // 3+       else if (width >= 800)+         w3c_slidy.size_index = 3;    // 2+       else if (width >= 600)+         w3c_slidy.size_index = 2;    // 1+       else if (width)+         w3c_slidy.size_index = 0;++       // add in font size adjustment from meta element e.g.+       // <meta name="font-size-adjustment" content="-2" />+       // useful when slides have too much content ;-)++       if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment &&+             w3c_slidy.size_index + w3c_slidy.size_adjustment < w3c_slidy.sizes.length)+         w3c_slidy.size_index = w3c_slidy.size_index + w3c_slidy.size_adjustment;++       // enables cross browser use of relative width/height+       // on object elements for use with SVG and Flash media+       w3c_slidy.adjust_object_dimensions(width, height);++       if (document.body.style.fontSize != w3c_slidy.sizes[w3c_slidy.size_index])+       {+         document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];+       }++       w3c_slidy.last_width = width;+       w3c_slidy.last_height = height;++       // force reflow to work around Mozilla bug+       if (w3c_slidy.ns_pos)+       {+         var slide = w3c_slidy.slides[w3c_slidy.slide_number];+         w3c_slidy.hide_slide(slide);+         w3c_slidy.show_slide(slide);+       }++       // force correct positioning of toolbar+       w3c_slidy.refresh_toolbar(200);+     }+  },++  scrolled: function () {+    if (w3c_slidy.toolbar && !w3c_slidy.ns_pos && !w3c_slidy.ie7)+    {+      w3c_slidy.hack_offset = w3c_slidy.scroll_x_offset();+      // hide toolbar+      w3c_slidy.toolbar.style.display = "none";++      // make it reappear later+      if (w3c_slidy.scrollhack == 0 && !w3c_slidy.view_all)+      {+        setTimeout(function () {w3c_slidy.show_toolbar(); }, 1000);+        w3c_slidy.scrollhack = 1;+      }+    }+  },++  hide_toolbar: function () {+    w3c_slidy.add_class(w3c_slidy.toolbar, "hidden");+    window.focus();+  },++  // used to ensure IE refreshes toolbar in correct position+  refresh_toolbar: function (interval) {+    if (!w3c_slidy.ns_pos && !w3c_slidy.ie7)+    {+      w3c_slidy.hide_toolbar();+      setTimeout(function () {w3c_slidy.show_toolbar();}, interval);+    }+  },++  // restores toolbar after short delay+  show_toolbar: function () {+    if (w3c_slidy.want_toolbar)+    {+      w3c_slidy.toolbar.style.display = "block";++      if (!w3c_slidy.ns_pos)+      {+        // adjust position to allow for scrolling+        var xoffset = w3c_slidy.scroll_x_offset();+        w3c_slidy.toolbar.style.left = xoffset;+        w3c_slidy.toolbar.style.right = xoffset;++        // determine vertical scroll offset+        //var yoffset = scrollYOffset();++        // bottom is doc height - window height - scroll offset+        //var bottom = documentHeight() - lastHeight - yoffset++        //if (yoffset > 0 || documentHeight() > lastHeight)+        //   bottom += 16;  // allow for height of scrollbar++        w3c_slidy.toolbar.style.bottom = 0; //bottom;+      }++      w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden");+    }++    w3c_slidy.scrollhack = 0;+++    // set the keyboard focus to the help link on the+    // toolbar to ensure that document has the focus+    // IE doesn't always work with window.focus()+    // and this hack has benefit of Enter for help++    try+    {+      if (!w3c_slidy.opera)+        w3c_slidy.help_anchor.focus();+    }+    catch (e)+    {+    }+  },++// invoked via F key+  toggle_toolbar: function () {+    if (!w3c_slidy.view_all)+    {+      if (w3c_slidy.has_class(w3c_slidy.toolbar, "hidden"))+      {+        w3c_slidy.remove_class(w3c_slidy.toolbar, "hidden")+        w3c_slidy.want_toolbar = 1;+      }+      else+      {+        w3c_slidy.add_class(w3c_slidy.toolbar, "hidden")+        w3c_slidy.want_toolbar = 0;+      }+    }+  },++  scroll_x_offset: function () {+    if (window.pageXOffset)+      return self.pageXOffset;++    if (document.documentElement && +             document.documentElement.scrollLeft)+      return document.documentElement.scrollLeft;++    if (document.body)+      return document.body.scrollLeft;++    return 0;+  },++  scroll_y_offset: function () {+    if (window.pageYOffset)+      return self.pageYOffset;++    if (document.documentElement && +             document.documentElement.scrollTop)+      return document.documentElement.scrollTop;++    if (document.body)+      return document.body.scrollTop;++    return 0;+  },++  // looking for a way to determine height of slide content+  // the slide itself is set to the height of the window+  optimize_font_size: function () {+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];++    //var dh = documentHeight(); //getDocHeight(document);+    var dh = slide.scrollHeight;+    var wh = getWindowHeight();+    var u = 100 * dh / wh;++    alert("window utilization = " + u + "% (doc "+      + dh + " win " + wh + ")");+  },++  // from document object+  get_doc_height: function (doc) {+    if (!doc)+      doc = document;++    if (doc && doc.body && doc.body.offsetHeight)+      return doc.body.offsetHeight;  // ns/gecko syntax++    if (doc && doc.body && doc.body.scrollHeight)+      return doc.body.scrollHeight;++    alert("couldn't determine document height");+  },++  get_window_height: function () {+    if ( typeof( window.innerHeight ) == 'number' )+      return window.innerHeight;  // Non IE browser++    if (document.documentElement && document.documentElement.clientHeight)+      return document.documentElement.clientHeight;  // IE6++    if (document.body && document.body.clientHeight)+      return document.body.clientHeight; // IE4+  },++  document_height: function () {+    var sh, oh;++    sh = document.body.scrollHeight;+    oh = document.body.offsetHeight;++    if (sh && oh)+    {+      return (sh > oh ? sh : oh);+    }++    // no idea!+    return 0;+  },++  smaller: function () {+    if (w3c_slidy.size_index > 0)+    {+      --w3c_slidy.size_index;+    }++    w3c_slidy.toolbar.style.display = "none";+    document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];+    w3c_slidy.hide_slide(slide);+    w3c_slidy.show_slide(slide);+    setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);+  },++  bigger: function () {+    if (w3c_slidy.size_index < w3c_slidy.sizes.length - 1)+    {+      ++w3c_slidy.size_index;+    }++    w3c_slidy.toolbar.style.display = "none";+    document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];+    w3c_slidy.hide_slide(slide);+    w3c_slidy.show_slide(slide);+    setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);+  },++  // enables cross browser use of relative width/height+  // on object elements for use with SVG and Flash media+  // with thanks to Ivan Herman for the suggestion+  adjust_object_dimensions: function (width, height) {+    for( var i = 0; i < w3c_slidy.objects.length; i++ )+    {+      var obj = this.objects[i];+      var mimeType = obj.getAttribute("type");++      if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash")+      {+        if ( !obj.initialWidth ) +          obj.initialWidth = obj.getAttribute("width");++        if ( !obj.initialHeight ) +          obj.initialHeight = obj.getAttribute("height");++        if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" )+        {+          var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));+          var newW = width * (w/100.0);+          obj.setAttribute("width",newW);+        }++        if ( obj.initialHeight &&+             obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" )+        {+          var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));+          var newH = height * (h/100.0);+          obj.setAttribute("height", newH);+        }+      }+    }+  },++  // needed for Opera to inhibit default behavior+  // since Opera delivers keyPress even if keyDown+  // was cancelled+  key_press: function (event) {+    if (!event)+      event = window.event;++    if (!w3c_slidy.key_wanted)+      return w3c_slidy.cancel(event);++    return true;+  },++  //  See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes+  key_down: function (event) {+    var key, target, tag;++    w3c_slidy.key_wanted = true;++    if (!event)+      event = window.event;++    // kludge around NS/IE differences +    if (window.event)+    {+      key = window.event.keyCode;+      target = window.event.srcElement;+    }+    else if (event.which)+    {+      key = event.which;+      target = event.target;+    }+    else+      return true; // Yikes! unknown browser++    // ignore event if key value is zero+    // as for alt on Opera and Konqueror+    if (!key)+       return true;++    // avoid interfering with keystroke+    // behavior for non-slidy chrome elements+    if (!w3c_slidy.slidy_chrome(target) &&+        w3c_slidy.special_element(target))+      return true;++    // check for concurrent control/command/alt key+    // but are these only present on mouse events?++    if (event.ctrlKey || event.altKey || event.metaKey)+       return true;++    // dismiss table of contents if visible+    if (w3c_slidy.is_shown_toc() && key != 9 && key != 16 && key != 38 && key != 40)+    {+      w3c_slidy.hide_table_of_contents(true);++      if (key == 27 || key == 84 || key == 67)+        return w3c_slidy.cancel(event);+    }++    if (key == 34) // Page Down+    {+      if (w3c_slidy.view_all)+        return true;++      w3c_slidy.next_slide(false);+      return w3c_slidy.cancel(event);+    }+    else if (key == 33) // Page Up+    {+      if (w3c_slidy.view_all)+        return true;++      w3c_slidy.previous_slide(false);+      return w3c_slidy.cancel(event);+    }+    else if (key == 32) // space bar+    {+      w3c_slidy.next_slide(true);+      return w3c_slidy.cancel(event);+    }+    else if (key == 37) // Left arrow+    {+      w3c_slidy.previous_slide(!event.shiftKey);+      return w3c_slidy.cancel(event);+    }+    else if (key == 36) // Home+    {+      w3c_slidy.first_slide();+      return w3c_slidy.cancel(event);+    }+    else if (key == 35) // End+    {+      w3c_slidy.last_slide();+      return w3c_slidy.cancel(event);+    }+    else if (key == 39) // Right arrow+    {+      w3c_slidy.next_slide(!event.shiftKey);+      return w3c_slidy.cancel(event);+    }+    else if (key == 13) // Enter+    {+      if (w3c_slidy.outline)+      {+        if (w3c_slidy.outline.visible)+          w3c_slidy.fold(w3c_slidy.outline);+        else+          w3c_slidy.unfold(w3c_slidy.outline);+          +       return w3c_slidy.cancel(event);+      }+    }+    else if (key == 188)  // < for smaller fonts+    {+      w3c_slidy.smaller();+      return w3c_slidy.cancel(event);+    }+    else if (key == 190)  // > for larger fonts+    {+      w3c_slidy.bigger();+      return w3c_slidy.cancel(event);+    }+    else if (key == 189 || key == 109)  // - for smaller fonts+    {+      w3c_slidy.smaller();+      return w3c_slidy.cancel(event);+    }+    else if (key == 187 || key == 191 || key == 107)  // = +  for larger fonts+    {+      w3c_slidy.bigger();+      return w3c_slidy.cancel(event);+    }+    else if (key == 83)  // S for smaller fonts+    {+      w3c_slidy.smaller();+      return w3c_slidy.cancel(event);+    }+    else if (key == 66)  // B for larger fonts+    {+      w3c_slidy.bigger();+      return w3c_slidy.cancel(event);+    }+    else if (key == 90)  // Z for last slide+    {+      w3c_slidy.last_slide();+      return w3c_slidy.cancel(event);+    }+    else if (key == 70)  // F for toggle toolbar+    {+      w3c_slidy.toggle_toolbar();+      return w3c_slidy.cancel(event);+    }+    else if (key == 65)  // A for toggle view single/all slides+    {+      w3c_slidy.toggle_view();+      return w3c_slidy.cancel(event);+    }+    else if (key == 75)  // toggle action of left click for next page+    {+      w3c_slidy.mouse_click_enabled = !w3c_slidy.mouse_click_enabled;+      var alert_msg = (w3c_slidy.mouse_click_enabled ?+                "enabled" : "disabled") +  " mouse click advance";++      alert(w3c_slidy.localize(alert_msg));+      return w3c_slidy.cancel(event);+    }+    else if (key == 84 || key == 67)  // T or C for table of contents+    {+      if (w3c_slidy.toc)+        w3c_slidy.toggle_table_of_contents();++      return w3c_slidy.cancel(event);+    }+    else if (key == 72) // H for help+    {+      window.location = w3c_slidy.help_page;+      return w3c_slidy.cancel(event);+    }+    //else alert("key code is "+ key);++    return true;+  },++  // safe for both text/html and application/xhtml+xml+  create_element: function (name) {+    if (this.xhtml && (typeof document.createElementNS != 'undefined'))+      return document.createElementNS("http://www.w3.org/1999/xhtml", name)++    return document.createElement(name);+  },++  get_element_style: function (elem, IEStyleProp, CSSStyleProp) {+    if (elem.currentStyle)+    {+      return elem.currentStyle[IEStyleProp];+    }+    else if (window.getComputedStyle)+    {+      var compStyle = window.getComputedStyle(elem, "");+      return compStyle.getPropertyValue(CSSStyleProp);+    }+    return "";+  },++  // the string str is a whitespace separated list of tokens+  // test if str contains a particular token, e.g. "slide"+  has_token: function (str, token) {+    if (str)+    {+      // define pattern as regular expression+      var pattern = /\w+/g;++      // check for matches+      // place result in array+      var result = str.match(pattern);++      // now check if desired token is present+      for (var i = 0; i < result.length; i++)+      {+        if (result[i] == token)+          return true;+      }+    }++    return false;+  },++  get_class_list: function (element) {+    if (typeof element.className != 'undefined')+      return element.className;++    return element.getAttribute("class");+  },++  has_class: function (element, name) {+    if (element.nodeType != 1)+      return false;++    var regexp = new RegExp("(^| )" + name + "\W*");++    if (typeof element.className != 'undefined')+      return regexp.test(element.className);++    return regexp.test(element.getAttribute("class"));+  },++  remove_class: function (element, name) {+    var regexp = new RegExp("(^| )" + name + "\W*");+    var clsval = "";++    if (typeof element.className != 'undefined')+    {+      clsval = element.className;++      if (clsval)+      {+        clsval = clsval.replace(regexp, "");+        element.className = clsval;+      }+    }+    else+    {+      clsval = element.getAttribute("class");++      if (clsval)+      {+        clsval = clsval.replace(regexp, "");+        element.setAttribute("class", clsval);+      }+    }+  },++  add_class: function (element, name) {+    if (!this.has_class(element, name))+    {+      if (typeof element.className != 'undefined')+        element.className += " " + name;+      else+      {+        var clsval = element.getAttribute("class");+        clsval = clsval ? clsval + " " + name : name;+        element.setAttribute("class", clsval);+      }+    }+  },++  // HTML elements that can be used with class="incremental"+  // note that you can also put the class on containers like+  // up, ol, dl, and div to make their contents appear+  // incrementally. Upper case is used since this is what+  // browsers report for HTML node names (text/html).+  incremental_elements: null,+  okay_for_incremental: function (name) {+    if (!this.incremental_elements)+    {+      var inclist = new Array();+      inclist["p"] = true;+      inclist["pre"] = true;+      inclist["li"] = true;+      inclist["blockquote"] = true;+      inclist["dt"] = true;+      inclist["dd"] = true;+      inclist["h2"] = true;+      inclist["h3"] = true;+      inclist["h4"] = true;+      inclist["h5"] = true;+      inclist["h6"] = true;+      inclist["span"] = true;+      inclist["address"] = true;+      inclist["table"] = true;+      inclist["tr"] = true;+      inclist["th"] = true;+      inclist["td"] = true;+      inclist["img"] = true;+      inclist["object"] = true;+      this.incremental_elements = inclist;+    }+    return this.incremental_elements[name.toLowerCase()];+  },++  next_incremental_item: function (node) {+    var br = this.is_xhtml ? "br" : "BR";+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];++    for (;;)+    {+      node = w3c_slidy.next_node(slide, node);++      if (node == null || node.parentNode == null)+        break;++      if (node.nodeType == 1)  // ELEMENT+      {+        if (node.nodeName == br)+          continue;++        if (w3c_slidy.has_class(node, "incremental")+             && w3c_slidy.okay_for_incremental(node.nodeName))+          return node;++        if (w3c_slidy.has_class(node.parentNode, "incremental")+             && !w3c_slidy.has_class(node, "non-incremental"))+          return node;+      }+    }++    return node;+  },++  previous_incremental_item: function (node) {+    var br = this.is_xhtml ? "br" : "BR";+    var slide = w3c_slidy.slides[w3c_slidy.slide_number];++    for (;;)+    {+      node = w3c_slidy.previous_node(slide, node);++      if (node == null || node.parentNode == null)+        break;++      if (node.nodeType == 1)+      {+        if (node.nodeName == br)+          continue;++        if (w3c_slidy.has_class(node, "incremental")+             && w3c_slidy.okay_for_incremental(node.nodeName))+          return node;++        if (w3c_slidy.has_class(node.parentNode, "incremental")+             && !w3c_slidy.has_class(node, "non-incremental"))+          return node;+      }+    }++    return node;+  },++  // set visibility for all elements on current slide with+  // a parent element with attribute class="incremental"+  set_visibility_all_incremental: function (value) {+    var node = this.next_incremental_item(null);++    if (value == "hidden")+    {+      while (node)+      {+        w3c_slidy.add_class(node, "invisible");+        node = w3c_slidy.next_incremental_item(node);+      }+    }+    else // value == "visible"+    {+      while (node)+      {+        w3c_slidy.remove_class(node, "invisible");+        node = w3c_slidy.next_incremental_item(node);+      }+    }+  },++  // reveal the next hidden item on the slide+  // node is null or the node that was last revealed+  reveal_next_item: function (node) {+    node = w3c_slidy.next_incremental_item(node);++    if (node && node.nodeType == 1)  // an element+      w3c_slidy.remove_class(node, "invisible");++    return node;+  },++  // exact inverse of revealNextItem(node)+  hide_previous_item: function (node) {+    if (node && node.nodeType == 1)  // an element+      w3c_slidy.add_class(node, "invisible");++    return this.previous_incremental_item(node);+  },++  // left to right traversal of root's content+  next_node: function (root, node) {+    if (node == null)+      return root.firstChild;++    if (node.firstChild)+      return node.firstChild;++    if (node.nextSibling)+      return node.nextSibling;++    for (;;)+    {+      node = node.parentNode;++      if (!node || node == root)+        break;++      if (node && node.nextSibling)+        return node.nextSibling;+    }++    return null;+  },++  // right to left traversal of root's content+  previous_node: function (root, node) {+    if (node == null)+    {+      node = root.lastChild;++      if (node)+      {+        while (node.lastChild)+          node = node.lastChild;+      }++      return node;+    }++    if (node.previousSibling)+    {+      node = node.previousSibling;++      while (node.lastChild)+        node = node.lastChild;++      return node;+    }++    if (node.parentNode != root)+      return node.parentNode;++    return null;+  },++  previous_sibling_element: function (el) {+    el = el.previousSibling;++    while (el && el.nodeType != 1)+      el = el.previousSibling;++    return el;+  },++  next_sibling_element: function (el) {+    el = el.nextSibling;++    while (el && el.nodeType != 1)+      el = el.nextSibling;++    return el;+  },++  first_child_element: function (el) {+    var node;++    for (node = el.firstChild; node; node = node.nextSibling)+    {+      if (node.nodeType == 1)+        break;+    }++    return node;+  },++  first_tag: function (element, tag) {+    var node;++    if (!this.is_xhtml)+      tag = tag.toUpperCase();++    for (node = element.firstChild; node; node = node.nextSibling)+    {+      if (node.nodeType == 1 && node.nodeName == tag)+        break;+    }++    return node;+  },++  hide_selection: function () {+    if (window.getSelection) // Firefox, Chromium, Safari, Opera+    {+      var selection = window.getSelection();++      if (selection.rangeCount > 0)+      {+        var range = selection.getRangeAt(0);+        range.collapse (false);+      }+    }+    else // Internet Explorer+    {+      var textRange = document.selection.createRange ();+      textRange.collapse (false);+    }+  },++  get_selected_text: function () {+    try+    {+      if (window.getSelection)+        return window.getSelection().toString();++      if (document.getSelection)+        return document.getSelection().toString();++      if (document.selection)+        return document.selection.createRange().text;+    }+    catch (e)+    {+    }++    return "";+  },++  // make note of length of selected text+  // as this evaluates to zero in click event+  mouse_button_up: function (e) {+    w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;+  },++  mouse_button_down: function (e) {+    w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;+    w3c_slidy.mouse_x = e.clientX;+    w3c_slidy.mouse_y = e.clientY;+  },++  // right mouse button click is reserved for context menus+  // it is more reliable to detect rightclick than leftclick+  mouse_button_click: function (e) {+    if (!e)+      var e = window.event;++    if (Math.abs(e.clientX -w3c_slidy.mouse_x) ++        Math.abs(e.clientY -w3c_slidy.mouse_y) > 10)+      return true;++    if (w3c_slidy.selected_text_len > 0)+      return true;++    var rightclick = false;+    var leftclick = false;+    var middleclick = false;+    var target;++    if (!e)+      var e = window.event;++    if (e.target)+      target = e.target;+    else if (e.srcElement)+      target = e.srcElement;++    // work around Safari bug+    if (target.nodeType == 3)+      target = target.parentNode;++    if (e.which) // all browsers except IE+    {+      leftclick = (e.which == 1);+      middleclick = (e.which == 2);+      rightclick = (e.which == 3);+    }+    else if (e.button)+    {+      // Konqueror gives 1 for left, 4 for middle+      // IE6 gives 0 for left and not 1 as I expected++      if (e.button == 4)+        middleclick = true;++      // all browsers agree on 2 for right button+      rightclick = (e.button == 2);+    }+    else+      leftclick = true;++    if (w3c_slidy.selected_text_len > 0)+    {+      w3c_slidy.stop_propagation(e);+      e.cancel = true;+      e.returnValue = false;+      return false;+    }++    // dismiss table of contents+    w3c_slidy.hide_table_of_contents(false);++    // check if target is something that probably want's clicks+    // e.g. a, embed, object, input, textarea, select, option+    var tag = target.nodeName.toLowerCase();++    if (w3c_slidy.mouse_click_enabled && leftclick &&+        !w3c_slidy.special_element(target) &&+        !target.onclick)+    {+      w3c_slidy.next_slide(true);+      w3c_slidy.stop_propagation(e);+      e.cancel = true;+      e.returnValue = false;+      return false;+    }++    return true;+  },++  special_element: function (element) {+    if (this.has_class(element, "non-interactive"))+      return false;++    var tag = element.nodeName.toLowerCase();++    return element.onkeydown ||+      element.onclick ||+      tag == "a" ||+      tag == "embed" ||+      tag == "object" ||+      tag == "video" ||+      tag == "audio" ||+      tag == "svg" ||+      tag == "canvas" ||+      tag == "input" ||+      tag == "textarea" ||+      tag == "select" ||+      tag == "option";+  },++  slidy_chrome: function (el) {+    while (el)+    {+      if (el == w3c_slidy.toc ||+          el == w3c_slidy.toolbar ||+          w3c_slidy.has_class(el, "outline"))+        return true;++      el = el.parentNode;+    }++    return false;+  },++  get_key: function (e)+  {+    var key;++    // kludge around NS/IE differences +    if (typeof window.event != "undefined")+      key = window.event.keyCode;+    else if (e.which)+      key = e.which;++    return key;+  },++  get_target: function (e) {+    var target;++    if (!e)+      e = window.event;++    if (e.target)+      target = e.target;+    else if (e.srcElement)+      target = e.srcElement;++    if (target.nodeType != 1)+      target = target.parentNode;++    return target;+  },++  // does display property provide correct defaults?+  is_block: function (elem) {+    var tag = elem.nodeName.toLowerCase();++    return tag == "ol" || tag == "ul" || tag == "p" ||+           tag == "li" || tag == "table" || tag == "pre" ||+           tag == "h1" || tag == "h2" || tag == "h3" ||+           tag == "h4" || tag == "h5" || tag == "h6" ||+           tag == "blockquote" || tag == "address"; +  },++  add_listener: function (element, event, handler) {+    if (window.addEventListener)+      element.addEventListener(event, handler, false);+    else+      element.attachEvent("on"+event, handler);+  },++  // used to prevent event propagation from field controls+  stop_propagation: function (event) {+    event = event ? event : window.event;+    event.cancelBubble = true;  // for IE++    if (event.stopPropagation)+      event.stopPropagation();++    return true;+  },++  cancel: function (event) {+    if (event)+    {+       event.cancel = true;+       event.returnValue = false;++      if (event.preventDefault)+        event.preventDefault();+    }++    w3c_slidy.key_wanted = false;+    return false;+  },++// for each language define an associative array+// and also the help text which is longer++  strings_es: {+    "slide":"pág.",+    "help?":"Ayuda",+    "contents?":"Índice",+    "table of contents":"tabla de contenidos",+    "Table of Contents":"Tabla de Contenidos",+    "restart presentation":"Reiniciar presentación",+    "restart?":"Inicio"+  },+  help_es:+    "Utilice el ratón, barra espaciadora, teclas Izda/Dcha, " ++    "o Re pág y Av pág. Use S y B para cambiar el tamaño de fuente.",++  strings_ca: {+    "slide":"pàg..",+    "help?":"Ajuda",+    "contents?":"Índex",+    "table of contents":"taula de continguts",+    "Table of Contents":"Taula de Continguts",+    "restart presentation":"Reiniciar presentació",+    "restart?":"Inici"+  },+  help_ca:+    "Utilitzi el ratolí, barra espaiadora, tecles Esq./Dta. " ++    "o Re pàg y Av pàg. Usi S i B per canviar grandària de font.",++  strings_cs: {+    "slide":"snímek",+    "help?":"nápověda",+    "contents?":"obsah",+    "table of contents":"obsah prezentace",+    "Table of Contents":"Obsah prezentace",+    "restart presentation":"znovu spustit prezentaci",+    "restart?":"restart"+  },+  help_cs:+    "Prezentaci můžete procházet pomocí kliknutí myši, mezerníku, " ++    "šipek vlevo a vpravo nebo kláves PageUp a PageDown. Písmo se " ++    "dá zvětšit a zmenšit pomocí kláves B a S.",++  strings_nl: {+    "slide":"pagina",+    "help?":"Help?",+    "contents?":"Inhoud?",+    "table of contents":"inhoudsopgave",+    "Table of Contents":"Inhoudsopgave",+    "restart presentation":"herstart presentatie",+    "restart?":"Herstart?"+  },+  help_nl:+     "Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, " ++     "of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.",++  strings_de: {+    "slide":"Seite",+    "help?":"Hilfe",+    "contents?":"Übersicht",+    "table of contents":"Inhaltsverzeichnis",+    "Table of Contents":"Inhaltsverzeichnis",+    "restart presentation":"Präsentation neu starten",+    "restart?":"Neustart"+  },+  help_de:+    "Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder " ++    "Page up/Page Down zum Wechseln der Seiten und S und B für die Schriftgrösse.",++  strings_pl: {+    "slide":"slajd",+    "help?":"pomoc?",+    "contents?":"spis treści?",+    "table of contents":"spis treści",+    "Table of Contents":"Spis Treści",+    "restart presentation":"Restartuj prezentację",+    "restart?":"restart?"+  },+  help_pl:+    "Zmieniaj slajdy klikając myszą, naciskając spację, strzałki lewo/prawo" ++    "lub PgUp / PgDn. Użyj klawiszy S i B, aby zmienić rozmiar czczionki.",++  strings_fr: {+    "slide":"page",+    "help?":"Aide",+    "contents?":"Index",+    "table of contents":"table des matières",+    "Table of Contents":"Table des matières",+    "restart presentation":"Recommencer l'exposé",+    "restart?":"Début"+  },+  help_fr:+    "Naviguez avec la souris, la barre d'espace, les flèches " ++    "gauche/droite ou les touches Pg Up, Pg Dn. Utilisez " ++    "les touches S et B pour modifier la taille de la police.",++  strings_hu: {+    "slide":"oldal",+    "help?":"segítség",+    "contents?":"tartalom",+    "table of contents":"tartalomjegyzék",+    "Table of Contents":"Tartalomjegyzék",+    "restart presentation":"bemutató újraindítása",+    "restart?":"újraindítás"+  },+  help_hu:+    "Az oldalak közti lépkedéshez kattintson az egérrel, vagy " ++    "használja a szóköz, a bal, vagy a jobb nyíl, illetve a Page Down, " ++    "Page Up billentyűket. Az S és a B billentyűkkel változtathatja " ++    "a szöveg méretét.",++  strings_it: {+    "slide":"pag.",+    "help?":"Aiuto",+    "contents?":"Indice",+    "table of contents":"indice",+    "Table of Contents":"Indice",+    "restart presentation":"Ricominciare la presentazione",+    "restart?":"Inizio"+  },+  help_it:+    "Navigare con mouse, barra spazio, frecce sinistra/destra o " ++    "PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.",++  strings_el: {+    "slide":"σελίδα",+    "help?":"βοήθεια;",+    "contents?":"περιεχόμενα;",+    "table of contents":"πίνακας περιεχομένων",+    "Table of Contents":"Πίνακας Περιεχομένων",+    "restart presentation":"επανεκκίνηση παρουσίασης",+    "restart?":"επανεκκίνηση;"+  },+  help_el:+    "Πλοηγηθείτε με το κλίκ του ποντικιού, το space, τα βέλη αριστερά/δεξιά, " ++    "ή Page Up και Page Down. Χρησιμοποιήστε τα πλήκτρα S και B για να αλλάξετε " ++    "το μέγεθος της γραμματοσειράς.",++  strings_ja: {+    "slide":"スライド",+    "help?":"ヘルプ",+    "contents?":"目次",+    "table of contents":"目次を表示",+    "Table of Contents":"目次",+    "restart presentation":"最初から再生",+    "restart?":"最初から"+  },+  help_ja:+     "マウス左クリック ・ スペース ・ 左右キー " ++     "または Page Up ・ Page Downで操作, S ・ Bでフォントサイズ変更",++  strings_zh: {+    "slide":"幻灯片",+    "help?":"帮助?",+    "contents?":"内容?",+    "table of contents":"目录",+    "Table of Contents":"目录",+    "restart presentation":"重新启动展示",+    "restart?":"重新启动?"+  },+  help_zh:+    "用鼠标点击, 空格条, 左右箭头, Pg Up 和 Pg Dn 导航. " ++    "用 S, B 改变字体大小.",++  strings_ru: {+    "slide":"слайд",+    "help?":"помощь?",+    "contents?":"содержание?",+    "table of contents":"оглавление",+    "Table of Contents":"Оглавление",+    "restart presentation":"перезапустить презентацию",+    "restart?":"перезапуск?"+  },+  help_ru:+    "Перемещайтесь кликая мышкой, используя клавишу пробел, стрелки" ++    "влево/вправо или Pg Up и Pg Dn. Клавиши S и B меняют размер шрифта.",++  strings_sv: {+    "slide":"sida",+    "help?":"hjälp",+    "contents?":"innehåll",+    "table of contents":"innehållsförteckning",+    "Table of Contents":"Innehållsförteckning",+    "restart presentation":"visa presentationen från början",+    "restart?":"börja om"+  },+  help_sv:+    "Bläddra med ett klick med vänstra musknappen, mellanslagstangenten, " ++    "vänster- och högerpiltangenterna eller tangenterna Pg Up, Pg Dn. " ++    "Använd tangenterna S och B för att ändra textens storlek.",++  strings: { },++  localize: function (src) {+    if (src == "")+      return src;++     // try full language code, e.g. en-US+     var s, lookup = w3c_slidy.strings[w3c_slidy.lang];++     if (lookup)+     {+       s = lookup[src];++       if (s)+        return s;+     }++     // strip country code suffix, e.g.+     // try en if undefined for en-US+     var lg = w3c_slidy.lang.split("-");++     if (lg.length > 1)+     {+       lookup = w3c_slidy.strings[lg[0]];++       if (lookup)+       {+         s = lookup[src];++         if (s)+          return s;+       }+     }++     // otherwise string as is+     return src;+  },++  init_localization: function () {+    var i18n = w3c_slidy;+    var help_text = w3c_slidy.help_text;++    // each such language array is declared in the localize array+    // this is used as in  w3c_slidy.localize("foo");+    this.strings = {+      "es":this.strings_es,+      "ca":this.strings_ca,+      "cs":this.strings_cs,+      "nl":this.strings_nl,+      "de":this.strings_de,+      "pl":this.strings_pl,+      "fr":this.strings_fr,+      "hu":this.strings_hu,+      "it":this.strings_it,+      "el":this.strings_el,+      "jp":this.strings_ja,+      "zh":this.strings_zh,+      "ru":this.strings_ru,+      "sv":this.strings_sv+    },++    i18n.strings_es[help_text] = i18n.help_es;+    i18n.strings_ca[help_text] = i18n.help_ca;+    i18n.strings_cs[help_text] = i18n.help_cs;+    i18n.strings_nl[help_text] = i18n.help_nl;+    i18n.strings_de[help_text] = i18n.help_de;+    i18n.strings_pl[help_text] = i18n.help_pl;+    i18n.strings_fr[help_text] = i18n.help_fr;+    i18n.strings_hu[help_text] = i18n.help_hu;+    i18n.strings_it[help_text] = i18n.help_it;+    i18n.strings_el[help_text] = i18n.help_el;+    i18n.strings_ja[help_text] = i18n.help_ja;+    i18n.strings_zh[help_text] = i18n.help_zh;+    i18n.strings_ru[help_text] = i18n.help_ru;+    i18n.strings_sv[help_text] = i18n.help_sv;++    w3c_slidy.lang = document.body.parentNode.getAttribute("lang");++    if (!w3c_slidy.lang)+      w3c_slidy.lang = document.body.parentNode.getAttribute("xml:lang");++    if (!w3c_slidy.lang)+      w3c_slidy.lang = "en";+  }+};++// hack for back button behavior+if (w3c_slidy.ie6 || w3c_slidy.ie7)+{+  document.write("<iframe id='historyFrame' " ++  "src='javascript:\"<html"+"></"+"html>\"' " ++  "height='1' width='1' " ++  "style='position:absolute;left:-800px'></iframe>");+}++// attach event listeners for initialization+w3c_slidy.set_up();++// hide the slides as soon as body element is available+// to reduce annoying screen mess before the onload event+setTimeout(w3c_slidy.hide_slides, 50);+
− data/slidy/scripts/slidy.js.gz

binary file changed (12801 → absent bytes)

data/templates/default.beamer view
@@ -1,10 +1,13 @@-\documentclass[$if(fontsize)$$fontsize$,$endif$$if(handout)$handout,$endif$$if(beamer)$ignorenonframetext,$endif$]{$documentclass$}+\documentclass[$if(fontsize)$$fontsize$,$endif$$if(handout)$handout,$endif$$if(beamer)$ignorenonframetext,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} $if(theme)$ \usetheme{$theme$} $endif$ $if(colortheme)$ \usecolortheme{$colortheme$} $endif$+$if(fonttheme)$+\usefonttheme{$fonttheme$}+$endif$ \usepackage{amssymb,amsmath} \usepackage{ifxetex,ifluatex} \usepackage{fixltx2e} % provides \textsubscript@@ -53,6 +56,10 @@ $endif$ $if(graphics)$ \usepackage{graphicx}+% Redefine \includegraphics so that, unless explicit options are+% given, the image width will not exceed the width of the page.+% Images get their normal width if they fit onto the page, but+% are scaled down if they would overflow the margins. \makeatletter \def\ScaleIfNeeded{%   \ifdim\Gin@nat@width>\linewidth@@ -108,6 +115,9 @@  $if(title)$ \title{$title$}+$endif$+$if(subtitle)$+\subtitle{$subtitle$} $endif$ $if(author)$ \author{$for(author)$$author$$sep$ \and $endfor$}
data/templates/default.docbook view
@@ -3,8 +3,8 @@ <!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook EBNF Module V1.1CR1//EN"                   "http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd"> $else$-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"-                  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"+                  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> $endif$ <article>   <articleinfo>
data/templates/default.dzslides view
@@ -100,8 +100,11 @@ </head> <body> $if(title)$-<section>+<section class="title">   <h1 class="title">$title$</h1>+$if(subtitle)$+  <h1 class="subtitle">$subtitle$</h1>+$endif$ $for(author)$   <h2 class="author">$author$</h2> $endfor$
data/templates/default.epub view
@@ -18,6 +18,9 @@ <body> $if(titlepage)$   <h1 class="title">$title$</h1>+$if(subtitle)$+  <h1 class="subtitle">$subtitle$</h1>+$endif$ $for(author)$   <h2 class="author">$author$</h2> $endfor$
data/templates/default.epub3 view
@@ -22,6 +22,9 @@ <body> $if(titlepage)$   <h1 class="title">$title$</h1>+$if(subtitle)$+  <h1 class="subtitle">$subtitle$</h1>+$endif$ $for(author)$   <h2 class="author">$author$</h2> $endfor$
data/templates/default.html view
@@ -37,6 +37,9 @@ $if(title)$ <div id="$idprefix$header"> <h1 class="title">$title$</h1>+$if(subtitle)$+<h1 class="subtitle">$subtitle$</h1>+$endif$ $for(author)$ <h2 class="author">$author$</h2> $endfor$
data/templates/default.html5 view
@@ -3,6 +3,7 @@ <head>   <meta charset="utf-8">   <meta name="generator" content="pandoc">+  <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> $for(author-meta)$   <meta name="author" content="$author-meta$"> $endfor$@@ -39,6 +40,9 @@ $if(title)$ <header> <h1 class="title">$title$</h1>+$if(subtitle)$+<h1 class="subtitle">$subtitle$</h1>+$endif$ $for(author)$ <h2 class="author">$author$</h2> $endfor$
data/templates/default.latex view
@@ -1,4 +1,4 @@-\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$]{$documentclass$}+\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} \usepackage[T1]{fontenc} \usepackage{lmodern} \usepackage{amssymb,amsmath}@@ -12,9 +12,11 @@   \usepackage{eurosym} $endif$ \else % if luatex or xelatex-  \usepackage{fontspec}   \ifxetex+    \usepackage{mathspec}     \usepackage{xltxtra,xunicode}+  \else+    \usepackage{fontspec}   \fi   \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}   \newcommand{\euro}{€}@@ -25,10 +27,10 @@     \setsansfont{$sansfont$} $endif$ $if(monofont)$-    \setmonofont{$monofont$}+    \setmonofont[Mapping=tex-ansi]{$monofont$} $endif$ $if(mathfont)$-    \setmathfont{$mathfont$}+    \setmathfont(Digits,Latin,Greek){$mathfont$} $endif$ \fi % use microtype if available@@ -38,7 +40,7 @@ $endif$ $if(natbib)$ \usepackage{natbib}-\bibliographystyle{plainnat}+\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} $endif$ $if(biblatex)$ \usepackage{biblatex}@@ -63,15 +65,24 @@ $endif$ $if(graphics)$ \usepackage{graphicx}-% We will generate all images so they have a width \maxwidth. This means-% that they will get their normal width if they fit onto the page, but+% Redefine \includegraphics so that, unless explicit options are+% given, the image width will not exceed the width of the page.+% Images get their normal width if they fit onto the page, but % are scaled down if they would overflow the margins. \makeatletter-\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth-\else\Gin@nat@width\fi}+\def\ScaleIfNeeded{%+  \ifdim\Gin@nat@width>\linewidth+    \linewidth+  \else+    \Gin@nat@width+  \fi+} \makeatother \let\Oldincludegraphics\includegraphics-\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}+{%+ \catcode`\@=11\relax%+ \gdef\includegraphics{\@ifnextchar[{\Oldincludegraphics}{\Oldincludegraphics[width=\ScaleIfNeeded]}}%+}% $endif$ \ifxetex   \usepackage[setpagesize=false, % page size defined by xetex@@ -85,6 +96,7 @@             pdfauthor={$author-meta$},             pdftitle={$title-meta$},             colorlinks=true,+            citecolor=$if(citecolor)$$citecolor$$else$blue$endif$,             urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,             linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,             pdfborder={0 0 0}}@@ -123,6 +135,9 @@  $if(title)$ \title{$title$}+$endif$+$if(subtitle)$+\subtitle{$subtitle$} $endif$ \author{$for(author)$$author$$sep$ \and $endfor$} \date{$date$}
data/templates/default.man view
@@ -1,7 +1,7 @@ $if(has-tables)$ .\"t $endif$-.TH $title$ $section$ "$date$" $description$+.TH "$title$" "$section$" "$date$" "$footer$" "$header$" $for(header-includes)$ $header-includes$ $endfor$
data/templates/default.opendocument view
@@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8" ?>-<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">+<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.2">   $automatic-styles$ $for(header-includes)$   $header-includes$-$endfor$  +$endfor$ <office:body> <office:text> $if(title)$
+ data/templates/default.opml view
@@ -0,0 +1,11 @@+<?xml version="1.0" encoding="UTF-8"?>+<opml version="2.0">+  <head>+    <title>$title$</title>+    <dateModified>$date$</dateModified>+    <ownerName>$for(author)$$author$$sep$; $endfor$</ownerName>+  </head>+  <body>+$body$+  </body>+</opml>
data/templates/default.org view
@@ -1,5 +1,5 @@ $if(title)$-$title$+#+TITLE: $title$  $endif$ $if(author)$
+ data/templates/default.revealjs view
@@ -0,0 +1,98 @@+<!DOCTYPE html>+<html$if(lang)$ lang="$lang$"$endif$>+<head>+  <meta charset="utf-8">+  <meta name="generator" content="pandoc">+$for(author-meta)$+  <meta name="author" content="$author-meta$" />+$endfor$+$if(date-meta)$+  <meta name="dcterms.date" content="$date-meta$" />+$endif$+  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>+  <meta name="apple-mobile-web-app-capable" content="yes" />+  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />+  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">+  <link rel="stylesheet" href="$revealjs-url$/css/reveal.min.css"/>+    <style type="text/css">code{white-space: pre;}</style>+$if(highlighting-css)$+    <style type="text/css">+$highlighting-css$+    </style>+$endif$+$if(css)$+$for(css)$+    <link rel="stylesheet" href="$css$"/>+$endfor$+$else$+    <link rel="stylesheet" href="$revealjs-url$/css/theme/simple.css" id="theme">+$endif$+  <link rel="stylesheet" media="print" href="$revealjs-url$/css/print/pdf.css" />+  <!--[if lt IE 9]>+  <script src="$revealjs-url$/lib/js/html5shiv.js"></script>+  <![endif]-->+$if(math)$+    $math$+$endif$+$for(header-includes)$+    $header-includes$+$endfor$+</head>+<body>+$for(include-before)$+$include-before$+$endfor$+  <div class="reveal">+    <div class="slides">++$if(title)$+<section>+    <h1 class="title">$title$</h1>+$if(subtitle)$+  <h1 class="subtitle">$subtitle$</h1>+$endif$+$for(author)$+    <h2 class="author">$author$</h2>+$endfor$+    <h3 class="date">$date$</h3>+</section>+$endif$+$if(toc)$+<section id="$idprefix$TOC">+$toc$+</section>+$endif$++$body$+    </div>+  </div>+$for(include-after)$+$include-after$+$endfor$++  <script src="$revealjs-url$/lib/js/head.min.js"></script>+  <script src="$revealjs-url$/js/reveal.min.js"></script>++  <script>++      // Full list of configuration options available here:+      // https://github.com/hakimel/reveal.js#configuration+      Reveal.initialize({+        controls: true,+        progress: true,+        history: true,+        center: true,+        theme: $if(theme)$'$theme$'$else$Reveal.getQueryHash().theme$endif$, // available themes are in /css/theme+        transition: $if(transition)$'$transition$'$else$Reveal.getQueryHash().transition || 'default'$endif$, // default/cube/page/concave/zoom/linear/fade/none++        // Optional libraries used to extend on reveal.js+        dependencies: [+          { src: '$revealjs-url$/lib/js/classList.js', condition: function() { return !document.body.classList; } },+          { src: '$revealjs-url$/plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },+          { src: '$revealjs-url$/plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } },+//          { src: '$revealjs-url$/plugin/search/search.js', async: true, condition: function() { return !!document.body.classList; }, }+//          { src: '$revealjs-url$/plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } }+]});+    </script>+  </body>+</html>
data/templates/default.s5 view
@@ -54,6 +54,9 @@ $if(title)$ <div class="titleslide slide">   <h1>$title$</h1>+$if(subtitle)$+  <h1 class="subtitle">$subtitle$</h1>+$endif$   <h2>$for(author)$$author$$sep$<br/>$endfor$</h2>   <h3>$date$</h3> </div>
data/templates/default.slideous view
@@ -60,6 +60,9 @@ $if(title)$ <div class="slide titlepage">   <h1 class="title">$title$</h1>+$if(subtitle)$+  <h1 class="subtitle">$subtitle$</h1>+$endif$   <p class="author"> $for(author)$$author$$sep$<br/>$endfor$   </p>
data/templates/default.slidy view
@@ -31,7 +31,7 @@ $for(header-includes)$   $header-includes$ $endfor$-  <script src="$slidy-url$/scripts/slidy.js.gz"+  <script src="$slidy-url$/scripts/slidy.js"     charset="utf-8" type="text/javascript"></script> $if(duration)$   <meta name="duration" content="$duration$" />@@ -44,6 +44,9 @@ $if(title)$ <div class="slide titlepage">   <h1 class="title">$title$</h1>+$if(subtitle)$+  <h1 class="subtitle">$subtitle$</h1>+$endif$   <p class="author"> $for(author)$$author$$sep$<br/>$endfor$   </p>
dist/build/Text/Pandoc/Data.hs view
@@ -5,4 +5,4 @@ import qualified Data.ByteString as B  dataFiles :: [(FilePath, B.ByteString)]-dataFiles = [("default.csl","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<style xmlns=\"http://purl.org/net/xbiblio/csl\" class=\"in-text\" version=\"1.0\" demote-non-dropping-particle=\"sort-only\">\n   <info>\n      <title>Chicago Manual of Style (Author-Date format)</title>\n      <id>http://www.zotero.org/styles/chicago-author-date</id>\n      <link href=\"http://www.zotero.org/styles/chicago-author-date\" rel=\"self\"/>\n      <author>\n         <name>Julian Onions</name>\n         <email>julian.onions@gmail.com</email>\n      </author>\n      <contributor>\n         <name>Sebastian Karcher</name>\n      </contributor>\n      <category citation-format=\"author-date\"/>\n      <category field=\"generic-base\"/>\n      <updated>2011-11-17T22:01:05+00:00</updated>\n      <summary>The author-date variant of the Chicago style</summary>\n      <link href=\"http://www.chicagomanualofstyle.org/tools_citationguide.html\" rel=\"documentation\"/>\n      <rights>This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/</rights>\n   </info>\n   <macro name=\"secondary-contributors\">\n      <choose>\n         <if type=\"chapter paper-conference\" match=\"none\">\n            <group delimiter=\". \">\n               <choose>\n                  <if variable=\"author\">\n                     <names variable=\"editor\">\n                        <label form=\"verb-short\" text-case=\"capitalize-first\" suffix=\". \" strip-periods=\"true\"/>\n                        <name and=\"text\" delimiter=\", \"/>\n                     </names>\n                  </if>\n               </choose>\n               <choose>\n                  <if variable=\"author editor\" match=\"any\">\n                     <names variable=\"translator\">\n                        <label form=\"verb-short\" text-case=\"capitalize-first\" suffix=\". \" strip-periods=\"true\"/>\n                        <name and=\"text\" delimiter=\", \"/>\n                     </names>\n                  </if>\n               </choose>\n            </group>\n         </if>\n      </choose>\n   </macro>\n   <macro name=\"container-contributors\">\n      <choose>\n         <if type=\"chapter paper-conference\" match=\"any\">\n            <group prefix=\",\" delimiter=\", \">\n               <choose>\n                  <if variable=\"author\">\n                     <names variable=\"editor\">\n                        <label form=\"verb-short\" prefix=\" \" text-case=\"lowercase\" suffix=\". \" strip-periods=\"true\"/>\n                        <name and=\"text\" delimiter=\", \"/>\n                     </names>\n                     <choose>\n                        <if variable=\"container-author\">\n                           <group>\n                              <names variable=\"container-author\">\n                                 <label form=\"verb-short\" prefix=\" \" text-case=\"lowercase\" suffix=\" \" strip-periods=\"true\"/>\n                                 <name and=\"text\" delimiter=\", \"/>\n                              </names>\n                           </group>\n                        </if>\n                     </choose>\n                  </if>\n               </choose>\n               <choose>\n                  <if variable=\"author editor\" match=\"any\">\n                     <names variable=\"translator\">\n                        <label form=\"verb-short\" prefix=\" \" text-case=\"lowercase\" suffix=\". \" strip-periods=\"true\"/>\n                        <name and=\"text\" delimiter=\", \"/>\n                     </names>\n                  </if>\n               </choose>\n            </group>\n         </if>\n      </choose>\n   </macro>\n   <macro name=\"anon\">\n      <text term=\"anonymous\" form=\"short\" text-case=\"capitalize-first\" suffix=\".\" strip-periods=\"true\"/>\n   </macro>\n   <macro name=\"editor\">\n      <names variable=\"editor\">\n         <name name-as-sort-order=\"first\" and=\"text\" sort-separator=\", \" delimiter=\", \" delimiter-precedes-last=\"always\"/>\n         <label form=\"short\" prefix=\", \" suffix=\".\" strip-periods=\"true\"/>\n      </names>\n   </macro>\n   <macro name=\"translator\">\n      <names variable=\"translator\">\n         <name name-as-sort-order=\"first\" and=\"text\" sort-separator=\", \" delimiter=\", \" delimiter-precedes-last=\"always\"/>\n         <label form=\"verb-short\" prefix=\", \" suffix=\".\" strip-periods=\"true\"/>\n      </names>\n   </macro>\n   <macro name=\"recipient\">\n      <choose>\n         <if type=\"personal_communication\">\n            <choose>\n               <if variable=\"genre\">\n                  <text variable=\"genre\" text-case=\"capitalize-first\"/>\n               </if>\n               <else>\n                  <text term=\"letter\" text-case=\"capitalize-first\"/>\n               </else>\n            </choose>\n         </if>\n      </choose>\n      <names variable=\"recipient\" delimiter=\", \">\n         <label form=\"verb\" prefix=\" \" text-case=\"lowercase\" suffix=\" \"/>\n         <name and=\"text\" delimiter=\", \"/>\n      </names>\n   </macro>\n   <macro name=\"contributors\">\n      <names variable=\"author\">\n         <name and=\"text\" name-as-sort-order=\"first\" sort-separator=\", \" delimiter=\", \" delimiter-precedes-last=\"always\"/>\n         <label form=\"verb-short\" prefix=\", \" suffix=\".\" text-case=\"lowercase\" strip-periods=\"true\"/>\n         <substitute>\n            <text macro=\"editor\"/>\n            <text macro=\"translator\"/>\n            <text macro=\"anon\"/>\n         </substitute>\n      </names>\n      <text macro=\"recipient\"/>\n   </macro>\n   <macro name=\"contributors-short\">\n      <names variable=\"author\">\n         <name form=\"short\" and=\"text\" delimiter=\", \" initialize-with=\". \"/>\n         <substitute>\n            <names variable=\"editor\"/>\n            <names variable=\"translator\"/>\n            <text macro=\"anon\"/>\n         </substitute>\n      </names>\n   </macro>\n   <macro name=\"interviewer\">\n      <names variable=\"interviewer\" delimiter=\", \">\n         <label form=\"verb\" prefix=\" \" text-case=\"capitalize-first\" suffix=\" \"/>\n         <name and=\"text\" delimiter=\", \"/>\n      </names>\n   </macro>\n   <macro name=\"archive\">\n      <group delimiter=\". \">\n         <text variable=\"archive_location\" text-case=\"capitalize-first\"/>\n         <text variable=\"archive\"/>\n         <text variable=\"archive-place\"/>\n      </group>\n   </macro>\n   <macro name=\"access\">\n      <group delimiter=\". \">\n         <choose>\n            <if type=\"graphic report\" match=\"any\">\n               <text macro=\"archive\"/>\n            </if>\n            <else-if type=\"bill book graphic legal_case motion_picture report song article-magazine article-newspaper thesis chapter paper-conference\" match=\"none\">\n               <text macro=\"archive\"/>\n            </else-if>\n         </choose>\n         <text variable=\"DOI\" prefix=\"doi:\"/>\n         <choose>\n            <if type=\"legal_case\" match=\"none\">\n               <text variable=\"URL\"/>\n            </if>\n         </choose>\n      </group>\n   </macro>\n   <macro name=\"title\">\n      <choose>\n         <if variable=\"title\" match=\"none\">\n            <choose>\n               <if type=\"personal_communication\" match=\"none\">\n                  <text variable=\"genre\" text-case=\"capitalize-first\"/>\n               </if>\n            </choose>\n         </if>\n         <else-if type=\"bill book graphic legal_case motion_picture report song\" match=\"any\">\n            <text variable=\"title\" font-style=\"italic\"/>\n         </else-if>\n\t <else>\n            <text variable=\"title\" quotes=\"true\"/>\n         </else>\n      </choose>\n   </macro>\n   <macro name=\"edition\">\n      <choose>\n         <if type=\"bill book graphic legal_case motion_picture report song chapter paper-conference\" match=\"any\">\n            <choose>\n               <if is-numeric=\"edition\">\n                  <group delimiter=\" \">\n                     <number variable=\"edition\" form=\"ordinal\"/>\n                     <text term=\"edition\" form=\"short\" suffix=\".\" strip-periods=\"true\"/>\n                  </group>\n               </if>\n               <else>\n                  <text variable=\"edition\" suffix=\".\"/>\n               </else>\n            </choose>\n         </if>\n      </choose>\n   </macro>\n   <macro name=\"locators\">\n      <choose>\n         <if type=\"article-journal\">\n            <text variable=\"volume\" prefix=\" \"/>\n            <text variable=\"issue\" prefix=\" (\" suffix=\")\"/>\n         </if>\n         <else-if type=\"legal_case\">\n            <text variable=\"volume\" prefix=\", \"/>\n            <text variable=\"container-title\" prefix=\" \"/>\n            <text variable=\"page\" prefix=\" \"/>\n         </else-if>\n         <else-if type=\"bill book graphic legal_case motion_picture report song\" match=\"any\">\n            <group prefix=\". \" delimiter=\". \">\n               <group>\n                  <text term=\"volume\" form=\"short\" text-case=\"capitalize-first\" suffix=\". \" strip-periods=\"true\"/>\n                  <number variable=\"volume\" form=\"numeric\"/>\n               </group>\n               <group>\n                  <number variable=\"number-of-volumes\" form=\"numeric\"/>\n                  <text term=\"volume\" form=\"short\" prefix=\" \" suffix=\".\" plural=\"true\" strip-periods=\"true\"/>\n               </group>\n            </group>\n         </else-if>\n         <else-if type=\"chapter paper-conference\" match=\"any\">\n            <choose>\n               <if variable=\"page\" match=\"none\">\n                  <group prefix=\". \">\n                     <text term=\"volume\" form=\"short\" text-case=\"capitalize-first\" suffix=\". \" strip-periods=\"true\"/>\n                     <number variable=\"volume\" form=\"numeric\"/>\n                  </group>\n               </if>\n            </choose>\n         </else-if>\n      </choose>\n   </macro>\n   <macro name=\"locators-chapter\">\n      <choose>\n         <if type=\"chapter paper-conference\" match=\"any\">\n            <choose>\n               <if variable=\"page\">\n                  <group prefix=\", \">\n                     <text variable=\"volume\" suffix=\":\"/>\n                     <text variable=\"page\"/>\n                  </group>\n               </if>\n            </choose>\n         </if>\n      </choose>\n   </macro>\n   <macro name=\"locators-article\">\n      <choose>\n         <if type=\"article-newspaper\">\n            <group prefix=\", \" delimiter=\", \">\n               <group>\n                  <text variable=\"edition\" suffix=\" \"/>\n                  <text term=\"edition\" prefix=\" \"/>\n               </group>\n               <group>\n                  <text term=\"section\" form=\"short\" suffix=\". \" strip-periods=\"true\"/>\n                  <text variable=\"section\"/>\n               </group>\n            </group>\n         </if>\n         <else-if type=\"article-journal\">\n            <text variable=\"page\" prefix=\": \"/>\n         </else-if>\n      </choose>\n   </macro>\n   <macro name=\"point-locators\">\n      <choose>\n         <if variable=\"locator\">\n            <choose>\n               <if locator=\"page\" match=\"none\">\n                  <choose>\n                     <if type=\"bill book graphic legal_case motion_picture report song\" match=\"any\">\n                        <choose>\n                           <if variable=\"volume\">\n                              <group>\n                                 <text term=\"volume\" form=\"short\" text-case=\"lowercase\" suffix=\". \" strip-periods=\"true\"/>\n                                 <number variable=\"volume\" form=\"numeric\"/>\n                                 <label variable=\"locator\" form=\"short\" prefix=\", \" suffix=\" \"/>\n                              </group>\n                           </if>\n                           <else>\n                              <label variable=\"locator\" form=\"short\" suffix=\" \"/>\n                           </else>\n                        </choose>\n                     </if>\n                  </choose>\n               </if>\n               <else-if type=\"bill book graphic legal_case motion_picture report song\" match=\"any\">\n                  <number variable=\"volume\" form=\"numeric\" suffix=\":\"/>\n               </else-if>\n            </choose>\n            <text variable=\"locator\"/>\n         </if>\n      </choose>\n   </macro>\n   <macro name=\"container-prefix\">\n      <text term=\"in\" text-case=\"capitalize-first\"/>\n   </macro>\n   <macro name=\"container-title\">\n      <choose>\n         <if type=\"chapter paper-conference\" match=\"any\">\n            <text macro=\"container-prefix\" suffix=\" \"/>\n         </if>\n      </choose>\n      <choose>\n         <if type=\"legal_case\" match=\"none\">\n            <text variable=\"container-title\" font-style=\"italic\"/>\n         </if>\n      </choose>\n   </macro>\n   <macro name=\"publisher\">\n      <group delimiter=\": \">\n         <text variable=\"publisher-place\"/>\n         <text variable=\"publisher\"/>\n      </group>\n   </macro>\n   <macro name=\"date\">\n      <date variable=\"issued\">\n         <date-part name=\"year\"/>\n      </date>\n   </macro>\n   <macro name=\"day-month\">\n      <date variable=\"issued\">\n         <date-part name=\"month\"/>\n         <date-part name=\"day\" prefix=\" \"/>\n      </date>\n   </macro>\n   <macro name=\"collection-title\">\n      <text variable=\"collection-title\"/>\n      <text variable=\"collection-number\" prefix=\" \"/>\n   </macro>\n   <macro name=\"event\">\n      <group>\n         <text term=\"presented at\" suffix=\" \"/>\n         <text variable=\"event\"/>\n      </group>\n   </macro>\n   <macro name=\"description\">\n      <choose>\n         <if type=\"interview\">\n            <group delimiter=\". \">\n               <text macro=\"interviewer\"/>\n               <text variable=\"medium\" text-case=\"capitalize-first\"/>\n            </group>\n         </if>\n         <else>\n            <text variable=\"medium\" text-case=\"capitalize-first\" prefix=\". \"/>\n         </else>\n      </choose>\n      <choose>\n         <if variable=\"title\" match=\"none\"/>\n         <else-if type=\"thesis\"/>\n         <else>\n            <text variable=\"genre\" text-case=\"capitalize-first\" prefix=\". \"/>\n         </else>\n      </choose>\n   </macro>\n   <macro name=\"issue\">\n      <choose>\n         <if type=\"article-journal\">\n            <text macro=\"day-month\" prefix=\" (\" suffix=\")\"/>\n         </if>\n         <else-if type=\"legal_case\">\n            <text variable=\"authority\" prefix=\". \"/>\n         </else-if>\n         <else-if type=\"speech\">\n            <group prefix=\" \" delimiter=\", \">\n               <text macro=\"event\"/>\n               <text macro=\"day-month\"/>\n               <text variable=\"event-place\"/>\n            </group>\n         </else-if>\n         <else-if type=\"article-newspaper article-magazine\" match=\"any\">\n            <text macro=\"day-month\" prefix=\", \"/>\n         </else-if>\n         <else>\n            <group prefix=\". \" delimiter=\", \">\n               <choose>\n                  <if type=\"thesis\">\n                     <text variable=\"genre\" text-case=\"capitalize-first\"/>\n                  </if>\n               </choose>\n               <text macro=\"publisher\"/>\n               </group>\n         </else>\n      </choose>\n   </macro>\n   <citation et-al-min=\"4\" et-al-use-first=\"1\" disambiguate-add-year-suffix=\"true\" disambiguate-add-names=\"true\" disambiguate-add-givenname=\"true\" givenname-disambiguation-rule=\"primary-name\">\n      <layout prefix=\"(\" suffix=\")\" delimiter=\"; \">\n         <group delimiter=\", \">\n            <group delimiter=\" \">\n               <text macro=\"contributors-short\"/>\n               <text macro=\"date\"/>\n            </group>\n            <text macro=\"point-locators\"/>\n         </group>\n      </layout>\n   </citation>\n   <bibliography hanging-indent=\"true\" et-al-min=\"11\" et-al-use-first=\"7\" subsequent-author-substitute=\"\226\128\148\226\128\148\226\128\148\" entry-spacing=\"0\">\n      <sort>\n         <key macro=\"contributors\"/>\n         <key variable=\"issued\"/>\n      </sort>\n      <layout suffix=\".\">\n         <text macro=\"contributors\" suffix=\". \"/>\n         <text macro=\"date\" suffix=\". \"/>\n         <text macro=\"title\"/>\n         <text macro=\"description\"/>\n         <text macro=\"secondary-contributors\" prefix=\". \"/>\n         <text macro=\"container-title\" prefix=\". \"/>\n         <text macro=\"container-contributors\"/>\n         <text macro=\"locators-chapter\"/>\n         <text macro=\"edition\" prefix=\". \"/>\n         <text macro=\"locators\"/>\n         <text macro=\"collection-title\" prefix=\". \"/>\n         <text macro=\"issue\"/>\n         <text macro=\"locators-article\"/>\n         <text macro=\"access\" prefix=\". \"/>\n      </layout>\n   </bibliography>\n</style>"),("epub.css","/* This defines styles and classes used in the book */\nbody { margin-left: 5%; margin-right: 5%; margin-top: 5%; margin-bottom: 5%; text-align: justify; font-size: medium; }\ncode { font-family: monospace; }\nh1 { text-align: left; }\nh2 { text-align: left; }\nh3 { text-align: left; }\nh4 { text-align: left; }\nh5 { text-align: left; }\nh6 { text-align: left; }\nh1.title { }\nh2.author { }\nh3.date { }\nol.toc { padding: 0; margin-left: 1em; }\nol.toc li { list-style-type: none; margin: 0; padding: 0; }\n/* For source-code highlighting */\ntable.sourceCode, tr.sourceCode, td.lineNumbers, td.sourceCode, table.sourceCode pre\n   { margin: 0; padding: 0; border: 0; vertical-align: baseline; border: none; }\ntd.lineNumbers { border-right: 1px solid #AAAAAA; text-align: right; color: #AAAAAA; padding-right: 5px; padding-left: 5px; }\ntd.sourceCode { padding-left: 5px; }\npre.sourceCode { }\ncode.sourceCode span.kw { color: #007020; font-weight: bold; }\ncode.sourceCode span.dt { color: #902000; }\ncode.sourceCode span.dv { color: #40a070; }\ncode.sourceCode span.bn { color: #40a070; }\ncode.sourceCode span.fl { color: #40a070; }\ncode.sourceCode span.ch { color: #4070a0; }\ncode.sourceCode span.st { color: #4070a0; }\ncode.sourceCode span.co { color: #60a0b0; font-style: italic; }\ncode.sourceCode span.ot { color: #007020; }\ncode.sourceCode span.al { color: red; font-weight: bold; }\ncode.sourceCode span.fu { color: #06287e; }\ncode.sourceCode span.re { }\ncode.sourceCode span.er { color: red; font-weight: bold; }\n"),("LaTeXMathML.js","/*\nLaTeXMathML.js from http://math.etsu.edu/LaTeXMathML/\nAdapted by Jeff Knisely and Douglas Woodall from ASCIIMathML.js v. 1.4.7,\n(c) 2005 Peter Jipsen http://www.chapman.edu/~jipsen.\nReleased under the GNU General Public License version 2 or later.\nSee the GNU General Public License (at http://www.gnu.org/copyleft/gpl.html)\nfor more details.\n*/\nvar checkForMathML=true;var notifyIfNoMathML=true;var alertIfNoMathML=false;var mathcolor=\"\";var mathfontfamily=\"\";var showasciiformulaonhover=true;var isIE=document.createElementNS==null;if(document.getElementById==null)\nalert(\"This webpage requires a recent browser such as \\nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer\")\nfunction AMcreateElementXHTML(t){if(isIE)return document.createElement(t);else return document.createElementNS(\"http://www.w3.org/1999/xhtml\",t);}\nfunction AMnoMathMLNote(){var nd=AMcreateElementXHTML(\"h3\");nd.setAttribute(\"align\",\"center\")\nnd.appendChild(AMcreateElementXHTML(\"p\"));nd.appendChild(document.createTextNode(\"To view the \"));var an=AMcreateElementXHTML(\"a\");an.appendChild(document.createTextNode(\"LaTeXMathML\"));an.setAttribute(\"href\",\"http://www.maths.nott.ac.uk/personal/drw/lm.html\");nd.appendChild(an);nd.appendChild(document.createTextNode(\" notation use Internet Explorer 6+\"));an=AMcreateElementXHTML(\"a\");an.appendChild(document.createTextNode(\"MathPlayer\"));an.setAttribute(\"href\",\"http://www.dessci.com/en/products/mathplayer/download.htm\");nd.appendChild(an);nd.appendChild(document.createTextNode(\" or Netscape/Mozilla/Firefox\"));nd.appendChild(AMcreateElementXHTML(\"p\"));return nd;}\nfunction AMisMathMLavailable(){if(navigator.appName.slice(0,8)==\"Netscape\")\nif(navigator.appVersion.slice(0,1)>=\"5\")return null;else return AMnoMathMLNote();else if(navigator.appName.slice(0,9)==\"Microsoft\")\ntry{var ActiveX=new ActiveXObject(\"MathPlayer.Factory.1\");return null;}catch(e){return AMnoMathMLNote();}\nelse return AMnoMathMLNote();}\nvar AMcal=[0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46];var AMfrk=[0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128];var AMbbb=[0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124];var CONST=0,UNARY=1,BINARY=2,INFIX=3,LEFTBRACKET=4,RIGHTBRACKET=5,SPACE=6,UNDEROVER=7,DEFINITION=8,TEXT=9,BIG=10,LONG=11,STRETCHY=12,MATRIX=13;var AMsqrt={input:\"\\\\sqrt\",tag:\"msqrt\",output:\"sqrt\",ttype:UNARY},AMroot={input:\"\\\\root\",tag:\"mroot\",output:\"root\",ttype:BINARY},AMfrac={input:\"\\\\frac\",tag:\"mfrac\",output:\"/\",ttype:BINARY},AMover={input:\"\\\\stackrel\",tag:\"mover\",output:\"stackrel\",ttype:BINARY},AMatop={input:\"\\\\atop\",tag:\"mfrac\",output:\"\",ttype:INFIX},AMchoose={input:\"\\\\choose\",tag:\"mfrac\",output:\"\",ttype:INFIX},AMsub={input:\"_\",tag:\"msub\",output:\"_\",ttype:INFIX},AMsup={input:\"^\",tag:\"msup\",output:\"^\",ttype:INFIX},AMtext={input:\"\\\\mathrm\",tag:\"mtext\",output:\"text\",ttype:TEXT},AMmbox={input:\"\\\\mbox\",tag:\"mtext\",output:\"mbox\",ttype:TEXT};var AMsymbols=[{input:\"\\\\alpha\",tag:\"mi\",output:\"\\u03B1\",ttype:CONST},{input:\"\\\\beta\",tag:\"mi\",output:\"\\u03B2\",ttype:CONST},{input:\"\\\\gamma\",tag:\"mi\",output:\"\\u03B3\",ttype:CONST},{input:\"\\\\delta\",tag:\"mi\",output:\"\\u03B4\",ttype:CONST},{input:\"\\\\epsilon\",tag:\"mi\",output:\"\\u03B5\",ttype:CONST},{input:\"\\\\varepsilon\",tag:\"mi\",output:\"\\u025B\",ttype:CONST},{input:\"\\\\zeta\",tag:\"mi\",output:\"\\u03B6\",ttype:CONST},{input:\"\\\\eta\",tag:\"mi\",output:\"\\u03B7\",ttype:CONST},{input:\"\\\\theta\",tag:\"mi\",output:\"\\u03B8\",ttype:CONST},{input:\"\\\\vartheta\",tag:\"mi\",output:\"\\u03D1\",ttype:CONST},{input:\"\\\\iota\",tag:\"mi\",output:\"\\u03B9\",ttype:CONST},{input:\"\\\\kappa\",tag:\"mi\",output:\"\\u03BA\",ttype:CONST},{input:\"\\\\lambda\",tag:\"mi\",output:\"\\u03BB\",ttype:CONST},{input:\"\\\\mu\",tag:\"mi\",output:\"\\u03BC\",ttype:CONST},{input:\"\\\\nu\",tag:\"mi\",output:\"\\u03BD\",ttype:CONST},{input:\"\\\\xi\",tag:\"mi\",output:\"\\u03BE\",ttype:CONST},{input:\"\\\\pi\",tag:\"mi\",output:\"\\u03C0\",ttype:CONST},{input:\"\\\\varpi\",tag:\"mi\",output:\"\\u03D6\",ttype:CONST},{input:\"\\\\rho\",tag:\"mi\",output:\"\\u03C1\",ttype:CONST},{input:\"\\\\varrho\",tag:\"mi\",output:\"\\u03F1\",ttype:CONST},{input:\"\\\\varsigma\",tag:\"mi\",output:\"\\u03C2\",ttype:CONST},{input:\"\\\\sigma\",tag:\"mi\",output:\"\\u03C3\",ttype:CONST},{input:\"\\\\tau\",tag:\"mi\",output:\"\\u03C4\",ttype:CONST},{input:\"\\\\upsilon\",tag:\"mi\",output:\"\\u03C5\",ttype:CONST},{input:\"\\\\phi\",tag:\"mi\",output:\"\\u03C6\",ttype:CONST},{input:\"\\\\varphi\",tag:\"mi\",output:\"\\u03D5\",ttype:CONST},{input:\"\\\\chi\",tag:\"mi\",output:\"\\u03C7\",ttype:CONST},{input:\"\\\\psi\",tag:\"mi\",output:\"\\u03C8\",ttype:CONST},{input:\"\\\\omega\",tag:\"mi\",output:\"\\u03C9\",ttype:CONST},{input:\"\\\\Gamma\",tag:\"mo\",output:\"\\u0393\",ttype:CONST},{input:\"\\\\Delta\",tag:\"mo\",output:\"\\u0394\",ttype:CONST},{input:\"\\\\Theta\",tag:\"mo\",output:\"\\u0398\",ttype:CONST},{input:\"\\\\Lambda\",tag:\"mo\",output:\"\\u039B\",ttype:CONST},{input:\"\\\\Xi\",tag:\"mo\",output:\"\\u039E\",ttype:CONST},{input:\"\\\\Pi\",tag:\"mo\",output:\"\\u03A0\",ttype:CONST},{input:\"\\\\Sigma\",tag:\"mo\",output:\"\\u03A3\",ttype:CONST},{input:\"\\\\Upsilon\",tag:\"mo\",output:\"\\u03A5\",ttype:CONST},{input:\"\\\\Phi\",tag:\"mo\",output:\"\\u03A6\",ttype:CONST},{input:\"\\\\Psi\",tag:\"mo\",output:\"\\u03A8\",ttype:CONST},{input:\"\\\\Omega\",tag:\"mo\",output:\"\\u03A9\",ttype:CONST},{input:\"\\\\frac12\",tag:\"mo\",output:\"\\u00BD\",ttype:CONST},{input:\"\\\\frac14\",tag:\"mo\",output:\"\\u00BC\",ttype:CONST},{input:\"\\\\frac34\",tag:\"mo\",output:\"\\u00BE\",ttype:CONST},{input:\"\\\\frac13\",tag:\"mo\",output:\"\\u2153\",ttype:CONST},{input:\"\\\\frac23\",tag:\"mo\",output:\"\\u2154\",ttype:CONST},{input:\"\\\\frac15\",tag:\"mo\",output:\"\\u2155\",ttype:CONST},{input:\"\\\\frac25\",tag:\"mo\",output:\"\\u2156\",ttype:CONST},{input:\"\\\\frac35\",tag:\"mo\",output:\"\\u2157\",ttype:CONST},{input:\"\\\\frac45\",tag:\"mo\",output:\"\\u2158\",ttype:CONST},{input:\"\\\\frac16\",tag:\"mo\",output:\"\\u2159\",ttype:CONST},{input:\"\\\\frac56\",tag:\"mo\",output:\"\\u215A\",ttype:CONST},{input:\"\\\\frac18\",tag:\"mo\",output:\"\\u215B\",ttype:CONST},{input:\"\\\\frac38\",tag:\"mo\",output:\"\\u215C\",ttype:CONST},{input:\"\\\\frac58\",tag:\"mo\",output:\"\\u215D\",ttype:CONST},{input:\"\\\\frac78\",tag:\"mo\",output:\"\\u215E\",ttype:CONST},{input:\"\\\\pm\",tag:\"mo\",output:\"\\u00B1\",ttype:CONST},{input:\"\\\\mp\",tag:\"mo\",output:\"\\u2213\",ttype:CONST},{input:\"\\\\triangleleft\",tag:\"mo\",output:\"\\u22B2\",ttype:CONST},{input:\"\\\\triangleright\",tag:\"mo\",output:\"\\u22B3\",ttype:CONST},{input:\"\\\\cdot\",tag:\"mo\",output:\"\\u22C5\",ttype:CONST},{input:\"\\\\star\",tag:\"mo\",output:\"\\u22C6\",ttype:CONST},{input:\"\\\\ast\",tag:\"mo\",output:\"\\u002A\",ttype:CONST},{input:\"\\\\times\",tag:\"mo\",output:\"\\u00D7\",ttype:CONST},{input:\"\\\\div\",tag:\"mo\",output:\"\\u00F7\",ttype:CONST},{input:\"\\\\circ\",tag:\"mo\",output:\"\\u2218\",ttype:CONST},{input:\"\\\\bullet\",tag:\"mo\",output:\"\\u2022\",ttype:CONST},{input:\"\\\\oplus\",tag:\"mo\",output:\"\\u2295\",ttype:CONST},{input:\"\\\\ominus\",tag:\"mo\",output:\"\\u2296\",ttype:CONST},{input:\"\\\\otimes\",tag:\"mo\",output:\"\\u2297\",ttype:CONST},{input:\"\\\\bigcirc\",tag:\"mo\",output:\"\\u25CB\",ttype:CONST},{input:\"\\\\oslash\",tag:\"mo\",output:\"\\u2298\",ttype:CONST},{input:\"\\\\odot\",tag:\"mo\",output:\"\\u2299\",ttype:CONST},{input:\"\\\\land\",tag:\"mo\",output:\"\\u2227\",ttype:CONST},{input:\"\\\\wedge\",tag:\"mo\",output:\"\\u2227\",ttype:CONST},{input:\"\\\\lor\",tag:\"mo\",output:\"\\u2228\",ttype:CONST},{input:\"\\\\vee\",tag:\"mo\",output:\"\\u2228\",ttype:CONST},{input:\"\\\\cap\",tag:\"mo\",output:\"\\u2229\",ttype:CONST},{input:\"\\\\cup\",tag:\"mo\",output:\"\\u222A\",ttype:CONST},{input:\"\\\\sqcap\",tag:\"mo\",output:\"\\u2293\",ttype:CONST},{input:\"\\\\sqcup\",tag:\"mo\",output:\"\\u2294\",ttype:CONST},{input:\"\\\\uplus\",tag:\"mo\",output:\"\\u228E\",ttype:CONST},{input:\"\\\\amalg\",tag:\"mo\",output:\"\\u2210\",ttype:CONST},{input:\"\\\\bigtriangleup\",tag:\"mo\",output:\"\\u25B3\",ttype:CONST},{input:\"\\\\bigtriangledown\",tag:\"mo\",output:\"\\u25BD\",ttype:CONST},{input:\"\\\\dag\",tag:\"mo\",output:\"\\u2020\",ttype:CONST},{input:\"\\\\dagger\",tag:\"mo\",output:\"\\u2020\",ttype:CONST},{input:\"\\\\ddag\",tag:\"mo\",output:\"\\u2021\",ttype:CONST},{input:\"\\\\ddagger\",tag:\"mo\",output:\"\\u2021\",ttype:CONST},{input:\"\\\\lhd\",tag:\"mo\",output:\"\\u22B2\",ttype:CONST},{input:\"\\\\rhd\",tag:\"mo\",output:\"\\u22B3\",ttype:CONST},{input:\"\\\\unlhd\",tag:\"mo\",output:\"\\u22B4\",ttype:CONST},{input:\"\\\\unrhd\",tag:\"mo\",output:\"\\u22B5\",ttype:CONST},{input:\"\\\\sum\",tag:\"mo\",output:\"\\u2211\",ttype:UNDEROVER},{input:\"\\\\prod\",tag:\"mo\",output:\"\\u220F\",ttype:UNDEROVER},{input:\"\\\\bigcap\",tag:\"mo\",output:\"\\u22C2\",ttype:UNDEROVER},{input:\"\\\\bigcup\",tag:\"mo\",output:\"\\u22C3\",ttype:UNDEROVER},{input:\"\\\\bigwedge\",tag:\"mo\",output:\"\\u22C0\",ttype:UNDEROVER},{input:\"\\\\bigvee\",tag:\"mo\",output:\"\\u22C1\",ttype:UNDEROVER},{input:\"\\\\bigsqcap\",tag:\"mo\",output:\"\\u2A05\",ttype:UNDEROVER},{input:\"\\\\bigsqcup\",tag:\"mo\",output:\"\\u2A06\",ttype:UNDEROVER},{input:\"\\\\coprod\",tag:\"mo\",output:\"\\u2210\",ttype:UNDEROVER},{input:\"\\\\bigoplus\",tag:\"mo\",output:\"\\u2A01\",ttype:UNDEROVER},{input:\"\\\\bigotimes\",tag:\"mo\",output:\"\\u2A02\",ttype:UNDEROVER},{input:\"\\\\bigodot\",tag:\"mo\",output:\"\\u2A00\",ttype:UNDEROVER},{input:\"\\\\biguplus\",tag:\"mo\",output:\"\\u2A04\",ttype:UNDEROVER},{input:\"\\\\int\",tag:\"mo\",output:\"\\u222B\",ttype:CONST},{input:\"\\\\oint\",tag:\"mo\",output:\"\\u222E\",ttype:CONST},{input:\":=\",tag:\"mo\",output:\":=\",ttype:CONST},{input:\"\\\\lt\",tag:\"mo\",output:\"<\",ttype:CONST},{input:\"\\\\gt\",tag:\"mo\",output:\">\",ttype:CONST},{input:\"\\\\ne\",tag:\"mo\",output:\"\\u2260\",ttype:CONST},{input:\"\\\\neq\",tag:\"mo\",output:\"\\u2260\",ttype:CONST},{input:\"\\\\le\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\leq\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\leqslant\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\ge\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\geq\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\geqslant\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\equiv\",tag:\"mo\",output:\"\\u2261\",ttype:CONST},{input:\"\\\\ll\",tag:\"mo\",output:\"\\u226A\",ttype:CONST},{input:\"\\\\gg\",tag:\"mo\",output:\"\\u226B\",ttype:CONST},{input:\"\\\\doteq\",tag:\"mo\",output:\"\\u2250\",ttype:CONST},{input:\"\\\\prec\",tag:\"mo\",output:\"\\u227A\",ttype:CONST},{input:\"\\\\succ\",tag:\"mo\",output:\"\\u227B\",ttype:CONST},{input:\"\\\\preceq\",tag:\"mo\",output:\"\\u227C\",ttype:CONST},{input:\"\\\\succeq\",tag:\"mo\",output:\"\\u227D\",ttype:CONST},{input:\"\\\\subset\",tag:\"mo\",output:\"\\u2282\",ttype:CONST},{input:\"\\\\supset\",tag:\"mo\",output:\"\\u2283\",ttype:CONST},{input:\"\\\\subseteq\",tag:\"mo\",output:\"\\u2286\",ttype:CONST},{input:\"\\\\supseteq\",tag:\"mo\",output:\"\\u2287\",ttype:CONST},{input:\"\\\\sqsubset\",tag:\"mo\",output:\"\\u228F\",ttype:CONST},{input:\"\\\\sqsupset\",tag:\"mo\",output:\"\\u2290\",ttype:CONST},{input:\"\\\\sqsubseteq\",tag:\"mo\",output:\"\\u2291\",ttype:CONST},{input:\"\\\\sqsupseteq\",tag:\"mo\",output:\"\\u2292\",ttype:CONST},{input:\"\\\\sim\",tag:\"mo\",output:\"\\u223C\",ttype:CONST},{input:\"\\\\simeq\",tag:\"mo\",output:\"\\u2243\",ttype:CONST},{input:\"\\\\approx\",tag:\"mo\",output:\"\\u2248\",ttype:CONST},{input:\"\\\\cong\",tag:\"mo\",output:\"\\u2245\",ttype:CONST},{input:\"\\\\Join\",tag:\"mo\",output:\"\\u22C8\",ttype:CONST},{input:\"\\\\bowtie\",tag:\"mo\",output:\"\\u22C8\",ttype:CONST},{input:\"\\\\in\",tag:\"mo\",output:\"\\u2208\",ttype:CONST},{input:\"\\\\ni\",tag:\"mo\",output:\"\\u220B\",ttype:CONST},{input:\"\\\\owns\",tag:\"mo\",output:\"\\u220B\",ttype:CONST},{input:\"\\\\propto\",tag:\"mo\",output:\"\\u221D\",ttype:CONST},{input:\"\\\\vdash\",tag:\"mo\",output:\"\\u22A2\",ttype:CONST},{input:\"\\\\dashv\",tag:\"mo\",output:\"\\u22A3\",ttype:CONST},{input:\"\\\\models\",tag:\"mo\",output:\"\\u22A8\",ttype:CONST},{input:\"\\\\perp\",tag:\"mo\",output:\"\\u22A5\",ttype:CONST},{input:\"\\\\smile\",tag:\"mo\",output:\"\\u2323\",ttype:CONST},{input:\"\\\\frown\",tag:\"mo\",output:\"\\u2322\",ttype:CONST},{input:\"\\\\asymp\",tag:\"mo\",output:\"\\u224D\",ttype:CONST},{input:\"\\\\notin\",tag:\"mo\",output:\"\\u2209\",ttype:CONST},{input:\"\\\\begin{eqnarray}\",output:\"X\",ttype:MATRIX,invisible:true},{input:\"\\\\begin{array}\",output:\"X\",ttype:MATRIX,invisible:true},{input:\"\\\\\\\\\",output:\"}&{\",ttype:DEFINITION},{input:\"\\\\end{eqnarray}\",output:\"}}\",ttype:DEFINITION},{input:\"\\\\end{array}\",output:\"}}\",ttype:DEFINITION},{input:\"\\\\big\",tag:\"mo\",output:\"X\",atval:\"1.2\",ieval:\"2.2\",ttype:BIG},{input:\"\\\\Big\",tag:\"mo\",output:\"X\",atval:\"1.6\",ieval:\"2.6\",ttype:BIG},{input:\"\\\\bigg\",tag:\"mo\",output:\"X\",atval:\"2.2\",ieval:\"3.2\",ttype:BIG},{input:\"\\\\Bigg\",tag:\"mo\",output:\"X\",atval:\"2.9\",ieval:\"3.9\",ttype:BIG},{input:\"\\\\left\",tag:\"mo\",output:\"X\",ttype:LEFTBRACKET},{input:\"\\\\right\",tag:\"mo\",output:\"X\",ttype:RIGHTBRACKET},{input:\"{\",output:\"{\",ttype:LEFTBRACKET,invisible:true},{input:\"}\",output:\"}\",ttype:RIGHTBRACKET,invisible:true},{input:\"(\",tag:\"mo\",output:\"(\",atval:\"1\",ttype:STRETCHY},{input:\"[\",tag:\"mo\",output:\"[\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lbrack\",tag:\"mo\",output:\"[\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\{\",tag:\"mo\",output:\"{\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lbrace\",tag:\"mo\",output:\"{\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\langle\",tag:\"mo\",output:\"\\u2329\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lfloor\",tag:\"mo\",output:\"\\u230A\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lceil\",tag:\"mo\",output:\"\\u2308\",atval:\"1\",ttype:STRETCHY},{input:\")\",tag:\"mo\",output:\")\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"]\",tag:\"mo\",output:\"]\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rbrack\",tag:\"mo\",output:\"]\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\}\",tag:\"mo\",output:\"}\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rbrace\",tag:\"mo\",output:\"}\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rangle\",tag:\"mo\",output:\"\\u232A\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rfloor\",tag:\"mo\",output:\"\\u230B\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rceil\",tag:\"mo\",output:\"\\u2309\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"|\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\|\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\vert\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\Vert\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\mid\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\parallel\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"/\",tag:\"mo\",output:\"/\",atval:\"1.01\",ttype:STRETCHY},{input:\"\\\\backslash\",tag:\"mo\",output:\"\\u2216\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\setminus\",tag:\"mo\",output:\"\\\\\",ttype:CONST},{input:\"\\\\!\",tag:\"mspace\",atname:\"width\",atval:\"-0.167em\",ttype:SPACE},{input:\"\\\\,\",tag:\"mspace\",atname:\"width\",atval:\"0.167em\",ttype:SPACE},{input:\"\\\\>\",tag:\"mspace\",atname:\"width\",atval:\"0.222em\",ttype:SPACE},{input:\"\\\\:\",tag:\"mspace\",atname:\"width\",atval:\"0.222em\",ttype:SPACE},{input:\"\\\\;\",tag:\"mspace\",atname:\"width\",atval:\"0.278em\",ttype:SPACE},{input:\"~\",tag:\"mspace\",atname:\"width\",atval:\"0.333em\",ttype:SPACE},{input:\"\\\\quad\",tag:\"mspace\",atname:\"width\",atval:\"1em\",ttype:SPACE},{input:\"\\\\qquad\",tag:\"mspace\",atname:\"width\",atval:\"2em\",ttype:SPACE},{input:\"\\\\prime\",tag:\"mo\",output:\"\\u2032\",ttype:CONST},{input:\"'\",tag:\"mo\",output:\"\\u02B9\",ttype:CONST},{input:\"''\",tag:\"mo\",output:\"\\u02BA\",ttype:CONST},{input:\"'''\",tag:\"mo\",output:\"\\u2034\",ttype:CONST},{input:\"''''\",tag:\"mo\",output:\"\\u2057\",ttype:CONST},{input:\"\\\\ldots\",tag:\"mo\",output:\"\\u2026\",ttype:CONST},{input:\"\\\\cdots\",tag:\"mo\",output:\"\\u22EF\",ttype:CONST},{input:\"\\\\vdots\",tag:\"mo\",output:\"\\u22EE\",ttype:CONST},{input:\"\\\\ddots\",tag:\"mo\",output:\"\\u22F1\",ttype:CONST},{input:\"\\\\forall\",tag:\"mo\",output:\"\\u2200\",ttype:CONST},{input:\"\\\\exists\",tag:\"mo\",output:\"\\u2203\",ttype:CONST},{input:\"\\\\Re\",tag:\"mo\",output:\"\\u211C\",ttype:CONST},{input:\"\\\\Im\",tag:\"mo\",output:\"\\u2111\",ttype:CONST},{input:\"\\\\aleph\",tag:\"mo\",output:\"\\u2135\",ttype:CONST},{input:\"\\\\hbar\",tag:\"mo\",output:\"\\u210F\",ttype:CONST},{input:\"\\\\ell\",tag:\"mo\",output:\"\\u2113\",ttype:CONST},{input:\"\\\\wp\",tag:\"mo\",output:\"\\u2118\",ttype:CONST},{input:\"\\\\emptyset\",tag:\"mo\",output:\"\\u2205\",ttype:CONST},{input:\"\\\\infty\",tag:\"mo\",output:\"\\u221E\",ttype:CONST},{input:\"\\\\surd\",tag:\"mo\",output:\"\\\\sqrt{}\",ttype:DEFINITION},{input:\"\\\\partial\",tag:\"mo\",output:\"\\u2202\",ttype:CONST},{input:\"\\\\nabla\",tag:\"mo\",output:\"\\u2207\",ttype:CONST},{input:\"\\\\triangle\",tag:\"mo\",output:\"\\u25B3\",ttype:CONST},{input:\"\\\\therefore\",tag:\"mo\",output:\"\\u2234\",ttype:CONST},{input:\"\\\\angle\",tag:\"mo\",output:\"\\u2220\",ttype:CONST},{input:\"\\\\diamond\",tag:\"mo\",output:\"\\u22C4\",ttype:CONST},{input:\"\\\\Diamond\",tag:\"mo\",output:\"\\u25C7\",ttype:CONST},{input:\"\\\\neg\",tag:\"mo\",output:\"\\u00AC\",ttype:CONST},{input:\"\\\\lnot\",tag:\"mo\",output:\"\\u00AC\",ttype:CONST},{input:\"\\\\bot\",tag:\"mo\",output:\"\\u22A5\",ttype:CONST},{input:\"\\\\top\",tag:\"mo\",output:\"\\u22A4\",ttype:CONST},{input:\"\\\\square\",tag:\"mo\",output:\"\\u25AB\",ttype:CONST},{input:\"\\\\Box\",tag:\"mo\",output:\"\\u25A1\",ttype:CONST},{input:\"\\\\wr\",tag:\"mo\",output:\"\\u2240\",ttype:CONST},{input:\"\\\\arccos\",tag:\"mi\",output:\"arccos\",ttype:UNARY,func:true},{input:\"\\\\arcsin\",tag:\"mi\",output:\"arcsin\",ttype:UNARY,func:true},{input:\"\\\\arctan\",tag:\"mi\",output:\"arctan\",ttype:UNARY,func:true},{input:\"\\\\arg\",tag:\"mi\",output:\"arg\",ttype:UNARY,func:true},{input:\"\\\\cos\",tag:\"mi\",output:\"cos\",ttype:UNARY,func:true},{input:\"\\\\cosh\",tag:\"mi\",output:\"cosh\",ttype:UNARY,func:true},{input:\"\\\\cot\",tag:\"mi\",output:\"cot\",ttype:UNARY,func:true},{input:\"\\\\coth\",tag:\"mi\",output:\"coth\",ttype:UNARY,func:true},{input:\"\\\\csc\",tag:\"mi\",output:\"csc\",ttype:UNARY,func:true},{input:\"\\\\deg\",tag:\"mi\",output:\"deg\",ttype:UNARY,func:true},{input:\"\\\\det\",tag:\"mi\",output:\"det\",ttype:UNARY,func:true},{input:\"\\\\dim\",tag:\"mi\",output:\"dim\",ttype:UNARY,func:true},{input:\"\\\\exp\",tag:\"mi\",output:\"exp\",ttype:UNARY,func:true},{input:\"\\\\gcd\",tag:\"mi\",output:\"gcd\",ttype:UNARY,func:true},{input:\"\\\\hom\",tag:\"mi\",output:\"hom\",ttype:UNARY,func:true},{input:\"\\\\inf\",tag:\"mo\",output:\"inf\",ttype:UNDEROVER},{input:\"\\\\ker\",tag:\"mi\",output:\"ker\",ttype:UNARY,func:true},{input:\"\\\\lg\",tag:\"mi\",output:\"lg\",ttype:UNARY,func:true},{input:\"\\\\lim\",tag:\"mo\",output:\"lim\",ttype:UNDEROVER},{input:\"\\\\liminf\",tag:\"mo\",output:\"liminf\",ttype:UNDEROVER},{input:\"\\\\limsup\",tag:\"mo\",output:\"limsup\",ttype:UNDEROVER},{input:\"\\\\ln\",tag:\"mi\",output:\"ln\",ttype:UNARY,func:true},{input:\"\\\\log\",tag:\"mi\",output:\"log\",ttype:UNARY,func:true},{input:\"\\\\max\",tag:\"mo\",output:\"max\",ttype:UNDEROVER},{input:\"\\\\min\",tag:\"mo\",output:\"min\",ttype:UNDEROVER},{input:\"\\\\Pr\",tag:\"mi\",output:\"Pr\",ttype:UNARY,func:true},{input:\"\\\\sec\",tag:\"mi\",output:\"sec\",ttype:UNARY,func:true},{input:\"\\\\sin\",tag:\"mi\",output:\"sin\",ttype:UNARY,func:true},{input:\"\\\\sinh\",tag:\"mi\",output:\"sinh\",ttype:UNARY,func:true},{input:\"\\\\sup\",tag:\"mo\",output:\"sup\",ttype:UNDEROVER},{input:\"\\\\tan\",tag:\"mi\",output:\"tan\",ttype:UNARY,func:true},{input:\"\\\\tanh\",tag:\"mi\",output:\"tanh\",ttype:UNARY,func:true},{input:\"\\\\gets\",tag:\"mo\",output:\"\\u2190\",ttype:CONST},{input:\"\\\\leftarrow\",tag:\"mo\",output:\"\\u2190\",ttype:CONST},{input:\"\\\\to\",tag:\"mo\",output:\"\\u2192\",ttype:CONST},{input:\"\\\\rightarrow\",tag:\"mo\",output:\"\\u2192\",ttype:CONST},{input:\"\\\\leftrightarrow\",tag:\"mo\",output:\"\\u2194\",ttype:CONST},{input:\"\\\\uparrow\",tag:\"mo\",output:\"\\u2191\",ttype:CONST},{input:\"\\\\downarrow\",tag:\"mo\",output:\"\\u2193\",ttype:CONST},{input:\"\\\\updownarrow\",tag:\"mo\",output:\"\\u2195\",ttype:CONST},{input:\"\\\\Leftarrow\",tag:\"mo\",output:\"\\u21D0\",ttype:CONST},{input:\"\\\\Rightarrow\",tag:\"mo\",output:\"\\u21D2\",ttype:CONST},{input:\"\\\\Leftrightarrow\",tag:\"mo\",output:\"\\u21D4\",ttype:CONST},{input:\"\\\\iff\",tag:\"mo\",output:\"~\\\\Longleftrightarrow~\",ttype:DEFINITION},{input:\"\\\\Uparrow\",tag:\"mo\",output:\"\\u21D1\",ttype:CONST},{input:\"\\\\Downarrow\",tag:\"mo\",output:\"\\u21D3\",ttype:CONST},{input:\"\\\\Updownarrow\",tag:\"mo\",output:\"\\u21D5\",ttype:CONST},{input:\"\\\\mapsto\",tag:\"mo\",output:\"\\u21A6\",ttype:CONST},{input:\"\\\\longleftarrow\",tag:\"mo\",output:\"\\u2190\",ttype:LONG},{input:\"\\\\longrightarrow\",tag:\"mo\",output:\"\\u2192\",ttype:LONG},{input:\"\\\\longleftrightarrow\",tag:\"mo\",output:\"\\u2194\",ttype:LONG},{input:\"\\\\Longleftarrow\",tag:\"mo\",output:\"\\u21D0\",ttype:LONG},{input:\"\\\\Longrightarrow\",tag:\"mo\",output:\"\\u21D2\",ttype:LONG},{input:\"\\\\Longleftrightarrow\",tag:\"mo\",output:\"\\u21D4\",ttype:LONG},{input:\"\\\\longmapsto\",tag:\"mo\",output:\"\\u21A6\",ttype:CONST},AMsqrt,AMroot,AMfrac,AMover,AMsub,AMsup,AMtext,AMmbox,AMatop,AMchoose,{input:\"\\\\acute\",tag:\"mover\",output:\"\\u00B4\",ttype:UNARY,acc:true},{input:\"\\\\grave\",tag:\"mover\",output:\"\\u0060\",ttype:UNARY,acc:true},{input:\"\\\\breve\",tag:\"mover\",output:\"\\u02D8\",ttype:UNARY,acc:true},{input:\"\\\\check\",tag:\"mover\",output:\"\\u02C7\",ttype:UNARY,acc:true},{input:\"\\\\dot\",tag:\"mover\",output:\".\",ttype:UNARY,acc:true},{input:\"\\\\ddot\",tag:\"mover\",output:\"..\",ttype:UNARY,acc:true},{input:\"\\\\mathring\",tag:\"mover\",output:\"\\u00B0\",ttype:UNARY,acc:true},{input:\"\\\\vec\",tag:\"mover\",output:\"\\u20D7\",ttype:UNARY,acc:true},{input:\"\\\\overrightarrow\",tag:\"mover\",output:\"\\u20D7\",ttype:UNARY,acc:true},{input:\"\\\\overleftarrow\",tag:\"mover\",output:\"\\u20D6\",ttype:UNARY,acc:true},{input:\"\\\\hat\",tag:\"mover\",output:\"\\u005E\",ttype:UNARY,acc:true},{input:\"\\\\widehat\",tag:\"mover\",output:\"\\u0302\",ttype:UNARY,acc:true},{input:\"\\\\tilde\",tag:\"mover\",output:\"~\",ttype:UNARY,acc:true},{input:\"\\\\widetilde\",tag:\"mover\",output:\"\\u02DC\",ttype:UNARY,acc:true},{input:\"\\\\bar\",tag:\"mover\",output:\"\\u203E\",ttype:UNARY,acc:true},{input:\"\\\\overbrace\",tag:\"mover\",output:\"\\uFE37\",ttype:UNARY,acc:true},{input:\"\\\\overbracket\",tag:\"mover\",output:\"\\u23B4\",ttype:UNARY,acc:true},{input:\"\\\\overline\",tag:\"mover\",output:\"\\u00AF\",ttype:UNARY,acc:true},{input:\"\\\\underbrace\",tag:\"munder\",output:\"\\uFE38\",ttype:UNARY,acc:true},{input:\"\\\\underbracket\",tag:\"munder\",output:\"\\u23B5\",ttype:UNARY,acc:true},{input:\"\\\\underline\",tag:\"munder\",output:\"\\u00AF\",ttype:UNARY,acc:true},{input:\"\\\\displaystyle\",tag:\"mstyle\",atname:\"displaystyle\",atval:\"true\",ttype:UNARY},{input:\"\\\\textstyle\",tag:\"mstyle\",atname:\"displaystyle\",atval:\"false\",ttype:UNARY},{input:\"\\\\scriptstyle\",tag:\"mstyle\",atname:\"scriptlevel\",atval:\"1\",ttype:UNARY},{input:\"\\\\scriptscriptstyle\",tag:\"mstyle\",atname:\"scriptlevel\",atval:\"2\",ttype:UNARY},{input:\"\\\\textrm\",tag:\"mstyle\",output:\"\\\\mathrm\",ttype:DEFINITION},{input:\"\\\\mathbf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"bold\",ttype:UNARY},{input:\"\\\\textbf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"bold\",ttype:UNARY},{input:\"\\\\mathit\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"italic\",ttype:UNARY},{input:\"\\\\textit\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"italic\",ttype:UNARY},{input:\"\\\\mathtt\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"monospace\",ttype:UNARY},{input:\"\\\\texttt\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"monospace\",ttype:UNARY},{input:\"\\\\mathsf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"sans-serif\",ttype:UNARY},{input:\"\\\\mathbb\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"double-struck\",ttype:UNARY,codes:AMbbb},{input:\"\\\\mathcal\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"script\",ttype:UNARY,codes:AMcal},{input:\"\\\\mathfrak\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"fraktur\",ttype:UNARY,codes:AMfrk},{input:\"\\\\textcolor\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"mathcolor\",ttype:BINARY},{input:\"\\\\colorbox\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"background\",ttype:BINARY}];function compareNames(s1,s2){if(s1.input>s2.input)return 1\nelse return-1;}\nvar AMnames=[];function AMinitSymbols(){AMsymbols.sort(compareNames);for(i=0;i<AMsymbols.length;i++)AMnames[i]=AMsymbols[i].input;}\nvar AMmathml=\"http://www.w3.org/1998/Math/MathML\";function AMcreateElementMathML(t){if(isIE)return document.createElement(\"m:\"+t);else return document.createElementNS(AMmathml,t);}\nfunction AMcreateMmlNode(t,frag){if(isIE)var node=document.createElement(\"m:\"+t);else var node=document.createElementNS(AMmathml,t);node.appendChild(frag);return node;}\nfunction newcommand(oldstr,newstr){AMsymbols=AMsymbols.concat([{input:oldstr,tag:\"mo\",output:newstr,ttype:DEFINITION}]);}\nfunction AMremoveCharsAndBlanks(str,n){var st;st=str.slice(n);for(var i=0;i<st.length&&st.charCodeAt(i)<=32;i=i+1);return st.slice(i);}\nfunction AMposition(arr,str,n){if(n==0){var h,m;n=-1;h=arr.length;while(n+1<h){m=(n+h)>>1;if(arr[m]<str)n=m;else h=m;}\nreturn h;}else\nfor(var i=n;i<arr.length&&arr[i]<str;i++);return i;}\nfunction AMgetSymbol(str){var k=0;var j=0;var mk;var st;var tagst;var match=\"\";var more=true;for(var i=1;i<=str.length&&more;i++){st=str.slice(0,i);j=k;k=AMposition(AMnames,st,j);if(k<AMnames.length&&str.slice(0,AMnames[k].length)==AMnames[k]){match=AMnames[k];mk=k;i=match.length;}\nmore=k<AMnames.length&&str.slice(0,AMnames[k].length)>=AMnames[k];}\nAMpreviousSymbol=AMcurrentSymbol;if(match!=\"\"){AMcurrentSymbol=AMsymbols[mk].ttype;return AMsymbols[mk];}\nAMcurrentSymbol=CONST;k=1;st=str.slice(0,1);if(\"0\"<=st&&st<=\"9\")tagst=\"mn\";else tagst=((\"A\">st||st>\"Z\")&&(\"a\">st||st>\"z\")?\"mo\":\"mi\");return{input:st,tag:tagst,output:st,ttype:CONST};}\nvar AMpreviousSymbol,AMcurrentSymbol;function AMparseSexpr(str){var symbol,node,result,result2,i,st,newFrag=document.createDocumentFragment();str=AMremoveCharsAndBlanks(str,0);symbol=AMgetSymbol(str);if(symbol==null||symbol.ttype==RIGHTBRACKET)\nreturn[null,str,null];if(symbol.ttype==DEFINITION){str=symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length);symbol=AMgetSymbol(str);if(symbol==null||symbol.ttype==RIGHTBRACKET)\nreturn[null,str,null];}\nstr=AMremoveCharsAndBlanks(str,symbol.input.length);switch(symbol.ttype){case SPACE:node=AMcreateElementMathML(symbol.tag);node.setAttribute(symbol.atname,symbol.atval);return[node,str,symbol.tag];case UNDEROVER:if(isIE){if(symbol.input.substr(0,4)==\"\\\\big\"){str=\"\\\\\"+symbol.input.substr(4)+str;symbol=AMgetSymbol(str);symbol.ttype=UNDEROVER;str=AMremoveCharsAndBlanks(str,symbol.input.length);}}\nreturn[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];case CONST:var output=symbol.output;if(isIE){if(symbol.input==\"'\")\noutput=\"\\u2032\";else if(symbol.input==\"''\")\noutput=\"\\u2033\";else if(symbol.input==\"'''\")\noutput=\"\\u2033\\u2032\";else if(symbol.input==\"''''\")\noutput=\"\\u2033\\u2033\";else if(symbol.input==\"\\\\square\")\noutput=\"\\u25A1\";else if(symbol.input.substr(0,5)==\"\\\\frac\"){var denom=symbol.input.substr(6,1);if(denom==\"5\"||denom==\"6\"){str=symbol.input.replace(/\\\\frac/,\"\\\\frac \")+str;return[node,str,symbol.tag];}}}\nnode=AMcreateMmlNode(symbol.tag,document.createTextNode(output));return[node,str,symbol.tag];case LONG:node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));node.setAttribute(\"minsize\",\"1.5\");node.setAttribute(\"maxsize\",\"1.5\");node=AMcreateMmlNode(\"mover\",node);node.appendChild(AMcreateElementMathML(\"mspace\"));return[node,str,symbol.tag];case STRETCHY:if(isIE&&symbol.input==\"\\\\backslash\")\nsymbol.output=\"\\\\\";node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));if(symbol.input==\"|\"||symbol.input==\"\\\\vert\"||symbol.input==\"\\\\|\"||symbol.input==\"\\\\Vert\"){node.setAttribute(\"lspace\",\"0em\");node.setAttribute(\"rspace\",\"0em\");}\nnode.setAttribute(\"maxsize\",symbol.atval);if(symbol.rtag!=null)\nreturn[node,str,symbol.rtag];else\nreturn[node,str,symbol.tag];case BIG:var atval=symbol.atval;if(isIE)\natval=symbol.ieval;symbol=AMgetSymbol(str);if(symbol==null)\nreturn[null,str,null];str=AMremoveCharsAndBlanks(str,symbol.input.length);node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"height\",atval+\"ex\");node=AMcreateMmlNode(\"mrow\",node);node.appendChild(space);}else{node.setAttribute(\"minsize\",atval);node.setAttribute(\"maxsize\",atval);}\nreturn[node,str,symbol.tag];case LEFTBRACKET:if(symbol.input==\"\\\\left\"){symbol=AMgetSymbol(str);if(symbol!=null){if(symbol.input==\".\")\nsymbol.invisible=true;str=AMremoveCharsAndBlanks(str,symbol.input.length);}}\nresult=AMparseExpr(str,true,false);if(symbol==null||(typeof symbol.invisible==\"boolean\"&&symbol.invisible))\nnode=AMcreateMmlNode(\"mrow\",result[0]);else{node=AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));node=AMcreateMmlNode(\"mrow\",node);node.appendChild(result[0]);}\nreturn[node,result[1],result[2]];case MATRIX:if(symbol.input==\"\\\\begin{array}\"){var mask=\"\";symbol=AMgetSymbol(str);str=AMremoveCharsAndBlanks(str,0);if(symbol==null)\nmask=\"l\";else{str=AMremoveCharsAndBlanks(str,symbol.input.length);if(symbol.input!=\"{\")\nmask=\"l\";else do{symbol=AMgetSymbol(str);if(symbol!=null){str=AMremoveCharsAndBlanks(str,symbol.input.length);if(symbol.input!=\"}\")\nmask=mask+symbol.input;}}while(symbol!=null&&symbol.input!=\"\"&&symbol.input!=\"}\");}\nresult=AMparseExpr(\"{\"+str,true,true);node=AMcreateMmlNode(\"mtable\",result[0]);mask=mask.replace(/l/g,\"left \");mask=mask.replace(/r/g,\"right \");mask=mask.replace(/c/g,\"center \");node.setAttribute(\"columnalign\",mask);node.setAttribute(\"displaystyle\",\"false\");if(isIE)\nreturn[node,result[1],null];var lspace=AMcreateElementMathML(\"mspace\");lspace.setAttribute(\"width\",\"0.167em\");var rspace=AMcreateElementMathML(\"mspace\");rspace.setAttribute(\"width\",\"0.167em\");var node1=AMcreateMmlNode(\"mrow\",lspace);node1.appendChild(node);node1.appendChild(rspace);return[node1,result[1],null];}else{result=AMparseExpr(\"{\"+str,true,true);node=AMcreateMmlNode(\"mtable\",result[0]);if(isIE)\nnode.setAttribute(\"columnspacing\",\"0.25em\");else\nnode.setAttribute(\"columnspacing\",\"0.167em\");node.setAttribute(\"columnalign\",\"right center left\");node.setAttribute(\"displaystyle\",\"true\");node=AMcreateMmlNode(\"mrow\",node);return[node,result[1],null];}\ncase TEXT:if(str.charAt(0)==\"{\")i=str.indexOf(\"}\");else i=0;if(i==-1)\ni=str.length;st=str.slice(1,i);if(st.charAt(0)==\" \"){node=AMcreateElementMathML(\"mspace\");node.setAttribute(\"width\",\"0.33em\");newFrag.appendChild(node);}\nnewFrag.appendChild(AMcreateMmlNode(symbol.tag,document.createTextNode(st)));if(st.charAt(st.length-1)==\" \"){node=AMcreateElementMathML(\"mspace\");node.setAttribute(\"width\",\"0.33em\");newFrag.appendChild(node);}\nstr=AMremoveCharsAndBlanks(str,i+1);return[AMcreateMmlNode(\"mrow\",newFrag),str,null];case UNARY:result=AMparseSexpr(str);if(result[0]==null)return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str];if(typeof symbol.func==\"boolean\"&&symbol.func){st=str.charAt(0);if(st==\"^\"||st==\"_\"||st==\",\"){return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];}else{node=AMcreateMmlNode(\"mrow\",AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)));if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"width\",\"0.167em\");node.appendChild(space);}\nnode.appendChild(result[0]);return[node,result[1],symbol.tag];}}\nif(symbol.input==\"\\\\sqrt\"){if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"height\",\"1.2ex\");space.setAttribute(\"width\",\"0em\");node=AMcreateMmlNode(symbol.tag,result[0])\nnode.appendChild(space);return[node,result[1],symbol.tag];}else\nreturn[AMcreateMmlNode(symbol.tag,result[0]),result[1],symbol.tag];}else if(typeof symbol.acc==\"boolean\"&&symbol.acc){node=AMcreateMmlNode(symbol.tag,result[0]);var output=symbol.output;if(isIE){if(symbol.input==\"\\\\hat\")\noutput=\"\\u0302\";else if(symbol.input==\"\\\\widehat\")\noutput=\"\\u005E\";else if(symbol.input==\"\\\\bar\")\noutput=\"\\u00AF\";else if(symbol.input==\"\\\\grave\")\noutput=\"\\u0300\";else if(symbol.input==\"\\\\tilde\")\noutput=\"\\u0303\";}\nvar node1=AMcreateMmlNode(\"mo\",document.createTextNode(output));if(symbol.input==\"\\\\vec\"||symbol.input==\"\\\\check\")\nnode1.setAttribute(\"maxsize\",\"1.2\");if(isIE&&symbol.input==\"\\\\bar\")\nnode1.setAttribute(\"maxsize\",\"0.5\");if(symbol.input==\"\\\\underbrace\"||symbol.input==\"\\\\underline\")\nnode1.setAttribute(\"accentunder\",\"true\");else\nnode1.setAttribute(\"accent\",\"true\");node.appendChild(node1);if(symbol.input==\"\\\\overbrace\"||symbol.input==\"\\\\underbrace\")\nnode.ttype=UNDEROVER;return[node,result[1],symbol.tag];}else{if(!isIE&&typeof symbol.codes!=\"undefined\"){for(i=0;i<result[0].childNodes.length;i++)\nif(result[0].childNodes[i].nodeName==\"mi\"||result[0].nodeName==\"mi\"){st=(result[0].nodeName==\"mi\"?result[0].firstChild.nodeValue:result[0].childNodes[i].firstChild.nodeValue);var newst=[];for(var j=0;j<st.length;j++)\nif(st.charCodeAt(j)>64&&st.charCodeAt(j)<91)newst=newst+\nString.fromCharCode(symbol.codes[st.charCodeAt(j)-65]);else newst=newst+st.charAt(j);if(result[0].nodeName==\"mi\")\nresult[0]=AMcreateElementMathML(\"mo\").appendChild(document.createTextNode(newst));else result[0].replaceChild(AMcreateElementMathML(\"mo\").appendChild(document.createTextNode(newst)),result[0].childNodes[i]);}}\nnode=AMcreateMmlNode(symbol.tag,result[0]);node.setAttribute(symbol.atname,symbol.atval);if(symbol.input==\"\\\\scriptstyle\"||symbol.input==\"\\\\scriptscriptstyle\")\nnode.setAttribute(\"displaystyle\",\"false\");return[node,result[1],symbol.tag];}\ncase BINARY:result=AMparseSexpr(str);if(result[0]==null)return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.input)),str,null];result2=AMparseSexpr(result[1]);if(result2[0]==null)return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.input)),str,null];if(symbol.input==\"\\\\textcolor\"||symbol.input==\"\\\\colorbox\"){var tclr=str.match(/\\{\\s*([#\\w]+)\\s*\\}/);str=str.replace(/\\{\\s*[#\\w]+\\s*\\}/,\"\");if(tclr!=null){if(IsColorName.test(tclr[1].toLowerCase())){tclr=LaTeXColor[tclr[1].toLowerCase()];}else{tclr=tclr[1];}\nnode=AMcreateElementMathML(\"mstyle\");node.setAttribute(symbol.atval,tclr);node.appendChild(result2[0]);return[node,result2[1],symbol.tag];}}\nif(symbol.input==\"\\\\root\"||symbol.input==\"\\\\stackrel\")newFrag.appendChild(result2[0]);newFrag.appendChild(result[0]);if(symbol.input==\"\\\\frac\")newFrag.appendChild(result2[0]);return[AMcreateMmlNode(symbol.tag,newFrag),result2[1],symbol.tag];case INFIX:str=AMremoveCharsAndBlanks(str,symbol.input.length);return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output)),str,symbol.tag];default:return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];}}\nfunction AMparseIexpr(str){var symbol,sym1,sym2,node,result,tag,underover;str=AMremoveCharsAndBlanks(str,0);sym1=AMgetSymbol(str);result=AMparseSexpr(str);node=result[0];str=result[1];tag=result[2];symbol=AMgetSymbol(str);if(symbol.ttype==INFIX){str=AMremoveCharsAndBlanks(str,symbol.input.length);result=AMparseSexpr(str);if(result[0]==null)\nresult[0]=AMcreateMmlNode(\"mo\",document.createTextNode(\"\\u25A1\"));str=result[1];tag=result[2];if(symbol.input==\"_\"||symbol.input==\"^\"){sym2=AMgetSymbol(str);tag=null;underover=((sym1.ttype==UNDEROVER)||(node.ttype==UNDEROVER));if(symbol.input==\"_\"&&sym2.input==\"^\"){str=AMremoveCharsAndBlanks(str,sym2.input.length);var res2=AMparseSexpr(str);str=res2[1];tag=res2[2];node=AMcreateMmlNode((underover?\"munderover\":\"msubsup\"),node);node.appendChild(result[0]);node.appendChild(res2[0]);}else if(symbol.input==\"_\"){node=AMcreateMmlNode((underover?\"munder\":\"msub\"),node);node.appendChild(result[0]);}else{node=AMcreateMmlNode((underover?\"mover\":\"msup\"),node);node.appendChild(result[0]);}\nnode=AMcreateMmlNode(\"mrow\",node);}else{node=AMcreateMmlNode(symbol.tag,node);if(symbol.input==\"\\\\atop\"||symbol.input==\"\\\\choose\")\nnode.setAttribute(\"linethickness\",\"0ex\");node.appendChild(result[0]);if(symbol.input==\"\\\\choose\")\nnode=AMcreateMmlNode(\"mfenced\",node);}}\nreturn[node,str,tag];}\nfunction AMparseExpr(str,rightbracket,matrix){var symbol,node,result,i,tag,newFrag=document.createDocumentFragment();do{str=AMremoveCharsAndBlanks(str,0);result=AMparseIexpr(str);node=result[0];str=result[1];tag=result[2];symbol=AMgetSymbol(str);if(node!=undefined){if((tag==\"mn\"||tag==\"mi\")&&symbol!=null&&typeof symbol.func==\"boolean\"&&symbol.func){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"width\",\"0.167em\");node=AMcreateMmlNode(\"mrow\",node);node.appendChild(space);}\nnewFrag.appendChild(node);}}while((symbol.ttype!=RIGHTBRACKET)&&symbol!=null&&symbol.output!=\"\");tag=null;if(symbol.ttype==RIGHTBRACKET){if(symbol.input==\"\\\\right\"){str=AMremoveCharsAndBlanks(str,symbol.input.length);symbol=AMgetSymbol(str);if(symbol!=null&&symbol.input==\".\")\nsymbol.invisible=true;if(symbol!=null)\ntag=symbol.rtag;}\nif(symbol!=null)\nstr=AMremoveCharsAndBlanks(str,symbol.input.length);var len=newFrag.childNodes.length;if(matrix&&len>0&&newFrag.childNodes[len-1].nodeName==\"mrow\"&&len>1&&newFrag.childNodes[len-2].nodeName==\"mo\"&&newFrag.childNodes[len-2].firstChild.nodeValue==\"&\"){var pos=[];var m=newFrag.childNodes.length;for(i=0;matrix&&i<m;i=i+2){pos[i]=[];node=newFrag.childNodes[i];for(var j=0;j<node.childNodes.length;j++)\nif(node.childNodes[j].firstChild.nodeValue==\"&\")\npos[i][pos[i].length]=j;}\nvar row,frag,n,k,table=document.createDocumentFragment();for(i=0;i<m;i=i+2){row=document.createDocumentFragment();frag=document.createDocumentFragment();node=newFrag.firstChild;n=node.childNodes.length;k=0;for(j=0;j<n;j++){if(typeof pos[i][k]!=\"undefined\"&&j==pos[i][k]){node.removeChild(node.firstChild);row.appendChild(AMcreateMmlNode(\"mtd\",frag));k++;}else frag.appendChild(node.firstChild);}\nrow.appendChild(AMcreateMmlNode(\"mtd\",frag));if(newFrag.childNodes.length>2){newFrag.removeChild(newFrag.firstChild);newFrag.removeChild(newFrag.firstChild);}\ntable.appendChild(AMcreateMmlNode(\"mtr\",row));}\nreturn[table,str];}\nif(typeof symbol.invisible!=\"boolean\"||!symbol.invisible){node=AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));newFrag.appendChild(node);}}\nreturn[newFrag,str,tag];}\nfunction AMparseMath(str){var result,node=AMcreateElementMathML(\"mstyle\");var cclr=str.match(/\\\\color\\s*\\{\\s*([#\\w]+)\\s*\\}/);str=str.replace(/\\\\color\\s*\\{\\s*[#\\w]+\\s*\\}/g,\"\");if(cclr!=null){if(IsColorName.test(cclr[1].toLowerCase())){cclr=LaTeXColor[cclr[1].toLowerCase()];}else{cclr=cclr[1];}\nnode.setAttribute(\"mathcolor\",cclr);}else{if(mathcolor!=\"\")node.setAttribute(\"mathcolor\",mathcolor);};if(mathfontfamily!=\"\")node.setAttribute(\"fontfamily\",mathfontfamily);node.appendChild(AMparseExpr(str.replace(/^\\s+/g,\"\"),false,false)[0]);node=AMcreateMmlNode(\"math\",node);if(showasciiformulaonhover)\nnode.setAttribute(\"title\",str.replace(/\\s+/g,\" \"));if(false){var fnode=AMcreateElementXHTML(\"font\");fnode.setAttribute(\"face\",mathfontfamily);fnode.appendChild(node);return fnode;}\nreturn node;}\nfunction AMstrarr2docFrag(arr,linebreaks){var newFrag=document.createDocumentFragment();var expr=false;for(var i=0;i<arr.length;i++){if(expr)newFrag.appendChild(AMparseMath(arr[i]));else{var arri=(linebreaks?arr[i].split(\"\\n\\n\"):[arr[i]]);newFrag.appendChild(AMcreateElementXHTML(\"span\").appendChild(document.createTextNode(arri[0])));for(var j=1;j<arri.length;j++){newFrag.appendChild(AMcreateElementXHTML(\"p\"));newFrag.appendChild(AMcreateElementXHTML(\"span\").appendChild(document.createTextNode(arri[j])));}}\nexpr=!expr;}\nreturn newFrag;}\nfunction AMprocessNodeR(n,linebreaks){var mtch,str,arr,frg,i;if(n.childNodes.length==0){if((n.nodeType!=8||linebreaks)&&n.parentNode.nodeName!=\"form\"&&n.parentNode.nodeName!=\"FORM\"&&n.parentNode.nodeName!=\"textarea\"&&n.parentNode.nodeName!=\"TEXTAREA\"&&n.parentNode.nodeName!=\"pre\"&&n.parentNode.nodeName!=\"PRE\"){str=n.nodeValue;if(!(str==null)){str=str.replace(/\\r\\n\\r\\n/g,\"\\n\\n\");str=str.replace(/\\x20+/g,\" \");str=str.replace(/\\s*\\r\\n/g,\" \");mtch=(str.indexOf(\"\\$\")==-1?false:true);str=str.replace(/([^\\\\])\\$/g,\"$1 \\$\");str=str.replace(/^\\$/,\" \\$\");arr=str.split(\" \\$\");for(i=0;i<arr.length;i++)\narr[i]=arr[i].replace(/\\\\\\$/g,\"\\$\");if(arr.length>1||mtch){if(checkForMathML){checkForMathML=false;var nd=AMisMathMLavailable();AMnoMathML=nd!=null;if(AMnoMathML&&notifyIfNoMathML)\nif(alertIfNoMathML)\nalert(\"To view the ASCIIMathML notation use Internet Explorer 6 +\\nMathPlayer (free from www.dessci.com)\\nor Firefox/Mozilla/Netscape\");else AMbody.insertBefore(nd,AMbody.childNodes[0]);}\nif(!AMnoMathML){frg=AMstrarr2docFrag(arr,n.nodeType==8);var len=frg.childNodes.length;n.parentNode.replaceChild(frg,n);return len-1;}else return 0;}}}else return 0;}else if(n.nodeName!=\"math\"){for(i=0;i<n.childNodes.length;i++)\ni+=AMprocessNodeR(n.childNodes[i],linebreaks);}\nreturn 0;}\nfunction AMprocessNode(n,linebreaks,spanclassAM){var frag,st;if(spanclassAM!=null){frag=document.getElementsByTagName(\"span\")\nfor(var i=0;i<frag.length;i++)\nif(frag[i].className==\"AM\")\nAMprocessNodeR(frag[i],linebreaks);}else{try{st=n.innerHTML;}catch(err){}\nif(st==null||st.indexOf(\"\\$\")!=-1)\nAMprocessNodeR(n,linebreaks);}\nif(isIE){frag=document.getElementsByTagName('math');for(var i=0;i<frag.length;i++)frag[i].update()}}\nvar inAppendix=false;var sectionCntr=0;var IEcommentWarning=true;var biblist=[];var bibcntr=0;var LaTeXCounter=[];LaTeXCounter[\"definition\"]=0;LaTeXCounter[\"proposition\"]=0;LaTeXCounter[\"lemma\"]=0;LaTeXCounter[\"theorem\"]=0;LaTeXCounter[\"corollary\"]=0;LaTeXCounter[\"example\"]=0;LaTeXCounter[\"exercise\"]=0;LaTeXCounter[\"subsection\"]=0;LaTeXCounter[\"subsubsection\"]=0;LaTeXCounter[\"figure\"]=0;LaTeXCounter[\"equation\"]=0;LaTeXCounter[\"table\"]=0;var LaTeXColor=[];LaTeXColor[\"greenyellow\"]=\"#D9FF4F\";LaTeXColor[\"yellow\"]=\"#FFFF00\";LaTeXColor[\"goldenrod\"]=\"#FFE529\";LaTeXColor[\"dandelion\"]=\"#FFB529\";LaTeXColor[\"apricot\"]=\"#FFAD7A\";LaTeXColor[\"peach\"]=\"#FF804D\";LaTeXColor[\"melon\"]=\"#FF8A80\";LaTeXColor[\"yelloworange\"]=\"#FF9400\";LaTeXColor[\"orange\"]=\"#FF6321\";LaTeXColor[\"burntorange\"]=\"#FF7D00\";LaTeXColor[\"bittersweet\"]=\"#C20300\";LaTeXColor[\"redorange\"]=\"#FF3B21\";LaTeXColor[\"mahogany\"]=\"#A60000\";LaTeXColor[\"maroon\"]=\"#AD0000\";LaTeXColor[\"brickred\"]=\"#B80000\";LaTeXColor[\"red\"]=\"#FF0000\";LaTeXColor[\"orangered\"]=\"#FF0080\";LaTeXColor[\"rubinered\"]=\"#FF00DE\";LaTeXColor[\"wildstrawberry\"]=\"#FF0A9C\";LaTeXColor[\"salmon\"]=\"#FF789E\";LaTeXColor[\"carnationpink\"]=\"#FF5EFF\";LaTeXColor[\"magenta\"]=\"#FF00FF\";LaTeXColor[\"violetred\"]=\"#FF30FF\";LaTeXColor[\"rhodamine\"]=\"#FF2EFF\";LaTeXColor[\"mulberry\"]=\"#A314FA\";LaTeXColor[\"redviolet\"]=\"#9600A8\";LaTeXColor[\"fuchsia\"]=\"#7303EB\";LaTeXColor[\"lavender\"]=\"#FF85FF\";LaTeXColor[\"thistle\"]=\"#E069FF\";LaTeXColor[\"orchid\"]=\"#AD5CFF\";LaTeXColor[\"darkorchid\"]=\"#9933CC\";LaTeXColor[\"purple\"]=\"#8C24FF\";LaTeXColor[\"plum\"]=\"#8000FF\";LaTeXColor[\"violet\"]=\"#361FFF\";LaTeXColor[\"royalpurple\"]=\"#401AFF\";LaTeXColor[\"blueviolet\"]=\"#1A0DF5\";LaTeXColor[\"periwinkle\"]=\"#6E73FF\";LaTeXColor[\"cadetblue\"]=\"#616EC4\";LaTeXColor[\"cornflowerblue\"]=\"#59DEFF\";LaTeXColor[\"midnightblue\"]=\"#007091\";LaTeXColor[\"navyblue\"]=\"#0F75FF\";LaTeXColor[\"royalblue\"]=\"#0080FF\";LaTeXColor[\"blue\"]=\"#0000FF\";LaTeXColor[\"cerulean\"]=\"#0FE3FF\";LaTeXColor[\"cyan\"]=\"#00FFFF\";LaTeXColor[\"processblue\"]=\"#0AFFFF\";LaTeXColor[\"skyblue\"]=\"#61FFE0\";LaTeXColor[\"turquoise\"]=\"#26FFCC\";LaTeXColor[\"tealblue\"]=\"#1FFAA3\";LaTeXColor[\"aquamarine\"]=\"#2EFFB2\";LaTeXColor[\"bluegreen\"]=\"#26FFAB\";LaTeXColor[\"emerald\"]=\"#00FF80\";LaTeXColor[\"junglegreen\"]=\"#03FF7A\";LaTeXColor[\"seagreen\"]=\"#4FFF80\";LaTeXColor[\"green\"]=\"#00FF00\";LaTeXColor[\"forestgreen\"]=\"#00E000\";LaTeXColor[\"pinegreen\"]=\"#00BF29\";LaTeXColor[\"limegreen\"]=\"#80FF00\";LaTeXColor[\"yellowgreen\"]=\"#8FFF42\";LaTeXColor[\"springgreen\"]=\"#BDFF3D\";LaTeXColor[\"olivegreen\"]=\"#009900\";LaTeXColor[\"rawsienna\"]=\"#8C0000\";LaTeXColor[\"sepia\"]=\"#4D0000\";LaTeXColor[\"brown\"]=\"#660000\";LaTeXColor[\"tan\"]=\"#DB9470\";LaTeXColor[\"gray\"]=\"#808080\";LaTeXColor[\"grey\"]=\"#808080\";LaTeXColor[\"black\"]=\"#000000\";LaTeXColor[\"white\"]=\"#FFFFFF\";var IsColorName=/^(?:greenyellow|yellow|goldenrod|dandelion|apricot|peach|melon|yelloworange|orange|burntorange|bittersweet|redorange|mahogany|maroon|brickred|red|orangered|rubinered|wildstrawberry|salmon|carnationpink|magenta|violetred|rhodamine|mulberry|redviolet|fuchsia|lavender|thistle|orchid|darkorchid|purple|plum|violet|royalpurple|blueviolet|periwinkle|cadetblue|cornflowerblue|midnightblue|navyblue|royalblue|blue|cerulean|cyan|processblue|skyblue|turquoise|tealblue|aquamarine|bluegreen|emerald|junglegreen|seagreen|green|forestgreen|pinegreen|limegreen|yellowgreen|springgreen|olivegreen|rawsienna|sepia|brown|tan|gray|grey|black|white)$/;var IsCounter=/^(?:definition|proposition|lemma|theorem|corollary|example|exercise|subsection|subsubsection|figure|equation|table)$/;var IsLaTeXElement=/^(?:displayequation|title|author|address|date|abstract|keyword|section|subsection|subsubsection|ref|cite|thebibliography|definition|proposition|lemma|theorem|corollary|example|exercise|itemize|enumerate|enddefinition|endproposition|endlemma|endtheorem|endcorollary|endexample|endexercise|enditemize|endenumerate|LaTeXMathMLlabel|LaTeXMathML|smallskip|medskip|bigskip|quote|quotation|endquote|endquotation|center|endcenter|description|enddescription|inlinemath)$/;var IsTextOnlyArea=/^(?:form|textarea|pre)$/i;var tableid=0;function makeNumberString(cntr){if(sectionCntr>0){if(inAppendix){return\"A\"+sectionCntr+\".\"+cntr;}else{return sectionCntr+\".\"+cntr;}}else{return\"\"+cntr;}};function LaTeXpreProcess(thebody){var TheBody=thebody;if(TheBody.hasChildNodes()){if(!(IsLaTeXElement.test(TheBody.className)))\n{for(var i=0;i<TheBody.childNodes.length;i++){LaTeXpreProcess(TheBody.childNodes[i])}}}\nelse{if(TheBody.nodeType==3&&!(IsTextOnlyArea.test(TheBody.parentNode.nodeName)))\n{var str=TheBody.nodeValue;if(!(str==null)){str=str.replace(/\\\\%/g,\"<per>\");str=str.replace(/%[^\\n]*(?=\\n)/g,\"\");str=str.replace(/%[^\\r]*(?=\\r)/g,\"\");str=str.replace(/%[^\\n]*$/,\"\")\nif(isIE&&str.match(/%/g)!=null&&IEcommentWarning){alert(\"Comments may not have parsed properly.  Try putting in <pre class='LaTeX><div>..</div></pre> structure.\");IEcommentWarning=false;}\nstr=str.replace(/<per>/g,\"%\");if(str.match(/XXX[\\s\\S]*/)!=null){var tmp=str.match(/XXX[\\s\\S]*/)[0];var tmpstr=tmp.charCodeAt(7)+\"::\"+tmp.charCodeAt(8)+\"::\"+tmp.charCodeAt(9)+\"::\"+tmp.charCodeAt(10)+\"::\"+tmp.charCodeAt(11)+\"::\"+tmp.charCodeAt(12)+\"::\"+tmp.charCodeAt(13);alert(tmpstr);}\nstr=str.replace(/([^\\\\])\\\\(\\s)/g,\"$1\\u00A0$2\");str=str.replace(/\\\\quad/g,\"\\u2001\");str=str.replace(/\\\\qquad/g,\"\\u2001\\u2001\");str=str.replace(/\\\\enspace/g,\"\\u2002\");str=str.replace(/\\\\;/g,\"\\u2004\");str=str.replace(/\\\\:/g,\"\\u2005\");str=str.replace(/\\\\,/g,\"\\u2006\");str=str.replace(/\\\\thinspace/g,\"\\u200A\");str=str.replace(/([^\\\\])~/g,\"$1\\u00A0\");str=str.replace(/\\\\~/g,\"~\");str=str.replace(/\\\\\\[/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\\\]/g,\"}$ <DEQ> \");str=str.replace(/\\$\\$/g,\"${$<DEQ>$}$\");str=str.replace(/\\\\begin\\s*\\{\\s*array\\s*\\}/g,\"\\\\begin{array}\");str=str.replace(/\\\\end\\s*\\{\\s*array\\s*\\}/g,\"\\\\end{array}\");str=str.replace(/\\\\begin\\s*\\{\\s*eqnarray\\s*\\}/g,\"  <DEQ>eqno$\\\\begin{eqnarray}\");str=str.replace(/\\\\end\\s*\\{\\s*eqnarray\\s*\\}/g,\"\\\\end{eqnarray}$<DEQ>  \");str=str.replace(/\\\\begin\\s*\\{\\s*eqnarray\\*\\s*\\}/g,\"  <DEQ>$\\\\begin{eqnarray}\");str=str.replace(/\\\\end\\s*\\{\\s*eqnarray\\*\\s*\\}/g,\"\\\\end{eqnarray}$<DEQ>  \");str=str.replace(/\\\\begin\\s*\\{\\s*displaymath\\s*\\}/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*displaymath\\s*\\}/g,\"}$ <DEQ> \");str=str.replace(/\\\\begin\\s*\\{\\s*equation\\s*\\*\\s*\\}/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*equation\\s*\\*\\s*\\}/g,\"}$ <DEQ> \");str=str.replace(/\\\\begin\\s*\\{\\s*equation\\s*\\}/g,\" <DEQ>eqno$\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*equation\\s*\\}/g,\"}$ <DEQ> \");str=str.split(\"<DEQ>\");var newFrag=document.createDocumentFragment();for(var i=0;i<str.length;i++){if(i%2){var DEQtable=document.createElement(\"table\");DEQtable.className='displayequation';var DEQtbody=document.createElement(\"tbody\");var DEQtr=document.createElement(\"tr\");var DEQtdeq=document.createElement(\"td\");DEQtdeq.className='eq';str[i]=str[i].replace(/\\$\\}\\$/g,\"$\\\\displaystyle{\");str[i]=str[i].replace(/\\$\\{\\$/g,\"}\");var lbl=str[i].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);var ISeqno=str[i].match(/^eqno/);str[i]=str[i].replace(/^eqno/,\" \");str[i]=str[i].replace(/\\\\label\\s*\\{\\s*\\w+\\s*\\}/,\" \");DEQtdeq.appendChild(document.createTextNode(str[i]));DEQtr.appendChild(DEQtdeq);str[i]=str[i].replace(/\\\\nonumber/g,\"\");if(ISeqno!=null||lbl!=null){var DEQtdno=document.createElement(\"td\");DEQtdno.className='eqno';LaTeXCounter[\"equation\"]++;var eqnoString=makeNumberString(LaTeXCounter[\"equation\"]);var DEQanchor=document.createElement(\"a\");if(lbl!=null){DEQanchor.id=lbl[1]};DEQanchor.className=\"eqno\";var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"eqno\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(eqnoString));DEQanchor.appendChild(anchorSpan);DEQtdno.appendChild(DEQanchor);var DEQspan=document.createElement(\"span\");DEQspan.className=\"eqno\";DEQspan.appendChild(document.createTextNode(\"(\"+eqnoString+\")\"));DEQtdno.appendChild(DEQspan);DEQtr.appendChild(DEQtdno);}\nDEQtbody.appendChild(DEQtr);DEQtable.appendChild(DEQtbody);newFrag.appendChild(DEQtable);}\nelse{str[i]=str[i].replace(/\\$\\}\\$/g,\"\");str[i]=str[i].replace(/\\$\\{\\$/g,\"\");str[i]=str[i].replace(/\\\\maketitle/g,\"\");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*document\\s*\\}/g,\"\");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*document\\s*\\}/g,\"\");str[i]=str[i].replace(/\\\\documentclass[^\\}]*?\\}/g,\"\");str[i]=str[i].replace(/\\\\usepackage[^\\}]*?\\}/g,\"\");str[i]=str[i].replace(/\\\\noindent/g,\"\");str[i]=str[i].replace(/\\\\notag/g,\"\");str[i]=str[i].replace(/\\\\ref\\s*\\{\\s*(\\w+)\\}/g,\" \\\\[ref\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\url\\s*\\{\\s*([^\\}\\n]+)\\}/g,\" \\\\[url\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\href\\s*\\{\\s*([^\\}]+)\\}\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[href\\\\]$1\\\\]$2\\\\[ \");str[i]=str[i].replace(/\\\\cite\\s*\\{\\s*(\\w+)\\}/g,\" \\\\[cite\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\qed/g,\"\\u220E\");str[i]=str[i].replace(/\\\\endproof/g,\"\\u220E\");str[i]=str[i].replace(/\\\\proof/g,\"\\\\textbf{Proof: }\");str[i]=str[i].replace(/\\\\n(?=\\s)/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\newline/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\linebreak/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\smallskip/g,\" \\\\[logicalbreak\\\\]smallskip\\\\[ \");str[i]=str[i].replace(/\\\\medskip/g,\" \\\\[logicalbreak\\\\]medskip\\\\[ \");str[i]=str[i].replace(/\\\\bigskip/g,\" \\\\[logicalbreak\\\\]bigskip\\\\[ \");str[i]=str[i].replace(/[\\n\\r]+[ \\f\\n\\r\\t\\v\\u2028\\u2029]*[\\n\\r]+/g,\" \\\\[logicalbreak\\\\]LaTeXMathML\\\\[ \");if(isIE){str[i]=str[i].replace(/\\r/g,\" \");}\nstr[i]=str[i].replace(/\\\\bibitem\\s*([^\\{]*\\{\\s*\\w*\\s*\\})/g,\" \\\\[bibitem\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\bibitem\\s*/g,\" \\\\[bibitem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\item\\s*\\[\\s*(\\w+)\\s*\\]/g,\" \\\\[alistitem\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\item\\s*/g,\" \\\\[alistitem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\appendix/g,\" \\\\[appendix\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*figure\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*figure\\s*\\}/g,\" \\\\[figure\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*table\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*table\\s*\\}/g,\" \\\\[table\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*theorem\\s*\\}/g,\" \\\\[theorem\\\\]Theorem \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*theorem\\s*\\}/g,\" \\\\[endtheorem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*definition\\s*\\}/g,\" \\\\[definition\\\\]Definition \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*definition\\s*\\}/g,\" \\\\[enddefinition\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*lemma\\s*\\}/g,\" \\\\[lemma\\\\]Lemma \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*lemma\\s*\\}/g,\" \\\\[endlemma\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*corollary\\s*\\}/g,\" \\\\[corollary\\\\]Corollary \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*corollary\\s*\\}/g,\" \\\\[endcorollary\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*proposition\\s*\\}/g,\" \\\\[proposition\\\\]Proposition \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proposition\\s*\\}/g,\" \\\\[endproposition\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*example\\s*\\}/g,\" \\\\[example\\\\]Example \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*example\\s*\\}/g,\" \\\\[endexample\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*exercise\\s*\\}/g,\" \\\\[exercise\\\\]Exercise \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*exercise\\s*\\}/g,\" \\\\[endexercise\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*thebibliography\\s*\\}\\s*\\{\\s*\\w+\\s*\\}/g,\" \\\\[thebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*thebibliography\\s*\\}/g,\" \\\\[thebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*thebibliography\\s*\\}/g,\" \\\\[endthebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*proof\\s*\\}/g,\" \\\\[proof\\\\]Proof: \\\\[ \");if(isIE){str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proof\\s*\\}/g,\"\\u220E \\\\[endproof\\\\] \\\\[ \");}else{str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proof\\s*\\}/g,\" \\\\[endproof\\\\] \\\\[ \");}\nstr[i]=str[i].replace(/\\\\title\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[title\\\\] \\\\[$1 \\\\[endtitle\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\author\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[author\\\\] \\\\[$1 \\\\[endauthor\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\address\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[address\\\\] \\\\[$1 \\\\[endaddress\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\date\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[date\\\\] \\\\[$1 \\\\[enddate\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*keyword\\s*\\}/g,\" \\\\[keyword\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*keyword\\s*\\}/g,\" \\\\[endkeyword\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*abstract\\s*\\}/g,\" \\\\[abstract\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*abstract\\s*\\}/g,\" \\\\[endabstract\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*(?!array|tabular)(\\w+)\\s*\\}/g,\" \\\\[$1\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*(?!array|tabular)(\\w+)\\s*\\}/g,\" \\\\[end$1\\\\] \\\\[ \");var sectionIndex=str[i].search(/\\\\section\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\section\\s*\\{/,\" \\\\[section\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\section\\s*\\{\\s*[\\s\\S]+\\}/);}\nsectionIndex=str[i].search(/\\\\subsection\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\subsection\\s*\\{/,\" \\\\[subsection\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\subsection\\s*\\{\\s*[\\s\\S]+\\}/);}\nsectionIndex=str[i].search(/\\\\subsubsection\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\subsubsection\\s*\\{/,\" \\\\[subsubsection\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\subsubsection\\s*\\{\\s*[\\s\\S]+\\}/);}\nvar CatToNextEven=\"\";var strtmp=str[i].split(\"\\\\[\");for(var j=0;j<strtmp.length;j++){if(j%2){var strtmparray=strtmp[j].split(\"\\\\]\");switch(strtmparray[0]){case\"section\":var nodeTmp=document.createElement(\"H2\");nodeTmp.className='section';sectionCntr++;for(var div in LaTeXCounter){LaTeXCounter[div]=0};var nodeAnchor=document.createElement(\"a\");if(inAppendix){nodeAnchor.className='appendixsection';}else{nodeAnchor.className='section';}\nvar nodeNumString=makeNumberString(\"\");var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"section\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='section';nodeSpan.appendChild(document.createTextNode(nodeNumString+\" \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"subsection\":var nodeTmp=document.createElement(\"H3\");nodeTmp.className='subsection';LaTeXCounter[\"subsection\"]++;LaTeXCounter[\"subsubsection\"]=0;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className='subsection';var nodeNumString=makeNumberString(LaTeXCounter[\"subsection\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"subsection\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='subsection';nodeSpan.appendChild(document.createTextNode(nodeNumString+\". \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"subsubsection\":var nodeTmp=document.createElement(\"H4\");nodeTmp.className='subsubsection';LaTeXCounter[\"subsubsection\"]++;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className='subsubsection';var nodeNumString=makeNumberString(LaTeXCounter[\"subsection\"]+\".\"+LaTeXCounter[\"subsubsection\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"subsubsection\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='subsubsection';nodeSpan.appendChild(document.createTextNode(nodeNumString+\". \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"href\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathML';nodeTmp.href=strtmparray[1];nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"url\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathML';nodeTmp.href=strtmparray[1];nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"figure\":var nodeTmp=document.createElement(\"table\");nodeTmp.className='figure';var FIGtbody=document.createElement(\"tbody\");var FIGlbl=strtmparray[1].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\\\label\\s*\\{\\w+\\}/g,\"\");var capIndex=strtmparray[1].search(/\\\\caption\\s*\\{[\\s\\S]+\\}/);var FIGcap=\"\";if(capIndex>=0){var tmp=strtmparray[1];var delimcnt=0;var capstart=-1;for(var pos=capIndex;pos<tmp.length;pos++){if(tmp.charAt(pos)==\"{\"){delimcnt++};if(tmp.charAt(pos)==\"}\"){delimcnt--};if(delimcnt==1&&capstart<0){capstart=pos+1};if(delimcnt==0&&capstart>0){capend=pos-1;FIGcap=tmp.substring(capstart,pos);break}}}\nvar FIGtr2=document.createElement(\"tr\");var FIGtd2=document.createElement(\"td\");FIGtd2.className=\"caption\";var FIGanchor=document.createElement(\"a\");FIGanchor.className=\"figure\";if(FIGlbl!=null){FIGanchor.id=FIGlbl[1];}\nLaTeXCounter[\"figure\"]++;var fignmbr=makeNumberString(LaTeXCounter[\"figure\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"figure\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(fignmbr));FIGanchor.appendChild(anchorSpan);FIGtd2.appendChild(FIGanchor);var FIGspan=document.createElement(\"span\");FIGspan.className=\"figure\";FIGspan.appendChild(document.createTextNode(\"Figure \"+fignmbr+\". \"));FIGtd2.appendChild(FIGspan);FIGtd2.appendChild(document.createTextNode(\"\"+FIGcap));FIGtr2.appendChild(FIGtd2);FIGtbody.appendChild(FIGtr2);var IsSpecial=false;var FIGinfo=strtmparray[1].match(/\\\\includegraphics\\s*\\{([^\\}]+)\\}/);if(FIGinfo==null){FIGinfo=strtmparray[1].match(/\\\\includegraphics\\s*\\[[^\\]]*\\]\\s*\\{\\s*([^\\}]+)\\s*\\}/);}\nif(FIGinfo==null){FIGinfo=strtmparray[1].match(/\\\\special\\s*\\{\\s*([^\\}]+)\\}/);IsSpecial=true};if(FIGinfo!=null){var FIGtr1=document.createElement(\"tr\");var FIGtd1=document.createElement(\"td\");FIGtd1.className=\"image\";var FIGimg=document.createElement(\"img\");var FIGsrc=FIGinfo[1];FIGimg.src=FIGsrc;FIGimg.alt=\"Figure \"+FIGsrc+\" did not load\";FIGimg.title=\"Figure \"+fignmbr+\". \"+FIGcap;FIGimg.id=\"figure\"+fignmbr;FIGtd1.appendChild(FIGimg);FIGtr1.appendChild(FIGtd1);FIGtbody.appendChild(FIGtr1);}\nnodeTmp.appendChild(FIGtbody);newFrag.appendChild(nodeTmp);break;case\"table\":var nodeTmp=document.createElement(\"table\");if(strtmparray[1].search(/\\\\centering/)>=0){nodeTmp.className='LaTeXtable centered';nodeTmp.align=\"center\";}else{nodeTmp.className='LaTeXtable';};tableid++;nodeTmp.id=\"LaTeXtable\"+tableid;var TABlbl=strtmparray[1].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\\\label\\s*\\{\\w+\\}/g,\"\");var capIndex=strtmparray[1].search(/\\\\caption\\s*\\{[\\s\\S]+\\}/);var TABcap=\"\";if(capIndex>=0){var tmp=strtmparray[1];var delimcnt=0;var capstart=-1;for(var pos=capIndex;pos<tmp.length;pos++){if(tmp.charAt(pos)==\"{\"){delimcnt++};if(tmp.charAt(pos)==\"}\"){delimcnt--};if(delimcnt==1&&capstart<0){capstart=pos+1};if(delimcnt==0&&capstart>0){capend=pos-1;TABcap=tmp.substring(capstart,pos);break}}}\nif(TABcap!=\"\"){var TABtbody=document.createElement(\"tbody\");var TABcaption=document.createElement(\"caption\");TABcaption.className=\"LaTeXtable centered\";var TABanchor=document.createElement(\"a\");TABanchor.className=\"LaTeXtable\";if(TABlbl!=null){TABanchor.id=TABlbl[1];}\nLaTeXCounter[\"table\"]++;var tabnmbr=makeNumberString(LaTeXCounter[\"table\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"LaTeXtable\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(tabnmbr));TABanchor.appendChild(anchorSpan);TABcaption.appendChild(TABanchor);var TABspan=document.createElement(\"span\");TABspan.className=\"LaTeXtable\";TABspan.appendChild(document.createTextNode(\"Table \"+tabnmbr+\". \"));TABcaption.appendChild(TABspan);TABcaption.appendChild(document.createTextNode(\"\"+TABcap));nodeTmp.appendChild(TABcaption);}\nvar TABinfo=strtmparray[1].match(/\\\\begin\\s*\\{\\s*tabular\\s*\\}([\\s\\S]+)\\\\end\\s*\\{\\s*tabular\\s*\\}/);if(TABinfo!=null){var TABtbody=document.createElement('tbody');var TABrow=null;var TABcell=null;var row=0;var col=0;var TABalign=TABinfo[1].match(/^\\s*\\{([^\\}]+)\\}/);TABinfo=TABinfo[1].replace(/^\\s*\\{[^\\}]+\\}/,\"\");TABinfo=TABinfo.replace(/\\\\hline/g,\"\");TABalign[1]=TABalign[1].replace(/\\|/g,\"\");TABalign[1]=TABalign[1].replace(/\\s/g,\"\");TABinfo=TABinfo.split(\"\\\\\\\\\");for(row=0;row<TABinfo.length;row++){TABrow=document.createElement(\"tr\");TABinfo[row]=TABinfo[row].split(\"&\");for(col=0;col<TABinfo[row].length;col++){TABcell=document.createElement(\"td\");switch(TABalign[1].charAt(col)){case\"l\":TABcell.align=\"left\";break;case\"c\":TABcell.align=\"center\";break;case\"r\":TABcell.align=\"right\";break;default:TABcell.align=\"left\";};TABcell.appendChild(document.createTextNode(TABinfo[row][col]));TABrow.appendChild(TABcell);}\nTABtbody.appendChild(TABrow);}\nnodeTmp.appendChild(TABtbody);}\nnewFrag.appendChild(nodeTmp);break;case\"logicalbreak\":var nodeTmp=document.createElement(\"p\");nodeTmp.className=strtmparray[1];nodeTmp.appendChild(document.createTextNode(\"\\u00A0\"));newFrag.appendChild(nodeTmp);break;case\"appendix\":inAppendix=true;sectionCntr=0;break;case\"alistitem\":var EndDiv=document.createElement(\"div\");EndDiv.className=\"endlistitem\";newFrag.appendChild(EndDiv);var BegDiv=document.createElement(\"div\");BegDiv.className=\"listitem\";if(strtmparray[1]!=\" \"){var BegSpan=document.createElement(\"span\");BegSpan.className=\"listitemmarker\";var boldBegSpan=document.createElement(\"b\");boldBegSpan.appendChild(document.createTextNode(strtmparray[1]+\" \"));BegSpan.appendChild(boldBegSpan);BegDiv.appendChild(BegSpan);}\nnewFrag.appendChild(BegDiv);break;case\"br\":newFrag.appendChild(document.createElement(\"br\"));break;case\"bibitem\":newFrag.appendChild(document.createElement(\"br\"));var nodeTmp=document.createElement(\"a\");nodeTmp.className='bibitem';var nodeSpan=document.createElement(\"span\");nodeSpan.className='bibitem';bibcntr++;var lbl=strtmparray[1].match(/\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\s*\\{\\s*\\w+\\s*\\}/g,\"\");strtmparray[1]=strtmparray[1].replace(/^\\s*\\[/,\"\");strtmparray[1]=strtmparray[1].replace(/\\s*\\]$/,\"\");strtmparray[1]=strtmparray[1].replace(/^\\s+|\\s+$/g,\"\");if(lbl==null){biblist[bibcntr]=\"bibitem\"+bibcntr}else{biblist[bibcntr]=lbl[1];};nodeTmp.name=biblist[bibcntr];nodeTmp.id=biblist[bibcntr];if(strtmparray[1]!=\"\"){nodeSpan.appendChild(document.createTextNode(strtmparray[1]));}else{nodeSpan.appendChild(document.createTextNode(\"[\"+bibcntr+\"]\"));}\nnodeTmp.appendChild(nodeSpan);newFrag.appendChild(nodeTmp);break;case\"cite\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='cite';nodeTmp.name='cite';nodeTmp.href=\"#\"+strtmparray[1];newFrag.appendChild(nodeTmp);break;case\"ref\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='ref';nodeTmp.name='ref';nodeTmp.href=\"#\"+strtmparray[1];newFrag.appendChild(nodeTmp);break;default:var nodeTmp=document.createElement(\"div\");nodeTmp.className=strtmparray[0];if(IsCounter.test(strtmparray[0])){LaTeXCounter[strtmparray[0]]++;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className=strtmparray[0];var divnum=makeNumberString(LaTeXCounter[strtmparray[0]]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=strtmparray[0];anchorSpan.appendChild(document.createTextNode(divnum));anchorSpan.style.display=\"none\";nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className=strtmparray[0];nodeSpan.appendChild(document.createTextNode(strtmparray[1]+\" \"+divnum+\". \"));nodeTmp.appendChild(nodeSpan);}\nif(isIE){if(strtmparray[0]==(\"thebibliography\"||\"abstract\"||\"keyword\"||\"proof\")){var nodeSpan=document.createElement(\"span\");nodeSpan.className=strtmparray[0];nodeSpan.appendChild(document.createTextNode(strtmparray[1]));nodeTmp.appendChild(nodeSpan);}}\nif(strtmparray[0]==\"endenumerate\"||strtmparray[0]==\"enditemize\"||strtmparray[0]==\"enddescription\"){var endDiv=document.createElement(\"div\");endDiv.className=\"endlistitem\";newFrag.appendChild(endDiv);}\nnewFrag.appendChild(nodeTmp);if(strtmparray[0]==\"enumerate\"||strtmparray[0]==\"itemize\"||strtmparray[0]==\"description\"){var endDiv=document.createElement(\"div\");endDiv.className=\"listitem\";newFrag.appendChild(endDiv);}}}else{strtmp[j]=strtmp[j].replace(/\\\\\\$/g,\"<per>\");strtmp[j]=strtmp[j].replace(/\\$([^\\$]+)\\$/g,\" \\\\[$1\\\\[ \");strtmp[j]=strtmp[j].replace(/<per>/g,\"\\\\$\");strtmp[j]=strtmp[j].replace(/\\\\begin\\s*\\{\\s*math\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*math\\s*\\}/g,\" \\\\[$1\\\\[ \");var strtmptmp=strtmp[j].split(\"\\\\[\");for(var jjj=0;jjj<strtmptmp.length;jjj++){if(jjj%2){var nodeTmp=document.createElement(\"span\");nodeTmp.className='inlinemath';nodeTmp.appendChild(document.createTextNode(\"$\"+strtmptmp[jjj]+\"$\"));newFrag.appendChild(nodeTmp);}else{var TagIndex=strtmptmp[jjj].search(/\\\\\\w+/);var tmpIndex=TagIndex;while(tmpIndex>-1){if(/^\\\\textcolor/.test(strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length))){strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\textcolor\\s*\\{\\s*(\\w+)\\s*\\}\\s*/,\" \\\\[textcolor\\\\]$1\\\\]|\");}else{if(/^\\\\colorbox/.test(strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length))){strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\colorbox\\s*\\{\\s*(\\w+)\\s*\\}\\s*/,\" \\\\[colorbox\\\\]$1\\\\]|\");}else{strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).replace(/\\\\\\s*(\\w+)\\s*/,\" \\\\[$1\\\\]|\");}}\nTagIndex+=strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).search(/\\|/);TagIndex++;strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\]\\|/,\"\\\\] \");if(strtmptmp[jjj].charAt(TagIndex)==\"{\"){strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+strtmptmp[jjj].substring(TagIndex+1,strtmptmp[jjj].length);var delimcnt=1;for(var kk=TagIndex;kk<strtmptmp[jjj].length;kk++){if(strtmptmp[jjj].charAt(kk)==\"{\"){delimcnt++};if(strtmptmp[jjj].charAt(kk)==\"}\"){delimcnt--};if(delimcnt==0){break;}}\nstrtmptmp[jjj]=strtmptmp[jjj].substring(0,kk)+\"\\\\[ \"+strtmptmp[jjj].substring(kk+1,strtmptmp[jjj].length);TagIndex=kk+3;}else{strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+\"\\\\[ \"+strtmptmp[jjj].substring(TagIndex+1,strtmptmp[jjj].length);TagIndex=TagIndex+3;}\nif(TagIndex<strtmptmp[jjj].length){tmpIndex=strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).search(/\\\\\\w+/);}\nelse{tmpIndex=-1};TagIndex+=tmpIndex;}\nstrtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\\\\\s*\\\\\\\\/g,\"\\\\\\\\\");strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\\\/g,\" \\\\[br\\\\] \\\\[ \");strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/g,\" \\\\[a\\\\]$1\\\\[ \");var strlbls=strtmptmp[jjj].split(\"\\\\[\");for(var jj=0;jj<strlbls.length;jj++){if(jj%2){var strtmparray=strlbls[jj].split(\"\\\\]\");switch(strtmparray[0]){case\"textcolor\":var nodeTmp=document.createElement(\"span\");nodeTmp.className='LaTeXColor';if(IsColorName.test(strtmparray[1].toLowerCase())){nodeTmp.style.color=LaTeXColor[strtmparray[1].toLowerCase()];}else{nodeTmp.style.color=strtmparray[1];};nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"colorbox\":var nodeTmp=document.createElement(\"span\");nodeTmp.className='LaTeXColor';if(IsColorName.test(strtmparray[1].toLowerCase())){nodeTmp.style.background=LaTeXColor[strtmparray[1].toLowerCase()];}else{nodeTmp.style.background=strtmparray[1];};nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"br\":newFrag.appendChild(document.createElement(\"br\"));break;case\"a\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathMLlabel';nodeTmp.id=strtmparray[1];nodeTmp.style.display=\"none\";newFrag.appendChild(nodeTmp);break;default:var nodeTmp=document.createElement(\"span\");nodeTmp.className=strtmparray[0];nodeTmp.appendChild(document.createTextNode(strtmparray[1]))\nnewFrag.appendChild(nodeTmp);}}else{newFrag.appendChild(document.createTextNode(strlbls[jj]));}}}}}}}};TheBody.parentNode.replaceChild(newFrag,TheBody);}}}\nreturn TheBody;}\nfunction LaTeXDivsAndRefs(thebody){var TheBody=thebody;var EndDivClass=null;var AllDivs=TheBody.getElementsByTagName(\"div\");var lbl2id=\"\";var lblnode=null;for(var i=AllDivs.length-1;i>=0;i--){EndDivClass=AllDivs[i].className.match(/end\\w+/);if(EndDivClass!=null){EndDivClass=EndDivClass[0];var DivClass=EndDivClass.substring(3,EndDivClass.length);var EndDivNode=AllDivs[i];break;}}\nwhile(EndDivClass!=null){var newFrag=document.createDocumentFragment();var RootNode=EndDivNode.parentNode;var ClassCount=1;while(EndDivNode.previousSibling!=null&&ClassCount>0){switch(EndDivNode.previousSibling.className){case EndDivClass:ClassCount++;newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);break;case DivClass:if(EndDivNode.previousSibling.nodeName==\"DIV\"){ClassCount--;if(lbl2id!=\"\"){EndDivNode.previousSibling.id=lbl2id;lbl2id=\"\"}\nif(ClassCount==0){RootNode=EndDivNode.previousSibling;}else{newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);}};break;case'LaTeXMathMLlabel':lbl2id=EndDivNode.previousSibling.id;EndDivNode.parentNode.removeChild(EndDivNode.previousSibling);break;default:newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);}}\nRootNode.appendChild(newFrag);EndDivNode.parentNode.removeChild(EndDivNode);AllDivs=TheBody.getElementsByTagName(\"DIV\");for(i=AllDivs.length-1;i>=0;i--){EndDivClass=AllDivs[i].className.match(/end\\w+/);if(EndDivClass!=null){ClassCount=0;EndDivClass=EndDivClass[0];DivClass=EndDivClass.substring(3,EndDivClass.length);EndDivNode=AllDivs[i];RootNode=EndDivNode.parentNode;break;}}}\nvar AllDivs=TheBody.getElementsByTagName(\"div\");var DIV2LI=null;for(var i=0;i<AllDivs.length;i++){if(AllDivs[i].className==\"itemize\"||AllDivs[i].className==\"enumerate\"||AllDivs[i].className==\"description\"){if(AllDivs[i].className==\"itemize\"){RootNode=document.createElement(\"UL\");}else{RootNode=document.createElement(\"OL\");}\nRootNode.className='LaTeXMathML';if(AllDivs[i].hasChildNodes()){AllDivs[i].removeChild(AllDivs[i].firstChild)};while(AllDivs[i].hasChildNodes()){if(AllDivs[i].firstChild.hasChildNodes()){DIV2LI=document.createElement(\"LI\");while(AllDivs[i].firstChild.hasChildNodes()){DIV2LI.appendChild(AllDivs[i].firstChild.firstChild);}\nif(DIV2LI.firstChild.className==\"listitemmarker\"){DIV2LI.style.listStyleType=\"none\";}\nRootNode.appendChild(DIV2LI)}\nAllDivs[i].removeChild(AllDivs[i].firstChild);}\nAllDivs[i].appendChild(RootNode);}}\nvar AllAnchors=TheBody.getElementsByTagName(\"a\");for(var i=0;i<AllAnchors.length;i++){if(AllAnchors[i].className==\"ref\"||AllAnchors[i].className==\"cite\"){var label=AllAnchors[i].href.match(/\\#(\\w+)/);if(label!=null){var labelNode=document.getElementById(label[1]);if(labelNode!=null){var TheSpans=labelNode.getElementsByTagName(\"SPAN\");if(TheSpans!=null){var refNode=TheSpans[0].cloneNode(true);refNode.style.display=\"inline\"\nrefNode.className=AllAnchors[i].className;AllAnchors[i].appendChild(refNode);}}}}}\nreturn TheBody;}\nvar AMbody;var AMnoMathML=false,AMtranslated=false;function translate(spanclassAM){if(!AMtranslated){AMtranslated=true;AMinitSymbols();var LaTeXContainers=[];var AllContainers=document.getElementsByTagName('*');var ExtendName=\"\";for(var k=0,l=0;k<AllContainers.length;k++){ExtendName=\" \"+AllContainers[k].className+\" \";if(ExtendName.match(/\\sLaTeX\\s/)!=null){LaTeXContainers[l]=AllContainers[k];l++;}};if(LaTeXContainers.length>0){for(var m=0;m<LaTeXContainers.length;m++){AMbody=LaTeXContainers[m];try{AMbody=LaTeXDivsAndRefs(LaTeXpreProcess(AMbody));}catch(err){alert(\"Unknown Error: Defaulting to Original LaTeXMathML\");}\nif(AMbody.tagName==\"PRE\"){var PreChilds=document.createDocumentFragment();var DivChilds=document.createElement(\"DIV\");while(AMbody.hasChildNodes()){DivChilds.appendChild(AMbody.firstChild);}\nPreChilds.appendChild(DivChilds);AMbody.parentNode.replaceChild(PreChilds,AMbody);AMbody=DivChilds;}\nAMprocessNode(AMbody,false,spanclassAM);}}else{AMbody=document.getElementsByTagName(\"body\")[0];try{AMbody=LaTeXDivsAndRefs(LaTeXpreProcess(AMbody));}catch(err){alert(\"Unknown Error: Defaulting to Original LaTeXMathML\");}\nAMprocessNode(AMbody,false,spanclassAM);}}}\nif(isIE){document.write(\"<object id=\\\"mathplayer\\\" classid=\\\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\\\"></object>\");document.write(\"<?import namespace=\\\"m\\\" implementation=\\\"#mathplayer\\\"?>\");}\nfunction generic()\n{translate();};if(typeof window.addEventListener!='undefined')\n{window.addEventListener('load',generic,false);}\nelse if(typeof document.addEventListener!='undefined')\n{document.addEventListener('load',generic,false);}\nelse if(typeof window.attachEvent!='undefined')\n{window.attachEvent('onload',generic);}\nelse\n{if(typeof window.onload=='function')\n{var existing=onload;window.onload=function()\n{existing();generic();};}\nelse\n{window.onload=generic;}}\n"),("MathMLinHTML.js","/* \nMarch 19, 2004 MathHTML (c) Peter Jipsen http://www.chapman.edu/~jipsen\nReleased under the GNU General Public License version 2 or later.\nSee the GNU General Public License (at http://www.gnu.org/copyleft/gpl.html)\nfor more details.\n*/\n\nfunction convertMath(node) {// for Gecko\n  if (node.nodeType==1) {\n    var newnode = \n      document.createElementNS(\"http://www.w3.org/1998/Math/MathML\",\n        node.nodeName.toLowerCase());\n    for(var i=0; i < node.attributes.length; i++)\n      newnode.setAttribute(node.attributes[i].nodeName,\n        node.attributes[i].nodeValue);\n    for (var i=0; i<node.childNodes.length; i++) {\n      var st = node.childNodes[i].nodeValue;\n      if (st==null || st.slice(0,1)!=\" \" && st.slice(0,1)!=\"\\n\") \n        newnode.appendChild(convertMath(node.childNodes[i]));\n    }\n    return newnode;\n  }\n  else return node;\n}\n\nfunction convert() {\n  var mmlnode = document.getElementsByTagName(\"math\");\n  var st,str,node,newnode;\n  for (var i=0; i<mmlnode.length; i++)\n    if (document.createElementNS!=null)\n      mmlnode[i].parentNode.replaceChild(convertMath(mmlnode[i]),mmlnode[i]);\n    else { // convert for IE\n      str = \"\";\n      node = mmlnode[i];\n      while (node.nodeName!=\"/MATH\") {\n        st = node.nodeName.toLowerCase();\n        if (st==\"#text\") str += node.nodeValue;\n        else {\n          str += (st.slice(0,1)==\"/\" ? \"</m:\"+st.slice(1) : \"<m:\"+st);\n          if (st.slice(0,1)!=\"/\") \n             for(var j=0; j < node.attributes.length; j++)\n               if (node.attributes[j].nodeValue!=\"italic\" &&\n                 node.attributes[j].nodeValue!=\"\" &&\n                 node.attributes[j].nodeValue!=\"inherit\" &&\n                 node.attributes[j].nodeValue!=undefined)\n                 str += \" \"+node.attributes[j].nodeName+\"=\"+\n                     \"\\\"\"+node.attributes[j].nodeValue+\"\\\"\";\n          str += \">\";\n        }\n        node = node.nextSibling;\n        node.parentNode.removeChild(node.previousSibling);\n      }\n      str += \"</m:math>\";\n      newnode = document.createElement(\"span\");\n      node.parentNode.replaceChild(newnode,node);\n      newnode.innerHTML = str;\n    }\n}\n\nif (document.createElementNS==null) {\n  document.write(\"<object id=\\\"mathplayer\\\"\\\n  classid=\\\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\\\"></object>\");\n  document.write(\"<?import namespace=\\\"m\\\" implementation=\\\"#mathplayer\\\"?>\");\n}\nif(typeof window.addEventListener != 'undefined'){\n  window.addEventListener('load', convert, false);\n}\nif(typeof window.attachEvent != 'undefined') {\n  window.attachEvent('onload', convert);\n}\n"),("reference.docx","PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\NAK\184WB\179M\143\225m\SOH\NUL\NUL*\a\NUL\NUL\DC3\NUL\FS\NUL[Content_Types].xmlUT\t\NUL\ETX\153\186)Q\153\186)Qux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\181\149\203n\131\&0\DLEE\247\249\n\196\182\STX\167]tQ\133n\218n\219H\205\SI8f n\253\146=y\253}\199P\161\144E \175\r\210\216\190\231^\198\131\152-\246\SOB\178\211\202\132\"]!\186\ETB\198\130X\129\230!\183\SO\f\237T\214k\142T\250\154\&9.~y\r\236i:}f\194\SUB\EOT\131\EMFF\250:I\146\217\215\ACK\188\151%$s\238\241\147k(R\182\181\190d[X~\ETX\162\&4u\200\137\153&o\173\&8\250\ETB)wNI\193QZ\195\&6\166<r\206lUI\SOH\165\NAKkM\146<\STX\157\183\STXB \158V\249\SOH\252!\194\217\233,f\173\151\224\233\244\237\147t\232\&19\194\221\SUB\DC2\206\232\ACK\210eC\251|\188:I\131\EM\227Z\145\199\130/\NAK\220\254\229;\244@\SO\"\204\189u\129\145\223\213)`G\202\DC2\202\140\162\&8\240(a\168\249\157\189\176\254\130.\252\DEL\137yT\143\&7m\231\SO\247\n\238\&1u\rwL\130\142q\243\f\221\142\230\210\140\ESCD\139\198\226=\250\209\161\SIr\188C\197\215\n/\186j\SI\170\&9\DC3V\210\181\204\228#\142]\160\181\"\165\221\&0\214\228X{F>WV=i\172OH\165\142\191\139]\ACK\186/\139\245\160\204\153\186\239E\245\160\232\199A_\213,\f\202j\217\SI\CANk\DC2\205X\243\135|\157\252\SOHPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ACK\NUL\FS\NUL_rels/UT\t\NUL\ETX4\249\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULzn#@5\145\&2W\238\NUL\NUL\NULj\STX\NUL\NUL\v\NUL\FS\NUL_rels/.relsUT\t\NUL\ETXxx\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\173\146\193J\196\&0\DLE\134\207.\236;\132\185o\211U\DC1\145\198\189\136\176\&7\145\250\NULCf\218\ACK\219$$\163\238\190\189\DC1\EOT\183 U\193c\254\204|\243MH\179;L\163z\229\148]\240\ACK\182U\r\138\189\r\228|o\224\169\189\223\\\131\202\130\158p\f\158\r\FS9\195\238v\189j\RSyD)Myp1\171B\241\217\192 \DC2o\180\206v\224\ts\NAK\"\251r\211\133\&4\161\148c\234uD\251\140=\235\243\186\190\210\233\148\SOH\133\186^\157\205\192jO\ACK\210\158.A\181\199\200\191\EM\DLE\186\206Y\190\v\246eb/\223\204\209|\DLE\246\196\180\137\169\244'qe%\213b\234Y\fP\176\SI%\206\SUBc\172\n\SUB\244\130\214\246?\181\230\NAK_Fo!\145\166\207\248G\165\139\191*\209\130\210\196\130\132\130\218\134\196\203\207\245Qq\"\215\232\217\255(\217;PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t\NUL\FS\NULdocProps/UT\t\NUL\ETX4\249\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\229[#@,,\fwJ\SOH\NUL\NUL\174\STX\NUL\NUL\DLE\NUL\FS\NULdocProps/app.xmlUT\t\NUL\ETX~W\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157R\193N\195\&0\f\189\239+\170\221i\198`\ETXM!\DC2\218\SO\FS\NULMZa\231(u\219hi\DC2%\EM\218\254\RS{\221J'8\209\147\253\158\223\179\251Z\190\SO\206CH\SUBbvh\141\141O\227&%\191`,\170\ACKZ\EMs\164-2\149\v\173L\216\134\154\185\170\210\nVN\237[\176\137M'\147\&9\131C\STX[By\227{\195q\231\184\248J\255\&5-\157\162\251\226gq\244\232'FY\198\183.\148Q<\222q\214U\132m\SUB\EM\160D\173\168\164\137\192\217\SI@\244\v\170\131\209v\ETB\151\141\180\&5\148\151\177\223\EOT\141\191j\vQ\220N9\235*\194\158\189\255\132\DLE\181\179H\228\DC3|8\ESC`g\217.~\248\194\173d\130\203\134k\240\236d\180\146\137doZ\ENQ\ETB]\149\&2z\151\140\156\243\206\184\US!\t\RS\ETB\164J\184k\171S\179\241R\225U3\138\224O\134$\ENQ\180\222\208\202w\138\216\228\165K-g=J#\152\206\ACK\212>\232t\DC4\184t\216\158\FS\\\146\166\208-\136\&9\n\251\230\DC4\183\146\ACK\150\248a\250\184{\224\250\\q\255\&0\ESC\RSy\162\215\216\213A\250\ACK\191\"g\131\174#k\202\158p*FX\244\255\147\CAN}\ETXPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULan#@\177\t\162\248S\SOH\NUL\NUL\175\ETX\NUL\NUL\DC1\NUL\FS\NULdocProps/core.xmlUT\t\NUL\ETXFx\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\205\147?O\195\&0\DLE\197\247~\138({\234\&8\165\fQ\155\SOH\DLE\DC3\149*Q\t\196f\236kk\154\216\209\249J\218o\143\ESC\236\136 \150n\140\231\247\238\231w\254\179\&0./\165EX\163m\SOHI\131KNMm\\\233\133e\186'jK\198\156\220C#\220\212[\140W\183\SYN\ESCA\190\196\GSk\133<\136\GS\176\"\207oY\ETX$\148 \193.\196\172\GS\144i5I\146\133\146%i\170!l\160\228\192o\143X\247\&4%\EM\212\208\128!\199\248\148\179\180Z\v\163\172L\DLE\182\128`$$\190:-XdE\176;\190\DEL\128\164\171\208=%4F\142D\DLEd\241zNh\236\&9\151\&3=\192\185\179\168\156WGe\212k\225he\149\222jPw\231\224\250\181\CAN\189\b\159\218ik*\254m\ESC\234h\144\130`g1b\134\&2\f\165\192I\212-\249\150\235\a\251\209\FSx\EOT\216\184\239\129A\ENQ\224\201\233\129\216u\221\180\155\245L\255*8{]==\247\SI(\211\198\145\240\151\152\SO1z\214\159Yz\133y\167\211%\157[X\166q\231\151\217\253\195\230\&1\173\138\156\ETBY\206\179|\182\225\188,\230\229\252\230\237\DC2y\148o\148\185\tg\251oC\199\128\213$\220\228\232gV\147/PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL\193\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ENQ\NUL\FS\NULword/UT\t\NUL\ETX\n\250\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL\200\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\FS\NULword/_rels/UT\t\NUL\ETX\ETB\250\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\135\161%B\198UX\DEL\226\NUL\NUL\NUL.\EOT\NUL\NUL\FS\NUL\FS\NULword/_rels/document.xml.relsUT\t\NUL\ETX\157\249\232P\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\189\212K\SO\194 \DC4\ENQ\208\185\171 ,@\180\254\DC2\211:r\226T\187\SOHZ_?\177|\STX\207\168\187\151\168i\159\209\129\DC3\EM\146\v\151\ETX!\164{\232$\182F\251\166\181\158]U\167}\198\ESCD\187\SYN\194\151\r(\233\199\198\130\SOIe\156\146\CAN\134\174\SYNV\150'Y\131H&\147\165p\180\131oF\140\165\180\150\229\&7\v\191\148\154\170jK\216\154\242\172@\227\151n\161\207\170\NUL\215\234\154\135Mv\199\140\187\221q\202Y.]\r\152\241>\RS\135f\206\196?)\RSo\GSx\226H\ACK\199\&3\139\129\NUL\196p\\\202\152\DC1\198+\141\NUL\185@q\248\180\204\a\v\153\DLE\129S\EM\141\185,: \152\197\128\233\227\b\DC4\fk)c90\RS\209s\194\&4\202\165\CAN\212\ACK\223\RS\237\138^\202+\238)\169x\251\GS6\163;PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\194n#@R\138\243\174\157\NUL\NUL\NUL\227\NUL\NUL\NUL\DC1\NUL\FS\NULword/document.xmlUT\t\NUL\ETX\252x\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULE\142I\SO\194\&0\fE\247=\133\149=Ma\129P\213a\203\&5B\226\SOR\DC2GIJ\225\246\184\131\196\234?\235\235?\185\233?\206\194\ESCc\154\201\183\226ZV\STX\208k2\179\US[\177\228\225\242\DLE\208wE\179\214\134\244\226\208g\224\133O\245\218\138)\231PK\153\244\132N\165\146\STXz\238\ACK\138Ne>\227(W\138&D\210\152\DC2\v\157\149\183\170\186K\167f/v\231\139\204w\135\208\NAK\NUL\156q\203\157\242A\NULO\180\150\128M\214\148G)\207v\ETX\RSl\DC1\142\&8}\242\255mW\252\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@jp<\224\155\SOH\NUL\NUL\229\b\NUL\NUL\DC2\NUL\FS\NULword/fontTable.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\229\149MK\195@\DLE\134\207\n\254\135\176w\155MZ5\150F\209J\143\RS\252\192\243\&4\221\&4\v\251\DC1v\182\141\253\247N\210\134\182\168Q\EOTO\t,l\222wvvx\152I&\183\239Z\ENQk\225PZ\147\178h\192Y Lf\ETB\210,S\246\250\&2;OX\128\RS\204\STX\148\&5\"e\ESC\129\236\246\230\236tR\141sk<\ACKt\222\224\216\165\172\240\190\FS\135!f\133\208\128\ETX[\nC^n\157\ACKO\175n\EM\218<\151\153x\176\217J\v\227\195\152\243\203\208\t\ENQ\158\238\198B\150\200v\217\170\223d\171\172[\148\206f\STX\145\138\213j\155O\131\&4\140\234;\217\NAK\CANTc\ETX\154\n\DEL\222\232\185U\141U{%\CAN\139\"\"{\r*e\156\SO\243\v~\244\176\176\r\206\np(\252>xo\229\160\165\218\180\SO\172\188\221{\165\244Y\209Zkp\DC2\230J\236m\148K2W8\231\148\178\189s\171D\159\148\184Q\162\ETXex\FS\147\&5y\146c\229\&0Os\239$\220b\249\138\208\139\212\STX\131GQ\ENQOV\131\233@\NAK\243K>$\\#Z1\237F\223\163\226\255\133j\248\ETX\170C\229KT;!\250\v\170\169]9)\\\r\171\ETX\211\NAK\161\185np\213\152F\253\195\244F\131Y\DELI\240[H5\152\168Y\t\SOHJ\bY\210\183\177\155\130\158S\141\GS}T\143\217v\220\234\177\139\251\215GSP\146\CANu \154\&5\157\DC47\176z\137\232\142\n\236\250\187\221S\239\140v\136\226\RS\NULj\183H\251\SIPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\174\161%B\245\143\150\206\228\NUL\NUL\NUL\165\STX\NUL\NUL\DC2\NUL\FS\NULword/footnotes.xmlUT\t\NUL\ETX\232\249\232P\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157\146\193j\195\&0\f\134\239y\138\224{\234t\135\&1L\211^\202\158`{\NUL\227\216\141!\182\140\164\196{\252y\180\ETX\247RB|\DC1F\250?\161\159\255t\249\ts\187Z$\SIq\DLE\199C/Z\ESC\r\140>\222\ACK\241\253\245\217}\136\203\185\&9e\229\NUL8\STX[j\218\242\138*\146\202\131\152\152\147\146\146\204d\131\166\ETX$\ESCK\207\SOH\ACK\205\229\139\&7\153\SOH\199\132`,Q\129\134Y\190\245\253\187\f\218GQ\161\194\SYN\DC48\231\141\189\130Y\130\141\252\SI\226\169\ACK\225^\DLE\218Ysq\129&\159\168&\194 \SYN\140\234\129\235\130\&7\b\EOT\142;\ETXA\221I\143R\171\214W\170\&5\204\245l>\246\ESCv\252\EMY\171\244\150KG\212\249\133\237\201\155\GS\148\162\226\ENQ\159\206\205i\a\231\&9\SUB\215{S\148\184\201*o\231\230\ETBPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\184M2@0\SUB]B\168\ETX\NUL\NUL\a\RS\NUL\NUL\DC2\NUL\FS\NULword/numbering.xmlUT\t\NUL\ETXK\ENQ\ETBO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\213\153\221N\219\&0\DC4\199\175\199ST\145v\t\249\254hE\139\DLEPi\DC3b\147\198\180\235\&4q\169\&5\DELDv\218\194\237\246\&0{\132I{\169\189\194\236\164\t)\DC4\226RGk\185\169\227s\206\223'?;\246\177\&8=\187\199\168\183\NUL\140CJ\134\134}b\EM=@\DC2\154Br74\190\222\142\143#\163\199\243\152\164\&1\162\EOT\f\141\a\192\141\179\209\209\233r@\230x\STX\152\240\235\t\t\194\ax14\230\140\fx2\ETX8\230\199\CAN&\140r:\205\143\DC3\138\a8N\ACK\v\140\140\202\153\SO\141Y\158g\ETX\211\\\249\159\212\254'\194\223\164\211)L\128)\194\170\166cY\145x\134\164\210X\128g\SUB4\ETXD\CAN\167\148\225\&8\ETB\143\236ND\176\239\243L\230\144\197\&9\156@\EOT\243\a\169\NAKT2\244\181\180\203\177W?U\EOTS\EM\183\f\185\164\201\FS\ETX\146\ETB#\154\f \145\ETX%|\ACK3^\163x\171\154\&0\206j\SYN\175\189D\131\251\210\182\DC4^wIYZG\168\164'\ETX2F\DC3\192\185X\DLE\CANU\t>N\214\146<\159\173\141\&3.\165\202p\217jd\158\169$\146\178x\217\200`=\175\203\210h\140\142\222\137\245\ESCOx\206\226$\191\153\227\222\218\211\135thX\210Iz\DC1\SOSa^\196hh\140\139?\251\210\&0WF<G9\188\ACK\v\128n\US2P\185\NAK\189H\246\214\142\&9\206Pe\190\180<\171\DEL\DC1^\212F\180\144\&6(~\170qe\175\248\232X^\197\216\165\243\187\242\179\ESC\227\218\&0\153#\EOT\242G\171\DLE\185\ENQ\247\181y\205\240\&1\169\186\DC1\152\&6b\178\207\172h\SYN\137\n\SO\229\195\234\169\n\DC1\195\SUB\162\157Q.\147\&4W\SOHf3B\EOT@\"aIy\233%\154S\200x~\r\229\228WQ2\168\SUBR\132\176\198\232lLI\206\229l\240\EOT\194\161\241\229\SOHO(\146:\179s1\DC1k\GS\144\136\&1R0\141\ENQ\237\134\242JN6\197+o l\235%\252\247\199\239n \135\142\SUBf\219\138\n\210\179\152\220\NAK\155\182\ESC\236\tiG/i\218\rg\219\243\DC4AG\150\ACK\208\ETBt\206 `\189\ESC\176l\208~\218\251V\228\174\238\197\253\171\ESC\232\142\GS\168Aw|G\ETX\244o\"TV4\188\129|\189\239\173\192=\205\192\DEL\254\233\bx\DC4\169\SOHw\GSo\175\129\251\a\178}\vl\138\192\251\193\158\238\223\193A\236\223\158\171xPz\129\142\131\178\219\253;<\144\253\219\183\DC4\SIM\223\211qhv\183\157D\a\178\DEL\251\161\226\129\EM\216\251u`\202V\227n5j\191z\217\155\174^\174\229G~?tw\187z\157{\225\149\237_\\i\185z\165 \129\&8F/\174\133\247\246\201\255\189\EM\132OV\194c\\c%\232\187(\181\242p:\226\161^\193{\222ND\182\189\208\180\DC2q;\"\162^^\219\193ND\182\189o\180\DC2\241\186\"\162Z\255\SYN\142;\DLE\217\246B\208J\196\239\136\136z\129\SUBX;\DC1\217\182bo%\DC2tDD\189\146tw\219Y\183-\172[\137\132\GS\DC1Q/\243\172\221v\214m\235\222V\"QWDT\235\176\194q\a\"\219\SYN\166\173D\250\GS\DC1\t<\197\157\181p\220\130\200\198\202\145\DC4\NAK#yR)\174U\144U\146\165\184T!\ESC\163\157W\163\237f\141\248i\SOH\CAN\131)x\169Vl\216\215\130\205\181\232W\244l\205z\142f=W\179\158\167Y\207\215\172\ETBh\214\v5\235Eo\212\171\191\134U\163\252\a\238\232\232\USPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@>\166j\135\245\STX\NUL\NUL\224\a\NUL\NUL\DC1\NUL\FS\NULword/settings.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157UMs\218\&0\DLE\189\231Wx|.\177\249\ACK\SI$S $\a\210a\226\164wY^\131\ACK\201\242H\STX\151\254\250\174\193\178=M\157dzBzo\223j\181\214>f\247\191\EOTwN\160\&4\147\233\220\237\222\250\174\ETX)\149\&1Kws\247\237u\221\153\184\142\&6$\141\t\151)\204\221\&3h\247\254\238f\150\a\SUB\140\193(\237`\134T\ar\238\RSU\SUBh\186\aAtG0\170\164\150\137\233P)\STX\153$\140B\249\227\150\n5w\247\198d\129\231\149\162[\153A\138\\\"\149 \ACK\183j\231]%+I\143\STXR\227\245|\DEL\228)\224\196`\189z\207\&2m\179\137\255\205\134\228\222&9}t\137\147\224\&6.\239\250_\184n.U\\)\190R^!\200\148\164\160\&5vVp[ Km\SUB\205\191\146\231JmX\164\136:7\146\220\221\&8\SO~\185\223R\n'\SI2P\DC4\187\&0w\167\190\235\149\DC4\136\b\226\240\172\r\136\181L\141\182\&8V%\147\208\DLE\ETX(\212\EMp~y \148\ETX\193\218\242`\167\136\DLEDY\196\202\180\&9s\216\146\DC4\214\151\234\214\140\ESCP\CAN~\"x\SI\223\247\aUd,\DELH\243\170\b=<\203\DC3T\231\198\144\144#7\175$\n\141\204\172r\220\171+\142\NAK\201\177\150G\197\226'\169\216o\172\154\240\&0#\DC4A\ESC\223\US\253\&3\254'(\195\232\199\209Lg\156\156\235\204\171Z\254\128cs\174.\243\183\196&\255\\@\247\EOT\239\141\141)\235X\226AJr\ESCx\233\204R\138L\225\179\168;KN\176Upb\144o\EM5G\ENQ\150\193Q\142u\177\174v/R\154\186\233\195\169\191\242\199\215DUH\227\155t\187\203\201\162\149\RS<\244\166\139~+\253I\242\241d\176\SUBNZ\233\201j4\EM\181'_LF\139\241\176\157^\SO&\171vz\217\US\245\198\211V\250\161\223\GS~/\207\158y\141\&6\206DPX\196V\149\194\235\182\152\SOG\\\197\155#e1q\RS\NAK\218$T\a\136 R\135\ENQKmT\EOT8\162\239\233\240\CAN\217\136N\167\193jA8_\227\195\176lB\184n\202\139w\182\130\164\141\230\207D\237\234\211\253\ACK\165\218\169\\\145\236\133\237\246\166\134Xj6L\216`}\140\194c\214P\164h1-\252\204k\182\SO;n\208\150\160\232\220\134\212\227\ACKi\231-\172\135\129\171\176p/x&Yv\GS\202h\215\157\187\188(\170[X\141\193]L\212\225\178\137v\189\146\235]\184\222\149\187l\b-\236\r\163\203E\141\245,\214\136\235[\172_c\ETX\139\rjlh\177a\141\141,6*\176\253\EM\157\NAK\253\241\128Vm\151\ENQ\158H\206e\SO\241S\205\191\131j\ETB\SOH\202\240\ENQ\132g\DC1\213Vp[\209\156i\DC3B\134\198ade\168\223\n\186x\187\246\175\249\238\230\SIPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\233\173ZB\230\131\166\136\167\EOT\NUL\NUL\181\"\NUL\NUL\SI\NUL\FS\NULword/styles.xmlUT\t\NUL\ETX\230\157-Q\230\157-Qux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\237Y_s\226\&6\DLE\DEL\231Sx\252\158\ETX\DC3\146R&\228\134\144f\146\153\244\154+\164}\SYN\178\140u\177%W\146C\232\167\239J\182\193\&6\182\225\b\205]2\188\161\221\213\254\253\237J\SYN\ETB\159_\194\192z&BR\206\134\182\243\169c[\132a\238R6\US\218\177\242N\250\182%\NAKb.\n8#C{I\164\253\249\178u\177\CANH\181\f\136\180`?\147\ETX1\180}\165\162A\187-\177OB$?\241\136\&0\224y\\\132H\193R\204\219\220\243(&\215\FS\199!a\170\221\237t\206\219\130\EOTH\129m\233\211H\218\173D\219b\ETBm\v.\220HpL\164\EOTg\195 \209\ETB\"\202\236\203\150e\129\135.\199\215\196Cq\160\164\166\CAN\154x\DLE)-!e\196l\149\172o8S\210Z\f\144\196\148N\193\ENQ\136<\164\140\139\219\DC1\147\212^\201.\ACK\EOTI5\146\DC4m\n\SOH\211\215?\SUB\183c\169r\236+\234\194\190v\193\ETB\249/\136=\163`hw{\155\188\177\172\231\ACK\136\205\&3.a'\143\DC3;\231o\142\&4\ETX\171C\ESC\137\147\201(\167\226\162\157\203K\186(d\SO,DU\201\140J\201\148\DC1\194\212x\130<E\NUL(P\167\146\157(o\167\168TSJu4\161)@\208$A \b\DLE\239\158\227'\226N\DC40\134v\199N\136\143w\SI\130rA\213R\211ZVB\157\144\144\222R\215%,'\201|\234\146\191}\194\RS%q\215\244\175\&7\ACKq\171\237\152\199\fV\221_\206\211\DLE\178F\NUL\158ZF`;B\STX\205\ENQ\138\252T\131v\ESC\SUBK\175\140\224\GSh\255\162\149\ACK\246*\143\f\133$\171T\202\203\DC2\EOT\220\DEL\DC2\USR{\237T\207v\227+sS\170\STXRm-a\229\140\205\DLE\196\255\a\171\247\134\145\ETB\181\163\175e8\192\234\137\144\232\139\214\208.\DC1\239)\131R\230\169k\220\204\b\244=D\215\235\155\178d0\234\NAK`\180\CAN|\195\153_\CAN\192A\196\218\175\STX\196\n\237^\219\236\232[\169[7[]\139\252\150\210\&6\186\189b\255\186\215\&5\179\212\235:\245\197\213\184\152\SO\204\ETX.\178\NULO{g\163\254H\ESC5*\199\154\a-\140u\224\206\218\162aN|\228\130\209\171\179\162\181\245\\9=/s\214S%\199\203\r\132}@8\138\149\207\133\172\134a\198\252\DC18\219\ENQ6\251\EOT|\r\163\168:Z\195\249H\161\222\DC2\164/\fNu\184)\215r\SO8gb\154M\246L\230\215\US4\134JC\136\199*\NUL\GS\247\207A\230X\231\&8\135~\166\&9\148\162\177\219\140\213\238\219a5.\\=\222\n\196\230\DC2\182;\136\157\SI\f\226\222M\223\185\186\174\ETXq\GSX\187\r`\237\RS\CAN\172\167\205`==\130\245\b\214&\176v\251\245`\205\241\SO\ETX\214^3X{G\176\RS\193\218\b\214^\ETXX{\a\ACK\235Y3X\207\142`}\223`\165\197\213;\ENQ\235U\192\241\211\215\152\215}P\SUB\190\149\b\252\252\128\221D\161S@\161\211y\DEL\159L%`\229\NUL\210i\NULH\231\251\SOH\130}@\b6\223\238\133\231\197\150Ux{H\CAN\SI\EM\154t\158j\222\"\DC2Ik%j\EM\217\\\241\228\234\185tK\241\155\GSWh\166_\SUBk\223D\167\154\191\253a\212\154&z\246\240\175\ACK\156j\SYN\DC4@\ENQ\235;\230\130\213E\250\f\156\248\239\190\160b%AnL\130\224wT|\238V<\218\178\215\136\ENQ\196S\137\156\211\233\&7J\206\184R<\220E\167\160s\DEL\187R]\166\178\239)\237\NAK\143]\196\163\140\234?r\166D\132\181PKe,#\180\239\164Z\235\177kg\204^\135\226\198)\216<}f\a\154\238\185x\182\228m\215\148\237u\198pw9\133\140\213\156\&0\192\181\f\251{\170\ACK\183\135\167\188\ACK\173`\f\ETX\172\190n\ESC\197p\186\149\229\216\235o\DLE=9\198(\170\207\180\145\176\&2\145\183\138\&4;\ENQ\vg`u\216\NAK(\164\aB\225]\136\230\205\217\&1\DC2\US>;\133\ETX\SYN\199\DC2f\175\249\159q\243\144-D\210\220\&5V9\218R\202*\207\235-\t\220\169\215w\143\230/\"fH\209\176>\154Lb[0u\NAKn\186\187\r\237\&1g\146\aH\174\174cyR\205\221j\143w\182\221\DC3r\195\185bp\163\254\147x\213\249\200\EOT,-\241\218t<\DC3\161F\SOH\157\175\182\201\&8\"BbA#\245\DELF\t\231\225Sux\134\243\218\176\246\248\194\170\SOr\245S^\182\254\ETXPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\FS\NULword/theme/UT\t\NUL\ETX4\249\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@\157\\\139\190\"\ACK\NUL\NUL\135\GS\NUL\NUL\NAK\NUL\FS\NULword/theme/theme1.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\237YMo\219\&6\CAN\190\SI\216\DEL to\229/\165NP\167\136\GS\187\221\154\180A\226v\232\145\150h\137\r%\n$\157\196\183\161=\SO\CAN0\172\ESCvX\129\221v\CAN\182\NAKh\129]\186_\147\173\195\214\SOH\253\v{\245a\153\178\233\196I\211\173C\155\131#R\207\251\253\242!i_\189v\DC42t@\132\164<jY\213\203\NAK\v\145\200\229\RS\141\252\150u\167\223\187\212\180\144T8\242\&0\227\DC1iYc\"\173k\235\US~p\NAK\175\169\128\132\EOT\129|$\215p\203\n\148\138\215l[\186\&0\141\229e\RS\147\b\222\r\185\b\177\130\161\240mO\224C\208\ESC2\187V\169\172\216!\166\145\133\"\FS\130\218\219\195!u\t\234'*\173\245\137\242.\131\143H\201d\194eb\207M-\234\DC2)\214\219\175&\255\228Xv\152@\a\152\181,\176\227\241\195>9R\SYNbX*x\209\178*\233\159e\175_\181\v!\166\SYN\200jr\189\244/\151\203\ENQ\188\253Z*'\252A!X\237\&5V\175l\SYN\250k\153\254y\\\183\219\237t\171\133\190\DC4\128]\ETB\"\173\206a\ESC\189f\181=\209\169\129\178\199y\221\157\138Si\148\241\154\254\250\FS~\181\221n;\171%|}\138o\204\225\155\149\149\198F\173\132oL\241\206\188\255\237\141Ng\165\132w\166\248\149\&9|\239\202\234J\163\140OA\SOH\163\209\254\FS:\169gQ\153\STX2\228\236\134\DC1\222\EOTxs\210\NULS\148\173uW&\US\169E\189\SYN\226\251\\\244\NUL\144\SYN\ETB+\SUB!5\142\201\DLE\187\128\235`F\a\130&\ACK\240\SUB\193\218\155l\202\149sS\137-$]Ac\213\178>\142\&1\172\136)\228\213\243\US_=\DEL\138\142\US<;~\240\203\241\195\135\199\SI~6H\221\192\145\175K\189\252\254\139\191\US\DEL\138\254z\250\221\203G_\153\241R\199\255\254\211g\191\253\250\165\EM\168t\224\139\175\159\252\241\236\201\139o>\255\243\135G\ACK\248\134\192\ETX\GS\222\167!\145\232\SYN9D\187<\132\192\f\ACK\200@\156M\162\US`\170KlD\190\196\DC1Nd\f\232\174\nJ\232[c\204\176\SOH\215&\229\f\222\NAK@\SOH&\224\245\209\253\146\195{\129\CAN)j\NUL\222\f\194\DC2p\155s\214\230\194\CAN\211\205\196\150\158\133Q\228\155\141\139\145\142\219\197\248\192d\187\&3S\223\238(\134^\166&\149\157\128\148\220\220aPr\236\147\136(\148\188\227\251\132\CAN\196\238QZ\202\235\&6u\ENQ\151|\168\208=\138\218\152\SUBS\210\167\ETXe\SYN\186AC\168\203\216\228 \212\187\148\155\237\187\168\205\153I\253&9(#aU`fRIX)\141\215\241H\225\208\232\&1\SO\153\142\220\194*09\185\&7\SYNn)\225RA\165}\194\&8\234zDJ\147\204m1.\185{\DC3\168\195\\\246m6\SO\203H\161\232\190\t\185\133\&9\215\145\155|\191\DC3\224\&06\250L\163@\199~$\247\161E1\218\225\202\232\EOT/\175\144d\fu\192\209\194r\223\165D\157mm\223\161~`n\144\228\205H\228\188]b\224\144F'\209q\bl\140/\154\142\129\NUL_|\251\248\DELD\196\ESC\144\EOT\211J\152\165\223E\184Y\210\237p\225\209\183\159s7\241(\218!\208\230\239)\247=\229\190\139\148\187h=/K\180Sn\181\245Cq\170/\\xB\RSR\198\246\212\152\145-\153\178\178\EOT\167\189\RSL\166\131T\168\&8\144\199\SOH<\230\230J8_\224\244\EM\t\174>\161*\216\vp\ff\170\169\ENQ_\230\170}\137b.\225\SUB`-\212\157\222%)\EOT\159\206\&9\147\v \160\177\218\230^6]\215/\134\133\154t\228K\221P=Q\176\172\177\250\149\215\&3V\205\128KZ\171:fk\206\137\214l-\155\176\SUB\DLEN\174\253\213\149Zf\SUB:\ACK3\226%y\207\DC4L\202\242\ACKKT\173h5\n\176G\f\211Z|\213\250\ESC\201\166s&'.&\201\149\185$\219\243\171\137E\229\DC1:\132;\188Ss,\228\226\184e\r\225\f\EOT\143a\f\250d\194\US\152\249Q\203rU\SYN\224\233kq&\226UsWU+\206\162\128K&b!\213&\150A&\149\190\154|\237\DC1M\253\175\&9\141$\SI\ETB\DC3\128\129L\150\243\162\222\172\254\135^\216\179\165%\195!q\213\130\153\233\&0\DEL\199G\138\136\189\192;D\ETX6\DC2\187\CAN\252nd\221\229Q\t\148_\155\f\EOT\244v#o\188\242\194\205\215\198\236\215+\249\154\193,\SOp\222\237M\173\246\EM<}.|HG\154{\246\STX\223\207\EMJ\253\STXCq\222\221P\146\206\133Sg\221K\175B\176\139\v\140\146\RSmY\\\168\128\ETX\v\197\SOHu{\STX\246\253\212\SYN\248\133`Y$.!\150|Y\156\248J\SO\166\188\149\233\200H\206\SI\212.\245\145\160\192t*\DLE\132\236\168<\206S\148Uk\250\246\&8Q\148\243L\225\174\140\179\255\ETXr@X?Y\189+I\252\SYN\n&l\146'\"\197\205\SYN\205\&6\173\174\129\223{\139\SI.\141sm<SC\141\179l~\r\141\244\181\173`\245\245\\Xf\ETX\214\204\213\204\DC1\215\156\133;\207\236V\ESC\195\221\SOH%\US@\220T\184lz<\237\243]\168>*\246y\EOT\141x\169\153/\191br\NUL>7\181\224\DC2U\255\214)\168\185\160\222\ETByv\212\146]_\144\236\147\205\157?\217\142!\215\206\201\169\182\231\151\168\173\221C\210\209\220\143F|p\USlo\194=g\196\178\EM\EM\195({\216\DC1i\192\ETX\238\141\243G&3J\200\DC21\161t\SYN\237\146!\162\222\209\164\172\&3\EM\205\DEL\149)6\243\221\204@\DC2{!X?]0\199O7\145B\184v\186p!1\185\236\NAK\194\233-\206\164\128M-g\248\172\202\ENQE\SYN\153b\209\235\164l\t\231\205)3v\239\178)[\162P\231H\153::9ey\166lS\227\145#%pg\242\&3\DC3\244\175=m\217\245\DEL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\229[#@\204d$|\129\NUL\NUL\NUL\159\NUL\NUL\NUL\DC4\NUL\FS\NULword/webSettings.xmlUT\t\NUL\ETX~W\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL]\142\&1\SO\194\&0\DLE\EOT\251\188\194\202\ETX8\139\130\194\&2\145h\160\139\144\252\STX\147\FS\137\165\179\207\242Y\152\231c\SUB\n\202\157\213\172\214&\209\166\225\195a\173!m\162\222\145\146\152N\207\227^k6\NUL\178\236\CAN\189\FS8c\234\237\147K\244\181\199\178A\227\178\230\194\v\138t9\DC2\FS\181>A\244!\141\211\160\148\253\142{\"n\247\249\ACK?\178\242\204\213\249\ETB^\196u\141\240\SUB\b{m\225\239\204\&4|\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\NAK\184WB\179M\143\225m\SOH\NUL\NUL*\a\NUL\NUL\DC3\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129\NUL\NUL\NUL\NUL[Content_Types].xmlUT\ENQ\NUL\ETX\153\186)Qux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ACK\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\186\SOH\NUL\NUL_rels/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULzn#@5\145\&2W\238\NUL\NUL\NULj\STX\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\250\SOH\NUL\NUL_rels/.relsUT\ENQ\NUL\ETXxx\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A-\ETX\NUL\NULdocProps/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\229[#@,,\fwJ\SOH\NUL\NUL\174\STX\NUL\NUL\DLE\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129p\ETX\NUL\NULdocProps/app.xmlUT\ENQ\NUL\ETX~W\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULan#@\177\t\162\248S\SOH\NUL\NUL\175\ETX\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129\EOT\ENQ\NUL\NULdocProps/core.xmlUT\ENQ\NUL\ETXFx\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL\193\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ENQ\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\162\ACK\NUL\NULword/UT\ENQ\NUL\ETX\n\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL\200\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\225\ACK\NUL\NULword/_rels/UT\ENQ\NUL\ETX\ETB\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\135\161%B\198UX\DEL\226\NUL\NUL\NUL.\EOT\NUL\NUL\FS\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129&\a\NUL\NULword/_rels/document.xml.relsUT\ENQ\NUL\ETX\157\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\194n#@R\138\243\174\157\NUL\NUL\NUL\227\NUL\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129^\b\NUL\NULword/document.xmlUT\ENQ\NUL\ETX\252x\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@jp<\224\155\SOH\NUL\NUL\229\b\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129F\t\NUL\NULword/fontTable.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\174\161%B\245\143\150\206\228\NUL\NUL\NUL\165\STX\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129-\v\NUL\NULword/footnotes.xmlUT\ENQ\NUL\ETX\232\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\184M2@0\SUB]B\168\ETX\NUL\NUL\a\RS\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129]\f\NUL\NULword/numbering.xmlUT\ENQ\NUL\ETXK\ENQ\ETBOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@>\166j\135\245\STX\NUL\NUL\224\a\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129Q\DLE\NUL\NULword/settings.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\233\173ZB\230\131\166\136\167\EOT\NUL\NUL\181\"\NUL\NUL\SI\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\145\DC3\NUL\NULword/styles.xmlUT\ENQ\NUL\ETX\230\157-Qux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\129\CAN\NUL\NULword/theme/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@\157\\\139\190\"\ACK\NUL\NUL\135\GS\NUL\NUL\NAK\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\198\CAN\NUL\NULword/theme/theme1.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\229[#@\204d$|\129\NUL\NUL\NUL\159\NUL\NUL\NUL\DC4\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129\&7\US\NUL\NULword/webSettings.xmlUT\ENQ\NUL\ETX~W\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ENQ\ACK\NUL\NUL\NUL\NUL\DC2\NUL\DC2\NUL\SOH\ACK\NUL\NUL\ACK \NUL\NUL\NUL\NUL"),("reference.odt","PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL'\186\241>\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t\NUL\FS\NULMETA-INF/UT\t\NUL\ETX\233\207#N\246\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\188\184\241>\224\&5d\200\233\NUL\NUL\NUL+\ETX\NUL\NUL\NAK\NUL\FS\NULMETA-INF/manifest.xmlUT\t\NUL\ETXC\205#N\232\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NUL\173\146An\195 \DLEE\247>\ENQboh\187\170\144\237\236r\130\244\NUL\DC4\143\GS$\CAN\144\EMG\241\237\v\149\DC2\187j\164*\149w\ETX\250\243\254\159\209\&4\135\171w\236\STXS\178\SOH[\254*^8\ETX4\161\183\&8\182\252\227t\172\223\249\161\171\SUB\175\209\SO\144H\221\n\150\251\&0\221\159-\159'TA'\155\DC4j\SII\145Q!\STX\246\193\204\RS\144\212O\189*N]\197V\240`\GS\212Y8-l5\131\222\234\154\150\b-\215\&1:k4\229\156\242\130\189\248\246\DC2[\vAp%\190vo\166z\219|\SI\179su\212tn\185\228\242\169\f\197@\230A\RS\211L@*1\138`On\162\197A\218\GS\235\129\244?\160\214\235\DC1d\196\241\&1\245t\158\253'j\235\146\164[)\138\250\&9\151?\225\251n\CAN\136\242\193\223w\220\200_\247\222U_PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL)\184\241>\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\FS\NULThumbnails/UT\t\NUL\ETX.\204#N\246\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\128\171j>\205_\234<\137\NUL\NUL\NUL\230\STX\NUL\NUL\CAN\NUL\FS\NULThumbnails/thumbnail.pngUT\t\NUL\ETX\224\178yM.\204#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NUL\235\f\240s\231\229\146\226b``\224\245\244p\t\STX\210\199\CAN\CAN\CAN\EM8\216\128\172\ETB\177\156\SO\f\fLk=]\FSC*\230\188\189\182\145\243\128\129\NUL\139#\247\149\250\211\155\130\SI?\251\149\176\172\201[,o~\177\220\131\252\251r\f\194\156\204M\ACK\n\FS\163\196(A\"\193\SYN\153=\247\252\174\189\204\137\SOBl,\137<\143\220\206*\242p\FSjP \135\208\ETB\185\193\251GO\234n\DC20\253\&2x\186\250\185\172sJh\STX\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\CAN\186\241>\159\205o\152\239\SOH\NUL\NUL\215\ACK\NUL\NUL\v\NUL\FS\NULcontent.xmlUT\t\NUL\ETX\208\207#N\210\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NUL\141\149M\147\SUB!\DLE\134\239\254\138\201\228<\226hR\181R\234^sXO9$W\EOTF\169\240\&1\ENQ\232\204\254\251\240\161\136fg\195e\166h\158\151n\186\ESC\216\188\142\130W\ETB\170\rSr[\183\243E]Q\137\NAKa\242\184\173\207\182k^\234\215\221l\163\186\142a\n\137\194gA\165m\176\146\214\253+\167\150\ACK\198Y\199k\t\NAK2\204@\137\EOT5\208b\168z*o*\152\211\208\251\154E\139\177\239\188X\RS\224\\m\233hK\197\158}\208\162C\185\231\NUL\231j\162\209P*\246\172Kj.\239T\169x4\188\233\148\203\186\232\145eOQ\140\156\201?\219\250dm\SI\SOH\CAN\134a>\172\230J\USA\187^\175A\152M\SOH\227\196\245g\205\ETXE0\160\156zg\ACK\180\243\SYN\220XA-*\141\207\179yH\242,\SOT\ETB\167\ACKY\244OU\205\229X\220\DC1\151\227Dj\240\t\233\226\222\b\240cyW\164\188\188+\146k\ENQ\178\167\137\154\188\128\189\155\f\159\253\219\189\ETB\180(\245\229\217\135Ta\205\250\226mF:\215+\165R\168^\DLE\SIh\bw\185X|\ETXq\156\209\195\167\248\160\153\165:\195\241\167\&8F\FS\167\140+\241Q\210\FS\215\STXG4\244\226\219\&45\190O\132\153\DLE,A\156N\176!\147K\255\222\191\253\196'*\208\GSf\255\135\ESC&\141E\242\158\EM\237\139\&0\185\211\239@\211^i\155\DC2\211\149_\152\174Z\203\228\133t(\185q\164\153\135\NAK\SUB/\f\190\242\NAK\128?\153\192K\190\166Nc\148\223\218:\ENQy\245O\199\158j\230\133\136\251\202\&5\194\184]\186j\170\RSf\234\216<We\246x,\235\221\172\170n\143\197A\145w?\190[\252\237\ESC-\206\SYN\174\226~\247\131r\174\170_Js\242e\ETX\174\198\168\STXO\178d\136+\167\225\243\171\180\155\253\ENQPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\227\185\241>G{\214t\181\NUL\NUL\NULV\SOH\NUL\NUL\b\NUL\FS\NULmeta.xmlUT\t\NUL\ETXj\207#Nl\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NUL\141\144\193\SO\130@\fD\239|\ENQ\217;\DC4\208\131\&4\162\223B\150\130\ESC\161%\236\"|\190,\b\225\232\177\157\&7\153i\239\207\185k\195\SI\r\214\b\ETB*\141\DC3\NAK\DC2k\169\f7\133\SUB]\GS\221\212\243\DC1\220\165\174\141&\172D\143\GS\177\139:re\184X\217\226&-\240\192(\165\&5\SYN\185\236\200\162\211(=\241n\193\&3\141>(\216\&6sk\248]\168\151s=\STXL\211\DC4O\151X\134\ACK\210<\207aUw\180\210\a\215\143C\187R\149\ACKj\201'XH\227\DC4v\214\&7\252\183\148g\207\149D\228\b\242\248Vz\141\203\146\228\n\219\172\130\223\&1\167\247e*\132G\240\ENQPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL\128\171j>^\198\&2\f'\NUL\NUL\NUL'\NUL\NUL\NUL\b\NUL\FS\NULmimetypeUT\t\NUL\ETX\224\178yMA\204#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULapplication/vnd.oasis.opendocument.textPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\224\185\241>!\SOH\STX\158\166\NUL\NUL\NUL2\SOH\NUL\NUL\f\NUL\FS\NULsettings.xmlUT\t\NUL\ETXd\207#No\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NUL\141\144K\SO\131\&0\f\ENQ\247\156\"\202\RS\STX\180\139b\241\&9\v\n\t\141\n6\"\161\225\248\ENQR*\150]\218o\158\198r\217\172\227\192\222j\182\134\176\226Y\146r\166PRg\176\175\248\226t\252\224M\GS\149\164\181\145\n:\146\203\168\208\197V9\183!\150mu\180\DLE\226\173\&0#Pk\141\ENQlGe\193I\160I\225Y\131+\r\187,\n\155u0\248\170\248\211\185\t\132\240\222'\254\150\208\220\139\172(\nq\164'*\t\181\233\255U\ENQ\250\170\"\162\159h/\132c\SOY\158\166w\DC1f\RS}\143\188\188&\231L\212\209\aPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\226\185\241>\"\150]\t5\DC1\NUL\NUL\"\209\NUL\NUL\n\NUL\FS\NULstyles.xmlUT\t\NUL\ETXg\207#Nr\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NUL\237]\221\142\227\182\NAK\190\207S\CAN^\EOTA/d[\254\ESC{\176\147 \221\&4H\128M\154v7\215\SOH-\209\182\178\178(P\212x&W\185(z_\DC4h{Q\DC4h\US\173\SI\208g\232!\245G\253\154\182\228\&1g\214)\208\197\154\135\228\225w\190sx\SOEi_\DEL\241\176s{\247\152\ACK\SO\241\238\250\230`\212\239a\207\"\182\227m\238\250![\ESC\139\254\ETB\159\DEL\242\154\172\215\142\133omb\133;\236\&1#`\143.\SOz\208\217\vn\163F\DLE\167\222-A\129\DC3\220zh\135\131[f\221\DC2\US{I\167[Y\250\150O\245I\244\139\CANL\181\187\DLE\150{3\252\192T;s\217\\_\180R\159Y\b\203\189m\138\246\170\157\185,`*w_\DC3\213\206\SI\129k\172\137a\145\157\143\152S\208\226\193u\188\SIw\253-c\254\237p\184\223\239\a\251\201\128\208\205\208\\.\151C\209\154*l\165r~H]!e[C\236b>Y04\a\230\&0\145\221a\134T\245\227\178\178J^\184[a\170\f\rb\168d\213\224~\163\204\136\251M\r4\214\SYNQen\b\225\188y'\182\186y'\182\220w\135\216\182\198&\139\225w\208(\254\239\187\183\EM\ETB\232Nu..\155\131\202\162\142\175\188\204HZ\238O\bIU\229\GS\"\a\NAK\234\142G\163\233\&0\250\187$\189o\DC4\223S\135a*\137[\141\226\SYNr\173\DC4q\178\171\STX\r\228\204!H\CAN\248\158\211\&4\145\166|\209\181#\207\134\DC4\251\132\178T\145\181z\128\STXt\198\233,\246\SUB\165\211\128d0\DLE#\CAN\188\163\152K\RSa\200=a\200\187\188\234\DEL\DC2\a:)\184\142\251\159\DEL\210\235%\193tM \144\174\145\133\r\ESC[n\192\155\160\&1\242\132\180\173\ETB\253\157\235{\215\DEL\199\DLE}\247\184[\DC1\183/\132\129\249\137\228\206q\USs\STX\189\161\194\128\239\209\150\236\144Y3Z\212\170\&6\210\ESC\DC2R\a\211\222\247x_3\218g\146\200g\177\140< \151\&26\216\195\212\SOH\198\236\136\141\169\215\151E|\135Y\224Tk\231\SOH\219\138\203s\192\202|\190\222\USa!^\157b\ENQ\177\195\202Qi\180\146~\247\136:|\167PS\241K\DLE\ACKc\149\148\138~?\164H\176w\130\160\ESCE\222\134\150c\163\222;\228\ENQ\189\US=\aR\NUL\\\135W\133\232a\204\130\199\128\225]7\186&\196\172cl\167\186\188\RS\214\251k\226\202Q:\148\211\220\198k\DC4\186q\166\148\204\DC2\171\185\161\200\223:V?\234\144v\137\DEL6|\n1\133\&2\aH\201\211\134\219`\139l\178\&7`\174\NUL3\227\225\174?\SUBL\172X\253^\149\200c\165\b\196\ACKf@:\128\141\192G\SYN$#\198\150P\231\ETBX\NAKry\135\241B\161\203=W\204\170\235\NUL\145\240\184\EMJ\GSj\199\143\DC1ta\149{\135m\141(\237[#7\200H\147\"\233#\138\EOT\154\&2\150Q\DC3\239g\160\144\DC1>#p\201\177\&1\137D\145\235oQ~:\161\218\138b\EOT\tV\192\128;,\137H|\151\227\250\242\&8u\215w\169\193V\ENQM9[\FS\207\198|{\224)\179\188\204D\241D\237Tq\200\&1\129\&1\196\SI\164%\r\235\215TX\182X[i\197a\128\SOH2\143\243C(e\DC1\151@r\198h\136\DC3\149\215$\210\&7p~\129\213\152c\US\214\t\191\185\200\219\132h\ETX?aO\252`\145\208c\DC4\232\245\227\187\STXP\152\193\166o|\128\152-\150'\ACK\151\145\224#\ESC\176q\"/\RS?\223=\158(\145\248\229\225!\233\GSO\153\180x\196\195\NAK@\139\225y\DC2\232\226\135d\SOH\133\161\211V>xn\132d\138TBL\146F\162a\133C+\187zj\181\162\179WR\DC4 \222>\250[\236A.K<\195E6\236\130\134\208\143k\ENQ\FS\218\&9\ENQ\232\142\226\179\USz\SYN\v\163\193\247 \EOT\137\r\192\ETX\SYN\235\215\DC3>?[\204O\195v 8x|BHkff\209O\243\238\225\ETX\254e'=\153\173\146\221\171\247\249*>gLodu\DC3\159\171\167O\152Y\187\129\150\137*\251A\131\aT\146T\246\131\146*)\131\229\141\240\236\142\"\177\SYN'\145-\131[&4\197;\228x\ACK/\181\DC2V\143kD\253\&0\216\SYN\EOT\187\241HQ\198\ETB\189Q\252(\147\&1*\246W\132r\a\228,\134\GS\t\168\232\"?\DLE\238\210\157*\ACK%\251ju\160\161\DLE\FS>`\236\ESC\140l0\219\242\250\154\187\253\DC1\170\200*\164\ENQ\133g#j\247k\163\150\148#Y.\n\STXP\SUB\220\182\152\166\149G\254\ACK#[\138+\141\ETX\195\143\233\153\146QPL\DC2\243x\188\144\133\222\195\SI?\141G?\173\136\253\216\175PR1\226\238\DLE\133\DLE\b\176\250<\233\152\142\165\164#k]\DC1\198xu\nY\137\&9\ACK\129\212\SUB\"\EM\241D2\130\220=z\fT\ETX\157\DC4\191\164d\191\180\ETBO\139{e\ETB\129g\154\185}\139\224!F)\176O\133u9\187I\ACK\134=\197w\209\163d\221\158l\218\147\&9\212\NAK5\204\217\184\153\SUB\145\192)\144\188\133\237\244\212u6\184\129\203\135=\142\141E\SUB\152'\173\231\r\242y\DC4\239\216t\160\&9E\167\217.\242\218\195n-N\136\163\243K\145\177\a\133\rM\180\139,)9\228\FS\GSv\248\198t$j\225\253 y\131B\t\234B\245\196\&9\235\156\200\196C\212\132\140\146q\149\&2\132\186)S\169D\239\DC3\152\242-TG\SI\GS\243\196\DC1c\170\240\228,\230>\139G\197\ESC*wt\179>h\198R=\243TD\147}[y\223\149U\137\&3\SI\DC22\SOH\153\139\239y\218d*\EOT\224\ETX\RSc\206>-z\204\RS;\155-l\186+\226\218\245\SO#u\148D\162\190\137P\245\b\153\a4\142\145\138E\163\180\&3\236\248\176a\199\SUB\EMv\220\222\176\211\131\161\176\210\222G\166\&7j\SOH\242\&8VT\231e\213q\241i\216\&39\204\158\137F\236\153\156\133=ja\161\218x]\DLE\224\FS\134\157\RS6\236T#\195N[\ESCvQ\SO\247\237\163\STX\US\244\204AaQ\185S\\2&\204\SOSg\166\DC1uf\231\160\142RH\168\&6]\a\214?\135U\231\135\173:\215\200\170\243\214V\189\&9\209\170\&7\237\173\218\&8D{\171\254!$L\FSx\ACK\GS\215@[\182s\143,\149]\188\ACK@\205\170:\153F`\155\241\201W\161\182\158M\SI\212\214B\128\&7\t3;\226\129\CAN4\DC4\159\SUB\240\243L#'\146\DEL\190w\f\176?P\204/\202 \198\176\205\185\202\&9[\239\&6\178tO\136^\220\SUB\DC1\184\141\192J\135M\234\135\141\165\155\SUB\165#\199Q\213\233`\236-\NAK\189\235\146\172Q\253\201e\234\&7\n\195e\EM\215\232\196\243\198\175\240\218\241\FS\238d\DC1\DC1\232\174\158\b\153lO\b\182\165AS\CAN\205\235\149\253M\187\211\201ZEU`\172\SYN/\ETX\218\DC2\204\220\158tR\220\ESC\140o\SUBB\223\232\201#\216{\254\DLE\136/\233\r\248Bt\241\173\SOn!\218K\229.\DEL\234\SUBA:\SUB\140n\230M\152\198\237-pms\128w\146\&1*\242\163*[\180|\254\213h\251\167\183\vT,\ESC\143\223\b@\180\DLE\211\DEL\SO\ETX\230\172\US\r\254T\DC4\180\223\DC3j\167\182\&9\221\170\177\NAK\196\165\166\252\157\143Z{\183;\153?PGVd\140g\204\t\191&\132y\132a\141\252x\186\\\RS\ESC\ESC\141B\175\&3:\178\234yQuF\162\144\180t\148\136p\195bz1\179\158\STXq\253\r\181\172\165\212\150\172\129\EOTb\223\135\210\CANJ\128YF\133l\153\236\209\135\149Y\176T\142\203\240\152\&1\205\249@\190wT\FSSP37db\169\210\n\SO\223\176k\151m\138?\133:\170ig\175$\222y\190T\151\211e\202\158\246\156ut\232\250\132\DLE\232\&2\v=\SO^\EM\233N@>c\174y\\%\248\164\201\233W\168\131\253\233\212|\190\&6\204\243\214VO\163\191\f\217\150t\SYN\161\203N\199Q\147\198\216\161\128_3\228\247#c\t%:%M\155,R\231\174\130=\SOHP\223\164\ETB\187\185\145\222:\RS\174\247\190L\182'\EOT\159\140\&6Oq\ACKS\149\228\196\215\ACK\197V\186wl\182\149\196G#\168\194{\240\231d\SYN\253\&9\202\151\237>\178\163\151/\DC3\159N\ACK\DC3\129#\189p\EM\255\SUB\a\f9C\206\SUB\133\246\213M\146>\DC3P\191g\147\144W-\175\SYN#\254\191\211\146\237|]@\EOTH|\178\218[\250\205\217\218\252`\178\&6/>\230\205ei\243S\147\&4\135\ACK\130B\149\188\204\&3[\200\246J\219\197En;\RS\188\146\249\189\176T\252\b!zK\172\225H!\149\238%\162\133\197\169M\250\219\208u1S\154\&1\DC2m\156\238\216\179\206\226\vs\197\163\206e\195Ig\185o\r\r\151\n\231\156\135\aKE\151'\242\246w;\DEL\203\223L<\ENQ\184\234}\161BS\193\199C\207L#\169..\135\189c\148D|MWWK\159H\182\215\ENQ\fZ\157\ACK\192\186\156\SI\152\132\165G\DC2\234\RS!~\NAK\209\154m)\t7\219\196\208\SOHq\157\DC3\181\na\138\232]\226\150ze\NAK]\192\199\236\205\SYN\159\158\168\209\170s}V'k\243\198\137\RS\235\189$o|\143!>Cq\221Ihn~\242\163\254\200\169\254y\210i\183Q!\US\247\162\r+\250rB]\184I${B\236\&4+\199\239\&6\189\SUB\193\DEL\139B\STX%\196C\168\211h\244\226\160\236\176M\130\"\223\140\235\129&\185x\238\236\GS\171VG\149\217\ACK\223\144,\197\178\189\228\r\245S\242\tyB\228Y\188X;<a,\168G\156\146\158\135\&5\" R\236\228&Ey\152\223G-\217\STXr\242\226\230E\220+\202\213\vwq!m7\162'\222R\205\153j\205\223\ESC\136\199(\158\US\238\248!\ACKZAK\246\n\224h0Y\152\249\135\209\195:u\142\211w\252\204\244\157<3}\167\207L\223\217\&3\211w\254\204\244\189yf\250.\158\153\190\203g\166\175Y\200J.\172v\161]n\137O\164\STXV\177W\230N>\SUB\222\158\201\206<\204\194\190*\173,\202\167\163c\175\194\222*\US\155\197b\245'/\DC2\162A\184^;\144\189\SO\234\193\&6OD;N\a\147c\202\DC2\212\&5\v;~\245c}V/\190\132`\172\248\141>\193\178\217(\247\156\240R\bMtEH\vt\166\218\162\163\v\DELf\186\"4\214\SOH\157\185\182\232\232\194\159\ESC]\DC1\154\fFz \180\208\ETB\161\217H\v/[\234\138\208T\ETB\SO\153#}!:#\137d\153\147\210\242\134w\159\179\180|\252\164i\249G\144{gK\204\143\192\191\251w\143\220\144\239_\173r\239\220\237\136\231\152{+ 4i\133\208r\185\&8\140Pe\153\172A\238\173\128\206\180U\238\173\134N\252\t:\GSso\ENQ\132f\173\&2\131\241T\193\195L\141\243o\ENQ\132\230\173\182\189\155\169\DC2\135\SYN\163\243r\232\244\252[\SOH\161\155\SYN\b\205\a3\NAK\SO\141\a\DC3M\179o\ENQ|\SYN-\240Y\f\SYNj\248\204\&5\205\189\NAK\240Y\182\137\210\DLE]\212\NUL:\183\139\181H\190\NAK02+^\135P\ai\n\155\212a\140&\ETX\243\EOT\140Zg\223\r\223\142\201\178\239\201s\204\190\207\ESC\179\180\205\188\NAK\207T\206\139\142\182Y\247\\\at\180\205\186\151\249K\233\151AG\219\140\219\FS\235\NUL\143\182\233\182\&9\211\SOH\RSmsms\SOH\240L.\r\143\182\169\246\216\212\SOH\RSm3\237\241T\ax4\206\178\199\&7\NUL\208\244\FS\NUL\181N\177\ESC\190\226\151\165\216\211'M\177\NAK\RS8|\251r\207\190\149V\223\249\129\184&\SI\131\207z\EM\165\DC2\182\&6\249\186\SYN\144\157\245\134J%d\237\142\206\&5a\218Y\175\173T\194\214&\187\215\226)\251Y\239\178TB\214&\227\255\&8.\184T\194\214\166\DC2\248\&8n\189T\194\214\166B\248\&8\174\194T\194\214\166r\248H\238\199T\226\214\170\162\208\251\214L\195\247\157\179\162b\166[Q\209\254B\205\243-)\204\234\146B\158\&1\177\163P'h}\ETXG\225\169\211h0?\243\ENQ\138\246\245\198o\234\&1E\157\215\ESC\ETX\181X9\235\SO\179U\244\245\139\&6\ENQ\135\DLE\139\198\DC1\255r\222]\255\191\191\254\167\NAK\n\243\145\DC2y&\203<\DLE\233T\188\131\234\a:\SO\227\CAN-\237x\FS\143\173@\186\198Qi\251\208\FS\195cK\146\206\&1\140\SOHz\238\&8\RS[\163t\143\227\205R)\182i\142\227\177EK\215\&8N\ACK\230b\254\STXp<\182\138\233\RS\199\217\226%\240\241\232\178\166{ \151\&7\186\DC2\242\148\&2\231\173\DC3}\133\173\225u].r\248M\221*c=\185\173\SO\214\&0\154\209\249\216\DC2\168k6\ETX<\138\199\NAK:\163xl\209\211=\138\&7\138\175_\232\140\226\229\203 \181\243\US\157\&1\188t\td\SO\148\246&\173\&1\188|\t\164z\132\171\&3\138\151/\128&/ &^\186\252\EM\SI\DC4^\169\209\FS\195\203\151>\207\DEL_\209\160\236\153k\SUB\DC4\219\DC4=\r/C\139\162\231\224{\208g*z\254\218\182\232\153\232L\230.\138\158\227\DLE*\166\235\nW;5\199\176\139\146\167\GS\134j\135 :c\216E\193\211\SO\195\133Z\138\164\&5\138]\148<mP4\a\230\v@\177\139\162\167\GS\138\138_\144\208\SUB\197.\138\158v(.\212\178$\173Q\236\162\232i\131\226\&8~7\247y\163\216E\217\211\SOE\197\163]\173Q\236\164\240i\a\227\141\150 \182){\SUB\222B\ETBe\207\193\ETB\208\207S\246\252\227/\173\203\RS\189\US^vP\248\252\237\223\237\n\159\ETBq\185\163\131\226\231\197s\173\131\226\230\202\181n\202\155\ETB\207\181\SO\138\151+\215\186)_^<\215:(N\174\\\235\166<y\241\\\235\162\248x\177dkS\128\&4\188\163/\n\144\131\175\231\159\167\NUL\249\215\245\178Y3B\255\251\245\207\215\203f\GS\160\248\167\235e\179\v\163x\189l\214\ENQ\134\215\203fm1\188^6\235\ACK\197\235e\179.P\188^6k\139\225\245\178Y' \190\196\203f\r\223\DLE\DLEE\207\193\207\a\156\167\232\249\231\223\175EO\167\b]\139\158s\160x-z\218\163x-z\186\192\240Z\244\180\197\240Z\244t\131\226\181\232\233\STX\197k\209\211\SYN\195k\209\211\t\136\207\178\232\241\b\195\129a\DC1o\237lB\138\152C\188^\218`X.\n\130\187\254\154\DLE\198\255\RS-N4[\SO\DC3\194\134\140\244\215\177\\\ACKtU\143\NAK\177\USk\187!\207\218\DC2*\151Z\a\191\n6\146&I4\r\f\159\EOT\SO\159\238\174\239\163\141\172y\212\215KHa\240qmb\133;\236\177\DC4\217#\192\193\158\157aSV\217\169V9?\DC1\255g\218\&3\141\170&\DC4\141\ACK\151\227\246@n /\137\172\215\SOHf\210\215\245\170\144\203\196\227\193\&2\132\\\188f\177\154\142gQ\204\161\224\169Z\164\228\235!\140\239X8r\170@\252\DC4\255\130BF`x\199\&2\178\182\148\209\229R\250\187\US\204D\183\&5\218\&9\238#7\SOE\ESC\138\252\173\140\US\252\b\SUB\148\&8\130iVb\167\130Qo\217s\214$r&\228:\ESCX\156\ENQCa\154\255*\218\207a\192\156\&5\176\DLE\224\134)\246\132\218\t\170\169a\134\210*r\235\226|\STX\167~$!\203\175\206\223\153e\ENQS\217\130\138\162%\249\ETB\159\204\193LJ\ENQ\146\214-v6[&\190\214\190\156\&6\154\&5\ENQ\SO\248\195\fB\GSX3\138\217O(\163\200\SOH\251\194\176;D7\DLE\145\CAN\241\197\247h\167\185\&9\227\198\NAKa`\212\180]j\225\&4\169\239Gce\227n\145B{\n\DC4\ETXJ\239\136\r\b\185\212`\171\188\198\137\195\SUB;\244\144.x\EOT\ETX\148\STXd*\EM`?\EM=\137\169#3\151\ENQ\164g4\f\194I\DC2\162y?.[\184\156^\144Ek K^4\SYNA6gM\228\SUB\194a\nC\208,\200\143g\159&\189,\226\DC2\216[^\141\196\DEL\185\200\221\196\144\STX\141\182\CAN\217\\-\225Q\195B\227Z\184\134\FS\218\203=c\153<\ENQ\249\230\148@n\STX\134\185\202\168h\246Q\158\v4\179TE\ETBA0\254\DC1\247E\134\159\253\bn\194#\ENQl\155@\137\162\191e\136\148\215S\129U.0U\133\161$D\237P\144\142\150\143Oq\v\US4\231\199\176\209z6\162v>\"eV\170\247\246Hs\201\ACK\"\164\250\229\148\132\a\194L,\NAK\228\147\200\US\133\f\176\139-&4\132\&8\SYNR\RS\NAKs\253\204xo\151zJ\179\199m\213\248\230\145\149\176\200![@/\253=\217\&0\211\150\255\ETXPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL'\186\241>\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\NUL\NUL\NUL\NULMETA-INF/UT\ENQ\NUL\ETX\233\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\188\184\241>\224\&5d\200\233\NUL\NUL\NUL+\ETX\NUL\NUL\NAK\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129C\NUL\NUL\NULMETA-INF/manifest.xmlUT\ENQ\NUL\ETXC\205#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL)\184\241>\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A{\SOH\NUL\NULThumbnails/UT\ENQ\NUL\ETX.\204#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\128\171j>\205_\234<\137\NUL\NUL\NUL\230\STX\NUL\NUL\CAN\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\164\129\192\SOH\NUL\NULThumbnails/thumbnail.pngUT\ENQ\NUL\ETX\224\178yMux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\CAN\186\241>\159\205o\152\239\SOH\NUL\NUL\215\ACK\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\155\STX\NUL\NULcontent.xmlUT\ENQ\NUL\ETX\208\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\227\185\241>G{\214t\181\NUL\NUL\NULV\SOH\NUL\NUL\b\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\207\EOT\NUL\NULmeta.xmlUT\ENQ\NUL\ETXj\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL\128\171j>^\198\&2\f'\NUL\NUL\NUL'\NUL\NUL\NUL\b\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\198\ENQ\NUL\NULmimetypeUT\ENQ\NUL\ETX\224\178yMux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\224\185\241>!\SOH\STX\158\166\NUL\NUL\NUL2\SOH\NUL\NUL\f\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129/\ACK\NUL\NULsettings.xmlUT\ENQ\NUL\ETXd\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\226\185\241>\"\150]\t5\DC1\NUL\NUL\"\209\NUL\NUL\n\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\ESC\a\NUL\NULstyles.xmlUT\ENQ\NUL\ETXg\207#Nux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\245\SOH\NUL\NULPK\ENQ\ACK\NUL\NUL\NUL\NUL\t\NUL\t\NUL\232\STX\NUL\NUL\148\CAN\NUL\NUL\NUL\NUL"),("dzslides/template.html","<!DOCTYPE html>\n\n<meta charset=\"utf-8\">\n<title>The Title Of Your Presentation</title>\n\n<!-- Your Slides -->\n<!-- One section is one slide -->\n\n<section>\n    <!-- This is the first slide -->\n    <h1>My Presentation</h1>\n    <footer>by John Doe</footer>\n</section>\n\n<section>\n    <p>Some random text: But I've never been to the moon! You can see how I lived before I met you. Also Zoidberg.\n    I could if you hadn't turned on the light and shut off my stereo.</p>\n</section>\n\n<section>\n    <h3>An incremental list</h3>\n    <ul class=\"incremental\">\n      <li>Item 1\n      <li>Item 2\n      <li>Item 3\n    </ul>\n    <details>Some notes. They are only visible using onstage shell.</details>\n</section>\n\n<section>\n  <q>\n    Who's brave enough to fly into something we all keep calling a death sphere?\n  </q>\n</section>\n\n<section>\n    <h2>Part two</h2>\n</section>\n\n<section>\n    <figure> <!-- Figures are used to display images and videos fullpage -->\n      <img src=\"http://placekitten.com/g/800/600\">\n      <figcaption>An image</figcaption>\n    </figure>\n    <details>Kittens are so cute!</details>\n</section>\n\n<section>\n    <figure> <!-- Videos are automatically played -->\n      <video src=\"http://videos-cdn.mozilla.net/brand/Mozilla_Firefox_Manifesto_v0.2_640.webm\" poster=\"http://www.mozilla.org/images/about/poster.jpg\"></video>\n      <figcaption>A video</figcaption>\n    </figure>\n</section>\n\n<section>\n    <h2>End!</h2>\n</section>\n\n<!-- Your Style -->\n<!-- Define the style of your presentation -->\n\n<!-- Maybe a font from http://www.google.com/webfonts ? -->\n<link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet'>\n\n<style>\n  html { background-color: black; }\n  body { background-color: white; border-radius: 12px}\n  /* A section is a slide. It's size is 800x600, and this will never change */\n  section {\n      /* The font from Google */\n      font-family: 'Oswald', arial, serif;\n      font-size: 30px;\n  }\n  h1, h2 {\n    margin-top: 200px;\n    text-align: center;\n    font-size: 80px;\n  }\n  h3 {\n    margin: 100px 0 50px 100px;\n  }\n\n  ul {\n      margin: 50px 200px;\n  }\n\n  p {\n    margin: 75px;\n    font-size: 50px;\n  }\n\n  q {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background-color: black;\n    color: white;\n    font-size: 60px;\n    padding: 50px;\n  }\n\n  /* Figures are displayed full-page, with the caption\n     on top of the image/video */\n  figure {\n    background-color: black;\n  }\n  figcaption {\n    margin: 70px;\n    font-size: 50px;\n  }\n\n  footer {\n    position: absolute;\n    bottom: 0;\n    width: 100%;\n    padding: 40px;\n    text-align: right;\n    background-color: #F3F4F8;\n    border-top: 1px solid #CCC;\n  }\n\n  /* Transition effect */\n  /* Feel free to change the transition effect for original\n     animations. See here:\n     https://developer.mozilla.org/en/CSS/CSS_transitions\n     How to use CSS3 Transitions: */\n  section {\n      -moz-transition: left 400ms linear 0s;\n      -webkit-transition: left 400ms linear 0s;\n      -ms-transition: left 400ms linear 0s;\n      transition: left 400ms linear 0s;\n  }\n\n  /* Before */\n  section { left: -150%; }\n  /* Now */\n  section[aria-selected] { left: 0; }\n  /* After */\n  section[aria-selected] ~ section { left: +150%; }\n\n  /* Incremental elements */\n\n  /* By default, visible */\n  .incremental > * { opacity: 1; }\n\n  /* The current item */\n  .incremental > *[aria-selected] { opacity: 1; }\n\n  /* The items to-be-selected */\n  .incremental > *[aria-selected] ~ * { opacity: 0; }\n\n  /* The progressbar, at the bottom of the slides, show the global\n     progress of the presentation. */\n  #progress-bar {\n    height: 2px;\n    background: #AAA;\n  }\n</style>\n\n<!-- {{{{ dzslides core\n#\n#\n#     __  __  __       .  __   ___  __\n#    |  \\  / /__` |    | |  \\ |__  /__`\n#    |__/ /_ .__/ |___ | |__/ |___ .__/ core :\226\130\172\n#\n#\n# The following block of code is not supposed to be edited.\n# But if you want to change the behavior of these slides,\n# feel free to hack it!\n#\n-->\n\n<div id=\"progress-bar\"></div>\n\n<!-- Default Style -->\n<style>\n  * { margin: 0; padding: 0; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }\n  details { display: none; }\n  body {\n    width: 800px; height: 600px;\n    margin-left: -400px; margin-top: -300px;\n    position: absolute; top: 50%; left: 50%;\n    overflow: hidden;\n  }\n  section {\n    position: absolute;\n    pointer-events: none;\n    width: 100%; height: 100%;\n  }\n  section[aria-selected] { pointer-events: auto; }\n  html { overflow: hidden; }\n  body { display: none; }\n  body.loaded { display: block; }\n  .incremental {visibility: hidden; }\n  .incremental[active] {visibility: visible; }\n  #progress-bar{\n    bottom: 0;\n    position: absolute;\n    -moz-transition: width 400ms linear 0s;\n    -webkit-transition: width 400ms linear 0s;\n    -ms-transition: width 400ms linear 0s;\n    transition: width 400ms linear 0s;\n  }\n  figure {\n    width: 100%;\n    height: 100%;\n  }\n  figure > * {\n    position: absolute;\n  }\n  figure > img, figure > video {\n    width: 100%; height: 100%;\n  }\n</style>\n\n<script>\n  var Dz = {\n    remoteWindows: [],\n    idx: -1,\n    step: 0,\n    slides: null,\n    progressBar : null,\n    params: {\n      autoplay: \"1\"\n    }\n  };\n\n  Dz.init = function() {\n    document.body.className = \"loaded\";\n    this.slides = $$(\"body > section\");\n    this.progressBar = $(\"#progress-bar\");\n    this.setupParams();\n    this.onhashchange();\n    this.setupTouchEvents();\n    this.onresize();\n  }\n  \n  Dz.setupParams = function() {\n    var p = window.location.search.substr(1).split('&');\n    p.forEach(function(e, i, a) {\n      var keyVal = e.split('=');\n      Dz.params[keyVal[0]] = decodeURIComponent(keyVal[1]);\n    });\n  // Specific params handling\n    if (!+this.params.autoplay)\n      $$.forEach($$(\"video\"), function(v){ v.controls = true });\n  }\n\n  Dz.onkeydown = function(aEvent) {\n    // Don't intercept keyboard shortcuts\n    if (aEvent.altKey\n      || aEvent.ctrlKey\n      || aEvent.metaKey\n      || aEvent.shiftKey) {\n      return;\n    }\n    if ( aEvent.keyCode == 37 // left arrow\n      || aEvent.keyCode == 38 // up arrow\n      || aEvent.keyCode == 33 // page up\n    ) {\n      aEvent.preventDefault();\n      this.back();\n    }\n    if ( aEvent.keyCode == 39 // right arrow\n      || aEvent.keyCode == 40 // down arrow\n      || aEvent.keyCode == 34 // page down\n    ) {\n      aEvent.preventDefault();\n      this.forward();\n    }\n    if (aEvent.keyCode == 35) { // end\n      aEvent.preventDefault();\n      this.goEnd();\n    }\n    if (aEvent.keyCode == 36) { // home\n      aEvent.preventDefault();\n      this.goStart();\n    }\n    if (aEvent.keyCode == 32) { // space\n      aEvent.preventDefault();\n      this.toggleContent();\n    }\n    if (aEvent.keyCode == 70) { // f\n      aEvent.preventDefault();\n      this.goFullscreen();\n    }\n  }\n\n  /* Touch Events */\n\n  Dz.setupTouchEvents = function() {\n    var orgX, newX;\n    var tracking = false;\n\n    var db = document.body;\n    db.addEventListener(\"touchstart\", start.bind(this), false);\n    db.addEventListener(\"touchmove\", move.bind(this), false);\n\n    function start(aEvent) {\n      aEvent.preventDefault();\n      tracking = true;\n      orgX = aEvent.changedTouches[0].pageX;\n    }\n\n    function move(aEvent) {\n      if (!tracking) return;\n      newX = aEvent.changedTouches[0].pageX;\n      if (orgX - newX > 100) {\n        tracking = false;\n        this.forward();\n      } else {\n        if (orgX - newX < -100) {\n          tracking = false;\n          this.back();\n        }\n      }\n    }\n  }\n\n  /* Adapt the size of the slides to the window */\n\n  Dz.onresize = function() {\n    var db = document.body;\n    var sx = db.clientWidth / window.innerWidth;\n    var sy = db.clientHeight / window.innerHeight;\n    var transform = \"scale(\" + (1/Math.max(sx, sy)) + \")\";\n\n    db.style.MozTransform = transform;\n    db.style.WebkitTransform = transform;\n    db.style.OTransform = transform;\n    db.style.msTransform = transform;\n    db.style.transform = transform;\n  }\n\n\n  Dz.getDetails = function(aIdx) {\n    var s = $(\"section:nth-of-type(\" + aIdx + \")\");\n    var d = s.$(\"details\");\n    return d ? d.innerHTML : \"\";\n  }\n\n  Dz.onmessage = function(aEvent) {\n    var argv = aEvent.data.split(\" \"), argc = argv.length;\n    argv.forEach(function(e, i, a) { a[i] = decodeURIComponent(e) });\n    var win = aEvent.source;\n    if (argv[0] === \"REGISTER\" && argc === 1) {\n      this.remoteWindows.push(win);\n      this.postMsg(win, \"REGISTERED\", document.title, this.slides.length);\n      this.postMsg(win, \"CURSOR\", this.idx + \".\" + this.step);\n      return;\n    }\n    if (argv[0] === \"BACK\" && argc === 1)\n      this.back();\n    if (argv[0] === \"FORWARD\" && argc === 1)\n      this.forward();\n    if (argv[0] === \"START\" && argc === 1)\n      this.goStart();\n    if (argv[0] === \"END\" && argc === 1)\n      this.goEnd();\n    if (argv[0] === \"TOGGLE_CONTENT\" && argc === 1)\n      this.toggleContent();\n    if (argv[0] === \"SET_CURSOR\" && argc === 2)\n      window.location.hash = \"#\" + argv[1];\n    if (argv[0] === \"GET_CURSOR\" && argc === 1)\n      this.postMsg(win, \"CURSOR\", this.idx + \".\" + this.step);\n    if (argv[0] === \"GET_NOTES\" && argc === 1)\n      this.postMsg(win, \"NOTES\", this.getDetails(this.idx));\n  }\n\n  Dz.toggleContent = function() {\n    // If a Video is present in this new slide, play it.\n    // If a Video is present in the previous slide, stop it.\n    var s = $(\"section[aria-selected]\");\n    if (s) {\n      var video = s.$(\"video\");\n      if (video) {\n        if (video.ended || video.paused) {\n          video.play();\n        } else {\n          video.pause();\n        }\n      }\n    }\n  }\n\n  Dz.setCursor = function(aIdx, aStep) {\n    // If the user change the slide number in the URL bar, jump\n    // to this slide.\n    aStep = (aStep != 0 && typeof aStep !== \"undefined\") ? \".\" + aStep : \".0\";\n    window.location.hash = \"#\" + aIdx + aStep;\n  }\n\n  Dz.onhashchange = function() {\n    var cursor = window.location.hash.split(\"#\"),\n        newidx = 1,\n        newstep = 0;\n    if (cursor.length == 2) {\n      newidx = ~~cursor[1].split(\".\")[0];\n      newstep = ~~cursor[1].split(\".\")[1];\n      if (newstep > Dz.slides[newidx - 1].$$('.incremental > *').length) {\n        newstep = 0;\n        newidx++;\n      }\n    }\n    this.setProgress(newidx, newstep);\n    if (newidx != this.idx) {\n      this.setSlide(newidx);\n    }\n    if (newstep != this.step) {\n      this.setIncremental(newstep);\n    }\n    for (var i = 0; i < this.remoteWindows.length; i++) {\n      this.postMsg(this.remoteWindows[i], \"CURSOR\", this.idx + \".\" + this.step);\n    }\n  }\n\n  Dz.back = function() {\n    if (this.idx == 1 && this.step == 0) {\n      return;\n    }\n    if (this.step == 0) {\n      this.setCursor(this.idx - 1,\n                     this.slides[this.idx - 2].$$('.incremental > *').length);\n    } else {\n      this.setCursor(this.idx, this.step - 1);\n    }\n  }\n\n  Dz.forward = function() {\n    if (this.idx >= this.slides.length &&\n        this.step >= this.slides[this.idx - 1].$$('.incremental > *').length) {\n        return;\n    }\n    if (this.step >= this.slides[this.idx - 1].$$('.incremental > *').length) {\n      this.setCursor(this.idx + 1, 0);\n    } else {\n      this.setCursor(this.idx, this.step + 1);\n    }\n  }\n\n  Dz.goStart = function() {\n    this.setCursor(1, 0);\n  }\n\n  Dz.goEnd = function() {\n    var lastIdx = this.slides.length;\n    var lastStep = this.slides[lastIdx - 1].$$('.incremental > *').length;\n    this.setCursor(lastIdx, lastStep);\n  }\n\n  Dz.setSlide = function(aIdx) {\n    this.idx = aIdx;\n    var old = $(\"section[aria-selected]\");\n    var next = $(\"section:nth-of-type(\"+ this.idx +\")\");\n    if (old) {\n      old.removeAttribute(\"aria-selected\");\n      var video = old.$(\"video\");\n      if (video) {\n        video.pause();\n      }\n    }\n    if (next) {\n      next.setAttribute(\"aria-selected\", \"true\");\n      var video = next.$(\"video\");\n      if (video && !!+this.params.autoplay) {\n        video.play();\n      }\n    } else {\n      // That should not happen\n      this.idx = -1;\n      // console.warn(\"Slide doesn't exist.\");\n    }\n  }\n\n  Dz.setIncremental = function(aStep) {\n    this.step = aStep;\n    var old = this.slides[this.idx - 1].$('.incremental > *[aria-selected]');\n    if (old) {\n      old.removeAttribute('aria-selected');\n    }\n    var incrementals = $$('.incremental');\n    if (this.step <= 0) {\n      $$.forEach(incrementals, function(aNode) {\n        aNode.removeAttribute('active');\n      });\n      return;\n    }\n    var next = this.slides[this.idx - 1].$$('.incremental > *')[this.step - 1];\n    if (next) {\n      next.setAttribute('aria-selected', true);\n      next.parentNode.setAttribute('active', true);\n      var found = false;\n      $$.forEach(incrementals, function(aNode) {\n        if (aNode != next.parentNode)\n          if (found)\n            aNode.removeAttribute('active');\n          else\n            aNode.setAttribute('active', true);\n        else\n          found = true;\n      });\n    } else {\n      setCursor(this.idx, 0);\n    }\n    return next;\n  }\n\n  Dz.goFullscreen = function() {\n    var html = $('html'),\n        requestFullscreen = html.requestFullscreen || html.requestFullScreen || html.mozRequestFullScreen || html.webkitRequestFullScreen;\n    if (requestFullscreen) {\n      requestFullscreen.apply(html);\n    }\n  }\n  \n  Dz.setProgress = function(aIdx, aStep) {\n    var slide = $(\"section:nth-of-type(\"+ aIdx +\")\");\n    if (!slide)\n      return;\n    var steps = slide.$$('.incremental > *').length + 1,\n        slideSize = 100 / (this.slides.length - 1),\n        stepSize = slideSize / steps;\n    this.progressBar.style.width = ((aIdx - 1) * slideSize + aStep * stepSize) + '%';\n  }\n  \n  Dz.postMsg = function(aWin, aMsg) { // [arg0, [arg1...]]\n    aMsg = [aMsg];\n    for (var i = 2; i < arguments.length; i++)\n      aMsg.push(encodeURIComponent(arguments[i]));\n    aWin.postMessage(aMsg.join(\" \"), \"*\");\n  }\n  \n  function init() {\n    Dz.init();\n    window.onkeydown = Dz.onkeydown.bind(Dz);\n    window.onresize = Dz.onresize.bind(Dz);\n    window.onhashchange = Dz.onhashchange.bind(Dz);\n    window.onmessage = Dz.onmessage.bind(Dz);\n  }\n\n  window.onload = init;\n</script>\n\n\n<script> // Helpers\n  if (!Function.prototype.bind) {\n    Function.prototype.bind = function (oThis) {\n\n      // closest thing possible to the ECMAScript 5 internal IsCallable\n      // function \n      if (typeof this !== \"function\")\n      throw new TypeError(\n        \"Function.prototype.bind - what is trying to be fBound is not callable\"\n      );\n\n      var aArgs = Array.prototype.slice.call(arguments, 1),\n          fToBind = this,\n          fNOP = function () {},\n          fBound = function () {\n            return fToBind.apply( this instanceof fNOP ? this : oThis || window,\n                   aArgs.concat(Array.prototype.slice.call(arguments)));\n          };\n\n      fNOP.prototype = this.prototype;\n      fBound.prototype = new fNOP();\n\n      return fBound;\n    };\n  }\n\n  var $ = (HTMLElement.prototype.$ = function(aQuery) {\n    return this.querySelector(aQuery);\n  }).bind(document);\n\n  var $$ = (HTMLElement.prototype.$$ = function(aQuery) {\n    return this.querySelectorAll(aQuery);\n  }).bind(document);\n\n  $$.forEach = function(nodeList, fun) {\n    Array.prototype.forEach.call(nodeList, fun);\n  }\n\n</script>\n<!-- vim: set fdm=marker: }}} -->\n"),("reference_docx/[Content_Types].xml","<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n  <Override PartName=\"/word/webSettings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml\"/>\n  <Override PartName=\"/word/numbering.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\"/>\n  <Override PartName=\"/word/settings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\"/>\n  <Override PartName=\"/word/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>\n  <Override PartName=\"/word/fontTable.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml\"/>\n  <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>\n  <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\n  <Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/>\n  <Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/>\n  <Override PartName=\"/word/footnotes.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\"/>\n  <Default ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" Extension=\"rels\"/>\n  <Default ContentType=\"application/xml\" Extension=\"xml\"/>\n  <Default ContentType=\"application/pdf\" Extension=\"pdf\"/>\n  <Default ContentType=\"image/x-emf\" Extension=\"emf\"/>\n  <Default ContentType=\"image/png\" Extension=\"png\"/>\n  <Default ContentType=\"image/jpeg\" Extension=\"jpeg\"/>\n  <Default ContentType=\"image/gif\" Extension=\"gif\"/>\n</Types>\n"),("reference_docx/docProps/app.xml","<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">\n  <Words>83</Words>\n  <SharedDoc>false</SharedDoc>\n  <HyperlinksChanged>false</HyperlinksChanged>\n  <Lines>12</Lines>\n  <AppVersion>12.0000</AppVersion>\n  <LinksUpToDate>false</LinksUpToDate>\n  <Application>Microsoft Word 12.0.0</Application>\n  <CharactersWithSpaces>583</CharactersWithSpaces>\n  <Template>Normal.dotm</Template>\n  <DocSecurity>0</DocSecurity>\n  <TotalTime>6</TotalTime>\n  <ScaleCrop>false</ScaleCrop>\n  <Characters>475</Characters>\n  <Paragraphs>8</Paragraphs>\n  <Pages>1</Pages>\n</Properties>\n"),("reference_docx/docProps/core.xml","<ns0:coreProperties xmlns:ns0=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\">\n  <dc:title xmlns:dc=\"http://purl.org/dc/elements/1.1/\">Pandoc reference docx</dc:title>\n  <dc:subject xmlns:dc=\"http://purl.org/dc/elements/1.1/\"></dc:subject>\n  <dc:creator xmlns:dc=\"http://purl.org/dc/elements/1.1/\"></dc:creator>\n  <ns0:keywords></ns0:keywords>\n  <ns0:lastModifiedBy></ns0:lastModifiedBy>\n  <ns0:revision>1</ns0:revision>\n  <ns0:category></ns0:category>\n  <dc:description xmlns:dc=\"http://purl.org/dc/elements/1.1/\"></dc:description>\n  <dcterms:created xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xsi:type=\"dcterms:W3CDTF\">2012-01-03T11:25:54Z</dcterms:created>\n  <dcterms:modified xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xsi:type=\"dcterms:W3CDTF\">2012-01-03T11:25:54Z</dcterms:modified>\n</ns0:coreProperties>\n"),("reference_docx/word/document.xml","<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">\n<w:body>\n<w:p>\n  <w:r>\n    <w:t>\n      Hello world.\n    </w:t>\n  </w:r>\n</w:p>\n</w:body>\n</w:document>\n"),("reference_docx/word/fontTable.xml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<w:fonts xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">\r\n\t<w:font w:name=\"Symbol\">\r\n\t\t<w:panose1 w:val=\"02000500000000000000\"/>\r\n\t\t<w:charset w:val=\"02\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000000\" w:usb1=\"00000000\" w:usb2=\"00010000\" w:usb3=\"00000000\" w:csb0=\"80000000\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Times New Roman\">\r\n\t\t<w:panose1 w:val=\"02020603050405020304\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Courier New\">\r\n\t\t<w:panose1 w:val=\"02070309020205020404\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Wingdings\">\r\n\t\t<w:panose1 w:val=\"05020102010804080708\"/>\r\n\t\t<w:charset w:val=\"02\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000000\" w:usb1=\"00000000\" w:usb2=\"00010000\" w:usb3=\"00000000\" w:csb0=\"80000000\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Cambria\">\r\n\t\t<w:panose1 w:val=\"02040503050406030204\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Calibri\">\r\n\t\t<w:panose1 w:val=\"020F0502020204030204\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Arial\">\r\n\t\t<w:panose1 w:val=\"020B0604020202020204\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n</w:fonts>\r\n"),("reference_docx/word/footnotes.xml","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<w:footnotes\n    xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"\n    xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"\n    xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n    xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n    xmlns:v=\"urn:schemas-microsoft-com:vml\"\n    xmlns:w10=\"urn:schemas-microsoft-com:office:word\"\n    xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\n    xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"\n    xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\">\n</w:footnotes>\n"),("reference_docx/word/numbering.xml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:numbering xmlns:mv=\"urn:schemas-microsoft-com:mac:vml\" xmlns:mo=\"http://schemas.microsoft.com/office/mac/office/2008/main\" xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\">\n\t<w:abstractNum w:abstractNumId=\"0\">\n\t\t<w:nsid w:val=\"FFFFFF1D\"/>\n\t\t<w:multiLevelType w:val=\"multilevel\"/>\n\t\t<w:tmpl w:val=\"D0409C7C\"/>\n\t\t<w:lvl w:ilvl=\"0\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"0\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"0\" w:firstLine=\"0\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"1\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\130\183\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"720\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"1080\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"2\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"o\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"1440\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"1800\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"3\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\130\167\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"2160\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"2520\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"4\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\131\186\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"2880\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"3240\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"5\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\130\183\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"3600\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"3960\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"6\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"o\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"4320\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"4680\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"7\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\130\167\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"5040\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"5400\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"8\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\131\186\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"5760\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"6120\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t</w:abstractNum>\n\t<w:abstractNum w:abstractNumId=\"1\">\n\t\t<w:nsid w:val=\"30585973\"/>\n\t\t<w:multiLevelType w:val=\"multilevel\"/>\n\t\t<w:tmpl w:val=\"A47E15CE\"/>\n\t\t<w:lvl w:ilvl=\"0\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%1.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"720\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"720\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"1\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%2.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"1440\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"1440\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"2\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%3.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"2160\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"2160\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"3\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%4.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"2880\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"2880\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"4\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%5.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"3600\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"3600\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"5\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%6.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"4320\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"4320\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"6\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%7.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"5040\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"5040\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"7\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%8.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"5760\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"5760\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"8\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%9.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"6480\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"6480\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t</w:abstractNum>\n\t<w:num w:numId=\"1\">\n\t\t<w:abstractNumId w:val=\"0\"/>\n\t</w:num>\n\t<w:num w:numId=\"2\">\n\t\t<w:abstractNumId w:val=\"1\"/>\n\t\t<w:lvlOverride w:ilvl=\"0\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"1\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"2\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"3\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"4\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"5\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"6\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"7\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"8\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t</w:num>\n</w:numbering>\n"),("reference_docx/word/settings.xml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:settings xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:sl=\"http://schemas.openxmlformats.org/schemaLibrary/2006/main\">\n  <w:zoom w:percent=\"90\"/>\n  <w:embedSystemFonts/>\n  <w:proofState w:spelling=\"clean\" w:grammar=\"clean\"/>\n  <w:stylePaneFormatFilter w:val=\"0004\"/>\n  <w:doNotTrackMoves/>\n  <w:defaultTabStop w:val=\"720\"/>\n  <w:drawingGridHorizontalSpacing w:val=\"360\"/>\n  <w:drawingGridVerticalSpacing w:val=\"360\"/>\n  <w:displayHorizontalDrawingGridEvery w:val=\"0\"/>\n  <w:displayVerticalDrawingGridEvery w:val=\"0\"/>\n  <w:characterSpacingControl w:val=\"doNotCompress\"/>\n  <w:savePreviewPicture/>\n  <w:rsids>\n    <w:rsidRoot w:val=\"00590D07\"/>\n    <w:rsid w:val=\"00011C8B\"/>\n    <w:rsid w:val=\"004E29B3\"/>\n    <w:rsid w:val=\"00590D07\"/>\n    <w:rsid w:val=\"00784D58\"/>\n    <w:rsid w:val=\"008D6863\"/>\n    <w:rsid w:val=\"00B86B75\"/>\n    <w:rsid w:val=\"00BC48D5\"/>\n    <w:rsid w:val=\"00C36279\"/>\n    <w:rsid w:val=\"00E315A3\"/>\n  </w:rsids>\n  <m:mathPr>\n    <m:mathFont m:val=\"Lucida Grande\"/>\n    <m:brkBin m:val=\"before\"/>\n    <m:brkBinSub m:val=\"--\"/>\n    <m:smallFrac m:val=\"false\"/>\n    <m:dispDef m:val=\"false\"/>\n    <m:lMargin m:val=\"0\"/>\n    <m:rMargin m:val=\"0\"/>\n    <m:wrapRight/>\n    <m:intLim m:val=\"subSup\"/>\n    <m:naryLim m:val=\"subSup\"/>\n  </m:mathPr>\n  <w:themeFontLang w:val=\"en-US\"/>\n  <w:clrSchemeMapping w:bg1=\"light1\" w:t1=\"dark1\" w:bg2=\"light2\" w:t2=\"dark2\" w:accent1=\"accent1\" w:accent2=\"accent2\" w:accent3=\"accent3\" w:accent4=\"accent4\" w:accent5=\"accent5\" w:accent6=\"accent6\" w:hyperlink=\"hyperlink\" w:followedHyperlink=\"followedHyperlink\"/>\n  <w:decimalSymbol w:val=\".\"/>\n  <w:listSeparator w:val=\",\"/>\n</w:settings>\n"),("reference_docx/word/styles.xml","<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<w:styles xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\nxmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">\n  <w:docDefaults>\n    <w:rPrDefault>\n      <w:rPr>\n        <w:rFonts w:asciiTheme=\"minorHAnsi\"\n        w:eastAsiaTheme=\"minorHAnsi\" w:hAnsiTheme=\"minorHAnsi\"\n        w:cstheme=\"minorBidi\" />\n        <w:sz w:val=\"24\" />\n        <w:szCs w:val=\"24\" />\n        <w:lang w:val=\"en-US\" w:eastAsia=\"en-US\" w:bidi=\"ar-SA\" />\n      </w:rPr>\n    </w:rPrDefault>\n    <w:pPrDefault>\n      <w:pPr>\n        <w:spacing w:after=\"200\" />\n      </w:pPr>\n    </w:pPrDefault>\n  </w:docDefaults>\n  <w:latentStyles w:defLockedState=\"0\" w:defUIPriority=\"0\"\n  w:defSemiHidden=\"0\" w:defUnhideWhenUsed=\"0\" w:defQFormat=\"0\"\n  w:count=\"276\" />\n  <w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\">\n    <w:name w:val=\"Normal\" />\n    <w:qFormat />\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Title\">\n    <w:name w:val=\"Title\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"480\" w:after=\"240\" />\n      <w:jc w:val=\"center\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"345A8A\" w:themeColor=\"accent1\"\n      w:themeShade=\"B5\" />\n      <w:sz w:val=\"36\" />\n      <w:szCs w:val=\"36\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Authors\">\n    <w:name w:val=\"Authors\" />\n    <w:next w:val=\"Normal\" />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:jc w:val=\"center\" />\n    </w:pPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Date\">\n    <w:name w:val=\"Date\" />\n    <w:next w:val=\"Normal\" />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:jc w:val=\"center\" />\n    </w:pPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading1\">\n    <w:name w:val=\"Heading 1\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"480\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"0\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"345A8A\" w:themeColor=\"accent1\"\n      w:themeShade=\"B5\" />\n      <w:sz w:val=\"36\" />\n      <w:szCs w:val=\"36\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading2\">\n    <w:name w:val=\"Heading 2\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"200\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"1\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n      <w:sz w:val=\"32\" />\n      <w:szCs w:val=\"32\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading3\">\n    <w:name w:val=\"Heading 3\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"200\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"1\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n      <w:sz w:val=\"28\" />\n      <w:szCs w:val=\"28\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading4\">\n    <w:name w:val=\"Heading 4\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"200\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"1\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n      <w:sz w:val=\"24\" />\n      <w:szCs w:val=\"24\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading5\">\n    <w:name w:val=\"Heading 5\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"200\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"1\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:i />\n      <w:iCs />\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n      <w:sz w:val=\"24\" />\n      <w:szCs w:val=\"24\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"BlockQuote\">\n    <w:name w:val=\"Block Quote\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:spacing w:before=\"100\" w:after=\"100\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:bCs />\n      <w:sz w:val=\"20\" />\n      <w:szCs w:val=\"20\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"character\" w:default=\"1\"\n  w:styleId=\"DefaultParagraphFont\">\n    <w:name w:val=\"Default Paragraph Font\" />\n    <w:semiHidden />\n    <w:unhideWhenUsed />\n  </w:style>\n  <w:style w:type=\"table\" w:default=\"1\" w:styleId=\"TableNormal\">\n    <w:name w:val=\"Normal Table\" />\n    <w:semiHidden />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:tblPr>\n      <w:tblInd w:w=\"0\" w:type=\"dxa\" />\n      <w:tblCellMar>\n        <w:top w:w=\"0\" w:type=\"dxa\" />\n        <w:left w:w=\"108\" w:type=\"dxa\" />\n        <w:bottom w:w=\"0\" w:type=\"dxa\" />\n        <w:right w:w=\"108\" w:type=\"dxa\" />\n      </w:tblCellMar>\n    </w:tblPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"DefinitionTerm\">\n    <w:name w:val=\"Definition Term\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Definition\" />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:after=\"0\" />\n    </w:pPr>\n    <w:rPr>\n      <w:b />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Definition\">\n    <w:name w:val=\"Definition\" />\n    <w:basedOn w:val=\"Normal\" />\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"BodyText\">\n    <w:name w:val=\"Body Text\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:link w:val=\"BodyTextChar\" />\n    <w:pPr>\n      <w:spacing w:after=\"120\" />\n    </w:pPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"TableCaption\">\n    <w:name w:val=\"Table Caption\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:link w:val=\"BodyTextChar\" />\n    <w:pPr>\n      <w:spacing w:before=\"0\" w:after=\"120\" />\n    </w:pPr>\n    <w:rPr>\n      <w:i />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"ImageCaption\">\n    <w:name w:val=\"Image Caption\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:link w:val=\"BodyTextChar\" />\n    <w:pPr>\n      <w:spacing w:before=\"0\" w:after=\"120\" />\n    </w:pPr>\n    <w:rPr>\n      <w:i />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"character\" w:customStyle=\"1\"\n  w:styleId=\"BodyTextChar\">\n    <w:name w:val=\"Body Text Char\" />\n    <w:basedOn w:val=\"DefaultParagraphFont\" />\n    <w:link w:val=\"BodyText\" />\n  </w:style>\n  <w:style w:type=\"character\" w:customStyle=\"1\"\n  w:styleId=\"VerbatimChar\">\n    <w:name w:val=\"Verbatim Char\" />\n    <w:basedOn w:val=\"BodyTextChar\" />\n    <w:rPr>\n      <w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\" />\n      <w:sz w:val=\"22\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"character\" w:customStyle=\"1\"\n  w:styleId=\"FootnoteReference\">\n    <w:name w:val=\"Footnote Reference\" />\n    <w:basedOn w:val=\"BodyTextChar\" />\n    <w:rPr>\n      <w:vertAlign w:val=\"superscript\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"character\" w:customStyle=\"1\"\n  w:styleId=\"Hyperlink\">\n    <w:name w:val=\"Hyperlink\" />\n    <w:basedOn w:val=\"BodyTextChar\" />\n    <w:rPr>\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n    </w:rPr>\n  </w:style>\n</w:styles>\n"),("reference_docx/word/webSettings.xml","<ns0:webSettings xmlns:ns0=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">\n  <ns0:allowPNG/>\n  <ns0:doNotSaveAsSingleFile/>\n</ns0:webSettings>\n"),("reference_docx/word/_rels/document.xml.rels","<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering\"\n  Id=\"rId1\" Target=\"numbering.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\"\n  Id=\"rId2\" Target=\"styles.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings\"\n  Id=\"rId3\" Target=\"settings.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings\"\n  Id=\"rId4\" Target=\"webSettings.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable\"\n  Id=\"rId5\" Target=\"fontTable.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\"\n  Id=\"rId6\" Target=\"theme/theme1.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes\"\n  Id=\"rId7\" Target=\"footnotes.xml\" />\n</Relationships>\n"),("reference_docx/word/theme/theme1.xml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"1F497D\"/></a:dk2><a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2><a:accent1><a:srgbClr val=\"4F81BD\"/></a:accent1><a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2><a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3><a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4><a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5><a:accent6><a:srgbClr val=\"F79646\"/></a:accent6><a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink><a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"\239\188\173\239\188\179 \227\130\180\227\130\183\227\131\131\227\130\175\"/><a:font script=\"Hang\" typeface=\"\235\167\145\236\157\128 \234\179\160\235\148\149\"/><a:font script=\"Hans\" typeface=\"\229\174\139\228\189\147\"/><a:font script=\"Hant\" typeface=\"\230\150\176\231\180\176\230\152\142\233\171\148\"/><a:font script=\"Arab\" typeface=\"Times New Roman\"/><a:font script=\"Hebr\" typeface=\"Times New Roman\"/><a:font script=\"Thai\" typeface=\"Angsana New\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"MoolBoran\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Times New Roman\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/></a:majorFont><a:minorFont><a:latin typeface=\"Cambria\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"\239\188\173\239\188\179 \230\152\142\230\156\157\"/><a:font script=\"Hang\" typeface=\"\235\167\145\236\157\128 \234\179\160\235\148\149\"/><a:font script=\"Hans\" typeface=\"\229\174\139\228\189\147\"/><a:font script=\"Hant\" typeface=\"\230\150\176\231\180\176\230\152\142\233\171\148\"/><a:font script=\"Arab\" typeface=\"Arial\"/><a:font script=\"Hebr\" typeface=\"Arial\"/><a:font script=\"Thai\" typeface=\"Cordia New\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"DaunPenh\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Arial\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs><a:gs pos=\"35000\"><a:schemeClr val=\"phClr\"><a:tint val=\"37000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"15000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"16200000\" scaled=\"1\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"100000\"/><a:shade val=\"100000\"/><a:satMod val=\"130000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:shade val=\"100000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"16200000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"><a:shade val=\"95000\"/><a:satMod val=\"105000\"/></a:schemeClr></a:solidFill><a:prstDash val=\"solid\"/></a:ln><a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln><a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"40000\" dist=\"20000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"38000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst=\"orthographicFront\"><a:rot lat=\"0\" lon=\"0\" rev=\"0\"/></a:camera><a:lightRig rig=\"threePt\" dir=\"t\"><a:rot lat=\"0\" lon=\"0\" rev=\"1200000\"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w=\"63500\" h=\"25400\"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"40000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs><a:gs pos=\"40000\"><a:schemeClr val=\"phClr\"><a:tint val=\"45000\"/><a:shade val=\"99000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"20000\"/><a:satMod val=\"255000\"/></a:schemeClr></a:gs></a:gsLst><a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/></a:path></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"80000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"30000\"/><a:satMod val=\"200000\"/></a:schemeClr></a:gs></a:gsLst><a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"3\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"lt1\"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"0\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"tx1\"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>"),("s5/default/blank.gif","GIF89a\SOH\NUL\SOH\NUL\145\255\NUL\255\255\255\NUL\NUL\NUL\192\192\192\NUL\NUL\NUL!\249\EOT\SOH\NUL\NUL\STX\NUL,\NUL\NUL\NUL\NUL\SOH\NUL\SOH\NUL\NUL\STX\STXT\SOH\NUL;"),("s5/default/bodybg.gif","GIF89a\230\NULN\SOH\196\255\NUL\192\192\192\181\181\181\189\189\189\198\198\198\206\206\206\214\214\214\222\222\222\231\231\231\239\239\239\247\247\247\231\239\239\239\247\247\247\255\255\198\206\206\206\214\214\214\222\222\222\231\231\181\189\189\189\198\198\231\247\247\206\222\222\214\231\231\222\239\239\198\214\214\189\206\206\206\231\231\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL!\249\EOT\SOH\NUL\NUL\NUL\NUL,\NUL\NUL\NUL\NUL\230\NULN\SOH\NUL\ENQ\255\224!\RS\207u\EM\212\243@\142\154B\164\STX\204\244lM\128\181\212|?)\v\160B\214c(,\nFo\185\212\&1\SYN\150\EOT\179\166\192\SOH\142DEe\168\173\252,\211pm\STX\SYN\155g\199\217\162\210p\156\223\240\218\136\212\184<\n\170\186\195\209(8\f\SIe=\n\DC4\EM\bqXdK\tP\135q<\DLE8k:a\v\DC4D9U3\tG\f\DLE\r;W\NAK\EM[\143hQ[\t\EM\133\152L\f\NAKH5\v\EM2\179\DC4\130\166\185<s\"\SI\r*v\SI\"\128\128\SOR<kV\143X\DLEM\NAK\NAK\161\186\177\158H\154=\179\184\\E\DC4\DC45Ji\185P\NUL\DC3\205\226a\158A\NAK\215\234\150\ETB\205\186\240\&3\188$\SI\ACKm\194#\SI\DEL\239\178\180\b\184g\160(Y2$\158\r\"\DLE(QB\198o\198\132g\EOT%\fDvkJ4Y\208\222-\128\144\NUL \141#\v\US\150\162\177f\156\132\v\RS\r\255\190\225\165o^>\a\"\174A0\ETBg#\DC3p\241~\FST\a\141\199+\143\ESCu\FS\163A\225B\SIU\183*4\164Qm\201\198W\NULJ\214`\DC4\EOT\203P\NUL\140\&2\240P\NAKUB\n\149\166\230\180t\217\v\230\129\173\234tI\237\215Jm\218!\156\128\240P:\DC1\227\207h\NAK(\f|\150!\ETX\EOTu\t\210nE\162\fY\218\192\NUL\CAN$PL\202B,&\170\248\ENQ^\252\tC[\176b\230\CAN0KvsL\SUBP\225\173\221$\216 \130\n\156\202\CAN\241\134\186\238\212\153\140, x\b\202\194\179(\139\DC1c-\r\250\178+\n\163f\182\STX\169 \161OR4ZC\200 \193\&7\230%#\f\\ ;\STX\194\244\179\201]?Z\203 C\202p\183\181\&6\225h\230\EM\172\132\132,8X\176@7\214B\188U\242F\194-\195\213\SUB\NAK\246J\225\214@\251\243\RS\195pF\157g\216yr_8`@\132Y\255h6\245\DLE\201\129bts\197\ENQ%\161\246\159\CAN\ETB\177\a!Q\FSZP\b\SOH\ETB\134!\130u\212Uw\221&\226\EM\196\192\ETX\NULH\136\153\132\f\184X\195Bb\f\196Hw\US\233`a\136S,eF\138\148|\210@|<\STX \194u%\RS`\143\b2\132\166\146VN\170x\CAN@\218\152\DC1\216\DC3JU%\131\ENQ\DLE\204T$\FS\198M\145\223^;\208\210\128\143<\RS\128d\146$\236!^\138\ACK\189\249\"\rp\ACK\241\CAN\DC3\200!\167\212{\232Us\209\151bL\240g\SI\SI\216\&7\131p\SYN0\183\225\DEL\a4\192\166X\133\206 #<yI\nV\138N\ACK\197\EOT_i\193\137\165 \206\SOH*_(\221( A\ACK\r\136j\228\154\143\RS !\156\210,6\ETX\172\185\148&!#\165qi\219\&3\178j\ETB\CAN\145=\NUL\171*\FS=\NAKd&\139\128\158\208\234\FS\226ud\144\140\180\154\"\163:\175\176\243\ETX\255\ETB\236\181\&7E\148\&5\SO\251\236\172\NUL\252\&3\SOH(\128\SUB\176l>\142\180\CAN\SI\141\234\198S\154V\147\177\167k\168sE\235\173A\249\&5\129CA\132d \NUL\160\231\142\144*\157\241\192*\236\ESC\EM\212\197\235\&3h\134a\239\189\238\STX\144\223\142\&4< E\SUB\222\&9\240\GSX\SOH\US9\145{\210\242\144\&0<\228\205u\176\152\139BL\233d\249\146\137\134\STX\b\DC4\DC2A\202\241t\220\232UW\154r\195\\4\135\145/~\254\149\215\179\202+\207\176\133\DC1\ENQI\\-\170A\ESC\212\177\n=\232\181\204e\DC4\155\210SrC\a\155\&5\209\238\198U\NAK*\237-\231\192\201\186t\140\135vU\v\141\ACK\175\DC2o=c+W#\146\193\160\\\135\CAN\v9I@\SOH\197b\133H@\183\211\GSS\bI\220g\244\132\196b\208\DLE\254\198\157\135\254=\ENQ\227\222\238\141\134\227*\129s\237\DLE\tq\242\151\212\140v\188\222\140AQ.\139\255\ENQH\215\208\165\232\131l\EM\r\187f$\253\229\DC3\174\233\202\b\ENQ\ETB\DC1\130:\FSGH\161%\DC4\142!!\192\198e\a|\199}:p\137\250S\NUL@\208\150\135\183;\EOT\ACK\204\n\209\219\132\244\185\&86\208iR \237Xb\214+0\247\NAK\DC3\252\160\CANhn##\155\DC2zs\242L\DLE\rP\US\135\231\200\170\145\151\f\145\152\177\&3\STXI\204\168<\228L4X\141\f\174\v\b\240\224\160\147\143\NUL'\DEL/\179\202&\152\STX@0\204b\v\242\218\193\DC3\194\145\144Ph\162#\EM\152\NUL7:\183\172\205\196\143\f\178:\136\CAN\210\176\189\143\f\193\&1\212\147\\A\232\227>\146\&4\204\DC4C\b\194)\174\DLE\ENQ\222\137\206{@\224\199,\148g\167#4o+'\172\146c\SYNp\166\231\156\171\CAN\200Z\192\SOH\\\163\NUL\141M\161#\140@\224\f\155\&8\192\201L\177)o@^<\STX\211\192Y\bA~\138\v\ETXN\174\144\132\255\EOT\240\144\140(\220\196\NUL7q\132fh\SOH\DC3\132(\223\DC4\240\241\168\DC4\CAN\192\NUL3\164B\NAK\184\225\155\226\\a)ih\227\198\160\168\ACK\b0\224\US@X\163\SUB\155\246\ACK(>$\135Qy\161)\160\DLE@\166\192\168\"YL\v{4\210\ACK\204\b(Ic\201\163\SUB\202\240\143g0\160.B\137\STX\SI\192QJC.\225!\139\132B\ENQ%\137\DC1\131\&8\230\CAN\t G\145\156\213?\134a\233\rFP^T\EOTc\137\SYN\138\225\SO\173\ne$WY\134\&5\\\NUL8\236\209B9\226\179\150d\184\210\ESCry\ENQ#f\194\rE&\166dp\216\193\t\UST\183k\132\&02o\b\223\&47q\129\129\&9m,\160\&4\139\252\214A\131_Q !\169\164[\131\134\153\&3\146P\203BkH\192\ENQ\200F\ETX/\133\DC3\v~*\231\EM@\198\200a:\DC4+\SO\NUL\DC1\224\224\&9\160\DC3u\196?\253\220\205BFc\158\188\b\255\194\140\168\161\152\151\fz\165n\158\193\160\153\EOT\160B\US\DC1#RX\177\DC2\128\161\SYN\ENQ\"\160\146\151$\t\STXx8\203h|\STX\FS\211M\163\&8I\160\216h^\161\NAKhTEb\209\208\230\194\196X\201m\253r\165\248Bj\202l\162\ESC\nH\NULp\195`\213<H\180\155\&0\184'\154\\hcGW\145\ETB\228$\ACK\169\201S\158\SI\167\&21\251\216\171\135M\165\147:2\240\128=A\NAK3\163\136\144\165Z\DC4\NUL\172\RS\169\SO\NAK=\v\183\136bVO\212\135\v\133\176D^\184Q\136U0\150vZ\b\ENQ\SYNA\211\141BH\236\149\202\147S\189:uW\RS\133d\t8jW\ENQ\250\n\143\234\&8JM\238\&0\215<\166\131\NAK\131\153\&51\STX\197@!( [\198\214\&6Q}\161@\NUL\128\&3[\SOH` 0\v \ETX\221\NULcY\153\144\241\n\ETB1%f\250B\n%\156\146X\224*\DC24\188'\166\232\ACK\160\161\255\"\154\195i\245pG^8j\175FC\v7\130\226\128\162\204-\178kx\198\ETX\186\177\138\NUL\184\212\DC2\153@(.$\180A\180\EOT\183\f@j\r^k\NUL\156\247F\179\186}i\151g'\203\131W\EM\141\180\185\208n;G\208\206\DC3\168\224\SO\ETB(@\SO\134\"\152\217\186\151\STX\STX\240[\ENQO\147\134\191$`1\176*T\NUL\EOT\224\157\191\DLE\167\148\209%\197\164\236\ETX\139\151\DC1E\142bX\ENQ\NUL^\203\&0\DC4RM\155\EOTC\ACK\SUB.5\ENQ\205\n\NUL\187L`\176KL\208\128\"c@\US,\130\147*\144\195\141\188\228'\SOH\180\179\142Ui\167\131P<c\182\171\152H\ENQ$ \129!\GS\183=\182!Jq7\241\ETB\172D7\a?|\EOT\178\236\243a*|!\a\v\131\211(>&\156\STX\198\ETX\145L\160ow\140\146`\DC1\156V\187G\218\195\RST@\136\132\152\a\202\SOHp\239\140\245reX\244\235\168\DC2\211\255\175\196f[\136\&6\207@\NULC\240\139\ENQ$\DLE\NUL\ENQ-\SUB4\DLE\129\&2x'%\221\245\201\144\140\233\147\STX\132\\\164\149K\140Q4\156\DC3\153\DC2P\ETX\SOH\SOH\192X`\171\237n>|\161#\222^\249\CAN\221\&8t3/pB8[\154`\240\EM\ENQX=T\148\223- \STX=m\145\132F\209)\173\156z\198\DLE\155\215\DC1\200\241\SI1\160\ACK\204\&3N\SUB\CANpA\208\SUB\CANJkh\173\NUL\159\US!\228y8\128U\190\CAN\STX\ENQ&\240\225\162\FSC+\205\DC2\207\STX,C\134# `P\163\NUL\SO\175lc\156!L\160\148\208h\242\172\&6(\152=\185(\174\170J\131\fw\218\131]\157\STX\a\248\147\r\233\218\&6g\137\157[\SYN\147\235D\176v\144\145\NUL\164Y\RS~\134\129\187\235\161\153\f\DLE\219\216z\170Tt\215\&0\DC3\227\NUL\220\201)\154O\177\205(\SOHU\236Vi\163\192\165x~6\178\187f\212\NAKzL\152\DC4\255\236C#\bP@\n\132\163\164\159h7r\163\153\202\155r8\DC2u\222\173Z\DC2\EOT\NUL\a3a\128m\130\253\&3\165\ENQ\198\141)\249\v\139q\169\CAN\170DE\144\134\132r\EOT\FS\176g\n\135\205P;J\155B\205\216\220\"@\153\DC1\201\145\193#\219\166\133\142\244\164j0\v+\235\146Cr(\152\156\221#R\214\144\187\RS\136\245l$/\ETB\248\213P\feY\201\241\NUL\NAK\203\&9\ACK\181;\138\ENQ.\216\ACK}\DC20F\208\153\194\DC3\168[\249\228\162:\165\EM/\226\tXl$\172X\b\133'p`8\170\131\134\146Q\193\202\226sp\b$l\SUB\235(\ETB\193\US\\B \229[u\a\USVwz\241B\153f<\189\226P\232\201r\174\191\202\171d\191\&5\234\SO\204\247\240\211x\163\193\222[\137j\236\142\242\182\189k\207\160.3\161QG\198\141\t\b\164\235\243[\210\STX\185\224\&0\a\201\207\129\ENQ*'\GS\EM6\EOT\255\ETX!\SOH\198\DC37\168\240d\ESCG\ENQ\192\199<q\240a\182Ar\t\227t\209@H^\226~\157\229Y\247\ETBC\167\161\f;3=d\164\NUL\CAN\128|s\208\STX\188\192\STX\170%\GS\169W~\SYNp\SOH\255\128R\135\af\247\DC1V5Q\ETBk\176\DC1;\NUL\SOH\ETX\NUL\ENQ\151`~`v\ba\148\129\162\210\ENQ\DLE$B\EOTQ\ACKG }p\208u&X\130)\216N\r\128G\201C?\142v'\FSa{\178Q\EOTH\NULdjtB\\\194X\171\176%\DC20\SOH\ETB \RS\198\135\ENQ\153 \132\128\178\133&\244a\GS!A\DLE\151;z\243\vp\176|\202GGMh\GSz\240\NUL;\DLE\viT?ixK\211p-\255\211BA@sN\215Qe\ENQ@\DC2\176\ENQ@p\SUB\EM\a@\198\164\134\143p94\160\bj\132\NUL-\229\FS\DC2\247\133\205\195\STX\248\144SwxGPh\a\SO\144\DELi\152\138\213\224%:\160\ENQ\255\245q\t\142!(\CAN\178\FSj\213;\SUB\178\CAN\174c*\151\224X\142\&8n\200G\137\&5!\b\165SO\185\179(\146C\ACK'\176\DC2\174R\NUL$\192\140\a\128\a\190p\SOH|\DLE\f=\200/H\152\ENQ\142\150\t(tp\236\161\CAN\150 p\163\176<\133\208;0C7\132\NUL@\DC4P\a\132\144X\186\196\t\231\a\140\136p\EM\227\131!\236`\GSnp\ACK#\208\STX\240\164\SI\166\136\SOHH\132v4\132\ACK\172\160#\254\150\133\160\197\t\171\144\144\171\224@\182\247v\227\196?\182\240\fu\240+g$\n\240\248%z\163\vf\EOT\129Jh\ACKs\224\a\248P\STX\SI\150z\a\240\at\ETB\144~\DC4I\223(\137\251\148\CAN\247\247~\254t\ESC\210$\ETBqQ\ENQ\233\240\f\152`\DC3\v`\STX\236q\v9IK\ETB\185E\195w\ACK\175\160\CANy!Q\153!\GS\207D\am\128\a&\249\v\245\192\135\145\&4\DEL\SIUh\176\132\137\255F\227M\STX\DC1\ETB\144\241a\216\&0OP\230\&7\182\&1\DC44\DC1\148<\130R\210\242\DC3\ETXp\ACK\r \NULE\214\a,P\146\208\134\STX\190\128\SI\ACK\192\SO\t\168\ACK\179\NAKR\235d\ETX\\\STX\a\191R\CAN^\229\ETB\187\241\EOT\227Uf\243d\150_\242\&0b\128\CANG\208\USfp\STX\SOH\216\ACK\159\DLEa\146\249n\195\192\SO\183\208\DC1\205\DLE\EMkP-\SIu8\229\ACK\SIK\182\FS\234`\STX3\SYN\n \163\152\255\SOHqgPeZ\DLE?=\194|\CAN\240\a\DC1V\STXf\161VX\145^\240\STX\CAN\134\DC4j\234P\DLE\221\145\DC2\221\&1\154g@\n\ESCAl\222s\b\131\197\154<\SYN\SI\198\129a\RS\201|{pd\141R\STX#\192\NAKJUO\161\134\FS\147!\RS\197Q\150\145vY\255aJ\DLE\128\SOH\150\NUL/\140\233\156\186 \ETB\130i\n\227B3\159$\SYN\DC1`\NULN\183$1\209m|SO\SOH\182\"PB\vD\DLEe\255x\241d\198I,\221\240\t\150\128q\191\200\158\229A\158\238r\143S\160\148\159d\SI{`.\247\DLE\DC31\146\149\130AW\v')\224)\\X3\DLE\164\246J+d\RS1\182\ETX\STX\160A\154\197\160\152\&1\EOT\193\185\EOT\158\230\&3\b\SYNd\164x\130\SOH\224(\DELP\DC4\142\"a\SO5[\230\150\CAN\145\146<\226\225\147DPv\229\230\163\231f\RSd58A\208\FS\244\197\162\173\t\ENQd\224\CAN\DEL\DC1f\SO*&\255\146]\141\194\v\ACK\DLE\NUL\211!\GS\141\DC2\fD\176\DC1,\182\161\236\229\"Tg\b4D1c6B\236\177\ESC|\193X\146\162\ETB\209\231!-\146H\216\ACK\165\255q\b\237\177\NULFyYd\179\147\239\153uj\226]\v&\141t\233(h\138or\150\144tB\v\ETX\128\ETX\SO\CAN^\166P\SO\139Q(\204%p\240\145<\228B\v<\180\160z\SUB\a\234\240\ETB<\193H\159\160\165\DEL&\STX^\234\SO\255w\216\NUL)\128\t\191\&2\158D\161\DC4^\201\r\167x\v\bpU303D\210v\217\STX:iQv\RSG\n\223f\vW0\134\149\NAK\170k\168\SOavMM`kS\160|*\183\165\&7\186\165G\"\f\r\160dW\ACK+\248v\ESC\ENQ'\ETX\ETB \SOH\STX \NULk@j\213\STX\v\209VH\170\153\ETB\178i4W\198G\NUL\208W\222\241\142\202j?\134W\170^\181\131\209j\173ZW\173v \STX \153\173u!~\177\214\"\171\137\ETB\213\128\SUBE\231\174\245\EOT\DC4\222`4\220p\NAK\182\225\NULY\166n\b\240q\245z!Q\176\177\206\186)\161R\146g\242W\ap\163,\208\132\215i\174\&3\ACKu\tY\SUBAP\DC1\222s\CANlSV\245Dq\229\&17R\192\DC1\244\SOH\ACK\157F\175\EM\251\154\156\208\&3\n\NUL\153K@\SOH\246y$\ETB\DLE\NUL\DLE\DLE\SOHQ\232g\170Eh\ESCCmS!/\142q\v5\a\DC1\255\135w\fmg\165\185\240\ETB\DC1tT\210\bc=\139;\238\&8\148W\176\DEL=\160,\239Fd\155!y\172\218\v\186\178)=A;\217\215%\178ap\187I\172\&9\216\ETB\152*\172\210\224\136\128\152\NUL\150\DC1\182\170\178\DC1\139\194\NUL\SO\240\146\&40\GS&)\GSg\STX\DC3\255\138\a\211\138?\192\225\SUBJQV\133PWO\NULilu\DC1\203\193\179\211s\177;0.A\NUL\182\130\251\ACKr\241\&8\SI\224\US\RS\180\a\186\165\SI\155\193\a\194\224\DELQq\131\US\161lks5\132\208\139\\\130\181\166\147\131\158\235\ETXT\SYN\CAN\aD\182\165k\DLE\178h\DC1\135\187\EOT\230R\NUL'\224\NULsW\146\250P^w\NUL\SOH,WO\ETX\225=\190WP\186\231@\137\247}\196\147\189\255\161\&7{\164\156\147X\188\aU\t\ENQ\224\ESCEa\aDK\146&\248n*\192\188\194\&0\b\133\209/\243\182\155\FS\177\ACK\180\NULM\177\129\184\CAN\137\RS\255\t\160\142\160j\190\CANB9\vP\NUL)Q\NUL\221\165\143\250\216\188\245\NUL\191\230RH\168\DC1W\198\199\&6\221\&4P\DC4\152\138\SYN\177\NUL\179Q\ENQ\np \179p<\183\180e\229K\192\SOH\161\137a`\SOHR\184\v\249\240\v9\234\148+\224\v\251\DLE\NAKB\129C\203S\FS\233\STXe\t\t\FS\RS\162\137\222\&3~9@:F\160\DC4H\224t\137\181J=h%\ACKW_&\140\EM\185\244\134\SYN\209\177\201G\a\143k\STX\128\160\192\DC40\141Q\DC4\186I\140\ACK\180\&0\r\DC1\148\SOH\ETXP\a\207t\142y4N\152\196\193\&6\217\RS\138\248\197\SOH)F\176\192\ACKM\252\US\\\249D0\NUL /\129L\251\216\STX\197`T\178\177C\171\132\DC2k\ETX\ESC\RS\130\EOT&p\v\130\156\146_\176\177APA\133\148\ESC\207\165A@P\b\134\228\USF\192%\CAN0\199tL9\158\224#&\219&\244\144\SI\210X\SI\ACK\240\193^I\ETBH\236F\255\128\241M\208g*\205\145\RS4\209 \129\&1D\189a\ESCcZ\SOI1?\140p\USA\161\171\154\172\DC2\171!\ACK\DLE\176\194D1\159\243\NUL\b\160l\ENQ\ETBu\r\196:]>\244\129\137As;\153\&8\253S%$\193\RS\163\160\ETX\132\EM\EM:p\v7\DLEC\252$\200\191\\9f0\204\NUL\178\143m0\f\\j\amDV-\166\151\US\204Gz\DC3m\193\188\147\DC4rU\232t\DC4\161R\171\152\EOT\167\US\156<\255\DC3P\233:\206\&0\244\DC1\141\201:J\194\EM\210\SOH\DC3\vm\159\SI\198\188\179\187\CAN\b\DLE\174N1\150\222\131\EOT\135\160\n\142`\SOH\187\&5P]\245~r\EOTe\212\"1\142\252~O\231\ETB\RSM\208\ENQ\157\ENQ\r\ENQ3\187@\"\195\128\SOH\245\t\128\237\180\au\128\192\168\200\196(\226JJ\161\ENQ9P\b\ETB\139\132\t\ETBR\242SC\176\231RFsF\148`\t4\171\210#4\SO\137q\188A\147\146\255\ENQ\181|\v\205\a\SOHP\130\229U\a\SI\128\&9%\SYN#\n\STX\214\218\212\173]\145*O\a\ACK\170\160\195\226\SOH\214\191B\188(\147\149\255C:z1\162N\253\212W\176\t\193<\b\196l$\DEL\230\SO\237\DC4\SOH\188\208\STXu\144\173\233\CAN\SOH\RS\245a\175uY\150\181\FS\147C\t0\210\"\FSj)\250\ACK\148\155\DC2\n\153u\ENQ\255@\166u\173\SYNj\240\207\175\196\163\ENQu\GS\149\137Z\169\218(\172[\USB1\164\188\SOH\214;\ACK@\238\144\ETB\153<i\SOH6+\241bT\231w5\198'\217t\189\217L\160\fD0\168\&4\176\215|\192`\142\226(H+\SYN#\NUL\206\228\201\\\193\210\DLE` \SOH\179\193\RS}\229\163\162\149\&8\203\225X%\140Vh4c\FS\177\158\188M\ETX\135\240\219j FW\241nf\177]jR\218#\128\SYN\239b\ACK3\218W\175``\179\146\SYNj\229\154\194\156\ENQG`Y\187\253\221:\166\ACK\255y\221?\r\193\184\233\173u#\219usp'|a\216\149\181\158\226\FS\175s*`\139\195\ESCy\ENQ\130-\146\158y\202\223\&5\161-\SYNA\204\168\NAK\166\215\161\a\CAN0\SI]\221\r\187\242\ETB\187UT\a\243\ETX.BZ2v\225B\179\&4E\245\&0\177\160\191\230\193\133\CAN\RS|\128\183\225r\DLE\133DV\220*\ETB\NUL\206\200`\ETBM\170\EM\240x\171\247~\222\232\DLE\144=2\137\152\ETBJ\224)S\229a\"\250#z\185\RS\251}\227\200\128>\149\176D4P\168D\214`\142\194\STX\SOH \f\161\232\NAK\r \SOH\DC1\240L\164\&2Z^\186\nc\227\199\242\182f\180\195\r\179Fa'\195\198\238J3\EOT\168\205G\142\229\CAN\178P\a0\DC4j\194u\253\183\182\240\203\EM\139\165<\199\150\ETBP\167\136\218\214\ENQ\210\198\232\201A\231pP-\226G3\246\129?\b\144\NUL\205\225\231VB\NAK\139\146\NUL\129N\ETX\DEL\176\180\188\160,\255\210(\SOHt4\SO\NUL\151y\217\145\178\225\185m\181y\221\SO\240\158zw\SO1k\192r\173\EOT\DC1\144\221\188M\NAK~\234\no:\ETX\252\232*u\160Z\\g\146$\137\GS0\n\190\a\DC1M}\145z\SI\145\197\173\176}6\142\US\DC3\DC3\132\140gx\130\227\233\141\185@\144\&1\236\171\226AGb.\150i.[\GS\133\131\DLEp\DEL\195X.\218\r\251F1\137\242'\222\200\193v\182)\172\CAN*\197\&2\DC2\222\254DC\147\227F\178\SI\249(\f&h\138\128\128\SOHf;\ETXE\166\237\251\230LJA\SOv0\DC1\ACK9#\240\129O\183\148\194T\199?j\196\153\192\221\239H~l\225\222\229\159\f\189\208\v\195\"p\DC2WQ\SOH\DC1\DLE\NUL)\193\233\181\224\NUL#\184^\GS\v\136\f!\238\188\147\&2\194\164\241\226\128\RS\RS\239U\193~\SO\155.\SI\212\v\230\163L\SI%+\f\128\176>\222\DLE\192\193Iu\128+\ETX\185\244L\255\164\208GAx{\184\148\217\143#\137N!\EOT\SUB\223\243Hn\ACKFp\f\209\209\v\237\228\140\&0L\SOH\208[\ENQ\134\198\ACK\202\131\DC2+\180\142A\144\SOHc\243\179Y\SI\EM(\132Kd\ESCH)Q\r]\239\245\224\RS\ACKAo$%H\240\181y\135Q\217\STXa\213MV\149\ENQj\154\ETX\DC1 \NUL\247tJ\167;\b\ESCcz\vQ\199G(\158lT\196~_\tMsH\161 \202A\254\NUL$\169\SID\235\186o\250\EOT[\248\239|oh\209\240j\200`z\SYN\180\&1Z\STX!\170\DEL\237~\SO\242K\128\NUL\142\DLE \211J\a0\DC1\189\174\250\EM\189\145\147a\168\GS\135\200\t\130\146\SO\244\ACK\148Z\DC2\v\176/\v8\155\ESC\171D\217\222\SO;4\195\193\135\178\a.\241\NUL\181\169\STX\229\ENQ\141\147?C\r\130\r!\148\152Sq\SUB\141\132\209[(I[\t\r\CAN\187\154\157\SI\238\226\238\DC4\142`\135\">hm h\255\SUB\ETX\STX\n4\SOH\229R\SOHgY&\149\149\172\137\178\172L\229\178\153\181\242<\163(&\SYN\151m\215\&3eR\EMH\134\ACK`\188\142\210)\181j\189b\179\218\RS\236\153`t\165\bD\233`>\163\r\SO\199\195qh\191\129\nDEa\130\164P\188\132\197\t\CAN\150@@|\157\168$P\232\&00H%$)PT\180$\224\GS\241%\200,P\EOT\SOH\180ly~\130\134\138\166,\132Q-\216\SOH\160\173\RS\168A8P\CAN\168=\FS<)\244M\224-,\SOH\232y\149B\208X\204X\EOT\DEL\225\&5B\248\182@,\246\252\236,\236\&4\250r%Q\ETXPp&\141v{\DEL\DEL\154R%\212\170\178\158\169\157\173\&94<\164\138\228\149\&0@\230\220\EOT\SI\ETX\r\211\216\180\160\244\251D\146\STX\164\STX$JT\130\245\210\134\"\n\184\134\SO\US\154\144We\SOH\EMs\231\f\\8\ETX\161\r\ENQv\DC4\140p;\145\SOH\133\r\ESC<*\255H\ETX\226d\199\&5C\EM\180\157\244\195\131\STX\197\b\213\166\160\212\&4\SOH\ENQL\136>\DEL\130r\150@f\143\ENQ\229\206\153y\133\166\129:\ENQ\ETB\138\249\137Da*$g+\180\225\131\SUB0G\tn<\DLE\246\224v\193j\149&\143Px\ENQ\170v\237\148.\fJ\141;z\SO\STX\211\&3p\206\NULp\n\147\231\141\SUBz\134\254Y0\225V\159\DC4\214\NUL<H\ESCH&J\DEL#o\RS\153\145\225\229\f\182\150/\175(u\137l\209\138H\SIdl\149\SOM\t\ENQ\143\147$A\244\210\215H\CANS\229\b\154\162\173'\143\180\v\148\221\152\170X\n\ENQ\b4wc\SO\254\147\232\145\ENQp\145\214\ENQ\GS\154\244\157C\217\DC2\170\166\NUL\ACK\143\163\202\164 \ETXHRa\183\156\204'\230\165\182\226\136BE\225\230\DEL\138cD\227\\\242\209\171js\170\176\200\235\246\237\139\179\211V\209\ETX\166\244#\EMR\173p\rL\192\ENQXB\NUL\156\157\151\255\224\&7\v XT\EMK-w\128\ETX\DLE\156\195\131\&4\156\244\226_\CAN\248(\214IX\t\GSA\ESC\v\212\233A`^\143\136\168\160\138\163|Q\ENQ\CAN\139\160q\SOH\133\171D\136\215L\206\164\216\139\US;\164h\210I0d@\SYN*R\164\150\SOH\f[\DC1y\193\138KvC\\%\199Ix\129\SOH\172$\247\222I\206\200Gd\SI\131q\182[\DC2\SI\132q\219\DC4\f4\211_/\233\149\144#\147kb\SOH\131\147\&5\FS\176\136\ETXRN\185\n\EOTRV\248cWh\"\185'\ETBY\174 \USJ\ENQR!\232VFJ1(\155\139^\241\SYN\131h\198\128\NUL\fm\212hF\165\&6\ACK\186H\159z^\169\225\149Lt\SOHD\131g\222\224\EOTX\SYN\SUB\193\168\170\140\176\224\196[\b\SO\181H\SOH\180\224i\ACK;u\230\EM(\r\138\RS\193k\t\155\254\SUB\198\160\NAKL\224\196\160\np&\159\&2Q\201\&4\201\170\207\RS\SOH\134\ETB`\192\NAK\255-\131\136IH\203\156\r\204\248\EM\SI@\252\250\166\175\NUL\156\SUB\211\n\b\217c\199\160\213\ACK\202\a\175\SYN `\213\184\208>+m\139\163\130\SOH\ETX\EOT\179>p\SOH-\159\&1\ETB\238\137T\136\202\131\ENQ$\FSQ\216\185.\196\251\223\188\231\138 \147iv@\241&\189\171J;\SO\\l8P\NUL\192\172\CAN\172\174\197\228\202\EOT\SOH\128_!Ln\US\190\245\ACK\SOHCR83\140\193\f\SOr\177\205{\188\&8\ENQ\STX4l\244\239\199\SOH_\248\199\201=\140\176\135\ENQ\r\202\\\130\ENQ}X@\211\SYNI\255A\ACK\212\&7\223l1\ETX\146\"\230\241\207VJ\ETX\ETX\184\EOT\159<\245\183\NUL\222\146O\RS\169V\241\181\204?\fM5\180\EM\235L\131\207[\219xKih?3\181\221\SYNn\167\201\ne\139\160\192\rm\ETB5\140\DC1\224\154\236\182\219\144\150\176\&3\NUL\179\190\209\192\ENQ\237\252\204\tC{GF\DLE\218\152\167\240\STXg\bd\181\255\ETX\231\197\221\131G.B+N\245\ETB\144^=\169\228\ENQ\204x\215g\150\152\128\247\223\209\156\fz\f.Oq\155\&4\186\216\190\229\b\192\SI\150\250\197/*\210\162\DC4\DC4\169\210\173]n|&xf\216\233g!\NUL;\201\179\180HC\223\246O\245\189\a\163\135\152\198\211\187\186am]\r\192\SUB\ETBhm\ACKF\DC3\174\242\128\252\&3\200\&0\t\154\227\175\160\189\fvd\210G$\223\DEL\167/\223\171Dc\200\167\&8\CAN\152oy\NUL \131,\f ;\247]\192\SOH\rl\195\SUB\CAN\196\&4\236\&4\226\ENQz\NULB#\242B\ETX\ENQD\160\DC3>\218]J8a\GSFD\STX;\ACK\132\150\171\218\STX%\bB\207\f\148\154\211rH\SYN\190\NULm\135\ETB5\144\EOT\a\255\163\f\a\220\160/\209\178\SIW\198d$\NAK\174pU\132\&8E\139hx\129\201\197\208\NAKkPC]\152V\f>\244\130z\EOT\225\ETX\197T\178\DC3\205P\129\SOH\SI\240\255K\161Z`\162$\170\234\DC2\167H\133\SOH 0%\231%eB\233\160\128\132\128\NUL*\148(\163\131\217\168\202Bl'\130\&3\DC2\234\tj2I\ACK\198\136F\170]\139\DC1r\249X\EOTe(\191\188,-\n\136\154\135/r\148\SI\211\&0n&\223z\DC3$&sH\170\193\173(\139\220Z\ESC<f\130\DC3\f!G#4\SOHah\160&.\224\r8\246\t\192'\171\&6\142\ENQ>\232g\178\144\160\ETX\203f\f0\212\a\DC1\136\&0\228L\200\&6\178@^\ENQf\SI8P-m\ACK\131\ACK\173'\151\159ic\EOT_\209\DC1\194(c\b\145\CANUf\208\246\202\SI\129\211`\219\201d3\153\212\194J\NUL\198\"\159i\228+(\168\146R\CAN\137\156]\217d\SYN \179\ESC\n(\175\156\208\202\164\fV\192HK\173\195\fw+\215D\f\146\157,X2l\199\212\167\130\194\228\162r\168\&3F\146s\163\148bX\139a\DC4+\v\171\FS\DC2\SYN\255\NUL\NAK\150\152\149\135\161\139ZD\ETB\248\t \SUB5 9s\154\211*Fg\133U>\167\158\226\216\149\215\b'R&)O\DC1cZ`\ETBV\250D\\M\SO4\172p\135'R\132\168*D\"H\133\147\131\216n\170D\141\249\161\129\&3\218\214\182\224\CAN\anF\235e)\176i\166n \SO\233 `0\\u\234\154\242i\173\&0\168\227\167s\178*:\142v\133a\137\227a\ACK\131Dz\ACK\DC34\178\RSoT\t\192Z\t\250\197\134\STX\252\DC4`\CANY\168\178\128%W\165\241\129\160w\192\171\205B\EM\153\&0<\192\129\254bk\SUB\216\144I\211\144\233a\240\162\130\204\SO\203\216\155\&1\174u+XCd?\230F\248\DC1\140X\228R\172\229 \ENQ\174b\164\236\179\169\&3+\ETB\216%\v]\SYN\NUL~\DLE\237A\193\150F82\185VtM\149\237\205\FS\235\131X\249skl\b\216\244\222\&1\\2\189)h.%\174\234\158\DLE\255\&7\RS\NUL\172c\ACK\232\200\220\246\224\130P\r70\189;\\x\169K/\227\238\&0\164\159\153\NAKF\230v\NUL\147\DC1Fa\168\&4h\200z\a\143\223\153\215x:\133\EM\CAN\147;T\139\166\161\NUL\248\224\171\239\232\155\191\182A\SOH\190\130\211A~\141\&72\230}er\STX`\223\ESC\NUL\140\134\&6\DLE\240\174\188\GSZ>v\182\b\233\&5\216\193\227H\US\SI\NUL\235\175\ACKH \STX\146\131\158 &\136a\128\228\134\193<\208\GS)RrB\137\132x\182\209\197%\SI\"\216\NUL\232a\EOT\ETX*\150\FS\SOH\158\CAN\193\ah\STX\155.\216E\SO\140\240\157\EOT\228\130 7\206\177\SOHi@[\DC3\168\145\a\r\136\192\228\STX\192e7\CAN@r\179H\233\148\FS\224\203>\184i\EMz\160\228\v\140\DC3S*\175\144\159!\237\235\ETXRLQ\f\EOT\128\134l\200\&3\ENQ$ \208\198\&5\235%#9\201\217P\DC1[8\147/\157\207`\192n\US\180\175\NUL\255\228\EM\160\239}\226\ETX~\252gOT\128\DC2\229E\180\219\160\153e\236\" )a\134t\NULD\163\ACK\SOH\196\144\211p\142\238\156Y@\SO4P\b\STX\164\150Ri/\173\133K\184Y\213h\132\DC49\164\176\ACKFF@\NUL?\158\220TR\218\128F\217Ca\186N\244N\ESC]\STXv\144\154\212)}\175T\GS \SOH\t4\NUL\DC1.P\128\EOT~u\131A\ETB(_\193[vu\139\163h\236\246,\178\212\188@\180U<\171\142\DLEdN\CAN\216\129G\SI\SUB\168 \146\187\202m\137\151\DC4\232&\161`_\251\STX\218\254\203\183\233\145\239f\178\206\217\210\244\183\194\&9\129\213\131\235{y\173^\184\191!.\219\156q\225\220\216e8\166,\238T7\241\ETBR\FS\239\184\199E\154<\206\192\128\175G\CAN\185\173Knr\226\&8jT,o\184\203k\249\233\SUB\176k\229,\175\249\199\&9C-\139\205\156\231\f\GS\nm\243\197\184\160\v\189\255\150p\v\165\163\170\128\244\164\215\178ZV\201\215\196\253\203q\168\151\211\184Dw\250\206\177\142\240gh\\\231#\247z\212\139Cb*<\157\236q\142\214^\175\144v\181\147\143\&80\160\185\213\EM\SO\247\NAK:\233\vU\223\248\216\239n\192\153.\240\225\DC1\173\184\223SW\n\162\232\GS\vo/\252\197Jj=~\187\189\235\140\175Zz\188\150\133\197O\254\169\&0k\187\226%\159yz\209@&\US\212\STX\230??\210\202\243\184\243}7=\198X\149s+\148\158\245Kj\145)\230.\248\186\DC3^\246\140\202\251\217U\DELu\221\167\145,z\191=\238\233\ACK\252\145:\220\aW#>\197\141\DEL|&\145\148,\139\200\&5\233=\255\252\134\250<\229\242\236A\236\175\US\FS\179~\225-\159\232\190\247\&1\147Ojm\159\251\214/\255y\224\150r\230\ETB\DELk\236_Q\CAN\146\183w\174\175~\254\230\201'\STX\ETB\218\239\245\235\US[8\255\131\171$\RS(\144_\NUL>\EOT\STXY\ENQ\STX\221\US\254\253\RS\STXZ\ACK\181X\200\SI\136\194\SOHB`C\176\139\DC34\160\ETX\218\221\ENQ\178\133\&8\204\221(X\160\a\142\194~ED\234\EM \NUL\146`C\NUL\RS\221\249^\a\174 D\128`\227t\195\b\198\224\SYN\152 \134\168\130\&7\216\224\rb\129cY\153\255\193\158\n\250`PpAi|C\SI\SYN\225)\DC4\a'\b\225\DLE\230\223\DC2\134\194\f\230\ENQ8(\161\DC4\RS\161\242\241\148\NAK\DC2!\SYNZ\129\DC3\132\193\&3m`\245E\161\ETBf\129[\200\195\251\&5\196\NAK\154a\SO2 \252A\225\ETX\154\225\EM\130]\n\164\223\229u\225\FSf\225\RS\144\194C\176\225\DC2\210\214f\188\RS\SI\230\161\RS>\SOH\130L\223\DC3\146\161\FS\182\225\230\193\n'\140\225\248\NAK\"\tJ\139P,\STXz\181\200 &\225$\146\160\SUB\233\148\EOT\178\157\DC3\254\196\US\150\159\251\&9\RS\171p\158O\144\226\245\209\255\158u\129\FS\204$\"P\172\226\241\149\148\180\CANG\"U\194\DC3Db(\204\162\236\217\139q\184I\ETB\f\162-\222a\n\150!%\246\159\133\220\220\DC1\166\226(rb)>\DC3\204i\226>@\158,>#+\190\197\DC2\233\224\t:\200\SYN\174E/f\RSI)\SI`h\"\v\244![\128c\230\SOH\ACK\SUB~\161.^F:\134\163\248\181I\EM`\ACK<\SYN^\244m\159\DC3\224\":^\227\243\181\226\NAK\bc1\DC2\226\&1\178_\CANN\vz\197\192\223\b\135=b\221>\FS\162\149\165\NUL7\161\149y0$\212\ENQ$\174e#\DC3\"!E\246\227\231\157\162\ETB\132Vf\b$\ETB\DC2\228\243\201\163<\194E\SO\226\140(\158GE\214\\\255\GS^\SUB\"\228~U\227Bvd\225\&9d\SUB:\\\216%\159\&7\182\228M\SYN\RS\248\EM\GS\"\SO\160\"B\132K\146\GS\198\229\"K*\bRb\GS\237=\226\DC3\148c=\STX\229\231%\255\207>z\129<\212d\130\&8\229S\194\140<`%WV\165\223]\226fD\165\GS\174IWZ\FS\\TK\229\r\224HZcI\250\162\STX^\153\&9\158\210\162\168%\196\ENQ\227\152\b\133Q\242\163\\\234\RSB\246$\132\225\229X\170]h\149TX.I^B\FS\239\181\202\179\&0&\185A$\ETB8\195\171@\166az\165\220\213\192.\254$`\170#\245Y\SIX\194\161Mz&\227\129\225R:!\\\ACKGdr\154\147\248A\239A\vk\194\EM\154\212\USg\170\136l\230\216\149\213\166\219\224f\131\193\138\US\DLE\230\205\244&uM\223\RS\158#ob\166\197\145\148qNel&\231\193\217\162\SYN\222\165\241\f\167SUbz\192\141\227\144Ou\222\212\234\136\131R\170\FSu>\167\174\NAK]m\170fZ\142\167\170\129\160UP\196h2\nw\150\211\189\FSWej'\SUB\193\167\210M\159)L]s*\206}~RN\197\255\128P\132\167}\166'q%\146c-\157m\218\140\DEL\166\206'\"\215|\154\128\130.h\129~V\237\173d\171\184\231\197\&0\168\225\161\207\n\212\167>m\232\226\&8\162\135\158\231\132\150\230\178\229\157<\\\141_\246'\133\146\NAKv\134\193\206\176h\139\158(\149]\194P \158[\240g-\133\168\170\\\162u5a\171\148(\141\&2\226'e(3\186f\152\f(Y\245\232\&7\252h\t>\233\RS\212\223\142\234\DC3e\221V\SUB\180\145\v\SUB\143wf(B\138\222\SOH\f\233v\226\138\251\212\t\174\148\169\150v\SUB\v\156\220\173YY\131(\SUB0\134X+\160\195\ESC5\144\f\161\ETX\154\&6\150'\250A]\154]O\250\128\232\241\164l\189\ETB\133\152i\150N\201\ESCQ\219\DELb\153\133\&6\nm\158_\160\DC2\151\251\200\233\164\210\194\161\138\134\EM(\166q\170\ENQ\252U&>V\226d\170\a_\238\SOHh\198\169\251\DLE\234\140\208i+t\255\203\&6\182\ENQ\171\STX\ENQ\159\230\"\CAN\230\140\&8V\226q\149c\190D\202\140\&2\212\156\138\ACK\FSY\234\159\&1\136JF\132<\STX\ENQ\168\226\CAN\171\212@\DC3>\168\171\130]N\237L\152\&6\DC3+d\169\157D\214\140\196\192f\252\169(\158\230Ky\STX\242<\DC3\134\208&7Yb\182\142\137)P\EOT\180\150\DC3\221\164\170\179\213\159\&9\"\DLE\184\186\b\179\150\171\171\173\233\149-g[X(b\214f\166R\EM\195\225\n\171d$\237\185\EM\172\170\233<\226\\\150\173\142\220\233\NAKH\RS\162e>\131L\188\197V\234\SUB\230a\171\248\225h\193~\195?\202\231\RS:,'|\154\212-#\206\NAK\ENQ\169\146[\233\193\ENQ\255E\159\&7\172i\179\neb\SUBGY\190\b\191J\165\173\134l\201\DC2\225>\174\169`2Q\248}k \n\171\189(O)\164\236\214\153\155\144P\132\174RW\SI\226\234!~e(\166a\CAN\214\158\t\182\162\195\174\255\206\139d\210\235\237\NAK\149\170\154\DC2b\\\173V\237\249\249)r=S\242\236$\209)\194\181\216\v\134NK\239\b\USEHl\201]a\198\CAN\221\181\200\234fT\236r^\167\221f\229\214=\147\221Z-\250\208\214\209\RSi\191v!\193\SYN\197\141\RS\171\148\162\211\163\232$\222\246-Z\226k\SO\SUB\199\146&\157\ENQn\159[\NUL(\206\DC1\229\216F\EOT[\134\137\208\178\157J\RS-\186\DC2n\141\226`4j*\189\230K\218R\203[:b\237\GS\237\228\201&[\222\226!\154\143\197\130\145`\174\238\181\214n\230\&1\230\214\157&\226\218\225:\230d\185\230\220\207!\173\197\&1f\232\221\\\253\245-\177\246\206\205\229\203\203\234\222\242\n\227-6\203\168\&2\DC1\216\221\"\233B\\^\154\171\SO\186\202B\DC1\173w\156\171\247*\175\139\250\128(\nc\f\244\151z\164G\247\162/\220\170\175\249bY\DLE6\nQ\FS\RS\152\206o\205\185\255\164R\182\239\SI*\229V],\EOT\186$\174}\194\201\133a\236\174\224\255\194\161\209\165\ETB\201^\160\DEL\n\175\195\201h\255\222\GSw\130\162T\202/\SYN\246f\211\225\220\203\SUB\174\a\178\230\210\130\229\249\SUB\226\224\&9\USPL/\ETB(\NUL\255\166p\252U\142O\172l\171\132Z\242N0\133\254-\206yX\fO\129=\SO\240^\205\129\204\198p:\154%\174\141\129\214\SYN1Pf\163f\\e\247\SO\174\ETB\218\160f\244\151\"\128\193\179b\240\rb\158\213\222\168\207Mn\DC2G\241\DC2s\FS%X\177\220\130%\209\EM\199\SOHH\202\b\251\&0\RS\250[\ESC\EM\192\141*\160f\f\133\140\STXc\SYN\167\176`5\208\RS\v\148\NAKO.\246\226p\ESC+\222\RS\DC3\242\\\184Q\GS\159o\CAN\v\242\SYN\196ZR\136Zd\201O$\ETB\192$K\138\176.\178e8\144\ETX\205\202$\171\ESC\FS\187\145\EM\140\193%\171\200\225U\173(\155\242)\163\EOT\178'\132\NUL\NUL;"),("s5/default/framing.css","/* The following styles size, place, and layer the slide components.\n   Edit these if you want to change the overall slide layout.\n   The commented lines can be uncommented (and modified, if necessary) \n    to help you with the rearrangement process. */\n\n/* target = 1024x768 */\n\ndiv#header, div#footer, .slide {width: 100%; top: 0; left: 0;}\ndiv#header {top: 0; height: 3em; z-index: 1;}\ndiv#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}\n.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2;  list-style: none;}\ndiv#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}\ndiv#controls form {position: absolute; bottom: 0; right: 0; width: 100%;\n  margin: 0;}\n#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}\nhtml>body #currentSlide {position: fixed;}\n\n/*\ndiv#header {background: #FCC;}\ndiv#footer {background: #CCF;}\ndiv#controls {background: #BBD;}\ndiv#currentSlide {background: #FFC;}\n*/\n"),("s5/default/iepngfix.htc","<public:component>\r\n<public:attach event=\"onpropertychange\" onevent=\"doFix()\" />\r\n\r\n<script>\r\n\r\n// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com\r\n// Free usage permitted as long as this notice remains intact.\r\n\r\n// This must be a path to a blank image. That's all the configuration you need here.\r\nvar blankImg = 'ui/default/blank.gif';\r\n\r\nvar f = 'DXImageTransform.Microsoft.AlphaImageLoader';\r\n\r\nfunction filt(s, m) {\r\n if (filters[f]) {\r\n  filters[f].enabled = s ? true : false;\r\n  if (s) with (filters[f]) { src = s; sizingMethod = m }\r\n } else if (s) style.filter = 'progid:'+f+'(src=\"'+s+'\",sizingMethod=\"'+m+'\")';\r\n}\r\n\r\nfunction doFix() {\r\n if ((parseFloat(navigator.userAgent.match(/MSIE (\\S+)/)[1]) < 5.5) ||\r\n  (event && !/(background|src)/.test(event.propertyName))) return;\r\n\r\n if (tagName == 'IMG') {\r\n  if ((/\\.png$/i).test(src)) {\r\n   filt(src, 'image');  // was 'scale'\r\n   src = blankImg;\r\n  } else if (src.indexOf(blankImg) < 0) filt();\r\n } else if (style.backgroundImage) {\r\n  if (style.backgroundImage.match(/^url[(\"']+(.*\\.png)[)\"']+$/i)) {\r\n   var s = RegExp.$1;\r\n   style.backgroundImage = '';\r\n   filt(s, 'crop');\r\n  } else filt();\r\n }\r\n}\r\n\r\ndoFix();\r\n\r\n</script>\r\n</public:component>"),("s5/default/opera.css","/* DO NOT CHANGE THESE unless you really want to break Opera Show */\n.slide {\n\tvisibility: visible !important;\n\tposition: static !important;\n\tpage-break-before: always;\n}\n#slide0 {page-break-before: avoid;}\n"),("s5/default/outline.css","/* don't change this unless you want the layout stuff to show up in the outline view! */\n\n.layout div, #footer *, #controlForm * {display: none;}\n#footer, #controls, #controlForm, #navLinks, #toggle {\n  display: block; visibility: visible; margin: 0; padding: 0;}\n#toggle {float: right; padding: 0.5em;}\nhtml>body #toggle {position: fixed; top: 0; right: 0;}\n\n/* making the outline look pretty-ish */\n\n#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}\n#slide0 h1 {padding-top: 1.5em;}\n.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;\n  border-top: 1px solid #888; border-bottom: 1px solid #AAA;}\n#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}\n"),("s5/default/pretty.css","/* Following are the presentation styles -- edit away! */\n\nbody {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}\n:link, :visited {text-decoration: none; color: #00C;}\n#controls :active {color: #88A !important;}\n#controls :focus {outline: 1px dotted #227;}\nh1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}\nul, pre {margin: 0; line-height: 1em;}\nhtml, body {margin: 0; padding: 0;}\n\nblockquote, q {font-style: italic;}\nblockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}\nblockquote p {margin: 0;}\nblockquote i {font-style: normal;}\nblockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}\nblockquote b i {font-style: italic;}\n\nkbd {font-weight: bold; font-size: 1em;}\nsup {font-size: smaller; line-height: 1px;}\n\n.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}\n.slide code.bad, code del {color: red;}\n.slide code.old {color: silver;}\n.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}\n.slide pre code {display: block;}\n.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}\n.slide li {margin-top: 0.75em; margin-right: 0;}\n.slide ul ul {line-height: 1;}\n.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}\n.slide img.leader {display: block; margin: 0 auto;}\n\ndiv#header, div#footer {background: #005; color: #AAB;\n  font-family: Verdana, Helvetica, sans-serif;}\ndiv#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;\n  line-height: 1px;}\ndiv#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}\n#footer h1, #footer h2 {display: block; padding: 0 1em;}\n#footer h2 {font-style: italic;}\n\ndiv.long {font-size: 0.75em;}\n.slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;\n  margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;\n  font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;\n  color: #DDE; background: #005;}\n.slide h3 {font-size: 130%;}\nh1 abbr {font-variant: small-caps;}\n\ndiv#controls {position: absolute; left: 50%; bottom: 0;\n  width: 50%;\n  text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;}\nhtml>body div#controls {position: fixed; padding: 0 0 1em 0;\n  top: auto;}\ndiv#controls form {position: absolute; bottom: 0; right: 0; width: 100%;\n  margin: 0; padding: 0;}\n#controls #navLinks a {padding: 0; margin: 0 0.5em; \n  background: #005; border: none; color: #779; \n  cursor: pointer;}\n#controls #navList {height: 1em;}\n#controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;}\n\n#currentSlide {text-align: center; font-size: 0.5em; color: #449;}\n\n#slide0 {padding-top: 3.5em; font-size: 90%;}\n#slide0 h1 {position: static; margin: 1em 0 0; padding: 0;\n   font: bold 2em Helvetica, sans-serif; white-space: normal;\n   color: #000; background: transparent;}\n#slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;}\n#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}\n#slide0 h4 {margin-top: 0; font-size: 1em;}\n\nul.urls {list-style: none; display: inline; margin: 0;}\n.urls li {display: inline; margin: 0;}\n.note {display: none;}\n.external {border-bottom: 1px dotted gray;}\nhtml>body .external {border-bottom: none;}\n.external:after {content: \" \\274F\"; font-size: smaller; color: #77B;}\n\n.incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}\nimg.incremental {visibility: hidden;}\n.slide .current {color: #B02;}\n\n\n/* diagnostics\n\nli:after {content: \" [\" attr(class) \"]\"; color: #F88;}\n*/\n"),("s5/default/print.css","/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */\n.slide, ul {page-break-inside: avoid; visibility: visible !important;}\nh1 {page-break-after: avoid;}\n\nbody {font-size: 12pt; background: white;}\n* {color: black;}\n\n#slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;}\n#slide0 h3 {margin: 0; padding: 0;}\n#slide0 h4 {margin: 0 0 0.5em; padding: 0;}\n#slide0 {margin-bottom: 3em;}\n\nh1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;}\n.extra {background: transparent !important;}\ndiv.extra, pre.extra, .example {font-size: 10pt; color: #333;}\nul.extra a {font-weight: bold;}\np.example {display: none;}\n\n#header {display: none;}\n#footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;}\n#footer h2, #controls {display: none;}\n\n/* The following rule keeps the layout stuff out of print.  Remove at your own risk! */\n.layout, .layout * {display: none !important;}\n"),("s5/default/s5-core.css","/* Do not edit or override these styles! The system will likely break if you do. */\n\ndiv#header, div#footer, div#controls, .slide {position: absolute;}\nhtml>body div#header, html>body div#footer, \n  html>body div#controls, html>body .slide {position: fixed;}\n.handout {display: none;}\n.layout {display: block;}\n.slide, .hideme, .incremental {visibility: hidden;}\n#slide0 {visibility: visible;}\n"),("s5/default/slides.css","@import url(s5-core.css); /* required to make the slide show run at all */\n@import url(framing.css); /* sets basic placement and size of slide components */\n@import url(pretty.css);  /* stuff that makes the slides look better than blah */"),("s5/default/slides.js","// S5 v1.1 slides.js -- released into the Public Domain\n//\n// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information \n// about all the wonderful and talented contributors to this code!\n\nvar undef;\nvar slideCSS = '';\nvar snum = 0;\nvar smax = 1;\nvar incpos = 0;\nvar number = undef;\nvar s5mode = true;\nvar defaultView = 'slideshow';\nvar controlVis = 'visible';\n\nvar isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;\nvar isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;\nvar isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;\n\nfunction hasClass(object, className) {\n\tif (!object.className) return false;\n\treturn (object.className.search('(^|\\\\s)' + className + '(\\\\s|$)') != -1);\n}\n\nfunction hasValue(object, value) {\n\tif (!object) return false;\n\treturn (object.search('(^|\\\\s)' + value + '(\\\\s|$)') != -1);\n}\n\nfunction removeClass(object,className) {\n\tif (!object) return;\n\tobject.className = object.className.replace(new RegExp('(^|\\\\s)'+className+'(\\\\s|$)'), RegExp.$1+RegExp.$2);\n}\n\nfunction addClass(object,className) {\n\tif (!object || hasClass(object, className)) return;\n\tif (object.className) {\n\t\tobject.className += ' '+className;\n\t} else {\n\t\tobject.className = className;\n\t}\n}\n\nfunction GetElementsWithClassName(elementName,className) {\n\tvar allElements = document.getElementsByTagName(elementName);\n\tvar elemColl = new Array();\n\tfor (var i = 0; i< allElements.length; i++) {\n\t\tif (hasClass(allElements[i], className)) {\n\t\t\telemColl[elemColl.length] = allElements[i];\n\t\t}\n\t}\n\treturn elemColl;\n}\n\nfunction isParentOrSelf(element, id) {\n\tif (element == null || element.nodeName=='BODY') return false;\n\telse if (element.id == id) return true;\n\telse return isParentOrSelf(element.parentNode, id);\n}\n\nfunction nodeValue(node) {\n\tvar result = \"\";\n\tif (node.nodeType == 1) {\n\t\tvar children = node.childNodes;\n\t\tfor (var i = 0; i < children.length; ++i) {\n\t\t\tresult += nodeValue(children[i]);\n\t\t}\t\t\n\t}\n\telse if (node.nodeType == 3) {\n\t\tresult = node.nodeValue;\n\t}\n\treturn(result);\n}\n\nfunction slideLabel() {\n\tvar slideColl = GetElementsWithClassName('*','slide');\n\tvar list = document.getElementById('jumplist');\n\tsmax = slideColl.length;\n\tfor (var n = 0; n < smax; n++) {\n\t\tvar obj = slideColl[n];\n\n\t\tvar did = 'slide' + n.toString();\n\t\tobj.setAttribute('id',did);\n\t\tif (isOp) continue;\n\n\t\tvar otext = '';\n\t\tvar menu = obj.firstChild;\n\t\tif (!menu) continue; // to cope with empty slides\n\t\twhile (menu && menu.nodeType == 3) {\n\t\t\tmenu = menu.nextSibling;\n\t\t}\n\t \tif (!menu) continue; // to cope with slides with only text nodes\n\n\t\tvar menunodes = menu.childNodes;\n\t\tfor (var o = 0; o < menunodes.length; o++) {\n\t\t\totext += nodeValue(menunodes[o]);\n\t\t}\n\t\tlist.options[list.length] = new Option(n + ' : '  + otext, n);\n\t}\n}\n\nfunction currentSlide() {\n\tvar cs;\n\tif (document.getElementById) {\n\t\tcs = document.getElementById('currentSlide');\n\t} else {\n\t\tcs = document.currentSlide;\n\t}\n\tcs.innerHTML = '<span id=\"csHere\">' + snum + '<\\/span> ' + \n\t\t'<span id=\"csSep\">\\/<\\/span> ' + \n\t\t'<span id=\"csTotal\">' + (smax-1) + '<\\/span>';\n\tif (snum == 0) {\n\t\tcs.style.visibility = 'hidden';\n\t} else {\n\t\tcs.style.visibility = 'visible';\n\t}\n}\n\nfunction go(step) {\n\tif (document.getElementById('slideProj').disabled || step == 0) return;\n\tvar jl = document.getElementById('jumplist');\n\tvar cid = 'slide' + snum;\n\tvar ce = document.getElementById(cid);\n\tif (incrementals[snum].length > 0) {\n\t\tfor (var i = 0; i < incrementals[snum].length; i++) {\n\t\t\tremoveClass(incrementals[snum][i], 'current');\n\t\t\tremoveClass(incrementals[snum][i], 'incremental');\n\t\t}\n\t}\n\tif (step != 'j') {\n\t\tsnum += step;\n\t\tlmax = smax - 1;\n\t\tif (snum > lmax) snum = lmax;\n\t\tif (snum < 0) snum = 0;\n\t} else\n\t\tsnum = parseInt(jl.value);\n\tvar nid = 'slide' + snum;\n\tvar ne = document.getElementById(nid);\n\tif (!ne) {\n\t\tne = document.getElementById('slide0');\n\t\tsnum = 0;\n\t}\n\tif (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;}\n\tif (incrementals[snum].length > 0 && incpos == 0) {\n\t\tfor (var i = 0; i < incrementals[snum].length; i++) {\n\t\t\tif (hasClass(incrementals[snum][i], 'current'))\n\t\t\t\tincpos = i + 1;\n\t\t\telse\n\t\t\t\taddClass(incrementals[snum][i], 'incremental');\n\t\t}\n\t}\n\tif (incrementals[snum].length > 0 && incpos > 0)\n\t\taddClass(incrementals[snum][incpos - 1], 'current');\n\tce.style.visibility = 'hidden';\n\tne.style.visibility = 'visible';\n\tjl.selectedIndex = snum;\n\tcurrentSlide();\n\tnumber = 0;\n}\n\nfunction goTo(target) {\n\tif (target >= smax || target == snum) return;\n\tgo(target - snum);\n}\n\nfunction subgo(step) {\n\tif (step > 0) {\n\t\tremoveClass(incrementals[snum][incpos - 1],'current');\n\t\tremoveClass(incrementals[snum][incpos], 'incremental');\n\t\taddClass(incrementals[snum][incpos],'current');\n\t\tincpos++;\n\t} else {\n\t\tincpos--;\n\t\tremoveClass(incrementals[snum][incpos],'current');\n\t\taddClass(incrementals[snum][incpos], 'incremental');\n\t\taddClass(incrementals[snum][incpos - 1],'current');\n\t}\n}\n\nfunction toggle() {\n\tvar slideColl = GetElementsWithClassName('*','slide');\n\tvar slides = document.getElementById('slideProj');\n\tvar outline = document.getElementById('outlineStyle');\n\tif (!slides.disabled) {\n\t\tslides.disabled = true;\n\t\toutline.disabled = false;\n\t\ts5mode = false;\n\t\tfontSize('1em');\n\t\tfor (var n = 0; n < smax; n++) {\n\t\t\tvar slide = slideColl[n];\n\t\t\tslide.style.visibility = 'visible';\n\t\t}\n\t} else {\n\t\tslides.disabled = false;\n\t\toutline.disabled = true;\n\t\ts5mode = true;\n\t\tfontScale();\n\t\tfor (var n = 0; n < smax; n++) {\n\t\t\tvar slide = slideColl[n];\n\t\t\tslide.style.visibility = 'hidden';\n\t\t}\n\t\tslideColl[snum].style.visibility = 'visible';\n\t}\n}\n\nfunction showHide(action) {\n\tvar obj = GetElementsWithClassName('*','hideme')[0];\n\tswitch (action) {\n\tcase 's': obj.style.visibility = 'visible'; break;\n\tcase 'h': obj.style.visibility = 'hidden'; break;\n\tcase 'k':\n\t\tif (obj.style.visibility != 'visible') {\n\t\t\tobj.style.visibility = 'visible';\n\t\t} else {\n\t\t\tobj.style.visibility = 'hidden';\n\t\t}\n\tbreak;\n\t}\n}\n\n// 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/)\nfunction keys(key) {\n\tif (!key) {\n\t\tkey = event;\n\t\tkey.which = key.keyCode;\n\t}\n\tif (key.which == 84) {\n\t\ttoggle();\n\t\treturn;\n\t}\n\tif (s5mode) {\n\t\tswitch (key.which) {\n\t\t\tcase 10: // return\n\t\t\tcase 13: // enter\n\t\t\t\tif (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;\n\t\t\t\tif (key.target && isParentOrSelf(key.target, 'controls')) return;\n\t\t\t\tif(number != undef) {\n\t\t\t\t\tgoTo(number);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase 32: // spacebar\n\t\t\tcase 34: // page down\n\t\t\tcase 39: // rightkey\n\t\t\tcase 40: // downkey\n\t\t\t\tif(number != undef) {\n\t\t\t\t\tgo(number);\n\t\t\t\t} else if (!incrementals[snum] || incpos >= incrementals[snum].length) {\n\t\t\t\t\tgo(1);\n\t\t\t\t} else {\n\t\t\t\t\tsubgo(1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 33: // page up\n\t\t\tcase 37: // leftkey\n\t\t\tcase 38: // upkey\n\t\t\t\tif(number != undef) {\n\t\t\t\t\tgo(-1 * number);\n\t\t\t\t} else if (!incrementals[snum] || incpos <= 0) {\n\t\t\t\t\tgo(-1);\n\t\t\t\t} else {\n\t\t\t\t\tsubgo(-1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 36: // home\n\t\t\t\tgoTo(0);\n\t\t\t\tbreak;\n\t\t\tcase 35: // end\n\t\t\t\tgoTo(smax-1);\n\t\t\t\tbreak;\n\t\t\tcase 67: // c\n\t\t\t\tshowHide('k');\n\t\t\t\tbreak;\n\t\t}\n\t\tif (key.which < 48 || key.which > 57) {\n\t\t\tnumber = undef;\n\t\t} else {\n\t\t\tif (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;\n\t\t\tif (key.target && isParentOrSelf(key.target, 'controls')) return;\n\t\t\tnumber = (((number != undef) ? number : 0) * 10) + (key.which - 48);\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction clicker(e) {\n\tnumber = undef;\n\tvar target;\n\tif (window.event) {\n\t\ttarget = window.event.srcElement;\n\t\te = window.event;\n\t} else target = e.target;\n\tif (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;\n\tif (!e.which || e.which == 1) {\n\t\tif (!incrementals[snum] || incpos >= incrementals[snum].length) {\n\t\t\tgo(1);\n\t\t} else {\n\t\t\tsubgo(1);\n\t\t}\n\t}\n}\n\nfunction findSlide(hash) {\n\tvar target = null;\n\tvar slides = GetElementsWithClassName('*','slide');\n\tfor (var i = 0; i < slides.length; i++) {\n\t\tvar targetSlide = slides[i];\n\t\tif ( (targetSlide.name && targetSlide.name == hash)\n\t\t || (targetSlide.id && targetSlide.id == hash) ) {\n\t\t\ttarget = targetSlide;\n\t\t\tbreak;\n\t\t}\n\t}\n\twhile(target != null && target.nodeName != 'BODY') {\n\t\tif (hasClass(target, 'slide')) {\n\t\t\treturn parseInt(target.id.slice(5));\n\t\t}\n\t\ttarget = target.parentNode;\n\t}\n\treturn null;\n}\n\nfunction slideJump() {\n\tif (window.location.hash == null) return;\n\tvar sregex = /^#slide(\\d+)$/;\n\tvar matches = sregex.exec(window.location.hash);\n\tvar dest = null;\n\tif (matches != null) {\n\t\tdest = parseInt(matches[1]);\n\t} else {\n\t\tdest = findSlide(window.location.hash.slice(1));\n\t}\n\tif (dest != null)\n\t\tgo(dest - snum);\n}\n\nfunction fixLinks() {\n\tvar thisUri = window.location.href;\n\tthisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);\n\tvar aelements = document.getElementsByTagName('A');\n\tfor (var i = 0; i < aelements.length; i++) {\n\t\tvar a = aelements[i].href;\n\t\tvar slideID = a.match('\\#slide[0-9]{1,2}');\n\t\tif ((slideID) && (slideID[0].slice(0,1) == '#')) {\n\t\t\tvar dest = findSlide(slideID[0].slice(1));\n\t\t\tif (dest != null) {\n\t\t\t\tif (aelements[i].addEventListener) {\n\t\t\t\t\taelements[i].addEventListener(\"click\", new Function(\"e\",\n\t\t\t\t\t\t\"if (document.getElementById('slideProj').disabled) return;\" +\n\t\t\t\t\t\t\"go(\"+dest+\" - snum); \" +\n\t\t\t\t\t\t\"if (e.preventDefault) e.preventDefault();\"), true);\n\t\t\t\t} else if (aelements[i].attachEvent) {\n\t\t\t\t\taelements[i].attachEvent(\"onclick\", new Function(\"\",\n\t\t\t\t\t\t\"if (document.getElementById('slideProj').disabled) return;\" +\n\t\t\t\t\t\t\"go(\"+dest+\" - snum); \" +\n\t\t\t\t\t\t\"event.returnValue = false;\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction externalLinks() {\n\tif (!document.getElementsByTagName) return;\n\tvar anchors = document.getElementsByTagName('a');\n\tfor (var i=0; i<anchors.length; i++) {\n\t\tvar anchor = anchors[i];\n\t\tif (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {\n\t\t\tanchor.target = '_blank';\n\t\t\taddClass(anchor,'external');\n\t\t}\n\t}\n}\n\nfunction createControls() {\n\tvar controlsDiv = document.getElementById(\"controls\");\n\tif (!controlsDiv) return;\n\tvar hider = ' onmouseover=\"showHide(\\'s\\');\" onmouseout=\"showHide(\\'h\\');\"';\n\tvar hideDiv, hideList = '';\n\tif (controlVis == 'hidden') {\n\t\thideDiv = hider;\n\t} else {\n\t\thideList = hider;\n\t}\n\tcontrolsDiv.innerHTML = '<form action=\"#\" id=\"controlForm\"' + hideDiv + '>' +\n\t'<div id=\"navLinks\">' +\n\t'<a accesskey=\"t\" id=\"toggle\" href=\"javascript:toggle();\">&#216;<\\/a>' +\n\t'<a accesskey=\"z\" id=\"prev\" href=\"javascript:go(-1);\">&laquo;<\\/a>' +\n\t'<a accesskey=\"x\" id=\"next\" href=\"javascript:go(1);\">&raquo;<\\/a>' +\n\t'<div id=\"navList\"' + hideList + '><select id=\"jumplist\" onchange=\"go(\\'j\\');\"><\\/select><\\/div>' +\n\t'<\\/div><\\/form>';\n\tif (controlVis == 'hidden') {\n\t\tvar hidden = document.getElementById('navLinks');\n\t} else {\n\t\tvar hidden = document.getElementById('jumplist');\n\t}\n\taddClass(hidden,'hideme');\n}\n\nfunction fontScale() {  // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers\n\tif (!s5mode) return false;\n\tvar vScale = 22;  // both yield 32 (after rounding) at 1024x768\n\tvar hScale = 32;  // perhaps should auto-calculate based on theme's declared value?\n\tif (window.innerHeight) {\n\t\tvar vSize = window.innerHeight;\n\t\tvar hSize = window.innerWidth;\n\t} else if (document.documentElement.clientHeight) {\n\t\tvar vSize = document.documentElement.clientHeight;\n\t\tvar hSize = document.documentElement.clientWidth;\n\t} else if (document.body.clientHeight) {\n\t\tvar vSize = document.body.clientHeight;\n\t\tvar hSize = document.body.clientWidth;\n\t} else {\n\t\tvar vSize = 700;  // assuming 1024x768, minus chrome and such\n\t\tvar hSize = 1024; // these do not account for kiosk mode or Opera Show\n\t}\n\tvar newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));\n\tfontSize(newSize + 'px');\n\tif (isGe) {  // hack to counter incremental reflow bugs\n\t\tvar obj = document.getElementsByTagName('body')[0];\n\t\tobj.style.display = 'none';\n\t\tobj.style.display = 'block';\n\t}\n}\n\nfunction fontSize(value) {\n\tif (!(s5ss = document.getElementById('s5ss'))) {\n\t\tif (!isIE) {\n\t\t\tdocument.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));\n\t\t\ts5ss.setAttribute('media','screen, projection');\n\t\t\ts5ss.setAttribute('id','s5ss');\n\t\t} else {\n\t\t\tdocument.createStyleSheet();\n\t\t\tdocument.s5ss = document.styleSheets[document.styleSheets.length - 1];\n\t\t}\n\t}\n\tif (!isIE) {\n\t\twhile (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);\n\t\ts5ss.appendChild(document.createTextNode('body {font-size: ' + value + ' !important;}'));\n\t} else {\n\t\tdocument.s5ss.addRule('body','font-size: ' + value + ' !important;');\n\t}\n}\n\nfunction notOperaFix() {\n\tslideCSS = document.getElementById('slideProj').href;\n\tvar slides = document.getElementById('slideProj');\n\tvar outline = document.getElementById('outlineStyle');\n\tslides.setAttribute('media','screen');\n\toutline.disabled = true;\n\tif (isGe) {\n\t\tslides.setAttribute('href','null');   // Gecko fix\n\t\tslides.setAttribute('href',slideCSS); // Gecko fix\n\t}\n\tif (isIE && document.styleSheets && document.styleSheets[0]) {\n\t\tdocument.styleSheets[0].addRule('img', 'behavior: url(ui/default/iepngfix.htc)');\n\t\tdocument.styleSheets[0].addRule('div', 'behavior: url(ui/default/iepngfix.htc)');\n\t\tdocument.styleSheets[0].addRule('.slide', 'behavior: url(ui/default/iepngfix.htc)');\n\t}\n}\n\nfunction getIncrementals(obj) {\n\tvar incrementals = new Array();\n\tif (!obj) \n\t\treturn incrementals;\n\tvar children = obj.childNodes;\n\tfor (var i = 0; i < children.length; i++) {\n\t\tvar child = children[i];\n\t\tif (hasClass(child, 'incremental')) {\n\t\t\tif (child.nodeName == 'OL' || child.nodeName == 'UL') {\n\t\t\t\tremoveClass(child, 'incremental');\n\t\t\t\tfor (var j = 0; j < child.childNodes.length; j++) {\n\t\t\t\t\tif (child.childNodes[j].nodeType == 1) {\n\t\t\t\t\t\taddClass(child.childNodes[j], 'incremental');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tincrementals[incrementals.length] = child;\n\t\t\t\tremoveClass(child,'incremental');\n\t\t\t}\n\t\t}\n\t\tif (hasClass(child, 'show-first')) {\n\t\t\tif (child.nodeName == 'OL' || child.nodeName == 'UL') {\n\t\t\t\tremoveClass(child, 'show-first');\n\t\t\t\tif (child.childNodes[isGe].nodeType == 1) {\n\t\t\t\t\tremoveClass(child.childNodes[isGe], 'incremental');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tincrementals[incrementals.length] = child;\n\t\t\t}\n\t\t}\n\t\tincrementals = incrementals.concat(getIncrementals(child));\n\t}\n\treturn incrementals;\n}\n\nfunction createIncrementals() {\n\tvar incrementals = new Array();\n\tfor (var i = 0; i < smax; i++) {\n\t\tincrementals[i] = getIncrementals(document.getElementById('slide'+i));\n\t}\n\treturn incrementals;\n}\n\nfunction defaultCheck() {\n\tvar allMetas = document.getElementsByTagName('meta');\n\tfor (var i = 0; i< allMetas.length; i++) {\n\t\tif (allMetas[i].name == 'defaultView') {\n\t\t\tdefaultView = allMetas[i].content;\n\t\t}\n\t\tif (allMetas[i].name == 'controlVis') {\n\t\t\tcontrolVis = allMetas[i].content;\n\t\t}\n\t}\n}\n\n// Key trap fix, new function body for trap()\nfunction trap(e) {\n\tif (!e) {\n\t\te = event;\n\t\te.which = e.keyCode;\n\t}\n\ttry {\n\t\tmodifierKey = e.ctrlKey || e.altKey || e.metaKey;\n\t}\n\tcatch(e) {\n\t\tmodifierKey = false;\n\t}\n\treturn modifierKey || e.which == 0;\n}\n\nfunction startup() {\n\tdefaultCheck();\n\tif (!isOp) \n\t\tcreateControls();\n\tslideLabel();\n\tfixLinks();\n\texternalLinks();\n\tfontScale();\n\tif (!isOp) {\n\t\tnotOperaFix();\n\t\tincrementals = createIncrementals();\n\t\tslideJump();\n\t\tif (defaultView == 'outline') {\n\t\t\ttoggle();\n\t\t}\n\t\tdocument.onkeyup = keys;\n\t\tdocument.onkeypress = trap;\n\t\tdocument.onclick = clicker;\n\t}\n}\n\nwindow.onload = startup;\nwindow.onresize = function(){setTimeout('fontScale()', 50);}"),("slideous/slideous.css","/*\tThis work is licensed under Creative Commons GNU LGPL License.\n\n\tLicense: http://creativecommons.org/licenses/LGPL/2.1/\n\tVersion: 1.0\n\n\tAuthor:  Stefan Goessner/2005\n\tWeb:     http://goessner.net/ \n*/\n@media screen, projection {\nbody {\n  background-color: #e3eee7;\n  padding: 0;\n  margin: 0;\n  color: #132; \n  border-color: #678; \n  font-size: 125%;\n}\n#statusbar {\n  display: none;\n  position: absolute; z-index: 10;\n  top: auto; bottom: 0; left: 0; right: 0;\n  height: 2em;\n  background-color: #f0fff8;\n  color: #132;\n  font-size: 75%;\n  padding: 0.5em 0.5em 0 2px;\n  border-top: solid 1px #000;\n}\n#statusbar button, #tocbox {\n  cursor: pointer; \n  color: #031;\n  background-color: #e0eee7;\n  margin: 1px;\n  padding: 0 0.5em;\n  border: inset 1px black;\n}\n#statusbar button:hover, #tocbox:hover {\n  color: #031;\n  background-color: #c0ccc6;\n  border: outset 1px black;\n}\n#tocbox {\n  width: 15em;\n}\n#eos {\n  visibility: hidden;\n  color: #021;\n  background-color: #fffafa;\n  border: inset 1px black;\n  font-size: 120%;\n}\ndiv.slide {\n   display: block;\n   margin: 0 0 2em 0;\n   padding: 0 150px;\n}\n\ndiv.slide h1 {\n  background: #a0aaa4;\n  color: #f0fff8;\n  padding: 0 0.5em 0 0.5em;\n  margin: 0 -150px;\n  font-size: 120%;\n  border-bottom: solid 1px black;\n}\n\ndiv.slide h1:before { content: \"# \"; }\ndiv.handout { display: block; }\n   \nbody>#statusbar {   /* ie6 hack for fixing the statusbar - in quirks mode */\n  position: fixed;  /* thanks to Anne van Kesteren and Arthur Steiner */\n}                   /* see http://limpid.nl/lab/css/fixed/footer */\n* html body {\n  overflow: hidden;\n}\n* html div.slide {\n  height: 100%;\n  padding-bottom: 2em;\n  overflow: auto;\n}                   /* end ie6-hack */\n\n} /* @media screen, projection */\n\n@media print {\nbody {\n  color: black;\n  font-family: sans-serif;\n  font-size: 11pt;\n}\n\n#statusbar { display: none; }\ndiv.slide { page-break-after: always; }\ndiv.handout { display: block; }\n\n} /* @media print */\n"),("slideous/slideous.js","/*\tThis work is licensed under Creative Commons GNU LGPL License.\n\n\tLicense: http://creativecommons.org/licenses/LGPL/2.1/\n\n\tAuthor:  Stefan Goessner/2005-2006\n\tWeb:     http://goessner.net/ \n*/\nvar Slideous = {\n   version: 1.0,\n   // == user customisable ===\n   clickables: { a: true, button: true, img: true, input: true, object: true, textarea: true, select: true, option: true },\n   incrementables: { blockquote: { filter: \"self, parent\" }, \n                     dd: { filter: \"self, parent\" },\n                     dt: { filter: \"self, parent\" },\n                     h2: { filter: \"self, parent\" },\n                     h3: { filter: \"self, parent\" },\n                     h4: { filter: \"self, parent\" },\n                     h5: { filter: \"self, parent\" },\n                     h6: { filter: \"self, parent\" },\n                     li: { filter: \"self, parent\" },\n                     p: { filter: \"self\" }, \n                     pre: { filter: \"self\" }, \n                     img: { filter: \"self, parent\" }, \n                     object: { filter: \"self, parent\" },\n                     table: { filter: \"self, parent\" },\n                     td: { filter: \"self, parent\" },\n                     th: { filter: \"self, parent\" },\n                     tr: { filter: \"parent, grandparent\" }\n                   },\n   autoincrementables: { ol: true, ul: true, dl: true },\n   autoincrement: false,\n   statusbar: true,\n   navbuttons: { incfontbutton:   function(){Slideous.changefontsize(+Slideous.fontdelta);},\n                 decfontbutton:   function(){Slideous.changefontsize(-Slideous.fontdelta);},\n                 contentbutton:   function(){Slideous.gotoslide(Slideous.tocidx(), true, true);},\n                 homebutton:      function(){Slideous.gotoslide(1, true, true);},\n                 prevslidebutton: function(){Slideous.previous(false);},\n                 previtembutton:  function(){Slideous.previous(true);},\n                 nextitembutton:  function(){Slideous.next(true);},\n                 nextslidebutton: function(){Slideous.next(false);},\n                 endbutton:       function(){Slideous.gotoslide(Slideous.count,true,true);} },\n   fontsize: 125,  // in percent, corresponding to body.font-size in css file\n   fontdelta: 5,   // increase/decrease fontsize by this value\n   mousesensitive: true,\n   tocidx: 0,\n   tocitems: { toc: \"<li><a href=\\\"#s{\\$slideidx}\\\">{\\$slidetitle}</a></li>\",\n               tocbox: \"<option value=\\\"#s{\\$slideidx}\\\" title=\\\"{\\$slidetitle}\\\">{\\$slidetitle}</option>\" },\n   keydown: function(evt) {\n      evt = evt || window.event;\n      var key = evt.keyCode || evt.which;\n      if (key && !evt.ctrlKey && !evt.altKey) {\n         switch (key) {\n            case 33: // page up  ... previous slide\n               Slideous.previous(false); evt.cancel = !Slideous.showall; break;\n            case 37: // left arrow ... previous item\n               Slideous.previous(true); evt.cancel = !Slideous.showall; break;\n            case 32: // space bar\n            case 39: // right arrow\n               Slideous.next(true); evt.cancel = !Slideous.showall; break;\n            case 13: // carriage return  ... next slide\n            case 34: // page down\n               Slideous.next(false); evt.cancel = !Slideous.showall; break;\n            case 35: // end  ... last slide (not recognised by opera)\n               Slideous.gotoslide(Slideous.count, true, true); evt.cancel = !Slideous.showall; break;\n            case 36: // home ... first slide (not recognised by opera)\n               Slideous.gotoslide(1, true, true); evt.cancel = !Slideous.showall; break;\n            case 65: // A ... show All\n            case 80: // P ... Print mode\n               Slideous.toggleshowall(!Slideous.showall); evt.cancel = true; break;\n            case 67: // C ... goto contents\n               Slideous.gotoslide(Slideous.tocidx, true, true); evt.cancel = true; break;\n            case 77: // M ... toggle mouse sensitivity\n               Slideous.mousenavigation(Slideous.mousesensitive = !Slideous.mousesensitive); evt.cancel = true; break;\n            case 83: // S ... toggle statusbar\n               Slideous.togglestatusbar(); evt.cancel = true; break;\n            case 61:  // + ... increase fontsize\n            case 107:\n               Slideous.changefontsize(+Slideous.fontdelta); evt.cancel = true; break;\n            case 109:  // - ... decrease fontsize\n               Slideous.changefontsize(-Slideous.fontdelta); evt.cancel = true; break;\n            default: break;\n         }\n         if (evt.cancel) evt.returnValue = false;\n      }\n      return !evt.cancel;\n   },\n\n   // == program logic ===\n   count: 0,                       // # of slides ..\n   curidx: 0,                      // current slide index ..\n   mousedownpos: null,             // last mouse down position ..\n   contentselected: false,         // indicates content selection ..\n   showall: true,\n   init: function() {\n      Slideous.curidx = 1;\n      Slideous.importproperties();\n      Slideous.registerslides();\n      document.body.innerHTML = Slideous.injectproperties(document.body.innerHTML);\n      Slideous.buildtocs();\n      Slideous.registeranchors();\n      Slideous.toggleshowall(false);\n      Slideous.updatestatus();\n      document.body.style.fontSize = Slideous.fontsize+\"%\";\n      document.getElementById(\"s1\").style.display = \"block\";\n      document.onkeydown = Slideous.keydown;\n      Slideous.mousenavigation(Slideous.mousesensitive);\n      Slideous.registerbuttons();\n      if (window.location.hash)\n         Slideous.gotoslide(window.location.hash.substr(2), true, true);\n   },\n   registerslides: function() {\n      var div = document.getElementsByTagName(\"div\");\n      Slideous.count = 0;\n      for (var i in div)\n         if (Slideous.hasclass(div[i], \"slide\"))\n            div[i].setAttribute(\"id\", \"s\"+(++Slideous.count));\n   },\n   registeranchors: function() {\n      var a = document.getElementsByTagName(\"a\"),\n          loc = (window.location.hostname+window.location.pathname).replace(/\\\\/g, \"/\");\n      for (var i in a) {\n         if (a[i].href && a[i].href.indexOf(loc) >= 0 && a[i].href.lastIndexOf(\"#\") >= 0) {\n            a[i].href = \"javascript:Slideous.gotoslide(\" + a[i].href.substr(a[i].href.lastIndexOf(\"#\")+2)+\",true,true)\";\n         }\n      }\n   },\n   registerbuttons: function() {\n      var button;\n      for (var b in Slideous.navbuttons)\n         if (button = document.getElementById(b))\n            button.onclick = Slideous.navbuttons[b];\n   },\n   importproperties: function() {  // from html meta section ..\n      var meta = document.getElementsByTagName(\"meta\"), elem;\n      for (var i in meta)\n         if (meta[i].attributes && meta[i].attributes[\"name\"] && meta[i].attributes[\"name\"].value in Slideous)\n            switch (typeof(Slideous[meta[i].attributes[\"name\"].value])) {\n               case \"number\": Slideous[meta[i].attributes[\"name\"].value] = parseInt(meta[i].attributes[\"content\"].value); break;\n               case \"boolean\": Slideous[meta[i].attributes[\"name\"].value] = meta[i].attributes[\"content\"].value == \"true\" ? true : false; break;\n               default: Slideous[meta[i].attributes[\"name\"].value] = meta[i].attributes[\"content\"].value; break;\n            }\n   },\n   injectproperties: function(str) {\n      var meta = document.getElementsByTagName(\"meta\"), elem;\n      for (var i in meta) {\n         if (meta[i].attributes && meta[i].attributes[\"name\"])\n            str = str.replace(new RegExp(\"{\\\\$\"+meta[i].attributes[\"name\"].value+\"}\",\"g\"), meta[i].attributes[\"content\"].value);\n      }\n      return str = str.replace(/{\\$generator}/g, \"Slideous\")\n                      .replace(/{\\$version}/g, Slideous.version)\n                      .replace(/{\\$title}/g, document.title)\n                      .replace(/{\\$slidecount}/g, Slideous.count);\n   },\n   buildtocs: function() {\n      var toc = document.getElementById(\"toc\"), list = \"\",\n          tocbox = document.getElementById(\"tocbox\");\n      if (toc) {\n         for (var i=0; i<Slideous.count; i++)\n            list += Slideous.tocitems.toc.replace(/{\\$slideidx}/g, i+1).replace(/{\\$slidetitle}/, document.getElementById(\"s\"+(i+1)).getElementsByTagName(\"h1\")[0].innerHTML);\n         toc.innerHTML = list;\n         while (toc && !Slideous.hasclass(toc, \"slide\")) toc = toc.parentNode;\n         if (toc) Slideous.tocidx = toc.getAttribute(\"id\").substr(1);\n      }\n      if (tocbox) {\n         tocbox.innerHTML = \"\";\n         for (var i=0; i<Slideous.count; i++)\n            tocbox.options[tocbox.length] = new Option((i+1)+\". \"+document.getElementById(\"s\"+(i+1)).getElementsByTagName(\"h1\")[0].innerHTML, \"#s\"+(i+1));\n         tocbox.onchange = function() { Slideous.gotoslide(this.selectedIndex+1, true, true); };\n      }\n   },\n   next: function(deep) {\n      if (!Slideous.showall) {\n         var slide = document.getElementById(\"s\"+Slideous.curidx),\n             item = Slideous.firstitem(slide, Slideous.isitemhidden);\n         if (deep) {  // next item\n            if (item)\n               Slideous.displayitem(item, true);\n            else\n               Slideous.gotoslide(Slideous.curidx+1, false, false);\n         }\n         else if (item)  // complete slide ..\n            while (item = Slideous.firstitem(slide, Slideous.isitemhidden))\n               Slideous.displayitem(item, true);\n         else           // next slide\n            Slideous.gotoslide(Slideous.curidx+1, true, false);\n         Slideous.updatestatus();\n      }\n   },\n   previous: function(deep) {\n      if (!Slideous.showall) {\n         var slide = document.getElementById(\"s\"+Slideous.curidx);\n         if (deep) {\n            var item = Slideous.lastitem(slide, Slideous.isitemvisible);\n            if (item)\n               Slideous.displayitem(item, false);\n            else\n               Slideous.gotoslide(Slideous.curidx-1, true, false);\n         }\n         else\n            Slideous.gotoslide(Slideous.curidx-1, true, false);\n         Slideous.updatestatus();\n      }\n   },\n   gotoslide: function(i, showitems, updatestatus) {\n      if (!Slideous.showall && i > 0 && i <= Slideous.count && i != Slideous.curidx) {\n         document.getElementById(\"s\"+Slideous.curidx).style.display = \"none\";\n         var slide = document.getElementById(\"s\"+(Slideous.curidx=i)), item;\n         while (item = Slideous.firstitem(slide, showitems ? Slideous.isitemhidden : Slideous.isitemvisible))\n            Slideous.displayitem(item, showitems);\n         slide.style.display = \"block\";\n         if (updatestatus)\n            Slideous.updatestatus();\n      }\n   },\n   firstitem: function(root, filter) {\n      var found = filter(root);\n      for (var node=root.firstChild; node!=null && !found; node = node.nextSibling)\n         found = Slideous.firstitem(node, filter);\n      return found;\n   },\n   lastitem: function(root, filter) {\n      var found = null;\n      for (var node=root.lastChild; node!=null && !found; node = node.previousSibling)\n         found = Slideous.lastitem(node, filter);\n      return found || filter(root);\n   },\n   isitem: function(node, visible) {\n      var nodename;\n      return node && node.nodeType == 1   // elements only ..\n          && (nodename=node.nodeName.toLowerCase()) in Slideous.incrementables\n          && (   Slideous.incrementables[nodename].filter.match(\"\\\\bself\\\\b\") && (Slideous.hasclass(node, \"incremental\") || (Slideous.autoincrement && nodename in Slideous.autoincrementables))\n              || Slideous.incrementables[nodename].filter.match(\"\\\\bparent\\\\b\") && (Slideous.hasclass(node.parentNode, \"incremental\") || (Slideous.autoincrement && node.parentNode.nodeName.toLowerCase() in Slideous.autoincrementables))\n              || Slideous.incrementables[nodename].filter.match(\"\\\\bgrandparent\\\\b\") && (Slideous.hasclass(node.parentNode.parentNode, \"incremental\") || (Slideous.autoincrement && node.parentNode.parentNode.nodeName.toLowerCase() in Slideous.autoincrementables))\n             )\n          && (visible ? (node.style.visibility != \"hidden\")\n                      : (node.style.visibility == \"hidden\"))\n          ? node : null;\n   },\n   isitemvisible: function(node) { return Slideous.isitem(node, true); },\n   isitemhidden: function(node) { return Slideous.isitem(node, false); },\n   displayitem: function(item, show) {\n      if (item) item.style.visibility = (show ? \"visible\" : \"hidden\");\n   },\n   updatestatus: function() {\n      if (Slideous.statusbar) {\n         var eos = document.getElementById(\"eos\"), \n             idx = document.getElementById(\"slideidx\"),\n             tocbox = document.getElementById(\"tocbox\");\n         if (eos) \n            eos.style.visibility = Slideous.firstitem(document.getElementById(\"s\"+Slideous.curidx), Slideous.isitemhidden) != null\n                                 ? \"visible\" : \"hidden\";\n         if (idx) \n            idx.innerHTML = Slideous.curidx;\n         if (tocbox)\n            tocbox.selectedIndex = Slideous.curidx-1;\n      }\n   },\n   changefontsize: function(delta) {\n      document.body.style.fontSize = (Slideous.fontsize+=delta)+\"%\";\n   },\n   togglestatusbar: function() {\n      document.getElementById(\"statusbar\").style.display = (Slideous.statusbar = !Slideous.statusbar) ? \"block\" : \"none\";\n   },\n   toggleshowall: function(showall) {\n      var slide, item;\n      for (var i=0; i<Slideous.count; i++) {\n         slide = document.getElementById(\"s\"+(i+1));\n         slide.style.display = showall ? \"block\" : \"none\";\n         while (item = Slideous.firstitem(slide, showall ? Slideous.isitemhidden : Slideous.isitemvisible)) \n            Slideous.displayitem(item, showall);\n         var divs = slide.getElementsByTagName(\"div\");\n         for (var j in divs)\n            if (Slideous.hasclass(divs[j], \"handout\"))\n               divs[j].style.display = showall ? \"block\" : \"none\";\n      }\n      if (!showall)\n         document.getElementById(\"s\"+Slideous.curidx).style.display = \"block\";\n      if (Slideous.statusbar) \n         document.getElementById(\"statusbar\").style.display = showall ? \"none\" : \"block\";\n      Slideous.showall = showall;\n   },\n   hasclass: function(elem, classname) {\n      var classattr = null;\n      return (classattr=(elem.attributes && elem.attributes[\"class\"])) \n          && classattr.nodeValue.match(\"\\\\b\"+classname+\"\\\\b\");\n   },\n   selectedcontent: function() {\n      return window.getSelection ? window.getSelection().toString() \n                                 : document.getSelection ? document.getSelection() \n                                                         : document.selection ? document.selection.createRange().text\n                                                                              : \"\";\n   },\n   mousenavigation: function(on) {\n      if (on) {\n         document.onmousedown = Slideous.mousedown;\n         document.onmouseup = Slideous.mouseup;\n      }\n      else\n         document.onmousedown = document.onmouseup = null;\n   },\n   mousepos: function(e) {\n      return e.pageX ? {x: e.pageX, y: e.pageY} \n                     : {x: e.x+document.body.scrollLeft, y: e.y+document.body.scrollTop};\n   },\n   mousedown: function(evt) {\n      evt = evt||window.event;\n      Slideous.mousedownpos = Slideous.mousepos(evt);\n      Slideous.contentselected = !!Slideous.selectedcontent() || ((evt.target || evt.srcElement).nodeName.toLowerCase() in Slideous.clickables);\n      return true;\n   },\n   mouseup: function(evt) {\n      evt = evt||window.event;\n      var pos = Slideous.mousepos(evt);\n      if (pos.x == Slideous.mousedownpos.x && pos.y == Slideous.mousedownpos.y && !Slideous.contentselected) {\n         Slideous.next(true);\n         return evt.returnValue = !(evt.cancel = true);\n      }\n      return false;\n   }\n};\nwindow.onload = Slideous.init;\n"),("slidy/graphics/fold-dim.gif","GIF87a\t\NUL\t\NUL\161\ETX\NUL\195\195\255\204\204\204\235\235\255\255\255\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\DC1\140\143\162+\198\235^\v\STXX;e\150\241\161\US\DC4\NUL;"),("slidy/graphics/fold.gif","GIF87a\t\NUL\t\NUL\161\ETX\NUL\NUL\NUL\NUL\NUL\NUL\255\195\195\255\255\255\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\DC1\132\143\162+\198\235^\ETX\"X;e\150\241\161\SI\DC4\NUL;"),("slidy/graphics/nofold-dim.gif","GIF87a\t\NUL\t\NUL\128\STX\NUL\204\204\204\235\235\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\SI\132\143\161\ESC\198\235^\ETXr\214\248\&0C\FS\DC4\NUL;"),("slidy/graphics/unfold-dim.gif","GIF87a\t\NUL\t\NUL\161\ETX\NUL\195\195\255\204\204\204\235\235\255\255\255\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\DC4\140\143\162+\182\176\156\130\202\129{[xq\207\206t\bR\NUL\NUL;"),("slidy/graphics/unfold.gif","GIF87a\t\NUL\t\NUL\161\ETX\NUL\NUL\NUL\NUL\NUL\NUL\255\195\195\255\255\255\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\DC4\132\143\162+\182\177\156\130\202\133{\ESCxq\207\206t\bR\NUL\NUL;"),("slidy/scripts/slidy.js.gz","\US\139\b\b%@\186N\NUL\ETXslidy.js\NUL\237}\239\151\FS\197\145\224\247\249+j\202\207\163n\166\212\211\&3\STX!M\171\164'\tn\225\EM\ETX\SI\t{}B\215\175\166;\167\187\&4\213U\189U\213\&3\154_\239\129d\ESC\179\139\151{\187\246\237\222\218\187\134\247\216\179\217\&3`\140\ENQ\b\EOT|\CAN\243u4\250\ESCf\ENQ\187\159\238_\184\136\200\204\170\204\170\172\158\RS!\176}gcMgeFFfDFFFfFfN\173z\177\181v\172\211N\STX\191\187\238n\134I{\CAN%\139\181t}\200\162ek\205\SI\187\209Zc\232\245\216\247\158Z^NX:\237\RS\EM\133]\182\236\135\172{\164\238\172\244\211A\176X\171\133\222\170\223\243\210(n\140\DC2\SYN\159\237\177\&0\173\&7 3\187\250\212r\205\254\214c\ETB\191\253\132]?\237\&6\207\164\241\136-.{A\194\234N4d\177w`\230\167\DLE\170\156\217\USz\221\ETX\243\250O{]S\214~\DC4\178\t2#X9\187\ETBv\227\200?\184\240\179\FS\206P>\203\CAN\220\141:\163\SOHdkxA0\237\218\EMk\237\153\153\233\180\239'\r\226\DC1f9\190X\227\&1\188\137ff\f\133\231e\DEL\251\194\227\143Z\199\237\250\180{t\RSs?|\248\220\SI\231\185O\FS>\247\137<\247\201\195\231>)s\a^\146\182So\184\216t\134\&1[\NAK\193$\245\226\180}5\v\173C\168\203\130\212\163\&8\RS\194\&8?i_%\SOH\157\187:\b\230\SUB)K\210Z\198\241N\DC4\166\240{\DC1\SUB\162\238\160\248\179v8\SUB,\177\CAN\209*\159m\SYN0\204\176\CAN\142\130\128\167$\139\151.;a\148\242\192\146\215Y\233\197\DC1\180\GS}\166Q\DC4,y1\aO\253\&4`<H\164$\253h-\228\223\f\250\EM\135\137:<\DLE\141\210\NUL\SUB_\DC4\EOT\197vR\214m\167\236j\218\SOX\b\213Z\245\217Z\ESC$\ENQ\130k^\b\140\DC1E\161p9\131\b\184\217\238\EOT~g\165\205Bo)`]\158\144t\226(\b\218}\168&r\199O0\173\205I$p.\151P\193\176\183h\179\208v\250,\CAN\182\189\176\211\143\EOT\EM\DC4\129Z`\209\238\167\233pqnnmm\173\177v\172\DC1\197\189\185\139^\176\146\204]\132\186$s\ETBP\141,\204!<\253i \251\ENQB$d\209~\146\&7>\ETX\221\146\246-\170\180E\181p\172d\232u\152\ENQ\EOT9\214\249Q\156D\177\245\EOT[N\231\158\241{\253\212\177\236Y\ESCb\158\238Y\207\SO-\232\130\CANz$lX\207B\254\v\DC4q\206J#\171\211\a*\152\181\f\141k%\254\ACKk\216\SO\254\180I\190\176e\241\195\235^\EM%)5*\143\129\150`k\214\217\&8\246\214k\246|s\152\218\142=\191\192\DEL\RS\228?\199\249\207\t\250Y\224 \v\FSd\129\131,p\144\ENQ\SOr\140\131\FSC\DLE!\199k~7\237C\137\244\209gH\SYN|EKW\160\161It@\191\182G\195\197\229Q\216I\253(\172\213\&7Q=\251\161\159\186J\\\166\174\ESC\152R\171\183\182[\254rAc{\221\238\163\171@\223\DC3~\STXB\206bM\183\212\167*\160jv\DLE\129\194t\DLE\175\195\149U\139\193\223\f>M\189N\159\178\212\236(\204\129\161\SON\US\229It\SI\165\182P\181\172\203-E\221uPl:\SOH\190\ETB@\vt\235S\SUBX#I\215\ETX\214X\245\DC3\DEL\201\SI\252t\221\181\161\128.H'\175\DC1\176\234\162?`\208ej9:\165\n\206CM\172\148\207\184\220\171\236\227\180\196\f\ESC\254\220z\173\233\128\162i\149c\231)?TP\205|P\GS)\FS0\187E\n\SIs\183\131\168\131\DC4z\FS\ETXO\NUL\198\203\206+\163\214bo\216\246\aC\232\n\144\137\DC3!\211:\208\DELAF*bI\DC1\NAK#\NAK\165$\147\132\160\185:\r=\150>\202\NAK\\rn\253\162\215{\210\ESC0h\\\130\181E\206\161\151v\250B!d\232T\GS\233R\fHW\183\173F\215\144v\164\187\209\143\217r\198\228\b,\137N\204X\184\&4Z^f\177\US\246\\TT\STX\173\222AU\204y\138\172C\n\"\NUL\186qY\ENQ\235\142b\141\215$\DC4\254\NUL\148W\145\229\212<B\233\198\&9J\208\216\&9\143\232\147\167\172\176\245\165\200\139\187\SOHK\DC2\183\198\&1\128\DC1\178\181%\130h-\136\SIa\"\212\169c\SYN\243\214\167\148.\FS\179A\180\138z\216K\DC2E\146EM\GS)\244\245).$\138\214w\155\173m\RS+\135\&9W\239i\141\148\183\166\235\218\231\158z\228{\246\EM\234\209\&4&\228\NAK\227\"\213\128\241\165\151\246O7\161n\168r(\214U\NUL.\149\154\252\178\142B\196\DC2\ACK\RS\v\186,\239\EM8j\129\SO\134V\199\234yA-\235)\130\237\249\232\200\139\197\209\222\135\193A\205\212\246S6\168\225\128$E\DLE\202\128a\180\rV@:Jj\156\178\237)R\DLE\155E\180\152\175\&5Q\213$\207\141\133\bS\ACK\a\229R\213\nE\214\235\178\133\DLE\135\236\v\170\SO\224\205\174\242\185y\217\177\151\253\&8I\143R\EOTT\"\ETB\nD\202\251W\141\254f\232\193\130\224\\Kih\143\150\219\194\184I\212\194\132\178m\SI\227h0\196.\EOT\r8m\144\206,C \135\ENQM\172\FS\155\134k\219!8nu,\141\210\&4\n\185\&5\161\148XB\224\216P\DC4\168\128P\228\134\175\&6~\RS\152\a\196!I\148L\244m\202\197U\140csE.r\240\143\238\&8xn$\tx\254\&1>\195H\f\DEL\EOT\193?\204\EMr:\210h\212\233\147\197*\178\229\DC1\DC3dD=\161\230\195\239\t\178\177\176\171\230\130O)\215\160w3;\DLE-K)+\130[\181\\I\192\252\161n\RSq\197\248\234\204\&7\155\DC2-\ni\174h!\215\227 \138\241*t,\163\r\ETXU\STX\131U\233\FS\219\206\STX\"3\SUB\t|\156\216vJr^\180\153\178\RS\SOH=\DC4\140Mi\195\215\236\174\191j\151;`\212\SOH\t\192\194\160\230\GS+\235\255\136\169\207\188.\141P\DC3c\DC39\144\255\157\163\226\ETX\160D\b\200\129V\194\t1G)\204\ETX\CANs/\"Q\SYN\216p\231\ENQQ\136:\234\&4\188\225\DLEZ\237|\223\SI\186\DC27\175\154\212\145\\\181-Gq\141\204E\CAN\CAN\252Se\229\222\154\157\245\133z\231c\FS\US\GS\189\196\160\133|\208B\EOT$\152\NUL\202=\US\DC29\DC3.\130\ACK|2\STXUT\243g\231\235\179v\195\&2T\ETB\242q\EOT\158\153\DEL0\175oy\168\GS\207\166i\236\131\SYN\SOH6\160\169\NUL\134\243\&7j\246\172@]\183\185(b\133\DC4\245\196\171\237\137\154JuI\213\197Q\175\170\190\234\152\133\182\142_\199:h\181\134h\140\139BRh\174:,w\184\146\163T\161\203\n\233R\167\SOHH\214@2\128d\200p}J\134h4q\189\DC2\247<\"\219w]\CANT1\141\198\ENQ\128\195HC\ETX\131\EM\203\155w)6s{)64\209R\140\195HVS\SI\199\DC4,\v\184\151\184\186\GS/l,\168\132h\ENQ\ns\208Z]d\140B\SUB\DC2FC\133-\218 1\SUB\182\&8\FSgnV\EOT\171o\130\249Tc\174\176\DC2\EMN3\136\ETX\202\bX\156\DC4\159B\222\DC4&\NUL\229A\144\ESC\ACK\n\154\&4\SUB\226\&0\b3ZO\148\141\229\176F\al\\\SYNL\187\217\\\169>%#\185\234!\168\152\165\163\&8\252\142\ETB\140X\SOHTIq\201\218j\241\CAN\139\DELl\183t\ETX\205\SI\DC3\SYN\167\231\CANt]FJHO&\246R+\213%\RS\NUL\194YI\194\r\f\212V\170\230\227@\202\252*\239\221\154\140\230f% \227\n{\156B\157\192ZUQJ\253\171\165\183\&2\161\170\NAK\218\DC4\ACK\151\153\EM\165m\212i\ENQ\182\238\193\227\142\152{\142\161\129\nV\t\201\245G\NAK\NAKPG\202\165\205W\249j\156*p\249JI\222\SI\156\&4\234\225\208:\150\169:\SI\148\ACK\173\213'\150h>7\215\237C\147\t\136\&5\234\200\181\RS\165\191\161\SOH\b\SUBU\239r\188\253\188\CAN&\134J\DC3\194W\155G\138\206\194?ff\248o#\EOT\213\138Ki\174+\181\208(\246]\145\216++x\194\SOH \218\132\163 \ENQ\201%\179X\\n\153\166\252\210&\174\DLE\165<\186<M\197z\180\238\185\n\197\&9\134\170\174\&4\179_O\152h\ACK\162gQ\167!y\138y.b\170_}\252l\"\141\215\167H&\SO+\240S\GS\\ \NUL\193\152\218\220\222\222\158Tz\139Z\160^\234\222\181\131\148\182\208\138\138\&5I\186\SUB\147\184\204\203\193X\DC1{\SUBVH\232 \145\230@<j\n\163(\168w\a\172\166:\"MA6\r\STX'$\231A\252\169;Z8BP\236Z\223\239\244\&9\180\DC2\193\251\172\212\230bH\153\ACK\160z1\146g\234\164q\240-\182\190\181\197?\189 \253\150\SOH\SYN\vq\231\143\169=\SI\199\231?\247\187\255\143\250\221!\186\GS\152Q\203|Rg\234r\149\157\138\ESCd\219SR\224\RSl\130\250\151\171!r\221\a\195Y\r'Fu\236\132@\149[\199\155\218\247\228(\213\174\129J@N\177\213\145OA\142[Jn\190p\ETX_-\237\203\173\225\214\192#`H\215\177?\161)R\DC36\142\&7lwY\224\173\235\217\143j\168\249P)\NULO\185\&8\181\133\198\154\226\&6\DC2T\205eb^\142K?b\ACK\205w\183\\\138\167\189\215\191T\DC3\214\149\132\239\241\EOT\177\247\229*\US\235\184<\232d\v\ENQ:\241\227J\207p\229\165\USU\171\213\210\nQ\170\162B\173\203\178a\154Q.\154\&3\205\196\215\163zC\DLE\176F\214U\RS\183\174\145\202g\152KI\ESC`\191\237\165\253\ACK\132k\221\171\245<~]\137_\167.\192\219\227\161&\136p\141g=\r\182\228\214\SYN\a\199\&0\152a\216)Eb\179\241\208\ETX<\141Gw\175\158\210f\RS\164\fx\175\&6\218f\217z\166\n\195\151*-Y\202\250\233\ENQ^\198Um\137\184\202\154D\r\176\189\237,\209\244\SOHFF?\212\182*\242\213\CANTs\250\214\SOHW\DLE\217\"\141\ETB\192\&4\EOT\230\135\132\201\"L45\240\150S\SYN\151\&1g\235\134r?2[\243\173ZR*,\nmO\137\DC2\169\NUL\165@\n\EM6\145\b\137Jh-\219L\144\159|Y \175\176j\136cU\SYN\rs\217{\173\191\150\153\214\225\149%\231\201X\174\163\152\135\150t\n\EMK\244k\147\175\194\146\172Zsu\225z\178\NAKx(\187Hy\169\244|\198t_\139\190\167\197\DEL1\225\211\&6u\140\STX\202=\SO\132\218!pe\251\203\188\243\245\248\183\255\STX\170\165/\166\241\156\218:\SUB\143\186\228_.\172^\245\128V\SYN\175\251\131\158\237\216a\132\204\221v\228\242\176\&6\249\162i<y\198\DC4\ETB/=\244\136p\r^\DC2b\240\171y\186\203\132\217\189\ACK[5[\229\202\139\160\\\188\FSZ&#\211\201\188\231C\160\151\203\171\160d\200\137\CANi\195\NUL\203\229\218\228\DC4\225%HP\138\177\215Ii\185&_\187\196\230\161\&56\ENQ\146\214\240fmZ\244\195b\197\194_\v!@\242\135\129\215a\181\185\231f\230z\142=\227\r\134-\224l!\237\DC4\165\ENQ\169!\233\&4%\245(I\216\a\b\SOH,Ri\201\153\132\179Y.F\CAN\218\218\194\191\217\DC4w\SUB\167\184\DC2\vr\SI\224\&2\NUL\177\225\246\216\188\173\228\DC2\145\253y;\207\136\DC3\ACK\228l\a\215w\\\STX\205\215{Z0W\bX\141\210@z1\213\192z\158,\139\215Qs\180\244\151\198\166\v\208\223 On\USQ\205\183\GS\181\133\170\232\151\152m[#\149O\247\143i\229R\STX\173\DEL\EM@\231%)Ej\201\RS\193\&5P(\129S\206\139\221\164H\252\&3[\SYN'\STXi\229\248\140T\"d\246\ENQ\216E\131w\162\225zL\254\ETB\133\174\135R\225\136\SOH\150\170\&5`\169w\144\202@\152\146\206\192H}\229\157\132\GS\163Qk\232S3L\STX\f\162\224\n \145\202\167p!\ETB\169\140\144\\\178d\237\139-]\220C\USG\186\DC3\145\179\223\159\STX\a\208\211\231(\146u4w\SUB\200\153\&1\255@\137\GS\243\146\ETB\210Q\224\255\DC1FHrr\226\143\&7\225\DELe\ACK\by\DLE\218\177\189\180\222\SO\163\176\189\DC43o\ENQ\250N\155\188\176r\158$i\\\223\212\233\129(\141\FS\248\134*\186\243\199\155\194c&s\170(\185\&2\193\CAN~\224\b\FS\248\229\SOH\CAN\243\EM\246\177\248*%\165B\r\242\rmeW\139\175@\SO\189\CANJ\193\253\US\199\SYN\149\179\193\192G\222\248!\186\158p0\185)\193\253e8\156\216\240\201\246?\162\160\139\150\184\192\140\179\EOT\145Y\166\bg\SYN\137\177\180\147\162\204\242y\tT\\k;\207\178\DC4\140\226\241\&9x\ESCr\130Mk\172\&0Y\160a\DC4\137\DC4\NUL\137\EM\192\177\155v\190\211[d\156c\179\171C/\236\DC2\RS\190\211\141dJ\226\249,'\227K\SYN\173\EM\196\202>\171\192\EMF\b\141\214\US\175\154\&0\a5\198e\220\DC4['`F\201(\197\152\129\150\231\227\DC4\134\182\182\240\175q\156\230H\168w\227\128Ap\165\225V\f:\134\129K,N\128\193\182\DC4D\157\NAK\SO\169\175\194\GS0\DLE\t*\136\ACKC\253)0e\176\243\&1\SOH\157\r0\US\235\150\&7\155yz\150\202W\SYN2\SUB\207\DC4\b]\228\ve\247F\173q\251$\164.\149o'MU\241\129j\"\ESCZr\131\211u\NUL?\138\196\SYN\153a\224\215\215\205\SI\173\n\247\198\DC2\177^\165)\157\t7k\200\NUL\DLE\187\169\153\156\US\176\131\195i.l\226\200\186\168\155\154\STXOI\143*\186\167\188t-\ETB\191\149\154\201H\180\CAN\243\149\242\ACK\223\DC4.B\242X\215]\224\147\133<\177XUm\255u3\219\150\202\180\135\SYN)\242\168\203\&6ee\150\167\NAKT\157\186\192j\218\139\208\&7\138M{\193%eP\246\202*\SO\152<v\156\243\t\135(hw\DC2DP\237:r\177\&7;\156\&7\227\ESC\230\216T\a\129\225<D\207W\DC4\128\203\210v\149\155#\228\202\157]\236d\205\US2\v\157\&5\209O\ESC\251\v\254b\143\224SO\225\216\171g\186\128\198\136c\145\v8\250gGkV\EOTSU#*{\214\206\177\&9\220\169\220\194\nZK,\128\140`R\NULl\204\172.\216T~\144\216\ACK\231)N\DEL\230\226\166\246?}o\158\247x\193!\202\244G\225`P/x\CANh\r)\170\201\149\153&\EM.\255i){\237\149N\207&\202\183\157\135\154|'^\241l.\202r'\SUB\161'\152\131\171\197\194\215Vx\178\RS\228[%\224*dP\164*b\200\151}\182\182\166\133\247\218qa/\146\RS\EMW\SUB\SOH\DC4\138!'o(f9\136\188t\145\227h\209\196\242\168\ETB\248\189PD\145\205N\EOT\154\v\NUL\179\SUBMs\SOHS\237\ENQ&\214\209fm+\156\ESC\216\162Fj3\n\f\ENQ\214\168\DLE\148\135\247\245\220\&7\218L0\166W\208\171R\136`\178\&1X\148\140\163\&0\ETXR\187\241\ETX\150\205\139R\171)\SOH\165\159]0\172v\DC2\163\179$&?1n\181\202\227)F@\238\200\230\232|\206\243!\157u\145\177\178U0\245\140\228\151\238\144\ETB\f\229\no\190E\231b\152\200\234y\160n\171\\\209l\203\132\DC2\179p\158\200\149\254j\190H\b\179\SI\221\NAKo\213K:\177\SI\227\202$\219\t\213\248\140,\180S\233\176\216\201\FS\SYN\NAK\f\149\188\148\DLEF~\202\196\186\228\222\194\225\185\183 \185'\214F\148\165\179,\142{!e\159r;\FSDx\172p\227O\131\DC4\SI\173\233)\235/<)':K)W\DC1!\NAK\223m\147n+L\207*\187:\226.L\183\&2\132t8\ENQ\244\160\143:\216\205<y\207\216\203\254U0\142\ETBmo)\137\STX(\174\164f)\231\198\227X\SOH\215^h6mS:\157fr\237\147'\ESC'\191i\EOT\224'\156\\{\190\177\192\ACKF\b\CAN%]\219\ESC\165\145\&1u)\STX#p\224\218\230\226I\179U\164\241V\175H\196\254~\SYN\213\154k\147Z3\193\224\162\210\ENQ\DLEV\215>\222\&4\DC3\215\137\STX\232\230v\f\140\212\147\151\162\184\203\226\239\DC2s\154z\146\"7r\204\&2\210\157\GS\221\SOH\252\189\165\218\194\131MG\252\171\219|\169\190BSfB\170\234\222\153p)\EM\182\248\223\a\248\143]-P\201PQ\243\201\240OH5W\146\244\229Ut%\234\175DUs\ENQM\222\224O-\159\191\143\218\&9K<\180\154\174d\192a\213\245\&8N~\213j\219\164\155)A\235\209K\SOHt?[M\CAN\192\EOT\208\SI\159\224\250\166\241PI\151\153T\251XS\144L\175\204\DC2,\232\233\\+\183t\b\161o\185\186\212\147\n\154VOT\148\172\158 \244k\179\DLE\157+\207\STX\158\\o\138\DC1OOW5b\161\160\177\n\237\176\SYN\241\CANY\DC4\134qad5y\154\US\232\249\n\244R@Y\230\152\153a\141$\238\136\NAK\235leD\141\FS\235\CAN{l\204b\202\129SG\ETXV\FSI\128\200'\162\&5\SYN\159\247\DC2V\171O\187\168i\148u\138\242\233,r\141,\US\224\148\194\233\n&\SUB\143\190\137}\229\234\EM\166\202v\156\f\154\206\180\150\182\EOT\FSy^\134\214\205p\ACK\239@\aQw\157\SI\220\&1\192\141Uj(\153A\174H\209\&6\STX\223B\144I\250.\130\220\215\150\169b\ETBA\158\213\201[hZ?6\171l\GS\208\234\158\204\160.\240\SOH\NAKEe\248\232\216\131C\DLE\233Hio\NAK'\221\180Y\195\217\140p\217f:|\152O\b\GS\188\170\&9\241\174u9\242\145\199\191c\136%\170\234S\180\149\212\162C-\165UO\226V\245\130\STX\223\212-\210\164n\245\210\134\238\246\182\163\159\137.J\NAK\143u\243S\253|l\SOH\196\147\157\DEL\230\237\163oBaf]z\168\133\&1\150|S|\211\&6\138\218\166\144CxV\240\US\129\236\&2\226\&0\202\130v\164\STX\201/\217)\143jg{L|\155\207s\151\198\230\131s/\168Nj&\210r\221N\244!\SO\174\244\187~2D7?\155\214\204mh\179)\197\183\196\229?\173\188\GS\249u\SUB\197\173X\140\252ci\197\190\aC\197(%:\169b\151\232\239\228\173(Y \168\194\191\n\ETX\212kD\nlP\146\254X\152Qhw\165\134\151\148\240\225y\163\146\170\132\209\&7P\189\132\160\212\223Y\176\156\239u\240\193\ETX\154+`\202>\170\240\252\151\254\207\&8)iCu\240$\177 \DC1/)p\221r\170~\141\129\&0:\161!H\136\241l$e)\251\183\231Xi\159>\207\&0\205s\168\192\154C~\158\n\186\162\by\185EQe\SI\252\DC2\164\171\DC4\217\154\FSs\217C\157G\235^\245\219b\213a\156\233\194}\178y\195\ACK#~\RS\CAN0\EM\238\160\DC1\251_\220e\151\183\241DR]\246\182\DLE\185u\177\206\SIq\DC4\239<\169O\137\f\232eQ\190\DLEEl\EOT\ba\210.EQ\243\233\ETB\163\232\153\234\153s\167\202\235\210\137e\DEL\160\157\150\160\237:\140\171U\GS\173\144\&6\155j9c\134Y\229\b\130\193\136\182g\167jf\132\228s7g\207\SYNR3V\130\174\210\SOk\ETBI\NUL\NAK\209w\243\190\STX_\133\211\155JY\167\209\241\154\&2\184\&6X\DC2\"\244\r[;\252\214\139\210H\bb3\223\&4DXya\197\194\204\f~\130\225K\231\133\199\208\ENQ\243g\209o\161\191\130]\151\176\199\161\177\180\218\&6\146\209R\146\198\181\133:\183&\253\228I\239I:\195\\Q)H\194\187c\232\CAN\131\178\192*/%\169:\214H\151d\152\SO\132H\189Q8\ESC\149!<\173\185\156g\209G\241X\SOH\nY&3f\225\226\254{\ACK\EOT\130\&3\ETX?L\156\132u\146\SYN\254\225.\243\203A\EOT\189\203\144gn\158v|0\143\n\137\&9\231\142\&7\235\FS\ENQ\254\249\230\241f\139\151_C\224\&3\248g\214\RS\216\139\&6\136#\STX\204\218\137e+.{\b\139\206\171\138\186)\210\131'\156\DC4\223\250j]\221\202\228r\STX\SOH\EM#\173x\DLE\NAK\v\133\DEL\179e\193\246\EM\b\179\250y|kK?\218\166\182\219p\148\244\219\136\132$Y\RS\200\154v\245\154Oi\159Xp\190\203\138\151\189\212\167\&8Y\DC3Q%7\194ff4\129\159v\241o)\DC2\SUBfJ\139\"\176|F\194\175\SIPe\130|w\173\131\171\&2^\232\183\GS\181%\243\&6\199cb|\174\136l\200\253\158\191\193g}>\158\196($}s\225\152\146($\vy\152\aeoo:>\SYN\r\DC3\228\229\216C\225.\184jS#m\SUB\248q8A,5'\151#\160Y\138C\177H\161\234PA\214\165\b\207#\DC3\249@VQ#h%\211t\249\220\250\227]<\223\ACKct\188\254_br2\148W\224}\151#\148\185\176\161\241\NULZXSW%\143\156B\169;}j\142~\142\240\EMjc-\246q\ENQR\164\225\220\243\244)\158\193\194\v\201\220\231h\ESCq.\199\243\156}:\187T2\166S\145\185o\155\222\STX\181#8R\DC1+f\237#\245\214\169\&9\142\SOH\171@\229\160Up\186\207\130 \178\ACK\163\193\169\&9\250\SYN\245\DC3\213\235\EOT\DC1\174\139d\222\175\198\241w\DC2\241\DC2b\211T\236\DC3w\DC4\178\164\227\rYM\DC1&\188\176\162\174\174#U5\ENQ\199Q\215\188h\248\RS5s\231\158\171\213\158\235\214g\159\171\207a\186\&8\245\&7\160\179~1\171\155\198\&1\SOH\195k\129\190\225\243\142\136\202\238\134\224\&6\232hpZ\153\134\137\212\250\DC4\"\155G\128\163G!\136\DC4cL3s\150\a\251\DC1\NAK4T\237\DC2\175\218\229?\182\170\137\246\217\158\DC2\158Mx\192Ju\254\&1\175\152\137E\v\225\225U\246~\204g\238|Qc{2\DEL\168\205\188>\219\202\SUB\148nNe\150\169<nq\217u\v\SOU\190F\154\163\US\"S\207td\199d\234\133\131\164\202\DC1\167lz\129UU\243\168\131\149\&6}\128QO\181a\242c:\211\228\128\170Y1\202\EM\158\194A\212\252\&4O\229\249\216\234\243\182\242,K\182\b1\198\164\226\&3\156\175\231\&0\179\SUB}t\254\222\SI1O~R\234\NULV\UStf\170\146\195\165\203Q\f\183\140U\RS\173\214\133M\RS\183R\GS#\151a0\236g\a\223\232j'\176T\243\227\146\247,\197t\141\166k\226\ni\237I\196\187b\162\131\ETB\233\FS\192m`6\ETX\254\242#\224\213b\141\GSm\186\162*\n^\222\155\170\166\v\167\198T\243\SI&\243\179_B\230\199\US\220?\236\249|\131\184J]1ml\NAK\210\185\248=3\163\138\156\185\201\&18\174\ETX\220\247\139\STX\238\181G\145Ss\177KM:\SUB\152\219l\218\253z\180j\243\143X\148\190\202\139 \138\235i\226\138\232{h\194j\134h\141[T9\DEL\SUB\SUB'/\253Ok\152\173PL\218\210\207\215U\173\&1\130\\\SUB\255Kb\169gP\143\134\225\237\r\217izt\229\156\202\188?U\167\NUL\SOy\166\188\249\191H\238\STX8?\203W\213\148S\168\163\129\178\155\247\149\138\\\190@\254\aWB\247G\205|E\139\&5\ACK6\SUB\ETBr\242XE\\(\171\184$a=\236(;^\EMZ\190\&4\192\239_\189\CAN\213\154N\211t\200\135\160\181K\236\242\134\&6\151\151o;\149\243\SYN\234RB\160\239\192\209\228~\169w\RS\ENQ\187%'o\141\206(\198\137\224\ENQ\DC4\250\250\148Hv\203i\151\148\141\&3\130\177/g\235\218Y\147u\217\178\&7\n\210\239\128\166\151Z\RS\243*\ESC\"\n\EOT.,\156\143\ACK\195Q\202\186T\132\160\144\247{\172 \229U*E\223\152\237\233\CAN\175\EMJ\215\233\&8AM\169\217Q\234\182\182\216\231\216\148\&9\237\&4\246\194\132Oy\237l\255G\166\SYN\146\161ds\202\214\150\136\207WZ@/\240\ETB>\fi\209\208\235@\223\161du\204;\143\173\153]s\197\ESC\151\206qHY2\220\135Z\222\153l\249\179\179\218\246\165[\EOTD\143\DLE\209\228\149%\230\224\249~)\173\137\224y\218\162\148\DC3\SUBG\160\147\199*5\241\206s(r\154\159\180\204e\217\b(\219\133\175h`\191\208\239\130\ETB\157\165b\187\249>rm\178\202:\ACKF\NAK\186\160\206\&1\225\&5D\142J\184)\156\178\&8t\192$\134\254\208\DC2\159\238\220sk\179s\189\SYN\143uEN\177L%`\234b]\134\240\DLE\177\FSZ'\DC1Z\147G\211\234L~\ESC{\230\253S\NULP\183\197s\160\217Y*\133o\DC4\241\STX\221\166~jNT5\167\247\171\170m\182\208\149F+,\172\t\222\&8Y\190\194\177\214\210\153\&5q;tqGfM8<\251\242%\n\185\223J\155\147\228\SO]w\221#|\136\&8\130/P |\t\198\160\fE@,\158\206\204T\165\&4:\129O\139\217X\148\192?\tl\185H\254L\133\190\251<\SOy\DC1@\248\174\145\USe\NAKG\RS\163d\141%\"G\EM\234\203\&3E\148&\139\152\b\250\&0|\169\194_\STX\225\206u\CAN\194\GS3d\214\FS\255<=\223h>\244\192|s\225\193\185\135\143\159\160\211\181\196d\158J\t\141&&\137\221VL\156.\174\254P\236\214\SYN\207SJ\237\139Jn\202\252\167\221y\188\231K5\141\179\167b\220\135\&2\250%l\179\DC2\246\193\"\236\137J\208cE\208\227\149\160\v:h\ENQ\DC4\tX\243\148kJ\156-D\230\&7dh3\191\t\224O\233)\249\234\188\177N\135\195\173\CAN\147<\178\205_\USiw}HN@\199$\156\ETX\142h\193VQ(\v\167\&6\166\v\NAK\208l\248\172B\151\209\219i\f\150\201\144h3\171\\\b]\250[\156#\136\238\209\207\186By\161\231+\156\239\140]\221\168ZV\146O!T^],2h\215$\203\135\190\212\151~\240\182Ie\230\139wM\182\249\229**\161\252\169\170\171\"E[_\211\SI\201d\238\133!\190\209VX\195\",X\STX\f\179Z-\148\197\DC3\243Q\215\STX\187\148+\235\FS\238\239`,e\158<R\213\ESC\222\204\215g\155o\157.\188\244\"'A\249u\210\133\182QW\204\249\203\n\197\&5\162I\248\175T\150?\211p8ndEg\206M\230{\216r\DC4\234\219\&5\133\251\r\141\r+\252F\205\235\161\212M\174~\t\249\161\227c\STXA%\DLE?\nq\DLETv\142B\239O\147\189\235\163\175\204\228\"\213\188O\183\194fw\145\155o\201\&3v\r\173\217\204W\200\ETB\168\184\183'\141\204\178\129\189\169\180P6Q\207\169B\216\164\238Y\144\141\162\156\230/]\254%\DEL\233\&2\179\131\&3\DELP\145\208\186\&7K\140\151\255\EOT\185[\t\204\DC3\192\150\198\186rf>v\229\&9\148\rcA\243\250\129\&4\DEL\175\138\230\239\221\a\154/F\195II\ACK\208\195Q\140\EM\DC4\130\163a\234\SIpt\198Q\156n;3\158\f\152|l%\151\154\190X\201\225E\nK\150f=}\183\199\132\255\f\143\SYN^\217#4\ETB\US\232\246\231\214\250\242vU\206mk\148\250\242\&58\203\181\236\217\209\172\253M\v\t\182\236\169\217n\DEL\214\198'\252 ~\173\207\US>\225^}\144._\f\204\232\129\&8\222\137\&10\165\250\253\b\SYNR\195\228V;g\ESC\151\EOTi\176\231\156-\167\142\195\162r\162\140E\227\147 \USf\174A7<\146\226\237\ESC,\RS\248!\203\218S\204\149\&2b9\167J\244\242\149\230\137\166R\242\146\232\242T\234~\204\162\SO\DC2\229\226\132\231\DLE\DC3(\163\164k\248\182\179GB\f\f\"\SOH\239;Q\191\149\DC4\231\167Z\155D\197\212b\187\163W`\212\207\FSY\224\251t\212?\147\244\ETB!R\247II\ACKt\227i\229\176\159\219\202\228\163q\244\168)I\ESC\ENQ\199\SUBz\247\193b\255\SUB-\236C\155U\252\213\202%\191\215\155\136\165\NAK\211\&2\218\167\155-\206\184\254\204\233\&2\167\171&\156\&9\239\181\153gayT\177\204\248\219\154\250r\FS\STXB\130\184M\144C\200\229\228\SOH\DC4E\a\241 \190xw\USDs\215\195\f\200\181\233\190\225\185d\181\&7{u\DLE\216[[J\146\&7\196\ETX\150\&4\162\204]=\n\132vV\214\188Uvt\EM\236\165\190\205\237\185i,F\220\249#\SYN\177\138\&1\134\154\DLE\237\226h\165\STX.\149U)\202\128\"S\237\128\163X\"\168\152BL\163\211\247\226\179i\t2\151k\160\247\155\210\147\DEL-w2,e\128f\233\176\SUB\189\174[\129I\156\139ck\223\229\147\245\ajk\232\211\222\NUL\185\192L\137\129\DC3\SOB\v\DEL\255\DC2\241\SUB5<\202@\142H0\210\211\&7\210#r\CAN\b*\226\202(zL.\155\213\250\213$\137\150A\154\RS\163\155\228\183\157\236e\197\210s)~\254L\138\249\137\DC4e&\129X\208\254\198\ESC\171\SOx\173A\DEL\171\225\160\199Z\FS\225\149\153z\189\150\169\184\236\ACK\173\241U\213_s\217\172|\206E\222\160\167\166)G\189s7#\237\189\151\205\226\131/\242\152\&8E\137C\229b\130\&3\201\&30\211\186\166\\ow\250q4\200\174\US\213\SYN\242\134\172\131wz\201\139\ACK\178\ESCJ'\DELYF~\225\181\179\166\135f\148\ENQ\ENQ\237\201\170\153\EM\168\251\180{R\252\206\US\ETB\SOH|\215\131\STX\SI6\r\203\SI\213/\148\208\163 \v\SIomQ\224\196\131\"p\252\225\ETXEJyS\228\193\226\\6\159\227\170d\NAKv\216\249\176\"\252N\SI,L\202\NUL/\241\216aK,<\vqo\165.h\172-\189DqHl\250:Q\161\130\211\162\ESC\244\253ez\136\232\176\200\143k\200\NAK\159\181I^v\209Q=dp?\190\&7L'\171\248\247%\169\157/\137\131\184\221\179\"\186\242\130\202\&2\130\138\187*\r\128\aU\185X\231\DC3'\244\195i\220\188?4S\231O\234\GS\158\155\180\135Gs\226\164\232\250\243\205\147\247\167b'\164V\153?9\159\225~\248~T\246\196\177\251R\195\227\199\239Ge\n\252\255\DC2\253\227\225f\221\244\FSMfK\US\146\186\135L\216\196c+\135\172\152\142\138_vBgo\219,\196\177\165\235N\143M\230\167yp}\162=Hznm,\240\EM[\EOT\236E[\FS`\238\210\129Z\130\NAK\215\141z\221U\172\177-V=\DC4\254\203\147\184Yq\245C\139\151:\n\SYN7a:\218\201\208\234\ETB\131\SO\201a\SUBZ\244\243f\234\241\SOy\185\215a_\229\210oDR<\254\240U\144\204\161\144\RS\181\159\153\DC1k>\249\162\136vy\197\147\ETB\166\221#\217\GS\169G\234\229\&5\148\STX8X\190i:\\\156\155[[[k\172\GSkDqon\254\228\201\147sT\FS\216\195\244\&2\201X$\226\133`\190Z%\136h\211\fY1]!\218y\252Qr\201BG+\231\252\133\v\217\a\209\136\DLE\ENQ\199\&1yn\168\148tI\193tY=\r\195\219\166\232\ETX&&\DC4\GS\136\163o\183\STX\142\215\210\206_E\201r\148\253\195\180\250\235ojd\238$\218\179\SOH\SOE\241\v\ETBRy\191A\193C\135\159x\227\174/il\242y\201g\219\a{\188\240\STXuY+9\176\232\190[z\131\201\185\142\144\&8\150-\232\137\139\251tQ\155RZK\ETXk\NAK\DC2z\134{k\235\130o\244U\170\133\147\245\EOT\137c\252\173\246\&1\235\177\171C\186\FS\228\EM\214{\244\234\176f\215\254\219\150U\183g\DC1\209\172\253\220w\US\DLE\247\227\RS\138\&2\142\182\145\178$\173\149\178dBc\130\&2\146\204\&73\243\221\161*\178'\167\136\164<HV\189@\156n\159\144\190M\145\169\220t\232\161Ei9\DLE\255\201\158\DC3\226\&5\163^S\202.`3'\188b9fI\184\167\&2\141\151!\v4\180\225\149\237\153\141\145\174\226s\EM\SUB\128\&8?9\EMGK\233\179.\222\&5A\207,qV(m5\158\GS\SUB\v\206\240\159Y\137lQ`\156\144\t\170\191\180\200\148\208\173\255N\180\226\173\183A\195\168.\213\134\145H\FS\157\&7\160\145\207\138\225u\USI\170]\204#\226.\217C\251\178X\149\200bbV\138\v\252R\DC4\237~\255\213(J\203\208\221\180\FS\213-E\245\ETB\202Q\199\202Q\SI\150\163\RS*G\GS/E\209\197\138\197Hq\244\189\DC4O\134H96.G\245\203Qe\210\240q\181b\FS_^\149\209\149m\230\138\f\138ER\ENQz),\157\SYN\134\145\215\&1z\225\ETB_\206\"\135aq\251\163\159\180\201\178\&8\131\183l-\218\231\158\177\239e]\FS\135\194VK>\160U\152\173b\156t\251\142\196kl\EOTG\231\DC1\196=m\249Qeq\222P\220\211\230\ESC\223\233\242Ko\154-\197\186#\169\201E\128?}\161p\199\214\SYN\168L]N/&7\223\194\168x4M/F{\210\167P\226tu\221\194(<\170A\235\ENQ\230\230\STX\255t*\SI\214\252\225\154<\171\210\159\155\253+k\246\241\aw\242\182_E\211X\222U'\US\233\&3\US\212\201\SOdP\RS\213={S\187\170\209\228\244\"\EM\156\159\a3\169\129r\145$\NAK\153-RQ\140\225\241\154{.\t\237;\253dt\177\159\FS\STX\157\DLE\198\153\153\178\160N\\{\189Y\203\247\DC1\CAN\222<<\184\204q\r\163\SO+cN\229q~9\153\250\206\235\DC1GQ\234h\149\145\GSW\154\219\NUL\160>^%\251l\RS\165?\201h\NULUn\228,<\223\168\\\213\169\235\159B\231\163\173\t\140\227j\198u\177V\ENQ\221\"\153\&8Ia\197\215\233\&4%7\tsx-\137\&7\184\214\165\209\171u\177<\185\174\188\204\148\231)\168\130)\201\&3Y\163\140\DC4\149/zZk\242\210*\202R\238\157\229\140U\249\166\180B\ENQ\211\DC2^\143\242\STX\v\v\234\155\f\237\239\138*\179`f\ACK\DC2\181\201\166\EM>\155\226J)\158\160L\181\193\SI*O\133U\203\226{\ACK\244\176\169\185(\169\139I~\137\229\128M\233\ETX\148\150\&7\133&\157\155\198QQ^\253\162\235\DC2^\145\212\235\149\167W\DLE\169\212#\159D\b\179\NUL\239\129\238\185\240\SI\172\203g\135Ci]\170\NAK\230\179\155/QkE\129\241q\FS\235TA\t\247\180`x\vi\225\174\&5m\133\233\130\132\144^\234\242\219\&5\192\240\187A2\144F\236\133=v\RSO/\157\150\199\248(\202\205A \251\&3\CANu6\197\219\254(\NAK\207\SI\a\222\&0\201v\198\178\177L>\EMK9rg\166\FS\ESC_\176\163d|n[\130\SUB0\210\138\DLE\207\200\186\133\135p\235\155\210\r\215\200\a\221\207L\167\US\SUB\247\STX\191\240H?\176`\196`L\173\198\145T#\168\224@C\188\132\171\248\ACK\171+x\218E\225\163\161\246\240\156b\159\170Lj\aL]\v.1\DC1\202\204\238\141,\223C\174\149P\249\136\GSzi\ETB\227\ACK`6A1\198\231\238\248\230\DEL\157\RS\253c\165\141\DELy\167\187ru\187\200\150\191G7\241\ENQ\239\DC3^\236\238+\175\225m\230\228\228\175\225\205\227\GS\138\&9Ey\194\130x\142\202\240|\158\226z\144=\160\183\169|\185\238\131\245)\NAK+?bX\245\196\158\232Sy\237\202\187\253\165\150/\222ayO\SI\226\233+\179\170_\187\217=@tY\222\222=w\236\205^z\253\r\251\&933\EM\193\218\212\161\194\139\STX`\244Gb\199o\186\223g\214\232\219'\133*\150\250\DC22\135U\241E\SO\166@\199\n[G\DEL\155\173-&\137\218\218\194\188\248\140\128\f1\152\140v\179/\177\204\"?W\129\224(\251\242F]?\255\242\195\225(\135D\185\129^\145\227\229\DC2\149#\RS\210\219\197\226\209z\233\229\162\143\236\210d\DLE\194\RS\168\ETB8\165Q\a\200(D\209\SO\165z\231\146\186\208\169=\EOT\172\242W\216;y\US6n!\NUL\239T\190OI'%e\DC1Z\213?\211\174\157\173\150\194\148\175\210\233(\239\216Bi\144;\145p%\DC2\213\192R\196e\175$\145\134\246W\149\225\215\165\b\201x\171T\132\146\195\194\SOH\202\145\175\169\234\214\147\"\191\129x\202\183Z\132\133\228\EOT\153\DLE\141\242\224\&0\v\ENQ~.\132\180\SO\153\129\196y\152\RS9\DLE\193\133<x,\SI>\152\a\US\202\131\199\179\160\178`\155\245\a\177\FS*\158E\148\143L\150\237Ej\152\236\186h\197\218(_V-M\195\210M\213\SUB\SO\237\158\234,\139~I\181=\171\ETB\139]\175\160\170J\142x\220\161\142\254\158\161\191\139\154h\t\199\&2Rm\231FK\217\179\182\153\207\EM\SYN\240t\142_x\232\NAK\163kE\199@\142\209\228\148(\157\248\212\146\133R\165\152\178b\205\234\130\DC3\SUB\248}\132_\165!\171\162\199\214\244\243Y\138\171\161IK;\252\130\203\164\205\146\197Mqu\228\162=\220y\173\215\DLEO\165\158\129\239\179\235\163\174\a\223\249\251J\139\246\206\143\195\174\223\161W\ETBK\175\&6-R\156gu\153\136\243\187\DC1>{yQB\158\207!/J\200\243*$\b!t\187\212B\215N\\\131 M\187h?\195\252\208\135q$\206\DC2:\254\206\187a\158\SOHk\246\&8\130D6L\DC2p\175\US\b\179\159\197\ETX,\GS\ACK\179\&1\176\224S\200\224X\160ec\207b\248r\188\239u\163\216s\192\&6G=k=\190\209\245\230\RS\233\244!\198\158\181#\235\EMf!?\172u\235\236*\133\SUB\214\179\160q.@\196\&9\v\180\133gu\188\193\DC2\214\t\208\167\222\192\219y'Bz\150GP?\ACKl\148,\238x\SUB\139_\237\&54\RS_1\243\152\RS\212\&3\179x\148\179\CAN\n\CAN\165\213,\RS\229,\206 \SI\197b\ETX\135%\131\129,\206\224t\195\ETB\FS\142\130\157\&7U\SYN\171\FSf\137\245h\242W\141\185GR\175\161\&0\248\213\140\193\175\DC2\131}`\176\143\ff1\240\&7\\\197\n\245`\130\213\221y5\246\137\CANt\236W\185\171\np\DC2\238\188\&9`+\n{\195\157\215\134\209\234\239\DELV\226q\180\148x\253\n\SYNS\SUB\242a\131\248\192*\248\251T\EM\172\130\185\ESCa\180:\178\146\225(I\253\&4\207\225\235\236\NAK\193\140\193 \193Og\160\214\224\179\183?\251\132\165\f\USZ\238\244w^\219`\128)\SUBD\157\157\&7\173\149\192_\tG)\132\ACK\235\159\189\230;\214\NUL\178\197\192\140\149\DC1I3\196\r\217\138\181\SUB\176\213\200\242\172\213a\236\173\226\131\198K\DC1d\221ym\NAK\SUB\231i\175\199\158\GSB\"\ACK\RS\SOHS\171a=\189\243f2\136`\242\140(\186;\175Y\ESC\192\200\DC4p\165\NUL\182\SOH\138\154\130y\GS8\162s\144xAi\160\&0P\197\223\235\249\161\167\180\207c\244\171\&7\205\227a?\SUBu\207T4\142O\169I4\236y\171U-\243x\SOH\166\162Y\250,.\198\&3\189I\RS\DC3\DLEgd\163\NUL5\246\147\222\170\223c \160\221\198\160\177\218\176\250\208\DC2\131\145\159\&8\248\186\ESC\160\192\147\158\214\DC3~\184\146\204=\195:\253\&4\177\210\136\165P\NUL\215,\203\214\211=\224\&4\v\225\247\DC1`\243_\176\165x\228\175\128\224C\212\&9+\SUB\160\148\175\128\130YIY\220\195\&55ht\248\255*\195~\192\192LQ\184\219e\nw/0?e*s\253`\153\NAKu\203\207\151\128&0\209\210\n\254\STX\239\188 M\160\180\r\ACK`\161_\165^\140\128\NAK\156~:\222y=\251\ACK\193\131\206\128`\172\160\194\159d#\173\v\NULu\246\&9\ACK\146\r\157\192\186\224\&3\171\v\255\190\237\141\128\213O@\ETX$\157~\224\245\FS\138=?\138\147(N=\180\&1\172\128\152\USs\230\131a\SYN#\227Q\176\173\209p\142~Q\194\173\141\209\192\250.\NUL\129\129\USZ\bE\f\f-0\DEL\161\&5\240\239\&9ky\231VL\ENQ\\\NUL;\223_N{\241\206{I\162\234\247\161*\224I\224]\233*M@\189\163(\224\201\208\a\153\136\217g?\235\248Ub\174\194T4\192\ENQ\EOT\185\152\129T*v\138\RS]\201\245\206\149\223\255O\163\230\201\164\FSH\178\255\235\192\135a\217\187b\DC1I\235\164c\188+\191\255A\atL\178\241\251\US8V\bj)\DC1q8\160\STXZ\232\STXi\188\225}vm\197\183\STX\182\SYN\205\129\166Y\139\128\249\193h\137\139\253\156\144\250g?\187\181~\ENQ\144zk~\178\177\206\181\190cyK\235\160Y\176\224\223\191h\197\DC1\EOT\209\DC3c\163\179\SOH\180\172\248\n\211\151c]\171\168b\DEL\SYNc\139*e\220\128\138q]P]\ETX\224\217\206\175\128\EMcl\150\&2d%\223;\209\NUL\148d\a\228*8\194\174\SO\163d\231\r\157\237\143\236\188\177\&4\202\132\GSH\226\170e\196\&6,\208[\GS\vF\239$\SUB\197\168Y \136\227*\148~\132\140\ETB\ACKQP\143\229`\231W\157>\EOT\128\197=o\EOT\193\185n\FS\129\DLE[\209\136\NUL\210hD\233O\247\172g\135\SO\254\DLE\243q\220N\160\CANl\EM\ENQ\nTP\138\131/\DC4j\r\162\174\191\236c\229=\v\US\161'\202\241c\CAN\161Q\165\180E\DEL\164\180E\DC4t\189@i\140\132\245v\222L\129\244^\161I\144\t^\DLE\r*[\133'_a\189\245\141\157\&7V*\155\164\EOTV\209\RSKl0J\209\n\180v>\188\DC2{0\EM\128z\237\188\150xz\155\232\137\178m\128D\251\236\134E\196y+\214\202\206{\ESC)H\248\206\ESC\195\NAK\214\221y#\233\ETX/W`\214\226C\173@\193y\ESC\SYN\144\253\ACK\180W\224X\171^o\GS\EM\r3\250\r0G\130+\RS\140\144\201\198\206\187\136\ENQD\RS\SUBVBy\214\149hi\201\n\215w\222\132(\228y\186\202\196\152L*\203\201\DC4\EMt\165%\EOT\b\211\245\207\222Y\129\t\172\ENQ\245\187`A]\NUL\254\156\154\182\STX\198\217*\148\155F\ESC@\DEL\223K\161\STX\128\133\234\240\222*\235Y\ETX\168)Kw\222P\205*?\213\251\151f\178\250\248Dg\169\131U\207\n|\153h\RSFDbU?\242\161\US\249!\154\166\\\252D2\170\132\194h\r\246\233F>\ETX\NUL\DC2x\DEL\194\140P\ESC\238\253,\237S\232D\NUL\235X\203\&0J\192\DC4!\SOH\235\ETBh\247\230\160w\195\143\NAK\DC1\163i\156\150\n+A<\208C2\235\148\172\DEL\170Sv\SUB\DC3\251\136\SII1\249\133\170\n\139\169\163\196\237\235\187\&7v?\218}{\247w\187\239(\140\221\253\237\238\167\187o\237~\NUL\137\&7w\223i\NAKX|\251\249\221\ESC\183_\128\148\ESC\183_\188\253\242\238-\128\250\152C\153x\SO\208oc\250\238\135\187\239\220\190f\169\153\161\144[\187o\238~|\251\165\221\143+\SUBe\247U-7|V\229\174h5\128|\RS\178\DEL\f\149\252\DLE\254Cd\239\ETX\213\239cE\222\SOHT\159\222\254\SOH|\190\ra\136\188}Mo\199\170\204\173lr\ETBP\NAK?\130\186\188\191\251.\252C\150\189}\251\251\187\&7,\228\139\ENQ\161O-\200\137,\254\144\190n\255\NULK\254\DC4\170\253} \227C\248\247\233\237\US;\FSP\232S\b\191cA\DC3\188\t\217\222\183\168\150\&7o_G\164\DLE\250\245\FS\180\213\141\221O \227\175\169\DC3\238\190e\201~\136L\218\189\153w\210\134\181\251K\200\130U\190\t\213\249\148\n\190\185\251\SYNG\198\203\129\184\143\160\169?\188\253}\128|\a\196J 9g\SOH=7\177\"\US\227\159w\NUL\234\163\221_C\185\&7(/\DC4\204i\195&x\ETB*\244\SOH\160\191\134(\223\199fz\ETB\145A\218-\168=\DC2\141bv\DC3k\DEL\251\154\"\138W\212\t\233\254\181\155\251\215\223\216\191\246\250\254\245\151\DC4Q\220\191\254\143\251\215\255\247\254\245\DEL(\b\225\ETB?{\235\243_\191V!s<q\255\218\223\253\199k\191\250\226\245\SI+d+CQ!:\159\255\252\249\187?\250\231\253\ETB\254f\255\218Kw\DEL\248\227/~\242\v]:\212t)\DLE@\DC2T\249_\246\175\253/\160\231\238\251\240\247\237\253\235\255\182\DEL\253:\EOT\172\253\235\USYD\230?\237_\191\ENQ\SOH\138\NUL\160\187\175\188\187\DEL\237M\136C\182\238\191\240\201\254\v\191\216\DEL\225\237\172Y\DC1*k\211\253\ETB~\249\249\223\255\248\223?\254\249\255\185\245\&2\180\SYN\166\157\131\184\253\235?\221\191\246\198\254\245w\247\175\255h\255\218\rd\227\181\SI\239\190\254\210\231?\251]\206\239\141\190\194\239\187\&7?\250\226\133\183\191x\233E\133\217w?x\235\238_\191Q\180\DC2\239\254\240\aw\223\186Ye\US\STX\ETB\239~\252\211j\SYN\243\196\n\SYN\255\231\139?\254\252\DEL\252\230\238\DEL\DEL\251\238_\255\234\238;?\229m\165\176XM\207\140B \195\254\226'\191\250\207[\175~\254\234\139_\NUL\155_\252\200\177\190x\227\195\207_\189\245\249?\191\230\b\142~\241\214\155w_\255\157\195\r\SO\235\238\223\189\204m\SO\235\238\219\183\254\227G\255FS\DEL@b]p@\212?\255\201\205\187\175\252\227\221\&7\255\225\223?\254\251\187\175\255\242\238o^Q\164\&4V\173\138;/\236}\180\247\155\189\155{\191S\216\182\247\233\222'{\183\246>\185\243\210\157\151\139\204\131\f\159\236\253n\239\198\157\231\247\222\131\140\US\239}\176w\163\138\149\NUL\249.\161\255-\252\189\193a+\CAN\187\247/F\208\n6C\ENQ\177\STX7\246\222\135\FS\159\222\185~\231\133;\215\246>\184s\237\206\203\SYN|\242\EOT@\STX\145\191\185\243CH\248[\189\NAK\202\217\247>\204Z\ETX\216c\239\253B\NUL\220\130\223\151\144?\128\234\ACK\148\STX\248?\132\n~\NUL\DEL\DELs\231\NAKk\239\214\157\191\185\243#\248\248d\239\166cAA/\DLE\235>\186\243\242\222\251\128\246\NAK\SO\141D}p\231Gw\174\243\202}\178\247\SO`\134&\198ZS)\US\SOH\216\a\208~\130\248\223\238}2\a\DEL\DLE\SYN\179~\STX\136\177L\209\242<\128\ETX\231\222?\229\200!\246\STX&\157\179\176\206@\250+w\254\246\206\&5\139P\188Od<oA\NAK\158\a\216\239#[\DC4yHV\213i\150\223UW\DC1\250Wv^\SI\134\ENQ\DC1\192\187T\250;\255\SUB\EOT\149V\137HO\150w\222\131\185hg%\132\130*\173\148\n\224\138\166_\245\DC3O\139\131i\229r\188\243\175\161\181\EOT\249\175x\133\137/\143\132\185\191l^\160\214>\ETB\236\188\222\237\130\&12`]0\204S\156\130uV\232ku\231\245\144\236\148\193(Y\t\233)\\\\\244\t\STX/\132\233Z\SI\240\134=\\\134\228\ACK#\135f\241Q+\234\244\173\254\206{=\SYN\SI\253@\STX\197\161g1<\255g\169\&1\250\140\SOH\176\156\r\DC1OW\ETX\186@\CANq\150\252^l\129\205c!\EOTT\v\247\208\192\"\178\240\r\175\128\173\228\205\184\184\185\237\200\ETXf\202\DC1\156\152\223\SI\EOT\191\244\134Xv\183S\220\225\238\168\144'Z\EM\rU\143T\142OqI\ENQ\218{\244$6\135\197\139\243\\\RS\188\EOTx(%\201\&1\183\182i\235=\232\185:\134F2\f\252\180f\US\229\135\GS\130\158|\191\DC1}N+k\DC1\244.5/\US\166\240m\149D\244\253\247\249U\246\242\194\165\210\219\227\243'\DC4\ETB\ACKqm+\200\t2\186x\204\141\252'\248\221\229\188z\238\166\r3\213E5\170\205\DC2\232-^!\178\227Ad\DC1\178\ETX\144aP\136\f\ETX\199\198\158\168E\162\131\225\176\b9\EOT\200\229\184\DLE\185\140w\161\141\n\145\253\145c\251i!\210O\GS\155\NAKq\226\150\232\149a!\242\nT~\163_\136\220\232C?+\SYN\DC4CA\201j!2Y\133f\NUL.+\FS\186\148\177\243\178KIbg\161\165\193u<3\\\199+\192U\224\235\DC4\240\133\129\EM.\ft\184.3\195\161+\135\n7\172\192\&7,\224[\142\205p\203\177\SO\215\US\153\225\250#\GS\206O\205p~\170\195\177\138\250\177B\253\174T\240\249J\129\207\ESC}3\220F_\135\139+\232\136\vt$\171f\184d\181\165\171\142\194EU\249\142r\225\240\DLE\194\218\197\231s0R\DEL\216gr\132W\a\193\226\228Hm\134\206\v\219\133;2\202\SI\129*w\206\202\183\DC3}z\245\208\242\187\238\DC1\245}\198#8<\160\238>\162\188\194\248\FS\DELj\DC1RN\159\154\195\229\SI|\236\240\&9\155`\197\237\178G\230\143\136\219\184\&1\132\&8\232\EOT\232\145a\148\248\164\EOT\189\165$\n\128\196\SYN\250\191,\RS=\209l\SO\175\RS\SOHt\188\RS\167\139wR\178\180=\SUB\234W\132\154.iJ\232F\165\255\v>MlqP\196\NUL\NUL"),("slidy/styles/slidy.css","/* slidy.css\n\n   Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.\n   W3C liability, trademark, document use and software licensing\n   rules apply, see:\n\n   http://www.w3.org/Consortium/Legal/copyright-documents\n   http://www.w3.org/Consortium/Legal/copyright-software\n*/\nbody\n{\n  margin: 0 0 0 0;\n  padding: 0 0 0 0;\n  width: 100%;\n  height: 100%;\n  color: black;\n  background-color: white;\n  font-family: \"Gill Sans MT\", \"Gill Sans\", GillSans, sans-serif;\n  font-size: 14pt;\n}\n\ndiv.toolbar {\n  position: fixed; z-index: 200;\n  top: auto; bottom: 0; left: 0; right: 0;\n  height: 1.2em; text-align: right;\n  padding-left: 1em;\n  padding-right: 1em; \n  font-size: 60%;\n  color: red;\n  background-color: rgb(240,240,240);\n  border-top: solid 1px rgb(180,180,180);\n}\n\ndiv.toolbar span.copyright {\n  color: black;\n  margin-left: 0.5em;\n}\n\ndiv.initial_prompt {\n  position: absolute;\n  z-index: 1000;\n  bottom: 1.2em;\n  width: 100%;\n  background-color: rgb(200,200,200);\n  opacity: 0.35;\n  background-color: rgb(200,200,200, 0.35);\n  cursor: pointer;\n}\n\ndiv.initial_prompt p.help {\n  text-align: center;\n}\n\ndiv.initial_prompt p.close {\n  text-align: right;\n  font-style: italic;\n}\n\ndiv.slidy_toc {\n  position: absolute;\n  z-index: 300;\n  width: 60%;\n  max-width: 30em;\n  height: 30em;\n  overflow: auto;\n  top: auto;\n  right: auto;\n  left: 4em;\n  bottom: 4em;\n  padding: 1em;\n  background: rgb(240,240,240);\n  border-style: solid;\n  border-width: 2px;\n  font-size: 60%;\n}\n\ndiv.slidy_toc .toc_heading {\n  text-align: center;\n  width: 100%;\n  margin: 0;\n  margin-bottom: 1em;\n  border-bottom-style: solid;\n  border-bottom-color: rgb(180,180,180);\n  border-bottom-width: 1px;\n}\n\ndiv.slide {\n  z-index: 20;\n  margin: 0 0 0 0;\n  padding-top: 0;\n  padding-bottom: 0;\n  padding-left: 20px;\n  padding-right: 20px;\n  border-width: 0;\n  clear: both;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  line-height: 120%;\n  background-color: transparent;\n}\n\ndiv.background {\n  display: none;\n}\n\ndiv.handout {\n  margin-left: 20px;\n  margin-right: 20px;\n}\n\ndiv.slide.titlepage {\n  text-align: center;\n}\n\ndiv.slide.titlepage h1 {\n  padding-top: 10%;\n  margin-right: 0;\n}\n\ndiv.slide h1 {\n  padding-left: 0;\n  padding-right: 20pt;\n  padding-top: 4pt;\n  padding-bottom: 4pt;\n  margin-top: 0;\n  margin-left: 0;\n  margin-right: 60pt;\n  margin-bottom: 0.5em;\n  display: block; \n  font-size: 160%;\n  line-height: 1.2em;\n  background: transparent;\n}\n\ndiv.toc {\n  position: absolute;\n  top: auto;\n  bottom: 4em;\n  left: 4em;\n  right: auto;\n  width: 60%;\n  max-width: 30em;\n  height: 30em;\n  border: solid thin black;\n  padding: 1em;\n  background: rgb(240,240,240);\n  color: black;\n  z-index: 300;\n  overflow: auto;\n  display: block;\n  visibility: visible;\n}\n\ndiv.toc-heading {\n  width: 100%;\n  border-bottom: solid 1px rgb(180,180,180);\n  margin-bottom: 1em;\n  text-align: center;\n}\n\nimg {\n  image-rendering: optimize-quality;\n}\n\npre {\n font-size: 80%;\n font-weight: bold;\n line-height: 120%;\n padding-top: 0.2em;\n padding-bottom: 0.2em;\n padding-left: 1em;\n padding-right: 1em;\n border-style: solid;\n border-left-width: 1em;\n border-top-width: thin;\n border-right-width: thin;\n border-bottom-width: thin;\n border-color: #95ABD0;\n color: #00428C;\n background-color: #E4E5E7;\n}\n\nli pre { margin-left: 0; }\n\nblockquote { font-style: italic }\n\nimg { background-color: transparent }\n\np.copyright { font-size: smaller }\n\n.center { text-align: center }\n.footnote { font-size: smaller; margin-left: 2em; }\n\na img { border-width: 0; border-style: none }\n\na:visited { color: navy }\na:link { color: navy }\na:hover { color: red; text-decoration: underline }\na:active { color: red; text-decoration: underline }\n\na {text-decoration: none}\n.navbar a:link {color: white}\n.navbar a:visited {color: yellow}\n.navbar a:active {color: red}\n.navbar a:hover {color: red}\n\nul { list-style-type: square; }\nul ul { list-style-type: disc; }\nul ul ul { list-style-type: circle; }\nul ul ul ul { list-style-type: disc; }\nli { margin-left: 0.5em; margin-top: 0.5em; }\nli li { font-size: 85%; font-style: italic }\nli li li { font-size: 85%; font-style: normal }\n\ndiv dt\n{\n  margin-left: 0;\n  margin-top: 1em;\n  margin-bottom: 0.5em;\n  font-weight: bold;\n}\ndiv dd\n{\n  margin-left: 2em;\n  margin-bottom: 0.5em;\n}\n\n\np,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {\n  margin-left: 1em;\n  margin-right: 1em;\n}\n\np.subhead { font-weight: bold; margin-top: 2em; }\n\n.smaller { font-size: smaller }\n.bigger { font-size: 130% }\n\ntd,th { padding: 0.2em }\n\nul {\n  margin: 0.5em 1.5em 0.5em 1.5em;\n  padding: 0;\n}\n\nol {\n  margin: 0.5em 1.5em 0.5em 1.5em;\n  padding: 0;\n}\n\nul { list-style-type: square; }\nul ul { list-style-type: disc; }\nul ul ul { list-style-type: circle; }\nul ul ul ul { list-style-type: disc; }\n\nul li { \n  list-style: square;\n  margin: 0.1em 0em 0.6em 0;\n  padding: 0 0 0 0;\n  line-height: 140%;\n}\n\nol li { \n  margin: 0.1em 0em 0.6em 1.5em;\n  padding: 0 0 0 0px;\n  line-height: 140%;\n  list-style-type: decimal;\n}\n\nli ul li { \n  font-size: 85%; \n  font-style: italic;\n  list-style-type: disc;\n  background: transparent;\n  padding: 0 0 0 0;\n}\nli li ul li { \n  font-size: 85%; \n  font-style: normal;\n  list-style-type: circle;\n  background: transparent;\n  padding: 0 0 0 0;\n}\nli li li ul li {\n  list-style-type: disc;\n  background: transparent;\n  padding: 0 0 0 0;\n}\n\nli ol li {\n  list-style-type: decimal;\n}\n\n\nli li ol li {\n  list-style-type: decimal;\n}\n\n/*\n setting class=\"outline on ol or ul makes it behave as an\n ouline list where blocklevel content in li elements is\n hidden by default and can be expanded or collapsed with\n mouse click. Set class=\"expand\" on li to override default\n*/\n\nol.outline li:hover { cursor: pointer }\nol.outline li.nofold:hover { cursor: default }\n\nul.outline li:hover { cursor: pointer }\nul.outline li.nofold:hover { cursor: default }\n\nol.outline { list-style:decimal; }\nol.outline ol { list-style-type:lower-alpha }\n\nol.outline li.nofold {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;\n}\nol.outline li.unfolded {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;\n}\nol.outline li.folded {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;\n}\nol.outline li.unfolded:hover {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;\n}\nol.outline li.folded:hover {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;\n}\n\nul.outline li.nofold {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;\n}\nul.outline li.unfolded {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;\n}\nul.outline li.folded {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;\n}\nul.outline li.unfolded:hover {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;\n}\nul.outline li.folded:hover {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;\n}\n\n/* for slides with class \"title\" in table of contents */\na.titleslide { font-weight: bold; font-style: italic }\n\n/*\n hide images for work around for save as bug\n where browsers fail to save images used by CSS\n*/\nimg.hidden { display: none; visibility: hidden }\ndiv.initial_prompt { display: none; visibility: hidden }\n\n  div.slide {\n     visibility: visible;\n     position: inherit;\n  }\n  div.handout {\n     border-top-style: solid;\n     border-top-width: thin;\n     border-top-color: black;\n  }\n\n@media screen {\n  .hidden { display: none; visibility: visible }\n\n  div.slide.hidden { display: block; visibility: visible }\n  div.handout.hidden { display: block; visibility: visible }\n  div.background { display: none; visibility: hidden }\n  body.single_slide div.initial_prompt { display: block; visibility: visible }\n  body.single_slide div.background { display: block; visibility: visible }\n  body.single_slide div.background.hidden { display: none; visibility: hidden }\n  body.single_slide .invisible { visibility: hidden }\n  body.single_slide .hidden { display: none; visibility: hidden }\n  body.single_slide div.slide { position: absolute }\n  body.single_slide div.handout { display: none; visibility: hidden }\n}\n\n@media print {\n  .hidden { display: block; visibility: visible }\n\n  div.slide pre { font-size: 60%; padding-left: 0.5em; }\n  div.toolbar { display: none; visibility: hidden; }\n  div.slidy_toc { display: none; visibility: hidden; }\n  div.background { display: none; visibility: hidden; }\n  div.slide { page-break-before: always }\n  /* :first-child isn't reliable for print media */\n  div.slide.first-slide { page-break-before: avoid }\n}\n\n"),("templates/default.asciidoc","$if(titleblock)$\n$title$\n$for(author)$\n:author: $author$\n$endfor$\n$if(date)$\n:date: $date$\n$endif$\n$if(toc)$\n:toc:\n$endif$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.beamer","\\documentclass[$if(fontsize)$$fontsize$,$endif$$if(handout)$handout,$endif$$if(beamer)$ignorenonframetext,$endif$]{$documentclass$}\n$if(theme)$\n\\usetheme{$theme$}\n$endif$\n$if(colortheme)$\n\\usecolortheme{$colortheme$}\n$endif$\n\\usepackage{amssymb,amsmath}\n\\usepackage{ifxetex,ifluatex}\n\\usepackage{fixltx2e} % provides \\textsubscript\n\\ifxetex\n  \\usepackage{fontspec,xltxtra,xunicode}\n  \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n\\else\n  \\ifluatex\n    \\usepackage{fontspec}\n    \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n  \\else\n    \\usepackage[utf8]{inputenc}\n  \\fi\n\\fi\n$if(natbib)$\n\\usepackage{natbib}\n\\bibliographystyle{plainnat}\n$endif$\n$if(biblatex)$\n\\usepackage{biblatex}\n$if(biblio-files)$\n\\bibliography{$biblio-files$}\n$endif$\n$endif$\n$if(listings)$\n\\usepackage{listings}\n$endif$\n$if(lhs)$\n\\lstnewenvironment{code}{\\lstset{language=Haskell,basicstyle=\\small\\ttfamily}}{}\n$endif$\n$if(highlighting-macros)$\n$highlighting-macros$\n$endif$\n$if(verbatim-in-note)$\n\\usepackage{fancyvrb}\n$endif$\n$if(tables)$\n\\usepackage{longtable}\n% These lines are needed to make table captions work with longtable:\n\\makeatletter\n\\def\\fnum@table{\\tablename~\\thetable}\n\\makeatother\n$endif$\n$if(url)$\n\\usepackage{url}\n$endif$\n$if(graphics)$\n\\usepackage{graphicx}\n\\makeatletter\n\\def\\ScaleIfNeeded{%\n  \\ifdim\\Gin@nat@width>\\linewidth\n    \\linewidth\n  \\else\n    \\Gin@nat@width\n  \\fi\n}\n\\makeatother\n\\let\\Oldincludegraphics\\includegraphics\n\\renewcommand{\\includegraphics}[2][]{\\Oldincludegraphics[width=\\ScaleIfNeeded]{#2}}\n$endif$\n\n% Comment these out if you don't want a slide with just the\n% part/section/subsection/subsubsection title:\n\\AtBeginPart{\n  \\let\\insertpartnumber\\relax\n  \\let\\partname\\relax\n  \\frame{\\partpage}\n}\n\\AtBeginSection{\n  \\let\\insertsectionnumber\\relax\n  \\let\\sectionname\\relax\n  \\frame{\\sectionpage}\n}\n\\AtBeginSubsection{\n  \\let\\insertsubsectionnumber\\relax\n  \\let\\subsectionname\\relax\n  \\frame{\\subsectionpage}\n}\n\n$if(strikeout)$\n\\usepackage[normalem]{ulem}\n% avoid problems with \\sout in headers with hyperref:\n\\pdfstringdefDisableCommands{\\renewcommand{\\sout}{}}\n$endif$\n\\setlength{\\parindent}{0pt}\n\\setlength{\\parskip}{6pt plus 2pt minus 1pt}\n\\setlength{\\emergencystretch}{3em}  % prevent overfull lines\n$if(numbersections)$\n$else$\n\\setcounter{secnumdepth}{0}\n$endif$\n$if(verbatim-in-note)$\n\\VerbatimFootnotes % allows verbatim text in footnotes\n$endif$\n$if(lang)$\n\\usepackage[$lang$]{babel}\n$endif$\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(title)$\n\\title{$title$}\n$endif$\n$if(author)$\n\\author{$for(author)$$author$$sep$ \\and $endfor$}\n$endif$\n$if(date)$\n\\date{$date$}\n$endif$\n\n\\begin{document}\n$if(title)$\n\\frame{\\titlepage}\n$endif$\n\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n\\begin{frame}\n\\tableofcontents[hideallsubsections]\n\\end{frame}\n\n$endif$\n$body$\n\n$if(natbib)$\n$if(biblio-files)$\n$if(biblio-title)$\n$if(book-class)$\n\\renewcommand\\bibname{$biblio-title$}\n$else$\n\\renewcommand\\refname{$biblio-title$}\n$endif$\n$endif$\n\\bibliography{$biblio-files$}\n\n$endif$\n$endif$\n$if(biblatex)$\n\\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$\n\n$endif$\n$for(include-after)$\n$include-after$\n\n$endfor$\n\\end{document}\n"),("templates/default.context","\\startmode[*mkii]\n  \\enableregime[utf-8]  \n  \\setupcolors[state=start]\n\\stopmode\n$if(mainlang)$\n\\mainlanguage[$mainlang$]\n$endif$\n\n% Enable hyperlinks\n\\setupinteraction[state=start, color=middleblue]\n\n\\setuppapersize [$if(papersize)$$papersize$$else$letter$endif$][$if(papersize)$$papersize$$else$letter$endif$]\n\\setuplayout    [width=middle,  backspace=1.5in, cutspace=1.5in,\n                 height=middle, topspace=0.75in, bottomspace=0.75in]\n\n\\setuppagenumbering[location={footer,center}]\n\n\\setupbodyfont[11pt]\n\n\\setupwhitespace[medium]\n\n\\setuphead[chapter]      [style=\\tfd]\n\\setuphead[section]      [style=\\tfc]\n\\setuphead[subsection]   [style=\\tfb]\n\\setuphead[subsubsection][style=\\bf]\n\n$if(number-sections)$\n$else$\n\\setuphead[chapter, section, subsection, subsubsection][number=no]\n$endif$\n\n\\definedescription\n  [description]\n  [headstyle=bold, style=normal, location=hanging, width=broad, margin=1cm]\n\n\\setupitemize[autointro]    % prevent orphan list intro\n\\setupitemize[indentnext=no]\n\n\\setupthinrules[width=15em] % width of horizontal rules\n\n\\setupdelimitedtext\n  [blockquote]\n  [before={\\blank[medium]},\n   after={\\blank[medium]},\n   indentnext=no,\n  ]\n\n$if(toc)$\n\\setupcombinedlist[content][list={$placelist$}]\n\n$endif$\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n\\starttext\n$if(title)$\n\\startalignment[center]\n  \\blank[2*big]\n  {\\tfd $title$}\n$if(author)$\n  \\blank[3*medium]\n  {\\tfa $for(author)$$author$$sep$\\crlf $endfor$}\n$endif$\n$if(date)$\n  \\blank[2*medium]\n  {\\tfa $date$}\n$endif$\n  \\blank[3*medium]\n\\stopalignment\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$if(toc)$\n\\placecontent\n$endif$\n\n$body$\n\n$for(include-after)$\n$include-after$\n$endfor$\n\\stoptext\n"),("templates/default.docbook","<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n$if(mathml)$\n<!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook EBNF Module V1.1CR1//EN\"\n                  \"http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd\">\n$else$\n<!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook XML V4.4//EN\"\n                  \"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd\">\n$endif$\n<article>\n  <articleinfo>\n    <title>$title$</title>\n$for(author)$\n    <author>\n      $author$\n    </author>\n$endfor$\n$if(date)$\n    <date>$date$</date>\n$endif$\n  </articleinfo>\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</article>\n"),("templates/default.dzslides","<!DOCTYPE html>\n<head>\n<meta charset=\"utf-8\">\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"dcterms.date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$if(css)$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" $if(html5)$$else$type=\"text/css\" $endif$/>\n$endfor$\n$else$\n<style>\n  html { background-color: black; }\n  body { background-color: white; border-radius: 12px}\n  /* A section is a slide. It's size is 800x600, and this will never change */\n  section {\n      font-family: Arial, serif;\n      font-size: 20pt;\n    }\n  address, blockquote, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ol, p, pre, table, ul, dl { padding: 10px 20px 10px 20px; }\n  h1, h2, h3 {\n    text-align: center;\n    margin: 10pt 10pt 20pt 10pt;\n  }\n  ul, ol {\n    margin: 10px 10px 10px 50px;\n  }\n  section.titleslide h1 { margin-top: 200px; }\n  h1.title { margin-top: 150px; }\n  h1 { font-size: 180%; }\n  h2 { font-size: 120%; }\n  h3 { font-size: 100%; }\n  q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }\n  blockquote { font-style: italic }\n  /* Figures are displayed full-page, with the caption on\n     top of the image/video */\n  figure {\n    background-color: black;\n  }\n  figcaption {\n    margin: 70px;\n  }\n  footer {\n    position: absolute;\n    bottom: 0;\n    width: 100%;\n    padding: 40px;\n    text-align: right;\n    background-color: #F3F4F8;\n    border-top: 1px solid #CCC;\n  }\n\n  /* Transition effect */\n  /* Feel free to change the transition effect for original\n     animations. See here:\n     https://developer.mozilla.org/en/CSS/CSS_transitions\n     How to use CSS3 Transitions: */\n  section {\n      -moz-transition: left 400ms linear 0s;\n      -webkit-transition: left 400ms linear 0s;\n      -ms-transition: left 400ms linear 0s;\n      transition: left 400ms linear 0s;\n  }\n\n  /* Before */\n  section { left: -150%; }\n  /* Now */\n  section[aria-selected] { left: 0; }\n  /* After */\n  section[aria-selected] ~ section { left: +150%; }\n\n  /* Incremental elements */\n\n  /* By default, visible */\n  .incremental > * { opacity: 1; }\n\n  /* The current item */\n  .incremental > *[aria-selected] { color: red; opacity: 1; }\n\n  /* The items to-be-selected */\n  .incremental > *[aria-selected] ~ * { opacity: 0.2; }\n</style>\n$endif$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$if(title)$\n<section>\n  <h1 class=\"title\">$title$</h1>\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n  <h3 class=\"date\">$date$</h3>\n</section>\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n$dzslides-core$\n</body>\n</html>\n"),("templates/default.epub","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n  <title>$pagetitle$</title>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"$css$\" />\n$endfor$\n</head>\n<body>\n$if(titlepage)$\n  <h1 class=\"title\">$title$</h1>\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n  <h3 class=\"date\">$date$</h3>\n$endif$\n$else$\n$body$\n$endif$\n</body>\n</html>\n\n"),("templates/default.epub3","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:epub=\"http://www.idpf.org/2007/ops\"$if(lang)$ xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta charset=\"utf-8\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n  <title>$pagetitle$</title>\n$if(quotes)$\n  <style type=\"text/css\">\n    q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }\n  </style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" />\n$endfor$\n</head>\n<body>\n$if(titlepage)$\n  <h1 class=\"title\">$title$</h1>\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n  <h3 class=\"date\">$date$</h3>\n$endif$\n$else$\n$body$\n$endif$\n</body>\n</html>\n\n"),("templates/default.html","<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(quotes)$\n  <style type=\"text/css\">q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }</style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" $if(html5)$$else$type=\"text/css\" $endif$/>\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<div id=\"$idprefix$header\">\n<h1 class=\"title\">$title$</h1>\n$for(author)$\n<h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n<h3 class=\"date\">$date$</h3>\n$endif$\n</div>\n$endif$\n$if(toc)$\n<div id=\"$idprefix$TOC\">\n$toc$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.html5","<!DOCTYPE html>\n<html$if(lang)$ lang=\"$lang$\"$endif$>\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"generator\" content=\"pandoc\">\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\">\n$endfor$\n$if(date-meta)$\n  <meta name=\"dcterms.date\" content=\"$date-meta$\">\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n  <!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script>\n  <![endif]-->\n$if(quotes)$\n  <style type=\"text/css\">q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }</style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\">\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<header>\n<h1 class=\"title\">$title$</h1>\n$for(author)$\n<h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n<h3 class=\"date\">$date$</h3>\n$endif$\n</header>\n$endif$\n$if(toc)$\n<nav id=\"$idprefix$TOC\">\n$toc$\n</nav>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.latex","\\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$]{$documentclass$}\n\\usepackage[T1]{fontenc}\n\\usepackage{lmodern}\n\\usepackage{amssymb,amsmath}\n\\usepackage{ifxetex,ifluatex}\n\\usepackage{fixltx2e} % provides \\textsubscript\n% use upquote if available, for straight quotes in verbatim environments\n\\IfFileExists{upquote.sty}{\\usepackage{upquote}}{}\n\\ifnum 0\\ifxetex 1\\fi\\ifluatex 1\\fi=0 % if pdftex\n  \\usepackage[utf8]{inputenc}\n$if(euro)$\n  \\usepackage{eurosym}\n$endif$\n\\else % if luatex or xelatex\n  \\usepackage{fontspec}\n  \\ifxetex\n    \\usepackage{xltxtra,xunicode}\n  \\fi\n  \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n  \\newcommand{\\euro}{\226\130\172}\n$if(mainfont)$\n    \\setmainfont{$mainfont$}\n$endif$\n$if(sansfont)$\n    \\setsansfont{$sansfont$}\n$endif$\n$if(monofont)$\n    \\setmonofont{$monofont$}\n$endif$\n$if(mathfont)$\n    \\setmathfont{$mathfont$}\n$endif$\n\\fi\n% use microtype if available\n\\IfFileExists{microtype.sty}{\\usepackage{microtype}}{}\n$if(geometry)$\n\\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}\n$endif$\n$if(natbib)$\n\\usepackage{natbib}\n\\bibliographystyle{plainnat}\n$endif$\n$if(biblatex)$\n\\usepackage{biblatex}\n$if(biblio-files)$\n\\bibliography{$biblio-files$}\n$endif$\n$endif$\n$if(listings)$\n\\usepackage{listings}\n$endif$\n$if(lhs)$\n\\lstnewenvironment{code}{\\lstset{language=Haskell,basicstyle=\\small\\ttfamily}}{}\n$endif$\n$if(highlighting-macros)$\n$highlighting-macros$\n$endif$\n$if(verbatim-in-note)$\n\\usepackage{fancyvrb}\n$endif$\n$if(tables)$\n\\usepackage{longtable}\n$endif$\n$if(graphics)$\n\\usepackage{graphicx}\n% We will generate all images so they have a width \\maxwidth. This means\n% that they will get their normal width if they fit onto the page, but\n% are scaled down if they would overflow the margins.\n\\makeatletter\n\\def\\maxwidth{\\ifdim\\Gin@nat@width>\\linewidth\\linewidth\n\\else\\Gin@nat@width\\fi}\n\\makeatother\n\\let\\Oldincludegraphics\\includegraphics\n\\renewcommand{\\includegraphics}[1]{\\Oldincludegraphics[width=\\maxwidth]{#1}}\n$endif$\n\\ifxetex\n  \\usepackage[setpagesize=false, % page size defined by xetex\n              unicode=false, % unicode breaks when used with xetex\n              xetex]{hyperref}\n\\else\n  \\usepackage[unicode=true]{hyperref}\n\\fi\n\\hypersetup{breaklinks=true,\n            bookmarks=true,\n            pdfauthor={$author-meta$},\n            pdftitle={$title-meta$},\n            colorlinks=true,\n            urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,\n            linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,\n            pdfborder={0 0 0}}\n\\urlstyle{same}  % don't use monospace font for urls\n$if(links-as-notes)$\n% Make links footnotes instead of hotlinks:\n\\renewcommand{\\href}[2]{#2\\footnote{\\url{#1}}}\n$endif$\n$if(strikeout)$\n\\usepackage[normalem]{ulem}\n% avoid problems with \\sout in headers with hyperref:\n\\pdfstringdefDisableCommands{\\renewcommand{\\sout}{}}\n$endif$\n\\setlength{\\parindent}{0pt}\n\\setlength{\\parskip}{6pt plus 2pt minus 1pt}\n\\setlength{\\emergencystretch}{3em}  % prevent overfull lines\n$if(numbersections)$\n\\setcounter{secnumdepth}{5}\n$else$\n\\setcounter{secnumdepth}{0}\n$endif$\n$if(verbatim-in-note)$\n\\VerbatimFootnotes % allows verbatim text in footnotes\n$endif$\n$if(lang)$\n\\ifxetex\n  \\usepackage{polyglossia}\n  \\setmainlanguage{$mainlang$}\n\\else\n  \\usepackage[$lang$]{babel}\n\\fi\n$endif$\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(title)$\n\\title{$title$}\n$endif$\n\\author{$for(author)$$author$$sep$ \\and $endfor$}\n\\date{$date$}\n\n\\begin{document}\n$if(title)$\n\\maketitle\n$endif$\n\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n{\n\\hypersetup{linkcolor=black}\n\\setcounter{tocdepth}{$toc-depth$}\n\\tableofcontents\n}\n$endif$\n$body$\n\n$if(natbib)$\n$if(biblio-files)$\n$if(biblio-title)$\n$if(book-class)$\n\\renewcommand\\bibname{$biblio-title$}\n$else$\n\\renewcommand\\refname{$biblio-title$}\n$endif$\n$endif$\n\\bibliography{$biblio-files$}\n\n$endif$\n$endif$\n$if(biblatex)$\n\\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$\n\n$endif$\n$for(include-after)$\n$include-after$\n\n$endfor$\n\\end{document}\n"),("templates/default.man","$if(has-tables)$\n.\\\"t\n$endif$\n.TH $title$ $section$ \"$date$\" $description$\n$for(header-includes)$\n$header-includes$\n$endfor$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n$if(author)$\n.SH AUTHORS\n$for(author)$$author$$sep$; $endfor$.\n$endif$\n"),("templates/default.markdown","$if(titleblock)$\n$titleblock$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n$toc$\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.mediawiki","$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n__TOC__\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.opendocument","<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<office:document-content xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" xmlns:draw=\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\" xmlns:fo=\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" xmlns:svg=\"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\" xmlns:chart=\"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\" xmlns:dr3d=\"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\" xmlns:math=\"http://www.w3.org/1998/Math/MathML\" xmlns:form=\"urn:oasis:names:tc:opendocument:xmlns:form:1.0\" xmlns:script=\"urn:oasis:names:tc:opendocument:xmlns:script:1.0\" xmlns:ooo=\"http://openoffice.org/2004/office\" xmlns:ooow=\"http://openoffice.org/2004/writer\" xmlns:oooc=\"http://openoffice.org/2004/calc\" xmlns:dom=\"http://www.w3.org/2001/xml-events\" xmlns:xforms=\"http://www.w3.org/2002/xforms\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" office:version=\"1.0\">\n  $automatic-styles$\n$for(header-includes)$\n  $header-includes$\n$endfor$  \n<office:body>\n<office:text>\n$if(title)$\n<text:h text:style-name=\"Title\">$title$</text:h>\n$endif$\n$for(author)$\n<text:p text:style-name=\"Author\">$author$</text:p>\n$endfor$\n$if(date)$\n<text:p text:style-name=\"Date\">$date$</text:p>\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</office:text>\n</office:body>\n</office:document-content>\n"),("templates/default.org","$if(title)$\n$title$\n\n$endif$\n$if(author)$\n#+AUTHOR: $for(author)$$author$$sep$; $endfor$\n$endif$\n$if(date)$\n#+DATE: $date$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.plain","$if(titleblock)$\n$titleblock$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n$toc$\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.rst","$if(title)$\n$title$\n\n$endif$\n$for(author)$\n:Author: $author$\n$endfor$\n$if(date)$\n:Date:   $date$\n$endif$\n$if(author)$\n\n$else$\n$if(date)$\n\n$endif$\n$endif$\n$if(math)$\n.. role:: math(raw)\n   :format: html latex\n..\n\n$endif$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n.. contents::\n   :depth: $toc-depth$\n..\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.rtf","{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 \\fswiss Helvetica;}{\\f1 Courier;}}\n{\\colortbl;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}\n\\widowctrl\\hyphauto\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(title)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0 \\b \\fs36 $title$\\par}\n$endif$\n$for(author)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0  $author$\\par}\n$endfor$\n$if(date)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0  $date$\\par}\n$endif$\n$if(spacer)$\n{\\pard \\ql \\f0 \\sa180 \\li0 \\fi0 \\par}\n$endif$\n$if(toc)$\n$toc$\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n}\n"),("templates/default.s5","<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n  <!-- configuration parameters -->\n  <meta name=\"defaultView\" content=\"slideshow\" />\n  <meta name=\"controlVis\" content=\"hidden\" />\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" type=\"text/css\" />\n$endfor$\n  <!-- style sheet links -->\n  <link rel=\"stylesheet\" href=\"$s5-url$/slides.css\" type=\"text/css\" media=\"projection\" id=\"slideProj\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/outline.css\" type=\"text/css\" media=\"screen\" id=\"outlineStyle\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/print.css\" type=\"text/css\" media=\"print\" id=\"slidePrint\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/opera.css\" type=\"text/css\" media=\"projection\" id=\"operaFix\" />\n  <!-- S5 JS -->\n  <script src=\"$s5-url$/slides.js\" type=\"text/javascript\"></script>\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n<div class=\"layout\">\n<div id=\"controls\"></div>\n<div id=\"currentSlide\"></div>\n<div id=\"header\"></div>\n<div id=\"footer\">\n  <h1>$date$</h1>\n  <h2>$title$</h2>\n</div>\n</div>\n<div class=\"presentation\">\n$if(title)$\n<div class=\"titleslide slide\">\n  <h1>$title$</h1>\n  <h2>$for(author)$$author$$sep$<br/>$endfor$</h2>\n  <h3>$date$</h3>\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</div>\n</body>\n</html>\n"),("templates/default.slideous","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n    href=\"$slideous-url$/slideous.css\" />\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n   href=\"$css$\" />\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n  <script src=\"$slideous-url$/slideous.js\"\n    charset=\"utf-8\" type=\"text/javascript\"></script>\n$if(duration)$\n  <meta name=\"duration\" content=\"$duration$\" />\n$endif$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n<div id=\"statusbar\">\n<span style=\"float:right;\">\n<span style=\"margin-right:4em;font-weight:bold;\"><span id=\"slideidx\"></span> of {$$slidecount}</span>\n<button id=\"homebutton\" title=\"first slide\">1</button>\n<button id=\"prevslidebutton\" title=\"previous slide\">&laquo;</button>\n<button id=\"previtembutton\" title=\"previous item\">&lsaquo;</button>\n<button id=\"nextitembutton\" title=\"next item\">&rsaquo;</button>\n<button id=\"nextslidebutton\" title=\"next slide\">&raquo;</button>\n<button id=\"endbutton\" title=\"last slide\">{$$slidecount}</button>\n<button id=\"incfontbutton\" title=\"content\">A+</button>\n<button id=\"decfontbutton\" title=\"first slide\">A-</button>\n<select id=\"tocbox\" size=\"1\"><option></option></select>\n</span>\n<span id=\"eos\">&frac12;</span>\n<span title=\"{$$location}, {$$date}\">{$$title}, {$$author}</span>\n</div>\n$if(title)$\n<div class=\"slide titlepage\">\n  <h1 class=\"title\">$title$</h1>\n  <p class=\"author\">\n$for(author)$$author$$sep$<br/>$endfor$\n  </p>\n$if(date)$\n  <p class=\"date\">$date$</p>\n$endif$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.slidy","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n    href=\"$slidy-url$/styles/slidy.css\" />\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n   href=\"$css$\" />\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n  <script src=\"$slidy-url$/scripts/slidy.js.gz\"\n    charset=\"utf-8\" type=\"text/javascript\"></script>\n$if(duration)$\n  <meta name=\"duration\" content=\"$duration$\" />\n$endif$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<div class=\"slide titlepage\">\n  <h1 class=\"title\">$title$</h1>\n  <p class=\"author\">\n$for(author)$$author$$sep$<br/>$endfor$\n  </p>\n$if(date)$\n  <p class=\"date\">$date$</p>\n$endif$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.texinfo","\\input texinfo\n@documentencoding UTF-8\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(strikeout)$\n@macro textstrikeout{text}\n~~\\text\\~~\n@end macro\n\n$endif$\n$if(subscript)$\n@macro textsubscript{text}\n@iftex\n@textsubscript{\\text\\}\n@end iftex\n@ifnottex\n_@{\\text\\@}\n@end ifnottex\n@end macro\n\n$endif$\n$if(superscript)$\n@macro textsuperscript{text}\n@iftex\n@textsuperscript{\\text\\}\n@end iftex\n@ifnottex\n^@{\\text\\@}\n@end ifnottex\n@end macro\n\n$endif$\n@ifnottex\n@paragraphindent 0\n@end ifnottex\n$if(titlepage)$\n@titlepage\n@title $title$\n$for(author)$\n@author $author$\n$endfor$\n$if(date)$\n$date$\n$endif$\n@end titlepage\n\n$endif$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n@contents\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n\n@bye\n"),("templates/default.textile","$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/README.markdown","Templates for [pandoc](http://github.com/jgm/pandoc).\n\nIf you use custom templates, we recommend forking this repository,\nso that you can integrate changes to the default templates in future\npandoc releases.\n")]+dataFiles = [("epub.css","/* This defines styles and classes used in the book */\nbody { margin: 5%; text-align: justify; font-size: medium; }\ncode { font-family: monospace; }\nh1 { text-align: left; }\nh2 { text-align: left; }\nh3 { text-align: left; }\nh4 { text-align: left; }\nh5 { text-align: left; }\nh6 { text-align: left; }\nh1.title { }\nh2.author { }\nh3.date { }\nol.toc { padding: 0; margin-left: 1em; }\nol.toc li { list-style-type: none; margin: 0; padding: 0; }\n"),("LaTeXMathML.js","/*\nLaTeXMathML.js from http://math.etsu.edu/LaTeXMathML/\nAdapted by Jeff Knisely and Douglas Woodall from ASCIIMathML.js v. 1.4.7,\n(c) 2005 Peter Jipsen http://www.chapman.edu/~jipsen.\nReleased under the GNU General Public License version 2 or later.\nSee the GNU General Public License (at http://www.gnu.org/copyleft/gpl.html)\nfor more details.\n*/\nvar checkForMathML=true;var notifyIfNoMathML=true;var alertIfNoMathML=false;var mathcolor=\"\";var mathfontfamily=\"\";var showasciiformulaonhover=true;var isIE=document.createElementNS==null;if(document.getElementById==null)\nalert(\"This webpage requires a recent browser such as \\nMozilla/Netscape 7+ or Internet Explorer 6+MathPlayer\")\nfunction AMcreateElementXHTML(t){if(isIE)return document.createElement(t);else return document.createElementNS(\"http://www.w3.org/1999/xhtml\",t);}\nfunction AMnoMathMLNote(){var nd=AMcreateElementXHTML(\"h3\");nd.setAttribute(\"align\",\"center\")\nnd.appendChild(AMcreateElementXHTML(\"p\"));nd.appendChild(document.createTextNode(\"To view the \"));var an=AMcreateElementXHTML(\"a\");an.appendChild(document.createTextNode(\"LaTeXMathML\"));an.setAttribute(\"href\",\"http://www.maths.nott.ac.uk/personal/drw/lm.html\");nd.appendChild(an);nd.appendChild(document.createTextNode(\" notation use Internet Explorer 6+\"));an=AMcreateElementXHTML(\"a\");an.appendChild(document.createTextNode(\"MathPlayer\"));an.setAttribute(\"href\",\"http://www.dessci.com/en/products/mathplayer/download.htm\");nd.appendChild(an);nd.appendChild(document.createTextNode(\" or Netscape/Mozilla/Firefox\"));nd.appendChild(AMcreateElementXHTML(\"p\"));return nd;}\nfunction AMisMathMLavailable(){if(navigator.appName.slice(0,8)==\"Netscape\")\nif(navigator.appVersion.slice(0,1)>=\"5\")return null;else return AMnoMathMLNote();else if(navigator.appName.slice(0,9)==\"Microsoft\")\ntry{var ActiveX=new ActiveXObject(\"MathPlayer.Factory.1\");return null;}catch(e){return AMnoMathMLNote();}\nelse return AMnoMathMLNote();}\nvar AMcal=[0xEF35,0x212C,0xEF36,0xEF37,0x2130,0x2131,0xEF38,0x210B,0x2110,0xEF39,0xEF3A,0x2112,0x2133,0xEF3B,0xEF3C,0xEF3D,0xEF3E,0x211B,0xEF3F,0xEF40,0xEF41,0xEF42,0xEF43,0xEF44,0xEF45,0xEF46];var AMfrk=[0xEF5D,0xEF5E,0x212D,0xEF5F,0xEF60,0xEF61,0xEF62,0x210C,0x2111,0xEF63,0xEF64,0xEF65,0xEF66,0xEF67,0xEF68,0xEF69,0xEF6A,0x211C,0xEF6B,0xEF6C,0xEF6D,0xEF6E,0xEF6F,0xEF70,0xEF71,0x2128];var AMbbb=[0xEF8C,0xEF8D,0x2102,0xEF8E,0xEF8F,0xEF90,0xEF91,0x210D,0xEF92,0xEF93,0xEF94,0xEF95,0xEF96,0x2115,0xEF97,0x2119,0x211A,0x211D,0xEF98,0xEF99,0xEF9A,0xEF9B,0xEF9C,0xEF9D,0xEF9E,0x2124];var CONST=0,UNARY=1,BINARY=2,INFIX=3,LEFTBRACKET=4,RIGHTBRACKET=5,SPACE=6,UNDEROVER=7,DEFINITION=8,TEXT=9,BIG=10,LONG=11,STRETCHY=12,MATRIX=13;var AMsqrt={input:\"\\\\sqrt\",tag:\"msqrt\",output:\"sqrt\",ttype:UNARY},AMroot={input:\"\\\\root\",tag:\"mroot\",output:\"root\",ttype:BINARY},AMfrac={input:\"\\\\frac\",tag:\"mfrac\",output:\"/\",ttype:BINARY},AMover={input:\"\\\\stackrel\",tag:\"mover\",output:\"stackrel\",ttype:BINARY},AMatop={input:\"\\\\atop\",tag:\"mfrac\",output:\"\",ttype:INFIX},AMchoose={input:\"\\\\choose\",tag:\"mfrac\",output:\"\",ttype:INFIX},AMsub={input:\"_\",tag:\"msub\",output:\"_\",ttype:INFIX},AMsup={input:\"^\",tag:\"msup\",output:\"^\",ttype:INFIX},AMtext={input:\"\\\\mathrm\",tag:\"mtext\",output:\"text\",ttype:TEXT},AMmbox={input:\"\\\\mbox\",tag:\"mtext\",output:\"mbox\",ttype:TEXT};var AMsymbols=[{input:\"\\\\alpha\",tag:\"mi\",output:\"\\u03B1\",ttype:CONST},{input:\"\\\\beta\",tag:\"mi\",output:\"\\u03B2\",ttype:CONST},{input:\"\\\\gamma\",tag:\"mi\",output:\"\\u03B3\",ttype:CONST},{input:\"\\\\delta\",tag:\"mi\",output:\"\\u03B4\",ttype:CONST},{input:\"\\\\epsilon\",tag:\"mi\",output:\"\\u03B5\",ttype:CONST},{input:\"\\\\varepsilon\",tag:\"mi\",output:\"\\u025B\",ttype:CONST},{input:\"\\\\zeta\",tag:\"mi\",output:\"\\u03B6\",ttype:CONST},{input:\"\\\\eta\",tag:\"mi\",output:\"\\u03B7\",ttype:CONST},{input:\"\\\\theta\",tag:\"mi\",output:\"\\u03B8\",ttype:CONST},{input:\"\\\\vartheta\",tag:\"mi\",output:\"\\u03D1\",ttype:CONST},{input:\"\\\\iota\",tag:\"mi\",output:\"\\u03B9\",ttype:CONST},{input:\"\\\\kappa\",tag:\"mi\",output:\"\\u03BA\",ttype:CONST},{input:\"\\\\lambda\",tag:\"mi\",output:\"\\u03BB\",ttype:CONST},{input:\"\\\\mu\",tag:\"mi\",output:\"\\u03BC\",ttype:CONST},{input:\"\\\\nu\",tag:\"mi\",output:\"\\u03BD\",ttype:CONST},{input:\"\\\\xi\",tag:\"mi\",output:\"\\u03BE\",ttype:CONST},{input:\"\\\\pi\",tag:\"mi\",output:\"\\u03C0\",ttype:CONST},{input:\"\\\\varpi\",tag:\"mi\",output:\"\\u03D6\",ttype:CONST},{input:\"\\\\rho\",tag:\"mi\",output:\"\\u03C1\",ttype:CONST},{input:\"\\\\varrho\",tag:\"mi\",output:\"\\u03F1\",ttype:CONST},{input:\"\\\\varsigma\",tag:\"mi\",output:\"\\u03C2\",ttype:CONST},{input:\"\\\\sigma\",tag:\"mi\",output:\"\\u03C3\",ttype:CONST},{input:\"\\\\tau\",tag:\"mi\",output:\"\\u03C4\",ttype:CONST},{input:\"\\\\upsilon\",tag:\"mi\",output:\"\\u03C5\",ttype:CONST},{input:\"\\\\phi\",tag:\"mi\",output:\"\\u03C6\",ttype:CONST},{input:\"\\\\varphi\",tag:\"mi\",output:\"\\u03D5\",ttype:CONST},{input:\"\\\\chi\",tag:\"mi\",output:\"\\u03C7\",ttype:CONST},{input:\"\\\\psi\",tag:\"mi\",output:\"\\u03C8\",ttype:CONST},{input:\"\\\\omega\",tag:\"mi\",output:\"\\u03C9\",ttype:CONST},{input:\"\\\\Gamma\",tag:\"mo\",output:\"\\u0393\",ttype:CONST},{input:\"\\\\Delta\",tag:\"mo\",output:\"\\u0394\",ttype:CONST},{input:\"\\\\Theta\",tag:\"mo\",output:\"\\u0398\",ttype:CONST},{input:\"\\\\Lambda\",tag:\"mo\",output:\"\\u039B\",ttype:CONST},{input:\"\\\\Xi\",tag:\"mo\",output:\"\\u039E\",ttype:CONST},{input:\"\\\\Pi\",tag:\"mo\",output:\"\\u03A0\",ttype:CONST},{input:\"\\\\Sigma\",tag:\"mo\",output:\"\\u03A3\",ttype:CONST},{input:\"\\\\Upsilon\",tag:\"mo\",output:\"\\u03A5\",ttype:CONST},{input:\"\\\\Phi\",tag:\"mo\",output:\"\\u03A6\",ttype:CONST},{input:\"\\\\Psi\",tag:\"mo\",output:\"\\u03A8\",ttype:CONST},{input:\"\\\\Omega\",tag:\"mo\",output:\"\\u03A9\",ttype:CONST},{input:\"\\\\frac12\",tag:\"mo\",output:\"\\u00BD\",ttype:CONST},{input:\"\\\\frac14\",tag:\"mo\",output:\"\\u00BC\",ttype:CONST},{input:\"\\\\frac34\",tag:\"mo\",output:\"\\u00BE\",ttype:CONST},{input:\"\\\\frac13\",tag:\"mo\",output:\"\\u2153\",ttype:CONST},{input:\"\\\\frac23\",tag:\"mo\",output:\"\\u2154\",ttype:CONST},{input:\"\\\\frac15\",tag:\"mo\",output:\"\\u2155\",ttype:CONST},{input:\"\\\\frac25\",tag:\"mo\",output:\"\\u2156\",ttype:CONST},{input:\"\\\\frac35\",tag:\"mo\",output:\"\\u2157\",ttype:CONST},{input:\"\\\\frac45\",tag:\"mo\",output:\"\\u2158\",ttype:CONST},{input:\"\\\\frac16\",tag:\"mo\",output:\"\\u2159\",ttype:CONST},{input:\"\\\\frac56\",tag:\"mo\",output:\"\\u215A\",ttype:CONST},{input:\"\\\\frac18\",tag:\"mo\",output:\"\\u215B\",ttype:CONST},{input:\"\\\\frac38\",tag:\"mo\",output:\"\\u215C\",ttype:CONST},{input:\"\\\\frac58\",tag:\"mo\",output:\"\\u215D\",ttype:CONST},{input:\"\\\\frac78\",tag:\"mo\",output:\"\\u215E\",ttype:CONST},{input:\"\\\\pm\",tag:\"mo\",output:\"\\u00B1\",ttype:CONST},{input:\"\\\\mp\",tag:\"mo\",output:\"\\u2213\",ttype:CONST},{input:\"\\\\triangleleft\",tag:\"mo\",output:\"\\u22B2\",ttype:CONST},{input:\"\\\\triangleright\",tag:\"mo\",output:\"\\u22B3\",ttype:CONST},{input:\"\\\\cdot\",tag:\"mo\",output:\"\\u22C5\",ttype:CONST},{input:\"\\\\star\",tag:\"mo\",output:\"\\u22C6\",ttype:CONST},{input:\"\\\\ast\",tag:\"mo\",output:\"\\u002A\",ttype:CONST},{input:\"\\\\times\",tag:\"mo\",output:\"\\u00D7\",ttype:CONST},{input:\"\\\\div\",tag:\"mo\",output:\"\\u00F7\",ttype:CONST},{input:\"\\\\circ\",tag:\"mo\",output:\"\\u2218\",ttype:CONST},{input:\"\\\\bullet\",tag:\"mo\",output:\"\\u2022\",ttype:CONST},{input:\"\\\\oplus\",tag:\"mo\",output:\"\\u2295\",ttype:CONST},{input:\"\\\\ominus\",tag:\"mo\",output:\"\\u2296\",ttype:CONST},{input:\"\\\\otimes\",tag:\"mo\",output:\"\\u2297\",ttype:CONST},{input:\"\\\\bigcirc\",tag:\"mo\",output:\"\\u25CB\",ttype:CONST},{input:\"\\\\oslash\",tag:\"mo\",output:\"\\u2298\",ttype:CONST},{input:\"\\\\odot\",tag:\"mo\",output:\"\\u2299\",ttype:CONST},{input:\"\\\\land\",tag:\"mo\",output:\"\\u2227\",ttype:CONST},{input:\"\\\\wedge\",tag:\"mo\",output:\"\\u2227\",ttype:CONST},{input:\"\\\\lor\",tag:\"mo\",output:\"\\u2228\",ttype:CONST},{input:\"\\\\vee\",tag:\"mo\",output:\"\\u2228\",ttype:CONST},{input:\"\\\\cap\",tag:\"mo\",output:\"\\u2229\",ttype:CONST},{input:\"\\\\cup\",tag:\"mo\",output:\"\\u222A\",ttype:CONST},{input:\"\\\\sqcap\",tag:\"mo\",output:\"\\u2293\",ttype:CONST},{input:\"\\\\sqcup\",tag:\"mo\",output:\"\\u2294\",ttype:CONST},{input:\"\\\\uplus\",tag:\"mo\",output:\"\\u228E\",ttype:CONST},{input:\"\\\\amalg\",tag:\"mo\",output:\"\\u2210\",ttype:CONST},{input:\"\\\\bigtriangleup\",tag:\"mo\",output:\"\\u25B3\",ttype:CONST},{input:\"\\\\bigtriangledown\",tag:\"mo\",output:\"\\u25BD\",ttype:CONST},{input:\"\\\\dag\",tag:\"mo\",output:\"\\u2020\",ttype:CONST},{input:\"\\\\dagger\",tag:\"mo\",output:\"\\u2020\",ttype:CONST},{input:\"\\\\ddag\",tag:\"mo\",output:\"\\u2021\",ttype:CONST},{input:\"\\\\ddagger\",tag:\"mo\",output:\"\\u2021\",ttype:CONST},{input:\"\\\\lhd\",tag:\"mo\",output:\"\\u22B2\",ttype:CONST},{input:\"\\\\rhd\",tag:\"mo\",output:\"\\u22B3\",ttype:CONST},{input:\"\\\\unlhd\",tag:\"mo\",output:\"\\u22B4\",ttype:CONST},{input:\"\\\\unrhd\",tag:\"mo\",output:\"\\u22B5\",ttype:CONST},{input:\"\\\\sum\",tag:\"mo\",output:\"\\u2211\",ttype:UNDEROVER},{input:\"\\\\prod\",tag:\"mo\",output:\"\\u220F\",ttype:UNDEROVER},{input:\"\\\\bigcap\",tag:\"mo\",output:\"\\u22C2\",ttype:UNDEROVER},{input:\"\\\\bigcup\",tag:\"mo\",output:\"\\u22C3\",ttype:UNDEROVER},{input:\"\\\\bigwedge\",tag:\"mo\",output:\"\\u22C0\",ttype:UNDEROVER},{input:\"\\\\bigvee\",tag:\"mo\",output:\"\\u22C1\",ttype:UNDEROVER},{input:\"\\\\bigsqcap\",tag:\"mo\",output:\"\\u2A05\",ttype:UNDEROVER},{input:\"\\\\bigsqcup\",tag:\"mo\",output:\"\\u2A06\",ttype:UNDEROVER},{input:\"\\\\coprod\",tag:\"mo\",output:\"\\u2210\",ttype:UNDEROVER},{input:\"\\\\bigoplus\",tag:\"mo\",output:\"\\u2A01\",ttype:UNDEROVER},{input:\"\\\\bigotimes\",tag:\"mo\",output:\"\\u2A02\",ttype:UNDEROVER},{input:\"\\\\bigodot\",tag:\"mo\",output:\"\\u2A00\",ttype:UNDEROVER},{input:\"\\\\biguplus\",tag:\"mo\",output:\"\\u2A04\",ttype:UNDEROVER},{input:\"\\\\int\",tag:\"mo\",output:\"\\u222B\",ttype:CONST},{input:\"\\\\oint\",tag:\"mo\",output:\"\\u222E\",ttype:CONST},{input:\":=\",tag:\"mo\",output:\":=\",ttype:CONST},{input:\"\\\\lt\",tag:\"mo\",output:\"<\",ttype:CONST},{input:\"\\\\gt\",tag:\"mo\",output:\">\",ttype:CONST},{input:\"\\\\ne\",tag:\"mo\",output:\"\\u2260\",ttype:CONST},{input:\"\\\\neq\",tag:\"mo\",output:\"\\u2260\",ttype:CONST},{input:\"\\\\le\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\leq\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\leqslant\",tag:\"mo\",output:\"\\u2264\",ttype:CONST},{input:\"\\\\ge\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\geq\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\geqslant\",tag:\"mo\",output:\"\\u2265\",ttype:CONST},{input:\"\\\\equiv\",tag:\"mo\",output:\"\\u2261\",ttype:CONST},{input:\"\\\\ll\",tag:\"mo\",output:\"\\u226A\",ttype:CONST},{input:\"\\\\gg\",tag:\"mo\",output:\"\\u226B\",ttype:CONST},{input:\"\\\\doteq\",tag:\"mo\",output:\"\\u2250\",ttype:CONST},{input:\"\\\\prec\",tag:\"mo\",output:\"\\u227A\",ttype:CONST},{input:\"\\\\succ\",tag:\"mo\",output:\"\\u227B\",ttype:CONST},{input:\"\\\\preceq\",tag:\"mo\",output:\"\\u227C\",ttype:CONST},{input:\"\\\\succeq\",tag:\"mo\",output:\"\\u227D\",ttype:CONST},{input:\"\\\\subset\",tag:\"mo\",output:\"\\u2282\",ttype:CONST},{input:\"\\\\supset\",tag:\"mo\",output:\"\\u2283\",ttype:CONST},{input:\"\\\\subseteq\",tag:\"mo\",output:\"\\u2286\",ttype:CONST},{input:\"\\\\supseteq\",tag:\"mo\",output:\"\\u2287\",ttype:CONST},{input:\"\\\\sqsubset\",tag:\"mo\",output:\"\\u228F\",ttype:CONST},{input:\"\\\\sqsupset\",tag:\"mo\",output:\"\\u2290\",ttype:CONST},{input:\"\\\\sqsubseteq\",tag:\"mo\",output:\"\\u2291\",ttype:CONST},{input:\"\\\\sqsupseteq\",tag:\"mo\",output:\"\\u2292\",ttype:CONST},{input:\"\\\\sim\",tag:\"mo\",output:\"\\u223C\",ttype:CONST},{input:\"\\\\simeq\",tag:\"mo\",output:\"\\u2243\",ttype:CONST},{input:\"\\\\approx\",tag:\"mo\",output:\"\\u2248\",ttype:CONST},{input:\"\\\\cong\",tag:\"mo\",output:\"\\u2245\",ttype:CONST},{input:\"\\\\Join\",tag:\"mo\",output:\"\\u22C8\",ttype:CONST},{input:\"\\\\bowtie\",tag:\"mo\",output:\"\\u22C8\",ttype:CONST},{input:\"\\\\in\",tag:\"mo\",output:\"\\u2208\",ttype:CONST},{input:\"\\\\ni\",tag:\"mo\",output:\"\\u220B\",ttype:CONST},{input:\"\\\\owns\",tag:\"mo\",output:\"\\u220B\",ttype:CONST},{input:\"\\\\propto\",tag:\"mo\",output:\"\\u221D\",ttype:CONST},{input:\"\\\\vdash\",tag:\"mo\",output:\"\\u22A2\",ttype:CONST},{input:\"\\\\dashv\",tag:\"mo\",output:\"\\u22A3\",ttype:CONST},{input:\"\\\\models\",tag:\"mo\",output:\"\\u22A8\",ttype:CONST},{input:\"\\\\perp\",tag:\"mo\",output:\"\\u22A5\",ttype:CONST},{input:\"\\\\smile\",tag:\"mo\",output:\"\\u2323\",ttype:CONST},{input:\"\\\\frown\",tag:\"mo\",output:\"\\u2322\",ttype:CONST},{input:\"\\\\asymp\",tag:\"mo\",output:\"\\u224D\",ttype:CONST},{input:\"\\\\notin\",tag:\"mo\",output:\"\\u2209\",ttype:CONST},{input:\"\\\\begin{eqnarray}\",output:\"X\",ttype:MATRIX,invisible:true},{input:\"\\\\begin{array}\",output:\"X\",ttype:MATRIX,invisible:true},{input:\"\\\\\\\\\",output:\"}&{\",ttype:DEFINITION},{input:\"\\\\end{eqnarray}\",output:\"}}\",ttype:DEFINITION},{input:\"\\\\end{array}\",output:\"}}\",ttype:DEFINITION},{input:\"\\\\big\",tag:\"mo\",output:\"X\",atval:\"1.2\",ieval:\"2.2\",ttype:BIG},{input:\"\\\\Big\",tag:\"mo\",output:\"X\",atval:\"1.6\",ieval:\"2.6\",ttype:BIG},{input:\"\\\\bigg\",tag:\"mo\",output:\"X\",atval:\"2.2\",ieval:\"3.2\",ttype:BIG},{input:\"\\\\Bigg\",tag:\"mo\",output:\"X\",atval:\"2.9\",ieval:\"3.9\",ttype:BIG},{input:\"\\\\left\",tag:\"mo\",output:\"X\",ttype:LEFTBRACKET},{input:\"\\\\right\",tag:\"mo\",output:\"X\",ttype:RIGHTBRACKET},{input:\"{\",output:\"{\",ttype:LEFTBRACKET,invisible:true},{input:\"}\",output:\"}\",ttype:RIGHTBRACKET,invisible:true},{input:\"(\",tag:\"mo\",output:\"(\",atval:\"1\",ttype:STRETCHY},{input:\"[\",tag:\"mo\",output:\"[\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lbrack\",tag:\"mo\",output:\"[\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\{\",tag:\"mo\",output:\"{\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lbrace\",tag:\"mo\",output:\"{\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\langle\",tag:\"mo\",output:\"\\u2329\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lfloor\",tag:\"mo\",output:\"\\u230A\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\lceil\",tag:\"mo\",output:\"\\u2308\",atval:\"1\",ttype:STRETCHY},{input:\")\",tag:\"mo\",output:\")\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"]\",tag:\"mo\",output:\"]\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rbrack\",tag:\"mo\",output:\"]\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\}\",tag:\"mo\",output:\"}\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rbrace\",tag:\"mo\",output:\"}\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rangle\",tag:\"mo\",output:\"\\u232A\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rfloor\",tag:\"mo\",output:\"\\u230B\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\rceil\",tag:\"mo\",output:\"\\u2309\",rtag:\"mi\",atval:\"1\",ttype:STRETCHY},{input:\"|\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\|\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\vert\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\Vert\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\mid\",tag:\"mo\",output:\"\\u2223\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\parallel\",tag:\"mo\",output:\"\\u2225\",atval:\"1\",ttype:STRETCHY},{input:\"/\",tag:\"mo\",output:\"/\",atval:\"1.01\",ttype:STRETCHY},{input:\"\\\\backslash\",tag:\"mo\",output:\"\\u2216\",atval:\"1\",ttype:STRETCHY},{input:\"\\\\setminus\",tag:\"mo\",output:\"\\\\\",ttype:CONST},{input:\"\\\\!\",tag:\"mspace\",atname:\"width\",atval:\"-0.167em\",ttype:SPACE},{input:\"\\\\,\",tag:\"mspace\",atname:\"width\",atval:\"0.167em\",ttype:SPACE},{input:\"\\\\>\",tag:\"mspace\",atname:\"width\",atval:\"0.222em\",ttype:SPACE},{input:\"\\\\:\",tag:\"mspace\",atname:\"width\",atval:\"0.222em\",ttype:SPACE},{input:\"\\\\;\",tag:\"mspace\",atname:\"width\",atval:\"0.278em\",ttype:SPACE},{input:\"~\",tag:\"mspace\",atname:\"width\",atval:\"0.333em\",ttype:SPACE},{input:\"\\\\quad\",tag:\"mspace\",atname:\"width\",atval:\"1em\",ttype:SPACE},{input:\"\\\\qquad\",tag:\"mspace\",atname:\"width\",atval:\"2em\",ttype:SPACE},{input:\"\\\\prime\",tag:\"mo\",output:\"\\u2032\",ttype:CONST},{input:\"'\",tag:\"mo\",output:\"\\u02B9\",ttype:CONST},{input:\"''\",tag:\"mo\",output:\"\\u02BA\",ttype:CONST},{input:\"'''\",tag:\"mo\",output:\"\\u2034\",ttype:CONST},{input:\"''''\",tag:\"mo\",output:\"\\u2057\",ttype:CONST},{input:\"\\\\ldots\",tag:\"mo\",output:\"\\u2026\",ttype:CONST},{input:\"\\\\cdots\",tag:\"mo\",output:\"\\u22EF\",ttype:CONST},{input:\"\\\\vdots\",tag:\"mo\",output:\"\\u22EE\",ttype:CONST},{input:\"\\\\ddots\",tag:\"mo\",output:\"\\u22F1\",ttype:CONST},{input:\"\\\\forall\",tag:\"mo\",output:\"\\u2200\",ttype:CONST},{input:\"\\\\exists\",tag:\"mo\",output:\"\\u2203\",ttype:CONST},{input:\"\\\\Re\",tag:\"mo\",output:\"\\u211C\",ttype:CONST},{input:\"\\\\Im\",tag:\"mo\",output:\"\\u2111\",ttype:CONST},{input:\"\\\\aleph\",tag:\"mo\",output:\"\\u2135\",ttype:CONST},{input:\"\\\\hbar\",tag:\"mo\",output:\"\\u210F\",ttype:CONST},{input:\"\\\\ell\",tag:\"mo\",output:\"\\u2113\",ttype:CONST},{input:\"\\\\wp\",tag:\"mo\",output:\"\\u2118\",ttype:CONST},{input:\"\\\\emptyset\",tag:\"mo\",output:\"\\u2205\",ttype:CONST},{input:\"\\\\infty\",tag:\"mo\",output:\"\\u221E\",ttype:CONST},{input:\"\\\\surd\",tag:\"mo\",output:\"\\\\sqrt{}\",ttype:DEFINITION},{input:\"\\\\partial\",tag:\"mo\",output:\"\\u2202\",ttype:CONST},{input:\"\\\\nabla\",tag:\"mo\",output:\"\\u2207\",ttype:CONST},{input:\"\\\\triangle\",tag:\"mo\",output:\"\\u25B3\",ttype:CONST},{input:\"\\\\therefore\",tag:\"mo\",output:\"\\u2234\",ttype:CONST},{input:\"\\\\angle\",tag:\"mo\",output:\"\\u2220\",ttype:CONST},{input:\"\\\\diamond\",tag:\"mo\",output:\"\\u22C4\",ttype:CONST},{input:\"\\\\Diamond\",tag:\"mo\",output:\"\\u25C7\",ttype:CONST},{input:\"\\\\neg\",tag:\"mo\",output:\"\\u00AC\",ttype:CONST},{input:\"\\\\lnot\",tag:\"mo\",output:\"\\u00AC\",ttype:CONST},{input:\"\\\\bot\",tag:\"mo\",output:\"\\u22A5\",ttype:CONST},{input:\"\\\\top\",tag:\"mo\",output:\"\\u22A4\",ttype:CONST},{input:\"\\\\square\",tag:\"mo\",output:\"\\u25AB\",ttype:CONST},{input:\"\\\\Box\",tag:\"mo\",output:\"\\u25A1\",ttype:CONST},{input:\"\\\\wr\",tag:\"mo\",output:\"\\u2240\",ttype:CONST},{input:\"\\\\arccos\",tag:\"mi\",output:\"arccos\",ttype:UNARY,func:true},{input:\"\\\\arcsin\",tag:\"mi\",output:\"arcsin\",ttype:UNARY,func:true},{input:\"\\\\arctan\",tag:\"mi\",output:\"arctan\",ttype:UNARY,func:true},{input:\"\\\\arg\",tag:\"mi\",output:\"arg\",ttype:UNARY,func:true},{input:\"\\\\cos\",tag:\"mi\",output:\"cos\",ttype:UNARY,func:true},{input:\"\\\\cosh\",tag:\"mi\",output:\"cosh\",ttype:UNARY,func:true},{input:\"\\\\cot\",tag:\"mi\",output:\"cot\",ttype:UNARY,func:true},{input:\"\\\\coth\",tag:\"mi\",output:\"coth\",ttype:UNARY,func:true},{input:\"\\\\csc\",tag:\"mi\",output:\"csc\",ttype:UNARY,func:true},{input:\"\\\\deg\",tag:\"mi\",output:\"deg\",ttype:UNARY,func:true},{input:\"\\\\det\",tag:\"mi\",output:\"det\",ttype:UNARY,func:true},{input:\"\\\\dim\",tag:\"mi\",output:\"dim\",ttype:UNARY,func:true},{input:\"\\\\exp\",tag:\"mi\",output:\"exp\",ttype:UNARY,func:true},{input:\"\\\\gcd\",tag:\"mi\",output:\"gcd\",ttype:UNARY,func:true},{input:\"\\\\hom\",tag:\"mi\",output:\"hom\",ttype:UNARY,func:true},{input:\"\\\\inf\",tag:\"mo\",output:\"inf\",ttype:UNDEROVER},{input:\"\\\\ker\",tag:\"mi\",output:\"ker\",ttype:UNARY,func:true},{input:\"\\\\lg\",tag:\"mi\",output:\"lg\",ttype:UNARY,func:true},{input:\"\\\\lim\",tag:\"mo\",output:\"lim\",ttype:UNDEROVER},{input:\"\\\\liminf\",tag:\"mo\",output:\"liminf\",ttype:UNDEROVER},{input:\"\\\\limsup\",tag:\"mo\",output:\"limsup\",ttype:UNDEROVER},{input:\"\\\\ln\",tag:\"mi\",output:\"ln\",ttype:UNARY,func:true},{input:\"\\\\log\",tag:\"mi\",output:\"log\",ttype:UNARY,func:true},{input:\"\\\\max\",tag:\"mo\",output:\"max\",ttype:UNDEROVER},{input:\"\\\\min\",tag:\"mo\",output:\"min\",ttype:UNDEROVER},{input:\"\\\\Pr\",tag:\"mi\",output:\"Pr\",ttype:UNARY,func:true},{input:\"\\\\sec\",tag:\"mi\",output:\"sec\",ttype:UNARY,func:true},{input:\"\\\\sin\",tag:\"mi\",output:\"sin\",ttype:UNARY,func:true},{input:\"\\\\sinh\",tag:\"mi\",output:\"sinh\",ttype:UNARY,func:true},{input:\"\\\\sup\",tag:\"mo\",output:\"sup\",ttype:UNDEROVER},{input:\"\\\\tan\",tag:\"mi\",output:\"tan\",ttype:UNARY,func:true},{input:\"\\\\tanh\",tag:\"mi\",output:\"tanh\",ttype:UNARY,func:true},{input:\"\\\\gets\",tag:\"mo\",output:\"\\u2190\",ttype:CONST},{input:\"\\\\leftarrow\",tag:\"mo\",output:\"\\u2190\",ttype:CONST},{input:\"\\\\to\",tag:\"mo\",output:\"\\u2192\",ttype:CONST},{input:\"\\\\rightarrow\",tag:\"mo\",output:\"\\u2192\",ttype:CONST},{input:\"\\\\leftrightarrow\",tag:\"mo\",output:\"\\u2194\",ttype:CONST},{input:\"\\\\uparrow\",tag:\"mo\",output:\"\\u2191\",ttype:CONST},{input:\"\\\\downarrow\",tag:\"mo\",output:\"\\u2193\",ttype:CONST},{input:\"\\\\updownarrow\",tag:\"mo\",output:\"\\u2195\",ttype:CONST},{input:\"\\\\Leftarrow\",tag:\"mo\",output:\"\\u21D0\",ttype:CONST},{input:\"\\\\Rightarrow\",tag:\"mo\",output:\"\\u21D2\",ttype:CONST},{input:\"\\\\Leftrightarrow\",tag:\"mo\",output:\"\\u21D4\",ttype:CONST},{input:\"\\\\iff\",tag:\"mo\",output:\"~\\\\Longleftrightarrow~\",ttype:DEFINITION},{input:\"\\\\Uparrow\",tag:\"mo\",output:\"\\u21D1\",ttype:CONST},{input:\"\\\\Downarrow\",tag:\"mo\",output:\"\\u21D3\",ttype:CONST},{input:\"\\\\Updownarrow\",tag:\"mo\",output:\"\\u21D5\",ttype:CONST},{input:\"\\\\mapsto\",tag:\"mo\",output:\"\\u21A6\",ttype:CONST},{input:\"\\\\longleftarrow\",tag:\"mo\",output:\"\\u2190\",ttype:LONG},{input:\"\\\\longrightarrow\",tag:\"mo\",output:\"\\u2192\",ttype:LONG},{input:\"\\\\longleftrightarrow\",tag:\"mo\",output:\"\\u2194\",ttype:LONG},{input:\"\\\\Longleftarrow\",tag:\"mo\",output:\"\\u21D0\",ttype:LONG},{input:\"\\\\Longrightarrow\",tag:\"mo\",output:\"\\u21D2\",ttype:LONG},{input:\"\\\\Longleftrightarrow\",tag:\"mo\",output:\"\\u21D4\",ttype:LONG},{input:\"\\\\longmapsto\",tag:\"mo\",output:\"\\u21A6\",ttype:CONST},AMsqrt,AMroot,AMfrac,AMover,AMsub,AMsup,AMtext,AMmbox,AMatop,AMchoose,{input:\"\\\\acute\",tag:\"mover\",output:\"\\u00B4\",ttype:UNARY,acc:true},{input:\"\\\\grave\",tag:\"mover\",output:\"\\u0060\",ttype:UNARY,acc:true},{input:\"\\\\breve\",tag:\"mover\",output:\"\\u02D8\",ttype:UNARY,acc:true},{input:\"\\\\check\",tag:\"mover\",output:\"\\u02C7\",ttype:UNARY,acc:true},{input:\"\\\\dot\",tag:\"mover\",output:\".\",ttype:UNARY,acc:true},{input:\"\\\\ddot\",tag:\"mover\",output:\"..\",ttype:UNARY,acc:true},{input:\"\\\\mathring\",tag:\"mover\",output:\"\\u00B0\",ttype:UNARY,acc:true},{input:\"\\\\vec\",tag:\"mover\",output:\"\\u20D7\",ttype:UNARY,acc:true},{input:\"\\\\overrightarrow\",tag:\"mover\",output:\"\\u20D7\",ttype:UNARY,acc:true},{input:\"\\\\overleftarrow\",tag:\"mover\",output:\"\\u20D6\",ttype:UNARY,acc:true},{input:\"\\\\hat\",tag:\"mover\",output:\"\\u005E\",ttype:UNARY,acc:true},{input:\"\\\\widehat\",tag:\"mover\",output:\"\\u0302\",ttype:UNARY,acc:true},{input:\"\\\\tilde\",tag:\"mover\",output:\"~\",ttype:UNARY,acc:true},{input:\"\\\\widetilde\",tag:\"mover\",output:\"\\u02DC\",ttype:UNARY,acc:true},{input:\"\\\\bar\",tag:\"mover\",output:\"\\u203E\",ttype:UNARY,acc:true},{input:\"\\\\overbrace\",tag:\"mover\",output:\"\\uFE37\",ttype:UNARY,acc:true},{input:\"\\\\overbracket\",tag:\"mover\",output:\"\\u23B4\",ttype:UNARY,acc:true},{input:\"\\\\overline\",tag:\"mover\",output:\"\\u00AF\",ttype:UNARY,acc:true},{input:\"\\\\underbrace\",tag:\"munder\",output:\"\\uFE38\",ttype:UNARY,acc:true},{input:\"\\\\underbracket\",tag:\"munder\",output:\"\\u23B5\",ttype:UNARY,acc:true},{input:\"\\\\underline\",tag:\"munder\",output:\"\\u00AF\",ttype:UNARY,acc:true},{input:\"\\\\displaystyle\",tag:\"mstyle\",atname:\"displaystyle\",atval:\"true\",ttype:UNARY},{input:\"\\\\textstyle\",tag:\"mstyle\",atname:\"displaystyle\",atval:\"false\",ttype:UNARY},{input:\"\\\\scriptstyle\",tag:\"mstyle\",atname:\"scriptlevel\",atval:\"1\",ttype:UNARY},{input:\"\\\\scriptscriptstyle\",tag:\"mstyle\",atname:\"scriptlevel\",atval:\"2\",ttype:UNARY},{input:\"\\\\textrm\",tag:\"mstyle\",output:\"\\\\mathrm\",ttype:DEFINITION},{input:\"\\\\mathbf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"bold\",ttype:UNARY},{input:\"\\\\textbf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"bold\",ttype:UNARY},{input:\"\\\\mathit\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"italic\",ttype:UNARY},{input:\"\\\\textit\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"italic\",ttype:UNARY},{input:\"\\\\mathtt\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"monospace\",ttype:UNARY},{input:\"\\\\texttt\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"monospace\",ttype:UNARY},{input:\"\\\\mathsf\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"sans-serif\",ttype:UNARY},{input:\"\\\\mathbb\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"double-struck\",ttype:UNARY,codes:AMbbb},{input:\"\\\\mathcal\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"script\",ttype:UNARY,codes:AMcal},{input:\"\\\\mathfrak\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"fraktur\",ttype:UNARY,codes:AMfrk},{input:\"\\\\textcolor\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"mathcolor\",ttype:BINARY},{input:\"\\\\colorbox\",tag:\"mstyle\",atname:\"mathvariant\",atval:\"background\",ttype:BINARY}];function compareNames(s1,s2){if(s1.input>s2.input)return 1\nelse return-1;}\nvar AMnames=[];function AMinitSymbols(){AMsymbols.sort(compareNames);for(i=0;i<AMsymbols.length;i++)AMnames[i]=AMsymbols[i].input;}\nvar AMmathml=\"http://www.w3.org/1998/Math/MathML\";function AMcreateElementMathML(t){if(isIE)return document.createElement(\"m:\"+t);else return document.createElementNS(AMmathml,t);}\nfunction AMcreateMmlNode(t,frag){if(isIE)var node=document.createElement(\"m:\"+t);else var node=document.createElementNS(AMmathml,t);node.appendChild(frag);return node;}\nfunction newcommand(oldstr,newstr){AMsymbols=AMsymbols.concat([{input:oldstr,tag:\"mo\",output:newstr,ttype:DEFINITION}]);}\nfunction AMremoveCharsAndBlanks(str,n){var st;st=str.slice(n);for(var i=0;i<st.length&&st.charCodeAt(i)<=32;i=i+1);return st.slice(i);}\nfunction AMposition(arr,str,n){if(n==0){var h,m;n=-1;h=arr.length;while(n+1<h){m=(n+h)>>1;if(arr[m]<str)n=m;else h=m;}\nreturn h;}else\nfor(var i=n;i<arr.length&&arr[i]<str;i++);return i;}\nfunction AMgetSymbol(str){var k=0;var j=0;var mk;var st;var tagst;var match=\"\";var more=true;for(var i=1;i<=str.length&&more;i++){st=str.slice(0,i);j=k;k=AMposition(AMnames,st,j);if(k<AMnames.length&&str.slice(0,AMnames[k].length)==AMnames[k]){match=AMnames[k];mk=k;i=match.length;}\nmore=k<AMnames.length&&str.slice(0,AMnames[k].length)>=AMnames[k];}\nAMpreviousSymbol=AMcurrentSymbol;if(match!=\"\"){AMcurrentSymbol=AMsymbols[mk].ttype;return AMsymbols[mk];}\nAMcurrentSymbol=CONST;k=1;st=str.slice(0,1);if(\"0\"<=st&&st<=\"9\")tagst=\"mn\";else tagst=((\"A\">st||st>\"Z\")&&(\"a\">st||st>\"z\")?\"mo\":\"mi\");return{input:st,tag:tagst,output:st,ttype:CONST};}\nvar AMpreviousSymbol,AMcurrentSymbol;function AMparseSexpr(str){var symbol,node,result,result2,i,st,newFrag=document.createDocumentFragment();str=AMremoveCharsAndBlanks(str,0);symbol=AMgetSymbol(str);if(symbol==null||symbol.ttype==RIGHTBRACKET)\nreturn[null,str,null];if(symbol.ttype==DEFINITION){str=symbol.output+AMremoveCharsAndBlanks(str,symbol.input.length);symbol=AMgetSymbol(str);if(symbol==null||symbol.ttype==RIGHTBRACKET)\nreturn[null,str,null];}\nstr=AMremoveCharsAndBlanks(str,symbol.input.length);switch(symbol.ttype){case SPACE:node=AMcreateElementMathML(symbol.tag);node.setAttribute(symbol.atname,symbol.atval);return[node,str,symbol.tag];case UNDEROVER:if(isIE){if(symbol.input.substr(0,4)==\"\\\\big\"){str=\"\\\\\"+symbol.input.substr(4)+str;symbol=AMgetSymbol(str);symbol.ttype=UNDEROVER;str=AMremoveCharsAndBlanks(str,symbol.input.length);}}\nreturn[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];case CONST:var output=symbol.output;if(isIE){if(symbol.input==\"'\")\noutput=\"\\u2032\";else if(symbol.input==\"''\")\noutput=\"\\u2033\";else if(symbol.input==\"'''\")\noutput=\"\\u2033\\u2032\";else if(symbol.input==\"''''\")\noutput=\"\\u2033\\u2033\";else if(symbol.input==\"\\\\square\")\noutput=\"\\u25A1\";else if(symbol.input.substr(0,5)==\"\\\\frac\"){var denom=symbol.input.substr(6,1);if(denom==\"5\"||denom==\"6\"){str=symbol.input.replace(/\\\\frac/,\"\\\\frac \")+str;return[node,str,symbol.tag];}}}\nnode=AMcreateMmlNode(symbol.tag,document.createTextNode(output));return[node,str,symbol.tag];case LONG:node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));node.setAttribute(\"minsize\",\"1.5\");node.setAttribute(\"maxsize\",\"1.5\");node=AMcreateMmlNode(\"mover\",node);node.appendChild(AMcreateElementMathML(\"mspace\"));return[node,str,symbol.tag];case STRETCHY:if(isIE&&symbol.input==\"\\\\backslash\")\nsymbol.output=\"\\\\\";node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));if(symbol.input==\"|\"||symbol.input==\"\\\\vert\"||symbol.input==\"\\\\|\"||symbol.input==\"\\\\Vert\"){node.setAttribute(\"lspace\",\"0em\");node.setAttribute(\"rspace\",\"0em\");}\nnode.setAttribute(\"maxsize\",symbol.atval);if(symbol.rtag!=null)\nreturn[node,str,symbol.rtag];else\nreturn[node,str,symbol.tag];case BIG:var atval=symbol.atval;if(isIE)\natval=symbol.ieval;symbol=AMgetSymbol(str);if(symbol==null)\nreturn[null,str,null];str=AMremoveCharsAndBlanks(str,symbol.input.length);node=AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output));if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"height\",atval+\"ex\");node=AMcreateMmlNode(\"mrow\",node);node.appendChild(space);}else{node.setAttribute(\"minsize\",atval);node.setAttribute(\"maxsize\",atval);}\nreturn[node,str,symbol.tag];case LEFTBRACKET:if(symbol.input==\"\\\\left\"){symbol=AMgetSymbol(str);if(symbol!=null){if(symbol.input==\".\")\nsymbol.invisible=true;str=AMremoveCharsAndBlanks(str,symbol.input.length);}}\nresult=AMparseExpr(str,true,false);if(symbol==null||(typeof symbol.invisible==\"boolean\"&&symbol.invisible))\nnode=AMcreateMmlNode(\"mrow\",result[0]);else{node=AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));node=AMcreateMmlNode(\"mrow\",node);node.appendChild(result[0]);}\nreturn[node,result[1],result[2]];case MATRIX:if(symbol.input==\"\\\\begin{array}\"){var mask=\"\";symbol=AMgetSymbol(str);str=AMremoveCharsAndBlanks(str,0);if(symbol==null)\nmask=\"l\";else{str=AMremoveCharsAndBlanks(str,symbol.input.length);if(symbol.input!=\"{\")\nmask=\"l\";else do{symbol=AMgetSymbol(str);if(symbol!=null){str=AMremoveCharsAndBlanks(str,symbol.input.length);if(symbol.input!=\"}\")\nmask=mask+symbol.input;}}while(symbol!=null&&symbol.input!=\"\"&&symbol.input!=\"}\");}\nresult=AMparseExpr(\"{\"+str,true,true);node=AMcreateMmlNode(\"mtable\",result[0]);mask=mask.replace(/l/g,\"left \");mask=mask.replace(/r/g,\"right \");mask=mask.replace(/c/g,\"center \");node.setAttribute(\"columnalign\",mask);node.setAttribute(\"displaystyle\",\"false\");if(isIE)\nreturn[node,result[1],null];var lspace=AMcreateElementMathML(\"mspace\");lspace.setAttribute(\"width\",\"0.167em\");var rspace=AMcreateElementMathML(\"mspace\");rspace.setAttribute(\"width\",\"0.167em\");var node1=AMcreateMmlNode(\"mrow\",lspace);node1.appendChild(node);node1.appendChild(rspace);return[node1,result[1],null];}else{result=AMparseExpr(\"{\"+str,true,true);node=AMcreateMmlNode(\"mtable\",result[0]);if(isIE)\nnode.setAttribute(\"columnspacing\",\"0.25em\");else\nnode.setAttribute(\"columnspacing\",\"0.167em\");node.setAttribute(\"columnalign\",\"right center left\");node.setAttribute(\"displaystyle\",\"true\");node=AMcreateMmlNode(\"mrow\",node);return[node,result[1],null];}\ncase TEXT:if(str.charAt(0)==\"{\")i=str.indexOf(\"}\");else i=0;if(i==-1)\ni=str.length;st=str.slice(1,i);if(st.charAt(0)==\" \"){node=AMcreateElementMathML(\"mspace\");node.setAttribute(\"width\",\"0.33em\");newFrag.appendChild(node);}\nnewFrag.appendChild(AMcreateMmlNode(symbol.tag,document.createTextNode(st)));if(st.charAt(st.length-1)==\" \"){node=AMcreateElementMathML(\"mspace\");node.setAttribute(\"width\",\"0.33em\");newFrag.appendChild(node);}\nstr=AMremoveCharsAndBlanks(str,i+1);return[AMcreateMmlNode(\"mrow\",newFrag),str,null];case UNARY:result=AMparseSexpr(str);if(result[0]==null)return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str];if(typeof symbol.func==\"boolean\"&&symbol.func){st=str.charAt(0);if(st==\"^\"||st==\"_\"||st==\",\"){return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];}else{node=AMcreateMmlNode(\"mrow\",AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)));if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"width\",\"0.167em\");node.appendChild(space);}\nnode.appendChild(result[0]);return[node,result[1],symbol.tag];}}\nif(symbol.input==\"\\\\sqrt\"){if(isIE){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"height\",\"1.2ex\");space.setAttribute(\"width\",\"0em\");node=AMcreateMmlNode(symbol.tag,result[0])\nnode.appendChild(space);return[node,result[1],symbol.tag];}else\nreturn[AMcreateMmlNode(symbol.tag,result[0]),result[1],symbol.tag];}else if(typeof symbol.acc==\"boolean\"&&symbol.acc){node=AMcreateMmlNode(symbol.tag,result[0]);var output=symbol.output;if(isIE){if(symbol.input==\"\\\\hat\")\noutput=\"\\u0302\";else if(symbol.input==\"\\\\widehat\")\noutput=\"\\u005E\";else if(symbol.input==\"\\\\bar\")\noutput=\"\\u00AF\";else if(symbol.input==\"\\\\grave\")\noutput=\"\\u0300\";else if(symbol.input==\"\\\\tilde\")\noutput=\"\\u0303\";}\nvar node1=AMcreateMmlNode(\"mo\",document.createTextNode(output));if(symbol.input==\"\\\\vec\"||symbol.input==\"\\\\check\")\nnode1.setAttribute(\"maxsize\",\"1.2\");if(isIE&&symbol.input==\"\\\\bar\")\nnode1.setAttribute(\"maxsize\",\"0.5\");if(symbol.input==\"\\\\underbrace\"||symbol.input==\"\\\\underline\")\nnode1.setAttribute(\"accentunder\",\"true\");else\nnode1.setAttribute(\"accent\",\"true\");node.appendChild(node1);if(symbol.input==\"\\\\overbrace\"||symbol.input==\"\\\\underbrace\")\nnode.ttype=UNDEROVER;return[node,result[1],symbol.tag];}else{if(!isIE&&typeof symbol.codes!=\"undefined\"){for(i=0;i<result[0].childNodes.length;i++)\nif(result[0].childNodes[i].nodeName==\"mi\"||result[0].nodeName==\"mi\"){st=(result[0].nodeName==\"mi\"?result[0].firstChild.nodeValue:result[0].childNodes[i].firstChild.nodeValue);var newst=[];for(var j=0;j<st.length;j++)\nif(st.charCodeAt(j)>64&&st.charCodeAt(j)<91)newst=newst+\nString.fromCharCode(symbol.codes[st.charCodeAt(j)-65]);else newst=newst+st.charAt(j);if(result[0].nodeName==\"mi\")\nresult[0]=AMcreateElementMathML(\"mo\").appendChild(document.createTextNode(newst));else result[0].replaceChild(AMcreateElementMathML(\"mo\").appendChild(document.createTextNode(newst)),result[0].childNodes[i]);}}\nnode=AMcreateMmlNode(symbol.tag,result[0]);node.setAttribute(symbol.atname,symbol.atval);if(symbol.input==\"\\\\scriptstyle\"||symbol.input==\"\\\\scriptscriptstyle\")\nnode.setAttribute(\"displaystyle\",\"false\");return[node,result[1],symbol.tag];}\ncase BINARY:result=AMparseSexpr(str);if(result[0]==null)return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.input)),str,null];result2=AMparseSexpr(result[1]);if(result2[0]==null)return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.input)),str,null];if(symbol.input==\"\\\\textcolor\"||symbol.input==\"\\\\colorbox\"){var tclr=str.match(/\\{\\s*([#\\w]+)\\s*\\}/);str=str.replace(/\\{\\s*[#\\w]+\\s*\\}/,\"\");if(tclr!=null){if(IsColorName.test(tclr[1].toLowerCase())){tclr=LaTeXColor[tclr[1].toLowerCase()];}else{tclr=tclr[1];}\nnode=AMcreateElementMathML(\"mstyle\");node.setAttribute(symbol.atval,tclr);node.appendChild(result2[0]);return[node,result2[1],symbol.tag];}}\nif(symbol.input==\"\\\\root\"||symbol.input==\"\\\\stackrel\")newFrag.appendChild(result2[0]);newFrag.appendChild(result[0]);if(symbol.input==\"\\\\frac\")newFrag.appendChild(result2[0]);return[AMcreateMmlNode(symbol.tag,newFrag),result2[1],symbol.tag];case INFIX:str=AMremoveCharsAndBlanks(str,symbol.input.length);return[AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output)),str,symbol.tag];default:return[AMcreateMmlNode(symbol.tag,document.createTextNode(symbol.output)),str,symbol.tag];}}\nfunction AMparseIexpr(str){var symbol,sym1,sym2,node,result,tag,underover;str=AMremoveCharsAndBlanks(str,0);sym1=AMgetSymbol(str);result=AMparseSexpr(str);node=result[0];str=result[1];tag=result[2];symbol=AMgetSymbol(str);if(symbol.ttype==INFIX){str=AMremoveCharsAndBlanks(str,symbol.input.length);result=AMparseSexpr(str);if(result[0]==null)\nresult[0]=AMcreateMmlNode(\"mo\",document.createTextNode(\"\\u25A1\"));str=result[1];tag=result[2];if(symbol.input==\"_\"||symbol.input==\"^\"){sym2=AMgetSymbol(str);tag=null;underover=((sym1.ttype==UNDEROVER)||(node.ttype==UNDEROVER));if(symbol.input==\"_\"&&sym2.input==\"^\"){str=AMremoveCharsAndBlanks(str,sym2.input.length);var res2=AMparseSexpr(str);str=res2[1];tag=res2[2];node=AMcreateMmlNode((underover?\"munderover\":\"msubsup\"),node);node.appendChild(result[0]);node.appendChild(res2[0]);}else if(symbol.input==\"_\"){node=AMcreateMmlNode((underover?\"munder\":\"msub\"),node);node.appendChild(result[0]);}else{node=AMcreateMmlNode((underover?\"mover\":\"msup\"),node);node.appendChild(result[0]);}\nnode=AMcreateMmlNode(\"mrow\",node);}else{node=AMcreateMmlNode(symbol.tag,node);if(symbol.input==\"\\\\atop\"||symbol.input==\"\\\\choose\")\nnode.setAttribute(\"linethickness\",\"0ex\");node.appendChild(result[0]);if(symbol.input==\"\\\\choose\")\nnode=AMcreateMmlNode(\"mfenced\",node);}}\nreturn[node,str,tag];}\nfunction AMparseExpr(str,rightbracket,matrix){var symbol,node,result,i,tag,newFrag=document.createDocumentFragment();do{str=AMremoveCharsAndBlanks(str,0);result=AMparseIexpr(str);node=result[0];str=result[1];tag=result[2];symbol=AMgetSymbol(str);if(node!=undefined){if((tag==\"mn\"||tag==\"mi\")&&symbol!=null&&typeof symbol.func==\"boolean\"&&symbol.func){var space=AMcreateElementMathML(\"mspace\");space.setAttribute(\"width\",\"0.167em\");node=AMcreateMmlNode(\"mrow\",node);node.appendChild(space);}\nnewFrag.appendChild(node);}}while((symbol.ttype!=RIGHTBRACKET)&&symbol!=null&&symbol.output!=\"\");tag=null;if(symbol.ttype==RIGHTBRACKET){if(symbol.input==\"\\\\right\"){str=AMremoveCharsAndBlanks(str,symbol.input.length);symbol=AMgetSymbol(str);if(symbol!=null&&symbol.input==\".\")\nsymbol.invisible=true;if(symbol!=null)\ntag=symbol.rtag;}\nif(symbol!=null)\nstr=AMremoveCharsAndBlanks(str,symbol.input.length);var len=newFrag.childNodes.length;if(matrix&&len>0&&newFrag.childNodes[len-1].nodeName==\"mrow\"&&len>1&&newFrag.childNodes[len-2].nodeName==\"mo\"&&newFrag.childNodes[len-2].firstChild.nodeValue==\"&\"){var pos=[];var m=newFrag.childNodes.length;for(i=0;matrix&&i<m;i=i+2){pos[i]=[];node=newFrag.childNodes[i];for(var j=0;j<node.childNodes.length;j++)\nif(node.childNodes[j].firstChild.nodeValue==\"&\")\npos[i][pos[i].length]=j;}\nvar row,frag,n,k,table=document.createDocumentFragment();for(i=0;i<m;i=i+2){row=document.createDocumentFragment();frag=document.createDocumentFragment();node=newFrag.firstChild;n=node.childNodes.length;k=0;for(j=0;j<n;j++){if(typeof pos[i][k]!=\"undefined\"&&j==pos[i][k]){node.removeChild(node.firstChild);row.appendChild(AMcreateMmlNode(\"mtd\",frag));k++;}else frag.appendChild(node.firstChild);}\nrow.appendChild(AMcreateMmlNode(\"mtd\",frag));if(newFrag.childNodes.length>2){newFrag.removeChild(newFrag.firstChild);newFrag.removeChild(newFrag.firstChild);}\ntable.appendChild(AMcreateMmlNode(\"mtr\",row));}\nreturn[table,str];}\nif(typeof symbol.invisible!=\"boolean\"||!symbol.invisible){node=AMcreateMmlNode(\"mo\",document.createTextNode(symbol.output));newFrag.appendChild(node);}}\nreturn[newFrag,str,tag];}\nfunction AMparseMath(str){var result,node=AMcreateElementMathML(\"mstyle\");var cclr=str.match(/\\\\color\\s*\\{\\s*([#\\w]+)\\s*\\}/);str=str.replace(/\\\\color\\s*\\{\\s*[#\\w]+\\s*\\}/g,\"\");if(cclr!=null){if(IsColorName.test(cclr[1].toLowerCase())){cclr=LaTeXColor[cclr[1].toLowerCase()];}else{cclr=cclr[1];}\nnode.setAttribute(\"mathcolor\",cclr);}else{if(mathcolor!=\"\")node.setAttribute(\"mathcolor\",mathcolor);};if(mathfontfamily!=\"\")node.setAttribute(\"fontfamily\",mathfontfamily);node.appendChild(AMparseExpr(str.replace(/^\\s+/g,\"\"),false,false)[0]);node=AMcreateMmlNode(\"math\",node);if(showasciiformulaonhover)\nnode.setAttribute(\"title\",str.replace(/\\s+/g,\" \"));if(false){var fnode=AMcreateElementXHTML(\"font\");fnode.setAttribute(\"face\",mathfontfamily);fnode.appendChild(node);return fnode;}\nreturn node;}\nfunction AMstrarr2docFrag(arr,linebreaks){var newFrag=document.createDocumentFragment();var expr=false;for(var i=0;i<arr.length;i++){if(expr)newFrag.appendChild(AMparseMath(arr[i]));else{var arri=(linebreaks?arr[i].split(\"\\n\\n\"):[arr[i]]);newFrag.appendChild(AMcreateElementXHTML(\"span\").appendChild(document.createTextNode(arri[0])));for(var j=1;j<arri.length;j++){newFrag.appendChild(AMcreateElementXHTML(\"p\"));newFrag.appendChild(AMcreateElementXHTML(\"span\").appendChild(document.createTextNode(arri[j])));}}\nexpr=!expr;}\nreturn newFrag;}\nfunction AMprocessNodeR(n,linebreaks){var mtch,str,arr,frg,i;if(n.childNodes.length==0){if((n.nodeType!=8||linebreaks)&&n.parentNode.nodeName!=\"form\"&&n.parentNode.nodeName!=\"FORM\"&&n.parentNode.nodeName!=\"textarea\"&&n.parentNode.nodeName!=\"TEXTAREA\"&&n.parentNode.nodeName!=\"pre\"&&n.parentNode.nodeName!=\"PRE\"){str=n.nodeValue;if(!(str==null)){str=str.replace(/\\r\\n\\r\\n/g,\"\\n\\n\");str=str.replace(/\\x20+/g,\" \");str=str.replace(/\\s*\\r\\n/g,\" \");mtch=(str.indexOf(\"\\$\")==-1?false:true);str=str.replace(/([^\\\\])\\$/g,\"$1 \\$\");str=str.replace(/^\\$/,\" \\$\");arr=str.split(\" \\$\");for(i=0;i<arr.length;i++)\narr[i]=arr[i].replace(/\\\\\\$/g,\"\\$\");if(arr.length>1||mtch){if(checkForMathML){checkForMathML=false;var nd=AMisMathMLavailable();AMnoMathML=nd!=null;if(AMnoMathML&&notifyIfNoMathML)\nif(alertIfNoMathML)\nalert(\"To view the ASCIIMathML notation use Internet Explorer 6 +\\nMathPlayer (free from www.dessci.com)\\nor Firefox/Mozilla/Netscape\");else AMbody.insertBefore(nd,AMbody.childNodes[0]);}\nif(!AMnoMathML){frg=AMstrarr2docFrag(arr,n.nodeType==8);var len=frg.childNodes.length;n.parentNode.replaceChild(frg,n);return len-1;}else return 0;}}}else return 0;}else if(n.nodeName!=\"math\"){for(i=0;i<n.childNodes.length;i++)\ni+=AMprocessNodeR(n.childNodes[i],linebreaks);}\nreturn 0;}\nfunction AMprocessNode(n,linebreaks,spanclassAM){var frag,st;if(spanclassAM!=null){frag=document.getElementsByTagName(\"span\")\nfor(var i=0;i<frag.length;i++)\nif(frag[i].className==\"AM\")\nAMprocessNodeR(frag[i],linebreaks);}else{try{st=n.innerHTML;}catch(err){}\nif(st==null||st.indexOf(\"\\$\")!=-1)\nAMprocessNodeR(n,linebreaks);}\nif(isIE){frag=document.getElementsByTagName('math');for(var i=0;i<frag.length;i++)frag[i].update()}}\nvar inAppendix=false;var sectionCntr=0;var IEcommentWarning=true;var biblist=[];var bibcntr=0;var LaTeXCounter=[];LaTeXCounter[\"definition\"]=0;LaTeXCounter[\"proposition\"]=0;LaTeXCounter[\"lemma\"]=0;LaTeXCounter[\"theorem\"]=0;LaTeXCounter[\"corollary\"]=0;LaTeXCounter[\"example\"]=0;LaTeXCounter[\"exercise\"]=0;LaTeXCounter[\"subsection\"]=0;LaTeXCounter[\"subsubsection\"]=0;LaTeXCounter[\"figure\"]=0;LaTeXCounter[\"equation\"]=0;LaTeXCounter[\"table\"]=0;var LaTeXColor=[];LaTeXColor[\"greenyellow\"]=\"#D9FF4F\";LaTeXColor[\"yellow\"]=\"#FFFF00\";LaTeXColor[\"goldenrod\"]=\"#FFE529\";LaTeXColor[\"dandelion\"]=\"#FFB529\";LaTeXColor[\"apricot\"]=\"#FFAD7A\";LaTeXColor[\"peach\"]=\"#FF804D\";LaTeXColor[\"melon\"]=\"#FF8A80\";LaTeXColor[\"yelloworange\"]=\"#FF9400\";LaTeXColor[\"orange\"]=\"#FF6321\";LaTeXColor[\"burntorange\"]=\"#FF7D00\";LaTeXColor[\"bittersweet\"]=\"#C20300\";LaTeXColor[\"redorange\"]=\"#FF3B21\";LaTeXColor[\"mahogany\"]=\"#A60000\";LaTeXColor[\"maroon\"]=\"#AD0000\";LaTeXColor[\"brickred\"]=\"#B80000\";LaTeXColor[\"red\"]=\"#FF0000\";LaTeXColor[\"orangered\"]=\"#FF0080\";LaTeXColor[\"rubinered\"]=\"#FF00DE\";LaTeXColor[\"wildstrawberry\"]=\"#FF0A9C\";LaTeXColor[\"salmon\"]=\"#FF789E\";LaTeXColor[\"carnationpink\"]=\"#FF5EFF\";LaTeXColor[\"magenta\"]=\"#FF00FF\";LaTeXColor[\"violetred\"]=\"#FF30FF\";LaTeXColor[\"rhodamine\"]=\"#FF2EFF\";LaTeXColor[\"mulberry\"]=\"#A314FA\";LaTeXColor[\"redviolet\"]=\"#9600A8\";LaTeXColor[\"fuchsia\"]=\"#7303EB\";LaTeXColor[\"lavender\"]=\"#FF85FF\";LaTeXColor[\"thistle\"]=\"#E069FF\";LaTeXColor[\"orchid\"]=\"#AD5CFF\";LaTeXColor[\"darkorchid\"]=\"#9933CC\";LaTeXColor[\"purple\"]=\"#8C24FF\";LaTeXColor[\"plum\"]=\"#8000FF\";LaTeXColor[\"violet\"]=\"#361FFF\";LaTeXColor[\"royalpurple\"]=\"#401AFF\";LaTeXColor[\"blueviolet\"]=\"#1A0DF5\";LaTeXColor[\"periwinkle\"]=\"#6E73FF\";LaTeXColor[\"cadetblue\"]=\"#616EC4\";LaTeXColor[\"cornflowerblue\"]=\"#59DEFF\";LaTeXColor[\"midnightblue\"]=\"#007091\";LaTeXColor[\"navyblue\"]=\"#0F75FF\";LaTeXColor[\"royalblue\"]=\"#0080FF\";LaTeXColor[\"blue\"]=\"#0000FF\";LaTeXColor[\"cerulean\"]=\"#0FE3FF\";LaTeXColor[\"cyan\"]=\"#00FFFF\";LaTeXColor[\"processblue\"]=\"#0AFFFF\";LaTeXColor[\"skyblue\"]=\"#61FFE0\";LaTeXColor[\"turquoise\"]=\"#26FFCC\";LaTeXColor[\"tealblue\"]=\"#1FFAA3\";LaTeXColor[\"aquamarine\"]=\"#2EFFB2\";LaTeXColor[\"bluegreen\"]=\"#26FFAB\";LaTeXColor[\"emerald\"]=\"#00FF80\";LaTeXColor[\"junglegreen\"]=\"#03FF7A\";LaTeXColor[\"seagreen\"]=\"#4FFF80\";LaTeXColor[\"green\"]=\"#00FF00\";LaTeXColor[\"forestgreen\"]=\"#00E000\";LaTeXColor[\"pinegreen\"]=\"#00BF29\";LaTeXColor[\"limegreen\"]=\"#80FF00\";LaTeXColor[\"yellowgreen\"]=\"#8FFF42\";LaTeXColor[\"springgreen\"]=\"#BDFF3D\";LaTeXColor[\"olivegreen\"]=\"#009900\";LaTeXColor[\"rawsienna\"]=\"#8C0000\";LaTeXColor[\"sepia\"]=\"#4D0000\";LaTeXColor[\"brown\"]=\"#660000\";LaTeXColor[\"tan\"]=\"#DB9470\";LaTeXColor[\"gray\"]=\"#808080\";LaTeXColor[\"grey\"]=\"#808080\";LaTeXColor[\"black\"]=\"#000000\";LaTeXColor[\"white\"]=\"#FFFFFF\";var IsColorName=/^(?:greenyellow|yellow|goldenrod|dandelion|apricot|peach|melon|yelloworange|orange|burntorange|bittersweet|redorange|mahogany|maroon|brickred|red|orangered|rubinered|wildstrawberry|salmon|carnationpink|magenta|violetred|rhodamine|mulberry|redviolet|fuchsia|lavender|thistle|orchid|darkorchid|purple|plum|violet|royalpurple|blueviolet|periwinkle|cadetblue|cornflowerblue|midnightblue|navyblue|royalblue|blue|cerulean|cyan|processblue|skyblue|turquoise|tealblue|aquamarine|bluegreen|emerald|junglegreen|seagreen|green|forestgreen|pinegreen|limegreen|yellowgreen|springgreen|olivegreen|rawsienna|sepia|brown|tan|gray|grey|black|white)$/;var IsCounter=/^(?:definition|proposition|lemma|theorem|corollary|example|exercise|subsection|subsubsection|figure|equation|table)$/;var IsLaTeXElement=/^(?:displayequation|title|author|address|date|abstract|keyword|section|subsection|subsubsection|ref|cite|thebibliography|definition|proposition|lemma|theorem|corollary|example|exercise|itemize|enumerate|enddefinition|endproposition|endlemma|endtheorem|endcorollary|endexample|endexercise|enditemize|endenumerate|LaTeXMathMLlabel|LaTeXMathML|smallskip|medskip|bigskip|quote|quotation|endquote|endquotation|center|endcenter|description|enddescription|inlinemath)$/;var IsTextOnlyArea=/^(?:form|textarea|pre)$/i;var tableid=0;function makeNumberString(cntr){if(sectionCntr>0){if(inAppendix){return\"A\"+sectionCntr+\".\"+cntr;}else{return sectionCntr+\".\"+cntr;}}else{return\"\"+cntr;}};function LaTeXpreProcess(thebody){var TheBody=thebody;if(TheBody.hasChildNodes()){if(!(IsLaTeXElement.test(TheBody.className)))\n{for(var i=0;i<TheBody.childNodes.length;i++){LaTeXpreProcess(TheBody.childNodes[i])}}}\nelse{if(TheBody.nodeType==3&&!(IsTextOnlyArea.test(TheBody.parentNode.nodeName)))\n{var str=TheBody.nodeValue;if(!(str==null)){str=str.replace(/\\\\%/g,\"<per>\");str=str.replace(/%[^\\n]*(?=\\n)/g,\"\");str=str.replace(/%[^\\r]*(?=\\r)/g,\"\");str=str.replace(/%[^\\n]*$/,\"\")\nif(isIE&&str.match(/%/g)!=null&&IEcommentWarning){alert(\"Comments may not have parsed properly.  Try putting in <pre class='LaTeX><div>..</div></pre> structure.\");IEcommentWarning=false;}\nstr=str.replace(/<per>/g,\"%\");if(str.match(/XXX[\\s\\S]*/)!=null){var tmp=str.match(/XXX[\\s\\S]*/)[0];var tmpstr=tmp.charCodeAt(7)+\"::\"+tmp.charCodeAt(8)+\"::\"+tmp.charCodeAt(9)+\"::\"+tmp.charCodeAt(10)+\"::\"+tmp.charCodeAt(11)+\"::\"+tmp.charCodeAt(12)+\"::\"+tmp.charCodeAt(13);alert(tmpstr);}\nstr=str.replace(/([^\\\\])\\\\(\\s)/g,\"$1\\u00A0$2\");str=str.replace(/\\\\quad/g,\"\\u2001\");str=str.replace(/\\\\qquad/g,\"\\u2001\\u2001\");str=str.replace(/\\\\enspace/g,\"\\u2002\");str=str.replace(/\\\\;/g,\"\\u2004\");str=str.replace(/\\\\:/g,\"\\u2005\");str=str.replace(/\\\\,/g,\"\\u2006\");str=str.replace(/\\\\thinspace/g,\"\\u200A\");str=str.replace(/([^\\\\])~/g,\"$1\\u00A0\");str=str.replace(/\\\\~/g,\"~\");str=str.replace(/\\\\\\[/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\\\]/g,\"}$ <DEQ> \");str=str.replace(/\\$\\$/g,\"${$<DEQ>$}$\");str=str.replace(/\\\\begin\\s*\\{\\s*array\\s*\\}/g,\"\\\\begin{array}\");str=str.replace(/\\\\end\\s*\\{\\s*array\\s*\\}/g,\"\\\\end{array}\");str=str.replace(/\\\\begin\\s*\\{\\s*eqnarray\\s*\\}/g,\"  <DEQ>eqno$\\\\begin{eqnarray}\");str=str.replace(/\\\\end\\s*\\{\\s*eqnarray\\s*\\}/g,\"\\\\end{eqnarray}$<DEQ>  \");str=str.replace(/\\\\begin\\s*\\{\\s*eqnarray\\*\\s*\\}/g,\"  <DEQ>$\\\\begin{eqnarray}\");str=str.replace(/\\\\end\\s*\\{\\s*eqnarray\\*\\s*\\}/g,\"\\\\end{eqnarray}$<DEQ>  \");str=str.replace(/\\\\begin\\s*\\{\\s*displaymath\\s*\\}/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*displaymath\\s*\\}/g,\"}$ <DEQ> \");str=str.replace(/\\\\begin\\s*\\{\\s*equation\\s*\\*\\s*\\}/g,\" <DEQ> $\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*equation\\s*\\*\\s*\\}/g,\"}$ <DEQ> \");str=str.replace(/\\\\begin\\s*\\{\\s*equation\\s*\\}/g,\" <DEQ>eqno$\\\\displaystyle{\");str=str.replace(/\\\\end\\s*\\{\\s*equation\\s*\\}/g,\"}$ <DEQ> \");str=str.split(\"<DEQ>\");var newFrag=document.createDocumentFragment();for(var i=0;i<str.length;i++){if(i%2){var DEQtable=document.createElement(\"table\");DEQtable.className='displayequation';var DEQtbody=document.createElement(\"tbody\");var DEQtr=document.createElement(\"tr\");var DEQtdeq=document.createElement(\"td\");DEQtdeq.className='eq';str[i]=str[i].replace(/\\$\\}\\$/g,\"$\\\\displaystyle{\");str[i]=str[i].replace(/\\$\\{\\$/g,\"}\");var lbl=str[i].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);var ISeqno=str[i].match(/^eqno/);str[i]=str[i].replace(/^eqno/,\" \");str[i]=str[i].replace(/\\\\label\\s*\\{\\s*\\w+\\s*\\}/,\" \");DEQtdeq.appendChild(document.createTextNode(str[i]));DEQtr.appendChild(DEQtdeq);str[i]=str[i].replace(/\\\\nonumber/g,\"\");if(ISeqno!=null||lbl!=null){var DEQtdno=document.createElement(\"td\");DEQtdno.className='eqno';LaTeXCounter[\"equation\"]++;var eqnoString=makeNumberString(LaTeXCounter[\"equation\"]);var DEQanchor=document.createElement(\"a\");if(lbl!=null){DEQanchor.id=lbl[1]};DEQanchor.className=\"eqno\";var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"eqno\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(eqnoString));DEQanchor.appendChild(anchorSpan);DEQtdno.appendChild(DEQanchor);var DEQspan=document.createElement(\"span\");DEQspan.className=\"eqno\";DEQspan.appendChild(document.createTextNode(\"(\"+eqnoString+\")\"));DEQtdno.appendChild(DEQspan);DEQtr.appendChild(DEQtdno);}\nDEQtbody.appendChild(DEQtr);DEQtable.appendChild(DEQtbody);newFrag.appendChild(DEQtable);}\nelse{str[i]=str[i].replace(/\\$\\}\\$/g,\"\");str[i]=str[i].replace(/\\$\\{\\$/g,\"\");str[i]=str[i].replace(/\\\\maketitle/g,\"\");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*document\\s*\\}/g,\"\");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*document\\s*\\}/g,\"\");str[i]=str[i].replace(/\\\\documentclass[^\\}]*?\\}/g,\"\");str[i]=str[i].replace(/\\\\usepackage[^\\}]*?\\}/g,\"\");str[i]=str[i].replace(/\\\\noindent/g,\"\");str[i]=str[i].replace(/\\\\notag/g,\"\");str[i]=str[i].replace(/\\\\ref\\s*\\{\\s*(\\w+)\\}/g,\" \\\\[ref\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\url\\s*\\{\\s*([^\\}\\n]+)\\}/g,\" \\\\[url\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\href\\s*\\{\\s*([^\\}]+)\\}\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[href\\\\]$1\\\\]$2\\\\[ \");str[i]=str[i].replace(/\\\\cite\\s*\\{\\s*(\\w+)\\}/g,\" \\\\[cite\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\qed/g,\"\\u220E\");str[i]=str[i].replace(/\\\\endproof/g,\"\\u220E\");str[i]=str[i].replace(/\\\\proof/g,\"\\\\textbf{Proof: }\");str[i]=str[i].replace(/\\\\n(?=\\s)/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\newline/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\linebreak/g,\" \\\\[br\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\smallskip/g,\" \\\\[logicalbreak\\\\]smallskip\\\\[ \");str[i]=str[i].replace(/\\\\medskip/g,\" \\\\[logicalbreak\\\\]medskip\\\\[ \");str[i]=str[i].replace(/\\\\bigskip/g,\" \\\\[logicalbreak\\\\]bigskip\\\\[ \");str[i]=str[i].replace(/[\\n\\r]+[ \\f\\n\\r\\t\\v\\u2028\\u2029]*[\\n\\r]+/g,\" \\\\[logicalbreak\\\\]LaTeXMathML\\\\[ \");if(isIE){str[i]=str[i].replace(/\\r/g,\" \");}\nstr[i]=str[i].replace(/\\\\bibitem\\s*([^\\{]*\\{\\s*\\w*\\s*\\})/g,\" \\\\[bibitem\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\bibitem\\s*/g,\" \\\\[bibitem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\item\\s*\\[\\s*(\\w+)\\s*\\]/g,\" \\\\[alistitem\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\item\\s*/g,\" \\\\[alistitem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\appendix/g,\" \\\\[appendix\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*figure\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*figure\\s*\\}/g,\" \\\\[figure\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*table\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*table\\s*\\}/g,\" \\\\[table\\\\]$1\\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*theorem\\s*\\}/g,\" \\\\[theorem\\\\]Theorem \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*theorem\\s*\\}/g,\" \\\\[endtheorem\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*definition\\s*\\}/g,\" \\\\[definition\\\\]Definition \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*definition\\s*\\}/g,\" \\\\[enddefinition\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*lemma\\s*\\}/g,\" \\\\[lemma\\\\]Lemma \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*lemma\\s*\\}/g,\" \\\\[endlemma\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*corollary\\s*\\}/g,\" \\\\[corollary\\\\]Corollary \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*corollary\\s*\\}/g,\" \\\\[endcorollary\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*proposition\\s*\\}/g,\" \\\\[proposition\\\\]Proposition \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proposition\\s*\\}/g,\" \\\\[endproposition\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*example\\s*\\}/g,\" \\\\[example\\\\]Example \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*example\\s*\\}/g,\" \\\\[endexample\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*exercise\\s*\\}/g,\" \\\\[exercise\\\\]Exercise \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*exercise\\s*\\}/g,\" \\\\[endexercise\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*thebibliography\\s*\\}\\s*\\{\\s*\\w+\\s*\\}/g,\" \\\\[thebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*thebibliography\\s*\\}/g,\" \\\\[thebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*thebibliography\\s*\\}/g,\" \\\\[endthebibliography\\\\]References \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*proof\\s*\\}/g,\" \\\\[proof\\\\]Proof: \\\\[ \");if(isIE){str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proof\\s*\\}/g,\"\\u220E \\\\[endproof\\\\] \\\\[ \");}else{str[i]=str[i].replace(/\\\\end\\s*\\{\\s*proof\\s*\\}/g,\" \\\\[endproof\\\\] \\\\[ \");}\nstr[i]=str[i].replace(/\\\\title\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[title\\\\] \\\\[$1 \\\\[endtitle\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\author\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[author\\\\] \\\\[$1 \\\\[endauthor\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\address\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[address\\\\] \\\\[$1 \\\\[endaddress\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\date\\s*\\{\\s*([^\\}]+)\\}/g,\" \\\\[date\\\\] \\\\[$1 \\\\[enddate\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*keyword\\s*\\}/g,\" \\\\[keyword\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*keyword\\s*\\}/g,\" \\\\[endkeyword\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*abstract\\s*\\}/g,\" \\\\[abstract\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*abstract\\s*\\}/g,\" \\\\[endabstract\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\begin\\s*\\{\\s*(?!array|tabular)(\\w+)\\s*\\}/g,\" \\\\[$1\\\\] \\\\[ \");str[i]=str[i].replace(/\\\\end\\s*\\{\\s*(?!array|tabular)(\\w+)\\s*\\}/g,\" \\\\[end$1\\\\] \\\\[ \");var sectionIndex=str[i].search(/\\\\section\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\section\\s*\\{/,\" \\\\[section\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\section\\s*\\{\\s*[\\s\\S]+\\}/);}\nsectionIndex=str[i].search(/\\\\subsection\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\subsection\\s*\\{/,\" \\\\[subsection\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\subsection\\s*\\{\\s*[\\s\\S]+\\}/);}\nsectionIndex=str[i].search(/\\\\subsubsection\\s*\\{\\s*[\\s\\S]+\\}/);while(sectionIndex>=0){str[i]=str[i].replace(/\\\\subsubsection\\s*\\{/,\" \\\\[subsubsection\\\\]\");var delimcnt=1;for(var ii=sectionIndex;ii<str[i].length;ii++){if(str[i].charAt(ii)==\"{\"){delimcnt++};if(str[i].charAt(ii)==\"}\"){delimcnt--};if(delimcnt==0){str[i]=str[i].substring(0,ii)+\"\\\\[ \"+str[i].substring(ii+1,str[i].length);break;}};sectionIndex=str[i].search(/\\\\subsubsection\\s*\\{\\s*[\\s\\S]+\\}/);}\nvar CatToNextEven=\"\";var strtmp=str[i].split(\"\\\\[\");for(var j=0;j<strtmp.length;j++){if(j%2){var strtmparray=strtmp[j].split(\"\\\\]\");switch(strtmparray[0]){case\"section\":var nodeTmp=document.createElement(\"H2\");nodeTmp.className='section';sectionCntr++;for(var div in LaTeXCounter){LaTeXCounter[div]=0};var nodeAnchor=document.createElement(\"a\");if(inAppendix){nodeAnchor.className='appendixsection';}else{nodeAnchor.className='section';}\nvar nodeNumString=makeNumberString(\"\");var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"section\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='section';nodeSpan.appendChild(document.createTextNode(nodeNumString+\" \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"subsection\":var nodeTmp=document.createElement(\"H3\");nodeTmp.className='subsection';LaTeXCounter[\"subsection\"]++;LaTeXCounter[\"subsubsection\"]=0;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className='subsection';var nodeNumString=makeNumberString(LaTeXCounter[\"subsection\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"subsection\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='subsection';nodeSpan.appendChild(document.createTextNode(nodeNumString+\". \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"subsubsection\":var nodeTmp=document.createElement(\"H4\");nodeTmp.className='subsubsection';LaTeXCounter[\"subsubsection\"]++;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className='subsubsection';var nodeNumString=makeNumberString(LaTeXCounter[\"subsection\"]+\".\"+LaTeXCounter[\"subsubsection\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"subsubsection\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(nodeNumString));nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className='subsubsection';nodeSpan.appendChild(document.createTextNode(nodeNumString+\". \"));nodeTmp.appendChild(nodeSpan);nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"href\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathML';nodeTmp.href=strtmparray[1];nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"url\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathML';nodeTmp.href=strtmparray[1];nodeTmp.appendChild(document.createTextNode(strtmparray[1]));newFrag.appendChild(nodeTmp);break;case\"figure\":var nodeTmp=document.createElement(\"table\");nodeTmp.className='figure';var FIGtbody=document.createElement(\"tbody\");var FIGlbl=strtmparray[1].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\\\label\\s*\\{\\w+\\}/g,\"\");var capIndex=strtmparray[1].search(/\\\\caption\\s*\\{[\\s\\S]+\\}/);var FIGcap=\"\";if(capIndex>=0){var tmp=strtmparray[1];var delimcnt=0;var capstart=-1;for(var pos=capIndex;pos<tmp.length;pos++){if(tmp.charAt(pos)==\"{\"){delimcnt++};if(tmp.charAt(pos)==\"}\"){delimcnt--};if(delimcnt==1&&capstart<0){capstart=pos+1};if(delimcnt==0&&capstart>0){capend=pos-1;FIGcap=tmp.substring(capstart,pos);break}}}\nvar FIGtr2=document.createElement(\"tr\");var FIGtd2=document.createElement(\"td\");FIGtd2.className=\"caption\";var FIGanchor=document.createElement(\"a\");FIGanchor.className=\"figure\";if(FIGlbl!=null){FIGanchor.id=FIGlbl[1];}\nLaTeXCounter[\"figure\"]++;var fignmbr=makeNumberString(LaTeXCounter[\"figure\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"figure\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(fignmbr));FIGanchor.appendChild(anchorSpan);FIGtd2.appendChild(FIGanchor);var FIGspan=document.createElement(\"span\");FIGspan.className=\"figure\";FIGspan.appendChild(document.createTextNode(\"Figure \"+fignmbr+\". \"));FIGtd2.appendChild(FIGspan);FIGtd2.appendChild(document.createTextNode(\"\"+FIGcap));FIGtr2.appendChild(FIGtd2);FIGtbody.appendChild(FIGtr2);var IsSpecial=false;var FIGinfo=strtmparray[1].match(/\\\\includegraphics\\s*\\{([^\\}]+)\\}/);if(FIGinfo==null){FIGinfo=strtmparray[1].match(/\\\\includegraphics\\s*\\[[^\\]]*\\]\\s*\\{\\s*([^\\}]+)\\s*\\}/);}\nif(FIGinfo==null){FIGinfo=strtmparray[1].match(/\\\\special\\s*\\{\\s*([^\\}]+)\\}/);IsSpecial=true};if(FIGinfo!=null){var FIGtr1=document.createElement(\"tr\");var FIGtd1=document.createElement(\"td\");FIGtd1.className=\"image\";var FIGimg=document.createElement(\"img\");var FIGsrc=FIGinfo[1];FIGimg.src=FIGsrc;FIGimg.alt=\"Figure \"+FIGsrc+\" did not load\";FIGimg.title=\"Figure \"+fignmbr+\". \"+FIGcap;FIGimg.id=\"figure\"+fignmbr;FIGtd1.appendChild(FIGimg);FIGtr1.appendChild(FIGtd1);FIGtbody.appendChild(FIGtr1);}\nnodeTmp.appendChild(FIGtbody);newFrag.appendChild(nodeTmp);break;case\"table\":var nodeTmp=document.createElement(\"table\");if(strtmparray[1].search(/\\\\centering/)>=0){nodeTmp.className='LaTeXtable centered';nodeTmp.align=\"center\";}else{nodeTmp.className='LaTeXtable';};tableid++;nodeTmp.id=\"LaTeXtable\"+tableid;var TABlbl=strtmparray[1].match(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\\\label\\s*\\{\\w+\\}/g,\"\");var capIndex=strtmparray[1].search(/\\\\caption\\s*\\{[\\s\\S]+\\}/);var TABcap=\"\";if(capIndex>=0){var tmp=strtmparray[1];var delimcnt=0;var capstart=-1;for(var pos=capIndex;pos<tmp.length;pos++){if(tmp.charAt(pos)==\"{\"){delimcnt++};if(tmp.charAt(pos)==\"}\"){delimcnt--};if(delimcnt==1&&capstart<0){capstart=pos+1};if(delimcnt==0&&capstart>0){capend=pos-1;TABcap=tmp.substring(capstart,pos);break}}}\nif(TABcap!=\"\"){var TABtbody=document.createElement(\"tbody\");var TABcaption=document.createElement(\"caption\");TABcaption.className=\"LaTeXtable centered\";var TABanchor=document.createElement(\"a\");TABanchor.className=\"LaTeXtable\";if(TABlbl!=null){TABanchor.id=TABlbl[1];}\nLaTeXCounter[\"table\"]++;var tabnmbr=makeNumberString(LaTeXCounter[\"table\"]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=\"LaTeXtable\";anchorSpan.style.display=\"none\";anchorSpan.appendChild(document.createTextNode(tabnmbr));TABanchor.appendChild(anchorSpan);TABcaption.appendChild(TABanchor);var TABspan=document.createElement(\"span\");TABspan.className=\"LaTeXtable\";TABspan.appendChild(document.createTextNode(\"Table \"+tabnmbr+\". \"));TABcaption.appendChild(TABspan);TABcaption.appendChild(document.createTextNode(\"\"+TABcap));nodeTmp.appendChild(TABcaption);}\nvar TABinfo=strtmparray[1].match(/\\\\begin\\s*\\{\\s*tabular\\s*\\}([\\s\\S]+)\\\\end\\s*\\{\\s*tabular\\s*\\}/);if(TABinfo!=null){var TABtbody=document.createElement('tbody');var TABrow=null;var TABcell=null;var row=0;var col=0;var TABalign=TABinfo[1].match(/^\\s*\\{([^\\}]+)\\}/);TABinfo=TABinfo[1].replace(/^\\s*\\{[^\\}]+\\}/,\"\");TABinfo=TABinfo.replace(/\\\\hline/g,\"\");TABalign[1]=TABalign[1].replace(/\\|/g,\"\");TABalign[1]=TABalign[1].replace(/\\s/g,\"\");TABinfo=TABinfo.split(\"\\\\\\\\\");for(row=0;row<TABinfo.length;row++){TABrow=document.createElement(\"tr\");TABinfo[row]=TABinfo[row].split(\"&\");for(col=0;col<TABinfo[row].length;col++){TABcell=document.createElement(\"td\");switch(TABalign[1].charAt(col)){case\"l\":TABcell.align=\"left\";break;case\"c\":TABcell.align=\"center\";break;case\"r\":TABcell.align=\"right\";break;default:TABcell.align=\"left\";};TABcell.appendChild(document.createTextNode(TABinfo[row][col]));TABrow.appendChild(TABcell);}\nTABtbody.appendChild(TABrow);}\nnodeTmp.appendChild(TABtbody);}\nnewFrag.appendChild(nodeTmp);break;case\"logicalbreak\":var nodeTmp=document.createElement(\"p\");nodeTmp.className=strtmparray[1];nodeTmp.appendChild(document.createTextNode(\"\\u00A0\"));newFrag.appendChild(nodeTmp);break;case\"appendix\":inAppendix=true;sectionCntr=0;break;case\"alistitem\":var EndDiv=document.createElement(\"div\");EndDiv.className=\"endlistitem\";newFrag.appendChild(EndDiv);var BegDiv=document.createElement(\"div\");BegDiv.className=\"listitem\";if(strtmparray[1]!=\" \"){var BegSpan=document.createElement(\"span\");BegSpan.className=\"listitemmarker\";var boldBegSpan=document.createElement(\"b\");boldBegSpan.appendChild(document.createTextNode(strtmparray[1]+\" \"));BegSpan.appendChild(boldBegSpan);BegDiv.appendChild(BegSpan);}\nnewFrag.appendChild(BegDiv);break;case\"br\":newFrag.appendChild(document.createElement(\"br\"));break;case\"bibitem\":newFrag.appendChild(document.createElement(\"br\"));var nodeTmp=document.createElement(\"a\");nodeTmp.className='bibitem';var nodeSpan=document.createElement(\"span\");nodeSpan.className='bibitem';bibcntr++;var lbl=strtmparray[1].match(/\\{\\s*(\\w+)\\s*\\}/);strtmparray[1]=strtmparray[1].replace(/\\s*\\{\\s*\\w+\\s*\\}/g,\"\");strtmparray[1]=strtmparray[1].replace(/^\\s*\\[/,\"\");strtmparray[1]=strtmparray[1].replace(/\\s*\\]$/,\"\");strtmparray[1]=strtmparray[1].replace(/^\\s+|\\s+$/g,\"\");if(lbl==null){biblist[bibcntr]=\"bibitem\"+bibcntr}else{biblist[bibcntr]=lbl[1];};nodeTmp.name=biblist[bibcntr];nodeTmp.id=biblist[bibcntr];if(strtmparray[1]!=\"\"){nodeSpan.appendChild(document.createTextNode(strtmparray[1]));}else{nodeSpan.appendChild(document.createTextNode(\"[\"+bibcntr+\"]\"));}\nnodeTmp.appendChild(nodeSpan);newFrag.appendChild(nodeTmp);break;case\"cite\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='cite';nodeTmp.name='cite';nodeTmp.href=\"#\"+strtmparray[1];newFrag.appendChild(nodeTmp);break;case\"ref\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='ref';nodeTmp.name='ref';nodeTmp.href=\"#\"+strtmparray[1];newFrag.appendChild(nodeTmp);break;default:var nodeTmp=document.createElement(\"div\");nodeTmp.className=strtmparray[0];if(IsCounter.test(strtmparray[0])){LaTeXCounter[strtmparray[0]]++;var nodeAnchor=document.createElement(\"a\");nodeAnchor.className=strtmparray[0];var divnum=makeNumberString(LaTeXCounter[strtmparray[0]]);var anchorSpan=document.createElement(\"span\");anchorSpan.className=strtmparray[0];anchorSpan.appendChild(document.createTextNode(divnum));anchorSpan.style.display=\"none\";nodeAnchor.appendChild(anchorSpan);nodeTmp.appendChild(nodeAnchor);var nodeSpan=document.createElement(\"span\");nodeSpan.className=strtmparray[0];nodeSpan.appendChild(document.createTextNode(strtmparray[1]+\" \"+divnum+\". \"));nodeTmp.appendChild(nodeSpan);}\nif(isIE){if(strtmparray[0]==(\"thebibliography\"||\"abstract\"||\"keyword\"||\"proof\")){var nodeSpan=document.createElement(\"span\");nodeSpan.className=strtmparray[0];nodeSpan.appendChild(document.createTextNode(strtmparray[1]));nodeTmp.appendChild(nodeSpan);}}\nif(strtmparray[0]==\"endenumerate\"||strtmparray[0]==\"enditemize\"||strtmparray[0]==\"enddescription\"){var endDiv=document.createElement(\"div\");endDiv.className=\"endlistitem\";newFrag.appendChild(endDiv);}\nnewFrag.appendChild(nodeTmp);if(strtmparray[0]==\"enumerate\"||strtmparray[0]==\"itemize\"||strtmparray[0]==\"description\"){var endDiv=document.createElement(\"div\");endDiv.className=\"listitem\";newFrag.appendChild(endDiv);}}}else{strtmp[j]=strtmp[j].replace(/\\\\\\$/g,\"<per>\");strtmp[j]=strtmp[j].replace(/\\$([^\\$]+)\\$/g,\" \\\\[$1\\\\[ \");strtmp[j]=strtmp[j].replace(/<per>/g,\"\\\\$\");strtmp[j]=strtmp[j].replace(/\\\\begin\\s*\\{\\s*math\\s*\\}([\\s\\S]+?)\\\\end\\s*\\{\\s*math\\s*\\}/g,\" \\\\[$1\\\\[ \");var strtmptmp=strtmp[j].split(\"\\\\[\");for(var jjj=0;jjj<strtmptmp.length;jjj++){if(jjj%2){var nodeTmp=document.createElement(\"span\");nodeTmp.className='inlinemath';nodeTmp.appendChild(document.createTextNode(\"$\"+strtmptmp[jjj]+\"$\"));newFrag.appendChild(nodeTmp);}else{var TagIndex=strtmptmp[jjj].search(/\\\\\\w+/);var tmpIndex=TagIndex;while(tmpIndex>-1){if(/^\\\\textcolor/.test(strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length))){strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\textcolor\\s*\\{\\s*(\\w+)\\s*\\}\\s*/,\" \\\\[textcolor\\\\]$1\\\\]|\");}else{if(/^\\\\colorbox/.test(strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length))){strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\colorbox\\s*\\{\\s*(\\w+)\\s*\\}\\s*/,\" \\\\[colorbox\\\\]$1\\\\]|\");}else{strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).replace(/\\\\\\s*(\\w+)\\s*/,\" \\\\[$1\\\\]|\");}}\nTagIndex+=strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).search(/\\|/);TagIndex++;strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\]\\|/,\"\\\\] \");if(strtmptmp[jjj].charAt(TagIndex)==\"{\"){strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+strtmptmp[jjj].substring(TagIndex+1,strtmptmp[jjj].length);var delimcnt=1;for(var kk=TagIndex;kk<strtmptmp[jjj].length;kk++){if(strtmptmp[jjj].charAt(kk)==\"{\"){delimcnt++};if(strtmptmp[jjj].charAt(kk)==\"}\"){delimcnt--};if(delimcnt==0){break;}}\nstrtmptmp[jjj]=strtmptmp[jjj].substring(0,kk)+\"\\\\[ \"+strtmptmp[jjj].substring(kk+1,strtmptmp[jjj].length);TagIndex=kk+3;}else{strtmptmp[jjj]=strtmptmp[jjj].substring(0,TagIndex)+\"\\\\[ \"+strtmptmp[jjj].substring(TagIndex+1,strtmptmp[jjj].length);TagIndex=TagIndex+3;}\nif(TagIndex<strtmptmp[jjj].length){tmpIndex=strtmptmp[jjj].substring(TagIndex,strtmptmp[jjj].length).search(/\\\\\\w+/);}\nelse{tmpIndex=-1};TagIndex+=tmpIndex;}\nstrtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\\\\\s*\\\\\\\\/g,\"\\\\\\\\\");strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\\\\\/g,\" \\\\[br\\\\] \\\\[ \");strtmptmp[jjj]=strtmptmp[jjj].replace(/\\\\label\\s*\\{\\s*(\\w+)\\s*\\}/g,\" \\\\[a\\\\]$1\\\\[ \");var strlbls=strtmptmp[jjj].split(\"\\\\[\");for(var jj=0;jj<strlbls.length;jj++){if(jj%2){var strtmparray=strlbls[jj].split(\"\\\\]\");switch(strtmparray[0]){case\"textcolor\":var nodeTmp=document.createElement(\"span\");nodeTmp.className='LaTeXColor';if(IsColorName.test(strtmparray[1].toLowerCase())){nodeTmp.style.color=LaTeXColor[strtmparray[1].toLowerCase()];}else{nodeTmp.style.color=strtmparray[1];};nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"colorbox\":var nodeTmp=document.createElement(\"span\");nodeTmp.className='LaTeXColor';if(IsColorName.test(strtmparray[1].toLowerCase())){nodeTmp.style.background=LaTeXColor[strtmparray[1].toLowerCase()];}else{nodeTmp.style.background=strtmparray[1];};nodeTmp.appendChild(document.createTextNode(strtmparray[2]));newFrag.appendChild(nodeTmp);break;case\"br\":newFrag.appendChild(document.createElement(\"br\"));break;case\"a\":var nodeTmp=document.createElement(\"a\");nodeTmp.className='LaTeXMathMLlabel';nodeTmp.id=strtmparray[1];nodeTmp.style.display=\"none\";newFrag.appendChild(nodeTmp);break;default:var nodeTmp=document.createElement(\"span\");nodeTmp.className=strtmparray[0];nodeTmp.appendChild(document.createTextNode(strtmparray[1]))\nnewFrag.appendChild(nodeTmp);}}else{newFrag.appendChild(document.createTextNode(strlbls[jj]));}}}}}}}};TheBody.parentNode.replaceChild(newFrag,TheBody);}}}\nreturn TheBody;}\nfunction LaTeXDivsAndRefs(thebody){var TheBody=thebody;var EndDivClass=null;var AllDivs=TheBody.getElementsByTagName(\"div\");var lbl2id=\"\";var lblnode=null;for(var i=AllDivs.length-1;i>=0;i--){EndDivClass=AllDivs[i].className.match(/end\\w+/);if(EndDivClass!=null){EndDivClass=EndDivClass[0];var DivClass=EndDivClass.substring(3,EndDivClass.length);var EndDivNode=AllDivs[i];break;}}\nwhile(EndDivClass!=null){var newFrag=document.createDocumentFragment();var RootNode=EndDivNode.parentNode;var ClassCount=1;while(EndDivNode.previousSibling!=null&&ClassCount>0){switch(EndDivNode.previousSibling.className){case EndDivClass:ClassCount++;newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);break;case DivClass:if(EndDivNode.previousSibling.nodeName==\"DIV\"){ClassCount--;if(lbl2id!=\"\"){EndDivNode.previousSibling.id=lbl2id;lbl2id=\"\"}\nif(ClassCount==0){RootNode=EndDivNode.previousSibling;}else{newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);}};break;case'LaTeXMathMLlabel':lbl2id=EndDivNode.previousSibling.id;EndDivNode.parentNode.removeChild(EndDivNode.previousSibling);break;default:newFrag.insertBefore(EndDivNode.previousSibling,newFrag.firstChild);}}\nRootNode.appendChild(newFrag);EndDivNode.parentNode.removeChild(EndDivNode);AllDivs=TheBody.getElementsByTagName(\"DIV\");for(i=AllDivs.length-1;i>=0;i--){EndDivClass=AllDivs[i].className.match(/end\\w+/);if(EndDivClass!=null){ClassCount=0;EndDivClass=EndDivClass[0];DivClass=EndDivClass.substring(3,EndDivClass.length);EndDivNode=AllDivs[i];RootNode=EndDivNode.parentNode;break;}}}\nvar AllDivs=TheBody.getElementsByTagName(\"div\");var DIV2LI=null;for(var i=0;i<AllDivs.length;i++){if(AllDivs[i].className==\"itemize\"||AllDivs[i].className==\"enumerate\"||AllDivs[i].className==\"description\"){if(AllDivs[i].className==\"itemize\"){RootNode=document.createElement(\"UL\");}else{RootNode=document.createElement(\"OL\");}\nRootNode.className='LaTeXMathML';if(AllDivs[i].hasChildNodes()){AllDivs[i].removeChild(AllDivs[i].firstChild)};while(AllDivs[i].hasChildNodes()){if(AllDivs[i].firstChild.hasChildNodes()){DIV2LI=document.createElement(\"LI\");while(AllDivs[i].firstChild.hasChildNodes()){DIV2LI.appendChild(AllDivs[i].firstChild.firstChild);}\nif(DIV2LI.firstChild.className==\"listitemmarker\"){DIV2LI.style.listStyleType=\"none\";}\nRootNode.appendChild(DIV2LI)}\nAllDivs[i].removeChild(AllDivs[i].firstChild);}\nAllDivs[i].appendChild(RootNode);}}\nvar AllAnchors=TheBody.getElementsByTagName(\"a\");for(var i=0;i<AllAnchors.length;i++){if(AllAnchors[i].className==\"ref\"||AllAnchors[i].className==\"cite\"){var label=AllAnchors[i].href.match(/\\#(\\w+)/);if(label!=null){var labelNode=document.getElementById(label[1]);if(labelNode!=null){var TheSpans=labelNode.getElementsByTagName(\"SPAN\");if(TheSpans!=null){var refNode=TheSpans[0].cloneNode(true);refNode.style.display=\"inline\"\nrefNode.className=AllAnchors[i].className;AllAnchors[i].appendChild(refNode);}}}}}\nreturn TheBody;}\nvar AMbody;var AMnoMathML=false,AMtranslated=false;function translate(spanclassAM){if(!AMtranslated){AMtranslated=true;AMinitSymbols();var LaTeXContainers=[];var AllContainers=document.getElementsByTagName('*');var ExtendName=\"\";for(var k=0,l=0;k<AllContainers.length;k++){ExtendName=\" \"+AllContainers[k].className+\" \";if(ExtendName.match(/\\sLaTeX\\s/)!=null){LaTeXContainers[l]=AllContainers[k];l++;}};if(LaTeXContainers.length>0){for(var m=0;m<LaTeXContainers.length;m++){AMbody=LaTeXContainers[m];try{AMbody=LaTeXDivsAndRefs(LaTeXpreProcess(AMbody));}catch(err){alert(\"Unknown Error: Defaulting to Original LaTeXMathML\");}\nif(AMbody.tagName==\"PRE\"){var PreChilds=document.createDocumentFragment();var DivChilds=document.createElement(\"DIV\");while(AMbody.hasChildNodes()){DivChilds.appendChild(AMbody.firstChild);}\nPreChilds.appendChild(DivChilds);AMbody.parentNode.replaceChild(PreChilds,AMbody);AMbody=DivChilds;}\nAMprocessNode(AMbody,false,spanclassAM);}}else{AMbody=document.getElementsByTagName(\"body\")[0];try{AMbody=LaTeXDivsAndRefs(LaTeXpreProcess(AMbody));}catch(err){alert(\"Unknown Error: Defaulting to Original LaTeXMathML\");}\nAMprocessNode(AMbody,false,spanclassAM);}}}\nif(isIE){document.write(\"<object id=\\\"mathplayer\\\" classid=\\\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\\\"></object>\");document.write(\"<?import namespace=\\\"m\\\" implementation=\\\"#mathplayer\\\"?>\");}\nfunction generic()\n{translate();};if(typeof window.addEventListener!='undefined')\n{window.addEventListener('load',generic,false);}\nelse if(typeof document.addEventListener!='undefined')\n{document.addEventListener('load',generic,false);}\nelse if(typeof window.attachEvent!='undefined')\n{window.attachEvent('onload',generic);}\nelse\n{if(typeof window.onload=='function')\n{var existing=onload;window.onload=function()\n{existing();generic();};}\nelse\n{window.onload=generic;}}\n"),("MathMLinHTML.js","/* \nMarch 19, 2004 MathHTML (c) Peter Jipsen http://www.chapman.edu/~jipsen\nReleased under the GNU General Public License version 2 or later.\nSee the GNU General Public License (at http://www.gnu.org/copyleft/gpl.html)\nfor more details.\n*/\n\nfunction convertMath(node) {// for Gecko\n  if (node.nodeType==1) {\n    var newnode = \n      document.createElementNS(\"http://www.w3.org/1998/Math/MathML\",\n        node.nodeName.toLowerCase());\n    for(var i=0; i < node.attributes.length; i++)\n      newnode.setAttribute(node.attributes[i].nodeName,\n        node.attributes[i].nodeValue);\n    for (var i=0; i<node.childNodes.length; i++) {\n      var st = node.childNodes[i].nodeValue;\n      if (st==null || st.slice(0,1)!=\" \" && st.slice(0,1)!=\"\\n\") \n        newnode.appendChild(convertMath(node.childNodes[i]));\n    }\n    return newnode;\n  }\n  else return node;\n}\n\nfunction convert() {\n  var mmlnode = document.getElementsByTagName(\"math\");\n  var st,str,node,newnode;\n  for (var i=0; i<mmlnode.length; i++)\n    if (document.createElementNS!=null)\n      mmlnode[i].parentNode.replaceChild(convertMath(mmlnode[i]),mmlnode[i]);\n    else { // convert for IE\n      str = \"\";\n      node = mmlnode[i];\n      while (node.nodeName!=\"/MATH\") {\n        st = node.nodeName.toLowerCase();\n        if (st==\"#text\") str += node.nodeValue;\n        else {\n          str += (st.slice(0,1)==\"/\" ? \"</m:\"+st.slice(1) : \"<m:\"+st);\n          if (st.slice(0,1)!=\"/\") \n             for(var j=0; j < node.attributes.length; j++)\n               if (node.attributes[j].nodeValue!=\"italic\" &&\n                 node.attributes[j].nodeValue!=\"\" &&\n                 node.attributes[j].nodeValue!=\"inherit\" &&\n                 node.attributes[j].nodeValue!=undefined)\n                 str += \" \"+node.attributes[j].nodeName+\"=\"+\n                     \"\\\"\"+node.attributes[j].nodeValue+\"\\\"\";\n          str += \">\";\n        }\n        node = node.nextSibling;\n        node.parentNode.removeChild(node.previousSibling);\n      }\n      str += \"</m:math>\";\n      newnode = document.createElement(\"span\");\n      node.parentNode.replaceChild(newnode,node);\n      newnode.innerHTML = str;\n    }\n}\n\nif (document.createElementNS==null) {\n  document.write(\"<object id=\\\"mathplayer\\\"\\\n  classid=\\\"clsid:32F66A20-7614-11D4-BD11-00104BD3F987\\\"></object>\");\n  document.write(\"<?import namespace=\\\"m\\\" implementation=\\\"#mathplayer\\\"?>\");\n}\nif(typeof window.addEventListener != 'undefined'){\n  window.addEventListener('load', convert, false);\n}\nif(typeof window.attachEvent != 'undefined') {\n  window.attachEvent('onload', convert);\n}\n"),("pandoc.lua","-- pandoc.lua\n-- This module contains most of David Heiko Kolf's dkjson.lua\n-- (license below), plus some functions to help with pandoc\n-- scripting in lua.\n\n    -- Module options:\n    local register_global_module_table = false\n    local global_module_name = 'json'\n\n    --[==[\n--------------------------------------------------------------------\n\n*Copyright (C) 2010-2013 David Heiko Kolf*\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\nBE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\nACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\nCONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n<!--]==]\n\n-- global dependencies:\nlocal pairs, type, tostring, tonumber, getmetatable, setmetatable, rawset =\n      pairs, type, tostring, tonumber, getmetatable, setmetatable, rawset\nlocal error, require, pcall, select = error, require, pcall, select\nlocal floor, huge = math.floor, math.huge\nlocal strrep, gsub, strsub, strbyte, strchar, strfind, strlen, strformat =\n      string.rep, string.gsub, string.sub, string.byte, string.char,\n      string.find, string.len, string.format\nlocal concat = table.concat\n\nlocal json = { version = \"dkjson 2.3\" }\n\nif register_global_module_table then\n  _G[global_module_name] = json\nend\n\nlocal _ENV = nil -- blocking globals in Lua 5.2\n\npcall (function()\n  -- Enable access to blocked metatables.\n  -- Don't worry, this module doesn't change anything in them.\n  local debmeta = require \"debug\".getmetatable\n  if debmeta then getmetatable = debmeta end\nend)\n\njson.null = setmetatable ({}, {\n  __tojson = function () return \"null\" end\n})\n\nlocal function isarray (tbl)\n  local max, n, arraylen = 0, 0, 0\n  for k,v in pairs (tbl) do\n    if k == 'n' and type(v) == 'number' then\n      arraylen = v\n      if v > max then\n        max = v\n      end\n    else\n      if type(k) ~= 'number' or k < 1 or floor(k) ~= k then\n        return false\n      end\n      if k > max then\n        max = k\n      end\n      n = n + 1\n    end\n  end\n  if max > 10 and max > arraylen and max > n * 2 then\n    return false -- don't create an array with too many holes\n  end\n  return true, max\nend\n\nlocal escapecodes = {\n  [\"\\\"\"] = \"\\\\\\\"\", [\"\\\\\"] = \"\\\\\\\\\", [\"\\b\"] = \"\\\\b\", [\"\\f\"] = \"\\\\f\",\n  [\"\\n\"] = \"\\\\n\",  [\"\\r\"] = \"\\\\r\",  [\"\\t\"] = \"\\\\t\"\n}\n\nlocal function escapeutf8 (uchar)\n  local value = escapecodes[uchar]\n  if value then\n    return value\n  end\n  local a, b, c, d = strbyte (uchar, 1, 4)\n  a, b, c, d = a or 0, b or 0, c or 0, d or 0\n  if a <= 0x7f then\n    value = a\n  elseif 0xc0 <= a and a <= 0xdf and b >= 0x80 then\n    value = (a - 0xc0) * 0x40 + b - 0x80\n  elseif 0xe0 <= a and a <= 0xef and b >= 0x80 and c >= 0x80 then\n    value = ((a - 0xe0) * 0x40 + b - 0x80) * 0x40 + c - 0x80\n  elseif 0xf0 <= a and a <= 0xf7 and b >= 0x80 and c >= 0x80 and d >= 0x80 then\n    value = (((a - 0xf0) * 0x40 + b - 0x80) * 0x40 + c - 0x80) * 0x40 + d - 0x80\n  else\n    return \"\"\n  end\n  if value <= 0xffff then\n    return strformat (\"\\\\u%.4x\", value)\n  elseif value <= 0x10ffff then\n    -- encode as UTF-16 surrogate pair\n    value = value - 0x10000\n    local highsur, lowsur = 0xD800 + floor (value/0x400), 0xDC00 + (value % 0x400)\n    return strformat (\"\\\\u%.4x\\\\u%.4x\", highsur, lowsur)\n  else\n    return \"\"\n  end\nend\n\nlocal function fsub (str, pattern, repl)\n  -- gsub always builds a new string in a buffer, even when no match\n  -- exists. First using find should be more efficient when most strings\n  -- don't contain the pattern.\n  if strfind (str, pattern) then\n    return gsub (str, pattern, repl)\n  else\n    return str\n  end\nend\n\nlocal function quotestring (value)\n  -- based on the regexp \"escapable\" in https://github.com/douglascrockford/JSON-js\n  value = fsub (value, \"[%z\\1-\\31\\\"\\\\\\127]\", escapeutf8)\n  if strfind (value, \"[\\194\\216\\220\\225\\226\\239]\") then\n    value = fsub (value, \"\\194[\\128-\\159\\173]\", escapeutf8)\n    value = fsub (value, \"\\216[\\128-\\132]\", escapeutf8)\n    value = fsub (value, \"\\220\\143\", escapeutf8)\n    value = fsub (value, \"\\225\\158[\\180\\181]\", escapeutf8)\n    value = fsub (value, \"\\226\\128[\\140-\\143\\168-\\175]\", escapeutf8)\n    value = fsub (value, \"\\226\\129[\\160-\\175]\", escapeutf8)\n    value = fsub (value, \"\\239\\187\\191\", escapeutf8)\n    value = fsub (value, \"\\239\\191[\\176-\\191]\", escapeutf8)\n  end\n  return \"\\\"\" .. value .. \"\\\"\"\nend\njson.quotestring = quotestring\n\nlocal function addnewline2 (level, buffer, buflen)\n  buffer[buflen+1] = \"\\n\"\n  buffer[buflen+2] = strrep (\"  \", level)\n  buflen = buflen + 2\n  return buflen\nend\n\nfunction json.addnewline (state)\n  if state.indent then\n    state.bufferlen = addnewline2 (state.level or 0,\n                           state.buffer, state.bufferlen or #(state.buffer))\n  end\nend\n\nlocal encode2 -- forward declaration\n\nlocal function addpair (key, value, prev, indent, level, buffer, buflen, tables, globalorder)\n  local kt = type (key)\n  if kt ~= 'string' and kt ~= 'number' then\n    return nil, \"type '\" .. kt .. \"' is not supported as a key by JSON.\"\n  end\n  if prev then\n    buflen = buflen + 1\n    buffer[buflen] = \",\"\n  end\n  if indent then\n    buflen = addnewline2 (level, buffer, buflen)\n  end\n  buffer[buflen+1] = quotestring (key)\n  buffer[buflen+2] = \":\"\n  return encode2 (value, indent, level, buffer, buflen + 2, tables, globalorder)\nend\n\nencode2 = function (value, indent, level, buffer, buflen, tables, globalorder)\n  local valtype = type (value)\n  local valmeta = getmetatable (value)\n  valmeta = type (valmeta) == 'table' and valmeta -- only tables\n  local valtojson = valmeta and valmeta.__tojson\n  if valtojson then\n    if tables[value] then\n      return nil, \"reference cycle\"\n    end\n    tables[value] = true\n    local state = {\n        indent = indent, level = level, buffer = buffer,\n        bufferlen = buflen, tables = tables, keyorder = globalorder\n    }\n    local ret, msg = valtojson (value, state)\n    if not ret then return nil, msg end\n    tables[value] = nil\n    buflen = state.bufferlen\n    if type (ret) == 'string' then\n      buflen = buflen + 1\n      buffer[buflen] = ret\n    end\n  elseif value == nil then\n    buflen = buflen + 1\n    buffer[buflen] = \"null\"\n  elseif valtype == 'number' then\n    local s\n    if value ~= value or value >= huge or -value >= huge then\n      -- This is the behaviour of the original JSON implementation.\n      s = \"null\"\n    else\n      s = tostring (value)\n    end\n    buflen = buflen + 1\n    buffer[buflen] = s\n  elseif valtype == 'boolean' then\n    buflen = buflen + 1\n    buffer[buflen] = value and \"true\" or \"false\"\n  elseif valtype == 'string' then\n    buflen = buflen + 1\n    buffer[buflen] = quotestring (value)\n  elseif valtype == 'table' then\n    if tables[value] then\n      return nil, \"reference cycle\"\n    end\n    tables[value] = true\n    level = level + 1\n    local isa, n = isarray (value)\n    if n == 0 and valmeta and valmeta.__jsontype == 'object' then\n      isa = false\n    end\n    local msg\n    if isa then -- JSON array\n      buflen = buflen + 1\n      buffer[buflen] = \"[\"\n      for i = 1, n do\n        buflen, msg = encode2 (value[i], indent, level, buffer, buflen, tables, globalorder)\n        if not buflen then return nil, msg end\n        if i < n then\n          buflen = buflen + 1\n          buffer[buflen] = \",\"\n        end\n      end\n      buflen = buflen + 1\n      buffer[buflen] = \"]\"\n    else -- JSON object\n      local prev = false\n      buflen = buflen + 1\n      buffer[buflen] = \"{\"\n      local order = valmeta and valmeta.__jsonorder or globalorder\n      if order then\n        local used = {}\n        n = #order\n        for i = 1, n do\n          local k = order[i]\n          local v = value[k]\n          if v then\n            used[k] = true\n            buflen, msg = addpair (k, v, prev, indent, level, buffer, buflen, tables, globalorder)\n            prev = true -- add a seperator before the next element\n          end\n        end\n        for k,v in pairs (value) do\n          if not used[k] then\n            buflen, msg = addpair (k, v, prev, indent, level, buffer, buflen, tables, globalorder)\n            if not buflen then return nil, msg end\n            prev = true -- add a seperator before the next element\n          end\n        end\n      else -- unordered\n        for k,v in pairs (value) do\n          buflen, msg = addpair (k, v, prev, indent, level, buffer, buflen, tables, globalorder)\n          if not buflen then return nil, msg end\n          prev = true -- add a seperator before the next element\n        end\n      end\n      if indent then\n        buflen = addnewline2 (level - 1, buffer, buflen)\n      end\n      buflen = buflen + 1\n      buffer[buflen] = \"}\"\n    end\n    tables[value] = nil\n  else\n    return nil, \"type '\" .. valtype .. \"' is not supported by JSON.\"\n  end\n  return buflen\nend\n\nfunction json.encode (value, state)\n  state = state or {}\n  local oldbuffer = state.buffer\n  local buffer = oldbuffer or {}\n  local ret, msg = encode2 (value, state.indent, state.level or 0,\n                   buffer, state.bufferlen or 0, state.tables or {}, state.keyorder)\n  if not ret then\n    error (msg, 2)\n  elseif oldbuffer then\n    state.bufferlen = ret\n    return true\n  else\n    return concat (buffer)\n  end\nend\n\nlocal function loc (str, where)\n  local line, pos, linepos = 1, 1, 0\n  while true do\n    pos = strfind (str, \"\\n\", pos, true)\n    if pos and pos < where then\n      line = line + 1\n      linepos = pos\n      pos = pos + 1\n    else\n      break\n    end\n  end\n  return \"line \" .. line .. \", column \" .. (where - linepos)\nend\n\nlocal function unterminated (str, what, where)\n  return nil, strlen (str) + 1, \"unterminated \" .. what .. \" at \" .. loc (str, where)\nend\n\nlocal function scanwhite (str, pos)\n  while true do\n    pos = strfind (str, \"%S\", pos)\n    if not pos then return nil end\n    if strsub (str, pos, pos + 2) == \"\\239\\187\\191\" then\n      -- UTF-8 Byte Order Mark\n      pos = pos + 3\n    else\n      return pos\n    end\n  end\nend\n\nlocal escapechars = {\n  [\"\\\"\"] = \"\\\"\", [\"\\\\\"] = \"\\\\\", [\"/\"] = \"/\", [\"b\"] = \"\\b\", [\"f\"] = \"\\f\",\n  [\"n\"] = \"\\n\", [\"r\"] = \"\\r\", [\"t\"] = \"\\t\"\n}\n\nlocal function unichar (value)\n  if value < 0 then\n    return nil\n  elseif value <= 0x007f then\n    return strchar (value)\n  elseif value <= 0x07ff then\n    return strchar (0xc0 + floor(value/0x40),\n                    0x80 + (floor(value) % 0x40))\n  elseif value <= 0xffff then\n    return strchar (0xe0 + floor(value/0x1000),\n                    0x80 + (floor(value/0x40) % 0x40),\n                    0x80 + (floor(value) % 0x40))\n  elseif value <= 0x10ffff then\n    return strchar (0xf0 + floor(value/0x40000),\n                    0x80 + (floor(value/0x1000) % 0x40),\n                    0x80 + (floor(value/0x40) % 0x40),\n                    0x80 + (floor(value) % 0x40))\n  else\n    return nil\n  end\nend\n\nlocal function scanstring (str, pos)\n  local lastpos = pos + 1\n  local buffer, n = {}, 0\n  while true do\n    local nextpos = strfind (str, \"[\\\"\\\\]\", lastpos)\n    if not nextpos then\n      return unterminated (str, \"string\", pos)\n    end\n    if nextpos > lastpos then\n      n = n + 1\n      buffer[n] = strsub (str, lastpos, nextpos - 1)\n    end\n    if strsub (str, nextpos, nextpos) == \"\\\"\" then\n      lastpos = nextpos + 1\n      break\n    else\n      local escchar = strsub (str, nextpos + 1, nextpos + 1)\n      local value\n      if escchar == \"u\" then\n        value = tonumber (strsub (str, nextpos + 2, nextpos + 5), 16)\n        if value then\n          local value2\n          if 0xD800 <= value and value <= 0xDBff then\n            -- we have the high surrogate of UTF-16. Check if there is a\n            -- low surrogate escaped nearby to combine them.\n            if strsub (str, nextpos + 6, nextpos + 7) == \"\\\\u\" then\n              value2 = tonumber (strsub (str, nextpos + 8, nextpos + 11), 16)\n              if value2 and 0xDC00 <= value2 and value2 <= 0xDFFF then\n                value = (value - 0xD800)  * 0x400 + (value2 - 0xDC00) + 0x10000\n              else\n                value2 = nil -- in case it was out of range for a low surrogate\n              end\n            end\n          end\n          value = value and unichar (value)\n          if value then\n            if value2 then\n              lastpos = nextpos + 12\n            else\n              lastpos = nextpos + 6\n            end\n          end\n        end\n      end\n      if not value then\n        value = escapechars[escchar] or escchar\n        lastpos = nextpos + 2\n      end\n      n = n + 1\n      buffer[n] = value\n    end\n  end\n  if n == 1 then\n    return buffer[1], lastpos\n  elseif n > 1 then\n    return concat (buffer), lastpos\n  else\n    return \"\", lastpos\n  end\nend\n\nlocal scanvalue -- forward declaration\n\nlocal function scantable (what, closechar, str, startpos, nullval, objectmeta, arraymeta)\n  local len = strlen (str)\n  local tbl, n = {}, 0\n  local pos = startpos + 1\n  if what == 'object' then\n    setmetatable (tbl, objectmeta)\n  else\n    setmetatable (tbl, arraymeta)\n  end\n  while true do\n    pos = scanwhite (str, pos)\n    if not pos then return unterminated (str, what, startpos) end\n    local char = strsub (str, pos, pos)\n    if char == closechar then\n      return tbl, pos + 1\n    end\n    local val1, err\n    val1, pos, err = scanvalue (str, pos, nullval, objectmeta, arraymeta)\n    if err then return nil, pos, err end\n    pos = scanwhite (str, pos)\n    if not pos then return unterminated (str, what, startpos) end\n    char = strsub (str, pos, pos)\n    if char == \":\" then\n      if val1 == nil then\n        return nil, pos, \"cannot use nil as table index (at \" .. loc (str, pos) .. \")\"\n      end\n      pos = scanwhite (str, pos + 1)\n      if not pos then return unterminated (str, what, startpos) end\n      local val2\n      val2, pos, err = scanvalue (str, pos, nullval, objectmeta, arraymeta)\n      if err then return nil, pos, err end\n      tbl[val1] = val2\n      pos = scanwhite (str, pos)\n      if not pos then return unterminated (str, what, startpos) end\n      char = strsub (str, pos, pos)\n    else\n      n = n + 1\n      tbl[n] = val1\n    end\n    if char == \",\" then\n      pos = pos + 1\n    end\n  end\nend\n\nscanvalue = function (str, pos, nullval, objectmeta, arraymeta)\n  pos = pos or 1\n  pos = scanwhite (str, pos)\n  if not pos then\n    return nil, strlen (str) + 1, \"no valid JSON value (reached the end)\"\n  end\n  local char = strsub (str, pos, pos)\n  if char == \"{\" then\n    return scantable ('object', \"}\", str, pos, nullval, objectmeta, arraymeta)\n  elseif char == \"[\" then\n    return scantable ('array', \"]\", str, pos, nullval, objectmeta, arraymeta)\n  elseif char == \"\\\"\" then\n    return scanstring (str, pos)\n  else\n    local pstart, pend = strfind (str, \"^%-?[%d%.]+[eE]?[%+%-]?%d*\", pos)\n    if pstart then\n      local number = tonumber (strsub (str, pstart, pend))\n      if number then\n        return number, pend + 1\n      end\n    end\n    pstart, pend = strfind (str, \"^%a%w*\", pos)\n    if pstart then\n      local name = strsub (str, pstart, pend)\n      if name == \"true\" then\n        return true, pend + 1\n      elseif name == \"false\" then\n        return false, pend + 1\n      elseif name == \"null\" then\n        return nullval, pend + 1\n      end\n    end\n    return nil, pos, \"no valid JSON value at \" .. loc (str, pos)\n  end\nend\n\nlocal function optionalmetatables(...)\n  if select(\"#\", ...) > 0 then\n    return ...\n  else\n    return {__jsontype = 'object'}, {__jsontype = 'array'}\n  end\nend\n\nfunction json.decode (str, pos, nullval, ...)\n  local objectmeta, arraymeta = optionalmetatables(...)\n  return scanvalue (str, pos, nullval, objectmeta, arraymeta)\nend\n\n\n-- pandoc-specific stuff\n\nfunction isArray(x)\n  local mt = getmetatable(x) or {}\n  if type(x) ~= \"table\" then\n    return false\n  elseif mt.__jsontype == 'array' then\n    return true\n  elseif x[1] then\n    return true\n  else\n    return (x == {})\n  end\nend\n\nfunction isObject(x)\n  local mt = getmetatable(x) or {}\n  if type(x) ~= \"table\" then\n    return false\n  elseif mt.__jsontype == 'object' then\n    return true\n  elseif x[1] then\n    return false\n  else\n    return false\n  end\nend\n\nfunction emptyArray()\n  local array = {}\n  setmetatable(array, {__jsontype = 'array'})\n  return array\nend\n\nfunction emptyObject()\n  local obj = {}\n  setmetatable(obj, {__jsontype = 'object'})\n  return obj\nend\n\n-- Walk a JSON-encoded pandoc structure, performing\n-- 'action' on each object encountered, and possibly\n-- replacing or deleting it.  The 'format' parameter\n-- allows 'action' to be sensitive to the intended\n-- output format.\n--\n-- JSON-encoded pandoc Inline and Block objects have\n-- the structure {key: value}, where key is 'Str',\n-- 'Para', etc., and value is invariably an array.\n-- 'action' takes three parameters: the key of the\n-- current object, the value, and the intended output\n-- format.  It can return two values.  If the first\n-- value is nil, the object is left unchanged.  If\n-- the first value is the empty table {}, the object\n-- is deleted.  Otherwise, we expect the first value\n-- to be a key (possibly a different one) and the\n-- second a value.  The original object is replaced\n-- with a new object with the specified key and value.\nfunction walk(x, action, format)\n  if isArray(x) then\n    local array, j = {}, 1\n    setmetatable(array, {__jsontype = 'array'})\n    for _,w in pairs(x) do\n      if isObject(w) then\n        for kk,vv in pairs(w) do -- should be just one\n          local res, extra = action(kk, vv, format)\n          if res == nil then\n            array[j] = walk(w, action, format)\n            j = j + 1\n          elseif isArray(res) then\n            for _,z in pairs(res) do\n              array[j] = walk(z, action, format)\n              j = j + 1\n            end\n          elseif type(res) == \"string\" and extra then\n            local newobj = {[res] = walk(extra, action, format)}\n            setmetatable(newobj, {__jsontype = 'object'})\n            array[j] = newobj\n            j = j + 1\n          else\n            array[j] = walk(res, action, format)\n            j = j + 1\n          end\n        end\n      else\n        array[j] = walk(w, action, format)\n        j = j + 1\n      end\n    end\n    return array\n  elseif isObject(x) then\n    local obj = {}\n    setmetatable(obj, {__jsontype = 'object'})\n    for k,v in pairs(x) do\n      obj[k] = walk(v, action, format)\n    end\n    return obj\n  else  -- basic type\n    return x\n  end\nend\n\n-- 'filter(action)' promotes an action (as described above)\n-- to a function that transforms a JSON-encoded pandoc\n-- structure.\nfunction filter(action)\n  return function(text, format)\n    local doc = json.decode(text)\n    return json.encode(walk(doc, action, format))\n  end\nend\n\n-- convenience function for creating RawInline elements.\nfunction rawInline(format, s)\n  return {RawInline = {{unFormat = format}, s}}\nend\n\n-- convenience function for creating RawBlock elements.\nfunction rawBlock(format, s)\n  return {RawBlock = {{unFormat = format}, s}}\nend\n\n-- convenience function for creating attributes.\n-- attributes{id = \"smith\", classes = {\"green\", \"square\"}}.\nfunction attributes(attrs)\n  attrs = attrs or {}\n  local keyvals = {}\n  for k,v in pairs(attrs) do\n    if k ~= \"id\" and k ~= \"classes\" then\n      keyvals[k] = v\n    end\n  end\n  return {attrs.id or \"\", attrs.classes or {}, keyvals}\nend\n"),("reference.docx","PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\NAK\184WB\179M\143\225m\SOH\NUL\NUL*\a\NUL\NUL\DC3\NUL\FS\NUL[Content_Types].xmlUT\t\NUL\ETX\153\186)Q\153\186)Qux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\181\149\203n\131\&0\DLEE\247\249\n\196\182\STX\167]tQ\133n\218n\219H\205\SI8f n\253\146=y\253}\199P\161\144E \175\r\210\216\190\231^\198\131\152-\246\SOB\178\211\202\132\"]!\186\ETB\198\130X\129\230!\183\SO\f\237T\214k\142T\250\154\&9.~y\r\236i:}f\194\SUB\EOT\131\EMFF\250:I\146\217\215\ACK\188\151%$s\238\241\147k(R\182\181\190d[X~\ETX\162\&4u\200\137\153&o\173\&8\250\ETB)wNI\193QZ\195\&6\166<r\206lUI\SOH\165\NAKkM\146<\STX\157\183\STXB \158V\249\SOH\252!\194\217\233,f\173\151\224\233\244\237\147t\232\&19\194\221\SUB\DC2\206\232\ACK\210eC\251|\188:I\131\EM\227Z\145\199\130/\NAK\220\254\229;\244@\SO\"\204\189u\129\145\223\213)`G\202\DC2\202\140\162\&8\240(a\168\249\157\189\176\254\130.\252\DEL\137yT\143\&7m\231\SO\247\n\238\&1u\rwL\130\142q\243\f\221\142\230\210\140\ESCD\139\198\226=\250\209\161\SIr\188C\197\215\n/\186j\SI\170\&9\DC3V\210\181\204\228#\142]\160\181\"\165\221\&0\214\228X{F>WV=i\172OH\165\142\191\139]\ACK\186/\139\245\160\204\153\186\239E\245\160\232\199A_\213,\f\202j\217\SI\CANk\DC2\205X\243\135|\157\252\SOHPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ACK\NUL\FS\NUL_rels/UT\t\NUL\ETX4\249\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULzn#@5\145\&2W\238\NUL\NUL\NULj\STX\NUL\NUL\v\NUL\FS\NUL_rels/.relsUT\t\NUL\ETXxx\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\173\146\193J\196\&0\DLE\134\207.\236;\132\185o\211U\DC1\145\198\189\136\176\&7\145\250\NULCf\218\ACK\219$$\163\238\190\189\DC1\EOT\183 U\193c\254\204|\243MH\179;L\163z\229\148]\240\ACK\182U\r\138\189\r\228|o\224\169\189\223\\\131\202\130\158p\f\158\r\FS9\195\238v\189j\RSyD)Myp1\171B\241\217\192 \DC2o\180\206v\224\ts\NAK\"\251r\211\133\&4\161\148c\234uD\251\140=\235\243\186\190\210\233\148\SOH\133\186^\157\205\192jO\ACK\210\158.A\181\199\200\191\EM\DLE\186\206Y\190\v\246eb/\223\204\209|\DLE\246\196\180\137\169\244'qe%\213b\234Y\fP\176\SI%\206\SUBc\172\n\SUB\244\130\214\246?\181\230\NAK_Fo!\145\166\207\248G\165\139\191*\209\130\210\196\130\132\130\218\134\196\203\207\245Qq\"\215\232\217\255(\217;PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t\NUL\FS\NULdocProps/UT\t\NUL\ETX4\249\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\229[#@,,\fwJ\SOH\NUL\NUL\174\STX\NUL\NUL\DLE\NUL\FS\NULdocProps/app.xmlUT\t\NUL\ETX~W\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157R\193N\195\&0\f\189\239+\170\221i\198`\ETXM!\DC2\218\SO\FS\NULMZa\231(u\219hi\DC2%\EM\218\254\RS{\221J'8\209\147\253\158\223\179\251Z\190\SO\206CH\SUBbvh\141\141O\227&%\191`,\170\ACKZ\EMs\164-2\149\v\173L\216\134\154\185\170\210\nVN\237[\176\137M'\147\&9\131C\STX[By\227{\195q\231\184\248J\255\&5-\157\162\251\226gq\244\232'FY\198\183.\148Q<\222q\214U\132m\SUB\EM\160D\173\168\164\137\192\217\SI@\244\v\170\131\209v\ETB\151\141\180\&5\148\151\177\223\EOT\141\191j\vQ\220N9\235*\194\158\189\255\132\DLE\181\179H\228\DC3|8\ESC`g\217.~\248\194\173d\130\203\134k\240\236d\180\146\137doZ\ENQ\ETB]\149\&2z\151\140\156\243\206\184\US!\t\RS\ETB\164J\184k\171S\179\241R\225U3\138\224O\134$\ENQ\180\222\208\202w\138\216\228\165K-g=J#\152\206\ACK\212>\232t\DC4\184t\216\158\FS\\\146\166\208-\136\&9\n\251\230\DC4\183\146\ACK\150\248a\250\184{\224\250\\q\255\&0\ESC\RSy\162\215\216\213A\250\ACK\191\"g\131\174#k\202\158p*FX\244\255\147\CAN}\ETXPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULan#@\177\t\162\248S\SOH\NUL\NUL\175\ETX\NUL\NUL\DC1\NUL\FS\NULdocProps/core.xmlUT\t\NUL\ETXFx\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\205\147?O\195\&0\DLE\197\247~\138({\234\&8\165\fQ\155\SOH\DLE\DC3\149*Q\t\196f\236kk\154\216\209\249J\218o\143\ESC\236\136 \150n\140\231\247\238\231w\254\179\&0./\165EX\163m\SOHI\131KNMm\\\233\133e\186'jK\198\156\220C#\220\212[\140W\183\SYN\ESCA\190\196\GSk\133<\136\GS\176\"\207oY\ETX$\148 \193.\196\172\GS\144i5I\146\133\146%i\170!l\160\228\192o\143X\247\&4%\EM\212\208\128!\199\248\148\179\180Z\v\163\172L\DLE\182\128`$$\190:-XdE\176;\190\DEL\128\164\171\208=%4F\142D\DLEd\241zNh\236\&9\151\&3=\192\185\179\168\156WGe\212k\225he\149\222jPw\231\224\250\181\CAN\189\b\159\218ik*\254m\ESC\234h\144\130`g1b\134\&2\f\165\192I\212-\249\150\235\a\251\209\FSx\EOT\216\184\239\129A\ENQ\224\201\233\129\216u\221\180\155\245L\255*8{]==\247\SI(\211\198\145\240\151\152\SO1z\214\159Yz\133y\167\211%\157[X\166q\231\151\217\253\195\230\&1\173\138\156\ETBY\206\179|\182\225\188,\230\229\252\230\237\DC2y\148o\148\185\tg\251oC\199\128\213$\220\228\232gV\147/PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL\193\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ENQ\NUL\FS\NULword/UT\t\NUL\ETX\n\250\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\n\NUL\NUL\NUL\NUL\NUL\200\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\FS\NULword/_rels/UT\t\NUL\ETX\ETB\250\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\135\161%B\198UX\DEL\226\NUL\NUL\NUL.\EOT\NUL\NUL\FS\NUL\FS\NULword/_rels/document.xml.relsUT\t\NUL\ETX\157\249\232P\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\189\212K\SO\194 \DC4\ENQ\208\185\171 ,@\180\254\DC2\211:r\226T\187\SOHZ_?\177|\STX\207\168\187\151\168i\159\209\129\DC3\EM\146\v\151\ETX!\164{\232$\182F\251\166\181\158]U\167}\198\ESCD\187\SYN\194\151\r(\233\199\198\130\SOIe\156\146\CAN\134\174\SYNV\150'Y\131H&\147\165p\180\131oF\140\165\180\150\229\&7\v\191\148\154\170jK\216\154\242\172@\227\151n\161\207\170\NUL\215\234\154\135Mv\199\140\187\221q\202Y.]\r\152\241>\RS\135f\206\196?)\RSo\GSx\226H\ACK\199\&3\139\129\NUL\196p\\\202\152\DC1\198+\141\NUL\185@q\248\180\204\a\v\153\DLE\129S\EM\141\185,: \152\197\128\233\227\b\DC4\fk)c90\RS\209s\194\&4\202\165\CAN\212\ACK\223\RS\237\138^\202+\238)\169x\251\GS6\163;PK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\194n#@R\138\243\174\157\NUL\NUL\NUL\227\NUL\NUL\NUL\DC1\NUL\FS\NULword/document.xmlUT\t\NUL\ETX\252x\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULE\142I\SO\194\&0\fE\247=\133\149=Ma\129P\213a\203\&5B\226\SOR\DC2GIJ\225\246\184\131\196\234?\235\235?\185\233?\206\194\ESCc\154\201\183\226ZV\STX\208k2\179\US[\177\228\225\242\DLE\208wE\179\214\134\244\226\208g\224\133O\245\218\138)\231PK\153\244\132N\165\146\STXz\238\ACK\138Ne>\227(W\138&D\210\152\DC2\v\157\149\183\170\186K\167f/v\231\139\204w\135\208\NAK\NUL\156q\203\157\242A\NULO\180\150\128M\214\148G)\207v\ETX\RSl\DC1\142\&8}\242\255mW\252\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@jp<\224\155\SOH\NUL\NUL\229\b\NUL\NUL\DC2\NUL\FS\NULword/fontTable.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\229\149MK\195@\DLE\134\207\n\254\135\176w\155MZ5\150F\209J\143\RS\252\192\243\&4\221\&4\v\251\DC1v\182\141\253\247N\210\134\182\168Q\EOTO\t,l\222wvvx\152I&\183\239Z\ENQk\225PZ\147\178h\192Y Lf\ETB\210,S\246\250\&2;OX\128\RS\204\STX\148\&5\"e\ESC\129\236\246\230\236tR\141sk<\ACKt\222\224\216\165\172\240\190\FS\135!f\133\208\128\ETX[\nC^n\157\ACKO\175n\EM\218<\151\153x\176\217J\v\227\195\152\243\203\208\t\ENQ\158\238\198B\150\200v\217\170\223d\171\172[\148\206f\STX\145\138\213j\155O\131\&4\140\234;\217\NAK\CANTc\ETX\154\n\DEL\222\232\185U\141U{%\CAN\139\"\"{\r*e\156\SO\243\v~\244\176\176\r\206\np(\252>xo\229\160\165\218\180\SO\172\188\221{\165\244Y\209Zkp\DC2\230J\236m\148K2W8\231\148\178\189s\171D\159\148\184Q\162\ETXex\FS\147\&5y\146c\229\&0Os\239$\220b\249\138\208\139\212\STX\131GQ\ENQOV\131\233@\NAK\243K>$\\#Z1\237F\223\163\226\255\133j\248\ETX\170C\229KT;!\250\v\170\169]9)\\\r\171\ETX\211\NAK\161\185np\213\152F\253\195\244F\131Y\DELI\240[H5\152\168Y\t\SOHJ\bY\210\183\177\155\130\158S\141\GS}T\143\217v\220\234\177\139\251\215GSP\146\CANu \154\&5\157\DC47\176z\137\232\142\n\236\250\187\221S\239\140v\136\226\RS\NULj\183H\251\SIPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\174\161%B\245\143\150\206\228\NUL\NUL\NUL\165\STX\NUL\NUL\DC2\NUL\FS\NULword/footnotes.xmlUT\t\NUL\ETX\232\249\232P\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157\146\193j\195\&0\f\134\239y\138\224{\234t\135\&1L\211^\202\158`{\NUL\227\216\141!\182\140\164\196{\252y\180\ETX\247RB|\DC1F\250?\161\159\255t\249\ts\187Z$\SIq\DLE\199C/Z\ESC\r\140>\222\ACK\241\253\245\217}\136\203\185\&9e\229\NUL8\STX[j\218\242\138*\146\202\131\152\152\147\146\146\204d\131\166\ETX$\ESCK\207\SOH\ACK\205\229\139\&7\153\SOH\199\132`,Q\129\134Y\190\245\253\187\f\218GQ\161\194\SYN\DC48\231\141\189\130Y\130\141\252\SI\226\169\ACK\225^\DLE\218Ysq\129&\159\168&\194 \SYN\140\234\129\235\130\&7\b\EOT\142;\ETXA\221I\143R\171\214W\170\&5\204\245l>\246\ESCv\252\EMY\171\244\150KG\212\249\133\237\201\155\GS\148\162\226\ENQ\159\206\205i\a\231\&9\SUB\215{S\148\184\201*o\231\230\ETBPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\184M2@0\SUB]B\168\ETX\NUL\NUL\a\RS\NUL\NUL\DC2\NUL\FS\NULword/numbering.xmlUT\t\NUL\ETXK\ENQ\ETBO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\213\153\221N\219\&0\DC4\199\175\199ST\145v\t\249\254hE\139\DLEPi\DC3b\147\198\180\235\&4q\169\&5\DELDv\218\194\237\246\&0{\132I{\169\189\194\236\164\t)\DC4\226RGk\185\169\227s\206\223'?;\246\177\&8=\187\199\168\183\NUL\140CJ\134\134}b\EM=@\DC2\154Br74\190\222\142\143#\163\199\243\152\164\&1\162\EOT\f\141\a\192\141\179\209\209\233r@\230x\STX\152\240\235\t\t\194\ax14\230\140\fx2\ETX8\230\199\CAN&\140r:\205\143\DC3\138\a8N\ACK\v\140\140\202\153\SO\141Y\158g\ETX\211\\\249\159\212\254'\194\223\164\211)L\128)\194\170\166cY\145x\134\164\210X\128g\SUB4\ETXD\CAN\167\148\225\&8\ETB\143\236ND\176\239\243L\230\144\197\&9\156@\EOT\243\a\169\NAKT2\244\181\180\203\177W?U\EOTS\EM\183\f\185\164\201\FS\ETX\146\ETB#\154\f \145\ETX%|\ACK3^\163x\171\154\&0\206j\SYN\175\189D\131\251\210\182\DC4^wIYZG\168\164'\ETX2F\DC3\192\185X\DLE\CANU\t>N\214\146<\159\173\141\&3.\165\202p\217jd\158\169$\146\178x\217\200`=\175\203\210h\140\142\222\137\245\ESCOx\206\226$\191\153\227\222\218\211\135thX\210Iz\DC1\SOSa^\196hh\140\139?\251\210\&0WF<G9\188\ACK\v\128n\US2P\185\NAK\189H\246\214\142\&9\206Pe\190\180<\171\DEL\DC1^\212F\180\144\&6(~\170qe\175\248\232X^\197\216\165\243\187\242\179\ESC\227\218\&0\153#\EOT\242G\171\DLE\185\ENQ\247\181y\205\240\&1\169\186\DC1\152\&6b\178\207\172h\SYN\137\n\SO\229\195\234\169\n\DC1\195\SUB\162\157Q.\147\&4W\SOHf3B\EOT@\"aIy\233%\154S\200x~\r\229\228WQ2\168\SUBR\132\176\198\232lLI\206\229l\240\EOT\194\161\241\229\SOHO(\146:\179s1\DC1k\GS\144\136\&1R0\141\ENQ\237\134\242JN6\197+o l\235%\252\247\199\239n \135\142\SUBf\219\138\n\210\179\152\220\NAK\155\182\ESC\236\tiG/i\218\rg\219\243\DC4AG\150\ACK\208\ETBt\206 `\189\ESC\176l\208~\218\251V\228\174\238\197\253\171\ESC\232\142\GS\168Aw|G\ETX\244o\"TV4\188\129|\189\239\173\192=\205\192\DEL\254\233\bx\DC4\169\SOHw\GSo\175\129\251\a\178}\vl\138\192\251\193\158\238\223\193A\236\223\158\171xPz\129\142\131\178\219\253;<\144\253\219\183\DC4\SIM\223\211qhv\183\157D\a\178\DEL\251\161\226\129\EM\216\251u`\202V\227n5j\191z\217\155\174^\174\229G~?tw\187z\157{\225\149\237_\\i\185z\165 \129\&8F/\174\133\247\246\201\255\189\EM\132OV\194c\\c%\232\187(\181\242p:\226\161^\193{\222ND\182\189\208\180\DC2q;\"\162^^\219\193ND\182\189o\180\DC2\241\186\"\162Z\255\SYN\142;\DLE\217\246B\208J\196\239\136\136z\129\SUBX;\DC1\217\182bo%\DC2tDD\189\146tw\219Y\183-\172[\137\132\GS\DC1Q/\243\172\221v\214m\235\222V\"QWDT\235\176\194q\a\"\219\SYN\166\173D\250\GS\DC1\t<\197\157\181p\220\130\200\198\202\145\DC4\NAK#yR)\174U\144U\146\165\184T!\ESC\163\157W\163\237f\141\248i\SOH\CAN\131)x\169Vl\216\215\130\205\181\232W\244l\205z\142f=W\179\158\167Y\207\215\172\ETBh\214\v5\235Eo\212\171\191\134U\163\252\a\238\232\232\USPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@>\166j\135\245\STX\NUL\NUL\224\a\NUL\NUL\DC1\NUL\FS\NULword/settings.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\157UMs\218\&0\DLE\189\231Wx|.\177\249\ACK\SI$S $\a\210a\226\164wY^\131\ACK\201\242H\STX\151\254\250\174\193\178=M\157dzBzo\223j\181\214>f\247\191\EOTwN\160\&4\147\233\220\237\222\250\174\ETX)\149\&1Kws\247\237u\221\153\184\142\&6$\141\t\151)\204\221\&3h\247\254\238f\150\a\SUB\140\193(\237`\134T\ar\238\RSU\SUBh\186\aAtG0\170\164\150\137\233P)\STX\153$\140B\249\227\150\n5w\247\198d\129\231\149\162[\153A\138\\\"\149 \ACK\183j\231]%+I\143\STXR\227\245|\DEL\228)\224\196`\189z\207\&2m\179\137\255\205\134\228\222&9}t\137\147\224\&6.\239\250_\184n.U\\)\190R^!\200\148\164\160\&5vVp[ Km\SUB\205\191\146\231JmX\164\136:7\146\220\221\&8\SO~\185\223R\n'\SI2P\DC4\187\&0w\167\190\235\149\DC4\136\b\226\240\172\r\136\181L\141\182\&8V%\147\208\DLE\ETX(\212\EMp~y \148\ETX\193\218\242`\167\136\DLEDY\196\202\180\&9s\216\146\DC4\214\151\234\214\140\ESCP\CAN~\"x\SI\223\247\aUd,\DELH\243\170\b=<\203\DC3T\231\198\144\144#7\175$\n\141\204\172r\220\171+\142\NAK\201\177\150G\197\226'\169\216o\172\154\240\&0#\DC4A\ESC\223\US\253\&3\254'(\195\232\199\209Lg\156\156\235\204\171Z\254\128cs\174.\243\183\196&\255\\@\247\EOT\239\141\141)\235X\226AJr\ESCx\233\204R\138L\225\179\168;KN\176Upb\144o\EM5G\ENQ\150\193Q\142u\177\174v/R\154\186\233\195\169\191\242\199\215DUH\227\155t\187\203\201\162\149\RS<\244\166\139~+\253I\242\241d\176\SUBNZ\233\201j4\EM\181'_LF\139\241\176\157^\SO&\171vz\217\US\245\198\211V\250\161\223\GS~/\207\158y\141\&6\206DPX\196V\149\194\235\182\152\SOG\\\197\155#e1q\RS\NAK\218$T\a\136 R\135\ENQKmT\EOT8\162\239\233\240\CAN\217\136N\167\193jA8_\227\195\176lB\184n\202\139w\182\130\164\141\230\207D\237\234\211\253\ACK\165\218\169\\\145\236\133\237\246\166\134Xj6L\216`}\140\194c\214P\164h1-\252\204k\182\SO;n\208\150\160\232\220\134\212\227\ACKi\231-\172\135\129\171\176p/x&Yv\GS\202h\215\157\187\188(\170[X\141\193]L\212\225\178\137v\189\146\235]\184\222\149\187l\b-\236\r\163\203E\141\245,\214\136\235[\172_c\ETX\139\rjlh\177a\141\141,6*\176\253\EM\157\NAK\253\241\128Vm\151\ENQ\158H\206e\SO\241S\205\191\131j\ETB\SOH\202\240\ENQ\132g\DC1\213Vp[\209\156i\DC3B\134\198ade\168\223\n\186x\187\246\175\249\238\230\SIPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\229\176~B\GS\EOT\218\158\192\EOT\NUL\NUL\217#\NUL\NUL\SI\NUL\FS\NULword/styles.xmlUT\t\NUL\ETX}\196WQ}\196WQux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\237YQs\226\&6\DLE~\231Wx\252\158\ETX\ETXI)\DC3rCH3\201Lz\205\NAK\210>\v[`]l\201\149\228\DLE\238\215w%\219`\EM\219\DLEB\147&\195\ESC\218]\175\246\251\244y%\228\243\175\207a`=a.\b\163\ETX\219\249\210\178-L]\230\DC1:\US\216\177\156\157\244lKHD=\DC40\138\a\246\DC2\v\251\235E\227|\209\ETBr\EM`a\193\243T\244\249\192\246\165\140\250\205\166p}\FS\"\241\133E\152\130o\198x\136$\f\249\188\201f3\226\226+\230\198!\166\178\217n\181\206\154\FS\aH\194\220\194'\145\176\ESCI\182\197.\217\SYN\140{\DC1g.\SYN\STX\138\r\131$_\136\b\181/\SUB\150\ENQ\NAKz\204\189\194\&3\DC4\aR(\139\182\241{\158\218\DC2Sf\204F\201\248\154Q)\172E\US\t\151\144\t\148\NUL\200CB\EM\191\EMRA\236U\236\162\143\145\144CA\208f\DLE8}\245\163\246qW\200\156\251\146x\240\\\211\168E\252\132\176'\DC4\f\236vw\211\&7\DC2\213\222\NUL\209y\230\197\244\228al\231\234\205\153\166\&0\235\192F\252d<\204\165\&8o\230xI\a\ACKs0CTFfT SD\200%\186\DC24\147\CAN\132\STX\235T\152'\202\207c&U\150\194:jh\DC2\DC44N\DC4\b\SOHxv\199\220G\236\141%8\ACKv\203N\140\SI\183\247\156\&0N\228R\217\SUBVb\GS\227\144\220\DLE\207\195\&4\ETBI}\226\225\191}L\US\EOT\246\214\246\239\215Zq\171\199]\SYNS\CAN\181\DEL9K!d/\STX\248\228\&2\130\185#\196\209\156\163\200O3\168\178\225\197R#\GSx\v\217\191\169\164\129\189\226\145\162\DLEg+\149\250\&2\130\192\251ORC\206\146\163\216 x\138\225\ENQ\129\SUB\156\158\174?\229[\143\154\ACK\193\EM\179\186\162\237\&0V\133\143X\b\147\201\242\202\&3g\174\208)\STX6\255\160\135\196\214\&9\203A\235\156\GS\n\217\132\200\NUL\151\227J\\/AE\241\179\220\US\243#\198\209\&7\149\161Y0\222\DC1\nro\214\210\211\&5\150\190\221\&5^\181E\255\135\155\213\229\194\v\132y\EM}\197\150X\217\DLE\209\143BG\219l\135*\228\183\212\182\209\DC1K\158_\247C\229,\244CE\189\&9\SUB\153t\184,`<\ETX\216\233\158\SO{C5\169N9R>hs\174\STX\238\172g\212\206\177\143<\152\244\242\212\156m\221{sB\219\232\188\ENQ\DC1\242\253E8\140\165\207\184(\151a\230|\SI\157\237\"\155}\NUL_A\187.G\171=\159\t\234\rF\234P\229\148\195M\189\150s\192>\DC3\147l\247\203b~}\167\&6ThB,\150\SOH\228\184{\n\178\194J7\168c\USz\175>\148\170\177]\175\213\246\219i56\142go%b}P\221]\196\206'\SYNq\247\186\231\\^U\137\184J\172\237\SUB\177\182\SI,\214N\189X;G\177\RS\197Z'\214v\175Z\172\&9\223a\196\218\173\ETBk\247(\214\163Xk\197\218\173\DC1k\247\192b=\173\ETB\235\233Q\172\US[\172\196\FS}P\177^\ACK\204}\252\RS\179\170?\148\218o%\SOH\255\DEL\193\150\220\233\EM*tZ\US\239/SAX9\129\180j\EOT\210z\185@\\\US\DC4\226\234\255\238\198\NAKl\195\&2\238\RS\DC2\199}\166&\197S\197]D\DC2i\173B-\GS\155[<\177\186R\222\178\248\245\133K4U7\141\149\247\198\DC3\229\223~ylM\146<{\212W!N9\r\fQ\193\248\150z0\235\"\189*O\234\247\158\145\185\146\DLE7\194A\240;2?\tH\SYNmyV\135\ENQx&\147\&8\167\213\171\141\156\&2)Y\184KNN\230\254\246\164j\153\138\181\167\182W\\v\225\EM\161D}\236\154`\RSVJ-\141\177t\208\190\157j\157\199\174\236\&1{m\138\ESC\187`}\247\153\RS\168\187\231\240l\225mW\202\246\218c\152\183\156\NULc\NAK;\fx-\237~\201\170\193\233\225\&1\159A%\CANA\ETX\171^\183\141\197p\218\a\251\192\163;\199\bE\213L\235\b+\vy+\164\217.h\236\129\229\176KTH\SO\164\194\219\DLE\205\235\217\209\DC1\159\158\GSc\131uc\SOH\189W\DEL\139\221\220d\r$\245o\141UD[\160\172t\191\222B\224N\239\250\238h\254\194|\138$\t\171\209d\DC1\219\192T\173p\221\217M}a\165\130\ENQH\172\142cyS\197\217j\143{\182\221\t\185fLR8Q\255\137g\229|d\SOH\150\138x-\GSO\152\203a@\230\171\199D\FSa.\\N\"\249_\162\132\253\240\177\FS\158\246\188\SYN\214\RS\255\176\202A\174~\138\139\198\191PK\ETX\EOT\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\FS\NULword/theme/UT\t\NUL\ETX4\249\232P\173\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NULTK#@\157\\\139\190\"\ACK\NUL\NUL\135\GS\NUL\NUL\NAK\NUL\FS\NULword/theme/theme1.xmlUT\t\NUL\ETXP:\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\237YMo\219\&6\CAN\190\SI\216\DEL to\229/\165NP\167\136\GS\187\221\154\180A\226v\232\145\150h\137\r%\n$\157\196\183\161=\SO\CAN0\172\ESCvX\129\221v\CAN\182\NAKh\129]\186_\147\173\195\214\SOH\253\v{\245a\153\178\233\196I\211\173C\155\131#R\207\251\253\242!i_\189v\DC42t@\132\164<jY\213\203\NAK\v\145\200\229\RS\141\252\150u\167\223\187\212\180\144T8\242\&0\227\DC1iYc\"\173k\235\US~p\NAK\175\169\128\132\EOT\129|$\215p\203\n\148\138\215l[\186\&0\141\229e\RS\147\b\222\r\185\b\177\130\161\240mO\224C\208\ESC2\187V\169\172\216!\166\145\133\"\FS\130\218\219\195!u\t\234'*\173\245\137\242.\131\143H\201d\194eb\207M-\234\DC2)\214\219\175&\255\228Xv\152@\a\152\181,\176\227\241\195>9R\SYNbX*x\209\178*\233\159e\175_\181\v!\166\SYN\200jr\189\244/\151\203\ENQ\188\253Z*'\252A!X\237\&5V\175l\SYN\250k\153\254y\\\183\219\237t\171\133\190\DC4\128]\ETB\"\173\206a\ESC\189f\181=\209\169\129\178\199y\221\157\138Si\148\241\154\254\250\FS~\181\221n;\171%|}\138o\204\225\155\149\149\198F\173\132oL\241\206\188\255\237\141Ng\165\132w\166\248\149\&9|\239\202\234J\163\140OA\SOH\163\209\254\FS:\169gQ\153\STX2\228\236\134\DC1\222\EOTxs\210\NULS\148\173uW&\US\169E\189\SYN\226\251\\\244\NUL\144\SYN\ETB+\SUB!5\142\201\DLE\187\128\235`F\a\130&\ACK\240\SUB\193\218\155l\202\149sS\137-$]Ac\213\178>\142\&1\172\136)\228\213\243\US_=\DEL\138\142\US<;~\240\203\241\195\135\199\SI~6H\221\192\145\175K\189\252\254\139\191\US\DEL\138\254z\250\221\203G_\153\241R\199\255\254\211g\191\253\250\165\EM\168t\224\139\175\159\252\241\236\201\139o>\255\243\135G\ACK\248\134\192\ETX\GS\222\167!\145\232\SYN9D\187<\132\192\f\ACK\200@\156M\162\US`\170KlD\190\196\DC1Nd\f\232\174\nJ\232[c\204\176\SOH\215&\229\f\222\NAK@\SOH&\224\245\209\253\146\195{\129\CAN)j\NUL\222\f\194\DC2p\155s\214\230\194\CAN\211\205\196\150\158\133Q\228\155\141\139\145\142\219\197\248\192d\187\&3S\223\238(\134^\166&\149\157\128\148\220\220aPr\236\147\136(\148\188\227\251\132\CAN\196\238QZ\202\235\&6u\ENQ\151|\168\208=\138\218\152\SUBS\210\167\ETXe\SYN\186AC\168\203\216\228 \212\187\148\155\237\187\168\205\153I\253&9(#aU`fRIX)\141\215\241H\225\208\232\&1\SO\153\142\220\194*09\185\&7\SYNn)\225RA\165}\194\&8\234zDJ\147\204m1.\185{\DC3\168\195\\\246m6\SO\203H\161\232\190\t\185\133\&9\215\145\155|\191\DC3\224\&06\250L\163@\199~$\247\161E1\218\225\202\232\EOT/\175\144d\fu\192\209\194r\223\165D\157mm\223\161~`n\144\228\205H\228\188]b\224\144F'\209q\bl\140/\154\142\129\NUL_|\251\248\DELD\196\ESC\144\EOT\211J\152\165\223E\184Y\210\237p\225\209\183\159s7\241(\218!\208\230\239)\247=\229\190\139\148\187h=/K\180Sn\181\245Cq\170/\\xB\RSR\198\246\212\152\145-\153\178\178\EOT\167\189\RSL\166\131T\168\&8\144\199\SOH<\230\230J8_\224\244\EM\t\174>\161*\216\vp\ff\170\169\ENQ_\230\170}\137b.\225\SUB`-\212\157\222%)\EOT\159\206\&9\147\v \160\177\218\230^6]\215/\134\133\154t\228K\221P=Q\176\172\177\250\149\215\&3V\205\128KZ\171:fk\206\137\214l-\155\176\SUB\DLEN\174\253\213\149Zf\SUB:\ACK3\226%y\207\DC4L\202\242\ACKKT\173h5\n\176G\f\211Z|\213\250\ESC\201\166s&'.&\201\149\185$\219\243\171\137E\229\DC1:\132;\188Ss,\228\226\184e\r\225\f\EOT\143a\f\250d\194\US\152\249Q\203rU\SYN\224\233kq&\226UsWU+\206\162\128K&b!\213&\150A&\149\190\154|\237\DC1M\253\175\&9\141$\SI\ETB\DC3\128\129L\150\243\162\222\172\254\135^\216\179\165%\195!q\213\130\153\233\&0\DEL\199G\138\136\189\192;D\ETX6\DC2\187\CAN\252nd\221\229Q\t\148_\155\f\EOT\244v#o\188\242\194\205\215\198\236\215+\249\154\193,\SOp\222\237M\173\246\EM<}.|HG\154{\246\STX\223\207\EMJ\253\STXCq\222\221P\146\206\133Sg\221K\175B\176\139\v\140\146\RSmY\\\168\128\ETX\v\197\SOHu{\STX\246\253\212\SYN\248\133`Y$.!\150|Y\156\248J\SO\166\188\149\233\200H\206\SI\212.\245\145\160\192t*\DLE\132\236\168<\206S\148Uk\250\246\&8Q\148\243L\225\174\140\179\255\ETXr@X?Y\189+I\252\SYN\n&l\146'\"\197\205\SYN\205\&6\173\174\129\223{\139\SI.\141sm<SC\141\179l~\r\141\244\181\173`\245\245\\Xf\ETX\214\204\213\204\DC1\215\156\133;\207\236V\ESC\195\221\SOH%\US@\220T\184lz<\237\243]\168>*\246y\EOT\141x\169\153/\191br\NUL>7\181\224\DC2U\255\214)\168\185\160\222\ETByv\212\146]_\144\236\147\205\157?\217\142!\215\206\201\169\182\231\151\168\173\221C\210\209\220\143F|p\USlo\194=g\196\178\EM\EM\195({\216\DC1i\192\ETX\238\141\243G&3J\200\DC21\161t\SYN\237\146!\162\222\209\164\172\&3\EM\205\DEL\149)6\243\221\204@\DC2{!X?]0\199O7\145B\184v\186p!1\185\236\NAK\194\233-\206\164\128M-g\248\172\202\ENQE\SYN\153b\209\235\164l\t\231\205)3v\239\178)[\162P\231H\153::9ey\166lS\227\145#%pg\242\&3\DC3\244\175=m\217\245\DEL\NULPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL\229[#@\204d$|\129\NUL\NUL\NUL\159\NUL\NUL\NUL\DC4\NUL\FS\NULword/webSettings.xmlUT\t\NUL\ETX~W\ETXO\CAN\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL]\142\&1\SO\194\&0\DLE\EOT\251\188\194\202\ETX8\139\130\194\&2\145h\160\139\144\252\STX\147\FS\137\165\179\207\242Y\152\231c\SUB\n\202\157\213\172\214&\209\166\225\195a\173!m\162\222\145\146\152N\207\227^k6\NUL\178\236\CAN\189\FS8c\234\237\147K\244\181\199\178A\227\178\230\194\v\138t9\DC2\FS\181>A\244!\141\211\160\148\253\142{\"n\247\249\ACK?\178\242\204\213\249\ETB^\196u\141\240\SUB\b{m\225\239\204\&4|\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\NAK\184WB\179M\143\225m\SOH\NUL\NUL*\a\NUL\NUL\DC3\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129\NUL\NUL\NUL\NUL[Content_Types].xmlUT\ENQ\NUL\ETX\153\186)Qux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ACK\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\186\SOH\NUL\NUL_rels/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULzn#@5\145\&2W\238\NUL\NUL\NULj\STX\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\250\SOH\NUL\NUL_rels/.relsUT\ENQ\NUL\ETXxx\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\t\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A-\ETX\NUL\NULdocProps/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\229[#@,,\fwJ\SOH\NUL\NUL\174\STX\NUL\NUL\DLE\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129p\ETX\NUL\NULdocProps/app.xmlUT\ENQ\NUL\ETX~W\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULan#@\177\t\162\248S\SOH\NUL\NUL\175\ETX\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129\EOT\ENQ\NUL\NULdocProps/core.xmlUT\ENQ\NUL\ETXFx\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL\193\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ENQ\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\162\ACK\NUL\NULword/UT\ENQ\NUL\ETX\n\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NUL\200\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\225\ACK\NUL\NULword/_rels/UT\ENQ\NUL\ETX\ETB\250\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\135\161%B\198UX\DEL\226\NUL\NUL\NUL.\EOT\NUL\NUL\FS\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129&\a\NUL\NULword/_rels/document.xml.relsUT\ENQ\NUL\ETX\157\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\194n#@R\138\243\174\157\NUL\NUL\NUL\227\NUL\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129^\b\NUL\NULword/document.xmlUT\ENQ\NUL\ETX\252x\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@jp<\224\155\SOH\NUL\NUL\229\b\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129F\t\NUL\NULword/fontTable.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\174\161%B\245\143\150\206\228\NUL\NUL\NUL\165\STX\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129-\v\NUL\NULword/footnotes.xmlUT\ENQ\NUL\ETX\232\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\184M2@0\SUB]B\168\ETX\NUL\NUL\a\RS\NUL\NUL\DC2\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129]\f\NUL\NULword/numbering.xmlUT\ENQ\NUL\ETXK\ENQ\ETBOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@>\166j\135\245\STX\NUL\NUL\224\a\NUL\NUL\DC1\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129Q\DLE\NUL\NULword/settings.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\229\176~B\GS\EOT\218\158\192\EOT\NUL\NUL\217#\NUL\NUL\SI\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\145\DC3\NUL\NULword/styles.xmlUT\ENQ\NUL\ETX}\196WQux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\n\NUL\NUL\NUL\NUL\NULN\161%B\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\v\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\DLE\NUL\237A\154\CAN\NUL\NULword/theme/UT\ENQ\NUL\ETX4\249\232Pux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NULTK#@\157\\\139\190\"\ACK\NUL\NUL\135\GS\NUL\NUL\NAK\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\164\129\223\CAN\NUL\NULword/theme/theme1.xmlUT\ENQ\NUL\ETXP:\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL\229[#@\204d$|\129\NUL\NUL\NUL\159\NUL\NUL\NUL\DC4\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\128\129P\US\NUL\NULword/webSettings.xmlUT\ENQ\NUL\ETX~W\ETXOux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\ENQ\ACK\NUL\NUL\NUL\NUL\DC2\NUL\DC2\NUL\SOH\ACK\NUL\NUL\US \NUL\NUL\NUL\NUL"),("reference.odt","PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC^\198\&2\f'\NUL\NUL\NUL'\NUL\NUL\NUL\b\NUL\NUL\NULmimetypeapplication/vnd.oasis.opendocument.textPK\ETX\EOT\DC4\NUL\NUL\NUL\b\NUL;\138\vC\163\159\SOHAJ\SOH\NUL\NUL\STX\ETX\NUL\NUL\b\NUL\FS\NULmeta.xmlUT\t\NUL\ETX\177)\bR\177)\bRux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NUL\141R\203v\131 \DLE\221\231+<t\173\168\201\162\225\168\217u\221E\251\SOH\EOT'J\171\224\SOH\140\249\252\STXF\139I\ETBu\199}\204\220\153\177\&8\221\250.\186\130\210\\\138\DC2eI\138\"\DLEL\214\\4%\250\252x\139_\209\169\218\NAK\242r\225\fH-\217\216\131\&0q\SI\134\238\"\251Y\187\208d\166K4*A$\213\\\DC3A{\208\196\&0\"\a\DLE\139\141\132j\226\154\ENQ5n\GS\ETB\223%j\141\EM\b\198\211\&4%\211>\145\170\193\217\241x\196\158\r\229\&5[\181\195\168:\175\172\EM\134\SO\\'\141\179$\195\161\222%\254o@\167}\140'\165\\\ESC:\203<\132o\155\167\233\SOH\207\239\208\209\168\186\238\254\SUB\200\234\247\216\166\165\134\198W\SO\211\203\236\186\175%8F\142*\203,\203w\169*\175,|\192\245\CAN\218P\195\181\225\204\147Q\228YC\207\GS\196L\142\194\148\200^\213\131\188\167\205\DC3(\207_\192\204/\SUBV\EM\STX}\134\SYNL\209F\209\161]\136\252NLR\213\v\182\223\148a\173\245\&0\ETXj\173u\216\240B\138xj\185\SOH=Pf\ESC>\201s\132\195\209\ESC\DLE\160\168\145\170z\167\238x\ENQ~\128\221\218\240fo\235s\243\SIW\187\USPK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\"\STX\240\214\207\ENQ\NUL\NUL\138&\NUL\NUL\f\NUL\NUL\NULsettings.xml\181Z]s\218:\DLE}\191\191\"\227\247\148\144\228\&67LB\aHiiI`\128\&6s\251&\236\ENQt#k=\146\FS\224\223\223\149\fi\n8\165\182\245\148\137?v\165\213\238\158s\214\220|X\197\226\228\EM\148\230(o\131\250\187\179\224\EOTd\136\DC1\151\243\219\224\219\164{\250O\240\161\249\215\r\206f<\132F\132a\SUB\131\&4\167\SUB\140\161G\244\t\189.u#\187}\ESC\164J6\144i\174\ESC\146\197\160\ESC&l`\STXr\251Z\227\245\211\r\231,\187\178\DC2\\>\221\ACK\vc\146F\173\182\\.\223-/\222\161\154\215\234\215\215\215\&5ww\251h\136r\198\231\199\186\202\158~\237\n\DC1_\FS\217\ETB\178\197\&8g\231gg\151\181\236\255\224d\179\200W\161\&9\SI\154\219\&8l\183\223\188\217\&8\200\254\156r\ETX\177\141\205\201\230\178]\218m@.\ESC\207\FS\150/Q\v\SO\189\247\235;\223\233\249\150\STX6\193$\216\222\&1\235\132\238pi\130\230\217Mm\223\194\241V\251\&03\RS\204>\242\200,\SO\217=\175_]^\149\179\253\EM\248|qp\209\245\179\DEL\174.\139\EM\US/p9\130\136\242\v:\v&\231\160w\FSL\DC1\ENQ0\EM4\141J\161\152\143\158l+\\j\184\199\b\242\172\207\152\208G\155?\141Yr\202e\EOT+\136\246cu8\185\220;T\SYNj}\\\196{\209\206R\181Q\148\185A\211\230\241y\241\147\204K\188\139\179\203zq\171\&9ER\198\168\230S\SOH\149\151\137\179ZuI;\163\163\188\234\176\165\247w)\211m4\ACK\227\188\202\187(f\251\ab<!K\187i\182@U\174\SI\245\217\SUBS\211A\145\198r\183\154\171\178\222F|\170\172\156\247\227\210e\161Aux\237\245\179\130\171\239\233\&1\b\b\rD]E\ETB\n,\253\192\197\215m%\239\246\166S\GS~\128\DLE\241x\f\205.\164\138\EMB\228?\SOHS\234\237\202\180R\131\223\146\136\153\220\189\151\232\241\186\207\166 \238\&6\228\195C^\220\&3\179h3\r\SYN\170Z\130\207\165'?#\205w[\DELV\234\151W\ETBW\245\235bF\a\169\177\235\238\195\&3\136\DEL9\136H?\164\241\DC4\FS\162T\191\133!\217\&5\182u\SI\153\ETB@\191\195\a4_Rm\248l\221\167m\233Gn\SYN\247L\166L\180\137\168<y\216RG\240$\129h\200C\147\170\252=\149\240\224rj\194\166c\131\201\DLE5\183%V}\232\220\209L`e\134\130\133\176@\DC1\193n\159\171b3\223\&4\fD\228\&3\199:\169RT\128w\204\176)Ue\a\227\152\201\FS\206T;&.h\168\&7wQ\237\226le\ENQ\209\166\136?uQ\SUB\US\217\227<\208&tB\187\CANM\250\RS\\\180i\249s\133\169\140\134L\177\SOH\233\178;\197\150\SO\NUL\170w\214\NAK\200\f\GS\173\128\a\140\153\154\243=*Q\133\151q\204\132\232\176D\SIA\133\148M\212\174\222\191\247u:\GS:z\133\194C?\252He\SYN\141\215\154n\248\202/\v\224D\138@Q\161%\212\NUL\173$\175\156=\186\&0}\230Q\EOT\210\182(?}\201\150\&8(k\255Q\177$\241\211\157z\250+(\217\210\156\201a*\t3\216[\237\188\170\186\247e\255c\156\152\245\155X^\230H\228\212b\182+\245-^x\241\179=\250\193\244?\138\213\SYNb=\161\DC3J\162q?\211l \201+\185\244\224jb#7\194\229W\128]U[Y\STX\140\192N\225`\ETB^+Z\190\RS\129\160\250x&]\222#\169\146\207\170K\210\RS\167\208=Q\210\172\SOY\STX\170\171\&0\RS\131I}\FSF+\202\180\227`6#\241\229\133\133F\SO\221\199\t\v\169\&2&\232\178\171\ETX\194\aleZ\208\198k\STXq\"\188\232B\218\207\199\NAK\193\150d\162\SI,z\163\218K\158\253\152L\v\248\130So\236\SO\148\173\SO;a\167\DC2\201\198 9#\194\ENQ%\250)\129\&4\138\212\182\184\226:t\132xx\224[F\139\146b{\202\142\254\192\EOTg;d)\DC1\167\150\148h\FS\222\230\219/HP\168\SUB,\239\189w\132\212\155l\218\156\246=\208q\134>\210i3p\223h\RS\n\212WX\239\186!M\245\254\178\205%S\235\227\244\147[\243\193\198\247\135\166zs\137\n\186\\ic\197}\ACK\t=\233UL\162\DLE\164\STX\192\DC1\GS\219\237l\SI\244\212(@=\236O\255\142\ETB\170\142\235\251b\249=I\217m\218\168\136\186l \192\ESCg%\FS\254\169(=\205\136H\218\217q\141\213\169\196\191\244@Z\175~H\140\237\v3\129K\SI\DLE\150$bM\157A\217YG\245\230i\237-7\172\203\n\141\&8\178M\254\&9\145\214\133\238\201>\215^t\152\\\145\163\DLE~\128B\194\231\223@s\EM\133\207\158\225{\246\ENQy ;\STX\181\143\227w\t\221e\171R\133=6k\SOH\250\SOH\239`\198R\225#\232\ESCn\231(\221o\170\187d\143\251\221`\168\184\249>\178hD\217\130R\236AVU'\249\201\230\254\ESC\200[|\245];z\247\249\EM\164%\168\ENQ\185M\DLE\DC3\237\&0\EM\130\240\192\219\183J\218\194\179?\152\176\165\251I\224\148\189|\213\177\204\209\203p\235\215Y\178\253;\198T\133\197\139\&9\227\&0V\219\182d\212\SYN\140\214M!\179\241\234\&0\DC1\166\194\215\&8\232\240T\252\192\160\174\204\ao\a\173# \ENQj\219I\203\CANe7G\252\204\210\DC2O\223^Z\250e\STX\217\146!\145x\136\RS\NAK=\170\186b\237$\177\&7\217\229\218\165\135^p\160\ESC\183\204\216\&0U`\252\145\251a\183\182\247s\169Z\222\SI\201\154\255\ETXPK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\250+^\183\175\ETX\NUL\NUL+\SO\NUL\NUL\v\NUL\NUL\NULcontent.xml\165W\223o\219\&6\DLE~\223_\161i@\223\CAN\198\241\ACK4j\236bhQl@2\fM\138\245\149!)\155\ESCE\170$e\217\255\253\142\164EK\142e\v\240\139l\241\190\239\238x\191H=|\220V2\219pc\133V\139|vs\155g\\Q\205\132Z-\242o/_\208\251\252\227\242\167\a]\150\130\242\130i\218T\\9D\181r\240\155\SOH[\217\"J\ETBycT\161\137\NAK\182P\164\226\182p\180\208\&5W\GS\171\232\163\139`+\174X\183\147\147\233\SOH\220g;\190uS\201\RS;\224\146\215\233\150\ETX\184\207f\134\180S\201\RS\vA\237\211K=\149\188\181\DC2\149\SUB\162^\213\196\137#/\182R\168\255\SYN\249\218\185\186\192\184m\219\155v~\163\205\n\207\238\239\239q\144&\135i\194\213\141\145\SOH\197(\230\146{c\SYN\207nf\184\195V\220\145\169\254yl\223%\213T\175\220L\SO\rq\228MV\237f5\185\"6\171\145\208\208\&51\147k#\128\135\233\157\179\233\233\157\179>\183\"n=\146\147\247\248\t\132\225\241\244x\168\ENQSM\181\229\177\131PQ#\234\201\219\140\232>_k\157\\\245\132\216\160\193\221\187\219\219_q|\239\161\219\179\240\214\b\199M\SIN\207\194)\145\&4E\\W\167\130\ACK\184\EM\ACK\EOT\226\ESC_\166\169\240} \236\b\225\SOGq\STX[6\170\250\251\211\227\&3]\243\138\FS\192\226\&2\CAN\te\GSQ\135\200\CAN\159\132\209\157\254\134\r\175\181q)0\229\244\129\t\217\186K\190\173]%\199\219\221K;\232\202\&0v\DC2\n\238\204\&1\180>4\RS\218\b\222\254\146\SI&\249\249\130\184?*\136\&0\SYN/Q\STX\168?7\207\DC2f\183\216cR\ESCC\137\FS\134\188Y\165s\168\212\141\130M\192\217\181\SI \223\214\220\b/\"2\208\138\129\134\193\244\NAK\\v\237\157\236\159R\ETX\158\162\202B\182\161\170u]\244\216\195an\170\237\&4u\190\146\&5+\143\&5\RSu5\181v\238N%\239\229+\246\&2\228\207\&2\152\214{K\189\&3\252._v\avlv\139\211B\t\a7*\t\229\136q*\237\242!\SO\222\180\156\197w\239\247\"\DELv\196<\239\170W\r\NAK\ENQC\182CUB\238\ACKB|^\205\vY\235\138\204N\232\136\146K\252O\186\&1\130\155\236/\222\158\208\241\142\212\218~\232a\226B\158\rTz,Zq\ENQy\128qTi\198\141\SUB@j\225(L\236Rl9\187\184!\200\165\245\166\178\175\224\190\SUBu\234\b7\193\&1\179\215\247\198\175\r1\"\180\208\ENQ\215~\a\216\169lu\235\227\166m+\172\189\198\244cC\ENQ#\217\&3Q6\251\166\EOT\\\"\249hdN`'D\199\238\172\227\213\&5>\238\vn\180\DC2\175\183\142\199\SUBm\191N\SUB\a\134\156\160(\232I\GS\CAN\158\ETX_\255\158%[{'kb\200\202\144z\221\t`\193\223\198\195\v\138\172/Z\251\211\183S\155(\168\134Q\195\141\DC3P\145\165\SO\ETBaD\164X\193\196\160\\\133\ETX;2\254m\172\DC3\229\SOY\184\173\130\214V\ESC\152\146%\145\&6n\175\231\237a\179o7\181\ETB\188j\182K/\222\230\242!\\\193-\255\209\192wF\n\206\219\197,,1akIvH7\SO\238\177\FSI\184\SOH\192\137\ACKC2\136\227\150\255\148\DC2|6\225\FS\240>^\165\236\165K\228uZ\224\239\213J>\199O\134\DLE\246\241\168\213\145\210\175\SOH\CAN\205p,\SUB\150/\255\224R\234\236\USm$\251y\175\164>\164-&\EOT\SIr\133G>\245\150\255\ETXPK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vCq\197\131\202\DC1\ETX\NUL\NUL\DC1\ETX\NUL\NUL\CAN\NUL\NUL\NULThumbnails/thumbnail.png\137PNG\r\n\SUB\n\NUL\NUL\NUL\rIHDR\NUL\NUL\NUL\198\NUL\NUL\SOH\NUL\b\STX\NUL\NUL\NULg?\158\ETB\NUL\NUL\STX\216IDATx\156\237\214A\n\194\&0\DC4\NULQ\ETX\222\255\202_\161 E\DLE\186\CANQ\235{\139\240\179j\SYNC\210\235\204\\\160s\253\244\SOH8\ESCI\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC4\177,\169\181\214\204\220\215m\251\152\183\225i\173>\202\ETB*o\169GO\251y\ESC\246+\231\246\222\135o\DELo\241'\178\164^=g\158\185\DEL\227\247\156\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\138\152\164\136I\234\144\181\214\204|\250\DC4\191AR\135\232\233\&8I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC41I\DC1\147\DC4\177\ESC\b\SUB(\EOTp\211\ESCp\NUL\NUL\NUL\NULIEND\174B`\130PK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\180\247h\210\ENQ\SOH\NUL\NUL\131\ETX\NUL\NUL\f\NUL\NUL\NULmanifest.rdf\205\147\205n\131\&0\DLE\132\239<\133e\206\216@/\ENQ\ENQr(\202\185j\159\192\&5\134X\ENQ/\242\154\DC2\222\190\142\147VQ\164\170\234\159\212\227\174F3\223\142\180\155\237a\FS\200\139\178\168\193T4c)%\202Hh\181\233+:\187.\185\165\219:\218\216\182+\US\154\GS\241j\131\165\159*\186wn*9_\150\133-7\fl\207\179\162(x\154\243<O\188\"\193\213\&8qH\f\198\180\142\b\t\RS\141Bi\245\228|\SUB9\206\226\tfWQt\235\160\144y\247 =\139\221:\169\160\178\na\182R\189\135\182 \145\129@\141\tL\202\132t\131\FS\186NK\197\&3\150\243Q9\193\161\237\226\199`\189\211\131\162<`\240+\142\207\216\222\136\f\166\229^\224\189\176\238\\\131\223|\149hz\238czu\211\197\241\223#\148`\156\&2\238O\234\187;y\255\231\254.\207\255\EM\226\175\180vDl@\206\163g\250\144\231\180\242\USUG\175PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\US\NUL\NUL\NULConfigurations2/images/Bitmaps/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NULConfigurations2/popupmenu/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NULConfigurations2/toolpanel/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NULConfigurations2/statusbar/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\FS\NUL\NUL\NULConfigurations2/progressbar/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NULConfigurations2/toolbar/PK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NULConfigurations2/menubar/PK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\NUL\NUL\NUL\NUL\STX\NUL\NUL\NUL\NUL\NUL\NUL\NUL'\NUL\NUL\NULConfigurations2/accelerator/current.xml\ETX\NULPK\ETX\EOT\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NULConfigurations2/floater/PK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC\252\a0s&\DC1\NUL\NUL>\185\NUL\NUL\n\NUL\NUL\NULstyles.xml\237][\143\227\182\NAK~\239\175\&0\FS\164@\USd\235b\249\&2\221\217 \221\&4H\128M\154f7\207\SOH-\209\182\178\178(\232\&2\158\217\167<\DC4}/\n\180}(\n\180?\173?\160\191\161$EI\148L\209\186\217\214\140\131\NULIL\RS\146\231|\231\240\240\DC3I\141^}\246\184wG\SI0\b\GS\228\221\143\181\137:\RSA\207B\182\227m\239\199?\188\255RY\142?{\253\171Wh\179q,xg#+\222C/R\194\232\201\133\225\b7\246\194\187\164\242~\FS\a\222\GS\STX\161\DC3\222y`\SI\195\187\200\186C>\244\210Fw\188\244\GS\GS*)\161\157\213mN\133\249\214\DC1|\140\234\&6&\178\133\182`]\DELd*\204\183\182\ETXp\168\219\152\200bL\249\230\ESCT\183\241c\232*\ESC\164Xh\239\131\200)i\241\232:\222\135\251\241.\138\252\187\233\244p8L\SO\198\EOT\ENQ\219\169\182Z\173\166\180\&6S\216\202\228\252\&8p\169\148mM\161\v\201`\225T\155h\211Tv\SI#PW?\"\203\171\228\197\251\&5\fjC\ETX\"p\228\213\240a[;\"\RS\182\NAK\208X;\DLE\212\142\r*\\t\175a\215w\175a\243m\247 \218U\248d9\253\ACKW\210\DEL}\243\&6\143\133`_w,\"[\128\202\n\FS\191\182\153\137\&4\223\RS!\148\169J\SUB$\DC3\148\170\171\171\234l\154\252\230\164\SIR\241C\224D0\224\196-\169\184\ENQ\\+C\FS\237E\160a9m\138%\DC4\248@\194\&4\149\SO\136\209\149=\155\211\NUL\250(\136\&2E6\245\DC3\DC4FG\207\166\215.\218\187\213\211\139\212\166\162\219\192\182\133\162X\GSc\138\167\SUB\SOt\229\193\129\135O\198\133\204)w\192\170\228\NUL\154\134N5\161B|\158\146\&6\208\212)\145\201\166\rvI\158T\131m\150\246\&7(\246\176\DC1x\169`\NUL\194G\US\ACK\SO\169\STX.mvW\232\161\&0\ETB\195\208\136D\224\188\255~J\234\DC4\146\155q\246a\203\ETX\183$\233\227\215\233\250\179Ax\237\217\NUL\v*6\180\220\240\245\171$od\197\163\228\&7Q\238~\252.\STX\193\187\167\253\SUBa\a\225\FS\145J\237\GS\247\169P9\149w\243\RS\236\208\RSh\130>\146\154S\237\223\160\&8p`0\250\SYN\RS\EOT}\252\SUB\248(\252-'\147\DC4\140G\133.\137\172\178\133\RS\ACK\ESC\207\166=\178a\224\NAKD|'\178p\194\217\&8\143\208>i\DLEvXH\134\SUB}\143\213\247*\149*\201\213P,`\253\GS\233\245\NUL\STX\135F\228\t\213>\199b\"o\165\229\213C\135\a'\f\187\f\253\&6\182\FS\ESC\140\222\SOH/\FS\253\224\&9\152\STX\193Jd\EOT\178\&5\208\t\159\194\b\238\187\232\200\STX\174\&2\DC2\187\143>\173\154h\172<\225}\169\150\&6\220\128\216el0\237\153\169\180\r\128\191s\172q*\203~+~\128\211O\DLE98\180\&6\232\238\128K\NAK\228Gt\170\147\US\227\DC1\201Dw\225\SO\216\232\160\224QC\CAN)\143\247cu\162iK\205\241\132\245O\199\245xzG\n\230>P\t}`a\230\165\236P\224|D$S%\210\218L&\253@t\180\EOT\178x\185\168\221\239\145\172\168W\ACK\155\139\205\&98\209NI\248\236\ACK\184!\ETB\SI>\b\NULE\144\199/\169\"\242\n\136#D\ACK\193A\226\216\DLE%\162\192\245wYPP=\214\SOH\EOT\152+\134\DC1\SO\137(\173!\v6Q\142\164\149\251\177\ESC(\209\186\DLE&\142gC\178J\DC2\222\207[\147*\153\234\136\215\FS\FS\t\200\SII\FSU\171\157\137\DC3\189\143\172\137C\136a\240\136s\233\224\SYNr\DC1f\146Q\DLE\227\233\136\ETX\134\SYN\134\206G\172\169\166\251\DC1-s\129\183\141\193\SYN\ETBA\143\SYNXx\157\138\STX\FS\NAK?\188\203\204\135\DC1f%\202\a\156\&8\169\234I\135\156\149\164O\ENQs\ETX\224\165=\179\134\172\243\180\238\227\227cZ\197\134Ik<\228\t\186$\204\212\133\143\NAK\157f\181\130n\179:\218q\SOja\214\213\153\138\153\ETB\198\210p\194\192\237\158\252\GS\244\232\n\175\184\192\198\203\140B\181!:`\223\239\157\204\130\154Q\231\199\158\NAK\197I\135dzc\STX\128M\199\RS8\GS\150i8)\182\131\231\167G\ACKQ'\179\149n\230\147\166\CAN\185>\ACK4\159\&1-\194\139s]\197Jy\206\NUL$C\166\161$^\140\206\SUB\172t\248,\228\EOT\vJ\175\209\204\a\ESCL\DC3I9\STX\ETX\184\a\142\167\144\a\179\&4\f\245#!?\SOw%\145\SOS%\225\205\\Fs!\USD\201\SYN\192\SUB\ENQdf\144\168\195\153\FS\135\144\v\252\144\196t\215\129\149\NUL\GSJ\131\227\146\210\FS\253\NUL\161\175Dh\v\163\GSy\198&s\240\212\192\252\128\EM7\198L>\176\199\149\169\"u\159\v\194\DLE\171\135gS>\183\142\251\251\n\STX\155\155\213\149\221\225\130l\251H\DC1\171\226\145\137\203\v\188\199\ENQ?\234\234\143kd?\137\212:\149\212\246 \192\EM\aC\230\211ew>\167\EM$\175X\163(\"\SI\158\234D]\SUB\\v\177p\212\227\254c\224\150W\188\204\rt\193\246\232\130\r\220\ETXx\nO\229\US.\185\&0N[J)\179|Zu\203\n\194\142\SUB\204o\210>\SI\171\DC3\225$r\DC1N\219\190\v\158\&8'\142\248\234.!\210\222\251\170\185ZVz\159\213\157\242~mT\222\226\133\171\141\185\146\128wI\151\&5C\172\236m\173\190\230o\NUL\165\228=\250\n\171\SUB\128\166\206b\211\177\211T\165[\190\201\134$e\175a\177\134\242\143t\191R\173\158\190\NAK+\DELRFZ`\n\132\US\SOH\240\ETXO\157u:o\150\214\n\SUB\139}XoI\230\ACK\200\234\217\DLE\181\131\224kL\249\US{\f\SOH\135\246'\r\129\158\156\213\223D`\235\SUB\153\141\154\&8\177\&1\137\145\214\ACK\169\210\178Yk\233KWx\DC4G\DC4\SI\ETB>\DLE\SUB\162\201\146\227\137h\214\204O\243h>@g\187\195\v\218\SUB\185vu0\211&\\e\210*\173\SYN\183\205#\181\162u&@\219\183q\146.w\146~e'\233\GS\156\&4\147\164\156f\190+S\131S\137\168\153o\197\189\151\179\208Y\188o\200\189o\\\217\251F_\222o\231\230nn\236\205I3\185\147fWv\210\172\189\147\150|\SUB\237\&2C\151\165\244\216\235\EOT\NAKw~\145\249i\202]o^\217\245fO\174o\229\227N>\236\205Cs\185\135\230W\246\208\188\189\135\SYN\141=\180\232\226\161\138\198-=\244\199\CANEt\187+l\227\128\n>N\143\174k>\145\185p\DC3\145\199.ce,\138\143dA\130\164\168*\221q\169z\134\211\234\238\181P\207:\244\EOT\STX\183\203[\145\189/\165P\217\240\t\253\187\NUL\146\219\DC4 \138\160MB\144\132\162x\ACK\240\146#^\236\194\142H0\173@\180\230\238\133x\186p\193*8\184.\209\DC1U\178MU<\240\174 '\194\SO\178\217!\237\"\231(j\147=\170/\224\198\241\FS2\137\DC2O\a{\177\167s\185\DC1/\212\235\150fQ\151\252\215\144w\179*u>\133\226\177\232\249\182\135\ESC\166\&3S\156\203X\233\217\210\206{\178\181Ot~C\220B\175\&4\137\&0\164b\163\178\204\165\&7\227R\172T}\181\170H\253\\US\204\154o\249\&4\132\184\196>D\bw8\188\168\244\228\133\144\198\\}\235\145\147S\DLEd\249\244\167\&8\140\156\205\147B\142\164\176\162\a\DC4\216]\SYNSV\157\220\184H\143\239z\222U\173\228c'8W7V\245%B\145\135\"x\237\153\165\173\202GR\178D\164\228\r\250\158Zux\244\209\202-]\214\187,\216\196=\228\"\233%\157\211\f\178\163\155/\229\130TE\DC4:\201\NAK'c\194\223_\136\158|\172\173\133\213\199vNO6\158O\142\218\210@\225 \229\&4\145^\193iK\153\232\DEL\233\152u\184\211\168 z\DC1\ACK\149+\216\144J-\202\&9\151\163R\172\238\236T\170>\186<\208\157\&1\238\149\&4\245\245\156rV\STX\246\ENQ\232'\235\215#\163\149\t\149\212\&6?\151\251<\142v\168\151\188x<\171\&8\\\246 $\ETB\150\200\173*V+\SI\148\180j\155g\200\244n\202Y`\248*\187wI\NUL\DEL\235\228\247\153J{W\153\220\136\ETB\186\212\NAK\149\222\RS\238K\171\190d\230$\STX\236\150\DC2]\178\SO\142\GS\237\248\140\166\170\248\225p\132\255G3\216\255\208\DC2:\176\SI\236\228\245\175T\147\180':\255\179\235[\172\148M\255r15\165\\\152*\160M4\205\143F6\138\t\253\254d\169\146\DEL\154\242\149\148\237\"\n\DC2\233\255\228\SYNG\145\201\204%DFX\151\241\152y#\SUB\227\EOT!\r\142\163H+\198)\149\ESC\GS\t]\244*\149\228\134\215\183\DC4x\182M\156\188\&9Q\241\216\154I\142Jb\217]\183\DC3C\253.v]\CAN\157\FS'\DC1\147\SOR{\175\139\DELW\164\CAN%+\201NW\225\r\DC3q \t\155g\129$\235 \DC3Z5\137\182\223\239\253\GSy\195\169\DC1\FS5.\178\208 \170>\129J\234[_5y\ETB\ENQ(\137\172\178\254E\151'r\163NF^\231Y\DC3k\238|\128(>bj5\226\148\150\210\236\ETB\237\STX\DC4ow\169\163B\228:Mt\136q\191\201\251\DELm\181\200\USFB\210\217\200\\~\218d\252u\DEL\163\175\155\141\253\198I\SOP\158\215\188x\SIq\134\195\SIz\221\146[\213nz\157M\251\234}\249\ACK\247\200\&0\143\244\146\132\158\188\141,\154\218\169\212\136\ETB\169\235%v\141\255\DC3\149\208\152\140\SUBP\193\CAN?!\EOT\201k+\252\164\DC1\139P\158\196x\171X\130\141\148\191<\208|\187)_\216*\136\NUL\147\ESC\149V\134\154\171'?\f\240,\238Q\161b\152\162\208E3B\245\209@j%e~\233)\240q\a\DELHj\198%Az\\\204\196\DC3\238X\186$\135i\164\146\156\231q\143\&5\228r-kZ\222\DC2\218\147\231_\176\198\&5\252\219(\SUB\225\227\196\216\170\193k\170\165\SIS-c\152j\205\134\169\150\&9L\181\230\195Tk1L\181\150\195Tk5L\181\&4\245\226z\NAK\171xe\233h\199+D\225\185\181\226\SOw\254\196\170\141\249\222\184\145\217\198Cy5\161?\153\192\201\199d\STXR\CANo6\SOfR\DC3\DC1rZ3\232\CAN[\201v\134\&2\228*\148o`\154~\NAK\211\232\187\164\202\154\220\180I\226a\181\208\201\RS\212\229\236\&6\ACKawz\149\234rv\207\ACKa\183\185RW\151\181\219\FS\132\221\139\229bvY\187\231\131\176{\181\156\205/k\247b\NULvk\DC3mIW\186\v\218\189\FS\132\221\ACK\SO\244\203\218\189\SUB\132\221\230\194\188\240:\166\169\131\&0|\177\208\251Il\\uS\206W\241JX\206\249\244ss\190\151A\239r+\210\182\228\143\230<\NUL7\134\164\195V\244n~\225\&4\216\134\222I\237\&6\218\209;]Js\CAN\253\187\&2\189\147\218=kGs\230\210\229\158\253q\151+\211;\169\221f\155,\168/V\154\204nL{\245\235\211;\169\221\243\&6v/\231+Cf\247B\165\184\\\153\222I\237^4\183[\199\203\253Rj\247J5\a@\239\164v/\155\219mLfKC\146\215\180\137\170\ESC\243\235\211;\169\221\171\230v\207&\166\186\144\172c\152\238\171\250r\NUL\244Nj\184\166\&6\183\220\156\204\&5UBlq\230\211\233\ETX\253Y\249]\197K\223\&9\191\&3\134\205\239\232\227`\207yp\b\252\238\212c\238\&9\236\RS\STX\191\211'\198\\\151\240\156s\216=\EOT~gL\204\217L\194s\206a\247\DLE\248\221l\178\208e\143\247\231\176{\b\252\206\196<f.\225\&9\231\176{\b\252n1Q\151\139\229e\237\RS\STX\191[N\244\249R\202\239\250\183{\b\252n5\153]x\NAK\ESC\ACK\187\211\212\201\220\232i\SOH\239@\239*\254\\LN\239fW=\178\253\250Y\239\233\157\&0\173\191\141\190g\DEL\142+\EOT\163\229\238\223\179?\220\NAK\130\209jK\240\ENQ\156\248\n\193h\193#_\196\&1\176\DLE\140\SYN\228\242E\156\r\v\193h\193\&8_\196\129\177\DLE\140\SYN4\244E\156\"\v\193h\193M_\198\209\178\DLE\141V\148u\DLE\a\206\NAK\DEL\229.g\172\230\243\188dh.\134\206X+\182.\147\194\212\ESCt\240\176-\147]\200\153\172n\210-\145\129\&0\217\223\136@\STX\189\&1\217\153aH\207\&5\EMXm\193X'\239w\182c\178T,\233\129~\GS\226~\252\223\159\255\211\198H\252\f,g\168fz\152\151tM\228\234\190jZ\141L\162y\ETXd\234\211\218\222\144\&9IW\135\129L}\142\219\ESC2\171\153\252\130\199@\144\169Ox{BF\155\168\171\165d\235t0\200\212g\191\189!\163\155\&3\233\165\129\129 S\159\n\247\134\204L]=\135\152i\192\139{\131\198\156\155WL\193\205\&8\242['\249\&3\CAN\NAK\239\224\144j\201\235\&7\"\192\207\143\183\148\ACK_5\218\234s\231\222V5l\249\137Um\DLE\200\212'\204\189!ch'\246\170\134\129\204\NAK\216\243\236\212\243\248\&0\144\185\STX{\158\179\191\228\&9pd\174\192\158\ETB\210\227\245\193 sq\246L\158+dG\209\131A\230\n\236YS\159E\158\185\STX{\214\205S\236y\DLE\200\\\131=\207\180\133\252 \225\172\208\180c\207\NAKo3Q\246\\\253\"S\239\236\249\175m\217s\242\145\238kG[7\246\\\203\248#\246\204>O>pd\186\177\231V\200\232\198\\~\132\&5\fd\186\177\231V\200\CAN\166\236\133\138\193 \211\141=\183Bfv\226B\209\&0\128\233F\158[\SOH\195\222%\ESC:2\221\200s+d\216\219fCG\166\ESCyn\133\204R\DEL\SYN\179\169\ESCyn\133\204jf\202\&7\229\135\129LG\242\220\STX\SUBm\"\189\251\DELnd\218q\231\138\&7\197(w\174~I\172o\238\252\143\191\180\222y\RS\196\&9G'\238\252\183\DEL\183\219y6O\236{\f\STX\153N\220\249\185\135E'z\252\162\195\162\DC3=~\238a\209\137\STX\191\232\176\232D\129\159{Xtb\185/:,:\177\220\231\RS\SYN\221\136\236s\140\139vL\182\226\165\&8\202d\171\223\135\235\155\201\254\235\134\239P\252\239\231?\255r\135\162\STX\153?\253r\135\162Odn\224\SOEKdn\224\SOEKdn\224\SOEKdn\224\SOE+dn\226\SOEKdn\225\SOEKh\158\227\GS\138\138\ETB\244({\174~7\175o\246\252\207\191\223.{\174i\252\r\178\231\150\200\220\NUL{n\137\204\r\176\231\150\200\220\NUL{n\137\204\r\176\231\150\200\220\NUL{n\133\204M\176\231\150\200\220\STX{n\t\205 \217\&3\249(d\168X\200\219\&8\219\&8\160_M\GSe\NAK\n\251\\\244\134}=\146\233n\177\207\171*<x\162\SI^\SYN\165\201w\168+\155\DC4\191Ky\242\239<\164\238K5\v\185OS\146\175\210\ETB\218x\169_\NAK\210\159\141\172x\SI\189\252\131\147\181 \128\158\157 p\172\160#Vp\154\133\163\as\rD\195\208J\209G\208\209f\DC3\194\136\255zB5<\172\151\FS\ACK\242\ENQwV\231xV\NUL\137\205\132z\144P\193\GS;\SYN\251Fg\248\250\NAK\251I\190\132\138\251t,%\173H\134;~\184\250\230\187\236\197\206&\159,'\SO\135A6w\178&|\148oP\DC2\248\192u\182\216\n\v\146O\197\166}\254\DC4\135\145\179\193Q\132\161\196\189\RSP`s\223\129\ETB}\134\148\EOT\ETX\158hO(\142\138\SYN\248{m,\DLE*\169Bk\216\f]N\168\v\210\210\GS\251\180\&4\253\171\136b\199\176\222\177\227#\ENQ\ENQ\SO6\ENQ\176\DLEEA\DC4\NUL'\162\189\237A\176\197\217 B>n\196F`ek\DC4a\151\FS\NAK\DC3\215\RS\NAK\ACKL\157\\\155C\128C\SOH\199\220\RS\217\216b7P\162u\254\185\223d\222({\240\152Y\162\226\166)$\153@\b\253\180\187\&4Q\169\234\130\ESC%\253\166\US\203t\164\SOH\NAK2\146\133\160$\EOT6\216\157b\EM\254\187\189\RS\242\178\185\ACKl\226\246$|\147\160N\202\131<y\234\230\167i)\255u`U\229\194B\236\228\212\222\GS\EOT6Q\140\252\152\242 \164\133%AVU\140\SYN\146\212\&30'3\145\211T\161\211J\165\&4\DC4\212\137\206\225\247\132\195\150LL\188\166`\151\RS\a}Q\213c\147\243I\DEL<\203Y\197\RS\132Y\ETB\EM.\172\144\244T\152?x\237\241l\DLE\216\249l\207\209\NAK\204\176D=\150\DC1\253\227\165\151$\148\180\150\244\196\255m\156\DLE\186\208\138\168\n8\US\196\SOHI+\227\215\SUB[\209\&8\241\215\163\180\172\EOTK\246\147\179&\a\164dwZ\156\174\DC3i\197\255\SOHPK\ETX\EOT\DC4\NUL\NUL\b\b\NUL\186\186\vC_\197\128\&2\FS\SOH\NUL\NUL>\EOT\NUL\NUL\NAK\NUL\NUL\NULMETA-INF/manifest.xml\173TKn\195 \DLE\221\231\DC4\SYN\219\202\208fU\161\&8YT\234\t\210\ETXP<v\144`\176`\136\226\219\ETB[M\236\170Je\171\217\&1\191\247\222|\196\238pq\182\&8C\136\198c\197^\248\&3+\NUL\181\175\r\182\NAK\251\&8\190\151\175\236\176\223\236\156B\211@$y}\DC4\185\SO\227\205\172X\n(\189\138&JT\SO\162$-}\aX{\157\FS \201\159\249rd\186Y3\SOH[\182\223\DC4\DC3_c,\148\185>\244Sv\147\172-;E\167\138\137{ \147\219AmTI}\a\NAKS]g\141V\148\211\196\EMk>\n\230s\157\156\224BL\172\209\224\128\DC4\207\237\221\225\FS\NUL\197\DLE^\ENQ\SUB\129(\239 >\FSX{\164\161\207G\227\RSO\201}\162\&26\n\186>y\135\237\GS\DC2\227T\vb\136\175\155\245\183\143\135\186Y\176\227\156\245\180\186\147\&7\143\141iS\CAN!\226V(\173\193B6}\DLE:\133\240\247\244\254\199\181\240nc\194A\STXO\134\235\&9\194\202\ESC\163\222\194\210\v\219\137_\DEL\192\254\vPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC^\198\&2\f'\NUL\NUL\NUL'\NUL\NUL\NUL\b\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NULmimetypePK\SOH\STX\RS\ETX\DC4\NUL\NUL\NUL\b\NUL;\138\vC\163\159\SOHAJ\SOH\NUL\NUL\STX\ETX\NUL\NUL\b\NUL\CAN\NUL\NUL\NUL\NUL\NUL\SOH\NUL\NUL\NUL\182\129M\NUL\NUL\NULmeta.xmlUT\ENQ\NUL\ETX\177)\bRux\v\NUL\SOH\EOT\245\SOH\NUL\NUL\EOT\DC4\NUL\NUL\NULPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\"\STX\240\214\207\ENQ\NUL\NUL\138&\NUL\NUL\f\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\217\SOH\NUL\NULsettings.xmlPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\250+^\183\175\ETX\NUL\NUL+\SO\NUL\NUL\v\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\210\a\NUL\NULcontent.xmlPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vCq\197\131\202\DC1\ETX\NUL\NUL\DC1\ETX\NUL\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\170\v\NUL\NULThumbnails/thumbnail.pngPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\180\247h\210\ENQ\SOH\NUL\NUL\131\ETX\NUL\NUL\f\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\241\SO\NUL\NULmanifest.rdfPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\US\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL \DLE\NUL\NULConfigurations2/images/Bitmaps/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL]\DLE\NUL\NULConfigurations2/popupmenu/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\149\DLE\NUL\NULConfigurations2/toolpanel/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\SUB\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\205\DLE\NUL\NULConfigurations2/statusbar/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\FS\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\ENQ\DC1\NUL\NULConfigurations2/progressbar/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL?\DC1\NUL\NULConfigurations2/toolbar/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NULu\DC1\NUL\NULConfigurations2/menubar/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\NUL\NUL\NUL\NUL\STX\NUL\NUL\NUL\NUL\NUL\NUL\NUL'\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\171\DC1\NUL\NULConfigurations2/accelerator/current.xmlPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\NUL\NUL\186\186\vC\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\CAN\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\242\DC1\NUL\NULConfigurations2/floater/PK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC\252\a0s&\DC1\NUL\NUL>\185\NUL\NUL\n\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL(\DC2\NUL\NULstyles.xmlPK\SOH\STX\DC4\NUL\DC4\NUL\NUL\b\b\NUL\186\186\vC_\197\128\&2\FS\SOH\NUL\NUL>\EOT\NUL\NUL\NAK\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NULv#\NUL\NULMETA-INF/manifest.xmlPK\ENQ\ACK\NUL\NUL\NUL\NUL\DC1\NUL\DC1\NUL\136\EOT\NUL\NUL\197$\NUL\NUL\NUL\NUL"),("sample.lua","-- This is a sample custom writer for pandoc.  It produces output\n-- that is very similar to that of pandoc's HTML writer.\n-- There is one new feature: code blocks marked with class 'dot'\n-- are piped through graphviz and images are included in the HTML\n-- output using 'data:' URLs.\n--\n-- Invoke with: pandoc -t sample.lua\n--\n-- Note:  you need not have lua installed on your system to use this\n-- custom writer.  However, if you do have lua installed, you can\n-- use it to test changes to the script.  'lua sample.lua' will\n-- produce informative error messages if your code contains\n-- syntax errors.\n\n-- Character escaping\nlocal function escape(s, in_attribute)\n  return s:gsub(\"[<>&\\\"']\",\n    function(x)\n      if x == '<' then\n        return '&lt;'\n      elseif x == '>' then\n        return '&gt;'\n      elseif x == '&' then\n        return '&amp;'\n      elseif x == '\"' then\n        return '&quot;'\n      elseif x == \"'\" then\n        return '&#39;'\n      else\n        return x\n      end\n    end)\nend\n\n-- Helper function to convert an attributes table into\n-- a string that can be put into HTML tags.\nlocal function attributes(attr)\n  local attr_table = {}\n  for x,y in pairs(attr) do\n    if y and y ~= \"\" then\n      table.insert(attr_table, ' ' .. x .. '=\"' .. escape(y,true) .. '\"')\n    end\n  end\n  return table.concat(attr_table)\nend\n\n-- Run cmd on a temporary file containing inp and return result.\nlocal function pipe(cmd, inp)\n  local tmp = os.tmpname()\n  local tmph = io.open(tmp, \"w\")\n  tmph:write(inp)\n  tmph:close()\n  local outh = io.popen(cmd .. \" \" .. tmp,\"r\")\n  local result = outh:read(\"*all\")\n  outh:close()\n  os.remove(tmp)\n  return result\nend\n\n-- Table to store footnotes, so they can be included at the end.\nlocal notes = {}\n\n-- Blocksep is used to separate block elements.\nfunction Blocksep()\n  return \"\\n\\n\"\nend\n\n-- This function is called once for the whole document. Parameters:\n-- body is a string, metadata is a table, variables is a table.\n-- One could use some kind of templating\n-- system here; this just gives you a simple standalone HTML file.\nfunction Doc(body, metadata, variables)\n  local buffer = {}\n  local function add(s)\n    table.insert(buffer, s)\n  end\n  add('<!DOCTYPE html>')\n  add('<html>')\n  add('<head>')\n  add('<title>' .. (metadata['title'] or '') .. '</title>')\n  add('</head>')\n  add('<body>')\n  if metadata['title'] and metadata['title'] ~= \"\" then\n    add('<h1 class=\"title\">' .. metadata['title'] .. '</h1>')\n  end\n  for _, author in pairs(metadata['author'] or {}) do\n    add('<h2 class=\"author\">' .. author .. '</h2>')\n  end\n  if metadata['date'] and metadata['date'] ~= \"\" then\n    add('<h3 class=\"date\">' .. metadata.date .. '</h3>')\n  end\n  add(body)\n  if #notes > 0 then\n    add('<ol class=\"footnotes\">')\n    for _,note in pairs(notes) do\n      add(note)\n    end\n    add('</ol>')\n  end\n  add('</body>')\n  add('</html>')\n  return table.concat(buffer,'\\n')\nend\n\n-- The functions that follow render corresponding pandoc elements.\n-- s is always a string, attr is always a table of attributes, and\n-- items is always an array of strings (the items in a list).\n-- Comments indicate the types of other variables.\n\nfunction Str(s)\n  return escape(s)\nend\n\nfunction Space()\n  return \" \"\nend\n\nfunction LineBreak()\n  return \"<br/>\"\nend\n\nfunction Emph(s)\n  return \"<em>\" .. s .. \"</em>\"\nend\n\nfunction Strong(s)\n  return \"<strong>\" .. s .. \"</strong>\"\nend\n\nfunction Subscript(s)\n  return \"<sub>\" .. s .. \"</sub>\"\nend\n\nfunction Superscript(s)\n  return \"<sup>\" .. s .. \"</sup>\"\nend\n\nfunction SmallCaps(s)\n  return '<span style=\"font-variant: small-caps;\">' .. s .. '</span>'\nend\n\nfunction Strikeout(s)\n  return '<del>' .. s .. '</del>'\nend\n\nfunction Link(s, src, tit)\n  return \"<a href='\" .. escape(src,true) .. \"' title='\" ..\n         escape(tit,true) .. \"'>\" .. s .. \"</a>\"\nend\n\nfunction Image(s, src, tit)\n  return \"<img src='\" .. escape(src,true) .. \"' title='\" ..\n         escape(tit,true) .. \"'/>\"\nend\n\nfunction Code(s, attr)\n  return \"<code\" .. attributes(attr) .. \">\" .. escape(s) .. \"</code>\"\nend\n\nfunction InlineMath(s)\n  return \"\\\\(\" .. escape(s) .. \"\\\\)\"\nend\n\nfunction DisplayMath(s)\n  return \"\\\\[\" .. escape(s) .. \"\\\\]\"\nend\n\nfunction Note(s)\n  local num = #notes + 1\n  -- insert the back reference right before the final closing tag.\n  s = string.gsub(s,\n          '(.*)</', '%1 <a href=\"#fnref' .. num ..  '\">&#8617;</a></')\n  -- add a list item with the note to the note table.\n  table.insert(notes, '<li id=\"fn' .. num .. '\">' .. s .. '</li>')\n  -- return the footnote reference, linked to the note.\n  return '<a id=\"fnref' .. num .. '\" href=\"#fn' .. num ..\n            '\"><sup>' .. num .. '</sup></a>'\nend\n\nfunction Span(s, attr)\n  return \"<span\" .. attributes(attr) .. \">\" .. s .. \"</span>\"\nend\n\nfunction Plain(s)\n  return s\nend\n\nfunction Para(s)\n  return \"<p>\" .. s .. \"</p>\"\nend\n\n-- lev is an integer, the header level.\nfunction Header(lev, s, attr)\n  return \"<h\" .. lev .. attributes(attr) ..  \">\" .. s .. \"</h\" .. lev .. \">\"\nend\n\nfunction BlockQuote(s)\n  return \"<blockquote>\\n\" .. s .. \"\\n</blockquote>\"\nend\n\nfunction HorizontalRule()\n  return \"<hr/>\"\nend\n\nfunction CodeBlock(s, attr)\n  -- If code block has class 'dot', pipe the contents through dot\n  -- and base64, and include the base64-encoded png as a data: URL.\n  if attr.class and string.match(' ' .. attr.class .. ' ',' dot ') then\n    local png = pipe(\"base64\", pipe(\"dot -Tpng\", s))\n    return '<img src=\"data:image/png;base64,' .. png .. '\"/>'\n  -- otherwise treat as code (one could pipe through a highlighter)\n  else\n    return \"<pre><code\" .. attributes(attr) .. \">\" .. escape(s) ..\n           \"</code></pre>\"\n  end\nend\n\nfunction BulletList(items)\n  local buffer = {}\n  for _, item in pairs(items) do\n    table.insert(buffer, \"<li>\" .. item .. \"</li>\")\n  end\n  return \"<ul>\\n\" .. table.concat(buffer, \"\\n\") .. \"\\n</ul>\"\nend\n\nfunction OrderedList(items)\n  local buffer = {}\n  for _, item in pairs(items) do\n    table.insert(buffer, \"<li>\" .. item .. \"</li>\")\n  end\n  return \"<ol>\\n\" .. table.concat(buffer, \"\\n\") .. \"\\n</ol>\"\nend\n\n-- Revisit association list STackValue instance.\nfunction DefinitionList(items)\n  local buffer = {}\n  for _,item in pairs(items) do\n    for k, v in pairs(item) do\n      table.insert(buffer,\"<dt>\" .. k .. \"</dt>\\n<dd>\" ..\n                        table.concat(v,\"</dd>\\n<dd>\") .. \"</dd>\")\n    end\n  end\n  return \"<dl>\\n\" .. table.concat(buffer, \"\\n\") .. \"\\n</dl>\"\nend\n\n-- Convert pandoc alignment to something HTML can use.\n-- align is AlignLeft, AlignRight, AlignCenter, or AlignDefault.\nfunction html_align(align)\n  if align == 'AlignLeft' then\n    return 'left'\n  elseif align == 'AlignRight' then\n    return 'right'\n  elseif align == 'AlignCenter' then\n    return 'center'\n  else\n    return 'left'\n  end\nend\n\n-- Caption is a string, aligns is an array of strings,\n-- widths is an array of floats, headers is an array of\n-- strings, rows is an array of arrays of strings.\nfunction Table(caption, aligns, widths, headers, rows)\n  local buffer = {}\n  local function add(s)\n    table.insert(buffer, s)\n  end\n  add(\"<table>\")\n  if caption ~= \"\" then\n    add(\"<caption>\" .. caption .. \"</caption>\")\n  end\n  if widths and widths[1] ~= 0 then\n    for _, w in pairs(widths) do\n      add('<col width=\"' .. string.format(\"%d%%\", w * 100) .. '\" />')\n    end\n  end\n  local header_row = {}\n  local empty_header = true\n  for i, h in pairs(headers) do\n    local align = html_align(aligns[i])\n    table.insert(header_row,'<th align=\"' .. align .. '\">' .. h .. '</th>')\n    empty_header = empty_header and h == \"\"\n  end\n  if empty_header then\n    head = \"\"\n  else\n    add('<tr class=\"header\">')\n    for _,h in pairs(header_row) do\n      add(h)\n    end\n    add('</tr>')\n  end\n  local class = \"even\"\n  for _, row in pairs(rows) do\n    class = (class == \"even\" and \"odd\") or \"even\"\n    add('<tr class=\"' .. class .. '\">')\n    for i,c in pairs(row) do\n      add('<td align=\"' .. html_align(aligns[i]) .. '\">' .. c .. '</td>')\n    end\n    add('</tr>')\n  end\n  add('</table')\n  return table.concat(buffer,'\\n')\nend\n\nfunction Div(s, attr)\n  return \"<div\" .. attributes(attr) .. \">\\n\" .. s .. \"</div>\"\nend\n\n-- The following code will produce runtime warnings when you haven't defined\n-- all of the functions you need for the custom writer, so it's useful\n-- to include when you're working on a writer.\nlocal meta = {}\nmeta.__index =\n  function(_, key)\n    io.stderr:write(string.format(\"WARNING: Undefined function '%s'\\n\",key))\n    return function() return \"\" end\n  end\nsetmetatable(_G, meta)\n\n"),("dzslides/template.html","<!DOCTYPE html>\n\n<meta charset=\"utf-8\">\n<title>The Title Of Your Presentation</title>\n\n<!-- Your Slides -->\n<!-- One section is one slide -->\n\n<section>\n    <!-- This is the first slide -->\n    <h1>My Presentation</h1>\n    <footer>by John Doe</footer>\n</section>\n\n<section>\n    <p>Some random text: But I've never been to the moon! You can see how I lived before I met you. Also Zoidberg.\n    I could if you hadn't turned on the light and shut off my stereo.</p>\n</section>\n\n<section>\n    <h3>An incremental list</h3>\n    <ul class=\"incremental\">\n      <li>Item 1\n      <li>Item 2\n      <li>Item 3\n    </ul>\n    <details>Some notes. They are only visible using onstage shell.</details>\n</section>\n\n<section>\n  <q>\n    Who's brave enough to fly into something we all keep calling a death sphere?\n  </q>\n</section>\n\n<section>\n    <h2>Part two</h2>\n</section>\n\n<section>\n    <figure> <!-- Figures are used to display images and videos fullpage -->\n      <img src=\"http://placekitten.com/g/800/600\">\n      <figcaption>An image</figcaption>\n    </figure>\n    <details>Kittens are so cute!</details>\n</section>\n\n<section>\n    <figure> <!-- Videos are automatically played -->\n      <video src=\"http://videos-cdn.mozilla.net/brand/Mozilla_Firefox_Manifesto_v0.2_640.webm\" poster=\"http://www.mozilla.org/images/about/poster.jpg\"></video>\n      <figcaption>A video</figcaption>\n    </figure>\n</section>\n\n<section>\n    <h2>End!</h2>\n</section>\n\n<!-- Your Style -->\n<!-- Define the style of your presentation -->\n\n<!-- Maybe a font from http://www.google.com/webfonts ? -->\n<link href='http://fonts.googleapis.com/css?family=Oswald' rel='stylesheet'>\n\n<style>\n  html { background-color: black; }\n  body { background-color: white; border-radius: 12px}\n  /* A section is a slide. It's size is 800x600, and this will never change */\n  section {\n      /* The font from Google */\n      font-family: 'Oswald', arial, serif;\n      font-size: 30px;\n  }\n  h1, h2 {\n    margin-top: 200px;\n    text-align: center;\n    font-size: 80px;\n  }\n  h3 {\n    margin: 100px 0 50px 100px;\n  }\n\n  ul {\n      margin: 50px 200px;\n  }\n\n  p {\n    margin: 75px;\n    font-size: 50px;\n  }\n\n  q {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background-color: black;\n    color: white;\n    font-size: 60px;\n    padding: 50px;\n  }\n\n  /* Figures are displayed full-page, with the caption\n     on top of the image/video */\n  figure {\n    background-color: black;\n  }\n  figcaption {\n    margin: 70px;\n    font-size: 50px;\n  }\n\n  footer {\n    position: absolute;\n    bottom: 0;\n    width: 100%;\n    padding: 40px;\n    text-align: right;\n    background-color: #F3F4F8;\n    border-top: 1px solid #CCC;\n  }\n\n  /* Transition effect */\n  /* Feel free to change the transition effect for original\n     animations. See here:\n     https://developer.mozilla.org/en/CSS/CSS_transitions\n     How to use CSS3 Transitions: */\n  section {\n      -moz-transition: left 400ms linear 0s;\n      -webkit-transition: left 400ms linear 0s;\n      -ms-transition: left 400ms linear 0s;\n      transition: left 400ms linear 0s;\n  }\n\n  /* Before */\n  section { left: -150%; }\n  /* Now */\n  section[aria-selected] { left: 0; }\n  /* After */\n  section[aria-selected] ~ section { left: +150%; }\n\n  /* Incremental elements */\n\n  /* By default, visible */\n  .incremental > * { opacity: 1; }\n\n  /* The current item */\n  .incremental > *[aria-selected] { opacity: 1; }\n\n  /* The items to-be-selected */\n  .incremental > *[aria-selected] ~ * { opacity: 0; }\n\n  /* The progressbar, at the bottom of the slides, show the global\n     progress of the presentation. */\n  #progress-bar {\n    height: 2px;\n    background: #AAA;\n  }\n</style>\n\n<!-- {{{{ dzslides core\n#\n#\n#     __  __  __       .  __   ___  __\n#    |  \\  / /__` |    | |  \\ |__  /__`\n#    |__/ /_ .__/ |___ | |__/ |___ .__/ core :\226\130\172\n#\n#\n# The following block of code is not supposed to be edited.\n# But if you want to change the behavior of these slides,\n# feel free to hack it!\n#\n-->\n\n<div id=\"progress-bar\"></div>\n\n<!-- Default Style -->\n<style>\n  * { margin: 0; padding: 0; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }\n  details { display: none; }\n  body {\n    width: 800px; height: 600px;\n    margin-left: -400px; margin-top: -300px;\n    position: absolute; top: 50%; left: 50%;\n    overflow: hidden;\n  }\n  section {\n    position: absolute;\n    pointer-events: none;\n    width: 100%; height: 100%;\n  }\n  section[aria-selected] { pointer-events: auto; }\n  html { overflow: hidden; }\n  body { display: none; }\n  body.loaded { display: block; }\n  .incremental {visibility: hidden; }\n  .incremental[active] {visibility: visible; }\n  #progress-bar{\n    bottom: 0;\n    position: absolute;\n    -moz-transition: width 400ms linear 0s;\n    -webkit-transition: width 400ms linear 0s;\n    -ms-transition: width 400ms linear 0s;\n    transition: width 400ms linear 0s;\n  }\n  figure {\n    width: 100%;\n    height: 100%;\n  }\n  figure > * {\n    position: absolute;\n  }\n  figure > img, figure > video {\n    width: 100%; height: 100%;\n  }\n</style>\n\n<script>\n  var Dz = {\n    remoteWindows: [],\n    idx: -1,\n    step: 0,\n    slides: null,\n    progressBar : null,\n    params: {\n      autoplay: \"1\"\n    }\n  };\n\n  Dz.init = function() {\n    document.body.className = \"loaded\";\n    this.slides = $$(\"body > section\");\n    this.progressBar = $(\"#progress-bar\");\n    this.setupParams();\n    this.onhashchange();\n    this.setupTouchEvents();\n    this.onresize();\n  }\n  \n  Dz.setupParams = function() {\n    var p = window.location.search.substr(1).split('&');\n    p.forEach(function(e, i, a) {\n      var keyVal = e.split('=');\n      Dz.params[keyVal[0]] = decodeURIComponent(keyVal[1]);\n    });\n  // Specific params handling\n    if (!+this.params.autoplay)\n      $$.forEach($$(\"video\"), function(v){ v.controls = true });\n  }\n\n  Dz.onkeydown = function(aEvent) {\n    // Don't intercept keyboard shortcuts\n    if (aEvent.altKey\n      || aEvent.ctrlKey\n      || aEvent.metaKey\n      || aEvent.shiftKey) {\n      return;\n    }\n    if ( aEvent.keyCode == 37 // left arrow\n      || aEvent.keyCode == 38 // up arrow\n      || aEvent.keyCode == 33 // page up\n    ) {\n      aEvent.preventDefault();\n      this.back();\n    }\n    if ( aEvent.keyCode == 39 // right arrow\n      || aEvent.keyCode == 40 // down arrow\n      || aEvent.keyCode == 34 // page down\n    ) {\n      aEvent.preventDefault();\n      this.forward();\n    }\n    if (aEvent.keyCode == 35) { // end\n      aEvent.preventDefault();\n      this.goEnd();\n    }\n    if (aEvent.keyCode == 36) { // home\n      aEvent.preventDefault();\n      this.goStart();\n    }\n    if (aEvent.keyCode == 32) { // space\n      aEvent.preventDefault();\n      this.toggleContent();\n    }\n    if (aEvent.keyCode == 70) { // f\n      aEvent.preventDefault();\n      this.goFullscreen();\n    }\n  }\n\n  /* Touch Events */\n\n  Dz.setupTouchEvents = function() {\n    var orgX, newX;\n    var tracking = false;\n\n    var db = document.body;\n    db.addEventListener(\"touchstart\", start.bind(this), false);\n    db.addEventListener(\"touchmove\", move.bind(this), false);\n\n    function start(aEvent) {\n      aEvent.preventDefault();\n      tracking = true;\n      orgX = aEvent.changedTouches[0].pageX;\n    }\n\n    function move(aEvent) {\n      if (!tracking) return;\n      newX = aEvent.changedTouches[0].pageX;\n      if (orgX - newX > 100) {\n        tracking = false;\n        this.forward();\n      } else {\n        if (orgX - newX < -100) {\n          tracking = false;\n          this.back();\n        }\n      }\n    }\n  }\n\n  /* Adapt the size of the slides to the window */\n\n  Dz.onresize = function() {\n    var db = document.body;\n    var sx = db.clientWidth / window.innerWidth;\n    var sy = db.clientHeight / window.innerHeight;\n    var transform = \"scale(\" + (1/Math.max(sx, sy)) + \")\";\n\n    db.style.MozTransform = transform;\n    db.style.WebkitTransform = transform;\n    db.style.OTransform = transform;\n    db.style.msTransform = transform;\n    db.style.transform = transform;\n  }\n\n\n  Dz.getDetails = function(aIdx) {\n    var s = $(\"section:nth-of-type(\" + aIdx + \")\");\n    var d = s.$(\"details\");\n    return d ? d.innerHTML : \"\";\n  }\n\n  Dz.onmessage = function(aEvent) {\n    var argv = aEvent.data.split(\" \"), argc = argv.length;\n    argv.forEach(function(e, i, a) { a[i] = decodeURIComponent(e) });\n    var win = aEvent.source;\n    if (argv[0] === \"REGISTER\" && argc === 1) {\n      this.remoteWindows.push(win);\n      this.postMsg(win, \"REGISTERED\", document.title, this.slides.length);\n      this.postMsg(win, \"CURSOR\", this.idx + \".\" + this.step);\n      return;\n    }\n    if (argv[0] === \"BACK\" && argc === 1)\n      this.back();\n    if (argv[0] === \"FORWARD\" && argc === 1)\n      this.forward();\n    if (argv[0] === \"START\" && argc === 1)\n      this.goStart();\n    if (argv[0] === \"END\" && argc === 1)\n      this.goEnd();\n    if (argv[0] === \"TOGGLE_CONTENT\" && argc === 1)\n      this.toggleContent();\n    if (argv[0] === \"SET_CURSOR\" && argc === 2)\n      window.location.hash = \"#\" + argv[1];\n    if (argv[0] === \"GET_CURSOR\" && argc === 1)\n      this.postMsg(win, \"CURSOR\", this.idx + \".\" + this.step);\n    if (argv[0] === \"GET_NOTES\" && argc === 1)\n      this.postMsg(win, \"NOTES\", this.getDetails(this.idx));\n  }\n\n  Dz.toggleContent = function() {\n    // If a Video is present in this new slide, play it.\n    // If a Video is present in the previous slide, stop it.\n    var s = $(\"section[aria-selected]\");\n    if (s) {\n      var video = s.$(\"video\");\n      if (video) {\n        if (video.ended || video.paused) {\n          video.play();\n        } else {\n          video.pause();\n        }\n      }\n    }\n  }\n\n  Dz.setCursor = function(aIdx, aStep) {\n    // If the user change the slide number in the URL bar, jump\n    // to this slide.\n    aStep = (aStep != 0 && typeof aStep !== \"undefined\") ? \".\" + aStep : \".0\";\n    window.location.hash = \"#\" + aIdx + aStep;\n  }\n\n  Dz.onhashchange = function() {\n    var cursor = window.location.hash.split(\"#\"),\n        newidx = 1,\n        newstep = 0;\n    if (cursor.length == 2) {\n      newidx = ~~cursor[1].split(\".\")[0];\n      newstep = ~~cursor[1].split(\".\")[1];\n      if (newstep > Dz.slides[newidx - 1].$$('.incremental > *').length) {\n        newstep = 0;\n        newidx++;\n      }\n    }\n    this.setProgress(newidx, newstep);\n    if (newidx != this.idx) {\n      this.setSlide(newidx);\n    }\n    if (newstep != this.step) {\n      this.setIncremental(newstep);\n    }\n    for (var i = 0; i < this.remoteWindows.length; i++) {\n      this.postMsg(this.remoteWindows[i], \"CURSOR\", this.idx + \".\" + this.step);\n    }\n  }\n\n  Dz.back = function() {\n    if (this.idx == 1 && this.step == 0) {\n      return;\n    }\n    if (this.step == 0) {\n      this.setCursor(this.idx - 1,\n                     this.slides[this.idx - 2].$$('.incremental > *').length);\n    } else {\n      this.setCursor(this.idx, this.step - 1);\n    }\n  }\n\n  Dz.forward = function() {\n    if (this.idx >= this.slides.length &&\n        this.step >= this.slides[this.idx - 1].$$('.incremental > *').length) {\n        return;\n    }\n    if (this.step >= this.slides[this.idx - 1].$$('.incremental > *').length) {\n      this.setCursor(this.idx + 1, 0);\n    } else {\n      this.setCursor(this.idx, this.step + 1);\n    }\n  }\n\n  Dz.goStart = function() {\n    this.setCursor(1, 0);\n  }\n\n  Dz.goEnd = function() {\n    var lastIdx = this.slides.length;\n    var lastStep = this.slides[lastIdx - 1].$$('.incremental > *').length;\n    this.setCursor(lastIdx, lastStep);\n  }\n\n  Dz.setSlide = function(aIdx) {\n    this.idx = aIdx;\n    var old = $(\"section[aria-selected]\");\n    var next = $(\"section:nth-of-type(\"+ this.idx +\")\");\n    if (old) {\n      old.removeAttribute(\"aria-selected\");\n      var video = old.$(\"video\");\n      if (video) {\n        video.pause();\n      }\n    }\n    if (next) {\n      next.setAttribute(\"aria-selected\", \"true\");\n      var video = next.$(\"video\");\n      if (video && !!+this.params.autoplay) {\n        video.play();\n      }\n    } else {\n      // That should not happen\n      this.idx = -1;\n      // console.warn(\"Slide doesn't exist.\");\n    }\n  }\n\n  Dz.setIncremental = function(aStep) {\n    this.step = aStep;\n    var old = this.slides[this.idx - 1].$('.incremental > *[aria-selected]');\n    if (old) {\n      old.removeAttribute('aria-selected');\n    }\n    var incrementals = $$('.incremental');\n    if (this.step <= 0) {\n      $$.forEach(incrementals, function(aNode) {\n        aNode.removeAttribute('active');\n      });\n      return;\n    }\n    var next = this.slides[this.idx - 1].$$('.incremental > *')[this.step - 1];\n    if (next) {\n      next.setAttribute('aria-selected', true);\n      next.parentNode.setAttribute('active', true);\n      var found = false;\n      $$.forEach(incrementals, function(aNode) {\n        if (aNode != next.parentNode)\n          if (found)\n            aNode.removeAttribute('active');\n          else\n            aNode.setAttribute('active', true);\n        else\n          found = true;\n      });\n    } else {\n      setCursor(this.idx, 0);\n    }\n    return next;\n  }\n\n  Dz.goFullscreen = function() {\n    var html = $('html'),\n        requestFullscreen = html.requestFullscreen || html.requestFullScreen || html.mozRequestFullScreen || html.webkitRequestFullScreen;\n    if (requestFullscreen) {\n      requestFullscreen.apply(html);\n    }\n  }\n  \n  Dz.setProgress = function(aIdx, aStep) {\n    var slide = $(\"section:nth-of-type(\"+ aIdx +\")\");\n    if (!slide)\n      return;\n    var steps = slide.$$('.incremental > *').length + 1,\n        slideSize = 100 / (this.slides.length - 1),\n        stepSize = slideSize / steps;\n    this.progressBar.style.width = ((aIdx - 1) * slideSize + aStep * stepSize) + '%';\n  }\n  \n  Dz.postMsg = function(aWin, aMsg) { // [arg0, [arg1...]]\n    aMsg = [aMsg];\n    for (var i = 2; i < arguments.length; i++)\n      aMsg.push(encodeURIComponent(arguments[i]));\n    aWin.postMessage(aMsg.join(\" \"), \"*\");\n  }\n  \n  function init() {\n    Dz.init();\n    window.onkeydown = Dz.onkeydown.bind(Dz);\n    window.onresize = Dz.onresize.bind(Dz);\n    window.onhashchange = Dz.onhashchange.bind(Dz);\n    window.onmessage = Dz.onmessage.bind(Dz);\n  }\n\n  window.onload = init;\n</script>\n\n\n<script> // Helpers\n  if (!Function.prototype.bind) {\n    Function.prototype.bind = function (oThis) {\n\n      // closest thing possible to the ECMAScript 5 internal IsCallable\n      // function \n      if (typeof this !== \"function\")\n      throw new TypeError(\n        \"Function.prototype.bind - what is trying to be fBound is not callable\"\n      );\n\n      var aArgs = Array.prototype.slice.call(arguments, 1),\n          fToBind = this,\n          fNOP = function () {},\n          fBound = function () {\n            return fToBind.apply( this instanceof fNOP ? this : oThis || window,\n                   aArgs.concat(Array.prototype.slice.call(arguments)));\n          };\n\n      fNOP.prototype = this.prototype;\n      fBound.prototype = new fNOP();\n\n      return fBound;\n    };\n  }\n\n  var $ = (HTMLElement.prototype.$ = function(aQuery) {\n    return this.querySelector(aQuery);\n  }).bind(document);\n\n  var $$ = (HTMLElement.prototype.$$ = function(aQuery) {\n    return this.querySelectorAll(aQuery);\n  }).bind(document);\n\n  $$.forEach = function(nodeList, fun) {\n    Array.prototype.forEach.call(nodeList, fun);\n  }\n\n</script>\n<!-- vim: set fdm=marker: }}} -->\n"),("reference_docx/[Content_Types].xml","<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\n  <Override PartName=\"/word/webSettings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.webSettings+xml\"/>\n  <Override PartName=\"/word/numbering.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml\"/>\n  <Override PartName=\"/word/settings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml\"/>\n  <Override PartName=\"/word/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>\n  <Override PartName=\"/word/fontTable.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.fontTable+xml\"/>\n  <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>\n  <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\n  <Override PartName=\"/word/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml\"/>\n  <Override PartName=\"/word/document.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml\"/>\n  <Override PartName=\"/word/footnotes.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml\"/>\n  <Default ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" Extension=\"rels\"/>\n  <Default ContentType=\"application/xml\" Extension=\"xml\"/>\n  <Default ContentType=\"application/pdf\" Extension=\"pdf\"/>\n  <Default ContentType=\"image/x-emf\" Extension=\"emf\"/>\n  <Default ContentType=\"image/png\" Extension=\"png\"/>\n  <Default ContentType=\"image/jpeg\" Extension=\"jpeg\"/>\n  <Default ContentType=\"image/gif\" Extension=\"gif\"/>\n</Types>\n"),("reference_docx/docProps/app.xml","<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">\n  <Words>83</Words>\n  <SharedDoc>false</SharedDoc>\n  <HyperlinksChanged>false</HyperlinksChanged>\n  <Lines>12</Lines>\n  <AppVersion>12.0000</AppVersion>\n  <LinksUpToDate>false</LinksUpToDate>\n  <Application>Microsoft Word 12.0.0</Application>\n  <CharactersWithSpaces>583</CharactersWithSpaces>\n  <Template>Normal.dotm</Template>\n  <DocSecurity>0</DocSecurity>\n  <TotalTime>6</TotalTime>\n  <ScaleCrop>false</ScaleCrop>\n  <Characters>475</Characters>\n  <Paragraphs>8</Paragraphs>\n  <Pages>1</Pages>\n</Properties>\n"),("reference_docx/docProps/core.xml","<ns0:coreProperties xmlns:ns0=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\">\n  <dc:title xmlns:dc=\"http://purl.org/dc/elements/1.1/\">Pandoc reference docx</dc:title>\n  <dc:subject xmlns:dc=\"http://purl.org/dc/elements/1.1/\"></dc:subject>\n  <dc:creator xmlns:dc=\"http://purl.org/dc/elements/1.1/\"></dc:creator>\n  <ns0:keywords></ns0:keywords>\n  <ns0:lastModifiedBy></ns0:lastModifiedBy>\n  <ns0:revision>1</ns0:revision>\n  <ns0:category></ns0:category>\n  <dc:description xmlns:dc=\"http://purl.org/dc/elements/1.1/\"></dc:description>\n  <dcterms:created xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xsi:type=\"dcterms:W3CDTF\">2012-01-03T11:25:54Z</dcterms:created>\n  <dcterms:modified xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xsi:type=\"dcterms:W3CDTF\">2012-01-03T11:25:54Z</dcterms:modified>\n</ns0:coreProperties>\n"),("reference_docx/word/document.xml","<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<w:document xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">\n<w:body>\n<w:p>\n  <w:r>\n    <w:t>\n      Hello world.\n    </w:t>\n  </w:r>\n</w:p>\n</w:body>\n</w:document>\n"),("reference_docx/word/fontTable.xml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<w:fonts xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">\r\n\t<w:font w:name=\"Symbol\">\r\n\t\t<w:panose1 w:val=\"02000500000000000000\"/>\r\n\t\t<w:charset w:val=\"02\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000000\" w:usb1=\"00000000\" w:usb2=\"00010000\" w:usb3=\"00000000\" w:csb0=\"80000000\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Times New Roman\">\r\n\t\t<w:panose1 w:val=\"02020603050405020304\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Courier New\">\r\n\t\t<w:panose1 w:val=\"02070309020205020404\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Wingdings\">\r\n\t\t<w:panose1 w:val=\"05020102010804080708\"/>\r\n\t\t<w:charset w:val=\"02\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000000\" w:usb1=\"00000000\" w:usb2=\"00010000\" w:usb3=\"00000000\" w:csb0=\"80000000\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Cambria\">\r\n\t\t<w:panose1 w:val=\"02040503050406030204\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Calibri\">\r\n\t\t<w:panose1 w:val=\"020F0502020204030204\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n\t<w:font w:name=\"Arial\">\r\n\t\t<w:panose1 w:val=\"020B0604020202020204\"/>\r\n\t\t<w:charset w:val=\"00\"/>\r\n\t\t<w:family w:val=\"auto\"/>\r\n\t\t<w:pitch w:val=\"variable\"/>\r\n\t\t<w:sig w:usb0=\"00000003\" w:usb1=\"00000000\" w:usb2=\"00000000\" w:usb3=\"00000000\" w:csb0=\"00000001\" w:csb1=\"00000000\"/>\r\n\t</w:font>\r\n</w:fonts>\r\n"),("reference_docx/word/footnotes.xml","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<w:footnotes\n    xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\"\n    xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\"\n    xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\n    xmlns:o=\"urn:schemas-microsoft-com:office:office\"\n    xmlns:v=\"urn:schemas-microsoft-com:vml\"\n    xmlns:w10=\"urn:schemas-microsoft-com:office:word\"\n    xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\"\n    xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\"\n    xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\">\n</w:footnotes>\n"),("reference_docx/word/numbering.xml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:numbering xmlns:mv=\"urn:schemas-microsoft-com:mac:vml\" xmlns:mo=\"http://schemas.microsoft.com/office/mac/office/2008/main\" xmlns:ve=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:wne=\"http://schemas.microsoft.com/office/word/2006/wordml\" xmlns:wp=\"http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing\">\n\t<w:abstractNum w:abstractNumId=\"0\">\n\t\t<w:nsid w:val=\"FFFFFF1D\"/>\n\t\t<w:multiLevelType w:val=\"multilevel\"/>\n\t\t<w:tmpl w:val=\"D0409C7C\"/>\n\t\t<w:lvl w:ilvl=\"0\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"0\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"0\" w:firstLine=\"0\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"1\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\130\183\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"720\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"1080\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"2\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"o\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"1440\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"1800\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"3\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\130\167\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"2160\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"2520\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"4\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\131\186\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"2880\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"3240\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"5\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\130\183\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"3600\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"3960\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Symbol\" w:hAnsi=\"Symbol\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"6\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"o\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"4320\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"4680\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Courier New\" w:hAnsi=\"Courier New\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"7\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\130\167\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"5040\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"5400\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"8\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"bullet\"/>\n\t\t\t<w:lvlText w:val=\"\239\131\186\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"5760\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"6120\" w:hanging=\"360\"/>\n\t\t\t</w:pPr>\n\t\t\t<w:rPr>\n\t\t\t\t<w:rFonts w:ascii=\"Wingdings\" w:hAnsi=\"Wingdings\" w:hint=\"default\"/>\n\t\t\t</w:rPr>\n\t\t</w:lvl>\n\t</w:abstractNum>\n\t<w:abstractNum w:abstractNumId=\"1\">\n\t\t<w:nsid w:val=\"30585973\"/>\n\t\t<w:multiLevelType w:val=\"multilevel\"/>\n\t\t<w:tmpl w:val=\"A47E15CE\"/>\n\t\t<w:lvl w:ilvl=\"0\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%1.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"720\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"720\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"1\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%2.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"1440\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"1440\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"2\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%3.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"2160\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"2160\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"3\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%4.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"2880\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"2880\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"4\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%5.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"3600\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"3600\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"5\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%6.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"4320\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"4320\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"6\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%7.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"5040\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"5040\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"7\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%8.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"5760\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"5760\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t\t<w:lvl w:ilvl=\"8\">\n\t\t\t<w:start w:val=\"1\"/>\n\t\t\t<w:numFmt w:val=\"decimal\"/>\n\t\t\t<w:lvlText w:val=\"%9.\"/>\n\t\t\t<w:lvlJc w:val=\"left\"/>\n\t\t\t<w:pPr>\n\t\t\t\t<w:tabs>\n\t\t\t\t\t<w:tab w:val=\"num\" w:pos=\"6480\"/>\n\t\t\t\t</w:tabs>\n\t\t\t\t<w:ind w:left=\"6480\" w:hanging=\"720\"/>\n\t\t\t</w:pPr>\n\t\t</w:lvl>\n\t</w:abstractNum>\n\t<w:num w:numId=\"1\">\n\t\t<w:abstractNumId w:val=\"0\"/>\n\t</w:num>\n\t<w:num w:numId=\"2\">\n\t\t<w:abstractNumId w:val=\"1\"/>\n\t\t<w:lvlOverride w:ilvl=\"0\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"1\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"2\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"3\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"4\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"5\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"6\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"7\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t\t<w:lvlOverride w:ilvl=\"8\">\n\t\t\t<w:startOverride w:val=\"1\"/>\n\t\t</w:lvlOverride>\n\t</w:num>\n</w:numbering>\n"),("reference_docx/word/settings.xml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n<w:settings xmlns:o=\"urn:schemas-microsoft-com:office:office\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:m=\"http://schemas.openxmlformats.org/officeDocument/2006/math\" xmlns:v=\"urn:schemas-microsoft-com:vml\" xmlns:w10=\"urn:schemas-microsoft-com:office:word\" xmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\" xmlns:sl=\"http://schemas.openxmlformats.org/schemaLibrary/2006/main\">\n  <w:zoom w:percent=\"90\"/>\n  <w:embedSystemFonts/>\n  <w:proofState w:spelling=\"clean\" w:grammar=\"clean\"/>\n  <w:stylePaneFormatFilter w:val=\"0004\"/>\n  <w:doNotTrackMoves/>\n  <w:defaultTabStop w:val=\"720\"/>\n  <w:drawingGridHorizontalSpacing w:val=\"360\"/>\n  <w:drawingGridVerticalSpacing w:val=\"360\"/>\n  <w:displayHorizontalDrawingGridEvery w:val=\"0\"/>\n  <w:displayVerticalDrawingGridEvery w:val=\"0\"/>\n  <w:characterSpacingControl w:val=\"doNotCompress\"/>\n  <w:savePreviewPicture/>\n  <w:rsids>\n    <w:rsidRoot w:val=\"00590D07\"/>\n    <w:rsid w:val=\"00011C8B\"/>\n    <w:rsid w:val=\"004E29B3\"/>\n    <w:rsid w:val=\"00590D07\"/>\n    <w:rsid w:val=\"00784D58\"/>\n    <w:rsid w:val=\"008D6863\"/>\n    <w:rsid w:val=\"00B86B75\"/>\n    <w:rsid w:val=\"00BC48D5\"/>\n    <w:rsid w:val=\"00C36279\"/>\n    <w:rsid w:val=\"00E315A3\"/>\n  </w:rsids>\n  <m:mathPr>\n    <m:mathFont m:val=\"Lucida Grande\"/>\n    <m:brkBin m:val=\"before\"/>\n    <m:brkBinSub m:val=\"--\"/>\n    <m:smallFrac m:val=\"false\"/>\n    <m:dispDef m:val=\"false\"/>\n    <m:lMargin m:val=\"0\"/>\n    <m:rMargin m:val=\"0\"/>\n    <m:wrapRight/>\n    <m:intLim m:val=\"subSup\"/>\n    <m:naryLim m:val=\"subSup\"/>\n  </m:mathPr>\n  <w:themeFontLang w:val=\"en-US\"/>\n  <w:clrSchemeMapping w:bg1=\"light1\" w:t1=\"dark1\" w:bg2=\"light2\" w:t2=\"dark2\" w:accent1=\"accent1\" w:accent2=\"accent2\" w:accent3=\"accent3\" w:accent4=\"accent4\" w:accent5=\"accent5\" w:accent6=\"accent6\" w:hyperlink=\"hyperlink\" w:followedHyperlink=\"followedHyperlink\"/>\n  <w:decimalSymbol w:val=\".\"/>\n  <w:listSeparator w:val=\",\"/>\n</w:settings>\n"),("reference_docx/word/styles.xml","<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>\n<w:styles xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"\nxmlns:w=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">\n  <w:docDefaults>\n    <w:rPrDefault>\n      <w:rPr>\n        <w:rFonts w:asciiTheme=\"minorHAnsi\"\n        w:eastAsiaTheme=\"minorHAnsi\" w:hAnsiTheme=\"minorHAnsi\"\n        w:cstheme=\"minorBidi\" />\n        <w:sz w:val=\"24\" />\n        <w:szCs w:val=\"24\" />\n        <w:lang w:val=\"en-US\" w:eastAsia=\"en-US\" w:bidi=\"ar-SA\" />\n      </w:rPr>\n    </w:rPrDefault>\n    <w:pPrDefault>\n      <w:pPr>\n        <w:spacing w:after=\"200\" />\n      </w:pPr>\n    </w:pPrDefault>\n  </w:docDefaults>\n  <w:latentStyles w:defLockedState=\"0\" w:defUIPriority=\"0\"\n  w:defSemiHidden=\"0\" w:defUnhideWhenUsed=\"0\" w:defQFormat=\"0\"\n  w:count=\"276\" />\n  <w:style w:type=\"paragraph\" w:default=\"1\" w:styleId=\"Normal\">\n    <w:name w:val=\"Normal\" />\n    <w:qFormat />\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Title\">\n    <w:name w:val=\"Title\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"480\" w:after=\"240\" />\n      <w:jc w:val=\"center\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"345A8A\" w:themeColor=\"accent1\"\n      w:themeShade=\"B5\" />\n      <w:sz w:val=\"36\" />\n      <w:szCs w:val=\"36\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Authors\">\n    <w:name w:val=\"Authors\" />\n    <w:next w:val=\"Normal\" />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:jc w:val=\"center\" />\n    </w:pPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Date\">\n    <w:name w:val=\"Date\" />\n    <w:next w:val=\"Normal\" />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:jc w:val=\"center\" />\n    </w:pPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading1\">\n    <w:name w:val=\"Heading 1\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"480\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"0\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"345A8A\" w:themeColor=\"accent1\"\n      w:themeShade=\"B5\" />\n      <w:sz w:val=\"36\" />\n      <w:szCs w:val=\"36\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading2\">\n    <w:name w:val=\"Heading 2\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"200\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"1\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n      <w:sz w:val=\"32\" />\n      <w:szCs w:val=\"32\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading3\">\n    <w:name w:val=\"Heading 3\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"200\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"1\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n      <w:sz w:val=\"28\" />\n      <w:szCs w:val=\"28\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading4\">\n    <w:name w:val=\"Heading 4\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"200\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"1\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:b />\n      <w:bCs />\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n      <w:sz w:val=\"24\" />\n      <w:szCs w:val=\"24\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Heading5\">\n    <w:name w:val=\"Heading 5\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:before=\"200\" w:after=\"0\" />\n      <w:outlineLvl w:val=\"1\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:i />\n      <w:iCs />\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n      <w:sz w:val=\"24\" />\n      <w:szCs w:val=\"24\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"BlockQuote\">\n    <w:name w:val=\"Block Quote\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Normal\" />\n    <w:uiPriority w:val=\"9\" />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:pPr>\n      <w:spacing w:before=\"100\" w:after=\"100\" />\n    </w:pPr>\n    <w:rPr>\n      <w:rFonts w:asciiTheme=\"majorHAnsi\"\n      w:eastAsiaTheme=\"majorEastAsia\" w:hAnsiTheme=\"majorHAnsi\"\n      w:cstheme=\"majorBidi\" />\n      <w:bCs />\n      <w:sz w:val=\"20\" />\n      <w:szCs w:val=\"20\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"character\" w:default=\"1\"\n  w:styleId=\"DefaultParagraphFont\">\n    <w:name w:val=\"Default Paragraph Font\" />\n    <w:semiHidden />\n    <w:unhideWhenUsed />\n  </w:style>\n  <w:style w:type=\"table\" w:default=\"1\" w:styleId=\"TableNormal\">\n    <w:name w:val=\"Normal Table\" />\n    <w:semiHidden />\n    <w:unhideWhenUsed />\n    <w:qFormat />\n    <w:tblPr>\n      <w:tblInd w:w=\"0\" w:type=\"dxa\" />\n      <w:tblCellMar>\n        <w:top w:w=\"0\" w:type=\"dxa\" />\n        <w:left w:w=\"108\" w:type=\"dxa\" />\n        <w:bottom w:w=\"0\" w:type=\"dxa\" />\n        <w:right w:w=\"108\" w:type=\"dxa\" />\n      </w:tblCellMar>\n    </w:tblPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"DefinitionTerm\">\n    <w:name w:val=\"Definition Term\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:next w:val=\"Definition\" />\n    <w:pPr>\n      <w:keepNext />\n      <w:keepLines />\n      <w:spacing w:after=\"0\" />\n    </w:pPr>\n    <w:rPr>\n      <w:b />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"Definition\">\n    <w:name w:val=\"Definition\" />\n    <w:basedOn w:val=\"Normal\" />\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"BodyText\">\n    <w:name w:val=\"Body Text\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:link w:val=\"BodyTextChar\" />\n    <w:pPr>\n      <w:spacing w:after=\"120\" />\n    </w:pPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"TableCaption\">\n    <w:name w:val=\"Table Caption\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:link w:val=\"BodyTextChar\" />\n    <w:pPr>\n      <w:spacing w:before=\"0\" w:after=\"120\" />\n    </w:pPr>\n    <w:rPr>\n      <w:i />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"paragraph\" w:styleId=\"ImageCaption\">\n    <w:name w:val=\"Image Caption\" />\n    <w:basedOn w:val=\"Normal\" />\n    <w:link w:val=\"BodyTextChar\" />\n    <w:pPr>\n      <w:spacing w:before=\"0\" w:after=\"120\" />\n    </w:pPr>\n    <w:rPr>\n      <w:i />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"character\" w:customStyle=\"1\"\n  w:styleId=\"BodyTextChar\">\n    <w:name w:val=\"Body Text Char\" />\n    <w:basedOn w:val=\"DefaultParagraphFont\" />\n    <w:link w:val=\"BodyText\" />\n  </w:style>\n  <w:style w:type=\"character\" w:customStyle=\"1\"\n  w:styleId=\"VerbatimChar\">\n    <w:name w:val=\"Verbatim Char\" />\n    <w:basedOn w:val=\"BodyTextChar\" />\n    <w:rPr>\n      <w:rFonts w:ascii=\"Consolas\" w:hAnsi=\"Consolas\" />\n      <w:sz w:val=\"22\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"character\" w:customStyle=\"1\"\n  w:styleId=\"FootnoteReference\">\n    <w:name w:val=\"Footnote Reference\" />\n    <w:basedOn w:val=\"BodyTextChar\" />\n    <w:rPr>\n      <w:vertAlign w:val=\"superscript\" />\n    </w:rPr>\n  </w:style>\n  <w:style w:type=\"character\" w:customStyle=\"1\"\n  w:styleId=\"Hyperlink\">\n    <w:name w:val=\"Hyperlink\" />\n    <w:basedOn w:val=\"BodyTextChar\" />\n    <w:rPr>\n      <w:color w:val=\"4F81BD\" w:themeColor=\"accent1\" />\n    </w:rPr>\n  </w:style>\n</w:styles>\n"),("reference_docx/word/webSettings.xml","<ns0:webSettings xmlns:ns0=\"http://schemas.openxmlformats.org/wordprocessingml/2006/main\">\n  <ns0:allowPNG/>\n  <ns0:doNotSaveAsSingleFile/>\n</ns0:webSettings>\n"),("reference_docx/word/_rels/document.xml.rels","<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/numbering\"\n  Id=\"rId1\" Target=\"numbering.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\"\n  Id=\"rId2\" Target=\"styles.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/settings\"\n  Id=\"rId3\" Target=\"settings.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/webSettings\"\n  Id=\"rId4\" Target=\"webSettings.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/fontTable\"\n  Id=\"rId5\" Target=\"fontTable.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\"\n  Id=\"rId6\" Target=\"theme/theme1.xml\" />\n  <Relationship Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/footnotes\"\n  Id=\"rId7\" Target=\"footnotes.xml\" />\n</Relationships>\n"),("reference_docx/word/theme/theme1.xml","<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<a:theme xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" name=\"Office Theme\"><a:themeElements><a:clrScheme name=\"Office\"><a:dk1><a:sysClr val=\"windowText\" lastClr=\"000000\"/></a:dk1><a:lt1><a:sysClr val=\"window\" lastClr=\"FFFFFF\"/></a:lt1><a:dk2><a:srgbClr val=\"1F497D\"/></a:dk2><a:lt2><a:srgbClr val=\"EEECE1\"/></a:lt2><a:accent1><a:srgbClr val=\"4F81BD\"/></a:accent1><a:accent2><a:srgbClr val=\"C0504D\"/></a:accent2><a:accent3><a:srgbClr val=\"9BBB59\"/></a:accent3><a:accent4><a:srgbClr val=\"8064A2\"/></a:accent4><a:accent5><a:srgbClr val=\"4BACC6\"/></a:accent5><a:accent6><a:srgbClr val=\"F79646\"/></a:accent6><a:hlink><a:srgbClr val=\"0000FF\"/></a:hlink><a:folHlink><a:srgbClr val=\"800080\"/></a:folHlink></a:clrScheme><a:fontScheme name=\"Office\"><a:majorFont><a:latin typeface=\"Calibri\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"\239\188\173\239\188\179 \227\130\180\227\130\183\227\131\131\227\130\175\"/><a:font script=\"Hang\" typeface=\"\235\167\145\236\157\128 \234\179\160\235\148\149\"/><a:font script=\"Hans\" typeface=\"\229\174\139\228\189\147\"/><a:font script=\"Hant\" typeface=\"\230\150\176\231\180\176\230\152\142\233\171\148\"/><a:font script=\"Arab\" typeface=\"Times New Roman\"/><a:font script=\"Hebr\" typeface=\"Times New Roman\"/><a:font script=\"Thai\" typeface=\"Angsana New\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"MoolBoran\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Times New Roman\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/></a:majorFont><a:minorFont><a:latin typeface=\"Cambria\"/><a:ea typeface=\"\"/><a:cs typeface=\"\"/><a:font script=\"Jpan\" typeface=\"\239\188\173\239\188\179 \230\152\142\230\156\157\"/><a:font script=\"Hang\" typeface=\"\235\167\145\236\157\128 \234\179\160\235\148\149\"/><a:font script=\"Hans\" typeface=\"\229\174\139\228\189\147\"/><a:font script=\"Hant\" typeface=\"\230\150\176\231\180\176\230\152\142\233\171\148\"/><a:font script=\"Arab\" typeface=\"Arial\"/><a:font script=\"Hebr\" typeface=\"Arial\"/><a:font script=\"Thai\" typeface=\"Cordia New\"/><a:font script=\"Ethi\" typeface=\"Nyala\"/><a:font script=\"Beng\" typeface=\"Vrinda\"/><a:font script=\"Gujr\" typeface=\"Shruti\"/><a:font script=\"Khmr\" typeface=\"DaunPenh\"/><a:font script=\"Knda\" typeface=\"Tunga\"/><a:font script=\"Guru\" typeface=\"Raavi\"/><a:font script=\"Cans\" typeface=\"Euphemia\"/><a:font script=\"Cher\" typeface=\"Plantagenet Cherokee\"/><a:font script=\"Yiii\" typeface=\"Microsoft Yi Baiti\"/><a:font script=\"Tibt\" typeface=\"Microsoft Himalaya\"/><a:font script=\"Thaa\" typeface=\"MV Boli\"/><a:font script=\"Deva\" typeface=\"Mangal\"/><a:font script=\"Telu\" typeface=\"Gautami\"/><a:font script=\"Taml\" typeface=\"Latha\"/><a:font script=\"Syrc\" typeface=\"Estrangelo Edessa\"/><a:font script=\"Orya\" typeface=\"Kalinga\"/><a:font script=\"Mlym\" typeface=\"Kartika\"/><a:font script=\"Laoo\" typeface=\"DokChampa\"/><a:font script=\"Sinh\" typeface=\"Iskoola Pota\"/><a:font script=\"Mong\" typeface=\"Mongolian Baiti\"/><a:font script=\"Viet\" typeface=\"Arial\"/><a:font script=\"Uigh\" typeface=\"Microsoft Uighur\"/></a:minorFont></a:fontScheme><a:fmtScheme name=\"Office\"><a:fillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs><a:gs pos=\"35000\"><a:schemeClr val=\"phClr\"><a:tint val=\"37000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"15000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"16200000\" scaled=\"1\"/></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"100000\"/><a:shade val=\"100000\"/><a:satMod val=\"130000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:tint val=\"50000\"/><a:shade val=\"100000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs></a:gsLst><a:lin ang=\"16200000\" scaled=\"0\"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w=\"9525\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"><a:shade val=\"95000\"/><a:satMod val=\"105000\"/></a:schemeClr></a:solidFill><a:prstDash val=\"solid\"/></a:ln><a:ln w=\"25400\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln><a:ln w=\"38100\" cap=\"flat\" cmpd=\"sng\" algn=\"ctr\"><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:prstDash val=\"solid\"/></a:ln></a:lnStyleLst><a:effectStyleLst><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"40000\" dist=\"20000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"38000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad=\"40000\" dist=\"23000\" dir=\"5400000\" rotWithShape=\"0\"><a:srgbClr val=\"000000\"><a:alpha val=\"35000\"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst=\"orthographicFront\"><a:rot lat=\"0\" lon=\"0\" rev=\"0\"/></a:camera><a:lightRig rig=\"threePt\" dir=\"t\"><a:rot lat=\"0\" lon=\"0\" rev=\"1200000\"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w=\"63500\" h=\"25400\"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val=\"phClr\"/></a:solidFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"40000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs><a:gs pos=\"40000\"><a:schemeClr val=\"phClr\"><a:tint val=\"45000\"/><a:shade val=\"99000\"/><a:satMod val=\"350000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"20000\"/><a:satMod val=\"255000\"/></a:schemeClr></a:gs></a:gsLst><a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"-80000\" r=\"50000\" b=\"180000\"/></a:path></a:gradFill><a:gradFill rotWithShape=\"1\"><a:gsLst><a:gs pos=\"0\"><a:schemeClr val=\"phClr\"><a:tint val=\"80000\"/><a:satMod val=\"300000\"/></a:schemeClr></a:gs><a:gs pos=\"100000\"><a:schemeClr val=\"phClr\"><a:shade val=\"30000\"/><a:satMod val=\"200000\"/></a:schemeClr></a:gs></a:gsLst><a:path path=\"circle\"><a:fillToRect l=\"50000\" t=\"50000\" r=\"50000\" b=\"50000\"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme></a:themeElements><a:objectDefaults><a:spDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"3\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"lt1\"/></a:fontRef></a:style></a:spDef><a:lnDef><a:spPr/><a:bodyPr/><a:lstStyle/><a:style><a:lnRef idx=\"2\"><a:schemeClr val=\"accent1\"/></a:lnRef><a:fillRef idx=\"0\"><a:schemeClr val=\"accent1\"/></a:fillRef><a:effectRef idx=\"1\"><a:schemeClr val=\"accent1\"/></a:effectRef><a:fontRef idx=\"minor\"><a:schemeClr val=\"tx1\"/></a:fontRef></a:style></a:lnDef></a:objectDefaults><a:extraClrSchemeLst/></a:theme>"),("s5/default/blank.gif","GIF89a\SOH\NUL\SOH\NUL\145\255\NUL\255\255\255\NUL\NUL\NUL\192\192\192\NUL\NUL\NUL!\249\EOT\SOH\NUL\NUL\STX\NUL,\NUL\NUL\NUL\NUL\SOH\NUL\SOH\NUL\NUL\STX\STXT\SOH\NUL;"),("s5/default/bodybg.gif","GIF89a\230\NULN\SOH\196\255\NUL\192\192\192\181\181\181\189\189\189\198\198\198\206\206\206\214\214\214\222\222\222\231\231\231\239\239\239\247\247\247\231\239\239\239\247\247\247\255\255\198\206\206\206\214\214\214\222\222\222\231\231\181\189\189\189\198\198\231\247\247\206\222\222\214\231\231\222\239\239\198\214\214\189\206\206\206\231\231\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL\NUL!\249\EOT\SOH\NUL\NUL\NUL\NUL,\NUL\NUL\NUL\NUL\230\NULN\SOH\NUL\ENQ\255\224!\RS\207u\EM\212\243@\142\154B\164\STX\204\244lM\128\181\212|?)\v\160B\214c(,\nFo\185\212\&1\SYN\150\EOT\179\166\192\SOH\142DEe\168\173\252,\211pm\STX\SYN\155g\199\217\162\210p\156\223\240\218\136\212\184<\n\170\186\195\209(8\f\SIe=\n\DC4\EM\bqXdK\tP\135q<\DLE8k:a\v\DC4D9U3\tG\f\DLE\r;W\NAK\EM[\143hQ[\t\EM\133\152L\f\NAKH5\v\EM2\179\DC4\130\166\185<s\"\SI\r*v\SI\"\128\128\SOR<kV\143X\DLEM\NAK\NAK\161\186\177\158H\154=\179\184\\E\DC4\DC45Ji\185P\NUL\DC3\205\226a\158A\NAK\215\234\150\ETB\205\186\240\&3\188$\SI\ACKm\194#\SI\DEL\239\178\180\b\184g\160(Y2$\158\r\"\DLE(QB\198o\198\132g\EOT%\fDvkJ4Y\208\222-\128\144\NUL \141#\v\US\150\162\177f\156\132\v\RS\r\255\190\225\165o^>\a\"\174A0\ETBg#\DC3p\241~\FST\a\141\199+\143\ESCu\FS\163A\225B\SIU\183*4\164Qm\201\198W\NULJ\214`\DC4\EOT\203P\NUL\140\&2\240P\NAKUB\n\149\166\230\180t\217\v\230\129\173\234tI\237\215Jm\218!\156\128\240P:\DC1\227\207h\NAK(\f|\150!\ETX\EOTu\t\210nE\162\fY\218\192\NUL\CAN$PL\202B,&\170\248\ENQ^\252\tC[\176b\230\CAN0KvsL\SUBP\225\173\221$\216 \130\n\156\202\CAN\241\134\186\238\212\153\140, x\b\202\194\179(\139\DC1c-\r\250\178+\n\163f\182\STX\169 \161OR4ZC\200 \193\&7\230%#\f\\ ;\STX\194\244\179\201]?Z\203 C\202p\183\181\&6\225h\230\EM\172\132\132,8X\176@7\214B\188U\242F\194-\195\213\SUB\NAK\246J\225\214@\251\243\RS\195pF\157g\216yr_8`@\132Y\255h6\245\DLE\201\129bts\197\ENQ%\161\246\159\CAN\ETB\177\a!Q\FSZP\b\SOH\ETB\134!\130u\212Uw\221&\226\EM\196\192\ETX\NULH\136\153\132\f\184X\195Bb\f\196Hw\US\233`a\136S,eF\138\148|\210@|<\STX \194u%\RS`\143\b2\132\166\146VN\170x\CAN@\218\152\DC1\216\DC3JU%\131\ENQ\DLE\204T$\FS\198M\145\223^;\208\210\128\143<\RS\128d\146$\236!^\138\ACK\189\249\"\rp\ACK\241\CAN\DC3\200!\167\212{\232Us\209\151bL\240g\SI\SI\216\&7\131p\SYN0\183\225\DEL\a4\192\166X\133\206 #<yI\nV\138N\ACK\197\EOT_i\193\137\165 \206\SOH*_(\221( A\ACK\r\136j\228\154\143\RS !\156\210,6\ETX\172\185\148&!#\165qi\219\&3\178j\ETB\CAN\145=\NUL\171*\FS=\NAKd&\139\128\158\208\234\FS\226ud\144\140\180\154\"\163:\175\176\243\ETX\255\ETB\236\181\&7E\148\&5\SO\251\236\172\NUL\252\&3\SOH(\128\SUB\176l>\142\180\CAN\SI\141\234\198S\154V\147\177\167k\168sE\235\173A\249\&5\129CA\132d \NUL\160\231\142\144*\157\241\192*\236\ESC\EM\212\197\235\&3h\134a\239\189\238\STX\144\223\142\&4< E\SUB\222\&9\240\GSX\SOH\US9\145{\210\242\144\&0<\228\205u\176\152\139BL\233d\249\146\137\134\STX\b\DC4\DC2A\202\241t\220\232UW\154r\195\\4\135\145/~\254\149\215\179\202+\207\176\133\DC1\ENQI\\-\170A\ESC\212\177\n=\232\181\204e\DC4\155\210SrC\a\155\&5\209\238\198U\NAK*\237-\231\192\201\186t\140\135vU\v\141\ACK\175\DC2o=c+W#\146\193\160\\\135\CAN\v9I@\SOH\197b\133H@\183\211\GSS\bI\220g\244\132\196b\208\DLE\254\198\157\135\254=\ENQ\227\222\238\141\134\227*\129s\237\DLE\tq\242\151\212\140v\188\222\140AQ.\139\255\ENQH\215\208\165\232\131l\EM\r\187f$\253\229\DC3\174\233\202\b\ENQ\ETB\DC1\130:\FSGH\161%\DC4\142!!\192\198e\a|\199}:p\137\250S\NUL@\208\150\135\183;\EOT\ACK\204\n\209\219\132\244\185\&86\208iR \237Xb\214+0\247\NAK\DC3\252\160\CANhn##\155\DC2zs\242L\DLE\rP\US\135\231\200\170\145\151\f\145\152\177\&3\STXI\204\168<\228L4X\141\f\174\v\b\240\224\160\147\143\NUL'\DEL/\179\202&\152\STX@0\204b\v\242\218\193\DC3\194\145\144Ph\162#\EM\152\NUL7:\183\172\205\196\143\f\178:\136\CAN\210\176\189\143\f\193\&1\212\147\\A\232\227>\146\&4\204\DC4C\b\194)\174\DLE\ENQ\222\137\206{@\224\199,\148g\167#4o+'\172\146c\SYNp\166\231\156\171\CAN\200Z\192\SOH\\\163\NUL\141M\161#\140@\224\f\155\&8\192\201L\177)o@^<\STX\211\192Y\bA~\138\v\ETXN\174\144\132\255\EOT\240\144\140(\220\196\NUL7q\132fh\SOH\DC3\132(\223\DC4\240\241\168\DC4\CAN\192\NUL3\164B\NAK\184\225\155\226\\a)ih\227\198\160\168\ACK\b0\224\US@X\163\SUB\155\246\ACK(>$\135Qy\161)\160\DLE@\166\192\168\"YL\v{4\210\ACK\204\b(Ic\201\163\SUB\202\240\143g0\160.B\137\STX\SI\192QJC.\225!\139\132B\ENQ%\137\DC1\131\&8\230\CAN\t G\145\156\213?\134a\233\rFP^T\EOTc\137\SYN\138\225\SO\173\ne$WY\134\&5\\\NUL8\236\209B9\226\179\150d\184\210\ESCry\ENQ#f\194\rE&\166dp\216\193\t\UST\183k\132\&02o\b\223\&47q\129\129\&9m,\160\&4\139\252\214A\131_Q !\169\164[\131\134\153\&3\146P\203BkH\192\ENQ\200F\ETX/\133\DC3\v~*\231\EM@\198\200a:\DC4+\SO\NUL\DC1\224\224\&9\160\DC3u\196?\253\220\205BFc\158\188\b\255\194\140\168\161\152\151\fz\165n\158\193\160\153\EOT\160B\US\DC1#RX\177\DC2\128\161\SYN\ENQ\"\160\146\151$\t\STXx8\203h|\STX\FS\211M\163\&8I\160\216h^\161\NAKhTEb\209\208\230\194\196X\201m\253r\165\248Bj\202l\162\ESC\nH\NULp\195`\213<H\180\155\&0\184'\154\\hcGW\145\ETB\228$\ACK\169\201S\158\SI\167\&21\251\216\171\135M\165\147:2\240\128=A\NAK3\163\136\144\165Z\DC4\NUL\172\RS\169\SO\NAK=\v\183\136bVO\212\135\v\133\176D^\184Q\136U0\150vZ\b\ENQ\SYNA\211\141BH\236\149\202\147S\189:uW\RS\133d\t8jW\ENQ\250\n\143\234\&8JM\238\&0\215<\166\131\NAK\131\153\&51\STX\197@!( [\198\214\&6Q}\161@\NUL\128\&3[\SOH` 0\v \ETX\221\NULcY\153\144\241\n\ETB1%f\250B\n%\156\146X\224*\DC24\188'\166\232\ACK\160\161\255\"\154\195i\245pG^8j\175FC\v7\130\226\128\162\204-\178kx\198\ETX\186\177\138\NUL\184\212\DC2\153@(.$\180A\180\EOT\183\f@j\r^k\NUL\156\247F\179\186}i\151g'\203\131W\EM\141\180\185\208n;G\208\206\DC3\168\224\SO\ETB(@\SO\134\"\152\217\186\151\STX\STX\240[\ENQO\147\134\191$`1\176*T\NUL\EOT\224\157\191\DLE\167\148\209%\197\164\236\ETX\139\151\DC1E\142bX\ENQ\NUL^\203\&0\DC4RM\155\EOTC\ACK\SUB.5\ENQ\205\n\NUL\187L`\176KL\208\128\"c@\US,\130\147*\144\195\141\188\228'\SOH\180\179\142Ui\167\131P<c\182\171\152H\ENQ$ \129!\GS\183=\182!Jq7\241\ETB\172D7\a?|\EOT\178\236\243a*|!\a\v\131\211(>&\156\STX\198\ETX\145L\160ow\140\146`\DC1\156V\187G\218\195\RST@\136\132\152\a\202\SOHp\239\140\245reX\244\235\168\DC2\211\255\175\196f[\136\&6\207@\NULC\240\139\ENQ$\DLE\NUL\ENQ-\SUB4\DLE\129\&2x'%\221\245\201\144\140\233\147\STX\132\\\164\149K\140Q4\156\DC3\153\DC2P\ETX\SOH\SOH\192X`\171\237n>|\161#\222^\249\CAN\221\&8t3/pB8[\154`\240\EM\ENQX=T\148\223- \STX=m\145\132F\209)\173\156z\198\DLE\155\215\DC1\200\241\SI1\160\ACK\204\&3N\SUB\CANpA\208\SUB\CANJkh\173\NUL\159\US!\228y8\128U\190\CAN\STX\ENQ&\240\225\162\FSC+\205\DC2\207\STX,C\134# `P\163\NUL\SO\175lc\156!L\160\148\208h\242\172\&6(\152=\185(\174\170J\131\fw\218\131]\157\STX\a\248\147\r\233\218\&6g\137\157[\SYN\147\235D\176v\144\145\NUL\164Y\RS~\134\129\187\235\161\153\f\DLE\219\216z\170Tt\215\&0\DC3\227\NUL\220\201)\154O\177\205(\SOHU\236Vi\163\192\165x~6\178\187f\212\NAKzL\152\DC4\255\236C#\bP@\n\132\163\164\159h7r\163\153\202\155r8\DC2u\222\173Z\DC2\EOT\NUL\a3a\128m\130\253\&3\165\ENQ\198\141)\249\v\139q\169\CAN\170DE\144\134\132r\EOT\FS\176g\n\135\205P;J\155B\205\216\220\"@\153\DC1\201\145\193#\219\166\133\142\244\164j0\v+\235\146Cr(\152\156\221#R\214\144\187\RS\136\245l$/\ETB\248\213P\feY\201\241\NUL\NAK\203\&9\ACK\181;\138\ENQ.\216\ACK}\DC20F\208\153\194\DC3\168[\249\228\162:\165\EM/\226\tXl$\172X\b\133'p`8\170\131\134\146Q\193\202\226sp\b$l\SUB\235(\ETB\193\US\\B \229[u\a\USVwz\241B\153f<\189\226P\232\201r\174\191\202\171d\191\&5\234\SO\204\247\240\211x\163\193\222[\137j\236\142\242\182\189k\207\160.3\161QG\198\141\t\b\164\235\243[\210\STX\185\224\&0\a\201\207\129\ENQ*'\GS\EM6\EOT\255\ETX!\SOH\198\DC37\168\240d\ESCG\ENQ\192\199<q\240a\182Ar\t\227t\209@H^\226~\157\229Y\247\ETBC\167\161\f;3=d\164\NUL\CAN\128|s\208\STX\188\192\STX\170%\GS\169W~\SYNp\SOH\255\128R\135\af\247\DC1V5Q\ETBk\176\DC1;\NUL\SOH\ETX\NUL\ENQ\151`~`v\ba\148\129\162\210\ENQ\DLE$B\EOTQ\ACKG }p\208u&X\130)\216N\r\128G\201C?\142v'\FSa{\178Q\EOTH\NULdjtB\\\194X\171\176%\DC20\SOH\ETB \RS\198\135\ENQ\153 \132\128\178\133&\244a\GS!A\DLE\151;z\243\vp\176|\202GGMh\GSz\240\NUL;\DLE\viT?ixK\211p-\255\211BA@sN\215Qe\ENQ@\DC2\176\ENQ@p\SUB\EM\a@\198\164\134\143p94\160\bj\132\NUL-\229\FS\DC2\247\133\205\195\STX\248\144SwxGPh\a\SO\144\DELi\152\138\213\224%:\160\ENQ\255\245q\t\142!(\CAN\178\FSj\213;\SUB\178\CAN\174c*\151\224X\142\&8n\200G\137\&5!\b\165SO\185\179(\146C\ACK'\176\DC2\174R\NUL$\192\140\a\128\a\190p\SOH|\DLE\f=\200/H\152\ENQ\142\150\t(tp\236\161\CAN\150 p\163\176<\133\208;0C7\132\NUL@\DC4P\a\132\144X\186\196\t\231\a\140\136p\EM\227\131!\236`\GSnp\ACK#\208\STX\240\164\SI\166\136\SOHH\132v4\132\ACK\172\160#\254\150\133\160\197\t\171\144\144\171\224@\182\247v\227\196?\182\240\fu\240+g$\n\240\248%z\163\vf\EOT\129Jh\ACKs\224\a\248P\STX\SI\150z\a\240\at\ETB\144~\DC4I\223(\137\251\148\CAN\247\247~\254t\ESC\210$\ETBqQ\ENQ\233\240\f\152`\DC3\v`\STX\236q\v9IK\ETB\185E\195w\ACK\175\160\CANy!Q\153!\GS\207D\am\128\a&\249\v\245\192\135\145\&4\DEL\SIUh\176\132\137\255F\227M\STX\DC1\ETB\144\241a\216\&0OP\230\&7\182\&1\DC44\DC1\148<\130R\210\242\DC3\ETXp\ACK\r \NULE\214\a,P\146\208\134\STX\190\128\SI\ACK\192\SO\t\168\ACK\179\NAKR\235d\ETX\\\STX\a\191R\CAN^\229\ETB\187\241\EOT\227Uf\243d\150_\242\&0b\128\CANG\208\USfp\STX\SOH\216\ACK\159\DLEa\146\249n\195\192\SO\183\208\DC1\205\DLE\EMkP-\SIu8\229\ACK\SIK\182\FS\234`\STX3\SYN\n \163\152\255\SOHqgPeZ\DLE?=\194|\CAN\240\a\DC1V\STXf\161VX\145^\240\STX\CAN\134\DC4j\234P\DLE\221\145\DC2\221\&1\154g@\n\ESCAl\222s\b\131\197\154<\SYN\SI\198\129a\RS\201|{pd\141R\STX#\192\NAKJUO\161\134\FS\147!\RS\197Q\150\145vY\255aJ\DLE\128\SOH\150\NUL/\140\233\156\186 \ETB\130i\n\227B3\159$\SYN\DC1`\NULN\183$1\209m|SO\SOH\182\"PB\vD\DLEe\255x\241d\198I,\221\240\t\150\128q\191\200\158\229A\158\238r\143S\160\148\159d\SI{`.\247\DLE\DC31\146\149\130AW\v')\224)\\X3\DLE\164\246J+d\RS1\182\ETX\STX\160A\154\197\160\152\&1\EOT\193\185\EOT\158\230\&3\b\SYNd\164x\130\SOH\224(\DELP\DC4\142\"a\SO5[\230\150\CAN\145\146<\226\225\147DPv\229\230\163\231f\RSd58A\208\FS\244\197\162\173\t\ENQd\224\CAN\DEL\DC1f\SO*&\255\146]\141\194\v\ACK\DLE\NUL\211!\GS\141\DC2\fD\176\DC1,\182\161\236\229\"Tg\b4D1c6B\236\177\ESC|\193X\146\162\ETB\209\231!-\146H\216\ACK\165\255q\b\237\177\NULFyYd\179\147\239\153uj\226]\v&\141t\233(h\138or\150\144tB\v\ETX\128\ETX\SO\CAN^\166P\SO\139Q(\204%p\240\145<\228B\v<\180\160z\SUB\a\234\240\ETB<\193H\159\160\165\DEL&\STX^\234\SO\255w\216\NUL)\128\t\191\&2\158D\161\DC4^\201\r\167x\v\bpU303D\210v\217\STX:iQv\RSG\n\223f\vW0\134\149\NAK\170k\168\SOavMM`kS\160|*\183\165\&7\186\165G\"\f\r\160dW\ACK+\248v\ESC\ENQ'\ETX\ETB \SOH\STX \NULk@j\213\STX\v\209VH\170\153\ETB\178i4W\198G\NUL\208W\222\241\142\202j?\134W\170^\181\131\209j\173ZW\173v \STX \153\173u!~\177\214\"\171\137\ETB\213\128\SUBE\231\174\245\EOT\DC4\222`4\220p\NAK\182\225\NULY\166n\b\240q\245z!Q\176\177\206\186)\161R\146g\242W\ap\163,\208\132\215i\174\&3\ACKu\tY\SUBAP\DC1\222s\CANlSV\245Dq\229\&17R\192\DC1\244\SOH\ACK\157F\175\EM\251\154\156\208\&3\n\NUL\153K@\SOH\246y$\ETB\DLE\NUL\DLE\DLE\SOHQ\232g\170Eh\ESCCmS!/\142q\v5\a\DC1\255\135w\fmg\165\185\240\ETB\DC1tT\210\bc=\139;\238\&8\148W\176\DEL=\160,\239Fd\155!y\172\218\v\186\178)=A;\217\215%\178ap\187I\172\&9\216\ETB\152*\172\210\224\136\128\152\NUL\150\DC1\182\170\178\DC1\139\194\NUL\SO\240\146\&40\GS&)\GSg\STX\DC3\255\138\a\211\138?\192\225\SUBJQV\133PWO\NULilu\DC1\203\193\179\211s\177;0.A\NUL\182\130\251\ACKr\241\&8\SI\224\US\RS\180\a\186\165\SI\155\193\a\194\224\DELQq\131\US\161lks5\132\208\139\\\130\181\166\147\131\158\235\ETXT\SYN\CAN\aD\182\165k\DLE\178h\DC1\135\187\EOT\230R\NUL'\224\NULsW\146\250P^w\NUL\SOH,WO\ETX\225=\190WP\186\231@\137\247}\196\147\189\255\161\&7{\164\156\147X\188\aU\t\ENQ\224\ESCEa\aDK\146&\248n*\192\188\194\&0\b\133\209/\243\182\155\FS\177\ACK\180\NULM\177\129\184\CAN\137\RS\255\t\160\142\160j\190\CANB9\vP\NUL)Q\NUL\221\165\143\250\216\188\245\NUL\191\230RH\168\DC1W\198\199\&6\221\&4P\DC4\152\138\SYN\177\NUL\179Q\ENQ\np \179p<\183\180e\229K\192\SOH\161\137a`\SOHR\184\v\249\240\v9\234\148+\224\v\251\DLE\NAKB\129C\203S\FS\233\STXe\t\t\FS\RS\162\137\222\&3~9@:F\160\DC4H\224t\137\181J=h%\ACKW_&\140\EM\185\244\134\SYN\209\177\201G\a\143k\STX\128\160\192\DC40\141Q\DC4\186I\140\ACK\180\&0\r\DC1\148\SOH\ETXP\a\207t\142y4N\152\196\193\&6\217\RS\138\248\197\SOH)F\176\192\ACKM\252\US\\\249D0\NUL /\129L\251\216\STX\197`T\178\177C\171\132\DC2k\ETX\ESC\RS\130\EOT&p\v\130\156\146_\176\177APA\133\148\ESC\207\165A@P\b\134\228\USF\192%\CAN0\199tL9\158\224#&\219&\244\144\SI\210X\SI\ACK\240\193^I\ETBH\236F\255\128\241M\208g*\205\145\RS4\209 \129\&1D\189a\ESCcZ\SOI1?\140p\USA\161\171\154\172\DC2\171!\ACK\DLE\176\194D1\159\243\NUL\b\160l\ENQ\ETBu\r\196:]>\244\129\137As;\153\&8\253S%$\193\RS\163\160\ETX\132\EM\EM:p\v7\DLEC\252$\200\191\\9f0\204\NUL\178\143m0\f\\j\amDV-\166\151\US\204Gz\DC3m\193\188\147\DC4rU\232t\DC4\161R\171\152\EOT\167\US\156<\255\DC3P\233:\206\&0\244\DC1\141\201:J\194\EM\210\SOH\DC3\vm\159\SI\198\188\179\187\CAN\b\DLE\174N1\150\222\131\EOT\135\160\n\142`\SOH\187\&5P]\245~r\EOTe\212\"1\142\252~O\231\ETB\RSM\208\ENQ\157\ENQ\r\ENQ3\187@\"\195\128\SOH\245\t\128\237\180\au\128\192\168\200\196(\226JJ\161\ENQ9P\b\ETB\139\132\t\ETBR\242SC\176\231RFsF\148`\t4\171\210#4\SO\137q\188A\147\146\255\ENQ\181|\v\205\a\SOHP\130\229U\a\SI\128\&9%\SYN#\n\STX\214\218\212\173]\145*O\a\ACK\170\160\195\226\SOH\214\191B\188(\147\149\255C:z1\162N\253\212W\176\t\193<\b\196l$\DEL\230\SO\237\DC4\SOH\188\208\STXu\144\173\233\CAN\SOH\RS\245a\175uY\150\181\FS\147C\t0\210\"\FSj)\250\ACK\148\155\DC2\n\153u\ENQ\255@\166u\173\SYNj\240\207\175\196\163\ENQu\GS\149\137Z\169\218(\172[\USB1\164\188\SOH\214;\ACK@\238\144\ETB\153<i\SOH6+\241bT\231w5\198'\217t\189\217L\160\fD0\168\&4\176\215|\192`\142\226(H+\SYN#\NUL\206\228\201\\\193\210\DLE` \SOH\179\193\RS}\229\163\162\149\&8\203\225X%\140Vh4c\FS\177\158\188M\ETX\135\240\219j FW\241nf\177]jR\218#\128\SYN\239b\ACK3\218W\175``\179\146\SYNj\229\154\194\156\ENQG`Y\187\253\221:\166\ACK\255y\221?\r\193\184\233\173u#\219usp'|a\216\149\181\158\226\FS\175s*`\139\195\ESCy\ENQ\130-\146\158y\202\223\&5\161-\SYNA\204\168\NAK\166\215\161\a\CAN0\SI]\221\r\187\242\ETB\187UT\a\243\ETX.BZ2v\225B\179\&4E\245\&0\177\160\191\230\193\133\CAN\RS|\128\183\225r\DLE\133DV\220*\ETB\NUL\206\200`\ETBM\170\EM\240x\171\247~\222\232\DLE\144=2\137\152\ETBJ\224)S\229a\"\250#z\185\RS\251}\227\200\128>\149\176D4P\168D\214`\142\194\STX\SOH \f\161\232\NAK\r \SOH\DC1\240L\164\&2Z^\186\nc\227\199\242\182f\180\195\r\179Fa'\195\198\238J3\EOT\168\205G\142\229\CAN\178P\a0\DC4j\194u\253\183\182\240\203\EM\139\165<\199\150\ETBP\167\136\218\214\ENQ\210\198\232\201A\231pP-\226G3\246\129?\b\144\NUL\205\225\231VB\NAK\139\146\NUL\129N\ETX\DEL\176\180\188\160,\255\210(\SOHt4\SO\NUL\151y\217\145\178\225\185m\181y\221\SO\240\158zw\SO1k\192r\173\EOT\DC1\144\221\188M\NAK~\234\no:\ETX\252\232*u\160Z\\g\146$\137\GS0\n\190\a\DC1M}\145z\SI\145\197\173\176}6\142\US\DC3\DC3\132\140gx\130\227\233\141\185@\144\&1\236\171\226AGb.\150i.[\GS\133\131\DLEp\DEL\195X.\218\r\251F1\137\242'\222\200\193v\182)\172\CAN*\197\&2\DC2\222\254DC\147\227F\178\SI\249(\f&h\138\128\128\SOHf;\ETXE\166\237\251\230LJA\SOv0\DC1\ACK9#\240\129O\183\148\194T\199?j\196\153\192\221\239H~l\225\222\229\159\f\189\208\v\195\"p\DC2WQ\SOH\DC1\DLE\NUL)\193\233\181\224\NUL#\184^\GS\v\136\f!\238\188\147\&2\194\164\241\226\128\RS\RS\239U\193~\SO\155.\SI\212\v\230\163L\SI%+\f\128\176>\222\DLE\192\193Iu\128+\ETX\185\244L\255\164\208GAx{\184\148\217\143#\137N!\EOT\SUB\223\243Hn\ACKFp\f\209\209\v\237\228\140\&0L\SOH\208[\ENQ\134\198\ACK\202\131\DC2+\180\142A\144\SOHc\243\179Y\SI\EM(\132Kd\ESCH)Q\r]\239\245\224\RS\ACKAo$%H\240\181y\135Q\217\STXa\213MV\149\ENQj\154\ETX\DC1 \NUL\247tJ\167;\b\ESCcz\vQ\199G(\158lT\196~_\tMsH\161 \202A\254\NUL$\169\SID\235\186o\250\EOT[\248\239|oh\209\240j\200`z\SYN\180\&1Z\STX!\170\DEL\237~\SO\242K\128\NUL\142\DLE \211J\a0\DC1\189\174\250\EM\189\145\147a\168\GS\135\200\t\130\146\SO\244\ACK\148Z\DC2\v\176/\v8\155\ESC\171D\217\222\SO;4\195\193\135\178\a.\241\NUL\181\169\STX\229\ENQ\141\147?C\r\130\r!\148\152Sq\SUB\141\132\209[(I[\t\r\CAN\187\154\157\SI\238\226\238\DC4\142`\135\">hm h\255\SUB\ETX\STX\n4\SOH\229R\SOHgY&\149\149\172\137\178\172L\229\178\153\181\242<\163(&\SYN\151m\215\&3eR\EMH\134\ACK`\188\142\210)\181j\189b\179\218\RS\236\153`t\165\bD\233`>\163\r\SO\199\195qh\191\129\nDEa\130\164P\188\132\197\t\CAN\150@@|\157\168$P\232\&00H%$)PT\180$\224\GS\241%\200,P\EOT\SOH\180ly~\130\134\138\166,\132Q-\216\SOH\160\173\RS\168A8P\CAN\168=\FS<)\244M\224-,\SOH\232y\149B\208X\204X\EOT\DEL\225\&5B\248\182@,\246\252\236,\236\&4\250r%Q\ETXPp&\141v{\DEL\DEL\154R%\212\170\178\158\169\157\173\&94<\164\138\228\149\&0@\230\220\EOT\SI\ETX\r\211\216\180\160\244\251D\146\STX\164\STX$JT\130\245\210\134\"\n\184\134\SO\US\154\144We\SOH\EMs\231\f\\8\ETX\161\r\ENQv\DC4\140p;\145\SOH\133\r\ESC<*\255H\ETX\226d\199\&5C\EM\180\157\244\195\131\STX\197\b\213\166\160\212\&4\SOH\ENQL\136>\DEL\130r\150@f\143\ENQ\229\206\153y\133\166\129:\ENQ\ETB\138\249\137Da*$g+\180\225\131\SUB0G\tn<\DLE\246\224v\193j\149&\143Px\ENQ\170v\237\148.\fJ\141;z\SO\STX\211\&3p\206\NULp\n\147\231\141\SUBz\134\254Y0\225V\159\DC4\214\NUL<H\ESCH&J\DEL#o\RS\153\145\225\229\f\182\150/\175(u\137l\209\138H\SIdl\149\SOM\t\ENQ\143\147$A\244\210\215H\CANS\229\b\154\162\173'\143\180\v\148\221\152\170X\n\ENQ\b4wc\SO\254\147\232\145\ENQp\145\214\ENQ\GS\154\244\157C\217\DC2\170\166\NUL\ACK\143\163\202\164 \ETXHRa\183\156\204'\230\165\182\226\136BE\225\230\DEL\138cD\227\\\242\209\171js\170\176\200\235\246\237\139\179\211V\209\ETX\166\244#\EMR\173p\rL\192\ENQXB\NUL\156\157\151\255\224\&7\v XT\EMK-w\128\ETX\DLE\156\195\131\&4\156\244\226_\CAN\248(\214IX\t\GSA\ESC\v\212\233A`^\143\136\168\160\138\163|Q\ENQ\CAN\139\160q\SOH\133\171D\136\215L\206\164\216\139\US;\164h\210I0d@\SYN*R\164\150\SOH\f[\DC1y\193\138KvC\\%\199Ix\129\SOH\172$\247\222I\206\200Gd\SI\131q\182[\DC2\SI\132q\219\DC4\f4\211_/\233\149\144#\147kb\SOH\131\147\&5\FS\176\136\ETXRN\185\n\EOTRV\248cWh\"\185'\ETBY\174 \USJ\ENQR!\232VFJ1(\155\139^\241\SYN\131h\198\128\NUL\fm\212hF\165\&6\ACK\186H\159z^\169\225\149Lt\SOHD\131g\222\224\EOTX\SYN\SUB\193\168\170\140\176\224\196[\b\SO\181H\SOH\180\224i\ACK;u\230\EM(\r\138\RS\193k\t\155\254\SUB\198\160\NAKL\224\196\160\np&\159\&2Q\201\&4\201\170\207\RS\SOH\134\ETB`\192\NAK\255-\131\136IH\203\156\r\204\248\EM\SI@\252\250\166\175\NUL\156\SUB\211\n\b\217c\199\160\213\ACK\202\a\175\SYN `\213\184\208>+m\139\163\130\SOH\ETX\EOT\179>p\SOH-\159\&1\ETB\238\137T\136\202\131\ENQ$\FSQ\216\185.\196\251\223\188\231\138 \147iv@\241&\189\171J;\SO\\l8P\NUL\192\172\CAN\172\174\197\228\202\EOT\SOH\128_!Ln\US\190\245\ACK\SOHCR83\140\193\f\SOr\177\205{\188\&8\ENQ\STX4l\244\239\199\SOH_\248\199\201=\140\176\135\ENQ\r\202\\\130\ENQ}X@\211\SYNI\255A\ACK\212\&7\223l1\ETX\146\"\230\241\207VJ\ETX\ETX\184\EOT\159<\245\183\NUL\222\146O\RS\169V\241\181\204?\fM5\180\EM\235L\131\207[\219xKih?3\181\221\SYNn\167\201\ne\139\160\192\rm\ETB5\140\DC1\224\154\236\182\219\144\150\176\&3\NUL\179\190\209\192\ENQ\237\252\204\tC{GF\DLE\218\152\167\240\STXg\bd\181\255\ETX\231\197\221\131G.B+N\245\ETB\144^=\169\228\ENQ\204x\215g\150\152\128\247\223\209\156\fz\f.Oq\155\&4\186\216\190\229\b\192\SI\150\250\197/*\210\162\DC4\DC4\169\210\173]n|&xf\216\233g!\NUL;\201\179\180HC\223\246O\245\189\a\163\135\152\198\211\187\186am]\r\192\SUB\ETBhm\ACKF\DC3\174\242\128\252\&3\200\&0\t\154\227\175\160\189\fvd\210G$\223\DEL\167/\223\171Dc\200\167\&8\CAN\152oy\NUL \131,\f ;\247]\192\SOH\rl\195\SUB\CAN\196\&4\236\&4\226\ENQz\NULB#\242B\ETX\ENQD\160\DC3>\218]J8a\GSFD\STX;\ACK\132\150\171\218\STX%\bB\207\f\148\154\211rH\SYN\190\NULm\135\ETB5\144\EOT\a\255\163\f\a\220\160/\209\178\SIW\198d$\NAK\174pU\132\&8E\139hx\129\201\197\208\NAKkPC]\152V\f>\244\130z\EOT\225\ETX\197T\178\DC3\205P\129\SOH\SI\240\255K\161Z`\162$\170\234\DC2\167H\133\SOH 0%\231%eB\233\160\128\132\128\NUL*\148(\163\131\217\168\202Bl'\130\&3\DC2\234\tj2I\ACK\198\136F\170]\139\DC1r\249X\EOTe(\191\188,-\n\136\154\135/r\148\SI\211\&0n&\223z\DC3$&sH\170\193\173(\139\220Z\ESC<f\130\DC3\f!G#4\SOHah\160&.\224\r8\246\t\192'\171\&6\142\ENQ>\232g\178\144\160\ETX\203f\f0\212\a\DC1\136\&0\228L\200\&6\178@^\ENQf\SI8P-m\ACK\131\ACK\173'\151\159ic\EOT_\209\DC1\194(c\b\145\CANUf\208\246\202\SI\129\211`\219\201d3\153\212\194J\NUL\198\"\159i\228+(\168\146R\CAN\137\156]\217d\SYN \179\ESC\n(\175\156\208\202\164\fV\192HK\173\195\fw+\215D\f\146\157,X2l\199\212\167\130\194\228\162r\168\&3F\146s\163\148bX\139a\DC4+\v\171\FS\DC2\SYN\255\NUL\NAK\150\152\149\135\161\139ZD\ETB\248\t \SUB5 9s\154\211*Fg\133U>\167\158\226\216\149\215\b'R&)O\DC1cZ`\ETBV\250D\\M\SO4\172p\135'R\132\168*D\"H\133\147\131\216n\170D\141\249\161\129\&3\218\214\182\224\CAN\anF\235e)\176i\166n \SO\233 `0\\u\234\154\242i\173\&0\168\227\167s\178*:\142v\133a\137\227a\ACK\131Dz\ACK\DC34\178\RSoT\t\192Z\t\250\197\134\STX\252\DC4`\CANY\168\178\128%W\165\241\129\160w\192\171\205B\EM\153\&0<\192\129\254bk\SUB\216\144I\211\144\233a\240\162\130\204\SO\203\216\155\&1\174u+XCd?\230F\248\DC1\140X\228R\172\229 \ENQ\174b\164\236\179\169\&3+\ETB\216%\v]\SYN\NUL~\DLE\237A\193\150F82\185VtM\149\237\205\FS\235\131X\249skl\b\216\244\222\&1\\2\189)h.%\174\234\158\DLE\255\&7\RS\NUL\172c\ACK\232\200\220\246\224\130P\r70\189;\\x\169K/\227\238\&0\164\159\153\NAKF\230v\NUL\147\DC1Fa\168\&4h\200z\a\143\223\153\215x:\133\EM\CAN\147;T\139\166\161\NUL\248\224\171\239\232\155\191\182A\SOH\190\130\211A~\141\&72\230}er\STX`\223\ESC\NUL\140\134\&6\DLE\240\174\188\GSZ>v\182\b\233\&5\216\193\227H\US\SI\NUL\235\175\ACKH \STX\146\131\158 &\136a\128\228\134\193<\208\GS)RrB\137\132x\182\209\197%\SI\"\216\NUL\232a\EOT\ETX*\150\FS\SOH\158\CAN\193\ah\STX\155.\216E\SO\140\240\157\EOT\228\130 7\206\177\SOHi@[\DC3\168\145\a\r\136\192\228\STX\192e7\CAN@r\179H\233\148\FS\224\203>\184i\EMz\160\228\v\140\DC3S*\175\144\159!\237\235\ETXRLQ\f\EOT\128\134l\200\&3\ENQ$ \208\198\&5\235%#9\201\217P\DC1[8\147/\157\207`\192n\US\180\175\NUL\255\228\EM\160\239}\226\ETX~\252gOT\128\DC2\229E\180\219\160\153e\236\" )a\134t\NULD\163\ACK\SOH\196\144\211p\142\238\156Y@\SO4P\b\STX\164\150Ri/\173\133K\184Y\213h\132\DC49\164\176\ACKFF@\NUL?\158\220TR\218\128F\217Ca\186N\244N\ESC]\STXv\144\154\212)}\175T\GS \SOH\t4\NUL\DC1.P\128\EOT~u\131A\ETB(_\193[vu\139\163h\236\246,\178\212\188@\180U<\171\142\DLEdN\CAN\216\129G\SI\SUB\168 \146\187\202m\137\151\DC4\232&\161`_\251\STX\218\254\203\183\233\145\239f\178\206\217\210\244\183\194\&9\129\213\131\235{y\173^\184\191!.\219\156q\225\220\216e8\166,\238T7\241\ETBR\FS\239\184\199E\154<\206\192\128\175G\CAN\185\173Knr\226\&8jT,o\184\203k\249\233\SUB\176k\229,\175\249\199\&9C-\139\205\156\231\f\GS\nm\243\197\184\160\v\189\255\150p\v\165\163\170\128\244\164\215\178ZV\201\215\196\253\203q\168\151\211\184Dw\250\206\177\142\240gh\\\231#\247z\212\139Cb*<\157\236q\142\214^\175\144v\181\147\143\&80\160\185\213\EM\SO\247\NAK:\233\vU\223\248\216\239n\192\153.\240\225\DC1\173\184\223SW\n\162\232\GS\vo/\252\197Jj=~\187\189\235\140\175Zz\188\150\133\197O\254\169\&0k\187\226%\159yz\209@&\US\212\STX\230??\210\202\243\184\243}7=\198X\149s+\148\158\245Kj\145)\230.\248\186\DC3^\246\140\202\251\217U\DELu\221\167\145,z\191=\238\233\ACK\252\145:\220\aW#>\197\141\DEL|&\145\148,\139\200\&5\233=\255\252\134\250<\229\242\236A\236\175\US\FS\179~\225-\159\232\190\247\&1\147Ojm\159\251\214/\255y\224\150r\230\ETB\DELk\236_Q\CAN\146\183w\174\175~\254\230\201'\STX\ETB\218\239\245\235\US[8\255\131\171$\RS(\144_\NUL>\EOT\STXY\ENQ\STX\221\US\254\253\RS\STXZ\ACK\181X\200\SI\136\194\SOHB`C\176\139\DC34\160\ETX\218\221\ENQ\178\133\&8\204\221(X\160\a\142\194~ED\234\EM \NUL\146`C\NUL\RS\221\249^\a\174 D\128`\227t\195\b\198\224\SYN\152 \134\168\130\&7\216\224\rb\129cY\153\255\193\158\n\250`PpAi|C\SI\SYN\225)\DC4\a'\b\225\DLE\230\223\DC2\134\194\f\230\ENQ8(\161\DC4\RS\161\242\241\148\NAK\DC2!\SYNZ\129\DC3\132\193\&3m`\245E\161\ETBf\129[\200\195\251\&5\196\NAK\154a\SO2 \252A\225\ETX\154\225\EM\130]\n\164\223\229u\225\FSf\225\RS\144\194C\176\225\DC2\210\214f\188\RS\SI\230\161\RS>\SOH\130L\223\DC3\146\161\FS\182\225\230\193\n'\140\225\248\NAK\"\tJ\139P,\STXz\181\200 &\225$\146\160\SUB\233\148\EOT\178\157\DC3\254\196\US\150\159\251\&9\RS\171p\158O\144\226\245\209\255\158u\129\FS\204$\"P\172\226\241\149\148\180\CANG\"U\194\DC3Db(\204\162\236\217\139q\184I\ETB\f\162-\222a\n\150!%\246\159\133\220\220\DC1\166\226(rb)>\DC3\204i\226>@\158,>#+\190\197\DC2\233\224\t:\200\SYN\174E/f\RSI)\SI`h\"\v\244![\128c\230\SOH\ACK\SUB~\161.^F:\134\163\248\181I\EM`\ACK<\SYN^\244m\159\DC3\224\":^\227\243\181\226\NAK\bc1\DC2\226\&1\178_\CANN\vz\197\192\223\b\135=b\221>\FS\162\149\165\NUL7\161\149y0$\212\ENQ$\174e#\DC3\"!E\246\227\231\157\162\ETB\132Vf\b$\ETB\DC2\228\243\201\163<\194E\SO\226\140(\158GE\214\\\255\GS^\SUB\"\228~U\227Bvd\225\&9d\SUB:\\\216%\159\&7\182\228M\SYN\RS\248\EM\GS\"\SO\160\"B\132K\146\GS\198\229\"K*\bRb\GS\237=\226\DC3\148c=\STX\229\231%\255\207>z\129<\212d\130\&8\229S\194\140<`%WV\165\223]\226fD\165\GS\174IWZ\FS\\TK\229\r\224HZcI\250\162\STX^\153\&9\158\210\162\168%\196\ENQ\227\152\b\133Q\242\163\\\234\RSB\246$\132\225\229X\170]h\149TX.I^B\FS\239\181\202\179\&0&\185A$\ETB8\195\171@\166az\165\220\213\192.\254$`\170#\245Y\SIX\194\161Mz&\227\129\225R:!\\\ACKGdr\154\147\248A\239A\vk\194\EM\154\212\USg\170\136l\230\216\149\213\166\219\224f\131\193\138\US\DLE\230\205\244&uM\223\RS\158#ob\166\197\145\148qNel&\231\193\217\162\SYN\222\165\241\f\167SUbz\192\141\227\144Ou\222\212\234\136\131R\170\FSu>\167\174\NAK]m\170fZ\142\167\170\129\160UP\196h2\nw\150\211\189\FSWej'\SUB\193\167\210M\159)L]s*\206}~RN\197\255\128P\132\167}\166'q%\146c-\157m\218\140\DEL\166\206'\"\215|\154\128\130.h\129~V\237\173d\171\184\231\197\&0\168\225\161\207\n\212\167>m\232\226\&8\162\135\158\231\132\150\230\178\229\157<\\\141_\246'\133\146\NAKv\134\193\206\176h\139\158(\149]\194P \158[\240g-\133\168\170\\\162u5a\171\148(\141\&2\226'e(3\186f\152\f(Y\245\232\&7\252h\t>\233\RS\212\223\142\234\DC3e\221V\SUB\180\145\v\SUB\143wf(B\138\222\SOH\f\233v\226\138\251\212\t\174\148\169\150v\SUB\v\156\220\173YY\131(\SUB0\134X+\160\195\ESC5\144\f\161\ETX\154\&6\150'\250A]\154]O\250\128\232\241\164l\189\ETB\133\152i\150N\201\ESCQ\219\DELb\153\133\&6\nm\158_\160\DC2\151\251\200\233\164\210\194\161\138\134\EM(\166q\170\ENQ\252U&>V\226d\170\a_\238\SOHh\198\169\251\DLE\234\140\208i+t\255\203\&6\182\ENQ\171\STX\ENQ\159\230\"\CAN\230\140\&8V\226q\149c\190D\202\140\&2\212\156\138\ACK\FSY\234\159\&1\136JF\132<\STX\ENQ\168\226\CAN\171\212@\DC3>\168\171\130]N\237L\152\&6\DC3+d\169\157D\214\140\196\192f\252\169(\158\230Ky\STX\242<\DC3\134\208&7Yb\182\142\137)P\EOT\180\150\DC3\221\164\170\179\213\159\&9\"\DLE\184\186\b\179\150\171\171\173\233\149-g[X(b\214f\166R\EM\195\225\n\171d$\237\185\EM\172\170\233<\226\\\150\173\142\220\233\NAKH\RS\162e>\131L\188\197V\234\SUB\230a\171\248\225h\193~\195?\202\231\RS:,'|\154\212-#\206\NAK\ENQ\169\146[\233\193\ENQ\255E\159\&7\172i\179\neb\SUBGY\190\b\191J\165\173\134l\201\DC2\225>\174\169`2Q\248}k \n\171\189(O)\164\236\214\153\155\144P\132\174RW\SI\226\234!~e(\166a\CAN\214\158\t\182\162\195\174\255\206\139d\210\235\237\NAK\149\170\154\DC2b\\\173V\237\249\249)r=S\242\236$\209)\194\181\216\v\134NK\239\b\USEHl\201]a\198\CAN\221\181\200\234fT\236r^\167\221f\229\214=\147\221Z-\250\208\214\209\RSi\191v!\193\SYN\197\141\RS\171\148\162\211\163\232$\222\246-Z\226k\SO\SUB\199\146&\157\ENQn\159[\NUL(\206\DC1\229\216F\EOT[\134\137\208\178\157J\RS-\186\DC2n\141\226`4j*\189\230K\218R\203[:b\237\GS\237\228\201&[\222\226!\154\143\197\130\145`\174\238\181\214n\230\&1\230\214\157&\226\218\225:\230d\185\230\220\207!\173\197\&1f\232\221\\\253\245-\177\246\206\205\229\203\203\234\222\242\n\227-6\203\168\&2\DC1\216\221\"\233B\\^\154\171\SO\186\202B\DC1\173w\156\171\247*\175\139\250\128(\nc\f\244\151z\164G\247\162/\220\170\175\249bY\DLE6\nQ\FS\RS\152\206o\205\185\255\164R\182\239\SI*\229V],\EOT\186$\174}\194\201\133a\236\174\224\255\194\161\209\165\ETB\201^\160\DEL\n\175\195\201h\255\222\GSw\130\162T\202/\SYN\246f\211\225\220\203\SUB\174\a\178\230\210\130\229\249\SUB\226\224\&9\USPL/\ETB(\NUL\255\166p\252U\142O\172l\171\132Z\242N0\133\254-\206yX\fO\129=\SO\240^\205\129\204\198p:\154%\174\141\129\214\SYN1Pf\163f\\e\247\SO\174\ETB\218\160f\244\151\"\128\193\179b\240\rb\158\213\222\168\207Mn\DC2G\241\DC2s\FS%X\177\220\130%\209\EM\199\SOHH\202\b\251\&0\RS\250[\ESC\EM\192\141*\160f\f\133\140\STXc\SYN\167\176`5\208\RS\v\148\NAKO.\246\226p\ESC+\222\RS\DC3\242\\\184Q\GS\159o\CAN\v\242\SYN\196ZR\136Zd\201O$\ETB\192$K\138\176.\178e8\144\ETX\205\202$\171\ESC\FS\187\145\EM\140\193%\171\200\225U\173(\155\242)\163\EOT\178'\132\NUL\NUL;"),("s5/default/framing.css","/* The following styles size, place, and layer the slide components.\n   Edit these if you want to change the overall slide layout.\n   The commented lines can be uncommented (and modified, if necessary) \n    to help you with the rearrangement process. */\n\n/* target = 1024x768 */\n\ndiv#header, div#footer, .slide {width: 100%; top: 0; left: 0;}\ndiv#header {top: 0; height: 3em; z-index: 1;}\ndiv#footer {top: auto; bottom: 0; height: 2.5em; z-index: 5;}\n.slide {top: 0; width: 92%; padding: 3.5em 4% 4%; z-index: 2;  list-style: none;}\ndiv#controls {left: 50%; bottom: 0; width: 50%; z-index: 100;}\ndiv#controls form {position: absolute; bottom: 0; right: 0; width: 100%;\n  margin: 0;}\n#currentSlide {position: absolute; width: 10%; left: 45%; bottom: 1em; z-index: 10;}\nhtml>body #currentSlide {position: fixed;}\n\n/*\ndiv#header {background: #FCC;}\ndiv#footer {background: #CCF;}\ndiv#controls {background: #BBD;}\ndiv#currentSlide {background: #FFC;}\n*/\n"),("s5/default/iepngfix.htc","<public:component>\r\n<public:attach event=\"onpropertychange\" onevent=\"doFix()\" />\r\n\r\n<script>\r\n\r\n// IE5.5+ PNG Alpha Fix v1.0 by Angus Turnbull http://www.twinhelix.com\r\n// Free usage permitted as long as this notice remains intact.\r\n\r\n// This must be a path to a blank image. That's all the configuration you need here.\r\nvar blankImg = 'ui/default/blank.gif';\r\n\r\nvar f = 'DXImageTransform.Microsoft.AlphaImageLoader';\r\n\r\nfunction filt(s, m) {\r\n if (filters[f]) {\r\n  filters[f].enabled = s ? true : false;\r\n  if (s) with (filters[f]) { src = s; sizingMethod = m }\r\n } else if (s) style.filter = 'progid:'+f+'(src=\"'+s+'\",sizingMethod=\"'+m+'\")';\r\n}\r\n\r\nfunction doFix() {\r\n if ((parseFloat(navigator.userAgent.match(/MSIE (\\S+)/)[1]) < 5.5) ||\r\n  (event && !/(background|src)/.test(event.propertyName))) return;\r\n\r\n if (tagName == 'IMG') {\r\n  if ((/\\.png$/i).test(src)) {\r\n   filt(src, 'image');  // was 'scale'\r\n   src = blankImg;\r\n  } else if (src.indexOf(blankImg) < 0) filt();\r\n } else if (style.backgroundImage) {\r\n  if (style.backgroundImage.match(/^url[(\"']+(.*\\.png)[)\"']+$/i)) {\r\n   var s = RegExp.$1;\r\n   style.backgroundImage = '';\r\n   filt(s, 'crop');\r\n  } else filt();\r\n }\r\n}\r\n\r\ndoFix();\r\n\r\n</script>\r\n</public:component>"),("s5/default/opera.css","/* DO NOT CHANGE THESE unless you really want to break Opera Show */\n.slide {\n\tvisibility: visible !important;\n\tposition: static !important;\n\tpage-break-before: always;\n}\n#slide0 {page-break-before: avoid;}\n"),("s5/default/outline.css","/* don't change this unless you want the layout stuff to show up in the outline view! */\n\n.layout div, #footer *, #controlForm * {display: none;}\n#footer, #controls, #controlForm, #navLinks, #toggle {\n  display: block; visibility: visible; margin: 0; padding: 0;}\n#toggle {float: right; padding: 0.5em;}\nhtml>body #toggle {position: fixed; top: 0; right: 0;}\n\n/* making the outline look pretty-ish */\n\n#slide0 h1, #slide0 h2, #slide0 h3, #slide0 h4 {border: none; margin: 0;}\n#slide0 h1 {padding-top: 1.5em;}\n.slide h1 {margin: 1.5em 0 0; padding-top: 0.25em;\n  border-top: 1px solid #888; border-bottom: 1px solid #AAA;}\n#toggle {border: 1px solid; border-width: 0 0 1px 1px; background: #FFF;}\n"),("s5/default/pretty.css","/* Following are the presentation styles -- edit away! */\n\nbody {background: #FFF url(bodybg.gif) -16px 0 no-repeat; color: #000; font-size: 2em;}\n:link, :visited {text-decoration: none; color: #00C;}\n#controls :active {color: #88A !important;}\n#controls :focus {outline: 1px dotted #227;}\nh1, h2, h3, h4 {font-size: 100%; margin: 0; padding: 0; font-weight: inherit;}\nul, pre {margin: 0; line-height: 1em;}\nhtml, body {margin: 0; padding: 0;}\n\nblockquote, q {font-style: italic;}\nblockquote {padding: 0 2em 0.5em; margin: 0 1.5em 0.5em; text-align: center; font-size: 1em;}\nblockquote p {margin: 0;}\nblockquote i {font-style: normal;}\nblockquote b {display: block; margin-top: 0.5em; font-weight: normal; font-size: smaller; font-style: normal;}\nblockquote b i {font-style: italic;}\n\nkbd {font-weight: bold; font-size: 1em;}\nsup {font-size: smaller; line-height: 1px;}\n\n.slide code {padding: 2px 0.25em; font-weight: bold; color: #533;}\n.slide code.bad, code del {color: red;}\n.slide code.old {color: silver;}\n.slide pre {padding: 0; margin: 0.25em 0 0.5em 0.5em; color: #533; font-size: 90%;}\n.slide pre code {display: block;}\n.slide ul {margin-left: 5%; margin-right: 7%; list-style: disc;}\n.slide li {margin-top: 0.75em; margin-right: 0;}\n.slide ul ul {line-height: 1;}\n.slide ul ul li {margin: .2em; font-size: 85%; list-style: square;}\n.slide img.leader {display: block; margin: 0 auto;}\n\ndiv#header, div#footer {background: #005; color: #AAB;\n  font-family: Verdana, Helvetica, sans-serif;}\ndiv#header {background: #005 url(bodybg.gif) -16px 0 no-repeat;\n  line-height: 1px;}\ndiv#footer {font-size: 0.5em; font-weight: bold; padding: 1em 0;}\n#footer h1, #footer h2 {display: block; padding: 0 1em;}\n#footer h2 {font-style: italic;}\n\ndiv.long {font-size: 0.75em;}\n.slide h1 {position: absolute; top: 0.7em; left: 87px; z-index: 1;\n  margin: 0; padding: 0.3em 0 0 50px; white-space: nowrap;\n  font: bold 150%/1em Helvetica, sans-serif; text-transform: capitalize;\n  color: #DDE; background: #005;}\n.slide h3 {font-size: 130%;}\nh1 abbr {font-variant: small-caps;}\n\ndiv#controls {position: absolute; left: 50%; bottom: 0;\n  width: 50%;\n  text-align: right; font: bold 0.9em Verdana, Helvetica, sans-serif;}\nhtml>body div#controls {position: fixed; padding: 0 0 1em 0;\n  top: auto;}\ndiv#controls form {position: absolute; bottom: 0; right: 0; width: 100%;\n  margin: 0; padding: 0;}\n#controls #navLinks a {padding: 0; margin: 0 0.5em; \n  background: #005; border: none; color: #779; \n  cursor: pointer;}\n#controls #navList {height: 1em;}\n#controls #navList #jumplist {position: absolute; bottom: 0; right: 0; background: #DDD; color: #227;}\n\n#currentSlide {text-align: center; font-size: 0.5em; color: #449;}\n\n#slide0 {padding-top: 3.5em; font-size: 90%;}\n#slide0 h1 {position: static; margin: 1em 0 0; padding: 0;\n   font: bold 2em Helvetica, sans-serif; white-space: normal;\n   color: #000; background: transparent;}\n#slide0 h2 {font: bold italic 1em Helvetica, sans-serif; margin: 0.25em;}\n#slide0 h3 {margin-top: 1.5em; font-size: 1.5em;}\n#slide0 h4 {margin-top: 0; font-size: 1em;}\n\nul.urls {list-style: none; display: inline; margin: 0;}\n.urls li {display: inline; margin: 0;}\n.note {display: none;}\n.external {border-bottom: 1px dotted gray;}\nhtml>body .external {border-bottom: none;}\n.external:after {content: \" \\274F\"; font-size: smaller; color: #77B;}\n\n.incremental, .incremental *, .incremental *:after {color: #DDE; visibility: visible;}\nimg.incremental {visibility: hidden;}\n.slide .current {color: #B02;}\n\n\n/* diagnostics\n\nli:after {content: \" [\" attr(class) \"]\"; color: #F88;}\n*/\n"),("s5/default/print.css","/* The following rule is necessary to have all slides appear in print! DO NOT REMOVE IT! */\n.slide, ul {page-break-inside: avoid; visibility: visible !important;}\nh1 {page-break-after: avoid;}\n\nbody {font-size: 12pt; background: white;}\n* {color: black;}\n\n#slide0 h1 {font-size: 200%; border: none; margin: 0.5em 0 0.25em;}\n#slide0 h3 {margin: 0; padding: 0;}\n#slide0 h4 {margin: 0 0 0.5em; padding: 0;}\n#slide0 {margin-bottom: 3em;}\n\nh1 {border-top: 2pt solid gray; border-bottom: 1px dotted silver;}\n.extra {background: transparent !important;}\ndiv.extra, pre.extra, .example {font-size: 10pt; color: #333;}\nul.extra a {font-weight: bold;}\np.example {display: none;}\n\n#header {display: none;}\n#footer h1 {margin: 0; border-bottom: 1px solid; color: gray; font-style: italic;}\n#footer h2, #controls {display: none;}\n\n/* The following rule keeps the layout stuff out of print.  Remove at your own risk! */\n.layout, .layout * {display: none !important;}\n"),("s5/default/s5-core.css","/* Do not edit or override these styles! The system will likely break if you do. */\n\ndiv#header, div#footer, div#controls, .slide {position: absolute;}\nhtml>body div#header, html>body div#footer, \n  html>body div#controls, html>body .slide {position: fixed;}\n.handout {display: none;}\n.layout {display: block;}\n.slide, .hideme, .incremental {visibility: hidden;}\n#slide0 {visibility: visible;}\n"),("s5/default/slides.css","@import url(s5-core.css); /* required to make the slide show run at all */\n@import url(framing.css); /* sets basic placement and size of slide components */\n@import url(pretty.css);  /* stuff that makes the slides look better than blah */"),("s5/default/slides.js","// S5 v1.1 slides.js -- released into the Public Domain\n//\n// Please see http://www.meyerweb.com/eric/tools/s5/credits.html for information \n// about all the wonderful and talented contributors to this code!\n\nvar undef;\nvar slideCSS = '';\nvar snum = 0;\nvar smax = 1;\nvar incpos = 0;\nvar number = undef;\nvar s5mode = true;\nvar defaultView = 'slideshow';\nvar controlVis = 'visible';\n\nvar isIE = navigator.appName == 'Microsoft Internet Explorer' && navigator.userAgent.indexOf('Opera') < 1 ? 1 : 0;\nvar isOp = navigator.userAgent.indexOf('Opera') > -1 ? 1 : 0;\nvar isGe = navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('Safari') < 1 ? 1 : 0;\n\nfunction hasClass(object, className) {\n\tif (!object.className) return false;\n\treturn (object.className.search('(^|\\\\s)' + className + '(\\\\s|$)') != -1);\n}\n\nfunction hasValue(object, value) {\n\tif (!object) return false;\n\treturn (object.search('(^|\\\\s)' + value + '(\\\\s|$)') != -1);\n}\n\nfunction removeClass(object,className) {\n\tif (!object) return;\n\tobject.className = object.className.replace(new RegExp('(^|\\\\s)'+className+'(\\\\s|$)'), RegExp.$1+RegExp.$2);\n}\n\nfunction addClass(object,className) {\n\tif (!object || hasClass(object, className)) return;\n\tif (object.className) {\n\t\tobject.className += ' '+className;\n\t} else {\n\t\tobject.className = className;\n\t}\n}\n\nfunction GetElementsWithClassName(elementName,className) {\n\tvar allElements = document.getElementsByTagName(elementName);\n\tvar elemColl = new Array();\n\tfor (var i = 0; i< allElements.length; i++) {\n\t\tif (hasClass(allElements[i], className)) {\n\t\t\telemColl[elemColl.length] = allElements[i];\n\t\t}\n\t}\n\treturn elemColl;\n}\n\nfunction isParentOrSelf(element, id) {\n\tif (element == null || element.nodeName=='BODY') return false;\n\telse if (element.id == id) return true;\n\telse return isParentOrSelf(element.parentNode, id);\n}\n\nfunction nodeValue(node) {\n\tvar result = \"\";\n\tif (node.nodeType == 1) {\n\t\tvar children = node.childNodes;\n\t\tfor (var i = 0; i < children.length; ++i) {\n\t\t\tresult += nodeValue(children[i]);\n\t\t}\t\t\n\t}\n\telse if (node.nodeType == 3) {\n\t\tresult = node.nodeValue;\n\t}\n\treturn(result);\n}\n\nfunction slideLabel() {\n\tvar slideColl = GetElementsWithClassName('*','slide');\n\tvar list = document.getElementById('jumplist');\n\tsmax = slideColl.length;\n\tfor (var n = 0; n < smax; n++) {\n\t\tvar obj = slideColl[n];\n\n\t\tvar did = 'slide' + n.toString();\n\t\tobj.setAttribute('id',did);\n\t\tif (isOp) continue;\n\n\t\tvar otext = '';\n\t\tvar menu = obj.firstChild;\n\t\tif (!menu) continue; // to cope with empty slides\n\t\twhile (menu && menu.nodeType == 3) {\n\t\t\tmenu = menu.nextSibling;\n\t\t}\n\t \tif (!menu) continue; // to cope with slides with only text nodes\n\n\t\tvar menunodes = menu.childNodes;\n\t\tfor (var o = 0; o < menunodes.length; o++) {\n\t\t\totext += nodeValue(menunodes[o]);\n\t\t}\n\t\tlist.options[list.length] = new Option(n + ' : '  + otext, n);\n\t}\n}\n\nfunction currentSlide() {\n\tvar cs;\n\tif (document.getElementById) {\n\t\tcs = document.getElementById('currentSlide');\n\t} else {\n\t\tcs = document.currentSlide;\n\t}\n\tcs.innerHTML = '<span id=\"csHere\">' + snum + '<\\/span> ' + \n\t\t'<span id=\"csSep\">\\/<\\/span> ' + \n\t\t'<span id=\"csTotal\">' + (smax-1) + '<\\/span>';\n\tif (snum == 0) {\n\t\tcs.style.visibility = 'hidden';\n\t} else {\n\t\tcs.style.visibility = 'visible';\n\t}\n}\n\nfunction go(step) {\n\tif (document.getElementById('slideProj').disabled || step == 0) return;\n\tvar jl = document.getElementById('jumplist');\n\tvar cid = 'slide' + snum;\n\tvar ce = document.getElementById(cid);\n\tif (incrementals[snum].length > 0) {\n\t\tfor (var i = 0; i < incrementals[snum].length; i++) {\n\t\t\tremoveClass(incrementals[snum][i], 'current');\n\t\t\tremoveClass(incrementals[snum][i], 'incremental');\n\t\t}\n\t}\n\tif (step != 'j') {\n\t\tsnum += step;\n\t\tlmax = smax - 1;\n\t\tif (snum > lmax) snum = lmax;\n\t\tif (snum < 0) snum = 0;\n\t} else\n\t\tsnum = parseInt(jl.value);\n\tvar nid = 'slide' + snum;\n\tvar ne = document.getElementById(nid);\n\tif (!ne) {\n\t\tne = document.getElementById('slide0');\n\t\tsnum = 0;\n\t}\n\tif (step < 0) {incpos = incrementals[snum].length} else {incpos = 0;}\n\tif (incrementals[snum].length > 0 && incpos == 0) {\n\t\tfor (var i = 0; i < incrementals[snum].length; i++) {\n\t\t\tif (hasClass(incrementals[snum][i], 'current'))\n\t\t\t\tincpos = i + 1;\n\t\t\telse\n\t\t\t\taddClass(incrementals[snum][i], 'incremental');\n\t\t}\n\t}\n\tif (incrementals[snum].length > 0 && incpos > 0)\n\t\taddClass(incrementals[snum][incpos - 1], 'current');\n\tce.style.visibility = 'hidden';\n\tne.style.visibility = 'visible';\n\tjl.selectedIndex = snum;\n\tcurrentSlide();\n\tnumber = 0;\n}\n\nfunction goTo(target) {\n\tif (target >= smax || target == snum) return;\n\tgo(target - snum);\n}\n\nfunction subgo(step) {\n\tif (step > 0) {\n\t\tremoveClass(incrementals[snum][incpos - 1],'current');\n\t\tremoveClass(incrementals[snum][incpos], 'incremental');\n\t\taddClass(incrementals[snum][incpos],'current');\n\t\tincpos++;\n\t} else {\n\t\tincpos--;\n\t\tremoveClass(incrementals[snum][incpos],'current');\n\t\taddClass(incrementals[snum][incpos], 'incremental');\n\t\taddClass(incrementals[snum][incpos - 1],'current');\n\t}\n}\n\nfunction toggle() {\n\tvar slideColl = GetElementsWithClassName('*','slide');\n\tvar slides = document.getElementById('slideProj');\n\tvar outline = document.getElementById('outlineStyle');\n\tif (!slides.disabled) {\n\t\tslides.disabled = true;\n\t\toutline.disabled = false;\n\t\ts5mode = false;\n\t\tfontSize('1em');\n\t\tfor (var n = 0; n < smax; n++) {\n\t\t\tvar slide = slideColl[n];\n\t\t\tslide.style.visibility = 'visible';\n\t\t}\n\t} else {\n\t\tslides.disabled = false;\n\t\toutline.disabled = true;\n\t\ts5mode = true;\n\t\tfontScale();\n\t\tfor (var n = 0; n < smax; n++) {\n\t\t\tvar slide = slideColl[n];\n\t\t\tslide.style.visibility = 'hidden';\n\t\t}\n\t\tslideColl[snum].style.visibility = 'visible';\n\t}\n}\n\nfunction showHide(action) {\n\tvar obj = GetElementsWithClassName('*','hideme')[0];\n\tswitch (action) {\n\tcase 's': obj.style.visibility = 'visible'; break;\n\tcase 'h': obj.style.visibility = 'hidden'; break;\n\tcase 'k':\n\t\tif (obj.style.visibility != 'visible') {\n\t\t\tobj.style.visibility = 'visible';\n\t\t} else {\n\t\t\tobj.style.visibility = 'hidden';\n\t\t}\n\tbreak;\n\t}\n}\n\n// 'keys' code adapted from MozPoint (http://mozpoint.mozdev.org/)\nfunction keys(key) {\n\tif (!key) {\n\t\tkey = event;\n\t\tkey.which = key.keyCode;\n\t}\n\tif (key.which == 84) {\n\t\ttoggle();\n\t\treturn;\n\t}\n\tif (s5mode) {\n\t\tswitch (key.which) {\n\t\t\tcase 10: // return\n\t\t\tcase 13: // enter\n\t\t\t\tif (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;\n\t\t\t\tif (key.target && isParentOrSelf(key.target, 'controls')) return;\n\t\t\t\tif(number != undef) {\n\t\t\t\t\tgoTo(number);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\tcase 32: // spacebar\n\t\t\tcase 34: // page down\n\t\t\tcase 39: // rightkey\n\t\t\tcase 40: // downkey\n\t\t\t\tif(number != undef) {\n\t\t\t\t\tgo(number);\n\t\t\t\t} else if (!incrementals[snum] || incpos >= incrementals[snum].length) {\n\t\t\t\t\tgo(1);\n\t\t\t\t} else {\n\t\t\t\t\tsubgo(1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 33: // page up\n\t\t\tcase 37: // leftkey\n\t\t\tcase 38: // upkey\n\t\t\t\tif(number != undef) {\n\t\t\t\t\tgo(-1 * number);\n\t\t\t\t} else if (!incrementals[snum] || incpos <= 0) {\n\t\t\t\t\tgo(-1);\n\t\t\t\t} else {\n\t\t\t\t\tsubgo(-1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 36: // home\n\t\t\t\tgoTo(0);\n\t\t\t\tbreak;\n\t\t\tcase 35: // end\n\t\t\t\tgoTo(smax-1);\n\t\t\t\tbreak;\n\t\t\tcase 67: // c\n\t\t\t\tshowHide('k');\n\t\t\t\tbreak;\n\t\t}\n\t\tif (key.which < 48 || key.which > 57) {\n\t\t\tnumber = undef;\n\t\t} else {\n\t\t\tif (window.event && isParentOrSelf(window.event.srcElement, 'controls')) return;\n\t\t\tif (key.target && isParentOrSelf(key.target, 'controls')) return;\n\t\t\tnumber = (((number != undef) ? number : 0) * 10) + (key.which - 48);\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction clicker(e) {\n\tnumber = undef;\n\tvar target;\n\tif (window.event) {\n\t\ttarget = window.event.srcElement;\n\t\te = window.event;\n\t} else target = e.target;\n\tif (target.getAttribute('href') != null || hasValue(target.rel, 'external') || isParentOrSelf(target, 'controls') || isParentOrSelf(target,'embed') || isParentOrSelf(target,'object')) return true;\n\tif (!e.which || e.which == 1) {\n\t\tif (!incrementals[snum] || incpos >= incrementals[snum].length) {\n\t\t\tgo(1);\n\t\t} else {\n\t\t\tsubgo(1);\n\t\t}\n\t}\n}\n\nfunction findSlide(hash) {\n\tvar target = null;\n\tvar slides = GetElementsWithClassName('*','slide');\n\tfor (var i = 0; i < slides.length; i++) {\n\t\tvar targetSlide = slides[i];\n\t\tif ( (targetSlide.name && targetSlide.name == hash)\n\t\t || (targetSlide.id && targetSlide.id == hash) ) {\n\t\t\ttarget = targetSlide;\n\t\t\tbreak;\n\t\t}\n\t}\n\twhile(target != null && target.nodeName != 'BODY') {\n\t\tif (hasClass(target, 'slide')) {\n\t\t\treturn parseInt(target.id.slice(5));\n\t\t}\n\t\ttarget = target.parentNode;\n\t}\n\treturn null;\n}\n\nfunction slideJump() {\n\tif (window.location.hash == null) return;\n\tvar sregex = /^#slide(\\d+)$/;\n\tvar matches = sregex.exec(window.location.hash);\n\tvar dest = null;\n\tif (matches != null) {\n\t\tdest = parseInt(matches[1]);\n\t} else {\n\t\tdest = findSlide(window.location.hash.slice(1));\n\t}\n\tif (dest != null)\n\t\tgo(dest - snum);\n}\n\nfunction fixLinks() {\n\tvar thisUri = window.location.href;\n\tthisUri = thisUri.slice(0, thisUri.length - window.location.hash.length);\n\tvar aelements = document.getElementsByTagName('A');\n\tfor (var i = 0; i < aelements.length; i++) {\n\t\tvar a = aelements[i].href;\n\t\tvar slideID = a.match('\\#slide[0-9]{1,2}');\n\t\tif ((slideID) && (slideID[0].slice(0,1) == '#')) {\n\t\t\tvar dest = findSlide(slideID[0].slice(1));\n\t\t\tif (dest != null) {\n\t\t\t\tif (aelements[i].addEventListener) {\n\t\t\t\t\taelements[i].addEventListener(\"click\", new Function(\"e\",\n\t\t\t\t\t\t\"if (document.getElementById('slideProj').disabled) return;\" +\n\t\t\t\t\t\t\"go(\"+dest+\" - snum); \" +\n\t\t\t\t\t\t\"if (e.preventDefault) e.preventDefault();\"), true);\n\t\t\t\t} else if (aelements[i].attachEvent) {\n\t\t\t\t\taelements[i].attachEvent(\"onclick\", new Function(\"\",\n\t\t\t\t\t\t\"if (document.getElementById('slideProj').disabled) return;\" +\n\t\t\t\t\t\t\"go(\"+dest+\" - snum); \" +\n\t\t\t\t\t\t\"event.returnValue = false;\"));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction externalLinks() {\n\tif (!document.getElementsByTagName) return;\n\tvar anchors = document.getElementsByTagName('a');\n\tfor (var i=0; i<anchors.length; i++) {\n\t\tvar anchor = anchors[i];\n\t\tif (anchor.getAttribute('href') && hasValue(anchor.rel, 'external')) {\n\t\t\tanchor.target = '_blank';\n\t\t\taddClass(anchor,'external');\n\t\t}\n\t}\n}\n\nfunction createControls() {\n\tvar controlsDiv = document.getElementById(\"controls\");\n\tif (!controlsDiv) return;\n\tvar hider = ' onmouseover=\"showHide(\\'s\\');\" onmouseout=\"showHide(\\'h\\');\"';\n\tvar hideDiv, hideList = '';\n\tif (controlVis == 'hidden') {\n\t\thideDiv = hider;\n\t} else {\n\t\thideList = hider;\n\t}\n\tcontrolsDiv.innerHTML = '<form action=\"#\" id=\"controlForm\"' + hideDiv + '>' +\n\t'<div id=\"navLinks\">' +\n\t'<a accesskey=\"t\" id=\"toggle\" href=\"javascript:toggle();\">&#216;<\\/a>' +\n\t'<a accesskey=\"z\" id=\"prev\" href=\"javascript:go(-1);\">&laquo;<\\/a>' +\n\t'<a accesskey=\"x\" id=\"next\" href=\"javascript:go(1);\">&raquo;<\\/a>' +\n\t'<div id=\"navList\"' + hideList + '><select id=\"jumplist\" onchange=\"go(\\'j\\');\"><\\/select><\\/div>' +\n\t'<\\/div><\\/form>';\n\tif (controlVis == 'hidden') {\n\t\tvar hidden = document.getElementById('navLinks');\n\t} else {\n\t\tvar hidden = document.getElementById('jumplist');\n\t}\n\taddClass(hidden,'hideme');\n}\n\nfunction fontScale() {  // causes layout problems in FireFox that get fixed if browser's Reload is used; same may be true of other Gecko-based browsers\n\tif (!s5mode) return false;\n\tvar vScale = 22;  // both yield 32 (after rounding) at 1024x768\n\tvar hScale = 32;  // perhaps should auto-calculate based on theme's declared value?\n\tif (window.innerHeight) {\n\t\tvar vSize = window.innerHeight;\n\t\tvar hSize = window.innerWidth;\n\t} else if (document.documentElement.clientHeight) {\n\t\tvar vSize = document.documentElement.clientHeight;\n\t\tvar hSize = document.documentElement.clientWidth;\n\t} else if (document.body.clientHeight) {\n\t\tvar vSize = document.body.clientHeight;\n\t\tvar hSize = document.body.clientWidth;\n\t} else {\n\t\tvar vSize = 700;  // assuming 1024x768, minus chrome and such\n\t\tvar hSize = 1024; // these do not account for kiosk mode or Opera Show\n\t}\n\tvar newSize = Math.min(Math.round(vSize/vScale),Math.round(hSize/hScale));\n\tfontSize(newSize + 'px');\n\tif (isGe) {  // hack to counter incremental reflow bugs\n\t\tvar obj = document.getElementsByTagName('body')[0];\n\t\tobj.style.display = 'none';\n\t\tobj.style.display = 'block';\n\t}\n}\n\nfunction fontSize(value) {\n\tif (!(s5ss = document.getElementById('s5ss'))) {\n\t\tif (!isIE) {\n\t\t\tdocument.getElementsByTagName('head')[0].appendChild(s5ss = document.createElement('style'));\n\t\t\ts5ss.setAttribute('media','screen, projection');\n\t\t\ts5ss.setAttribute('id','s5ss');\n\t\t} else {\n\t\t\tdocument.createStyleSheet();\n\t\t\tdocument.s5ss = document.styleSheets[document.styleSheets.length - 1];\n\t\t}\n\t}\n\tif (!isIE) {\n\t\twhile (s5ss.lastChild) s5ss.removeChild(s5ss.lastChild);\n\t\ts5ss.appendChild(document.createTextNode('body {font-size: ' + value + ' !important;}'));\n\t} else {\n\t\tdocument.s5ss.addRule('body','font-size: ' + value + ' !important;');\n\t}\n}\n\nfunction notOperaFix() {\n\tslideCSS = document.getElementById('slideProj').href;\n\tvar slides = document.getElementById('slideProj');\n\tvar outline = document.getElementById('outlineStyle');\n\tslides.setAttribute('media','screen');\n\toutline.disabled = true;\n\tif (isGe) {\n\t\tslides.setAttribute('href','null');   // Gecko fix\n\t\tslides.setAttribute('href',slideCSS); // Gecko fix\n\t}\n\tif (isIE && document.styleSheets && document.styleSheets[0]) {\n\t\tdocument.styleSheets[0].addRule('img', 'behavior: url(ui/default/iepngfix.htc)');\n\t\tdocument.styleSheets[0].addRule('div', 'behavior: url(ui/default/iepngfix.htc)');\n\t\tdocument.styleSheets[0].addRule('.slide', 'behavior: url(ui/default/iepngfix.htc)');\n\t}\n}\n\nfunction getIncrementals(obj) {\n\tvar incrementals = new Array();\n\tif (!obj) \n\t\treturn incrementals;\n\tvar children = obj.childNodes;\n\tfor (var i = 0; i < children.length; i++) {\n\t\tvar child = children[i];\n\t\tif (hasClass(child, 'incremental')) {\n\t\t\tif (child.nodeName == 'OL' || child.nodeName == 'UL') {\n\t\t\t\tremoveClass(child, 'incremental');\n\t\t\t\tfor (var j = 0; j < child.childNodes.length; j++) {\n\t\t\t\t\tif (child.childNodes[j].nodeType == 1) {\n\t\t\t\t\t\taddClass(child.childNodes[j], 'incremental');\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tincrementals[incrementals.length] = child;\n\t\t\t\tremoveClass(child,'incremental');\n\t\t\t}\n\t\t}\n\t\tif (hasClass(child, 'show-first')) {\n\t\t\tif (child.nodeName == 'OL' || child.nodeName == 'UL') {\n\t\t\t\tremoveClass(child, 'show-first');\n\t\t\t\tif (child.childNodes[isGe].nodeType == 1) {\n\t\t\t\t\tremoveClass(child.childNodes[isGe], 'incremental');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tincrementals[incrementals.length] = child;\n\t\t\t}\n\t\t}\n\t\tincrementals = incrementals.concat(getIncrementals(child));\n\t}\n\treturn incrementals;\n}\n\nfunction createIncrementals() {\n\tvar incrementals = new Array();\n\tfor (var i = 0; i < smax; i++) {\n\t\tincrementals[i] = getIncrementals(document.getElementById('slide'+i));\n\t}\n\treturn incrementals;\n}\n\nfunction defaultCheck() {\n\tvar allMetas = document.getElementsByTagName('meta');\n\tfor (var i = 0; i< allMetas.length; i++) {\n\t\tif (allMetas[i].name == 'defaultView') {\n\t\t\tdefaultView = allMetas[i].content;\n\t\t}\n\t\tif (allMetas[i].name == 'controlVis') {\n\t\t\tcontrolVis = allMetas[i].content;\n\t\t}\n\t}\n}\n\n// Key trap fix, new function body for trap()\nfunction trap(e) {\n\tif (!e) {\n\t\te = event;\n\t\te.which = e.keyCode;\n\t}\n\ttry {\n\t\tmodifierKey = e.ctrlKey || e.altKey || e.metaKey;\n\t}\n\tcatch(e) {\n\t\tmodifierKey = false;\n\t}\n\treturn modifierKey || e.which == 0;\n}\n\nfunction startup() {\n\tdefaultCheck();\n\tif (!isOp) \n\t\tcreateControls();\n\tslideLabel();\n\tfixLinks();\n\texternalLinks();\n\tfontScale();\n\tif (!isOp) {\n\t\tnotOperaFix();\n\t\tincrementals = createIncrementals();\n\t\tslideJump();\n\t\tif (defaultView == 'outline') {\n\t\t\ttoggle();\n\t\t}\n\t\tdocument.onkeyup = keys;\n\t\tdocument.onkeypress = trap;\n\t\tdocument.onclick = clicker;\n\t}\n}\n\nwindow.onload = startup;\nwindow.onresize = function(){setTimeout('fontScale()', 50);}"),("slideous/slideous.css","/*\tThis work is licensed under Creative Commons GNU LGPL License.\n\n\tLicense: http://creativecommons.org/licenses/LGPL/2.1/\n\tVersion: 1.0\n\n\tAuthor:  Stefan Goessner/2005\n\tWeb:     http://goessner.net/ \n*/\n@media screen, projection {\nbody {\n  background-color: #e3eee7;\n  padding: 0;\n  margin: 0;\n  color: #132; \n  border-color: #678; \n  font-size: 125%;\n}\n#statusbar {\n  display: none;\n  position: absolute; z-index: 10;\n  top: auto; bottom: 0; left: 0; right: 0;\n  height: 2em;\n  background-color: #f0fff8;\n  color: #132;\n  font-size: 75%;\n  padding: 0.5em 0.5em 0 2px;\n  border-top: solid 1px #000;\n}\n#statusbar button, #tocbox {\n  cursor: pointer; \n  color: #031;\n  background-color: #e0eee7;\n  margin: 1px;\n  padding: 0 0.5em;\n  border: inset 1px black;\n}\n#statusbar button:hover, #tocbox:hover {\n  color: #031;\n  background-color: #c0ccc6;\n  border: outset 1px black;\n}\n#tocbox {\n  width: 15em;\n}\n#eos {\n  visibility: hidden;\n  color: #021;\n  background-color: #fffafa;\n  border: inset 1px black;\n  font-size: 120%;\n}\ndiv.slide {\n   display: block;\n   margin: 0 0 2em 0;\n   padding: 0 150px;\n}\n\ndiv.slide h1 {\n  background: #a0aaa4;\n  color: #f0fff8;\n  padding: 0 0.5em 0 0.5em;\n  margin: 0 -150px;\n  font-size: 120%;\n  border-bottom: solid 1px black;\n}\n\ndiv.slide h1:before { content: \"# \"; }\ndiv.handout { display: block; }\n   \nbody>#statusbar {   /* ie6 hack for fixing the statusbar - in quirks mode */\n  position: fixed;  /* thanks to Anne van Kesteren and Arthur Steiner */\n}                   /* see http://limpid.nl/lab/css/fixed/footer */\n* html body {\n  overflow: hidden;\n}\n* html div.slide {\n  height: 100%;\n  padding-bottom: 2em;\n  overflow: auto;\n}                   /* end ie6-hack */\n\n} /* @media screen, projection */\n\n@media print {\nbody {\n  color: black;\n  font-family: sans-serif;\n  font-size: 11pt;\n}\n\n#statusbar { display: none; }\ndiv.slide { page-break-after: always; }\ndiv.handout { display: block; }\n\n} /* @media print */\n"),("slideous/slideous.js","/*\tThis work is licensed under Creative Commons GNU LGPL License.\n\n\tLicense: http://creativecommons.org/licenses/LGPL/2.1/\n\n\tAuthor:  Stefan Goessner/2005-2006\n\tWeb:     http://goessner.net/ \n*/\nvar Slideous = {\n   version: 1.0,\n   // == user customisable ===\n   clickables: { a: true, button: true, img: true, input: true, object: true, textarea: true, select: true, option: true },\n   incrementables: { blockquote: { filter: \"self, parent\" }, \n                     dd: { filter: \"self, parent\" },\n                     dt: { filter: \"self, parent\" },\n                     h2: { filter: \"self, parent\" },\n                     h3: { filter: \"self, parent\" },\n                     h4: { filter: \"self, parent\" },\n                     h5: { filter: \"self, parent\" },\n                     h6: { filter: \"self, parent\" },\n                     li: { filter: \"self, parent\" },\n                     p: { filter: \"self\" }, \n                     pre: { filter: \"self\" }, \n                     img: { filter: \"self, parent\" }, \n                     object: { filter: \"self, parent\" },\n                     table: { filter: \"self, parent\" },\n                     td: { filter: \"self, parent\" },\n                     th: { filter: \"self, parent\" },\n                     tr: { filter: \"parent, grandparent\" }\n                   },\n   autoincrementables: { ol: true, ul: true, dl: true },\n   autoincrement: false,\n   statusbar: true,\n   navbuttons: { incfontbutton:   function(){Slideous.changefontsize(+Slideous.fontdelta);},\n                 decfontbutton:   function(){Slideous.changefontsize(-Slideous.fontdelta);},\n                 contentbutton:   function(){Slideous.gotoslide(Slideous.tocidx(), true, true);},\n                 homebutton:      function(){Slideous.gotoslide(1, true, true);},\n                 prevslidebutton: function(){Slideous.previous(false);},\n                 previtembutton:  function(){Slideous.previous(true);},\n                 nextitembutton:  function(){Slideous.next(true);},\n                 nextslidebutton: function(){Slideous.next(false);},\n                 endbutton:       function(){Slideous.gotoslide(Slideous.count,true,true);} },\n   fontsize: 125,  // in percent, corresponding to body.font-size in css file\n   fontdelta: 5,   // increase/decrease fontsize by this value\n   mousesensitive: true,\n   tocidx: 0,\n   tocitems: { toc: \"<li><a href=\\\"#s{\\$slideidx}\\\">{\\$slidetitle}</a></li>\",\n               tocbox: \"<option value=\\\"#s{\\$slideidx}\\\" title=\\\"{\\$slidetitle}\\\">{\\$slidetitle}</option>\" },\n   keydown: function(evt) {\n      evt = evt || window.event;\n      var key = evt.keyCode || evt.which;\n      if (key && !evt.ctrlKey && !evt.altKey) {\n         switch (key) {\n            case 33: // page up  ... previous slide\n               Slideous.previous(false); evt.cancel = !Slideous.showall; break;\n            case 37: // left arrow ... previous item\n               Slideous.previous(true); evt.cancel = !Slideous.showall; break;\n            case 32: // space bar\n            case 39: // right arrow\n               Slideous.next(true); evt.cancel = !Slideous.showall; break;\n            case 13: // carriage return  ... next slide\n            case 34: // page down\n               Slideous.next(false); evt.cancel = !Slideous.showall; break;\n            case 35: // end  ... last slide (not recognised by opera)\n               Slideous.gotoslide(Slideous.count, true, true); evt.cancel = !Slideous.showall; break;\n            case 36: // home ... first slide (not recognised by opera)\n               Slideous.gotoslide(1, true, true); evt.cancel = !Slideous.showall; break;\n            case 65: // A ... show All\n            case 80: // P ... Print mode\n               Slideous.toggleshowall(!Slideous.showall); evt.cancel = true; break;\n            case 67: // C ... goto contents\n               Slideous.gotoslide(Slideous.tocidx, true, true); evt.cancel = true; break;\n            case 77: // M ... toggle mouse sensitivity\n               Slideous.mousenavigation(Slideous.mousesensitive = !Slideous.mousesensitive); evt.cancel = true; break;\n            case 83: // S ... toggle statusbar\n               Slideous.togglestatusbar(); evt.cancel = true; break;\n            case 61:  // + ... increase fontsize\n            case 107:\n               Slideous.changefontsize(+Slideous.fontdelta); evt.cancel = true; break;\n            case 109:  // - ... decrease fontsize\n               Slideous.changefontsize(-Slideous.fontdelta); evt.cancel = true; break;\n            default: break;\n         }\n         if (evt.cancel) evt.returnValue = false;\n      }\n      return !evt.cancel;\n   },\n\n   // == program logic ===\n   count: 0,                       // # of slides ..\n   curidx: 0,                      // current slide index ..\n   mousedownpos: null,             // last mouse down position ..\n   contentselected: false,         // indicates content selection ..\n   showall: true,\n   init: function() {\n      Slideous.curidx = 1;\n      Slideous.importproperties();\n      Slideous.registerslides();\n      document.body.innerHTML = Slideous.injectproperties(document.body.innerHTML);\n      Slideous.buildtocs();\n      Slideous.registeranchors();\n      Slideous.toggleshowall(false);\n      Slideous.updatestatus();\n      document.body.style.fontSize = Slideous.fontsize+\"%\";\n      document.getElementById(\"s1\").style.display = \"block\";\n      document.onkeydown = Slideous.keydown;\n      Slideous.mousenavigation(Slideous.mousesensitive);\n      Slideous.registerbuttons();\n      if (window.location.hash)\n         Slideous.gotoslide(window.location.hash.substr(2), true, true);\n   },\n   registerslides: function() {\n      var div = document.getElementsByTagName(\"div\");\n      Slideous.count = 0;\n      for (var i in div)\n         if (Slideous.hasclass(div[i], \"slide\"))\n            div[i].setAttribute(\"id\", \"s\"+(++Slideous.count));\n   },\n   registeranchors: function() {\n      var a = document.getElementsByTagName(\"a\"),\n          loc = (window.location.hostname+window.location.pathname).replace(/\\\\/g, \"/\");\n      for (var i in a) {\n         if (a[i].href && a[i].href.indexOf(loc) >= 0 && a[i].href.lastIndexOf(\"#\") >= 0) {\n            a[i].href = \"javascript:Slideous.gotoslide(\" + a[i].href.substr(a[i].href.lastIndexOf(\"#\")+2)+\",true,true)\";\n         }\n      }\n   },\n   registerbuttons: function() {\n      var button;\n      for (var b in Slideous.navbuttons)\n         if (button = document.getElementById(b))\n            button.onclick = Slideous.navbuttons[b];\n   },\n   importproperties: function() {  // from html meta section ..\n      var meta = document.getElementsByTagName(\"meta\"), elem;\n      for (var i in meta)\n         if (meta[i].attributes && meta[i].attributes[\"name\"] && meta[i].attributes[\"name\"].value in Slideous)\n            switch (typeof(Slideous[meta[i].attributes[\"name\"].value])) {\n               case \"number\": Slideous[meta[i].attributes[\"name\"].value] = parseInt(meta[i].attributes[\"content\"].value); break;\n               case \"boolean\": Slideous[meta[i].attributes[\"name\"].value] = meta[i].attributes[\"content\"].value == \"true\" ? true : false; break;\n               default: Slideous[meta[i].attributes[\"name\"].value] = meta[i].attributes[\"content\"].value; break;\n            }\n   },\n   injectproperties: function(str) {\n      var meta = document.getElementsByTagName(\"meta\"), elem;\n      for (var i in meta) {\n         if (meta[i].attributes && meta[i].attributes[\"name\"])\n            str = str.replace(new RegExp(\"{\\\\$\"+meta[i].attributes[\"name\"].value+\"}\",\"g\"), meta[i].attributes[\"content\"].value);\n      }\n      return str = str.replace(/{\\$generator}/g, \"Slideous\")\n                      .replace(/{\\$version}/g, Slideous.version)\n                      .replace(/{\\$title}/g, document.title)\n                      .replace(/{\\$slidecount}/g, Slideous.count);\n   },\n   buildtocs: function() {\n      var toc = document.getElementById(\"toc\"), list = \"\",\n          tocbox = document.getElementById(\"tocbox\");\n      if (toc) {\n         for (var i=0; i<Slideous.count; i++)\n            list += Slideous.tocitems.toc.replace(/{\\$slideidx}/g, i+1).replace(/{\\$slidetitle}/, document.getElementById(\"s\"+(i+1)).getElementsByTagName(\"h1\")[0].innerHTML);\n         toc.innerHTML = list;\n         while (toc && !Slideous.hasclass(toc, \"slide\")) toc = toc.parentNode;\n         if (toc) Slideous.tocidx = toc.getAttribute(\"id\").substr(1);\n      }\n      if (tocbox) {\n         tocbox.innerHTML = \"\";\n         for (var i=0; i<Slideous.count; i++)\n            tocbox.options[tocbox.length] = new Option((i+1)+\". \"+document.getElementById(\"s\"+(i+1)).getElementsByTagName(\"h1\")[0].innerHTML, \"#s\"+(i+1));\n         tocbox.onchange = function() { Slideous.gotoslide(this.selectedIndex+1, true, true); };\n      }\n   },\n   next: function(deep) {\n      if (!Slideous.showall) {\n         var slide = document.getElementById(\"s\"+Slideous.curidx),\n             item = Slideous.firstitem(slide, Slideous.isitemhidden);\n         if (deep) {  // next item\n            if (item)\n               Slideous.displayitem(item, true);\n            else\n               Slideous.gotoslide(Slideous.curidx+1, false, false);\n         }\n         else if (item)  // complete slide ..\n            while (item = Slideous.firstitem(slide, Slideous.isitemhidden))\n               Slideous.displayitem(item, true);\n         else           // next slide\n            Slideous.gotoslide(Slideous.curidx+1, true, false);\n         Slideous.updatestatus();\n      }\n   },\n   previous: function(deep) {\n      if (!Slideous.showall) {\n         var slide = document.getElementById(\"s\"+Slideous.curidx);\n         if (deep) {\n            var item = Slideous.lastitem(slide, Slideous.isitemvisible);\n            if (item)\n               Slideous.displayitem(item, false);\n            else\n               Slideous.gotoslide(Slideous.curidx-1, true, false);\n         }\n         else\n            Slideous.gotoslide(Slideous.curidx-1, true, false);\n         Slideous.updatestatus();\n      }\n   },\n   gotoslide: function(i, showitems, updatestatus) {\n      if (!Slideous.showall && i > 0 && i <= Slideous.count && i != Slideous.curidx) {\n         document.getElementById(\"s\"+Slideous.curidx).style.display = \"none\";\n         var slide = document.getElementById(\"s\"+(Slideous.curidx=i)), item;\n         while (item = Slideous.firstitem(slide, showitems ? Slideous.isitemhidden : Slideous.isitemvisible))\n            Slideous.displayitem(item, showitems);\n         slide.style.display = \"block\";\n         if (updatestatus)\n            Slideous.updatestatus();\n      }\n   },\n   firstitem: function(root, filter) {\n      var found = filter(root);\n      for (var node=root.firstChild; node!=null && !found; node = node.nextSibling)\n         found = Slideous.firstitem(node, filter);\n      return found;\n   },\n   lastitem: function(root, filter) {\n      var found = null;\n      for (var node=root.lastChild; node!=null && !found; node = node.previousSibling)\n         found = Slideous.lastitem(node, filter);\n      return found || filter(root);\n   },\n   isitem: function(node, visible) {\n      var nodename;\n      return node && node.nodeType == 1   // elements only ..\n          && (nodename=node.nodeName.toLowerCase()) in Slideous.incrementables\n          && (   Slideous.incrementables[nodename].filter.match(\"\\\\bself\\\\b\") && (Slideous.hasclass(node, \"incremental\") || (Slideous.autoincrement && nodename in Slideous.autoincrementables))\n              || Slideous.incrementables[nodename].filter.match(\"\\\\bparent\\\\b\") && (Slideous.hasclass(node.parentNode, \"incremental\") || (Slideous.autoincrement && node.parentNode.nodeName.toLowerCase() in Slideous.autoincrementables))\n              || Slideous.incrementables[nodename].filter.match(\"\\\\bgrandparent\\\\b\") && (Slideous.hasclass(node.parentNode.parentNode, \"incremental\") || (Slideous.autoincrement && node.parentNode.parentNode.nodeName.toLowerCase() in Slideous.autoincrementables))\n             )\n          && (visible ? (node.style.visibility != \"hidden\")\n                      : (node.style.visibility == \"hidden\"))\n          ? node : null;\n   },\n   isitemvisible: function(node) { return Slideous.isitem(node, true); },\n   isitemhidden: function(node) { return Slideous.isitem(node, false); },\n   displayitem: function(item, show) {\n      if (item) item.style.visibility = (show ? \"visible\" : \"hidden\");\n   },\n   updatestatus: function() {\n      if (Slideous.statusbar) {\n         var eos = document.getElementById(\"eos\"), \n             idx = document.getElementById(\"slideidx\"),\n             tocbox = document.getElementById(\"tocbox\");\n         if (eos) \n            eos.style.visibility = Slideous.firstitem(document.getElementById(\"s\"+Slideous.curidx), Slideous.isitemhidden) != null\n                                 ? \"visible\" : \"hidden\";\n         if (idx) \n            idx.innerHTML = Slideous.curidx;\n         if (tocbox)\n            tocbox.selectedIndex = Slideous.curidx-1;\n      }\n   },\n   changefontsize: function(delta) {\n      document.body.style.fontSize = (Slideous.fontsize+=delta)+\"%\";\n   },\n   togglestatusbar: function() {\n      document.getElementById(\"statusbar\").style.display = (Slideous.statusbar = !Slideous.statusbar) ? \"block\" : \"none\";\n   },\n   toggleshowall: function(showall) {\n      var slide, item;\n      for (var i=0; i<Slideous.count; i++) {\n         slide = document.getElementById(\"s\"+(i+1));\n         slide.style.display = showall ? \"block\" : \"none\";\n         while (item = Slideous.firstitem(slide, showall ? Slideous.isitemhidden : Slideous.isitemvisible)) \n            Slideous.displayitem(item, showall);\n         var divs = slide.getElementsByTagName(\"div\");\n         for (var j in divs)\n            if (Slideous.hasclass(divs[j], \"handout\"))\n               divs[j].style.display = showall ? \"block\" : \"none\";\n      }\n      if (!showall)\n         document.getElementById(\"s\"+Slideous.curidx).style.display = \"block\";\n      if (Slideous.statusbar) \n         document.getElementById(\"statusbar\").style.display = showall ? \"none\" : \"block\";\n      Slideous.showall = showall;\n   },\n   hasclass: function(elem, classname) {\n      var classattr = null;\n      return (classattr=(elem.attributes && elem.attributes[\"class\"])) \n          && classattr.nodeValue.match(\"\\\\b\"+classname+\"\\\\b\");\n   },\n   selectedcontent: function() {\n      return window.getSelection ? window.getSelection().toString() \n                                 : document.getSelection ? document.getSelection() \n                                                         : document.selection ? document.selection.createRange().text\n                                                                              : \"\";\n   },\n   mousenavigation: function(on) {\n      if (on) {\n         document.onmousedown = Slideous.mousedown;\n         document.onmouseup = Slideous.mouseup;\n      }\n      else\n         document.onmousedown = document.onmouseup = null;\n   },\n   mousepos: function(e) {\n      return e.pageX ? {x: e.pageX, y: e.pageY} \n                     : {x: e.x+document.body.scrollLeft, y: e.y+document.body.scrollTop};\n   },\n   mousedown: function(evt) {\n      evt = evt||window.event;\n      Slideous.mousedownpos = Slideous.mousepos(evt);\n      Slideous.contentselected = !!Slideous.selectedcontent() || ((evt.target || evt.srcElement).nodeName.toLowerCase() in Slideous.clickables);\n      return true;\n   },\n   mouseup: function(evt) {\n      evt = evt||window.event;\n      var pos = Slideous.mousepos(evt);\n      if (pos.x == Slideous.mousedownpos.x && pos.y == Slideous.mousedownpos.y && !Slideous.contentselected) {\n         Slideous.next(true);\n         return evt.returnValue = !(evt.cancel = true);\n      }\n      return false;\n   }\n};\nwindow.onload = Slideous.init;\n"),("slidy/graphics/fold-dim.gif","GIF87a\t\NUL\t\NUL\161\ETX\NUL\195\195\255\204\204\204\235\235\255\255\255\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\DC1\140\143\162+\198\235^\v\STXX;e\150\241\161\US\DC4\NUL;"),("slidy/graphics/fold.gif","GIF87a\t\NUL\t\NUL\161\ETX\NUL\NUL\NUL\NUL\NUL\NUL\255\195\195\255\255\255\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\DC1\132\143\162+\198\235^\ETX\"X;e\150\241\161\SI\DC4\NUL;"),("slidy/graphics/nofold-dim.gif","GIF87a\t\NUL\t\NUL\128\STX\NUL\204\204\204\235\235\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\SI\132\143\161\ESC\198\235^\ETXr\214\248\&0C\FS\DC4\NUL;"),("slidy/graphics/unfold-dim.gif","GIF87a\t\NUL\t\NUL\161\ETX\NUL\195\195\255\204\204\204\235\235\255\255\255\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\DC4\140\143\162+\182\176\156\130\202\129{[xq\207\206t\bR\NUL\NUL;"),("slidy/graphics/unfold.gif","GIF87a\t\NUL\t\NUL\161\ETX\NUL\NUL\NUL\NUL\NUL\NUL\255\195\195\255\255\255\255,\NUL\NUL\NUL\NUL\t\NUL\t\NUL\NUL\STX\DC4\132\143\162+\182\177\156\130\202\133{\ESCxq\207\206t\bR\NUL\NUL;"),("slidy/scripts/slidy.js","/* slidy.js\n\n   Copyright (c) 2005-2011 W3C (MIT, ERCIM, Keio), All Rights Reserved.\n   W3C liability, trademark, document use and software licensing\n   rules apply, see:\n\n   http://www.w3.org/Consortium/Legal/copyright-documents\n   http://www.w3.org/Consortium/Legal/copyright-software\n\n   Defines single name \"w3c_slidy\" in global namespace\n   Adds event handlers without trampling on any others\n*/\n\n// the slidy object implementation\nvar w3c_slidy = {\n  // classify which kind of browser we're running under\n  ns_pos: (typeof window.pageYOffset!='undefined'),\n  khtml: ((navigator.userAgent).indexOf(\"KHTML\") >= 0 ? true : false),\n  opera: ((navigator.userAgent).indexOf(\"Opera\") >= 0 ? true : false),\n  ipad: ((navigator.userAgent).indexOf(\"iPad\") >= 0 ? true : false),\n  iphone: ((navigator.userAgent).indexOf(\"iPhone\") >= 0 ? true : false),\n  android: ((navigator.userAgent).indexOf(\"Android\") >= 0 ? true : false),\n  ie: (typeof document.all != \"undefined\" && !this.opera),\n  ie6: (!this.ns_pos && navigator.userAgent.indexOf(\"MSIE 6\") != -1),\n  ie7: (!this.ns_pos && navigator.userAgent.indexOf(\"MSIE 7\") != -1),\n  ie8: (!this.ns_pos && navigator.userAgent.indexOf(\"MSIE 8\") != -1),\n  ie9: (!this.ns_pos && navigator.userAgent.indexOf(\"MSIE 9\") != -1),\n\n  // data for swipe and double tap detection on touch screens\n  last_tap: 0,\n  prev_tap: 0,\n  start_x: 0,\n  start_y: 0,\n  delta_x: 0,\n  delta_y: 0,\n\n  // are we running as XHTML? (doesn't work on Opera)\n  is_xhtml: /xml/.test(document.contentType),\n\n  slide_number: 0, // integer slide count: 0, 1, 2, ...\n  slide_number_element: null, // element containing slide number\n  slides: [], // set to array of slide div's\n  notes: [], // set to array of handout div's\n  backgrounds: [], // set to array of background div's\n  toolbar: null, // element containing toolbar\n  title: null, // document title\n  last_shown: null, // last incrementally shown item\n  eos: null,  // span element for end of slide indicator\n  toc: null, // table of contents\n  outline: null, // outline element with the focus\n  selected_text_len: 0, // length of drag selection on document\n  view_all: 0,  // 1 to view all slides + handouts\n  want_toolbar: true,  // user preference to show/hide toolbar\n  mouse_click_enabled: true, // enables left click for next slide\n  scroll_hack: 0, // IE work around for position: fixed\n  disable_slide_click: false,  // used by clicked anchors\n\n  lang: \"en\", // updated to language specified by html file\n\n  help_anchor: null, // used for keyboard focus hack in showToolbar()\n  help_page: \"http://www.w3.org/Talks/Tools/Slidy2/help/help.html\",\n  help_text: \"Navigate with mouse click, space bar, Cursor Left/Right, \" +\n             \"or Pg Up and Pg Dn. Use S and B to change font size.\",\n\n  size_index: 0,\n  size_adjustment: 0,\n  sizes:  new Array(\"10pt\", \"12pt\", \"14pt\", \"16pt\", \"18pt\", \"20pt\",\n                    \"22pt\", \"24pt\", \"26pt\", \"28pt\", \"30pt\", \"32pt\"),\n\n  // needed for efficient resizing\n  last_width: 0,\n  last_height: 0,\n\n\n  // Needed for cross browser support for relative width/height on\n  // object elements. The work around is to save width/height attributes\n  // and then to recompute absolute width/height dimensions on resizing\n   objects: [],\n\n  // attach initialiation event handlers\n  set_up: function () {\n    var init = function() { w3c_slidy.init(); };\n    if (typeof window.addEventListener != \"undefined\")\n      window.addEventListener(\"load\", init, false);\n    else\n      window.attachEvent(\"onload\", init);\n  },\n\n  hide_slides: function () {\n    if (document.body && !w3c_slidy.initialized)\n      document.body.style.visibility = \"hidden\";\n    else\n      setTimeout(w3c_slidy.hide_slides, 50);\n  },\n\n  // hack to persuade IE to compute correct document height\n  // as needed for simulating fixed positioning of toolbar\n  ie_hack: function () {\n    window.resizeBy(0,-1);\n    window.resizeBy(0, 1);\n  },\n\n  init: function () {\n    //alert(\"slidy starting test 10\");\n    document.body.style.visibility = \"visible\";\n    this.init_localization();\n    this.add_toolbar();\n    this.wrap_implicit_slides();\n    this.collect_slides();\n    this.collect_notes();\n    this.collect_backgrounds();\n    this.objects = document.body.getElementsByTagName(\"object\");\n    this.patch_anchors();\n    this.slide_number = this.find_slide_number(location.href);\n    window.offscreenbuffering = true;\n    this.size_adjustment = this.find_size_adjust();\n    this.time_left = this.find_duration();\n    this.hide_image_toolbar();  // suppress IE image toolbar popup\n    this.init_outliner();  // activate fold/unfold support\n    this.title = document.title;\n    this.keyboardless = (this.ipad||this.iphone||this.android);\n\n    if (this.keyboardless)\n    {\n      w3c_slidy.remove_class(w3c_slidy.toolbar, \"hidden\")\n      this.want_toolbar = 0;\n    }\n\n    // work around for opera bug\n    this.is_xhtml = (document.body.tagName == \"BODY\" ? false : true);\n\n    if (this.slides.length > 0)\n    {\n      var slide = this.slides[this.slide_number];\n   \n      if (this.slide_number > 0)\n      {\n        this.set_visibility_all_incremental(\"visible\");\n        this.last_shown = this.previous_incremental_item(null);\n        this.set_eos_status(true);\n      }\n      else\n      {\n        this.last_shown = null;\n        this.set_visibility_all_incremental(\"hidden\");\n        this.set_eos_status(!this.next_incremental_item(this.last_shown));\n      }\n\n      this.set_location();\n      this.add_class(this.slides[0], \"first-slide\");\n      w3c_slidy.show_slide(slide);\n    }\n\n    this.toc = this.table_of_contents();\n\n    this.add_initial_prompt();\n\n    // bind event handlers without interfering with custom page scripts\n    // Tap events behave too weirdly to support clicks reliably on\n    // iPhone and iPad, so exclude these from click handler\n\n    if (!this.keyboardless)\n    {\n      this.add_listener(document.body, \"click\", this.mouse_button_click);\n      this.add_listener(document.body, \"mousedown\", this.mouse_button_down);\n    }\n\n    this.add_listener(document, \"keydown\", this.key_down);\n    this.add_listener(document, \"keypress\", this.key_press);\n    this.add_listener(window, \"resize\", this.resized);\n    this.add_listener(window, \"scroll\", this.scrolled);\n    this.add_listener(window, \"unload\", this.unloaded);\n\n    //this.add_listener(document.body, \"touchstart\", this.touchstart);\n    //this.add_listener(document.body, \"touchmove\", this.touchmove);\n    //this.add_listener(document.body, \"touchend\", this.touchend);\n\n    this.add_listener(document, \"gesturechange\", function ()\n    {\n      return false;\n    });\n\n    this.attach_touch_handers(this.slides);\n\n    // this seems to be a debugging hack\n    //if (!document.body.onclick)\n    //  document.body.onclick = function () { };\n\n    this.single_slide_view();\n\n    //this.set_location();\n\n    this.resized();\n\n    if (this.ie7)\n      setTimeout(w3c_slidy.ie_hack, 100);\n\n    this.show_toolbar();\n\n    // for back button detection\n    setInterval(function () { w3c_slidy.check_location(); }, 200);\n    w3c_slidy.initialized = true;\n  },\n\n  // create div element with links to each slide\n  table_of_contents: function () {\n    var toc = this.create_element(\"div\");\n    this.add_class(toc, \"slidy_toc hidden\");\n    //toc.setAttribute(\"tabindex\", \"0\");\n\n    var heading = this.create_element(\"div\");\n    this.add_class(heading, \"toc-heading\");\n    heading.innerHTML = this.localize(\"Table of Contents\");\n\n    toc.appendChild(heading);\n    var previous = null;\n\n    for (var i = 0; i < this.slides.length; ++i)\n    {\n      var title = this.has_class(this.slides[i], \"title\");\n      var num = document.createTextNode((i + 1) + \". \");\n\n      toc.appendChild(num);\n\n      var a = this.create_element(\"a\");\n      a.setAttribute(\"href\", \"#(\" + (i+1) + \")\");\n\n      if (title)\n        this.add_class(a, \"titleslide\");\n\n      var name = document.createTextNode(this.slide_name(i));\n      a.appendChild(name);\n      a.onclick = w3c_slidy.toc_click;\n      a.onkeydown = w3c_slidy.toc_key_down;\n      a.previous = previous;\n\n      if (previous)\n        previous.next = a;\n\n      toc.appendChild(a);\n\n      if (i == 0)\n        toc.first = a;\n\n      if (i < this.slides.length - 1)\n      {\n        var br = this.create_element(\"br\");\n        toc.appendChild(br);\n      }\n\n      previous = a;\n    }\n\n    toc.focus = function () {\n      if (this.first)\n        this.first.focus();\n    }\n\n    toc.onmouseup = w3c_slidy.mouse_button_up;\n\n    toc.onclick = function (e) {\n      e||(e=window.event);\n\n      if (w3c_slidy.selected_text_len <= 0)\n         w3c_slidy.hide_table_of_contents(true);\n\n      w3c_slidy.stop_propagation(e);\n    \n      if (e.cancel != undefined)\n        e.cancel = true;\n      \n      if (e.returnValue != undefined)\n        e.returnValue = false;\n      \n      return false;\n    };\n\n    document.body.insertBefore(toc, document.body.firstChild);\n    return toc;\n  },\n\n  is_shown_toc: function () {\n    return !w3c_slidy.has_class(w3c_slidy.toc, \"hidden\");\n  },\n\n  show_table_of_contents: function () {\n    w3c_slidy.remove_class(w3c_slidy.toc, \"hidden\");\n    var toc = w3c_slidy.toc;\n    toc.focus();\n\n    if (w3c_slidy.ie7 && w3c_slidy.slide_number == 0)\n      setTimeout(w3c_slidy.ie_hack, 100);\n  },\n\n  hide_table_of_contents: function (focus) {\n    w3c_slidy.add_class(w3c_slidy.toc, \"hidden\");\n\n    if (focus && !w3c_slidy.opera &&\n        !w3c_slidy.has_class(w3c_slidy.toc, \"hidden\"))\n      w3c_slidy.help_anchor.focus();\n  },\n\n  toggle_table_of_contents: function () {\n    if (w3c_slidy.is_shown_toc())\n      w3c_slidy.hide_table_of_contents(true);\n    else\n      w3c_slidy.show_table_of_contents();\n  },\n\n  // called on clicking toc entry\n  toc_click: function (e) {\n    if (!e)\n      e = window.event;\n\n    var target = w3c_slidy.get_target(e);\n\n    if (target && target.nodeType == 1)\n    {\n      var uri = target.getAttribute(\"href\");\n\n      if (uri)\n      {\n        //alert(\"going to \" + uri);\n        var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n        w3c_slidy.hide_slide(slide);\n        w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);\n        slide = w3c_slidy.slides[w3c_slidy.slide_number];\n        w3c_slidy.last_shown = null;\n        w3c_slidy.set_location();\n        w3c_slidy.set_visibility_all_incremental(\"hidden\");\n        w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\n        w3c_slidy.show_slide(slide);\n        //target.focus();\n\n        try\n        {\n          if (!w3c_slidy.opera)\n            w3c_slidy.help_anchor.focus();\n        }\n        catch (e)\n        {\n        }\n      }\n    }\n\n    w3c_slidy.hide_table_of_contents(true);\n    if (w3c_slidy.ie7) w3c_slidy.ie_hack();\n    w3c_slidy.stop_propagation(e);\n    return w3c_slidy.cancel(e);\n  },\n\n  // called onkeydown for toc entry\n  toc_key_down: function (event) {\n    var key;\n\n    if (!event)\n      var event = window.event;\n\n    // kludge around NS/IE differences \n    if (window.event)\n      key = window.event.keyCode;\n    else if (event.which)\n      key = event.which;\n    else\n      return true; // Yikes! unknown browser\n\n    // ignore event if key value is zero\n    // as for alt on Opera and Konqueror\n    if (!key)\n      return true;\n\n    // check for concurrent control/command/alt key\n    // but are these only present on mouse events?\n\n    if (event.ctrlKey || event.altKey)\n      return true;\n\n    if (key == 13)\n    {\n      var uri = this.getAttribute(\"href\");\n\n      if (uri)\n      {\n        //alert(\"going to \" + uri);\n       var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n        w3c_slidy.hide_slide(slide);\n        w3c_slidy.slide_number = w3c_slidy.find_slide_number(uri);\n        slide = w3c_slidy.slides[w3c_slidy.slide_number];\n        w3c_slidy.last_shown = null;\n        w3c_slidy.set_location();\n        w3c_slidy.set_visibility_all_incremental(\"hidden\");\n        w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\n        w3c_slidy.show_slide(slide);\n        //target.focus();\n\n        try\n        {\n          if (!w3c_slidy.opera)\n            w3c_slidy.help_anchor.focus();\n        }\n        catch (e)\n        {\n        }\n      }\n\n      w3c_slidy.hide_table_of_contents(true);\n\n      if (self.ie7)\n       w3c_slidy.ie_hack();\n\n      return w3c_slidy.cancel(event);\n    }\n\n    if (key == 40 && this.next)\n    {\n      this.next.focus();\n      return w3c_slidy.cancel(event);\n    }\n\n    if (key == 38 && this.previous)\n    {\n      this.previous.focus();\n      return w3c_slidy.cancel(event);\n    }\n\n    return true;\n  },\n\n  touchstart: function (e)\n  {\n    //e.preventDefault();\n    this.prev_tap = this.last_tap;\n    this.last_tap = (new Date).getTime();\n\n    var tap_delay = this.last_tap - this.prev_tap;\n\n    if (tap_delay <= 200)\n    {\n      // double tap\n    }\n\n    var touch = e.touches[0];\n\n    this.start_x = touch.pageX;\n    this.start_y = touch.pageY;\n    this.delta_x = this.delta_y = 0;\n  },\n\n  touchmove: function (e)\n  {\n    //e.preventDefault();\n    var touch = e.touches[0];\n    this.delta_x = touch.pageX - this.start_x;\n    this.delta_y = touch.pageY - this.start_y;\n  },\n\n  touchend: function (e)\n  {\n    //e.preventDefault();\n    var delay = (new Date).getTime() - this.last_tap;\n    var dx = this.delta_x;\n    var dy = this.delta_y;\n    var abs_dx = Math.abs(dx);\n    var abs_dy = Math.abs(dy);\n\n    if (delay < 500 && (abs_dx > 100 || abs_dy > 100))\n    {\n      if (abs_dx > 0.5 * abs_dy)\n      {\n        if (dx < 0)\n          w3c_slidy.next_slide(true);\n        else\n          w3c_slidy.previous_slide(true);\n      }\n      else if (abs_dy > 2 * abs_dx)\n      {\n        w3c_slidy.toggle_table_of_contents();\n      }\n    }\n  },\n\n  // ### OBSOLETE ###\n  before_print: function () {\n    this.show_all_slides();\n    this.hide_toolbar();\n    alert(\"before print\");\n  },\n\n  // ### OBSOLETE ###\n  after_print: function () {\n    if (!this.view_all)\n    {\n      this.single_slide_view();\n      this.show_toolbar();\n    }\n    alert(\"after print\");\n  },\n\n  // ### OBSOLETE ###\n  print_slides: function () {\n    this.before_print();\n    window.print();\n    this.after_print();\n  },\n\n  // ### OBSOLETE ?? ###\n  toggle_view: function () {\n    if (this.view_all)\n    {\n      this.single_slide_view();\n      this.show_toolbar();\n      this.view_all = 0;\n    }\n    else\n    {\n      this.show_all_slides();\n      this.hide_toolbar();\n      this.view_all = 1;\n    }\n  },\n\n  // prepare for printing  ### OBSOLETE ###\n  show_all_slides: function () {\n    this.remove_class(document.body, \"single_slide\");\n    this.set_visibility_all_incremental(\"visible\");\n  },\n\n  // restore after printing  ### OBSOLETE ###\n  single_slide_view: function () {\n    this.add_class(document.body, \"single_slide\");\n    this.set_visibility_all_incremental(\"visible\");\n    this.last_shown = this.previous_incremental_item(null);\n  },\n\n  // suppress IE's image toolbar pop up\n  hide_image_toolbar: function () {\n    if (!this.ns_pos)\n    {\n      var images = document.getElementsByTagName(\"IMG\");\n\n      for (var i = 0; i < images.length; ++i)\n        images[i].setAttribute(\"galleryimg\", \"no\");\n    }\n  },\n\n  unloaded: function (e) {\n    //alert(\"unloaded\");\n  },\n\n  // Safari and Konqueror don't yet support getComputedStyle()\n  // and they always reload page when location.href is updated\n  is_KHTML: function () {\n    var agent = navigator.userAgent;\n    return (agent.indexOf(\"KHTML\") >= 0 ? true : false);\n  },\n\n  // find slide name from first h1 element\n  // default to document title + slide number\n  slide_name: function (index) {\n    var name = null;\n    var slide = this.slides[index];\n\n    var heading = this.find_heading(slide);\n\n    if (heading)\n      name = this.extract_text(heading);\n\n    if (!name)\n      name = this.title + \"(\" + (index + 1) + \")\";\n\n    name.replace(/\\&/g, \"&amp;\");\n    name.replace(/\\</g, \"&lt;\");\n    name.replace(/\\>/g, \"&gt;\");\n\n    return name;\n  },\n\n  // find first h1 element in DOM tree\n  find_heading: function (node) {\n    if (!node || node.nodeType != 1)\n      return null;\n\n    if (node.nodeName == \"H1\" || node.nodeName == \"h1\")\n      return node;\n\n    var child = node.firstChild;\n\n    while (child)\n    {\n      node = this.find_heading(child);\n\n      if (node)\n        return node;\n\n      child = child.nextSibling;\n    }\n\n    return null;\n  },\n\n  // recursively extract text from DOM tree\n  extract_text: function (node) {\n    if (!node)\n      return \"\";\n\n    // text nodes\n    if (node.nodeType == 3)\n      return node.nodeValue;\n\n    // elements\n    if (node.nodeType == 1)\n    {\n      node = node.firstChild;\n      var text = \"\";\n\n      while (node)\n      {\n        text = text + this.extract_text(node);\n        node = node.nextSibling;\n      }\n\n      return text;\n    }\n\n    return \"\";\n  },\n\n  // find copyright text from meta element\n  find_copyright: function () {\n    var name, content;\n    var meta = document.getElementsByTagName(\"meta\");\n\n    for (var i = 0; i < meta.length; ++i)\n    {\n      name = meta[i].getAttribute(\"name\");\n      content = meta[i].getAttribute(\"content\");\n\n      if (name == \"copyright\")\n        return content;\n    }\n\n    return null;\n  },\n\n  find_size_adjust: function () {\n    var name, content, offset;\n    var meta = document.getElementsByTagName(\"meta\");\n\n    for (var i = 0; i < meta.length; ++i)\n    {\n      name = meta[i].getAttribute(\"name\");\n      content = meta[i].getAttribute(\"content\");\n\n      if (name == \"font-size-adjustment\")\n        return 1 * content;\n    }\n\n    return 1;\n  },\n\n  // <meta name=\"duration\" content=\"20\" />  for 20 minutes\n  find_duration: function () {\n    var name, content, offset;\n    var meta = document.getElementsByTagName(\"meta\");\n\n    for (var i = 0; i < meta.length; ++i)\n    {\n      name = meta[i].getAttribute(\"name\");\n      content = meta[i].getAttribute(\"content\");\n\n      if (name == \"duration\")\n        return 60000 * content;\n    }\n\n    return null;\n  },\n\n  replace_by_non_breaking_space: function (str) {\n    for (var i = 0; i < str.length; ++i)\n      str[i] = 160;\n  },\n\n  // ### CHECK ME ### is use of \"li\" okay for text/html?\n  // for XHTML do we also need to specify namespace?\n  init_outliner: function () {\n    var items = document.getElementsByTagName(\"li\");\n\n    for (var i = 0; i < items.length; ++i)\n    {\n      var target = items[i];\n\n      if (!this.has_class(target.parentNode, \"outline\"))\n        continue;\n\n      target.onclick = this.outline_click;\n/* ### more work needed for IE6\n      if (!this.ns_pos)\n      {\n        target.onmouseover = this.hover_outline;\n        target.onmouseout = this.unhover_outline;\n      }\n*/\n      if (this.foldable(target))\n      {\n        target.foldable = true;\n        target.onfocus = function () {w3c_slidy.outline = this;};\n        target.onblur = function () {w3c_slidy.outline = null;};\n\n        if (!target.getAttribute(\"tabindex\"))\n          target.setAttribute(\"tabindex\", \"0\");\n\n        if (this.has_class(target, \"expand\"))\n          this.unfold(target);\n        else\n          this.fold(target);\n      }\n      else\n      {\n        this.add_class(target, \"nofold\");\n        target.visible = true;\n        target.foldable = false;\n      }\n    }\n  },\n\n  foldable: function (item) {\n    if (!item || item.nodeType != 1)\n      return false;\n\n    var node = item.firstChild;\n\n    while (node)\n    {\n      if (node.nodeType == 1 && this.is_block(node))\n        return true;\n\n      node = node.nextSibling;\n    }\n\n    return false;\n  },\n\n  // ### CHECK ME ### switch to add/remove \"hidden\" class\n  fold: function (item) {\n    if (item)\n    {\n      this.remove_class(item, \"unfolded\");\n      this.add_class(item, \"folded\");\n    }\n\n    var node = item ? item.firstChild : null;\n\n    while (node)\n    {\n      if (node.nodeType == 1 && this.is_block(node)) // element\n      {\n         w3c_slidy.add_class(node, \"hidden\");\n      }\n\n      node = node.nextSibling;\n    }\n\n    item.visible = false;\n  },\n\n  // ### CHECK ME ### switch to add/remove \"hidden\" class\n  unfold: function (item) {\n    if (item)\n    {\n      this.add_class(item, \"unfolded\");\n      this.remove_class(item, \"folded\");\n    }\n\n    var node = item ? item.firstChild : null;\n\n    while (node)\n    {\n      if (node.nodeType == 1 && this.is_block(node)) // element\n      {\n        w3c_slidy.remove_class(node, \"hidden\");\n      }\n\n      node = node.nextSibling;\n    }\n\n    item.visible = true;\n  },\n\n  outline_click: function (e) {\n    if (!e)\n      e = window.event;\n\n    var rightclick = false;\n    var target = w3c_slidy.get_target(e);\n\n    while (target && target.visible == undefined)\n      target = target.parentNode;\n\n    if (!target)\n      return true;\n\n    if (e.which)\n      rightclick = (e.which == 3);\n    else if (e.button)\n      rightclick = (e.button == 2);\n\n    if (!rightclick && target.visible != undefined)\n    {\n      if (target.foldable)\n      {\n        if (target.visible)\n          w3c_slidy.fold(target);\n        else\n          w3c_slidy.unfold(target);\n      }\n\n      w3c_slidy.stop_propagation(e);\n      e.cancel = true;\n      e.returnValue = false;\n    }\n\n    return false;\n  },\n\n  add_initial_prompt: function () {\n    var prompt = this.create_element(\"div\");\n    prompt.setAttribute(\"class\", \"initial_prompt\");\n\n    var p1 = this.create_element(\"p\");\n    prompt.appendChild(p1);\n    p1.setAttribute(\"class\", \"help\");\n\n    if (this.keyboardless)\n      p1.innerHTML = \"swipe left to move to next slide\";\n    else\n      p1.innerHTML = \"Space, Right Arrow or swipe left to move to \" +\n                     \"next slide, click help below for more details\";\n\n    this.add_listener(prompt, \"click\", function (e) {\n      document.body.removeChild(prompt);\n      w3c_slidy.stop_propagation(e);\n    \n      if (e.cancel != undefined)\n        e.cancel = true;\n      \n      if (e.returnValue != undefined)\n        e.returnValue = false;\n      \n      return false;\n    });\n\n    document.body.appendChild(prompt);\n    this.initial_prompt = prompt;\n    setTimeout(function() {document.body.removeChild(prompt);}, 5000);\n  },\n\n  add_toolbar: function () {\n    var counter, page;\n\n     this.toolbar = this.create_element(\"div\");\n     this.toolbar.setAttribute(\"class\", \"toolbar\");\n\n     // a reasonably behaved browser\n     if (this.ns_pos || !this.ie6)\n     {\n       var right = this.create_element(\"div\");\n       right.setAttribute(\"style\", \"float: right; text-align: right\");\n\n       counter = this.create_element(\"span\")\n       counter.innerHTML = this.localize(\"slide\") + \" n/m\";\n       right.appendChild(counter);\n       this.toolbar.appendChild(right);\n\n       var left = this.create_element(\"div\");\n       left.setAttribute(\"style\", \"text-align: left\");\n\n       // global end of slide indicator\n       this.eos = this.create_element(\"span\");\n       this.eos.innerHTML = \"* \";\n       left.appendChild(this.eos);\n\n       var help = this.create_element(\"a\");\n       help.setAttribute(\"href\", this.help_page);\n       help.setAttribute(\"title\", this.localize(this.help_text));\n       help.innerHTML = this.localize(\"help?\");\n       left.appendChild(help);\n       this.help_anchor = help;  // save for focus hack\n\n       var gap1 = document.createTextNode(\" \");\n       left.appendChild(gap1);\n\n       var contents = this.create_element(\"a\");\n       contents.setAttribute(\"href\", \"javascript:w3c_slidy.toggle_table_of_contents()\");\n       contents.setAttribute(\"title\", this.localize(\"table of contents\"));\n       contents.innerHTML = this.localize(\"contents?\");\n       left.appendChild(contents);\n\n       var gap2 = document.createTextNode(\" \");\n       left.appendChild(gap2);\n\n       var copyright = this.find_copyright();\n\n       if (copyright)\n       {\n         var span = this.create_element(\"span\");\n         span.className = \"copyright\";\n         span.innerHTML = copyright;\n         left.appendChild(span);\n       }\n\n       this.toolbar.setAttribute(\"tabindex\", \"0\");\n       this.toolbar.appendChild(left);\n     }\n     else // IE6 so need to work around its poor CSS support\n     {\n       this.toolbar.style.position = (this.ie7 ? \"fixed\" : \"absolute\");\n       this.toolbar.style.zIndex = \"200\";\n       this.toolbar.style.width = \"99.9%\";\n       this.toolbar.style.height = \"1.2em\";\n       this.toolbar.style.top = \"auto\";\n       this.toolbar.style.bottom = \"0\";\n       this.toolbar.style.left = \"0\";\n       this.toolbar.style.right = \"0\";\n       this.toolbar.style.textAlign = \"left\";\n       this.toolbar.style.fontSize = \"60%\";\n       this.toolbar.style.color = \"red\";\n       this.toolbar.borderWidth = 0;\n       this.toolbar.className = \"toolbar\";\n       this.toolbar.style.background = \"rgb(240,240,240)\";\n\n       // would like to have help text left aligned\n       // and page counter right aligned, floating\n       // div's don't work, so instead use nested\n       // absolutely positioned div's.\n\n       var sp = this.create_element(\"span\");\n       sp.innerHTML = \"&nbsp;&nbsp;*&nbsp;\";\n       this.toolbar.appendChild(sp);\n       this.eos = sp;  // end of slide indicator\n\n       var help = this.create_element(\"a\");\n       help.setAttribute(\"href\", this.help_page);\n       help.setAttribute(\"title\", this.localize(this.help_text));\n       help.innerHTML = this.localize(\"help?\");\n       this.toolbar.appendChild(help);\n       this.help_anchor = help;  // save for focus hack\n\n       var gap1 = document.createTextNode(\" \");\n       this.toolbar.appendChild(gap1);\n\n       var contents = this.create_element(\"a\");\n       contents.setAttribute(\"href\", \"javascript:toggleTableOfContents()\");\n       contents.setAttribute(\"title\", this.localize(\"table of contents\".localize));\n       contents.innerHTML = this.localize(\"contents?\");\n       this.toolbar.appendChild(contents);\n\n       var gap2 = document.createTextNode(\" \");\n       this.toolbar.appendChild(gap2);\n\n       var copyright = this.find_copyright();\n\n       if (copyright)\n       {\n         var span = this.create_element(\"span\");\n         span.innerHTML = copyright;\n         span.style.color = \"black\";\n         span.style.marginLeft = \"0.5em\";\n         this.toolbar.appendChild(span);\n       }\n\n       counter = this.create_element(\"div\")\n       counter.style.position = \"absolute\";\n       counter.style.width = \"auto\"; //\"20%\";\n       counter.style.height = \"1.2em\";\n       counter.style.top = \"auto\";\n       counter.style.bottom = 0;\n       counter.style.right = \"0\";\n       counter.style.textAlign = \"right\";\n       counter.style.color = \"red\";\n       counter.style.background = \"rgb(240,240,240)\";\n\n       counter.innerHTML = this.localize(\"slide\") + \" n/m\";\n       this.toolbar.appendChild(counter);\n     }\n\n     // ensure that click isn't passed through to the page\n     this.toolbar.onclick =\n         function (e) {\n           if (!e)\n             e = window.event;\n\n           var target = e.target;\n\n           if (!target && e.srcElement)\n             target = e.srcElement;\n\n           // work around Safari bug\n           if (target && target.nodeType == 3)\n             target = target.parentNode;\n\n           w3c_slidy.stop_propagation(e);\n\n           if (target && target.nodeName.toLowerCase() != \"a\")\n             w3c_slidy.mouse_button_click(e);\n         };\n\n     this.slide_number_element = counter;\n     this.set_eos_status(false);\n     document.body.appendChild(this.toolbar);\n  },\n\n  // wysiwyg editors make it hard to use div elements\n  // e.g. amaya loses the div when you copy and paste\n  // this function wraps div elements around implicit\n  // slides which start with an h1 element and continue\n  // up to the next heading or div element\n  wrap_implicit_slides: function () {\n    var i, heading, node, next, div;\n    var headings = document.getElementsByTagName(\"h1\");\n\n    if (!headings)\n      return;\n\n    for (i = 0; i < headings.length; ++i)\n    {\n      heading = headings[i];\n\n      if (heading.parentNode != document.body)\n        continue;\n\n      node = heading.nextSibling;\n\n      div = document.createElement(\"div\");\n      this.add_class(div, \"slide\");\n      document.body.replaceChild(div, heading);\n      div.appendChild(heading);\n\n      while (node)\n      {\n        if (node.nodeType == 1) // an element\n        {\n           if (node.nodeName == \"H1\" || node.nodeName == \"h1\")\n             break;\n\n           if (node.nodeName == \"DIV\" || node.nodeName == \"div\")\n           {\n             if (this.has_class(node, \"slide\"))\n               break;\n\n             if (this.has_class(node, \"handout\"))\n               break;\n           }\n        }\n\n        next = node.nextSibling;\n        node = document.body.removeChild(node);\n        div.appendChild(node);\n        node = next;\n      } \n    }\n  },\n\n  attach_touch_handers: function(slides)\n  {\n    var i, slide;\n\n    for (i = 0; i < slides.length; ++i)\n    {\n      slide = slides[i];\n      this.add_listener(slide, \"touchstart\", this.touchstart);\n      this.add_listener(slide, \"touchmove\", this.touchmove);\n      this.add_listener(slide, \"touchend\", this.touchend);\n    }\n  },\n\n// return new array of all slides\n  collect_slides: function () {\n    var slides = new Array();\n    var divs = document.body.getElementsByTagName(\"div\");\n\n    for (var i = 0; i < divs.length; ++i)\n    {\n      div = divs.item(i);\n\n      if (this.has_class(div, \"slide\"))\n      {\n        // add slide to collection\n        slides[slides.length] = div;\n\n        // hide each slide as it is found\n        this.add_class(div, \"hidden\");\n\n        // add dummy <br/> at end for scrolling hack\n        var node1 = document.createElement(\"br\");\n        div.appendChild(node1);\n        var node2 = document.createElement(\"br\");\n        div.appendChild(node2);\n      }\n      else if (this.has_class(div, \"background\"))\n      {  // work around for Firefox SVG reload bug\n        // which otherwise replaces 1st SVG graphic with 2nd\n        div.style.display = \"block\";\n      }\n    }\n\n    this.slides = slides;\n  },\n\n  // return new array of all <div class=\"handout\">\n  collect_notes: function () {\n    var notes = new Array();\n    var divs = document.body.getElementsByTagName(\"div\");\n\n    for (var i = 0; i < divs.length; ++i)\n    {\n      div = divs.item(i);\n\n      if (this.has_class(div, \"handout\"))\n      {\n        // add note to collection\n        notes[notes.length] = div;\n\n        // and hide it\n        this.add_class(div, \"hidden\");\n      }\n    }\n\n    this.notes = notes;\n  },\n\n  // return new array of all <div class=\"background\">\n  // including named backgrounds e.g. class=\"background titlepage\"\n  collect_backgrounds: function () {\n    var backgrounds = new Array();\n    var divs = document.body.getElementsByTagName(\"div\");\n\n    for (var i = 0; i < divs.length; ++i)\n    {\n      div = divs.item(i);\n\n      if (this.has_class(div, \"background\"))\n      {\n        // add background to collection\n        backgrounds[backgrounds.length] = div;\n\n        // and hide it\n        this.add_class(div, \"hidden\");\n      }\n    }\n\n    this.backgrounds = backgrounds;\n  },\n\n  // set click handlers on all anchors\n  patch_anchors: function () {\n    var self = w3c_slidy;\n    var handler = function (event) {\n      // compare this.href with location.href\n      // for link to another slide in this doc\n\n      if (self.page_address(this.href) == self.page_address(location.href))\n      {\n        // yes, so find new slide number\n        var newslidenum = self.find_slide_number(this.href);\n\n        if (newslidenum != self.slide_number)\n        {\n          var slide = self.slides[self.slide_number];\n          self.hide_slide(slide);\n          self.slide_number = newslidenum;\n          slide = self.slides[self.slide_number];\n          self.show_slide(slide);\n          self.set_location();\n        }\n      }\n      else\n        w3c_slidy.stop_propagation(event);\n\n//      else if (this.target == null)\n//        location.href = this.href;\n\n      this.blur();\n      self.disable_slide_click = true;\n    };\n\n    var anchors = document.body.getElementsByTagName(\"a\");\n\n    for (var i = 0; i < anchors.length; ++i)\n    {\n      if (window.addEventListener)\n        anchors[i].addEventListener(\"click\", handler, false);\n      else\n        anchors[i].attachEvent(\"onclick\", handler);\n    }\n  },\n\n  // ### CHECK ME ### see which functions are invoked via setTimeout\n  // either directly or indirectly for use of w3c_slidy vs this\n  show_slide_number: function () {\n    var timer = w3c_slidy.get_timer();\n    w3c_slidy.slide_number_element.innerHTML = timer + w3c_slidy.localize(\"slide\") + \" \" +\n           (w3c_slidy.slide_number + 1) + \"/\" + w3c_slidy.slides.length;\n  },\n\n  // every 200mS check if the location has been changed as a\n  // result of the user activating the Back button/menu item\n  // doesn't work for Opera < 9.5\n  check_location: function () {\n    var hash = location.hash;\n\n    if (w3c_slidy.slide_number > 0 && (hash == \"\" || hash == \"#\"))\n      w3c_slidy.goto_slide(0);\n    else if (hash.length > 2 && hash != \"#(\"+(w3c_slidy.slide_number+1)+\")\")\n    {\n      var num = parseInt(location.hash.substr(2));\n\n      if (!isNaN(num))\n        w3c_slidy.goto_slide(num-1);\n    }\n\n    if (w3c_slidy.time_left && w3c_slidy.slide_number > 0)\n    {\n      w3c_slidy.show_slide_number();\n\n      if (w3c_slidy.time_left > 0)\n        w3c_slidy.time_left -= 200;\n    } \n  },\n\n  get_timer: function () {\n    var timer = \"\";\n    if (w3c_slidy.time_left)\n    {\n      var mins, secs;\n      secs = Math.floor(w3c_slidy.time_left/1000);\n      mins = Math.floor(secs / 60);\n      secs = secs % 60;\n      timer = (mins ? mins+\"m\" : \"\") + secs + \"s \";\n    }\n\n    return timer;\n  },\n\n  // this doesn't push location onto history stack for IE\n  // for which a hidden iframe hack is needed: load page into\n  // the iframe with script that set's parent's location.hash\n  // but that won't work for standalone use unless we can\n  // create the page dynamically via a javascript: URL\n  // ### use history.pushState if available\n  set_location: function () {\n     var uri = w3c_slidy.page_address(location.href);\n     var hash = \"#(\" + (w3c_slidy.slide_number+1) + \")\";\n\n     if (w3c_slidy.slide_number >= 0)\n       uri = uri + hash;\n\n     if (typeof(history.pushState) != \"undefined\")\n     {\n       document.title = w3c_slidy.title + \" (\" + (w3c_slidy.slide_number+1) + \")\";\n       history.pushState(0, document.title, hash);\n       w3c_slidy.show_slide_number();\n       return;\n     }\n\n     if (w3c_slidy.ie && (w3c_slidy.ie6 || w3c_slidy.ie7))\n       w3c_slidy.push_hash(hash);\n\n     if (uri != location.href) // && !khtml\n        location.href = uri;\n\n     if (this.khtml)\n        hash = \"(\" + (w3c_slidy.slide_number+1) + \")\";\n\n     if (!this.ie && location.hash != hash && location.hash != \"\")\n       location.hash = hash;\n\n     document.title = w3c_slidy.title + \" (\" + (w3c_slidy.slide_number+1) + \")\";\n     w3c_slidy.show_slide_number();\n  },\n\n  page_address: function (uri) {\n    var i = uri.indexOf(\"#\");\n\n    if (i < 0)\n      i = uri.indexOf(\"%23\");\n\n    // check if anchor is entire page\n\n    if (i < 0)\n      return uri;  // yes\n\n    return uri.substr(0, i);\n  },\n\n  // only used for IE6 and IE7\n  on_frame_loaded: function (hash) {\n    location.hash = hash;\n    var uri = w3c_slidy.page_address(location.href);\n    location.href = uri + hash;\n  },\n\n  // history hack with thanks to Bertrand Le Roy\n  push_hash: function (hash) {\n    if (hash == \"\") hash = \"#(1)\";\n      window.location.hash = hash;\n\n    var doc = document.getElementById(\"historyFrame\").contentWindow.document;\n    doc.open(\"javascript:'<html></html>'\");\n    doc.write(\"<html><head><script type=\\\"text/javascript\\\">window.parent.w3c_slidy.on_frame_loaded('\"+\n      (hash) + \"');</script></head><body>hello mum</body></html>\");\n      doc.close();\n  },\n\n  // find current slide based upon location\n  // first find target anchor and then look\n  // for associated div element enclosing it\n  // finally map that to slide number\n  find_slide_number: function (uri) {\n    // first get anchor from page location\n\n    var i = uri.indexOf(\"#\");\n\n    // check if anchor is entire page\n    if (i < 0)\n      return 0;  // yes\n\n    var anchor = unescape(uri.substr(i+1));\n\n    // now use anchor as XML ID to find target\n    var target = document.getElementById(anchor);\n\n    if (!target)\n    {\n      // does anchor look like \"(2)\" for slide 2 ??\n      // where first slide is (1)\n      var re = /\\((\\d)+\\)/;\n\n      if (anchor.match(re))\n      {\n        var num = parseInt(anchor.substring(1, anchor.length-1));\n\n        if (num > this.slides.length)\n          num = 1;\n\n        if (--num < 0)\n          num = 0;\n\n        return num;\n      }\n\n      // accept [2] for backwards compatibility\n      re = /\\[(\\d)+\\]/;\n\n      if (anchor.match(re))\n      {\n         var num = parseInt(anchor.substring(1, anchor.length-1));\n\n         if (num > this.slides.length)\n            num = 1;\n\n         if (--num < 0)\n            num = 0;\n\n         return num;\n      }\n\n      // oh dear unknown anchor\n      return 0;\n    }\n\n    // search for enclosing slide\n\n    while (true)\n    {\n      // browser coerces html elements to uppercase!\n      if (target.nodeName.toLowerCase() == \"div\" &&\n            this.has_class(target, \"slide\"))\n      {\n        // found the slide element\n        break;\n      }\n\n      // otherwise try parent element if any\n\n      target = target.parentNode;\n\n      if (!target)\n      {\n        return 0;   // no luck!\n      }\n    };\n\n    for (i = 0; i < slides.length; ++i)\n    {\n      if (slides[i] == target)\n        return i;  // success\n    }\n\n    // oh dear still no luck\n    return 0;\n  },\n\n  previous_slide: function (incremental) {\n    if (!w3c_slidy.view_all)\n    {\n      var slide;\n\n      if ((incremental || w3c_slidy.slide_number == 0) && w3c_slidy.last_shown != null)\n      {\n        w3c_slidy.last_shown = w3c_slidy.hide_previous_item(w3c_slidy.last_shown);\n        w3c_slidy.set_eos_status(false);\n      }\n      else if (w3c_slidy.slide_number > 0)\n      {\n        slide = w3c_slidy.slides[w3c_slidy.slide_number];\n        w3c_slidy.hide_slide(slide);\n\n        w3c_slidy.slide_number = w3c_slidy.slide_number - 1;\n        slide = w3c_slidy.slides[w3c_slidy.slide_number];\n        w3c_slidy.set_visibility_all_incremental(\"visible\");\n        w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\n        w3c_slidy.set_eos_status(true);\n        w3c_slidy.show_slide(slide);\n      }\n\n      w3c_slidy.set_location();\n\n      if (!w3c_slidy.ns_pos)\n        w3c_slidy.refresh_toolbar(200);\n    }\n  },\n\n  next_slide: function (incremental) {\n    if (!w3c_slidy.view_all)\n    {\n      var slide, last = w3c_slidy.last_shown;\n\n      if (incremental || w3c_slidy.slide_number == w3c_slidy.slides.length - 1)\n         w3c_slidy.last_shown = w3c_slidy.reveal_next_item(w3c_slidy.last_shown);\n\n      if ((!incremental || w3c_slidy.last_shown == null) &&\n             w3c_slidy.slide_number < w3c_slidy.slides.length - 1)\n      {\n         slide = w3c_slidy.slides[w3c_slidy.slide_number];\n         w3c_slidy.hide_slide(slide);\n\n         w3c_slidy.slide_number = w3c_slidy.slide_number + 1;\n         slide = w3c_slidy.slides[w3c_slidy.slide_number];\n         w3c_slidy.last_shown = null;\n         w3c_slidy.set_visibility_all_incremental(\"hidden\");\n         w3c_slidy.show_slide(slide);\n      }\n      else if (!w3c_slidy.last_shown)\n      {\n         if (last && incremental)\n           w3c_slidy.last_shown = last;\n      }\n\n      w3c_slidy.set_location();\n\n      w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\n\n      if (!w3c_slidy.ns_pos)\n         w3c_slidy.refresh_toolbar(200);\n     }\n  },\n\n  // to first slide with nothing revealed\n  // i.e. state at start of presentation\n  first_slide: function () {\n     if (!w3c_slidy.view_all)\n     {\n       var slide;\n\n       if (w3c_slidy.slide_number != 0)\n       {\n         slide = w3c_slidy.slides[w3c_slidy.slide_number];\n         w3c_slidy.hide_slide(slide);\n\n         w3c_slidy.slide_number = 0;\n         slide = w3c_slidy.slides[w3c_slidy.slide_number];\n         w3c_slidy.last_shown = null;\n         w3c_slidy.set_visibility_all_incremental(\"hidden\");\n         w3c_slidy.show_slide(slide);\n       }\n\n       w3c_slidy.set_eos_status(\n         !w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\n       w3c_slidy.set_location();\n     }\n  },\n\n  // goto last slide with everything revealed\n  // i.e. state at end of presentation\n  last_slide: function () {\n    if (!w3c_slidy.view_all)\n    {\n      var slide;\n\n      w3c_slidy.last_shown = null; //revealNextItem(lastShown);\n\n      if (w3c_slidy.last_shown == null &&\n          w3c_slidy.slide_number < w3c_slidy.slides.length - 1)\n      {\n         slide = w3c_slidy.slides[w3c_slidy.slide_number];\n         w3c_slidy.hide_slide(slide);\n         w3c_slidy.slide_number = w3c_slidy.slides.length - 1;\n         slide = w3c_slidy.slides[w3c_slidy.slide_number];\n         w3c_slidy.set_visibility_all_incremental(\"visible\");\n         w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\n\n         w3c_slidy.show_slide(slide);\n      }\n      else\n      {\n         w3c_slidy.set_visibility_all_incremental(\"visible\");\n         w3c_slidy.last_shown = w3c_slidy.previous_incremental_item(null);\n      }\n\n      w3c_slidy.set_eos_status(true);\n      w3c_slidy.set_location();\n    }\n  },\n\n\n  // ### check this and consider add/remove class\n  set_eos_status: function (state) {\n    if (this.eos)\n      this.eos.style.color = (state ? \"rgb(240,240,240)\" : \"red\");\n  },\n\n  // first slide is 0\n  goto_slide: function (num) {\n    //alert(\"going to slide \" + (num+1));\n    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n    w3c_slidy.hide_slide(slide);\n    w3c_slidy.slide_number = num;\n    slide = w3c_slidy.slides[w3c_slidy.slide_number];\n    w3c_slidy.last_shown = null;\n    w3c_slidy.set_visibility_all_incremental(\"hidden\");\n    w3c_slidy.set_eos_status(!w3c_slidy.next_incremental_item(w3c_slidy.last_shown));\n    document.title = w3c_slidy.title + \" (\" + (w3c_slidy.slide_number+1) + \")\";\n    w3c_slidy.show_slide(slide);\n    w3c_slidy.show_slide_number();\n  },\n\n\n  show_slide: function (slide) {\n    this.sync_background(slide);\n    this.remove_class(slide, \"hidden\");\n\n    // work around IE9 object rendering bug\n    setTimeout(\"window.scrollTo(0,0);\", 1);\n  },\n\n  hide_slide: function (slide) {\n    this.add_class(slide, \"hidden\");\n  },\n\n  // show just the backgrounds pertinent to this slide\n  // when slide background-color is transparent\n  // this should now work with rgba color values\n  sync_background: function (slide) {\n    var background;\n    var bgColor;\n\n    if (slide.currentStyle)\n      bgColor = slide.currentStyle[\"backgroundColor\"];\n    else if (document.defaultView)\n    {\n      var styles = document.defaultView.getComputedStyle(slide,null);\n\n      if (styles)\n        bgColor = styles.getPropertyValue(\"background-color\");\n      else // broken implementation probably due Safari or Konqueror\n      {\n        //alert(\"defective implementation of getComputedStyle()\");\n        bgColor = \"transparent\";\n      }\n    }\n    else\n      bgColor == \"transparent\";\n\n    if (bgColor == \"transparent\" ||\n        bgColor.indexOf(\"rgba\") >= 0 ||\n        bgColor.indexOf(\"opacity\") >= 0)\n    {\n      var slideClass = this.get_class_list(slide);\n\n      for (var i = 0; i < this.backgrounds.length; i++)\n      {\n        background = this.backgrounds[i];\n\n        var bgClass = this.get_class_list(background);\n\n        if (this.matching_background(slideClass, bgClass))\n          this.remove_class(background, \"hidden\");\n        else\n          this.add_class(background, \"hidden\");\n      }\n    }\n    else // forcibly hide all backgrounds\n      this.hide_backgrounds();\n  },\n\n  hide_backgrounds: function () {\n    for (var i = 0; i < this.backgrounds.length; i++)\n    {\n      background = this.backgrounds[i];\n      this.add_class(background, \"hidden\");\n    }\n  },\n\n  // compare classes for slide and background\n  matching_background: function (slideClass, bgClass) {\n    var i, count, pattern, result;\n\n    // define pattern as regular expression\n    pattern = /\\w+/g;\n\n    // check background class names\n    result = bgClass.match(pattern);\n\n    for (i = count = 0; i < result.length; i++)\n    {\n      if (result[i] == \"hidden\")\n        continue;\n\n      if (result[i] == \"background\")\n\tcontinue;\n\n      ++count;\n    }\n\n    if (count == 0)  // default match\n      return true;\n\n    // check for matches and place result in array\n    result = slideClass.match(pattern);\n\n    // now check if desired name is present for background\n    for (i = count = 0; i < result.length; i++)\n    {\n      if (result[i] == \"hidden\")\n        continue;\n\n      if (this.has_token(bgClass, result[i]))\n        return true;\n    }\n\n    return false;\n  },\n\n  resized: function () {\n     var width = 0;\n\n     if ( typeof( window.innerWidth ) == 'number' )\n       width = window.innerWidth;  // Non IE browser\n     else if (document.documentElement && document.documentElement.clientWidth)\n       width = document.documentElement.clientWidth;  // IE6\n     else if (document.body && document.body.clientWidth)\n       width = document.body.clientWidth; // IE4\n\n     var height = 0;\n\n     if ( typeof( window.innerHeight ) == 'number' )\n       height = window.innerHeight;  // Non IE browser\n     else if (document.documentElement && document.documentElement.clientHeight)\n       height = document.documentElement.clientHeight;  // IE6\n     else if (document.body && document.body.clientHeight)\n       height = document.body.clientHeight; // IE4\n\n     if (height && (width/height > 1.05*1024/768))\n     {\n       width = height * 1024.0/768;\n     }\n\n     // IE fires onresize even when only font size is changed!\n     // so we do a check to avoid blocking < and > actions\n     if (width != w3c_slidy.last_width || height != w3c_slidy.last_height)\n     {\n       if (width >= 1100)\n         w3c_slidy.size_index = 5;    // 4\n       else if (width >= 1000)\n         w3c_slidy.size_index = 4;    // 3\n       else if (width >= 800)\n         w3c_slidy.size_index = 3;    // 2\n       else if (width >= 600)\n         w3c_slidy.size_index = 2;    // 1\n       else if (width)\n         w3c_slidy.size_index = 0;\n\n       // add in font size adjustment from meta element e.g.\n       // <meta name=\"font-size-adjustment\" content=\"-2\" />\n       // useful when slides have too much content ;-)\n\n       if (0 <= w3c_slidy.size_index + w3c_slidy.size_adjustment &&\n             w3c_slidy.size_index + w3c_slidy.size_adjustment < w3c_slidy.sizes.length)\n         w3c_slidy.size_index = w3c_slidy.size_index + w3c_slidy.size_adjustment;\n\n       // enables cross browser use of relative width/height\n       // on object elements for use with SVG and Flash media\n       w3c_slidy.adjust_object_dimensions(width, height);\n\n       if (document.body.style.fontSize != w3c_slidy.sizes[w3c_slidy.size_index])\n       {\n         document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\n       }\n\n       w3c_slidy.last_width = width;\n       w3c_slidy.last_height = height;\n\n       // force reflow to work around Mozilla bug\n       if (w3c_slidy.ns_pos)\n       {\n         var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n         w3c_slidy.hide_slide(slide);\n         w3c_slidy.show_slide(slide);\n       }\n\n       // force correct positioning of toolbar\n       w3c_slidy.refresh_toolbar(200);\n     }\n  },\n\n  scrolled: function () {\n    if (w3c_slidy.toolbar && !w3c_slidy.ns_pos && !w3c_slidy.ie7)\n    {\n      w3c_slidy.hack_offset = w3c_slidy.scroll_x_offset();\n      // hide toolbar\n      w3c_slidy.toolbar.style.display = \"none\";\n\n      // make it reappear later\n      if (w3c_slidy.scrollhack == 0 && !w3c_slidy.view_all)\n      {\n        setTimeout(function () {w3c_slidy.show_toolbar(); }, 1000);\n        w3c_slidy.scrollhack = 1;\n      }\n    }\n  },\n\n  hide_toolbar: function () {\n    w3c_slidy.add_class(w3c_slidy.toolbar, \"hidden\");\n    window.focus();\n  },\n\n  // used to ensure IE refreshes toolbar in correct position\n  refresh_toolbar: function (interval) {\n    if (!w3c_slidy.ns_pos && !w3c_slidy.ie7)\n    {\n      w3c_slidy.hide_toolbar();\n      setTimeout(function () {w3c_slidy.show_toolbar();}, interval);\n    }\n  },\n\n  // restores toolbar after short delay\n  show_toolbar: function () {\n    if (w3c_slidy.want_toolbar)\n    {\n      w3c_slidy.toolbar.style.display = \"block\";\n\n      if (!w3c_slidy.ns_pos)\n      {\n        // adjust position to allow for scrolling\n        var xoffset = w3c_slidy.scroll_x_offset();\n        w3c_slidy.toolbar.style.left = xoffset;\n        w3c_slidy.toolbar.style.right = xoffset;\n\n        // determine vertical scroll offset\n        //var yoffset = scrollYOffset();\n\n        // bottom is doc height - window height - scroll offset\n        //var bottom = documentHeight() - lastHeight - yoffset\n\n        //if (yoffset > 0 || documentHeight() > lastHeight)\n        //   bottom += 16;  // allow for height of scrollbar\n\n        w3c_slidy.toolbar.style.bottom = 0; //bottom;\n      }\n\n      w3c_slidy.remove_class(w3c_slidy.toolbar, \"hidden\");\n    }\n\n    w3c_slidy.scrollhack = 0;\n\n\n    // set the keyboard focus to the help link on the\n    // toolbar to ensure that document has the focus\n    // IE doesn't always work with window.focus()\n    // and this hack has benefit of Enter for help\n\n    try\n    {\n      if (!w3c_slidy.opera)\n        w3c_slidy.help_anchor.focus();\n    }\n    catch (e)\n    {\n    }\n  },\n\n// invoked via F key\n  toggle_toolbar: function () {\n    if (!w3c_slidy.view_all)\n    {\n      if (w3c_slidy.has_class(w3c_slidy.toolbar, \"hidden\"))\n      {\n        w3c_slidy.remove_class(w3c_slidy.toolbar, \"hidden\")\n        w3c_slidy.want_toolbar = 1;\n      }\n      else\n      {\n        w3c_slidy.add_class(w3c_slidy.toolbar, \"hidden\")\n        w3c_slidy.want_toolbar = 0;\n      }\n    }\n  },\n\n  scroll_x_offset: function () {\n    if (window.pageXOffset)\n      return self.pageXOffset;\n\n    if (document.documentElement && \n             document.documentElement.scrollLeft)\n      return document.documentElement.scrollLeft;\n\n    if (document.body)\n      return document.body.scrollLeft;\n\n    return 0;\n  },\n\n  scroll_y_offset: function () {\n    if (window.pageYOffset)\n      return self.pageYOffset;\n\n    if (document.documentElement && \n             document.documentElement.scrollTop)\n      return document.documentElement.scrollTop;\n\n    if (document.body)\n      return document.body.scrollTop;\n\n    return 0;\n  },\n\n  // looking for a way to determine height of slide content\n  // the slide itself is set to the height of the window\n  optimize_font_size: function () {\n    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n\n    //var dh = documentHeight(); //getDocHeight(document);\n    var dh = slide.scrollHeight;\n    var wh = getWindowHeight();\n    var u = 100 * dh / wh;\n\n    alert(\"window utilization = \" + u + \"% (doc \"\n      + dh + \" win \" + wh + \")\");\n  },\n\n  // from document object\n  get_doc_height: function (doc) {\n    if (!doc)\n      doc = document;\n\n    if (doc && doc.body && doc.body.offsetHeight)\n      return doc.body.offsetHeight;  // ns/gecko syntax\n\n    if (doc && doc.body && doc.body.scrollHeight)\n      return doc.body.scrollHeight;\n\n    alert(\"couldn't determine document height\");\n  },\n\n  get_window_height: function () {\n    if ( typeof( window.innerHeight ) == 'number' )\n      return window.innerHeight;  // Non IE browser\n\n    if (document.documentElement && document.documentElement.clientHeight)\n      return document.documentElement.clientHeight;  // IE6\n\n    if (document.body && document.body.clientHeight)\n      return document.body.clientHeight; // IE4\n  },\n\n  document_height: function () {\n    var sh, oh;\n\n    sh = document.body.scrollHeight;\n    oh = document.body.offsetHeight;\n\n    if (sh && oh)\n    {\n      return (sh > oh ? sh : oh);\n    }\n\n    // no idea!\n    return 0;\n  },\n\n  smaller: function () {\n    if (w3c_slidy.size_index > 0)\n    {\n      --w3c_slidy.size_index;\n    }\n\n    w3c_slidy.toolbar.style.display = \"none\";\n    document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\n    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n    w3c_slidy.hide_slide(slide);\n    w3c_slidy.show_slide(slide);\n    setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);\n  },\n\n  bigger: function () {\n    if (w3c_slidy.size_index < w3c_slidy.sizes.length - 1)\n    {\n      ++w3c_slidy.size_index;\n    }\n\n    w3c_slidy.toolbar.style.display = \"none\";\n    document.body.style.fontSize = w3c_slidy.sizes[w3c_slidy.size_index];\n    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n    w3c_slidy.hide_slide(slide);\n    w3c_slidy.show_slide(slide);\n    setTimeout(function () {w3c_slidy.show_toolbar(); }, 50);\n  },\n\n  // enables cross browser use of relative width/height\n  // on object elements for use with SVG and Flash media\n  // with thanks to Ivan Herman for the suggestion\n  adjust_object_dimensions: function (width, height) {\n    for( var i = 0; i < w3c_slidy.objects.length; i++ )\n    {\n      var obj = this.objects[i];\n      var mimeType = obj.getAttribute(\"type\");\n\n      if (mimeType == \"image/svg+xml\" || mimeType == \"application/x-shockwave-flash\")\n      {\n        if ( !obj.initialWidth ) \n          obj.initialWidth = obj.getAttribute(\"width\");\n\n        if ( !obj.initialHeight ) \n          obj.initialHeight = obj.getAttribute(\"height\");\n\n        if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == \"%\" )\n        {\n          var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));\n          var newW = width * (w/100.0);\n          obj.setAttribute(\"width\",newW);\n        }\n\n        if ( obj.initialHeight &&\n             obj.initialHeight.charAt(obj.initialHeight.length-1) == \"%\" )\n        {\n          var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));\n          var newH = height * (h/100.0);\n          obj.setAttribute(\"height\", newH);\n        }\n      }\n    }\n  },\n\n  // needed for Opera to inhibit default behavior\n  // since Opera delivers keyPress even if keyDown\n  // was cancelled\n  key_press: function (event) {\n    if (!event)\n      event = window.event;\n\n    if (!w3c_slidy.key_wanted)\n      return w3c_slidy.cancel(event);\n\n    return true;\n  },\n\n  //  See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes\n  key_down: function (event) {\n    var key, target, tag;\n\n    w3c_slidy.key_wanted = true;\n\n    if (!event)\n      event = window.event;\n\n    // kludge around NS/IE differences \n    if (window.event)\n    {\n      key = window.event.keyCode;\n      target = window.event.srcElement;\n    }\n    else if (event.which)\n    {\n      key = event.which;\n      target = event.target;\n    }\n    else\n      return true; // Yikes! unknown browser\n\n    // ignore event if key value is zero\n    // as for alt on Opera and Konqueror\n    if (!key)\n       return true;\n\n    // avoid interfering with keystroke\n    // behavior for non-slidy chrome elements\n    if (!w3c_slidy.slidy_chrome(target) &&\n        w3c_slidy.special_element(target))\n      return true;\n\n    // check for concurrent control/command/alt key\n    // but are these only present on mouse events?\n\n    if (event.ctrlKey || event.altKey || event.metaKey)\n       return true;\n\n    // dismiss table of contents if visible\n    if (w3c_slidy.is_shown_toc() && key != 9 && key != 16 && key != 38 && key != 40)\n    {\n      w3c_slidy.hide_table_of_contents(true);\n\n      if (key == 27 || key == 84 || key == 67)\n        return w3c_slidy.cancel(event);\n    }\n\n    if (key == 34) // Page Down\n    {\n      if (w3c_slidy.view_all)\n        return true;\n\n      w3c_slidy.next_slide(false);\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 33) // Page Up\n    {\n      if (w3c_slidy.view_all)\n        return true;\n\n      w3c_slidy.previous_slide(false);\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 32) // space bar\n    {\n      w3c_slidy.next_slide(true);\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 37) // Left arrow\n    {\n      w3c_slidy.previous_slide(!event.shiftKey);\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 36) // Home\n    {\n      w3c_slidy.first_slide();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 35) // End\n    {\n      w3c_slidy.last_slide();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 39) // Right arrow\n    {\n      w3c_slidy.next_slide(!event.shiftKey);\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 13) // Enter\n    {\n      if (w3c_slidy.outline)\n      {\n        if (w3c_slidy.outline.visible)\n          w3c_slidy.fold(w3c_slidy.outline);\n        else\n          w3c_slidy.unfold(w3c_slidy.outline);\n          \n       return w3c_slidy.cancel(event);\n      }\n    }\n    else if (key == 188)  // < for smaller fonts\n    {\n      w3c_slidy.smaller();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 190)  // > for larger fonts\n    {\n      w3c_slidy.bigger();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 189 || key == 109)  // - for smaller fonts\n    {\n      w3c_slidy.smaller();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 187 || key == 191 || key == 107)  // = +  for larger fonts\n    {\n      w3c_slidy.bigger();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 83)  // S for smaller fonts\n    {\n      w3c_slidy.smaller();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 66)  // B for larger fonts\n    {\n      w3c_slidy.bigger();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 90)  // Z for last slide\n    {\n      w3c_slidy.last_slide();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 70)  // F for toggle toolbar\n    {\n      w3c_slidy.toggle_toolbar();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 65)  // A for toggle view single/all slides\n    {\n      w3c_slidy.toggle_view();\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 75)  // toggle action of left click for next page\n    {\n      w3c_slidy.mouse_click_enabled = !w3c_slidy.mouse_click_enabled;\n      var alert_msg = (w3c_slidy.mouse_click_enabled ?\n                \"enabled\" : \"disabled\") +  \" mouse click advance\";\n\n      alert(w3c_slidy.localize(alert_msg));\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 84 || key == 67)  // T or C for table of contents\n    {\n      if (w3c_slidy.toc)\n        w3c_slidy.toggle_table_of_contents();\n\n      return w3c_slidy.cancel(event);\n    }\n    else if (key == 72) // H for help\n    {\n      window.location = w3c_slidy.help_page;\n      return w3c_slidy.cancel(event);\n    }\n    //else alert(\"key code is \"+ key);\n\n    return true;\n  },\n\n  // safe for both text/html and application/xhtml+xml\n  create_element: function (name) {\n    if (this.xhtml && (typeof document.createElementNS != 'undefined'))\n      return document.createElementNS(\"http://www.w3.org/1999/xhtml\", name)\n\n    return document.createElement(name);\n  },\n\n  get_element_style: function (elem, IEStyleProp, CSSStyleProp) {\n    if (elem.currentStyle)\n    {\n      return elem.currentStyle[IEStyleProp];\n    }\n    else if (window.getComputedStyle)\n    {\n      var compStyle = window.getComputedStyle(elem, \"\");\n      return compStyle.getPropertyValue(CSSStyleProp);\n    }\n    return \"\";\n  },\n\n  // the string str is a whitespace separated list of tokens\n  // test if str contains a particular token, e.g. \"slide\"\n  has_token: function (str, token) {\n    if (str)\n    {\n      // define pattern as regular expression\n      var pattern = /\\w+/g;\n\n      // check for matches\n      // place result in array\n      var result = str.match(pattern);\n\n      // now check if desired token is present\n      for (var i = 0; i < result.length; i++)\n      {\n        if (result[i] == token)\n          return true;\n      }\n    }\n\n    return false;\n  },\n\n  get_class_list: function (element) {\n    if (typeof element.className != 'undefined')\n      return element.className;\n\n    return element.getAttribute(\"class\");\n  },\n\n  has_class: function (element, name) {\n    if (element.nodeType != 1)\n      return false;\n\n    var regexp = new RegExp(\"(^| )\" + name + \"\\W*\");\n\n    if (typeof element.className != 'undefined')\n      return regexp.test(element.className);\n\n    return regexp.test(element.getAttribute(\"class\"));\n  },\n\n  remove_class: function (element, name) {\n    var regexp = new RegExp(\"(^| )\" + name + \"\\W*\");\n    var clsval = \"\";\n\n    if (typeof element.className != 'undefined')\n    {\n      clsval = element.className;\n\n      if (clsval)\n      {\n        clsval = clsval.replace(regexp, \"\");\n        element.className = clsval;\n      }\n    }\n    else\n    {\n      clsval = element.getAttribute(\"class\");\n\n      if (clsval)\n      {\n        clsval = clsval.replace(regexp, \"\");\n        element.setAttribute(\"class\", clsval);\n      }\n    }\n  },\n\n  add_class: function (element, name) {\n    if (!this.has_class(element, name))\n    {\n      if (typeof element.className != 'undefined')\n        element.className += \" \" + name;\n      else\n      {\n        var clsval = element.getAttribute(\"class\");\n        clsval = clsval ? clsval + \" \" + name : name;\n        element.setAttribute(\"class\", clsval);\n      }\n    }\n  },\n\n  // HTML elements that can be used with class=\"incremental\"\n  // note that you can also put the class on containers like\n  // up, ol, dl, and div to make their contents appear\n  // incrementally. Upper case is used since this is what\n  // browsers report for HTML node names (text/html).\n  incremental_elements: null,\n  okay_for_incremental: function (name) {\n    if (!this.incremental_elements)\n    {\n      var inclist = new Array();\n      inclist[\"p\"] = true;\n      inclist[\"pre\"] = true;\n      inclist[\"li\"] = true;\n      inclist[\"blockquote\"] = true;\n      inclist[\"dt\"] = true;\n      inclist[\"dd\"] = true;\n      inclist[\"h2\"] = true;\n      inclist[\"h3\"] = true;\n      inclist[\"h4\"] = true;\n      inclist[\"h5\"] = true;\n      inclist[\"h6\"] = true;\n      inclist[\"span\"] = true;\n      inclist[\"address\"] = true;\n      inclist[\"table\"] = true;\n      inclist[\"tr\"] = true;\n      inclist[\"th\"] = true;\n      inclist[\"td\"] = true;\n      inclist[\"img\"] = true;\n      inclist[\"object\"] = true;\n      this.incremental_elements = inclist;\n    }\n    return this.incremental_elements[name.toLowerCase()];\n  },\n\n  next_incremental_item: function (node) {\n    var br = this.is_xhtml ? \"br\" : \"BR\";\n    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n\n    for (;;)\n    {\n      node = w3c_slidy.next_node(slide, node);\n\n      if (node == null || node.parentNode == null)\n        break;\n\n      if (node.nodeType == 1)  // ELEMENT\n      {\n        if (node.nodeName == br)\n          continue;\n\n        if (w3c_slidy.has_class(node, \"incremental\")\n             && w3c_slidy.okay_for_incremental(node.nodeName))\n          return node;\n\n        if (w3c_slidy.has_class(node.parentNode, \"incremental\")\n             && !w3c_slidy.has_class(node, \"non-incremental\"))\n          return node;\n      }\n    }\n\n    return node;\n  },\n\n  previous_incremental_item: function (node) {\n    var br = this.is_xhtml ? \"br\" : \"BR\";\n    var slide = w3c_slidy.slides[w3c_slidy.slide_number];\n\n    for (;;)\n    {\n      node = w3c_slidy.previous_node(slide, node);\n\n      if (node == null || node.parentNode == null)\n        break;\n\n      if (node.nodeType == 1)\n      {\n        if (node.nodeName == br)\n          continue;\n\n        if (w3c_slidy.has_class(node, \"incremental\")\n             && w3c_slidy.okay_for_incremental(node.nodeName))\n          return node;\n\n        if (w3c_slidy.has_class(node.parentNode, \"incremental\")\n             && !w3c_slidy.has_class(node, \"non-incremental\"))\n          return node;\n      }\n    }\n\n    return node;\n  },\n\n  // set visibility for all elements on current slide with\n  // a parent element with attribute class=\"incremental\"\n  set_visibility_all_incremental: function (value) {\n    var node = this.next_incremental_item(null);\n\n    if (value == \"hidden\")\n    {\n      while (node)\n      {\n        w3c_slidy.add_class(node, \"invisible\");\n        node = w3c_slidy.next_incremental_item(node);\n      }\n    }\n    else // value == \"visible\"\n    {\n      while (node)\n      {\n        w3c_slidy.remove_class(node, \"invisible\");\n        node = w3c_slidy.next_incremental_item(node);\n      }\n    }\n  },\n\n  // reveal the next hidden item on the slide\n  // node is null or the node that was last revealed\n  reveal_next_item: function (node) {\n    node = w3c_slidy.next_incremental_item(node);\n\n    if (node && node.nodeType == 1)  // an element\n      w3c_slidy.remove_class(node, \"invisible\");\n\n    return node;\n  },\n\n  // exact inverse of revealNextItem(node)\n  hide_previous_item: function (node) {\n    if (node && node.nodeType == 1)  // an element\n      w3c_slidy.add_class(node, \"invisible\");\n\n    return this.previous_incremental_item(node);\n  },\n\n  // left to right traversal of root's content\n  next_node: function (root, node) {\n    if (node == null)\n      return root.firstChild;\n\n    if (node.firstChild)\n      return node.firstChild;\n\n    if (node.nextSibling)\n      return node.nextSibling;\n\n    for (;;)\n    {\n      node = node.parentNode;\n\n      if (!node || node == root)\n        break;\n\n      if (node && node.nextSibling)\n        return node.nextSibling;\n    }\n\n    return null;\n  },\n\n  // right to left traversal of root's content\n  previous_node: function (root, node) {\n    if (node == null)\n    {\n      node = root.lastChild;\n\n      if (node)\n      {\n        while (node.lastChild)\n          node = node.lastChild;\n      }\n\n      return node;\n    }\n\n    if (node.previousSibling)\n    {\n      node = node.previousSibling;\n\n      while (node.lastChild)\n        node = node.lastChild;\n\n      return node;\n    }\n\n    if (node.parentNode != root)\n      return node.parentNode;\n\n    return null;\n  },\n\n  previous_sibling_element: function (el) {\n    el = el.previousSibling;\n\n    while (el && el.nodeType != 1)\n      el = el.previousSibling;\n\n    return el;\n  },\n\n  next_sibling_element: function (el) {\n    el = el.nextSibling;\n\n    while (el && el.nodeType != 1)\n      el = el.nextSibling;\n\n    return el;\n  },\n\n  first_child_element: function (el) {\n    var node;\n\n    for (node = el.firstChild; node; node = node.nextSibling)\n    {\n      if (node.nodeType == 1)\n        break;\n    }\n\n    return node;\n  },\n\n  first_tag: function (element, tag) {\n    var node;\n\n    if (!this.is_xhtml)\n      tag = tag.toUpperCase();\n\n    for (node = element.firstChild; node; node = node.nextSibling)\n    {\n      if (node.nodeType == 1 && node.nodeName == tag)\n        break;\n    }\n\n    return node;\n  },\n\n  hide_selection: function () {\n    if (window.getSelection) // Firefox, Chromium, Safari, Opera\n    {\n      var selection = window.getSelection();\n\n      if (selection.rangeCount > 0)\n      {\n        var range = selection.getRangeAt(0);\n        range.collapse (false);\n      }\n    }\n    else // Internet Explorer\n    {\n      var textRange = document.selection.createRange ();\n      textRange.collapse (false);\n    }\n  },\n\n  get_selected_text: function () {\n    try\n    {\n      if (window.getSelection)\n        return window.getSelection().toString();\n\n      if (document.getSelection)\n        return document.getSelection().toString();\n\n      if (document.selection)\n        return document.selection.createRange().text;\n    }\n    catch (e)\n    {\n    }\n\n    return \"\";\n  },\n\n  // make note of length of selected text\n  // as this evaluates to zero in click event\n  mouse_button_up: function (e) {\n    w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;\n  },\n\n  mouse_button_down: function (e) {\n    w3c_slidy.selected_text_len = w3c_slidy.get_selected_text().length;\n    w3c_slidy.mouse_x = e.clientX;\n    w3c_slidy.mouse_y = e.clientY;\n  },\n\n  // right mouse button click is reserved for context menus\n  // it is more reliable to detect rightclick than leftclick\n  mouse_button_click: function (e) {\n    if (!e)\n      var e = window.event;\n\n    if (Math.abs(e.clientX -w3c_slidy.mouse_x) +\n        Math.abs(e.clientY -w3c_slidy.mouse_y) > 10)\n      return true;\n\n    if (w3c_slidy.selected_text_len > 0)\n      return true;\n\n    var rightclick = false;\n    var leftclick = false;\n    var middleclick = false;\n    var target;\n\n    if (!e)\n      var e = window.event;\n\n    if (e.target)\n      target = e.target;\n    else if (e.srcElement)\n      target = e.srcElement;\n\n    // work around Safari bug\n    if (target.nodeType == 3)\n      target = target.parentNode;\n\n    if (e.which) // all browsers except IE\n    {\n      leftclick = (e.which == 1);\n      middleclick = (e.which == 2);\n      rightclick = (e.which == 3);\n    }\n    else if (e.button)\n    {\n      // Konqueror gives 1 for left, 4 for middle\n      // IE6 gives 0 for left and not 1 as I expected\n\n      if (e.button == 4)\n        middleclick = true;\n\n      // all browsers agree on 2 for right button\n      rightclick = (e.button == 2);\n    }\n    else\n      leftclick = true;\n\n    if (w3c_slidy.selected_text_len > 0)\n    {\n      w3c_slidy.stop_propagation(e);\n      e.cancel = true;\n      e.returnValue = false;\n      return false;\n    }\n\n    // dismiss table of contents\n    w3c_slidy.hide_table_of_contents(false);\n\n    // check if target is something that probably want's clicks\n    // e.g. a, embed, object, input, textarea, select, option\n    var tag = target.nodeName.toLowerCase();\n\n    if (w3c_slidy.mouse_click_enabled && leftclick &&\n        !w3c_slidy.special_element(target) &&\n        !target.onclick)\n    {\n      w3c_slidy.next_slide(true);\n      w3c_slidy.stop_propagation(e);\n      e.cancel = true;\n      e.returnValue = false;\n      return false;\n    }\n\n    return true;\n  },\n\n  special_element: function (element) {\n    if (this.has_class(element, \"non-interactive\"))\n      return false;\n\n    var tag = element.nodeName.toLowerCase();\n\n    return element.onkeydown ||\n      element.onclick ||\n      tag == \"a\" ||\n      tag == \"embed\" ||\n      tag == \"object\" ||\n      tag == \"video\" ||\n      tag == \"audio\" ||\n      tag == \"svg\" ||\n      tag == \"canvas\" ||\n      tag == \"input\" ||\n      tag == \"textarea\" ||\n      tag == \"select\" ||\n      tag == \"option\";\n  },\n\n  slidy_chrome: function (el) {\n    while (el)\n    {\n      if (el == w3c_slidy.toc ||\n          el == w3c_slidy.toolbar ||\n          w3c_slidy.has_class(el, \"outline\"))\n        return true;\n\n      el = el.parentNode;\n    }\n\n    return false;\n  },\n\n  get_key: function (e)\n  {\n    var key;\n\n    // kludge around NS/IE differences \n    if (typeof window.event != \"undefined\")\n      key = window.event.keyCode;\n    else if (e.which)\n      key = e.which;\n\n    return key;\n  },\n\n  get_target: function (e) {\n    var target;\n\n    if (!e)\n      e = window.event;\n\n    if (e.target)\n      target = e.target;\n    else if (e.srcElement)\n      target = e.srcElement;\n\n    if (target.nodeType != 1)\n      target = target.parentNode;\n\n    return target;\n  },\n\n  // does display property provide correct defaults?\n  is_block: function (elem) {\n    var tag = elem.nodeName.toLowerCase();\n\n    return tag == \"ol\" || tag == \"ul\" || tag == \"p\" ||\n           tag == \"li\" || tag == \"table\" || tag == \"pre\" ||\n           tag == \"h1\" || tag == \"h2\" || tag == \"h3\" ||\n           tag == \"h4\" || tag == \"h5\" || tag == \"h6\" ||\n           tag == \"blockquote\" || tag == \"address\"; \n  },\n\n  add_listener: function (element, event, handler) {\n    if (window.addEventListener)\n      element.addEventListener(event, handler, false);\n    else\n      element.attachEvent(\"on\"+event, handler);\n  },\n\n  // used to prevent event propagation from field controls\n  stop_propagation: function (event) {\n    event = event ? event : window.event;\n    event.cancelBubble = true;  // for IE\n\n    if (event.stopPropagation)\n      event.stopPropagation();\n\n    return true;\n  },\n\n  cancel: function (event) {\n    if (event)\n    {\n       event.cancel = true;\n       event.returnValue = false;\n\n      if (event.preventDefault)\n        event.preventDefault();\n    }\n\n    w3c_slidy.key_wanted = false;\n    return false;\n  },\n\n// for each language define an associative array\n// and also the help text which is longer\n\n  strings_es: {\n    \"slide\":\"p\195\161g.\",\n    \"help?\":\"Ayuda\",\n    \"contents?\":\"\195\141ndice\",\n    \"table of contents\":\"tabla de contenidos\",\n    \"Table of Contents\":\"Tabla de Contenidos\",\n    \"restart presentation\":\"Reiniciar presentaci\195\179n\",\n    \"restart?\":\"Inicio\"\n  },\n  help_es:\n    \"Utilice el rat\195\179n, barra espaciadora, teclas Izda/Dcha, \" +\n    \"o Re p\195\161g y Av p\195\161g. Use S y B para cambiar el tama\195\177o de fuente.\",\n\n  strings_ca: {\n    \"slide\":\"p\195\160g..\",\n    \"help?\":\"Ajuda\",\n    \"contents?\":\"\195\141ndex\",\n    \"table of contents\":\"taula de continguts\",\n    \"Table of Contents\":\"Taula de Continguts\",\n    \"restart presentation\":\"Reiniciar presentaci\195\179\",\n    \"restart?\":\"Inici\"\n  },\n  help_ca:\n    \"Utilitzi el ratol\195\173, barra espaiadora, tecles Esq./Dta. \" +\n    \"o Re p\195\160g y Av p\195\160g. Usi S i B per canviar grand\195\160ria de font.\",\n\n  strings_cs: {\n    \"slide\":\"sn\195\173mek\",\n    \"help?\":\"n\195\161pov\196\155da\",\n    \"contents?\":\"obsah\",\n    \"table of contents\":\"obsah prezentace\",\n    \"Table of Contents\":\"Obsah prezentace\",\n    \"restart presentation\":\"znovu spustit prezentaci\",\n    \"restart?\":\"restart\"\n  },\n  help_cs:\n    \"Prezentaci m\197\175\197\190ete proch\195\161zet pomoc\195\173 kliknut\195\173 my\197\161i, mezern\195\173ku, \" +\n    \"\197\161ipek vlevo a vpravo nebo kl\195\161ves PageUp a PageDown. P\195\173smo se \" +\n    \"d\195\161 zv\196\155t\197\161it a zmen\197\161it pomoc\195\173 kl\195\161ves B a S.\",\n\n  strings_nl: {\n    \"slide\":\"pagina\",\n    \"help?\":\"Help?\",\n    \"contents?\":\"Inhoud?\",\n    \"table of contents\":\"inhoudsopgave\",\n    \"Table of Contents\":\"Inhoudsopgave\",\n    \"restart presentation\":\"herstart presentatie\",\n    \"restart?\":\"Herstart?\"\n  },\n  help_nl:\n     \"Navigeer d.m.v. het muis, spatiebar, Links/Rechts toetsen, \" +\n     \"of PgUp en PgDn. Gebruik S en B om de karaktergrootte te veranderen.\",\n\n  strings_de: {\n    \"slide\":\"Seite\",\n    \"help?\":\"Hilfe\",\n    \"contents?\":\"\195\156bersicht\",\n    \"table of contents\":\"Inhaltsverzeichnis\",\n    \"Table of Contents\":\"Inhaltsverzeichnis\",\n    \"restart presentation\":\"Pr\195\164sentation neu starten\",\n    \"restart?\":\"Neustart\"\n  },\n  help_de:\n    \"Benutzen Sie die Maus, Leerschlag, die Cursortasten links/rechts oder \" +\n    \"Page up/Page Down zum Wechseln der Seiten und S und B f\195\188r die Schriftgr\195\182sse.\",\n\n  strings_pl: {\n    \"slide\":\"slajd\",\n    \"help?\":\"pomoc?\",\n    \"contents?\":\"spis tre\197\155ci?\",\n    \"table of contents\":\"spis tre\197\155ci\",\n    \"Table of Contents\":\"Spis Tre\197\155ci\",\n    \"restart presentation\":\"Restartuj prezentacj\196\153\",\n    \"restart?\":\"restart?\"\n  },\n  help_pl:\n    \"Zmieniaj slajdy klikaj\196\133c mysz\196\133, naciskaj\196\133c spacj\196\153, strza\197\130ki lewo/prawo\" +\n    \"lub PgUp / PgDn. U\197\188yj klawiszy S i B, aby zmieni\196\135 rozmiar czczionki.\",\n\n  strings_fr: {\n    \"slide\":\"page\",\n    \"help?\":\"Aide\",\n    \"contents?\":\"Index\",\n    \"table of contents\":\"table des mati\195\168res\",\n    \"Table of Contents\":\"Table des mati\195\168res\",\n    \"restart presentation\":\"Recommencer l'expos\195\169\",\n    \"restart?\":\"D\195\169but\"\n  },\n  help_fr:\n    \"Naviguez avec la souris, la barre d'espace, les fl\195\168ches \" +\n    \"gauche/droite ou les touches Pg Up, Pg Dn. Utilisez \" +\n    \"les touches S et B pour modifier la taille de la police.\",\n\n  strings_hu: {\n    \"slide\":\"oldal\",\n    \"help?\":\"seg\195\173ts\195\169g\",\n    \"contents?\":\"tartalom\",\n    \"table of contents\":\"tartalomjegyz\195\169k\",\n    \"Table of Contents\":\"Tartalomjegyz\195\169k\",\n    \"restart presentation\":\"bemutat\195\179 \195\186jraind\195\173t\195\161sa\",\n    \"restart?\":\"\195\186jraind\195\173t\195\161s\"\n  },\n  help_hu:\n    \"Az oldalak k\195\182zti l\195\169pked\195\169shez kattintson az eg\195\169rrel, vagy \" +\n    \"haszn\195\161lja a sz\195\179k\195\182z, a bal, vagy a jobb ny\195\173l, illetve a Page Down, \" +\n    \"Page Up billenty\197\177ket. Az S \195\169s a B billenty\197\177kkel v\195\161ltoztathatja \" +\n    \"a sz\195\182veg m\195\169ret\195\169t.\",\n\n  strings_it: {\n    \"slide\":\"pag.\",\n    \"help?\":\"Aiuto\",\n    \"contents?\":\"Indice\",\n    \"table of contents\":\"indice\",\n    \"Table of Contents\":\"Indice\",\n    \"restart presentation\":\"Ricominciare la presentazione\",\n    \"restart?\":\"Inizio\"\n  },\n  help_it:\n    \"Navigare con mouse, barra spazio, frecce sinistra/destra o \" +\n    \"PgUp e PgDn. Usare S e B per cambiare la dimensione dei caratteri.\",\n\n  strings_el: {\n    \"slide\":\"\207\131\206\181\206\187\206\175\206\180\206\177\",\n    \"help?\":\"\206\178\206\191\206\174\206\184\206\181\206\185\206\177;\",\n    \"contents?\":\"\207\128\206\181\207\129\206\185\206\181\207\135\207\140\206\188\206\181\206\189\206\177;\",\n    \"table of contents\":\"\207\128\206\175\206\189\206\177\206\186\206\177\207\130 \207\128\206\181\207\129\206\185\206\181\207\135\206\191\206\188\206\173\206\189\207\137\206\189\",\n    \"Table of Contents\":\"\206\160\206\175\206\189\206\177\206\186\206\177\207\130 \206\160\206\181\207\129\206\185\206\181\207\135\206\191\206\188\206\173\206\189\207\137\206\189\",\n    \"restart presentation\":\"\206\181\207\128\206\177\206\189\206\181\206\186\206\186\206\175\206\189\206\183\207\131\206\183 \207\128\206\177\207\129\206\191\207\133\207\131\206\175\206\177\207\131\206\183\207\130\",\n    \"restart?\":\"\206\181\207\128\206\177\206\189\206\181\206\186\206\186\206\175\206\189\206\183\207\131\206\183;\"\n  },\n  help_el:\n    \"\206\160\206\187\206\191\206\183\206\179\206\183\206\184\206\181\206\175\207\132\206\181 \206\188\206\181 \207\132\206\191 \206\186\206\187\206\175\206\186 \207\132\206\191\207\133 \207\128\206\191\206\189\207\132\206\185\206\186\206\185\206\191\207\141, \207\132\206\191 space, \207\132\206\177 \206\178\206\173\206\187\206\183 \206\177\207\129\206\185\207\131\207\132\206\181\207\129\206\172/\206\180\206\181\206\190\206\185\206\172, \" +\n    \"\206\174 Page Up \206\186\206\177\206\185 Page Down. \206\167\207\129\206\183\207\131\206\185\206\188\206\191\207\128\206\191\206\185\206\174\207\131\207\132\206\181 \207\132\206\177 \207\128\206\187\206\174\206\186\207\132\207\129\206\177 S \206\186\206\177\206\185 B \206\179\206\185\206\177 \206\189\206\177 \206\177\206\187\206\187\206\172\206\190\206\181\207\132\206\181 \" +\n    \"\207\132\206\191 \206\188\206\173\206\179\206\181\206\184\206\191\207\130 \207\132\206\183\207\130 \206\179\207\129\206\177\206\188\206\188\206\177\207\132\206\191\207\131\206\181\206\185\207\129\206\172\207\130.\",\n\n  strings_ja: {\n    \"slide\":\"\227\130\185\227\131\169\227\130\164\227\131\137\",\n    \"help?\":\"\227\131\152\227\131\171\227\131\151\",\n    \"contents?\":\"\231\155\174\230\172\161\",\n    \"table of contents\":\"\231\155\174\230\172\161\227\130\146\232\161\168\231\164\186\",\n    \"Table of Contents\":\"\231\155\174\230\172\161\",\n    \"restart presentation\":\"\230\156\128\229\136\157\227\129\139\227\130\137\229\134\141\231\148\159\",\n    \"restart?\":\"\230\156\128\229\136\157\227\129\139\227\130\137\"\n  },\n  help_ja:\n     \"\227\131\158\227\130\166\227\130\185\229\183\166\227\130\175\227\131\170\227\131\131\227\130\175 \227\131\187 \227\130\185\227\131\154\227\131\188\227\130\185 \227\131\187 \229\183\166\229\143\179\227\130\173\227\131\188 \" +\n     \"\227\129\190\227\129\159\227\129\175 Page Up \227\131\187 Page Down\227\129\167\230\147\141\228\189\156\239\188\140 S \227\131\187 B\227\129\167\227\131\149\227\130\169\227\131\179\227\131\136\227\130\181\227\130\164\227\130\186\229\164\137\230\155\180\",\n\n  strings_zh: {\n    \"slide\":\"\229\185\187\231\129\175\231\137\135\",\n    \"help?\":\"\229\184\174\229\138\169?\",\n    \"contents?\":\"\229\134\133\229\174\185?\",\n    \"table of contents\":\"\231\155\174\229\189\149\",\n    \"Table of Contents\":\"\231\155\174\229\189\149\",\n    \"restart presentation\":\"\233\135\141\230\150\176\229\144\175\229\138\168\229\177\149\231\164\186\",\n    \"restart?\":\"\233\135\141\230\150\176\229\144\175\229\138\168?\"\n  },\n  help_zh:\n    \"\231\148\168\233\188\160\230\160\135\231\130\185\229\135\187, \231\169\186\230\160\188\230\157\161, \229\183\166\229\143\179\231\174\173\229\164\180, Pg Up \229\146\140 Pg Dn \229\175\188\232\136\170. \" +\n    \"\231\148\168 S, B \230\148\185\229\143\152\229\173\151\228\189\147\229\164\167\229\176\143.\",\n\n  strings_ru: {\n    \"slide\":\"\209\129\208\187\208\176\208\185\208\180\",\n    \"help?\":\"\208\191\208\190\208\188\208\190\209\137\209\140?\",\n    \"contents?\":\"\209\129\208\190\208\180\208\181\209\128\208\182\208\176\208\189\208\184\208\181?\",\n    \"table of contents\":\"\208\190\208\179\208\187\208\176\208\178\208\187\208\181\208\189\208\184\208\181\",\n    \"Table of Contents\":\"\208\158\208\179\208\187\208\176\208\178\208\187\208\181\208\189\208\184\208\181\",\n    \"restart presentation\":\"\208\191\208\181\209\128\208\181\208\183\208\176\208\191\209\131\209\129\209\130\208\184\209\130\209\140 \208\191\209\128\208\181\208\183\208\181\208\189\209\130\208\176\209\134\208\184\209\142\",\n    \"restart?\":\"\208\191\208\181\209\128\208\181\208\183\208\176\208\191\209\131\209\129\208\186?\"\n  },\n  help_ru:\n    \"\208\159\208\181\209\128\208\181\208\188\208\181\209\137\208\176\208\185\209\130\208\181\209\129\209\140 \208\186\208\187\208\184\208\186\208\176\209\143 \208\188\209\139\209\136\208\186\208\190\208\185, \208\184\209\129\208\191\208\190\208\187\209\140\208\183\209\131\209\143 \208\186\208\187\208\176\208\178\208\184\209\136\209\131 \208\191\209\128\208\190\208\177\208\181\208\187, \209\129\209\130\209\128\208\181\208\187\208\186\208\184\" +\n    \"\208\178\208\187\208\181\208\178\208\190/\208\178\208\191\209\128\208\176\208\178\208\190 \208\184\208\187\208\184 Pg Up \208\184 Pg Dn. \208\154\208\187\208\176\208\178\208\184\209\136\208\184 S \208\184 B \208\188\208\181\208\189\209\143\209\142\209\130 \209\128\208\176\208\183\208\188\208\181\209\128 \209\136\209\128\208\184\209\132\209\130\208\176.\",\n\n  strings_sv: {\n    \"slide\":\"sida\",\n    \"help?\":\"hj\195\164lp\",\n    \"contents?\":\"inneh\195\165ll\",\n    \"table of contents\":\"inneh\195\165llsf\195\182rteckning\",\n    \"Table of Contents\":\"Inneh\195\165llsf\195\182rteckning\",\n    \"restart presentation\":\"visa presentationen fr\195\165n b\195\182rjan\",\n    \"restart?\":\"b\195\182rja om\"\n  },\n  help_sv:\n    \"Bl\195\164ddra med ett klick med v\195\164nstra musknappen, mellanslagstangenten, \" +\n    \"v\195\164nster- och h\195\182gerpiltangenterna eller tangenterna Pg Up, Pg Dn. \" +\n    \"Anv\195\164nd tangenterna S och B f\195\182r att \195\164ndra textens storlek.\",\n\n  strings: { },\n\n  localize: function (src) {\n    if (src == \"\")\n      return src;\n\n     // try full language code, e.g. en-US\n     var s, lookup = w3c_slidy.strings[w3c_slidy.lang];\n\n     if (lookup)\n     {\n       s = lookup[src];\n\n       if (s)\n        return s;\n     }\n\n     // strip country code suffix, e.g.\n     // try en if undefined for en-US\n     var lg = w3c_slidy.lang.split(\"-\");\n\n     if (lg.length > 1)\n     {\n       lookup = w3c_slidy.strings[lg[0]];\n\n       if (lookup)\n       {\n         s = lookup[src];\n\n         if (s)\n          return s;\n       }\n     }\n\n     // otherwise string as is\n     return src;\n  },\n\n  init_localization: function () {\n    var i18n = w3c_slidy;\n    var help_text = w3c_slidy.help_text;\n\n    // each such language array is declared in the localize array\n    // this is used as in  w3c_slidy.localize(\"foo\");\n    this.strings = {\n      \"es\":this.strings_es,\n      \"ca\":this.strings_ca,\n      \"cs\":this.strings_cs,\n      \"nl\":this.strings_nl,\n      \"de\":this.strings_de,\n      \"pl\":this.strings_pl,\n      \"fr\":this.strings_fr,\n      \"hu\":this.strings_hu,\n      \"it\":this.strings_it,\n      \"el\":this.strings_el,\n      \"jp\":this.strings_ja,\n      \"zh\":this.strings_zh,\n      \"ru\":this.strings_ru,\n      \"sv\":this.strings_sv\n    },\n\n    i18n.strings_es[help_text] = i18n.help_es;\n    i18n.strings_ca[help_text] = i18n.help_ca;\n    i18n.strings_cs[help_text] = i18n.help_cs;\n    i18n.strings_nl[help_text] = i18n.help_nl;\n    i18n.strings_de[help_text] = i18n.help_de;\n    i18n.strings_pl[help_text] = i18n.help_pl;\n    i18n.strings_fr[help_text] = i18n.help_fr;\n    i18n.strings_hu[help_text] = i18n.help_hu;\n    i18n.strings_it[help_text] = i18n.help_it;\n    i18n.strings_el[help_text] = i18n.help_el;\n    i18n.strings_ja[help_text] = i18n.help_ja;\n    i18n.strings_zh[help_text] = i18n.help_zh;\n    i18n.strings_ru[help_text] = i18n.help_ru;\n    i18n.strings_sv[help_text] = i18n.help_sv;\n\n    w3c_slidy.lang = document.body.parentNode.getAttribute(\"lang\");\n\n    if (!w3c_slidy.lang)\n      w3c_slidy.lang = document.body.parentNode.getAttribute(\"xml:lang\");\n\n    if (!w3c_slidy.lang)\n      w3c_slidy.lang = \"en\";\n  }\n};\n\n// hack for back button behavior\nif (w3c_slidy.ie6 || w3c_slidy.ie7)\n{\n  document.write(\"<iframe id='historyFrame' \" +\n  \"src='javascript:\\\"<html\"+\"></\"+\"html>\\\"' \" +\n  \"height='1' width='1' \" +\n  \"style='position:absolute;left:-800px'></iframe>\");\n}\n\n// attach event listeners for initialization\nw3c_slidy.set_up();\n\n// hide the slides as soon as body element is available\n// to reduce annoying screen mess before the onload event\nsetTimeout(w3c_slidy.hide_slides, 50);\n\n"),("slidy/styles/slidy.css","/* slidy.css\n\n   Copyright (c) 2005-2010 W3C (MIT, ERCIM, Keio), All Rights Reserved.\n   W3C liability, trademark, document use and software licensing\n   rules apply, see:\n\n   http://www.w3.org/Consortium/Legal/copyright-documents\n   http://www.w3.org/Consortium/Legal/copyright-software\n*/\nbody\n{\n  margin: 0 0 0 0;\n  padding: 0 0 0 0;\n  width: 100%;\n  height: 100%;\n  color: black;\n  background-color: white;\n  font-family: \"Gill Sans MT\", \"Gill Sans\", GillSans, sans-serif;\n  font-size: 14pt;\n}\n\ndiv.toolbar {\n  position: fixed; z-index: 200;\n  top: auto; bottom: 0; left: 0; right: 0;\n  height: 1.2em; text-align: right;\n  padding-left: 1em;\n  padding-right: 1em; \n  font-size: 60%;\n  color: red;\n  background-color: rgb(240,240,240);\n  border-top: solid 1px rgb(180,180,180);\n}\n\ndiv.toolbar span.copyright {\n  color: black;\n  margin-left: 0.5em;\n}\n\ndiv.initial_prompt {\n  position: absolute;\n  z-index: 1000;\n  bottom: 1.2em;\n  width: 100%;\n  background-color: rgb(200,200,200);\n  opacity: 0.35;\n  background-color: rgb(200,200,200, 0.35);\n  cursor: pointer;\n}\n\ndiv.initial_prompt p.help {\n  text-align: center;\n}\n\ndiv.initial_prompt p.close {\n  text-align: right;\n  font-style: italic;\n}\n\ndiv.slidy_toc {\n  position: absolute;\n  z-index: 300;\n  width: 60%;\n  max-width: 30em;\n  height: 30em;\n  overflow: auto;\n  top: auto;\n  right: auto;\n  left: 4em;\n  bottom: 4em;\n  padding: 1em;\n  background: rgb(240,240,240);\n  border-style: solid;\n  border-width: 2px;\n  font-size: 60%;\n}\n\ndiv.slidy_toc .toc_heading {\n  text-align: center;\n  width: 100%;\n  margin: 0;\n  margin-bottom: 1em;\n  border-bottom-style: solid;\n  border-bottom-color: rgb(180,180,180);\n  border-bottom-width: 1px;\n}\n\ndiv.slide {\n  z-index: 20;\n  margin: 0 0 0 0;\n  padding-top: 0;\n  padding-bottom: 0;\n  padding-left: 20px;\n  padding-right: 20px;\n  border-width: 0;\n  clear: both;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  line-height: 120%;\n  background-color: transparent;\n}\n\ndiv.background {\n  display: none;\n}\n\ndiv.handout {\n  margin-left: 20px;\n  margin-right: 20px;\n}\n\ndiv.slide.titlepage {\n  text-align: center;\n}\n\ndiv.slide.titlepage h1 {\n  padding-top: 10%;\n  margin-right: 0;\n}\n\ndiv.slide h1 {\n  padding-left: 0;\n  padding-right: 20pt;\n  padding-top: 4pt;\n  padding-bottom: 4pt;\n  margin-top: 0;\n  margin-left: 0;\n  margin-right: 60pt;\n  margin-bottom: 0.5em;\n  display: block; \n  font-size: 160%;\n  line-height: 1.2em;\n  background: transparent;\n}\n\ndiv.toc {\n  position: absolute;\n  top: auto;\n  bottom: 4em;\n  left: 4em;\n  right: auto;\n  width: 60%;\n  max-width: 30em;\n  height: 30em;\n  border: solid thin black;\n  padding: 1em;\n  background: rgb(240,240,240);\n  color: black;\n  z-index: 300;\n  overflow: auto;\n  display: block;\n  visibility: visible;\n}\n\ndiv.toc-heading {\n  width: 100%;\n  border-bottom: solid 1px rgb(180,180,180);\n  margin-bottom: 1em;\n  text-align: center;\n}\n\nimg {\n  image-rendering: optimize-quality;\n}\n\npre {\n font-size: 80%;\n font-weight: bold;\n line-height: 120%;\n padding-top: 0.2em;\n padding-bottom: 0.2em;\n padding-left: 1em;\n padding-right: 1em;\n border-style: solid;\n border-left-width: 1em;\n border-top-width: thin;\n border-right-width: thin;\n border-bottom-width: thin;\n border-color: #95ABD0;\n color: #00428C;\n background-color: #E4E5E7;\n}\n\nli pre { margin-left: 0; }\n\nblockquote { font-style: italic }\n\nimg { background-color: transparent }\n\np.copyright { font-size: smaller }\n\n.center { text-align: center }\n.footnote { font-size: smaller; margin-left: 2em; }\n\na img { border-width: 0; border-style: none }\n\na:visited { color: navy }\na:link { color: navy }\na:hover { color: red; text-decoration: underline }\na:active { color: red; text-decoration: underline }\n\na {text-decoration: none}\n.navbar a:link {color: white}\n.navbar a:visited {color: yellow}\n.navbar a:active {color: red}\n.navbar a:hover {color: red}\n\nul { list-style-type: square; }\nul ul { list-style-type: disc; }\nul ul ul { list-style-type: circle; }\nul ul ul ul { list-style-type: disc; }\nli { margin-left: 0.5em; margin-top: 0.5em; }\nli li { font-size: 85%; font-style: italic }\nli li li { font-size: 85%; font-style: normal }\n\ndiv dt\n{\n  margin-left: 0;\n  margin-top: 1em;\n  margin-bottom: 0.5em;\n  font-weight: bold;\n}\ndiv dd\n{\n  margin-left: 2em;\n  margin-bottom: 0.5em;\n}\n\n\np,pre,ul,ol,blockquote,h2,h3,h4,h5,h6,dl,table {\n  margin-left: 1em;\n  margin-right: 1em;\n}\n\np.subhead { font-weight: bold; margin-top: 2em; }\n\n.smaller { font-size: smaller }\n.bigger { font-size: 130% }\n\ntd,th { padding: 0.2em }\n\nul {\n  margin: 0.5em 1.5em 0.5em 1.5em;\n  padding: 0;\n}\n\nol {\n  margin: 0.5em 1.5em 0.5em 1.5em;\n  padding: 0;\n}\n\nul { list-style-type: square; }\nul ul { list-style-type: disc; }\nul ul ul { list-style-type: circle; }\nul ul ul ul { list-style-type: disc; }\n\nul li { \n  list-style: square;\n  margin: 0.1em 0em 0.6em 0;\n  padding: 0 0 0 0;\n  line-height: 140%;\n}\n\nol li { \n  margin: 0.1em 0em 0.6em 1.5em;\n  padding: 0 0 0 0px;\n  line-height: 140%;\n  list-style-type: decimal;\n}\n\nli ul li { \n  font-size: 85%; \n  font-style: italic;\n  list-style-type: disc;\n  background: transparent;\n  padding: 0 0 0 0;\n}\nli li ul li { \n  font-size: 85%; \n  font-style: normal;\n  list-style-type: circle;\n  background: transparent;\n  padding: 0 0 0 0;\n}\nli li li ul li {\n  list-style-type: disc;\n  background: transparent;\n  padding: 0 0 0 0;\n}\n\nli ol li {\n  list-style-type: decimal;\n}\n\n\nli li ol li {\n  list-style-type: decimal;\n}\n\n/*\n setting class=\"outline on ol or ul makes it behave as an\n ouline list where blocklevel content in li elements is\n hidden by default and can be expanded or collapsed with\n mouse click. Set class=\"expand\" on li to override default\n*/\n\nol.outline li:hover { cursor: pointer }\nol.outline li.nofold:hover { cursor: default }\n\nul.outline li:hover { cursor: pointer }\nul.outline li.nofold:hover { cursor: default }\n\nol.outline { list-style:decimal; }\nol.outline ol { list-style-type:lower-alpha }\n\nol.outline li.nofold {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;\n}\nol.outline li.unfolded {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;\n}\nol.outline li.folded {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;\n}\nol.outline li.unfolded:hover {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;\n}\nol.outline li.folded:hover {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;\n}\n\nul.outline li.nofold {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/nofold-dim.gif) no-repeat 0px 0.5em;\n}\nul.outline li.unfolded {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/fold-dim.gif) no-repeat 0px 0.5em;\n}\nul.outline li.folded {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/unfold-dim.gif) no-repeat 0px 0.5em;\n}\nul.outline li.unfolded:hover {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/fold.gif) no-repeat 0px 0.5em;\n}\nul.outline li.folded:hover {\n  padding: 0 0 0 20px;\n  background: transparent url(../graphics/unfold.gif) no-repeat 0px 0.5em;\n}\n\n/* for slides with class \"title\" in table of contents */\na.titleslide { font-weight: bold; font-style: italic }\n\n/*\n hide images for work around for save as bug\n where browsers fail to save images used by CSS\n*/\nimg.hidden { display: none; visibility: hidden }\ndiv.initial_prompt { display: none; visibility: hidden }\n\n  div.slide {\n     visibility: visible;\n     position: inherit;\n  }\n  div.handout {\n     border-top-style: solid;\n     border-top-width: thin;\n     border-top-color: black;\n  }\n\n@media screen {\n  .hidden { display: none; visibility: visible }\n\n  div.slide.hidden { display: block; visibility: visible }\n  div.handout.hidden { display: block; visibility: visible }\n  div.background { display: none; visibility: hidden }\n  body.single_slide div.initial_prompt { display: block; visibility: visible }\n  body.single_slide div.background { display: block; visibility: visible }\n  body.single_slide div.background.hidden { display: none; visibility: hidden }\n  body.single_slide .invisible { visibility: hidden }\n  body.single_slide .hidden { display: none; visibility: hidden }\n  body.single_slide div.slide { position: absolute }\n  body.single_slide div.handout { display: none; visibility: hidden }\n}\n\n@media print {\n  .hidden { display: block; visibility: visible }\n\n  div.slide pre { font-size: 60%; padding-left: 0.5em; }\n  div.toolbar { display: none; visibility: hidden; }\n  div.slidy_toc { display: none; visibility: hidden; }\n  div.background { display: none; visibility: hidden; }\n  div.slide { page-break-before: always }\n  /* :first-child isn't reliable for print media */\n  div.slide.first-slide { page-break-before: avoid }\n}\n\n"),("templates/default.asciidoc","$if(titleblock)$\n$title$\n$for(author)$\n:author: $author$\n$endfor$\n$if(date)$\n:date: $date$\n$endif$\n$if(toc)$\n:toc:\n$endif$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.beamer","\\documentclass[$if(fontsize)$$fontsize$,$endif$$if(handout)$handout,$endif$$if(beamer)$ignorenonframetext,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}\n$if(theme)$\n\\usetheme{$theme$}\n$endif$\n$if(colortheme)$\n\\usecolortheme{$colortheme$}\n$endif$\n$if(fonttheme)$\n\\usefonttheme{$fonttheme$}\n$endif$\n\\usepackage{amssymb,amsmath}\n\\usepackage{ifxetex,ifluatex}\n\\usepackage{fixltx2e} % provides \\textsubscript\n\\ifxetex\n  \\usepackage{fontspec,xltxtra,xunicode}\n  \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n\\else\n  \\ifluatex\n    \\usepackage{fontspec}\n    \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n  \\else\n    \\usepackage[utf8]{inputenc}\n  \\fi\n\\fi\n$if(natbib)$\n\\usepackage{natbib}\n\\bibliographystyle{plainnat}\n$endif$\n$if(biblatex)$\n\\usepackage{biblatex}\n$if(biblio-files)$\n\\bibliography{$biblio-files$}\n$endif$\n$endif$\n$if(listings)$\n\\usepackage{listings}\n$endif$\n$if(lhs)$\n\\lstnewenvironment{code}{\\lstset{language=Haskell,basicstyle=\\small\\ttfamily}}{}\n$endif$\n$if(highlighting-macros)$\n$highlighting-macros$\n$endif$\n$if(verbatim-in-note)$\n\\usepackage{fancyvrb}\n$endif$\n$if(tables)$\n\\usepackage{longtable}\n% These lines are needed to make table captions work with longtable:\n\\makeatletter\n\\def\\fnum@table{\\tablename~\\thetable}\n\\makeatother\n$endif$\n$if(url)$\n\\usepackage{url}\n$endif$\n$if(graphics)$\n\\usepackage{graphicx}\n% Redefine \\includegraphics so that, unless explicit options are\n% given, the image width will not exceed the width of the page.\n% Images get their normal width if they fit onto the page, but\n% are scaled down if they would overflow the margins.\n\\makeatletter\n\\def\\ScaleIfNeeded{%\n  \\ifdim\\Gin@nat@width>\\linewidth\n    \\linewidth\n  \\else\n    \\Gin@nat@width\n  \\fi\n}\n\\makeatother\n\\let\\Oldincludegraphics\\includegraphics\n\\renewcommand{\\includegraphics}[2][]{\\Oldincludegraphics[width=\\ScaleIfNeeded]{#2}}\n$endif$\n\n% Comment these out if you don't want a slide with just the\n% part/section/subsection/subsubsection title:\n\\AtBeginPart{\n  \\let\\insertpartnumber\\relax\n  \\let\\partname\\relax\n  \\frame{\\partpage}\n}\n\\AtBeginSection{\n  \\let\\insertsectionnumber\\relax\n  \\let\\sectionname\\relax\n  \\frame{\\sectionpage}\n}\n\\AtBeginSubsection{\n  \\let\\insertsubsectionnumber\\relax\n  \\let\\subsectionname\\relax\n  \\frame{\\subsectionpage}\n}\n\n$if(strikeout)$\n\\usepackage[normalem]{ulem}\n% avoid problems with \\sout in headers with hyperref:\n\\pdfstringdefDisableCommands{\\renewcommand{\\sout}{}}\n$endif$\n\\setlength{\\parindent}{0pt}\n\\setlength{\\parskip}{6pt plus 2pt minus 1pt}\n\\setlength{\\emergencystretch}{3em}  % prevent overfull lines\n$if(numbersections)$\n$else$\n\\setcounter{secnumdepth}{0}\n$endif$\n$if(verbatim-in-note)$\n\\VerbatimFootnotes % allows verbatim text in footnotes\n$endif$\n$if(lang)$\n\\usepackage[$lang$]{babel}\n$endif$\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(title)$\n\\title{$title$}\n$endif$\n$if(subtitle)$\n\\subtitle{$subtitle$}\n$endif$\n$if(author)$\n\\author{$for(author)$$author$$sep$ \\and $endfor$}\n$endif$\n$if(date)$\n\\date{$date$}\n$endif$\n\n\\begin{document}\n$if(title)$\n\\frame{\\titlepage}\n$endif$\n\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n\\begin{frame}\n\\tableofcontents[hideallsubsections]\n\\end{frame}\n\n$endif$\n$body$\n\n$if(natbib)$\n$if(biblio-files)$\n$if(biblio-title)$\n$if(book-class)$\n\\renewcommand\\bibname{$biblio-title$}\n$else$\n\\renewcommand\\refname{$biblio-title$}\n$endif$\n$endif$\n\\bibliography{$biblio-files$}\n\n$endif$\n$endif$\n$if(biblatex)$\n\\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$\n\n$endif$\n$for(include-after)$\n$include-after$\n\n$endfor$\n\\end{document}\n"),("templates/default.context","\\startmode[*mkii]\n  \\enableregime[utf-8]  \n  \\setupcolors[state=start]\n\\stopmode\n$if(mainlang)$\n\\mainlanguage[$mainlang$]\n$endif$\n\n% Enable hyperlinks\n\\setupinteraction[state=start, color=middleblue]\n\n\\setuppapersize [$if(papersize)$$papersize$$else$letter$endif$][$if(papersize)$$papersize$$else$letter$endif$]\n\\setuplayout    [width=middle,  backspace=1.5in, cutspace=1.5in,\n                 height=middle, topspace=0.75in, bottomspace=0.75in]\n\n\\setuppagenumbering[location={footer,center}]\n\n\\setupbodyfont[11pt]\n\n\\setupwhitespace[medium]\n\n\\setuphead[chapter]      [style=\\tfd]\n\\setuphead[section]      [style=\\tfc]\n\\setuphead[subsection]   [style=\\tfb]\n\\setuphead[subsubsection][style=\\bf]\n\n$if(number-sections)$\n$else$\n\\setuphead[chapter, section, subsection, subsubsection][number=no]\n$endif$\n\n\\definedescription\n  [description]\n  [headstyle=bold, style=normal, location=hanging, width=broad, margin=1cm]\n\n\\setupitemize[autointro]    % prevent orphan list intro\n\\setupitemize[indentnext=no]\n\n\\setupthinrules[width=15em] % width of horizontal rules\n\n\\setupdelimitedtext\n  [blockquote]\n  [before={\\blank[medium]},\n   after={\\blank[medium]},\n   indentnext=no,\n  ]\n\n$if(toc)$\n\\setupcombinedlist[content][list={$placelist$}]\n\n$endif$\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n\\starttext\n$if(title)$\n\\startalignment[center]\n  \\blank[2*big]\n  {\\tfd $title$}\n$if(author)$\n  \\blank[3*medium]\n  {\\tfa $for(author)$$author$$sep$\\crlf $endfor$}\n$endif$\n$if(date)$\n  \\blank[2*medium]\n  {\\tfa $date$}\n$endif$\n  \\blank[3*medium]\n\\stopalignment\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$if(toc)$\n\\placecontent\n$endif$\n\n$body$\n\n$for(include-after)$\n$include-after$\n$endfor$\n\\stoptext\n"),("templates/default.docbook","<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n$if(mathml)$\n<!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook EBNF Module V1.1CR1//EN\"\n                  \"http://www.oasis-open.org/docbook/xml/mathml/1.1CR1/dbmathml.dtd\">\n$else$\n<!DOCTYPE article PUBLIC \"-//OASIS//DTD DocBook XML V4.5//EN\"\n                  \"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd\">\n$endif$\n<article>\n  <articleinfo>\n    <title>$title$</title>\n$for(author)$\n    <author>\n      $author$\n    </author>\n$endfor$\n$if(date)$\n    <date>$date$</date>\n$endif$\n  </articleinfo>\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</article>\n"),("templates/default.dzslides","<!DOCTYPE html>\n<head>\n<meta charset=\"utf-8\">\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"dcterms.date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$if(css)$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" $if(html5)$$else$type=\"text/css\" $endif$/>\n$endfor$\n$else$\n<style>\n  html { background-color: black; }\n  body { background-color: white; border-radius: 12px}\n  /* A section is a slide. It's size is 800x600, and this will never change */\n  section {\n      font-family: Arial, serif;\n      font-size: 20pt;\n    }\n  address, blockquote, dl, fieldset, form, h1, h2, h3, h4, h5, h6, hr, ol, p, pre, table, ul, dl { padding: 10px 20px 10px 20px; }\n  h1, h2, h3 {\n    text-align: center;\n    margin: 10pt 10pt 20pt 10pt;\n  }\n  ul, ol {\n    margin: 10px 10px 10px 50px;\n  }\n  section.titleslide h1 { margin-top: 200px; }\n  h1.title { margin-top: 150px; }\n  h1 { font-size: 180%; }\n  h2 { font-size: 120%; }\n  h3 { font-size: 100%; }\n  q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }\n  blockquote { font-style: italic }\n  /* Figures are displayed full-page, with the caption on\n     top of the image/video */\n  figure {\n    background-color: black;\n  }\n  figcaption {\n    margin: 70px;\n  }\n  footer {\n    position: absolute;\n    bottom: 0;\n    width: 100%;\n    padding: 40px;\n    text-align: right;\n    background-color: #F3F4F8;\n    border-top: 1px solid #CCC;\n  }\n\n  /* Transition effect */\n  /* Feel free to change the transition effect for original\n     animations. See here:\n     https://developer.mozilla.org/en/CSS/CSS_transitions\n     How to use CSS3 Transitions: */\n  section {\n      -moz-transition: left 400ms linear 0s;\n      -webkit-transition: left 400ms linear 0s;\n      -ms-transition: left 400ms linear 0s;\n      transition: left 400ms linear 0s;\n  }\n\n  /* Before */\n  section { left: -150%; }\n  /* Now */\n  section[aria-selected] { left: 0; }\n  /* After */\n  section[aria-selected] ~ section { left: +150%; }\n\n  /* Incremental elements */\n\n  /* By default, visible */\n  .incremental > * { opacity: 1; }\n\n  /* The current item */\n  .incremental > *[aria-selected] { color: red; opacity: 1; }\n\n  /* The items to-be-selected */\n  .incremental > *[aria-selected] ~ * { opacity: 0.2; }\n</style>\n$endif$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$if(title)$\n<section class=\"title\">\n  <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n  <h3 class=\"date\">$date$</h3>\n</section>\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n$dzslides-core$\n</body>\n</html>\n"),("templates/default.epub","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n  <title>$pagetitle$</title>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"$css$\" />\n$endfor$\n</head>\n<body>\n$if(titlepage)$\n  <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n  <h3 class=\"date\">$date$</h3>\n$endif$\n$else$\n$body$\n$endif$\n</body>\n</html>\n\n"),("templates/default.epub3","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html>\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:epub=\"http://www.idpf.org/2007/ops\"$if(lang)$ xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta charset=\"utf-8\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n  <title>$pagetitle$</title>\n$if(quotes)$\n  <style type=\"text/css\">\n    q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }\n  </style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" />\n$endfor$\n</head>\n<body>\n$if(titlepage)$\n  <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n  <h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n  <h3 class=\"date\">$date$</h3>\n$endif$\n$else$\n$body$\n$endif$\n</body>\n</html>\n\n"),("templates/default.html","<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(quotes)$\n  <style type=\"text/css\">q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }</style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" $if(html5)$$else$type=\"text/css\" $endif$/>\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<div id=\"$idprefix$header\">\n<h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n<h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n<h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n<h3 class=\"date\">$date$</h3>\n$endif$\n</div>\n$endif$\n$if(toc)$\n<div id=\"$idprefix$TOC\">\n$toc$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.html5","<!DOCTYPE html>\n<html$if(lang)$ lang=\"$lang$\"$endif$>\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"generator\" content=\"pandoc\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=yes\">\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\">\n$endfor$\n$if(date-meta)$\n  <meta name=\"dcterms.date\" content=\"$date-meta$\">\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n  <!--[if lt IE 9]>\n    <script src=\"http://html5shim.googlecode.com/svn/trunk/html5.js\"></script>\n  <![endif]-->\n$if(quotes)$\n  <style type=\"text/css\">q { quotes: \"\226\128\156\" \"\226\128\157\" \"\226\128\152\" \"\226\128\153\"; }</style>\n$endif$\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\">\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<header>\n<h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n<h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n<h2 class=\"author\">$author$</h2>\n$endfor$\n$if(date)$\n<h3 class=\"date\">$date$</h3>\n$endif$\n</header>\n$endif$\n$if(toc)$\n<nav id=\"$idprefix$TOC\">\n$toc$\n</nav>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.latex","\\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$lang$,$endif$$if(papersize)$$papersize$,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}\n\\usepackage[T1]{fontenc}\n\\usepackage{lmodern}\n\\usepackage{amssymb,amsmath}\n\\usepackage{ifxetex,ifluatex}\n\\usepackage{fixltx2e} % provides \\textsubscript\n% use upquote if available, for straight quotes in verbatim environments\n\\IfFileExists{upquote.sty}{\\usepackage{upquote}}{}\n\\ifnum 0\\ifxetex 1\\fi\\ifluatex 1\\fi=0 % if pdftex\n  \\usepackage[utf8]{inputenc}\n$if(euro)$\n  \\usepackage{eurosym}\n$endif$\n\\else % if luatex or xelatex\n  \\ifxetex\n    \\usepackage{mathspec}\n    \\usepackage{xltxtra,xunicode}\n  \\else\n    \\usepackage{fontspec}\n  \\fi\n  \\defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}\n  \\newcommand{\\euro}{\226\130\172}\n$if(mainfont)$\n    \\setmainfont{$mainfont$}\n$endif$\n$if(sansfont)$\n    \\setsansfont{$sansfont$}\n$endif$\n$if(monofont)$\n    \\setmonofont[Mapping=tex-ansi]{$monofont$}\n$endif$\n$if(mathfont)$\n    \\setmathfont(Digits,Latin,Greek){$mathfont$}\n$endif$\n\\fi\n% use microtype if available\n\\IfFileExists{microtype.sty}{\\usepackage{microtype}}{}\n$if(geometry)$\n\\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}\n$endif$\n$if(natbib)$\n\\usepackage{natbib}\n\\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}\n$endif$\n$if(biblatex)$\n\\usepackage{biblatex}\n$if(biblio-files)$\n\\bibliography{$biblio-files$}\n$endif$\n$endif$\n$if(listings)$\n\\usepackage{listings}\n$endif$\n$if(lhs)$\n\\lstnewenvironment{code}{\\lstset{language=Haskell,basicstyle=\\small\\ttfamily}}{}\n$endif$\n$if(highlighting-macros)$\n$highlighting-macros$\n$endif$\n$if(verbatim-in-note)$\n\\usepackage{fancyvrb}\n$endif$\n$if(tables)$\n\\usepackage{longtable}\n$endif$\n$if(graphics)$\n\\usepackage{graphicx}\n% Redefine \\includegraphics so that, unless explicit options are\n% given, the image width will not exceed the width of the page.\n% Images get their normal width if they fit onto the page, but\n% are scaled down if they would overflow the margins.\n\\makeatletter\n\\def\\ScaleIfNeeded{%\n  \\ifdim\\Gin@nat@width>\\linewidth\n    \\linewidth\n  \\else\n    \\Gin@nat@width\n  \\fi\n}\n\\makeatother\n\\let\\Oldincludegraphics\\includegraphics\n{%\n \\catcode`\\@=11\\relax%\n \\gdef\\includegraphics{\\@ifnextchar[{\\Oldincludegraphics}{\\Oldincludegraphics[width=\\ScaleIfNeeded]}}%\n}%\n$endif$\n\\ifxetex\n  \\usepackage[setpagesize=false, % page size defined by xetex\n              unicode=false, % unicode breaks when used with xetex\n              xetex]{hyperref}\n\\else\n  \\usepackage[unicode=true]{hyperref}\n\\fi\n\\hypersetup{breaklinks=true,\n            bookmarks=true,\n            pdfauthor={$author-meta$},\n            pdftitle={$title-meta$},\n            colorlinks=true,\n            citecolor=$if(citecolor)$$citecolor$$else$blue$endif$,\n            urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,\n            linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,\n            pdfborder={0 0 0}}\n\\urlstyle{same}  % don't use monospace font for urls\n$if(links-as-notes)$\n% Make links footnotes instead of hotlinks:\n\\renewcommand{\\href}[2]{#2\\footnote{\\url{#1}}}\n$endif$\n$if(strikeout)$\n\\usepackage[normalem]{ulem}\n% avoid problems with \\sout in headers with hyperref:\n\\pdfstringdefDisableCommands{\\renewcommand{\\sout}{}}\n$endif$\n\\setlength{\\parindent}{0pt}\n\\setlength{\\parskip}{6pt plus 2pt minus 1pt}\n\\setlength{\\emergencystretch}{3em}  % prevent overfull lines\n$if(numbersections)$\n\\setcounter{secnumdepth}{5}\n$else$\n\\setcounter{secnumdepth}{0}\n$endif$\n$if(verbatim-in-note)$\n\\VerbatimFootnotes % allows verbatim text in footnotes\n$endif$\n$if(lang)$\n\\ifxetex\n  \\usepackage{polyglossia}\n  \\setmainlanguage{$mainlang$}\n\\else\n  \\usepackage[$lang$]{babel}\n\\fi\n$endif$\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(title)$\n\\title{$title$}\n$endif$\n$if(subtitle)$\n\\subtitle{$subtitle$}\n$endif$\n\\author{$for(author)$$author$$sep$ \\and $endfor$}\n\\date{$date$}\n\n\\begin{document}\n$if(title)$\n\\maketitle\n$endif$\n\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n{\n\\hypersetup{linkcolor=black}\n\\setcounter{tocdepth}{$toc-depth$}\n\\tableofcontents\n}\n$endif$\n$body$\n\n$if(natbib)$\n$if(biblio-files)$\n$if(biblio-title)$\n$if(book-class)$\n\\renewcommand\\bibname{$biblio-title$}\n$else$\n\\renewcommand\\refname{$biblio-title$}\n$endif$\n$endif$\n\\bibliography{$biblio-files$}\n\n$endif$\n$endif$\n$if(biblatex)$\n\\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$\n\n$endif$\n$for(include-after)$\n$include-after$\n\n$endfor$\n\\end{document}\n"),("templates/default.man","$if(has-tables)$\n.\\\"t\n$endif$\n.TH \"$title$\" \"$section$\" \"$date$\" \"$footer$\" \"$header$\"\n$for(header-includes)$\n$header-includes$\n$endfor$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n$if(author)$\n.SH AUTHORS\n$for(author)$$author$$sep$; $endfor$.\n$endif$\n"),("templates/default.markdown","$if(titleblock)$\n$titleblock$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n$toc$\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.mediawiki","$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n__TOC__\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.opendocument","<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<office:document-content xmlns:office=\"urn:oasis:names:tc:opendocument:xmlns:office:1.0\" xmlns:style=\"urn:oasis:names:tc:opendocument:xmlns:style:1.0\" xmlns:text=\"urn:oasis:names:tc:opendocument:xmlns:text:1.0\" xmlns:table=\"urn:oasis:names:tc:opendocument:xmlns:table:1.0\" xmlns:draw=\"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0\" xmlns:fo=\"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:meta=\"urn:oasis:names:tc:opendocument:xmlns:meta:1.0\" xmlns:number=\"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0\" xmlns:svg=\"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0\" xmlns:chart=\"urn:oasis:names:tc:opendocument:xmlns:chart:1.0\" xmlns:dr3d=\"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0\" xmlns:math=\"http://www.w3.org/1998/Math/MathML\" xmlns:form=\"urn:oasis:names:tc:opendocument:xmlns:form:1.0\" xmlns:script=\"urn:oasis:names:tc:opendocument:xmlns:script:1.0\" xmlns:ooo=\"http://openoffice.org/2004/office\" xmlns:ooow=\"http://openoffice.org/2004/writer\" xmlns:oooc=\"http://openoffice.org/2004/calc\" xmlns:dom=\"http://www.w3.org/2001/xml-events\" xmlns:xforms=\"http://www.w3.org/2002/xforms\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" office:version=\"1.2\">\n  $automatic-styles$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n<office:body>\n<office:text>\n$if(title)$\n<text:h text:style-name=\"Title\">$title$</text:h>\n$endif$\n$for(author)$\n<text:p text:style-name=\"Author\">$author$</text:p>\n$endfor$\n$if(date)$\n<text:p text:style-name=\"Date\">$date$</text:p>\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</office:text>\n</office:body>\n</office:document-content>\n"),("templates/default.opml","<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<opml version=\"2.0\">\n  <head>\n    <title>$title$</title>\n    <dateModified>$date$</dateModified>\n    <ownerName>$for(author)$$author$$sep$; $endfor$</ownerName>\n  </head>\n  <body>\n$body$\n  </body>\n</opml>\n"),("templates/default.org","$if(title)$\n#+TITLE: $title$\n\n$endif$\n$if(author)$\n#+AUTHOR: $for(author)$$author$$sep$; $endfor$\n$endif$\n$if(date)$\n#+DATE: $date$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.plain","$if(titleblock)$\n$titleblock$\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n$toc$\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.revealjs","<!DOCTYPE html>\n<html$if(lang)$ lang=\"$lang$\"$endif$>\n<head>\n  <meta charset=\"utf-8\">\n  <meta name=\"generator\" content=\"pandoc\">\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"dcterms.date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <meta name=\"apple-mobile-web-app-capable\" content=\"yes\" />\n  <meta name=\"apple-mobile-web-app-status-bar-style\" content=\"black-translucent\" />\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\">\n  <link rel=\"stylesheet\" href=\"$revealjs-url$/css/reveal.min.css\"/>\n    <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n    <style type=\"text/css\">\n$highlighting-css$\n    </style>\n$endif$\n$if(css)$\n$for(css)$\n    <link rel=\"stylesheet\" href=\"$css$\"/>\n$endfor$\n$else$\n    <link rel=\"stylesheet\" href=\"$revealjs-url$/css/theme/simple.css\" id=\"theme\">\n$endif$\n  <link rel=\"stylesheet\" media=\"print\" href=\"$revealjs-url$/css/print/pdf.css\" />\n  <!--[if lt IE 9]>\n  <script src=\"$revealjs-url$/lib/js/html5shiv.js\"></script>\n  <![endif]-->\n$if(math)$\n    $math$\n$endif$\n$for(header-includes)$\n    $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n  <div class=\"reveal\">\n    <div class=\"slides\">\n\n$if(title)$\n<section>\n    <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n$for(author)$\n    <h2 class=\"author\">$author$</h2>\n$endfor$\n    <h3 class=\"date\">$date$</h3>\n</section>\n$endif$\n$if(toc)$\n<section id=\"$idprefix$TOC\">\n$toc$\n</section>\n$endif$\n\n$body$\n    </div>\n  </div>\n$for(include-after)$\n$include-after$\n$endfor$\n\n  <script src=\"$revealjs-url$/lib/js/head.min.js\"></script>\n  <script src=\"$revealjs-url$/js/reveal.min.js\"></script>\n\n  <script>\n\n      // Full list of configuration options available here:\n      // https://github.com/hakimel/reveal.js#configuration\n      Reveal.initialize({\n        controls: true,\n        progress: true,\n        history: true,\n        center: true,\n        theme: $if(theme)$'$theme$'$else$Reveal.getQueryHash().theme$endif$, // available themes are in /css/theme\n        transition: $if(transition)$'$transition$'$else$Reveal.getQueryHash().transition || 'default'$endif$, // default/cube/page/concave/zoom/linear/fade/none\n\n        // Optional libraries used to extend on reveal.js\n        dependencies: [\n          { src: '$revealjs-url$/lib/js/classList.js', condition: function() { return !document.body.classList; } },\n          { src: '$revealjs-url$/plugin/zoom-js/zoom.js', async: true, condition: function() { return !!document.body.classList; } },\n          { src: '$revealjs-url$/plugin/notes/notes.js', async: true, condition: function() { return !!document.body.classList; } },\n//          { src: '$revealjs-url$/plugin/search/search.js', async: true, condition: function() { return !!document.body.classList; }, }\n//          { src: '$revealjs-url$/plugin/remotes/remotes.js', async: true, condition: function() { return !!document.body.classList; } }\n]});\n    </script>\n  </body>\n</html>\n"),("templates/default.rst","$if(title)$\n$title$\n\n$endif$\n$for(author)$\n:Author: $author$\n$endfor$\n$if(date)$\n:Date:   $date$\n$endif$\n$if(author)$\n\n$else$\n$if(date)$\n\n$endif$\n$endif$\n$if(math)$\n.. role:: math(raw)\n   :format: html latex\n..\n\n$endif$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n.. contents::\n   :depth: $toc-depth$\n..\n\n$endif$\n$for(header-includes)$\n$header-includes$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/default.rtf","{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0 \\fswiss Helvetica;}{\\f1 Courier;}}\n{\\colortbl;\\red255\\green0\\blue0;\\red0\\green0\\blue255;}\n\\widowctrl\\hyphauto\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(title)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0 \\b \\fs36 $title$\\par}\n$endif$\n$for(author)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0  $author$\\par}\n$endfor$\n$if(date)$\n{\\pard \\qc \\f0 \\sa180 \\li0 \\fi0  $date$\\par}\n$endif$\n$if(spacer)$\n{\\pard \\ql \\f0 \\sa180 \\li0 \\fi0 \\par}\n$endif$\n$if(toc)$\n$toc$\n$endif$\n$for(include-before)$\n$include-before$\n$endfor$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n}\n"),("templates/default.s5","<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n  <!-- configuration parameters -->\n  <meta name=\"defaultView\" content=\"slideshow\" />\n  <meta name=\"controlVis\" content=\"hidden\" />\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n$for(css)$\n  <link rel=\"stylesheet\" href=\"$css$\" type=\"text/css\" />\n$endfor$\n  <!-- style sheet links -->\n  <link rel=\"stylesheet\" href=\"$s5-url$/slides.css\" type=\"text/css\" media=\"projection\" id=\"slideProj\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/outline.css\" type=\"text/css\" media=\"screen\" id=\"outlineStyle\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/print.css\" type=\"text/css\" media=\"print\" id=\"slidePrint\" />\n  <link rel=\"stylesheet\" href=\"$s5-url$/opera.css\" type=\"text/css\" media=\"projection\" id=\"operaFix\" />\n  <!-- S5 JS -->\n  <script src=\"$s5-url$/slides.js\" type=\"text/javascript\"></script>\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n<div class=\"layout\">\n<div id=\"controls\"></div>\n<div id=\"currentSlide\"></div>\n<div id=\"header\"></div>\n<div id=\"footer\">\n  <h1>$date$</h1>\n  <h2>$title$</h2>\n</div>\n</div>\n<div class=\"presentation\">\n$if(title)$\n<div class=\"titleslide slide\">\n  <h1>$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n  <h2>$for(author)$$author$$sep$<br/>$endfor$</h2>\n  <h3>$date$</h3>\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</div>\n</body>\n</html>\n"),("templates/default.slideous","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n    href=\"$slideous-url$/slideous.css\" />\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n   href=\"$css$\" />\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n  <script src=\"$slideous-url$/slideous.js\"\n    charset=\"utf-8\" type=\"text/javascript\"></script>\n$if(duration)$\n  <meta name=\"duration\" content=\"$duration$\" />\n$endif$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n<div id=\"statusbar\">\n<span style=\"float:right;\">\n<span style=\"margin-right:4em;font-weight:bold;\"><span id=\"slideidx\"></span> of {$$slidecount}</span>\n<button id=\"homebutton\" title=\"first slide\">1</button>\n<button id=\"prevslidebutton\" title=\"previous slide\">&laquo;</button>\n<button id=\"previtembutton\" title=\"previous item\">&lsaquo;</button>\n<button id=\"nextitembutton\" title=\"next item\">&rsaquo;</button>\n<button id=\"nextslidebutton\" title=\"next slide\">&raquo;</button>\n<button id=\"endbutton\" title=\"last slide\">{$$slidecount}</button>\n<button id=\"incfontbutton\" title=\"content\">A+</button>\n<button id=\"decfontbutton\" title=\"first slide\">A-</button>\n<select id=\"tocbox\" size=\"1\"><option></option></select>\n</span>\n<span id=\"eos\">&frac12;</span>\n<span title=\"{$$location}, {$$date}\">{$$title}, {$$author}</span>\n</div>\n$if(title)$\n<div class=\"slide titlepage\">\n  <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n  <p class=\"author\">\n$for(author)$$author$$sep$<br/>$endfor$\n  </p>\n$if(date)$\n  <p class=\"date\">$date$</p>\n$endif$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.slidy","<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"$if(lang)$ lang=\"$lang$\" xml:lang=\"$lang$\"$endif$>\n<head>\n  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />\n  <meta http-equiv=\"Content-Style-Type\" content=\"text/css\" />\n  <meta name=\"generator\" content=\"pandoc\" />\n$for(author-meta)$\n  <meta name=\"author\" content=\"$author-meta$\" />\n$endfor$\n$if(date-meta)$\n  <meta name=\"date\" content=\"$date-meta$\" />\n$endif$\n  <title>$if(title-prefix)$$title-prefix$ - $endif$$pagetitle$</title>\n  <style type=\"text/css\">code{white-space: pre;}</style>\n$if(highlighting-css)$\n  <style type=\"text/css\">\n$highlighting-css$\n  </style>\n$endif$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n    href=\"$slidy-url$/styles/slidy.css\" />\n$for(css)$\n  <link rel=\"stylesheet\" type=\"text/css\" media=\"screen, projection, print\"\n   href=\"$css$\" />\n$endfor$\n$if(math)$\n  $math$\n$endif$\n$for(header-includes)$\n  $header-includes$\n$endfor$\n  <script src=\"$slidy-url$/scripts/slidy.js\"\n    charset=\"utf-8\" type=\"text/javascript\"></script>\n$if(duration)$\n  <meta name=\"duration\" content=\"$duration$\" />\n$endif$\n</head>\n<body>\n$for(include-before)$\n$include-before$\n$endfor$\n$if(title)$\n<div class=\"slide titlepage\">\n  <h1 class=\"title\">$title$</h1>\n$if(subtitle)$\n  <h1 class=\"subtitle\">$subtitle$</h1>\n$endif$\n  <p class=\"author\">\n$for(author)$$author$$sep$<br/>$endfor$\n  </p>\n$if(date)$\n  <p class=\"date\">$date$</p>\n$endif$\n</div>\n$endif$\n$body$\n$for(include-after)$\n$include-after$\n$endfor$\n</body>\n</html>\n"),("templates/default.texinfo","\\input texinfo\n@documentencoding UTF-8\n$for(header-includes)$\n$header-includes$\n$endfor$\n\n$if(strikeout)$\n@macro textstrikeout{text}\n~~\\text\\~~\n@end macro\n\n$endif$\n$if(subscript)$\n@macro textsubscript{text}\n@iftex\n@textsubscript{\\text\\}\n@end iftex\n@ifnottex\n_@{\\text\\@}\n@end ifnottex\n@end macro\n\n$endif$\n$if(superscript)$\n@macro textsuperscript{text}\n@iftex\n@textsuperscript{\\text\\}\n@end iftex\n@ifnottex\n^@{\\text\\@}\n@end ifnottex\n@end macro\n\n$endif$\n@ifnottex\n@paragraphindent 0\n@end ifnottex\n$if(titlepage)$\n@titlepage\n@title $title$\n$for(author)$\n@author $author$\n$endfor$\n$if(date)$\n$date$\n$endif$\n@end titlepage\n\n$endif$\n$for(include-before)$\n$include-before$\n\n$endfor$\n$if(toc)$\n@contents\n\n$endif$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n\n@bye\n"),("templates/default.textile","$for(include-before)$\n$include-before$\n\n$endfor$\n$body$\n$for(include-after)$\n\n$include-after$\n$endfor$\n"),("templates/README.markdown","Templates for [pandoc](http://github.com/jgm/pandoc).\n\nIf you use custom templates, we recommend forking this repository,\nso that you can integrate changes to the default templates in future\npandoc releases.\n")]
+ dist/build/Text/Pandoc/Readers/Haddock/Lex.hs view
@@ -0,0 +1,475 @@+{-# LANGUAGE CPP,MagicHash #-}+{-# LINE 10 "src/Text/Pandoc/Readers/Haddock/Lex.x" #-}++{-# LANGUAGE BangPatterns #-}   -- Generated by Alex+{-# OPTIONS -Wwarn -w #-}+-- The above warning supression flag is a temporary kludge.+-- While working on this module you are encouraged to remove it and fix+-- any warnings in the module. See+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings+-- for details++module Text.Pandoc.Readers.Haddock.Lex (+    Token(..),+    LToken,+    tokenise,+    tokenPos+ ) where++import Data.Char+import Numeric (readHex)++#if __GLASGOW_HASKELL__ >= 603+#include "ghcconfig.h"+#elif defined(__GLASGOW_HASKELL__)+#include "config.h"+#endif+#if __GLASGOW_HASKELL__ >= 503+import Data.Array+import Data.Char (ord)+import Data.Array.Base (unsafeAt)+#else+import Array+import Char (ord)+#endif+#if __GLASGOW_HASKELL__ >= 503+import GHC.Exts+#else+import GlaExts+#endif+{-# LINE 1 "templates/wrappers.hs" #-}+{-# LINE 1 "templates/wrappers.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/wrappers.hs" #-}+-- -----------------------------------------------------------------------------+-- Alex wrapper code.+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++import Data.Word (Word8)+{-# LINE 22 "templates/wrappers.hs" #-}++import qualified Data.Bits++-- | Encode a Haskell String to a list of Word8 values, in UTF8 format.+utf8Encode :: Char -> [Word8]+utf8Encode = map fromIntegral . go . ord+ where+  go oc+   | oc <= 0x7f       = [oc]++   | oc <= 0x7ff      = [ 0xc0 + (oc `Data.Bits.shiftR` 6)+                        , 0x80 + oc Data.Bits..&. 0x3f+                        ]++   | oc <= 0xffff     = [ 0xe0 + (oc `Data.Bits.shiftR` 12)+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+                        , 0x80 + oc Data.Bits..&. 0x3f+                        ]+   | otherwise        = [ 0xf0 + (oc `Data.Bits.shiftR` 18)+                        , 0x80 + ((oc `Data.Bits.shiftR` 12) Data.Bits..&. 0x3f)+                        , 0x80 + ((oc `Data.Bits.shiftR` 6) Data.Bits..&. 0x3f)+                        , 0x80 + oc Data.Bits..&. 0x3f+                        ]++++type Byte = Word8++-- -----------------------------------------------------------------------------+-- The input type+++type AlexInput = (AlexPosn,     -- current position,+                  Char,         -- previous char+                  [Byte],       -- pending bytes on current char+                  String)       -- current input string++ignorePendingBytes :: AlexInput -> AlexInput+ignorePendingBytes (p,c,ps,s) = (p,c,[],s)++alexInputPrevChar :: AlexInput -> Char+alexInputPrevChar (p,c,bs,s) = c++alexGetByte :: AlexInput -> Maybe (Byte,AlexInput)+alexGetByte (p,c,(b:bs),s) = Just (b,(p,c,bs,s))+alexGetByte (p,c,[],[]) = Nothing+alexGetByte (p,_,[],(c:s))  = let p' = alexMove p c +                                  (b:bs) = utf8Encode c+                              in p' `seq`  Just (b, (p', c, bs, s))+++{-# LINE 89 "templates/wrappers.hs" #-}++{-# LINE 103 "templates/wrappers.hs" #-}++{-# LINE 118 "templates/wrappers.hs" #-}++-- -----------------------------------------------------------------------------+-- Token positions++-- `Posn' records the location of a token in the input text.  It has three+-- fields: the address (number of chacaters preceding the token), line number+-- and column of a token within the file. `start_pos' gives the position of the+-- start of the file and `eof_pos' a standard encoding for the end of file.+-- `move_pos' calculates the new position after traversing a given character,+-- assuming the usual eight character tab stops.+++data AlexPosn = AlexPn !Int !Int !Int+        deriving (Eq,Show)++alexStartPos :: AlexPosn+alexStartPos = AlexPn 0 1 1++alexMove :: AlexPosn -> Char -> AlexPosn+alexMove (AlexPn a l c) '\t' = AlexPn (a+1)  l     (((c+7) `div` 8)*8+1)+alexMove (AlexPn a l c) '\n' = AlexPn (a+1) (l+1)   1+alexMove (AlexPn a l c) _    = AlexPn (a+1)  l     (c+1)+++-- -----------------------------------------------------------------------------+-- Default monad++{-# LINE 231 "templates/wrappers.hs" #-}+++-- -----------------------------------------------------------------------------+-- Monad (with ByteString input)++{-# LINE 320 "templates/wrappers.hs" #-}+++-- -----------------------------------------------------------------------------+-- Basic wrapper++{-# LINE 347 "templates/wrappers.hs" #-}+++-- -----------------------------------------------------------------------------+-- Basic wrapper, ByteString version++{-# LINE 365 "templates/wrappers.hs" #-}++{-# LINE 378 "templates/wrappers.hs" #-}+++-- -----------------------------------------------------------------------------+-- Posn wrapper++-- Adds text positions to the basic model.+++--alexScanTokens :: String -> [token]+alexScanTokens str = go (alexStartPos,'\n',[],str)+  where go inp@(pos,_,_,str) =+          case alexScan inp 0 of+                AlexEOF -> []+                AlexError ((AlexPn _ line column),_,_,_) -> error $ "lexical error at " ++ (show line) ++ " line, " ++ (show column) ++ " column"+                AlexSkip  inp' len     -> go inp'+                AlexToken inp' len act -> act pos (take len str) : go inp'++++-- -----------------------------------------------------------------------------+-- Posn wrapper, ByteString version++{-# LINE 410 "templates/wrappers.hs" #-}+++-- -----------------------------------------------------------------------------+-- GScan wrapper++-- For compatibility with previous versions of Alex, and because we can.++alex_base :: AlexAddr+alex_base = AlexA# "\xf8\xff\xff\xff\xfc\xff\xff\xff\xf2\x00\x00\x00\xfe\xff\xff\xff\xe8\x01\x00\x00\xde\x02\x00\x00\x03\x00\x00\x00\xea\x01\x00\x00\x00\x00\x00\x00\xd4\x03\x00\x00\x12\x00\x00\x00\xca\x04\x00\x00\xc0\x05\x00\x00\xc8\x02\x00\x00\x24\x00\x00\x00\xf4\x00\x00\x00\x40\x06\x00\x00\xc0\x06\x00\x00\x40\x07\x00\x00\xc0\x07\x00\x00\x40\x08\x00\x00\xc0\x08\x00\x00\x40\x09\x00\x00\xc0\x09\x00\x00\x40\x0a\x00\x00\xc0\x0a\x00\x00\x40\x0b\x00\x00\xc0\x0b\x00\x00\x40\x0c\x00\x00\xc0\x0c\x00\x00\xa2\xff\xff\xff\x40\x0d\x00\x00\xc0\x0d\x00\x00\x40\x0e\x00\x00\xc0\x0e\x00\x00\x40\x0f\x00\x00\xc0\x0f\x00\x00\xa0\xff\xff\xff\x00\x00\x00\x00\x31\x10\x00\x00\x00\x00\x00\x00\xa2\x10\x00\x00\x00\x00\x00\x00\x13\x11\x00\x00\x00\x00\x00\x00\x84\x11\x00\x00\x00\x00\x00\x00\xf5\x11\x00\x00\x00\x00\x00\x00\x66\x12\x00\x00\x00\x00\x00\x00\xd7\x12\x00\x00\x00\x00\x00\x00\x48\x13\x00\x00\x00\x00\x00\x00\xb9\x13\x00\x00\x00\x00\x00\x00\x2f\x04\x00\x00\x00\x00\x00\x00\x31\x05\x00\x00\x00\x00\x00\x00\xfa\x13\x00\x00\x00\x00\x00\x00\x3b\x14\x00\x00\x00\x00\x00\x00\x7c\x14\x00\x00\x00\x00\x00\x00\xbd\x14\x00\x00\x00\x00\x00\x00\x2e\x15\x00\x00\xa3\xff\xff\xff\x00\x00\x00\x00\x6f\x15\x00\x00\x00\x00\x00\x00\xb0\x15\x00\x00\xda\x00\x00\x00\xcc\x01\x00\x00\x00\x00\x00\x00\xf1\x15\x00\x00\xf1\x16\x00\x00\xb1\x16\x00\x00\x00\x00\x00\x00\xb1\x17\x00\x00\x71\x17\x00\x00\x00\x00\x00\x00\x71\x18\x00\x00\x31\x18\x00\x00\x00\x00\x00\x00\x31\x19\x00\x00\xf1\x18\x00\x00\x00\x00\x00\x00\xf1\x19\x00\x00\xb1\x19\x00\x00\x00\x00\x00\x00\xb1\x1a\x00\x00\x71\x1a\x00\x00\x00\x00\x00\x00\xd6\xff\xff\xff\x00\x00\x00\x00\xb2\x1a\x00\x00\x39\x00\x00\x00\xb2\x1b\x00\x00\xd7\xff\xff\xff\x72\x1b\x00\x00\x00\x00\x00\x00\x72\x1c\x00\x00\x32\x1c\x00\x00\x00\x00\x00\x00\x32\x1d\x00\x00\xf2\x1c\x00\x00\x00\x00\x00\x00\xe8\x1d\x00\x00\xde\x1e\x00\x00\xd8\xff\xff\xff\xf6\x00\x00\x00\xde\x1f\x00\x00\x67\x1d\x00\x00\x00\x00\x00\x00\xd9\xff\xff\xff\x20\x02\x00\x00\x13\x01\x00\x00\xdb\xff\xff\xff\x54\x20\x00\x00\x00\x00\x00\x00\xdc\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xdd\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xde\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x3e\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x4a\x21\x00\x00\x40\x22\x00\x00\x41\x21\x00\x00\xfa\xff\xff\xff\x36\x23\x00\x00\x2c\x24\x00\x00\x00\x00\x00\x00\x22\x25\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++alex_table :: AlexAddr+alex_table = AlexA# "\x00\x00\x07\x00\x7b\x00\x07\x00\x07\x00\x07\x00\x86\x00\x72\x00\x87\x00\x72\x00\x72\x00\x72\x00\x77\x00\x85\x00\x77\x00\x77\x00\x77\x00\x46\x00\x1e\x00\x66\x00\x71\x00\x7a\x00\x88\x00\x84\x00\x07\x00\x7e\x00\x79\x00\x76\x00\x8c\x00\x4c\x00\x72\x00\x00\x00\x64\x00\x00\x00\x7f\x00\x77\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x81\x00\x61\x00\x00\x00\x00\x00\x00\x00\x00\x00\x83\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x94\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x74\x00\x10\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x63\x00\x14\x00\x44\x00\x44\x00\x44\x00\x45\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x72\x00\x87\x00\x72\x00\x72\x00\x72\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x8b\x00\x96\x00\x72\x00\x00\x00\x99\x00\x98\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x97\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x9b\x00\x95\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x61\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x82\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x00\x00\x9a\x00\x9e\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x89\x00\x07\x00\x7b\x00\x07\x00\x07\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x07\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x64\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x00\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x78\x00\x4b\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x77\x00\x85\x00\x77\x00\x77\x00\x77\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x77\x00\x00\x00\x00\x00\x00\x00\x4b\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x25\x00\x00\x00\x00\x00\x00\x00\x83\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5e\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x5f\x00\x15\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x43\x00\x1f\x00\x30\x00\x30\x00\x30\x00\x31\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8a\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x91\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x92\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5c\x00\x16\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x41\x00\x20\x00\x2e\x00\x2e\x00\x2e\x00\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x96\x00\x00\x00\x00\x00\x99\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x97\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9b\x00\x00\x00\x00\x00\x00\x00\x8b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x9a\x00\x9f\x00\x00\x00\x00\x00\x98\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8f\x00\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x53\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x23\x00\x28\x00\x28\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x53\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x50\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x24\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x73\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x75\x00\x6c\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x65\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x10\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x62\x00\x5e\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x60\x00\x5b\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x5d\x00\x58\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x11\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x13\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x15\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x42\x00\x16\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x40\x00\x17\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x41\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x43\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x48\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x56\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x59\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x63\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x67\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x74\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x56\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x22\x00\x2a\x00\x2a\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x8e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x58\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x5a\x00\x59\x00\x17\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x3f\x00\x21\x00\x2c\x00\x2c\x00\x2c\x00\x2d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x7d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x91\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x92\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x65\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x68\x00\x67\x00\x13\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x47\x00\x48\x00\x1d\x00\x32\x00\x32\x00\x32\x00\x33\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x00\x00\x0d\x00\x0d\x00\x8f\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x0d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x52\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x54\x00\x53\x00\x19\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3a\x00\x3b\x00\x23\x00\x28\x00\x28\x00\x28\x00\x29\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x90\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x4f\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x51\x00\x50\x00\x1a\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x38\x00\x39\x00\x24\x00\x26\x00\x26\x00\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x6c\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6e\x00\x6d\x00\x11\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4d\x00\x4e\x00\x1b\x00\x36\x00\x36\x00\x36\x00\x37\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x70\x00\x00\x00\x8d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x55\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x57\x00\x56\x00\x18\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3c\x00\x3d\x00\x22\x00\x2a\x00\x2a\x00\x2a\x00\x2b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x9c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6b\x00\x6a\x00\x12\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x49\x00\x4a\x00\x1c\x00\x34\x00\x34\x00\x34\x00\x35\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++alex_check :: AlexAddr+alex_check = AlexA# "\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x6f\x00\x72\x00\x70\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x20\x00\x3e\x00\x3e\x00\x3e\x00\x3e\x00\x23\x00\x20\x00\xff\xff\x28\x00\xff\xff\x2a\x00\x20\x00\xff\xff\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x29\x00\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5b\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x3b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x22\x00\x23\x00\x20\x00\xff\xff\x26\x00\x27\x00\xff\xff\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x2f\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3c\x00\x3b\x00\xff\xff\xff\xff\x40\x00\xff\xff\x3e\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x2e\x00\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\x00\xff\xff\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x28\x00\xff\xff\x2a\x00\xff\xff\xff\xff\x2d\x00\xff\xff\xff\xff\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x58\x00\xff\xff\xff\xff\xff\xff\x3e\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x20\x00\xff\xff\xff\xff\xff\xff\x78\x00\x5b\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x70\x00\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x23\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0f\x00\x10\x00\x11\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x1c\x00\x1d\x00\x1e\x00\x1f\x00\x20\x00\x21\x00\x22\x00\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\x28\x00\x29\x00\x2a\x00\x2b\x00\x2c\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\x3b\x00\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\x5b\x00\x5c\x00\x5d\x00\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\x7b\x00\x7c\x00\x7d\x00\x7e\x00\x7f\x00\x0a\x00\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\xff\xff\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\x60\x00\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\x00\xff\xff\x23\x00\x24\x00\x25\x00\x26\x00\x27\x00\xff\xff\xff\xff\x2a\x00\x2b\x00\x23\x00\x2d\x00\x2e\x00\x2f\x00\x30\x00\x31\x00\x32\x00\x33\x00\x34\x00\x35\x00\x36\x00\x37\x00\x38\x00\x39\x00\x3a\x00\xff\xff\x3c\x00\x3d\x00\x3e\x00\x3f\x00\x40\x00\x41\x00\x42\x00\x43\x00\x44\x00\x45\x00\x46\x00\x47\x00\x48\x00\x49\x00\x4a\x00\x4b\x00\x4c\x00\x4d\x00\x4e\x00\x4f\x00\x50\x00\x51\x00\x52\x00\x53\x00\x54\x00\x55\x00\x56\x00\x57\x00\x58\x00\x59\x00\x5a\x00\xff\xff\x5c\x00\xff\xff\x5e\x00\x5f\x00\xff\xff\x61\x00\x62\x00\x63\x00\x64\x00\x65\x00\x66\x00\x67\x00\x68\x00\x69\x00\x6a\x00\x6b\x00\x6c\x00\x6d\x00\x6e\x00\x6f\x00\x70\x00\x71\x00\x72\x00\x73\x00\x74\x00\x75\x00\x76\x00\x77\x00\x78\x00\x79\x00\x7a\x00\xff\xff\x7c\x00\xff\xff\x7e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\x3e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00\x0a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x22\x00\x23\x00\xff\xff\xff\xff\x26\x00\x27\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x2f\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x3c\x00\xff\xff\xff\xff\xff\xff\x40\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x5c\x00\x5d\x00\xff\xff\xff\xff\x60\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x80\x00\x81\x00\x82\x00\x83\x00\x84\x00\x85\x00\x86\x00\x87\x00\x88\x00\x89\x00\x8a\x00\x8b\x00\x8c\x00\x8d\x00\x8e\x00\x8f\x00\x90\x00\x91\x00\x92\x00\x93\x00\x94\x00\x95\x00\x96\x00\x97\x00\x98\x00\x99\x00\x9a\x00\x9b\x00\x9c\x00\x9d\x00\x9e\x00\x9f\x00\xa0\x00\xa1\x00\xa2\x00\xa3\x00\xa4\x00\xa5\x00\xa6\x00\xa7\x00\xa8\x00\xa9\x00\xaa\x00\xab\x00\xac\x00\xad\x00\xae\x00\xaf\x00\xb0\x00\xb1\x00\xb2\x00\xb3\x00\xb4\x00\xb5\x00\xb6\x00\xb7\x00\xb8\x00\xb9\x00\xba\x00\xbb\x00\xbc\x00\xbd\x00\xbe\x00\xbf\x00\xc0\x00\xc1\x00\xc2\x00\xc3\x00\xc4\x00\xc5\x00\xc6\x00\xc7\x00\xc8\x00\xc9\x00\xca\x00\xcb\x00\xcc\x00\xcd\x00\xce\x00\xcf\x00\xd0\x00\xd1\x00\xd2\x00\xd3\x00\xd4\x00\xd5\x00\xd6\x00\xd7\x00\xd8\x00\xd9\x00\xda\x00\xdb\x00\xdc\x00\xdd\x00\xde\x00\xdf\x00\xe0\x00\xe1\x00\xe2\x00\xe3\x00\xe4\x00\xe5\x00\xe6\x00\xe7\x00\xe8\x00\xe9\x00\xea\x00\xeb\x00\xec\x00\xed\x00\xee\x00\xef\x00\xf0\x00\xf1\x00\xf2\x00\xf3\x00\xf4\x00\xf5\x00\xf6\x00\xf7\x00\xf8\x00\xf9\x00\xfa\x00\xfb\x00\xfc\x00\xfd\x00\xfe\x00\xff\x00"#++alex_deflt :: AlexAddr+alex_deflt = AlexA# "\xff\xff\x01\x00\x9d\x00\xff\xff\x04\x00\x05\x00\xff\xff\xff\xff\xff\xff\x9d\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x38\x00\x38\x00\x3a\x00\x3a\x00\x3c\x00\x3c\x00\x3e\x00\x3e\x00\x40\x00\x40\x00\x42\x00\x42\x00\x47\x00\x47\x00\x49\x00\x49\x00\x4d\x00\x4d\x00\x51\x00\x51\x00\x54\x00\x54\x00\x57\x00\x57\x00\x5a\x00\x5a\x00\x5d\x00\x5d\x00\x60\x00\x60\x00\x62\x00\x62\x00\xff\xff\x68\x00\x68\x00\x6b\x00\x6b\x00\xff\xff\xff\xff\x6e\x00\x6e\x00\x0c\x00\x0c\x00\x0c\x00\x0b\x00\x0b\x00\x0b\x00\x6f\x00\x6f\x00\x6f\x00\x70\x00\x70\x00\x70\x00\x05\x00\x05\x00\x05\x00\x04\x00\x04\x00\x04\x00\xff\xff\x75\x00\x75\x00\xff\xff\x7a\x00\xff\xff\x7a\x00\x7a\x00\x9d\x00\x9d\x00\x9d\x00\x93\x00\x93\x00\x93\x00\x6f\x00\x70\x00\xff\xff\xff\xff\x01\x00\x01\x00\x01\x00\xff\xff\xff\xff\xff\xff\xff\xff\x7a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x0b\x00\x0c\x00\xff\xff\xff\xff\x93\x00\x6f\x00\xff\xff\x9d\x00\xff\xff\xff\xff"#++alex_accept = listArray (0::Int,159) [AlexAcc (alex_action_8),AlexAcc (alex_action_13),AlexAccNone,AlexAcc (alex_action_17),AlexAccNone,AlexAccNone,AlexAcc (alex_action_12),AlexAcc (alex_action_8),AlexAcc (alex_action_14),AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccNone,AlexAccSkip,AlexAcc (alex_action_1),AlexAcc (alex_action_2),AlexAcc (alex_action_3),AlexAcc (alex_action_4),AlexAcc (alex_action_5),AlexAcc (alex_action_6),AlexAcc (alex_action_7),AlexAcc (alex_action_9),AlexAcc (alex_action_10),AlexAcc (alex_action_11),AlexAcc (alex_action_13),AlexAcc (alex_action_15),AlexAcc (alex_action_16),AlexAcc (alex_action_18),AlexAcc (alex_action_19),AlexAcc (alex_action_20),AlexAcc (alex_action_21),AlexAcc (alex_action_22),AlexAcc (alex_action_22),AlexAcc (alex_action_23),AlexAcc (alex_action_24),AlexAcc (alex_action_25),AlexAcc (alex_action_25),AlexAcc (alex_action_26),AlexAcc (alex_action_27),AlexAcc (alex_action_28),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_29),AlexAcc (alex_action_30),AlexAcc (alex_action_31),AlexAcc (alex_action_32),AlexAcc (alex_action_33)]+{-# LINE 112 "src/Text/Pandoc/Readers/Haddock/Lex.x" #-}++-- | A located token+type LToken = (Token, AlexPosn)++data Token+  = TokPara+  | TokNumber+  | TokBullet+  | TokDefStart+  | TokDefEnd+  | TokSpecial Char+  | TokIdent String+  | TokString String+  | TokURL String+  | TokPic String+  | TokEmphasis String+  | TokAName String+  | TokBirdTrack String+  | TokProperty String+  | TokExamplePrompt String+  | TokExampleExpression String+  | TokExampleResult String+  deriving Show++tokenPos :: LToken -> (Int, Int)+tokenPos t = let AlexPn _ line col = snd t in (line, col)++type StartCode = Int+type Action = AlexPosn -> String -> StartCode -> (StartCode -> [LToken]) -> [LToken]++tokenise :: String -> (Int, Int) -> [LToken]+tokenise str (line, col) = go (posn,'\n',[],eofHack str) para+  where posn = AlexPn 0 line col+        go inp@(pos,_,_,str) sc =+          case alexScan inp sc of+                AlexEOF -> []+                AlexError _ -> []+                AlexSkip  inp' len     -> go inp' sc+                AlexToken inp' len act -> act pos (take len str) sc (\sc -> go inp' sc)++-- NB. we add a final \n to the string, (see comment in the beginning of line+-- production above).+eofHack str = str++"\n"++andBegin :: Action -> StartCode -> Action+andBegin act new_sc = \pos str _ cont -> act pos str new_sc cont++token :: Token -> Action+token t = \pos _ sc cont -> (t, pos) : cont sc++strtoken, strtokenNL :: (String -> Token) -> Action+strtoken t = \pos str sc cont -> (t str, pos) : cont sc+strtokenNL t = \pos str sc cont -> (t (filter (/= '\r') str), pos) : cont sc+-- ^ We only want LF line endings in our internal doc string format, so we+-- filter out all CRs.++begin :: StartCode -> Action+begin sc = \_ _ _ cont -> cont sc++++birdtrack,def,example,exampleexpr,exampleresult,line,para,property,string :: Int+birdtrack = 1+def = 2+example = 3+exampleexpr = 4+exampleresult = 5+line = 6+para = 7+property = 8+string = 9+alex_action_1 =  begin birdtrack +alex_action_2 =  strtoken TokProperty `andBegin` property+alex_action_3 =  strtoken TokExamplePrompt `andBegin` exampleexpr +alex_action_4 =  token TokBullet `andBegin` string +alex_action_5 =  token TokDefStart `andBegin` def +alex_action_6 =  token TokNumber `andBegin` string +alex_action_7 =  token TokNumber `andBegin` string +alex_action_8 =  begin string +alex_action_9 =  begin birdtrack +alex_action_10 =  strtoken TokExamplePrompt `andBegin` exampleexpr +alex_action_11 =  token TokPara `andBegin` para +alex_action_12 =  begin string +alex_action_13 =  strtokenNL TokBirdTrack `andBegin` line +alex_action_14 =  token TokPara `andBegin` para +alex_action_15 =  token TokPara `andBegin` para +alex_action_16 =  strtoken TokExamplePrompt `andBegin` exampleexpr +alex_action_17 =  begin exampleresult +alex_action_18 =  strtokenNL TokExampleExpression `andBegin` example +alex_action_19 =  strtokenNL TokExampleResult `andBegin` example +alex_action_20 =  strtoken $ \s -> TokSpecial (head s) +alex_action_21 =  strtoken $ \s -> TokPic (init $ init $ tail $ tail s) +alex_action_22 =  strtoken $ \s -> TokURL (init (tail s)) +alex_action_23 =  strtoken $ \s -> TokAName (init (tail s)) +alex_action_24 =  strtoken $ \s -> TokEmphasis (init (tail s)) +alex_action_25 =  strtoken $ \s -> TokIdent (init (tail s)) +alex_action_26 =  strtoken (TokString . tail) +alex_action_27 =  strtoken $ \s -> TokString [chr (read (init (drop 2 s)))] +alex_action_28 =  strtoken $ \s -> case readHex (init (drop 3 s)) of [(n,_)] -> TokString [chr n] +alex_action_29 =  strtoken TokString +alex_action_30 =  strtokenNL TokString `andBegin` line +alex_action_31 =  strtoken TokString +alex_action_32 =  token TokDefEnd `andBegin` string +alex_action_33 =  strtoken TokString +{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- -----------------------------------------------------------------------------+-- ALEX TEMPLATE+--+-- This code is in the PUBLIC DOMAIN; you may copy it freely and use+-- it for any purpose whatsoever.++-- -----------------------------------------------------------------------------+-- INTERNALS and main scanner engine++{-# LINE 35 "templates/GenericTemplate.hs" #-}++{-# LINE 45 "templates/GenericTemplate.hs" #-}+++data AlexAddr = AlexA# Addr#++#if __GLASGOW_HASKELL__ < 503+uncheckedShiftL# = shiftL#+#endif++{-# INLINE alexIndexInt16OffAddr #-}+alexIndexInt16OffAddr (AlexA# arr) off =+#ifdef WORDS_BIGENDIAN+  narrow16Int# i+  where+        i    = word2Int# ((high `uncheckedShiftL#` 8#) `or#` low)+        high = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+        low  = int2Word# (ord# (indexCharOffAddr# arr off'))+        off' = off *# 2#+#else+  indexInt16OffAddr# arr off+#endif++++++{-# INLINE alexIndexInt32OffAddr #-}+alexIndexInt32OffAddr (AlexA# arr) off = +#ifdef WORDS_BIGENDIAN+  narrow32Int# i+  where+   i    = word2Int# ((b3 `uncheckedShiftL#` 24#) `or#`+		     (b2 `uncheckedShiftL#` 16#) `or#`+		     (b1 `uncheckedShiftL#` 8#) `or#` b0)+   b3   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 3#)))+   b2   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 2#)))+   b1   = int2Word# (ord# (indexCharOffAddr# arr (off' +# 1#)))+   b0   = int2Word# (ord# (indexCharOffAddr# arr off'))+   off' = off *# 4#+#else+  indexInt32OffAddr# arr off+#endif++++++#if __GLASGOW_HASKELL__ < 503+quickIndex arr i = arr ! i+#else+-- GHC >= 503, unsafeAt is available from Data.Array.Base.+quickIndex = unsafeAt+#endif+++++-- -----------------------------------------------------------------------------+-- Main lexing routines++data AlexReturn a+  = AlexEOF+  | AlexError  !AlexInput+  | AlexSkip   !AlexInput !Int+  | AlexToken  !AlexInput !Int a++-- alexScan :: AlexInput -> StartCode -> AlexReturn a+alexScan input (I# (sc))+  = alexScanUser undefined input (I# (sc))++alexScanUser user input (I# (sc))+  = case alex_scan_tkn user input 0# input sc AlexNone of+	(AlexNone, input') ->+		case alexGetByte input of+			Nothing -> ++++				   AlexEOF+			Just _ ->++++				   AlexError input'++	(AlexLastSkip input'' len, _) ->++++		AlexSkip input'' len++	(AlexLastAcc k input''' len, _) ->++++		AlexToken input''' len k+++-- Push the input through the DFA, remembering the most recent accepting+-- state it encountered.++alex_scan_tkn user orig_input len input s last_acc =+  input `seq` -- strict in the input+  let +	new_acc = (check_accs (alex_accept `quickIndex` (I# (s))))+  in+  new_acc `seq`+  case alexGetByte input of+     Nothing -> (new_acc, input)+     Just (c, new_input) -> ++++      case fromIntegral c of { (I# (ord_c)) ->+        let+                base   = alexIndexInt32OffAddr alex_base s+                offset = (base +# ord_c)+                check  = alexIndexInt16OffAddr alex_check offset+		+                new_s = if (offset >=# 0#) && (check ==# ord_c)+			  then alexIndexInt16OffAddr alex_table offset+			  else alexIndexInt16OffAddr alex_deflt s+	in+        case new_s of+	    -1# -> (new_acc, input)+		-- on an error, we want to keep the input *before* the+		-- character that failed, not after.+    	    _ -> alex_scan_tkn user orig_input (if c < 0x80 || c >= 0xC0 then (len +# 1#) else len)+                                                -- note that the length is increased ONLY if this is the 1st byte in a char encoding)+			new_input new_s new_acc+      }+  where+	check_accs (AlexAccNone) = last_acc+	check_accs (AlexAcc a  ) = AlexLastAcc a input (I# (len))+	check_accs (AlexAccSkip) = AlexLastSkip  input (I# (len))+{-# LINE 191 "templates/GenericTemplate.hs" #-}++data AlexLastAcc a+  = AlexNone+  | AlexLastAcc a !AlexInput !Int+  | AlexLastSkip  !AlexInput !Int++instance Functor AlexLastAcc where+    fmap f AlexNone = AlexNone+    fmap f (AlexLastAcc x y z) = AlexLastAcc (f x) y z+    fmap f (AlexLastSkip x y) = AlexLastSkip x y++data AlexAcc a user+  = AlexAccNone+  | AlexAcc a+  | AlexAccSkip+{-# LINE 235 "templates/GenericTemplate.hs" #-}++-- used by wrappers+iUnbox (I# (i)) = i
+ dist/build/Text/Pandoc/Readers/Haddock/Parse.hs view
@@ -0,0 +1,863 @@+{-# OPTIONS_GHC -w #-}+{-# OPTIONS -fglasgow-exts -cpp #-}+{-# LANGUAGE BangPatterns #-} -- required for versions of Happy before 1.18.6+-- The above warning supression flag is a temporary kludge.+-- While working on this module you are encouraged to remove it and fix+-- any warnings in the module. See+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings+-- for details++module Text.Pandoc.Readers.Haddock.Parse (parseString, parseParas) where++import Text.Pandoc.Readers.Haddock.Lex+import Text.Pandoc.Builder+import Text.Pandoc.Shared (trim, trimr)+import Data.Generics (everywhere, mkT)+import Data.Char  (isSpace)+import Data.Maybe (fromMaybe)+import Data.List  (stripPrefix, intersperse)+import Data.Monoid (mempty, mconcat)+import qualified Data.Array as Happy_Data_Array+import qualified GHC.Exts as Happy_GHC_Exts++-- parser produced by Happy Version 1.18.10++newtype HappyAbsSyn  = HappyAbsSyn HappyAny+#if __GLASGOW_HASKELL__ >= 607+type HappyAny = Happy_GHC_Exts.Any+#else+type HappyAny = forall a . a+#endif+happyIn5 :: (Blocks) -> (HappyAbsSyn )+happyIn5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn5 #-}+happyOut5 :: (HappyAbsSyn ) -> (Blocks)+happyOut5 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut5 #-}+happyIn6 :: (Blocks) -> (HappyAbsSyn )+happyIn6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn6 #-}+happyOut6 :: (HappyAbsSyn ) -> (Blocks)+happyOut6 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut6 #-}+happyIn7 :: (Blocks) -> (HappyAbsSyn )+happyIn7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn7 #-}+happyOut7 :: (HappyAbsSyn ) -> (Blocks)+happyOut7 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut7 #-}+happyIn8 :: (Blocks) -> (HappyAbsSyn )+happyIn8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn8 #-}+happyOut8 :: (HappyAbsSyn ) -> (Blocks)+happyOut8 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut8 #-}+happyIn9 :: ((Inlines, [Blocks])) -> (HappyAbsSyn )+happyIn9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn9 #-}+happyOut9 :: (HappyAbsSyn ) -> ((Inlines, [Blocks]))+happyOut9 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut9 #-}+happyIn10 :: (Blocks) -> (HappyAbsSyn )+happyIn10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn10 #-}+happyOut10 :: (HappyAbsSyn ) -> (Blocks)+happyOut10 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut10 #-}+happyIn11 :: (String) -> (HappyAbsSyn )+happyIn11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn11 #-}+happyOut11 :: (HappyAbsSyn ) -> (String)+happyOut11 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut11 #-}+happyIn12 :: (Blocks) -> (HappyAbsSyn )+happyIn12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn12 #-}+happyOut12 :: (HappyAbsSyn ) -> (Blocks)+happyOut12 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut12 #-}+happyIn13 :: (Blocks) -> (HappyAbsSyn )+happyIn13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn13 #-}+happyOut13 :: (HappyAbsSyn ) -> (Blocks)+happyOut13 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut13 #-}+happyIn14 :: (Blocks) -> (HappyAbsSyn )+happyIn14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn14 #-}+happyOut14 :: (HappyAbsSyn ) -> (Blocks)+happyOut14 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut14 #-}+happyIn15 :: (String) -> (HappyAbsSyn )+happyIn15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn15 #-}+happyOut15 :: (HappyAbsSyn ) -> (String)+happyOut15 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut15 #-}+happyIn16 :: (Inlines) -> (HappyAbsSyn )+happyIn16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn16 #-}+happyOut16 :: (HappyAbsSyn ) -> (Inlines)+happyOut16 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut16 #-}+happyIn17 :: (Inlines) -> (HappyAbsSyn )+happyIn17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn17 #-}+happyOut17 :: (HappyAbsSyn ) -> (Inlines)+happyOut17 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut17 #-}+happyIn18 :: (Inlines) -> (HappyAbsSyn )+happyIn18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn18 #-}+happyOut18 :: (HappyAbsSyn ) -> (Inlines)+happyOut18 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut18 #-}+happyIn19 :: (Inlines) -> (HappyAbsSyn )+happyIn19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn19 #-}+happyOut19 :: (HappyAbsSyn ) -> (Inlines)+happyOut19 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut19 #-}+happyIn20 :: (String) -> (HappyAbsSyn )+happyIn20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyIn20 #-}+happyOut20 :: (HappyAbsSyn ) -> (String)+happyOut20 x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOut20 #-}+happyInTok :: (LToken) -> (HappyAbsSyn )+happyInTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyInTok #-}+happyOutTok :: (HappyAbsSyn ) -> (LToken)+happyOutTok x = Happy_GHC_Exts.unsafeCoerce# x+{-# INLINE happyOutTok #-}+++happyActOffsets :: HappyAddr+happyActOffsets = HappyA# "\xff\xff\x31\x00\x11\x00\x7b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x7c\x00\x00\x00\x31\x00\x00\x00\x6d\x00\x31\x00\x6a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x21\x00\x21\x00\x6f\x00\x00\x00\x60\x00\x00\x00\x00\x00\x68\x00\x68\x00\x67\x00\xff\xff\x00\x00\xff\xff\x5e\x00\x00\x00\x00\x00\x00\x00\x5c\x00\x4b\x00\x4e\x00\x3d\x00\x6d\x00\x6d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x31\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyGotoOffsets :: HappyAddr+happyGotoOffsets = HappyA# "\x63\x00\x98\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x28\x00\x00\x00\x6c\x00\x00\x00\x1e\x00\x35\x00\x2e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x94\x00\x8a\x00\x2f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x54\x00\x00\x00\x45\x00\x1b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x00\x00\x00\x13\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x30\x00\x00\x00\x00\x00\x00\x00\xf9\xff\x00\x00\x00\x00\x00\x00\x00\x00"#++happyDefActions :: HappyAddr+happyDefActions = HappyA# "\xfa\xff\x00\x00\x00\x00\x00\x00\xf9\xff\xf8\xff\xf7\xff\xf6\xff\xf1\xff\xf0\xff\xef\xff\xea\xff\xf2\xff\xe4\xff\xe3\xff\x00\x00\x00\x00\x00\x00\xdc\xff\xdb\xff\xda\xff\xdd\xff\x00\x00\x00\x00\xed\xff\xec\xff\x00\x00\xd9\xff\xde\xff\x00\x00\x00\x00\xfb\xff\xfa\xff\xfc\xff\xfa\xff\xe8\xff\xee\xff\xf4\xff\xf5\xff\x00\x00\xd7\xff\x00\x00\x00\x00\xdf\xff\x00\x00\xe5\xff\xeb\xff\xe1\xff\xe0\xff\xe2\xff\x00\x00\xd6\xff\xd8\xff\xe9\xff\xe6\xff\xfd\xff\xe7\xff\xf3\xff"#++happyCheck :: HappyAddr+happyCheck = HappyA# "\xff\xff\x02\x00\x03\x00\x0a\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x12\x00\x13\x00\x02\x00\x03\x00\x0f\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x0c\x00\x0d\x00\x0e\x00\x0d\x00\x0e\x00\x11\x00\x02\x00\x13\x00\x0a\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0d\x00\x0e\x00\x0c\x00\x0d\x00\x0e\x00\x08\x00\x09\x00\x11\x00\x02\x00\x13\x00\x06\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0b\x00\x0c\x00\x0f\x00\x0e\x00\x02\x00\x0b\x00\x0c\x00\x11\x00\x0e\x00\x13\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x0b\x00\x0c\x00\x04\x00\x0e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x13\x00\x0b\x00\x0c\x00\x05\x00\x0e\x00\x00\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0f\x00\x0b\x00\x0c\x00\x10\x00\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0b\x00\x0c\x00\x12\x00\x0e\x00\x0c\x00\x14\x00\x13\x00\x11\x00\x12\x00\x13\x00\x01\x00\x02\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0e\x00\x0b\x00\x0c\x00\x12\x00\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\xff\xff\x0b\x00\x0c\x00\xff\xff\x0e\x00\x0b\x00\x0c\x00\xff\xff\x0e\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"#++happyTable :: HappyAddr+happyTable = HappyA# "\x00\x00\x10\x00\x11\x00\x38\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x2f\x00\x2b\x00\x1c\x00\x21\x00\x1d\x00\x10\x00\x11\x00\x33\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x17\x00\x18\x00\x19\x00\x1a\x00\x1b\x00\x30\x00\x2b\x00\x1c\x00\x10\x00\x1d\x00\x35\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2a\x00\x2b\x00\x19\x00\x1a\x00\x1b\x00\x2e\x00\x0b\x00\x1c\x00\x10\x00\x1d\x00\x24\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x39\x00\x0d\x00\x27\x00\x0e\x00\x32\x00\x29\x00\x0d\x00\x1c\x00\x0e\x00\x1d\x00\x37\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x37\x00\x0c\x00\x0d\x00\x33\x00\x0e\x00\x21\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x29\x00\x0c\x00\x0d\x00\x35\x00\x0e\x00\x1e\x00\x1f\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x37\x00\x0c\x00\x0d\x00\x24\x00\x0e\x00\x12\x00\x13\x00\x14\x00\x15\x00\x16\x00\x2d\x00\x0d\x00\x23\x00\x0e\x00\x19\x00\xff\xff\x29\x00\x1c\x00\x2d\x00\x1d\x00\x03\x00\x04\x00\x05\x00\x06\x00\x07\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x1b\x00\x0c\x00\x0d\x00\x23\x00\x0e\x00\x25\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x0d\x00\x00\x00\x0e\x00\x26\x00\x08\x00\x09\x00\x0a\x00\x0b\x00\x00\x00\x0c\x00\x0d\x00\x00\x00\x0e\x00\x1d\x00\x0d\x00\x00\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"#++happyReduceArr = Happy_Data_Array.array (2, 41) [+	(2 , happyReduce_2),+	(3 , happyReduce_3),+	(4 , happyReduce_4),+	(5 , happyReduce_5),+	(6 , happyReduce_6),+	(7 , happyReduce_7),+	(8 , happyReduce_8),+	(9 , happyReduce_9),+	(10 , happyReduce_10),+	(11 , happyReduce_11),+	(12 , happyReduce_12),+	(13 , happyReduce_13),+	(14 , happyReduce_14),+	(15 , happyReduce_15),+	(16 , happyReduce_16),+	(17 , happyReduce_17),+	(18 , happyReduce_18),+	(19 , happyReduce_19),+	(20 , happyReduce_20),+	(21 , happyReduce_21),+	(22 , happyReduce_22),+	(23 , happyReduce_23),+	(24 , happyReduce_24),+	(25 , happyReduce_25),+	(26 , happyReduce_26),+	(27 , happyReduce_27),+	(28 , happyReduce_28),+	(29 , happyReduce_29),+	(30 , happyReduce_30),+	(31 , happyReduce_31),+	(32 , happyReduce_32),+	(33 , happyReduce_33),+	(34 , happyReduce_34),+	(35 , happyReduce_35),+	(36 , happyReduce_36),+	(37 , happyReduce_37),+	(38 , happyReduce_38),+	(39 , happyReduce_39),+	(40 , happyReduce_40),+	(41 , happyReduce_41)+	]++happy_n_terms = 21 :: Int+happy_n_nonterms = 16 :: Int++happyReduce_2 = happySpecReduce_3  0# happyReduction_2+happyReduction_2 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut6 happy_x_1 of { happy_var_1 -> +	case happyOut5 happy_x_3 of { happy_var_3 -> +	happyIn5+		 (happy_var_1 <> happy_var_3+	)}}++happyReduce_3 = happySpecReduce_2  0# happyReduction_3+happyReduction_3 happy_x_2+	happy_x_1+	 =  case happyOut5 happy_x_2 of { happy_var_2 -> +	happyIn5+		 (happy_var_2+	)}++happyReduce_4 = happySpecReduce_1  0# happyReduction_4+happyReduction_4 happy_x_1+	 =  case happyOut6 happy_x_1 of { happy_var_1 -> +	happyIn5+		 (happy_var_1+	)}++happyReduce_5 = happySpecReduce_0  0# happyReduction_5+happyReduction_5  =  happyIn5+		 (mempty+	)++happyReduce_6 = happySpecReduce_1  1# happyReduction_6+happyReduction_6 happy_x_1+	 =  case happyOut7 happy_x_1 of { happy_var_1 -> +	happyIn6+		 (bulletList [happy_var_1]+	)}++happyReduce_7 = happySpecReduce_1  1# happyReduction_7+happyReduction_7 happy_x_1+	 =  case happyOut8 happy_x_1 of { happy_var_1 -> +	happyIn6+		 (orderedList [happy_var_1]+	)}++happyReduce_8 = happySpecReduce_1  1# happyReduction_8+happyReduction_8 happy_x_1+	 =  case happyOut9 happy_x_1 of { happy_var_1 -> +	happyIn6+		 (definitionList [happy_var_1]+	)}++happyReduce_9 = happySpecReduce_1  1# happyReduction_9+happyReduction_9 happy_x_1+	 =  case happyOut10 happy_x_1 of { happy_var_1 -> +	happyIn6+		 (happy_var_1+	)}++happyReduce_10 = happySpecReduce_2  2# happyReduction_10+happyReduction_10 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn7+		 (happy_var_2+	)}++happyReduce_11 = happySpecReduce_2  3# happyReduction_11+happyReduction_11 happy_x_2+	happy_x_1+	 =  case happyOut10 happy_x_2 of { happy_var_2 -> +	happyIn8+		 (happy_var_2+	)}++happyReduce_12 = happyReduce 4# 4# happyReduction_12+happyReduction_12 (happy_x_4 `HappyStk`+	happy_x_3 `HappyStk`+	happy_x_2 `HappyStk`+	happy_x_1 `HappyStk`+	happyRest)+	 = case happyOut16 happy_x_2 of { happy_var_2 -> +	case happyOut16 happy_x_4 of { happy_var_4 -> +	happyIn9+		 ((trimInlines happy_var_2, [plain $ trimInlines happy_var_4])+	) `HappyStk` happyRest}}++happyReduce_13 = happySpecReduce_1  5# happyReduction_13+happyReduction_13 happy_x_1+	 =  case happyOut16 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (para' happy_var_1+	)}++happyReduce_14 = happySpecReduce_1  5# happyReduction_14+happyReduction_14 happy_x_1+	 =  case happyOut11 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (codeBlockWith ([], ["haskell"], []) happy_var_1+	)}++happyReduce_15 = happySpecReduce_1  5# happyReduction_15+happyReduction_15 happy_x_1+	 =  case happyOut12 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (happy_var_1+	)}++happyReduce_16 = happySpecReduce_1  5# happyReduction_16+happyReduction_16 happy_x_1+	 =  case happyOut13 happy_x_1 of { happy_var_1 -> +	happyIn10+		 (happy_var_1+	)}++happyReduce_17 = happySpecReduce_2  6# happyReduction_17+happyReduction_17 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokBirdTrack happy_var_1,_)) -> +	case happyOut11 happy_x_2 of { happy_var_2 -> +	happyIn11+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_18 = happySpecReduce_1  6# happyReduction_18+happyReduction_18 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokBirdTrack happy_var_1,_)) -> +	happyIn11+		 (happy_var_1+	)}++happyReduce_19 = happySpecReduce_1  7# happyReduction_19+happyReduction_19 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokProperty happy_var_1,_)) -> +	happyIn12+		 (makeProperty happy_var_1+	)}++happyReduce_20 = happySpecReduce_2  8# happyReduction_20+happyReduction_20 happy_x_2+	happy_x_1+	 =  case happyOut14 happy_x_1 of { happy_var_1 -> +	case happyOut13 happy_x_2 of { happy_var_2 -> +	happyIn13+		 (happy_var_1 <> happy_var_2+	)}}++happyReduce_21 = happySpecReduce_1  8# happyReduction_21+happyReduction_21 happy_x_1+	 =  case happyOut14 happy_x_1 of { happy_var_1 -> +	happyIn13+		 (happy_var_1+	)}++happyReduce_22 = happySpecReduce_3  9# happyReduction_22+happyReduction_22 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokExamplePrompt happy_var_1,_)) -> +	case happyOutTok happy_x_2 of { ((TokExampleExpression happy_var_2,_)) -> +	case happyOut15 happy_x_3 of { happy_var_3 -> +	happyIn14+		 (makeExample happy_var_1 happy_var_2 (lines happy_var_3)+	)}}}++happyReduce_23 = happySpecReduce_2  9# happyReduction_23+happyReduction_23 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokExamplePrompt happy_var_1,_)) -> +	case happyOutTok happy_x_2 of { ((TokExampleExpression happy_var_2,_)) -> +	happyIn14+		 (makeExample happy_var_1 happy_var_2 []+	)}}++happyReduce_24 = happySpecReduce_2  10# happyReduction_24+happyReduction_24 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokExampleResult happy_var_1,_)) -> +	case happyOut15 happy_x_2 of { happy_var_2 -> +	happyIn15+		 (happy_var_1 ++ happy_var_2+	)}}++happyReduce_25 = happySpecReduce_1  10# happyReduction_25+happyReduction_25 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokExampleResult happy_var_1,_)) -> +	happyIn15+		 (happy_var_1+	)}++happyReduce_26 = happySpecReduce_2  11# happyReduction_26+happyReduction_26 happy_x_2+	happy_x_1+	 =  case happyOut17 happy_x_1 of { happy_var_1 -> +	case happyOut16 happy_x_2 of { happy_var_2 -> +	happyIn16+		 (happy_var_1 <> happy_var_2+	)}}++happyReduce_27 = happySpecReduce_1  11# happyReduction_27+happyReduction_27 happy_x_1+	 =  case happyOut17 happy_x_1 of { happy_var_1 -> +	happyIn16+		 (happy_var_1+	)}++happyReduce_28 = happySpecReduce_1  12# happyReduction_28+happyReduction_28 happy_x_1+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> +	happyIn17+		 (happy_var_1+	)}++happyReduce_29 = happySpecReduce_3  12# happyReduction_29+happyReduction_29 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_2 of { happy_var_2 -> +	happyIn17+		 (monospace happy_var_2+	)}++happyReduce_30 = happySpecReduce_2  13# happyReduction_30+happyReduction_30 happy_x_2+	happy_x_1+	 =  case happyOut18 happy_x_2 of { happy_var_2 -> +	happyIn18+		 (linebreak <> happy_var_2+	)}++happyReduce_31 = happySpecReduce_2  13# happyReduction_31+happyReduction_31 happy_x_2+	happy_x_1+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> +	case happyOut18 happy_x_2 of { happy_var_2 -> +	happyIn18+		 (happy_var_1 <> happy_var_2+	)}}++happyReduce_32 = happySpecReduce_1  13# happyReduction_32+happyReduction_32 happy_x_1+	 =  case happyOut19 happy_x_1 of { happy_var_1 -> +	happyIn18+		 (happy_var_1+	)}++happyReduce_33 = happySpecReduce_1  14# happyReduction_33+happyReduction_33 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> +	happyIn19+		 (text happy_var_1+	)}++happyReduce_34 = happySpecReduce_1  14# happyReduction_34+happyReduction_34 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokEmphasis happy_var_1,_)) -> +	happyIn19+		 (emph (str happy_var_1)+	)}++happyReduce_35 = happySpecReduce_1  14# happyReduction_35+happyReduction_35 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokURL happy_var_1,_)) -> +	happyIn19+		 (makeHyperlink happy_var_1+	)}++happyReduce_36 = happySpecReduce_1  14# happyReduction_36+happyReduction_36 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokPic happy_var_1,_)) -> +	happyIn19+		 (image happy_var_1 happy_var_1 mempty+	)}++happyReduce_37 = happySpecReduce_1  14# happyReduction_37+happyReduction_37 happy_x_1+	 =  happyIn19+		 (mempty+	)++happyReduce_38 = happySpecReduce_1  14# happyReduction_38+happyReduction_38 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokIdent happy_var_1,_)) -> +	happyIn19+		 (codeWith ([], ["haskell"], []) happy_var_1+	)}++happyReduce_39 = happySpecReduce_3  14# happyReduction_39+happyReduction_39 happy_x_3+	happy_x_2+	happy_x_1+	 =  case happyOut20 happy_x_2 of { happy_var_2 -> +	happyIn19+		 (codeWith ([], ["haskell"], []) happy_var_2+	)}++happyReduce_40 = happySpecReduce_1  15# happyReduction_40+happyReduction_40 happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> +	happyIn20+		 (happy_var_1+	)}++happyReduce_41 = happySpecReduce_2  15# happyReduction_41+happyReduction_41 happy_x_2+	happy_x_1+	 =  case happyOutTok happy_x_1 of { ((TokString happy_var_1,_)) -> +	case happyOut20 happy_x_2 of { happy_var_2 -> +	happyIn20+		 (happy_var_1 ++ happy_var_2+	)}}++happyNewToken action sts stk [] =+	happyDoAction 20# notHappyAtAll action sts stk []++happyNewToken action sts stk (tk:tks) =+	let cont i = happyDoAction i tk action sts stk tks in+	case tk of {+	(TokSpecial '/',_) -> cont 1#;+	(TokSpecial '@',_) -> cont 2#;+	(TokDefStart,_) -> cont 3#;+	(TokDefEnd,_) -> cont 4#;+	(TokSpecial '\"',_) -> cont 5#;+	(TokURL happy_dollar_dollar,_) -> cont 6#;+	(TokPic happy_dollar_dollar,_) -> cont 7#;+	(TokAName happy_dollar_dollar,_) -> cont 8#;+	(TokEmphasis happy_dollar_dollar,_) -> cont 9#;+	(TokBullet,_) -> cont 10#;+	(TokNumber,_) -> cont 11#;+	(TokBirdTrack happy_dollar_dollar,_) -> cont 12#;+	(TokProperty happy_dollar_dollar,_) -> cont 13#;+	(TokExamplePrompt happy_dollar_dollar,_) -> cont 14#;+	(TokExampleResult happy_dollar_dollar,_) -> cont 15#;+	(TokExampleExpression happy_dollar_dollar,_) -> cont 16#;+	(TokIdent happy_dollar_dollar,_) -> cont 17#;+	(TokPara,_) -> cont 18#;+	(TokString happy_dollar_dollar,_) -> cont 19#;+	_ -> happyError' (tk:tks)+	}++happyError_ 20# tk tks = happyError' tks+happyError_ _ tk tks = happyError' (tk:tks)++happyThen :: () => Either [LToken] a -> (a -> Either [LToken] b) -> Either [LToken] b+happyThen = (>>=)+happyReturn :: () => a -> Either [LToken] a+happyReturn = (return)+happyThen1 m k tks = (>>=) m (\a -> k a tks)+happyReturn1 :: () => a -> b -> Either [LToken] a+happyReturn1 = \a tks -> (return) a+happyError' :: () => [(LToken)] -> Either [LToken] a+happyError' = happyError++parseParas tks = happySomeParser where+  happySomeParser = happyThen (happyParse 0# tks) (\x -> happyReturn (happyOut5 x))++parseString tks = happySomeParser where+  happySomeParser = happyThen (happyParse 1# tks) (\x -> happyReturn (happyOut16 x))++happySeq = happyDontSeq+++happyError :: [LToken] -> Either [LToken] a+happyError toks = Left toks++para' :: Inlines -> Blocks+para' = para . trimInlines++monospace :: Inlines -> Inlines+monospace = everywhere (mkT go)+  where+    go (Str s) = Code nullAttr s+    go x = x++-- | Create a `Hyperlink` from given string.+--+-- A hyperlink consists of a URL and an optional label.  The label is separated+-- from the url by one or more whitespace characters.+makeHyperlink :: String -> Inlines+makeHyperlink input = case break isSpace $ trim input of+  (url, "") -> link url url (str url)+  (url, lb) -> link url url (trimInlines $ text lb)++makeProperty :: String -> Blocks+makeProperty s = case trim s of+  'p':'r':'o':'p':'>':xs ->+    codeBlockWith ([], ["property"], []) (dropWhile isSpace xs)+  xs ->+    error $ "makeProperty: invalid input " ++ show xs++-- | Create an 'Example', stripping superfluous characters as appropriate+makeExample :: String -> String -> [String] -> Blocks+makeExample prompt expression result =+    para $ codeWith ([], ["haskell","expr"], []) (trim expression)+        <> linebreak+        <> (mconcat $ intersperse linebreak $ map coder result')+  where+    -- 1. drop trailing whitespace from the prompt, remember the prefix+    prefix = takeWhile isSpace prompt++    -- 2. drop, if possible, the exact same sequence of whitespace+    -- characters from each result line+    --+    -- 3. interpret lines that only contain the string "<BLANKLINE>" as an+    -- empty line+    result' = map (substituteBlankLine . tryStripPrefix prefix) result+      where+        tryStripPrefix xs ys = fromMaybe ys $ stripPrefix xs ys++        substituteBlankLine "<BLANKLINE>" = ""+        substituteBlankLine line          = line+    coder = codeWith ([], ["result"], [])+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+{-# LINE 1 "<built-in>" #-}+{-# LINE 1 "<command-line>" #-}+{-# LINE 1 "templates/GenericTemplate.hs" #-}+-- Id: GenericTemplate.hs,v 1.26 2005/01/14 14:47:22 simonmar Exp ++{-# LINE 30 "templates/GenericTemplate.hs" #-}+++data Happy_IntList = HappyCons Happy_GHC_Exts.Int# Happy_IntList++++++{-# LINE 51 "templates/GenericTemplate.hs" #-}++{-# LINE 61 "templates/GenericTemplate.hs" #-}++{-# LINE 70 "templates/GenericTemplate.hs" #-}++infixr 9 `HappyStk`+data HappyStk a = HappyStk a (HappyStk a)++-----------------------------------------------------------------------------+-- starting the parse++happyParse start_state = happyNewToken start_state notHappyAtAll notHappyAtAll++-----------------------------------------------------------------------------+-- Accepting the parse++-- If the current token is 0#, it means we've just accepted a partial+-- parse (a %partial parser).  We must ignore the saved token on the top of+-- the stack in this case.+happyAccept 0# tk st sts (_ `HappyStk` ans `HappyStk` _) =+	happyReturn1 ans+happyAccept j tk st sts (HappyStk ans _) = +	(happyTcHack j (happyTcHack st)) (happyReturn1 ans)++-----------------------------------------------------------------------------+-- Arrays only: do the next action++++happyDoAction i tk st+	= {- nothing -}+++	  case action of+		0#		  -> {- nothing -}+				     happyFail i tk st+		-1# 	  -> {- nothing -}+				     happyAccept i tk st+		n | (n Happy_GHC_Exts.<# (0# :: Happy_GHC_Exts.Int#)) -> {- nothing -}++				     (happyReduceArr Happy_Data_Array.! rule) i tk st+				     where rule = (Happy_GHC_Exts.I# ((Happy_GHC_Exts.negateInt# ((n Happy_GHC_Exts.+# (1# :: Happy_GHC_Exts.Int#))))))+		n		  -> {- nothing -}+++				     happyShift new_state i tk st+				     where (new_state) = (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#))+   where (off)    = indexShortOffAddr happyActOffsets st+         (off_i)  = (off Happy_GHC_Exts.+# i)+	 check  = if (off_i Happy_GHC_Exts.>=# (0# :: Happy_GHC_Exts.Int#))+			then (indexShortOffAddr happyCheck off_i Happy_GHC_Exts.==#  i)+			else False+         (action)+          | check     = indexShortOffAddr happyTable off_i+          | otherwise = indexShortOffAddr happyDefActions st++{-# LINE 130 "templates/GenericTemplate.hs" #-}+++indexShortOffAddr (HappyA# arr) off =+	Happy_GHC_Exts.narrow16Int# i+  where+        i = Happy_GHC_Exts.word2Int# (Happy_GHC_Exts.or# (Happy_GHC_Exts.uncheckedShiftL# high 8#) low)+        high = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr (off' Happy_GHC_Exts.+# 1#)))+        low  = Happy_GHC_Exts.int2Word# (Happy_GHC_Exts.ord# (Happy_GHC_Exts.indexCharOffAddr# arr off'))+        off' = off Happy_GHC_Exts.*# 2#++++++data HappyAddr = HappyA# Happy_GHC_Exts.Addr#+++++-----------------------------------------------------------------------------+-- HappyState data type (not arrays)++{-# LINE 163 "templates/GenericTemplate.hs" #-}++-----------------------------------------------------------------------------+-- Shifting a token++happyShift new_state 0# tk st sts stk@(x `HappyStk` _) =+     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--     trace "shifting the error token" $+     happyDoAction i tk new_state (HappyCons (st) (sts)) (stk)++happyShift new_state i tk st sts stk =+     happyNewToken new_state (HappyCons (st) (sts)) ((happyInTok (tk))`HappyStk`stk)++-- happyReduce is specialised for the common cases.++happySpecReduce_0 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_0 nt fn j tk st@((action)) sts stk+     = happyGoto nt j tk st (HappyCons (st) (sts)) (fn `HappyStk` stk)++happySpecReduce_1 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_1 nt fn j tk _ sts@((HappyCons (st@(action)) (_))) (v1`HappyStk`stk')+     = let r = fn v1 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_2 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_2 nt fn j tk _ (HappyCons (_) (sts@((HappyCons (st@(action)) (_))))) (v1`HappyStk`v2`HappyStk`stk')+     = let r = fn v1 v2 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happySpecReduce_3 i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happySpecReduce_3 nt fn j tk _ (HappyCons (_) ((HappyCons (_) (sts@((HappyCons (st@(action)) (_))))))) (v1`HappyStk`v2`HappyStk`v3`HappyStk`stk')+     = let r = fn v1 v2 v3 in+       happySeq r (happyGoto nt j tk st sts (r `HappyStk` stk'))++happyReduce k i fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyReduce k nt fn j tk st sts stk+     = case happyDrop (k Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) sts of+	 sts1@((HappyCons (st1@(action)) (_))) ->+        	let r = fn stk in  -- it doesn't hurt to always seq here...+       		happyDoSeq r (happyGoto nt j tk st1 sts1 r)++happyMonadReduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonadReduce k nt fn j tk st sts stk =+        happyThen1 (fn stk tk) (\r -> happyGoto nt j tk st1 sts1 (r `HappyStk` drop_stk))+       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++happyMonad2Reduce k nt fn 0# tk st sts stk+     = happyFail 0# tk st sts stk+happyMonad2Reduce k nt fn j tk st sts stk =+       happyThen1 (fn stk tk) (\r -> happyNewToken new_state sts1 (r `HappyStk` drop_stk))+       where (sts1@((HappyCons (st1@(action)) (_)))) = happyDrop k (HappyCons (st) (sts))+             drop_stk = happyDropStk k stk++             (off) = indexShortOffAddr happyGotoOffsets st1+             (off_i) = (off Happy_GHC_Exts.+# nt)+             (new_state) = indexShortOffAddr happyTable off_i+++++happyDrop 0# l = l+happyDrop n (HappyCons (_) (t)) = happyDrop (n Happy_GHC_Exts.-# (1# :: Happy_GHC_Exts.Int#)) t++happyDropStk 0# l = l+happyDropStk n (x `HappyStk` xs) = happyDropStk (n Happy_GHC_Exts.-# (1#::Happy_GHC_Exts.Int#)) xs++-----------------------------------------------------------------------------+-- Moving to a new state after a reduction+++happyGoto nt j tk st = +   {- nothing -}+   happyDoAction j tk new_state+   where (off) = indexShortOffAddr happyGotoOffsets st+         (off_i) = (off Happy_GHC_Exts.+# nt)+         (new_state) = indexShortOffAddr happyTable off_i+++++-----------------------------------------------------------------------------+-- Error recovery (0# is the error token)++-- parse error if we are in recovery and we fail again+happyFail 0# tk old_st _ stk@(x `HappyStk` _) =+     let (i) = (case Happy_GHC_Exts.unsafeCoerce# x of { (Happy_GHC_Exts.I# (i)) -> i }) in+--	trace "failing" $ +        happyError_ i tk++{-  We don't need state discarding for our restricted implementation of+    "error".  In fact, it can cause some bogus parses, so I've disabled it+    for now --SDM++-- discard a state+happyFail  0# tk old_st (HappyCons ((action)) (sts)) +						(saved_tok `HappyStk` _ `HappyStk` stk) =+--	trace ("discarding state, depth " ++ show (length stk))  $+	happyDoAction 0# tk action sts ((saved_tok`HappyStk`stk))+-}++-- Enter error recovery: generate an error token,+--                       save the old token and carry on.+happyFail  i tk (action) sts stk =+--      trace "entering error recovery" $+	happyDoAction 0# tk action sts ( (Happy_GHC_Exts.unsafeCoerce# (Happy_GHC_Exts.I# (i))) `HappyStk` stk)++-- Internal happy errors:++notHappyAtAll :: a+notHappyAtAll = error "Internal Happy error\n"++-----------------------------------------------------------------------------+-- Hack to get the typechecker to accept our action functions+++happyTcHack :: Happy_GHC_Exts.Int# -> a -> a+happyTcHack x y = y+{-# INLINE happyTcHack #-}+++-----------------------------------------------------------------------------+-- Seq-ing.  If the --strict flag is given, then Happy emits +--	happySeq = happyDoSeq+-- otherwise it emits+-- 	happySeq = happyDontSeq++happyDoSeq, happyDontSeq :: a -> b -> b+happyDoSeq   a b = a `seq` b+happyDontSeq a b = b++-----------------------------------------------------------------------------+-- Don't inline any functions from the template.  GHC has a nasty habit+-- of deciding to inline happyGoto everywhere, which increases the size of+-- the generated parser quite a bit.+++{-# NOINLINE happyDoAction #-}+{-# NOINLINE happyTable #-}+{-# NOINLINE happyCheck #-}+{-# NOINLINE happyActOffsets #-}+{-# NOINLINE happyGotoOffsets #-}+{-# NOINLINE happyDefActions #-}++{-# NOINLINE happyShift #-}+{-# NOINLINE happySpecReduce_0 #-}+{-# NOINLINE happySpecReduce_1 #-}+{-# NOINLINE happySpecReduce_2 #-}+{-# NOINLINE happySpecReduce_3 #-}+{-# NOINLINE happyReduce #-}+{-# NOINLINE happyMonadReduce #-}+{-# NOINLINE happyGoto #-}+{-# NOINLINE happyFail #-}++-- end of Happy Template.
man/make-pandoc-man-pages.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} -- Create pandoc.1 man and pandoc_markdown.5 man pages from README import Text.Pandoc import qualified Text.Pandoc.UTF8 as UTF8
man/man1/pandoc.1 view
@@ -1,20 +1,20 @@-.TH PANDOC 1 "January 19, 2013" "Pandoc"+.TH PANDOC 1 "January 19, 2013" "Pandoc User\[aq]s Guide" .SH NAME pandoc - general markup converter .SH SYNOPSIS .PP-pandoc [\f[I]options\f[]][*input\-file*]...+pandoc [\f[I]options\f[]] [\f[I]input\-file\f[]]... .SH DESCRIPTION .PP Pandoc is a Haskell library for converting from one markup format to another, and a command\-line tool that uses this library. It can read markdown and (subsets of) Textile, reStructuredText, HTML,-LaTeX, MediaWiki markup, and DocBook XML; and it can write plain text,-markdown, reStructuredText, XHTML, HTML 5, LaTeX (including beamer slide-shows), ConTeXt, RTF, DocBook XML, OpenDocument XML, ODT, Word docx, GNU-Texinfo, MediaWiki markup, EPUB (v2 or v3), FictionBook2, Textile, groff-man pages, Emacs Org\-Mode, AsciiDoc, and Slidy, Slideous, DZSlides, or-S5 HTML slide shows.+LaTeX, MediaWiki markup, Haddock markup, OPML, and DocBook; and it can+write plain text, markdown, reStructuredText, XHTML, HTML 5, LaTeX+(including beamer slide shows), ConTeXt, RTF, OPML, DocBook,+OpenDocument, ODT, Word docx, GNU Texinfo, MediaWiki markup, EPUB (v2 or+v3), FictionBook2, Textile, groff man pages, Emacs Org\-Mode, AsciiDoc,+and Slidy, Slideous, DZSlides, reveal.js or S5 HTML slide shows. It can also produce PDF output on systems where LaTeX is installed. .PP Pandoc\[aq]s enhanced version of markdown includes syntax for footnotes,@@ -169,11 +169,12 @@ \f[C]markdown_phpextra\f[] (PHP Markdown Extra extended markdown), \f[C]markdown_github\f[] (github extended markdown), \f[C]textile\f[] (Textile), \f[C]rst\f[] (reStructuredText), \f[C]html\f[] (HTML),-\f[C]docbook\f[] (DocBook XML), \f[C]mediawiki\f[] (MediaWiki markup),-or \f[C]latex\f[] (LaTeX).+\f[C]docbook\f[] (DocBook), \f[C]opml\f[] (OPML), \f[C]mediawiki\f[]+(MediaWiki markup), \f[C]haddock\f[] (Haddock markup), or \f[C]latex\f[]+(LaTeX). If \f[C]+lhs\f[] is appended to \f[C]markdown\f[], \f[C]rst\f[],-\f[C]latex\f[], the input will be treated as literate Haskell source:-see Literate Haskell support, below.+\f[C]latex\f[], or \f[C]html\f[], the input will be treated as literate+Haskell source: see Literate Haskell support, below. Markdown syntax extensions can be individually enabled or disabled by appending \f[C]+EXTENSION\f[] or \f[C]\-EXTENSION\f[] to the format name.@@ -199,14 +200,17 @@ \f[C]latex\f[] (LaTeX), \f[C]beamer\f[] (LaTeX beamer slide show), \f[C]context\f[] (ConTeXt), \f[C]man\f[] (groff man), \f[C]mediawiki\f[] (MediaWiki markup), \f[C]textile\f[] (Textile), \f[C]org\f[] (Emacs-Org\-Mode), \f[C]texinfo\f[] (GNU Texinfo), \f[C]docbook\f[] (DocBook-XML), \f[C]opendocument\f[] (OpenDocument XML), \f[C]odt\f[] (OpenOffice-text document), \f[C]docx\f[] (Word docx), \f[C]epub\f[] (EPUB book),+Org\-Mode), \f[C]texinfo\f[] (GNU Texinfo), \f[C]opml\f[] (OPML),+\f[C]docbook\f[] (DocBook), \f[C]opendocument\f[] (OpenDocument),+\f[C]odt\f[] (OpenOffice text document), \f[C]docx\f[] (Word docx),+\f[C]rtf\f[] (rich text format), \f[C]epub\f[] (EPUB v2 book), \f[C]epub3\f[] (EPUB v3), \f[C]fb2\f[] (FictionBook2 e\-book), \f[C]asciidoc\f[] (AsciiDoc), \f[C]slidy\f[] (Slidy HTML and javascript slide show), \f[C]slideous\f[] (Slideous HTML and javascript slide-show), \f[C]dzslides\f[] (HTML5 + javascript slide show), \f[C]s5\f[]-(S5 HTML and javascript slide show), or \f[C]rtf\f[] (rich text format).+show), \f[C]dzslides\f[] (DZSlides HTML5 + javascript slide show),+\f[C]revealjs\f[] (reveal.js HTML5 + javascript slide show), \f[C]s5\f[]+(S5 HTML and javascript slide show), or the path of a custom lua writer+(see Custom writers, below). Note that \f[C]odt\f[], \f[C]epub\f[], and \f[C]epub3\f[] output will not be directed to \f[I]stdout\f[]; an output filename must be specified using the \f[C]\-o/\-\-output\f[] option.@@ -282,8 +286,8 @@ LaTeX, instead of ignoring them. Affects only HTML and LaTeX input. Raw HTML can be printed in markdown, reStructuredText, HTML, Slidy,-Slideous, DZSlides, and S5 output; raw LaTeX can be printed in markdown,-reStructuredText, LaTeX, and ConTeXt output.+Slideous, DZSlides, reveal.js, and S5 output; raw LaTeX can be printed+in markdown, reStructuredText, LaTeX, and ConTeXt output. The default is for the readers to omit untranslatable HTML codes and LaTeX environments. (The LaTeX reader does pass through untranslatable LaTeX@@ -333,6 +337,57 @@ .RS .RE .TP+.B \f[C]\-\-filter=\f[]\f[I]EXECUTABLE\f[]+Specify an executable to be used as a filter transforming the Pandoc AST+after the input is parsed and before the output is written.+The executable should read JSON from stdin and write JSON to stdout.+The JSON must be formatted like pandoc\[aq]s own JSON input and output.+The name of the output format will be passed to the filter as the first+argument.+Hence,+.RS+.IP+.nf+\f[C]+pandoc\ \-\-filter\ ./caps.py\ \-t\ latex+\f[]+.fi+.PP+is equivalent to+.IP+.nf+\f[C]+pandoc\ \-t\ json\ |\ ./caps.py\ latex\ |\ pandoc\ \-f\ json\ \-t\ latex+\f[]+.fi+.PP+The latter form may be useful for debugging filters.+.PP+Filters may be written in any language.+\f[C]Text.Pandoc.JSON\f[] exports \f[C]toJSONFilter\f[] to facilitate+writing filters in Haskell.+Those who would prefer to write filters in python can use the module+\f[C]pandocfilters\f[], installable from PyPI.+See http://github.com/jgm/pandocfilters for the module and several+examples.+Note that the \f[I]EXECUTABLE\f[] will be sought in the user\[aq]s+\f[C]PATH\f[], and not in the working directory, if no directory is+provided.+If you want to run a script in the working directory, preface the+filename with \f[C]\&./\f[].+.RE+.TP+.B \f[C]\-M\f[] \f[I]KEY[=VAL]\f[],+\f[C]\-\-metadata=\f[]\f[I]KEY[:VAL]\f[]+Set the metadata field \f[I]KEY\f[] to the value \f[I]VAL\f[] after+parsing.+A value specified on the command line overrides a value specified in the+document.+Values will be interpreted as raw strings.+If no value is specified, the value will be treated as Boolean true.+.RS+.RE+.TP .B \f[C]\-\-normalize\f[] Normalize the document after reading: merge adjacent \f[C]Str\f[] or \f[C]Emph\f[] elements, for example, and remove repeated@@ -395,6 +450,11 @@ .RS .RE .TP+.B \f[C]\-\-print\-default\-data\-file=\f[]\f[I]FILE\f[]+Print a default data file.+.RS+.RE+.TP .B \f[C]\-\-no\-wrap\f[] Disable text wrapping in output. By default, text is wrapped appropriately for the output format.@@ -411,7 +471,8 @@ \f[C]latex\f[], \f[C]context\f[], and \f[C]rst\f[], an instruction to create one) in the output document. This option has no effect on \f[C]man\f[], \f[C]docbook\f[],-\f[C]slidy\f[], \f[C]slideous\f[], or \f[C]s5\f[] output.+\f[C]slidy\f[], \f[C]slideous\f[], \f[C]s5\f[], \f[C]docx\f[], or+\f[C]odt\f[] output. .RS .RE .TP@@ -420,7 +481,6 @@ contents. The default is 3 (which means that level 1, 2, and 3 headers will be listed in the contents).-Implies \f[C]\-\-toc\f[]. .RS .RE .TP@@ -485,12 +545,14 @@ browser. This option works only with HTML output formats, including \f[C]html\f[], \f[C]html5\f[], \f[C]html+lhs\f[], \f[C]html5+lhs\f[],-\f[C]s5\f[], \f[C]slidy\f[], \f[C]slideous\f[], and \f[C]dzslides\f[].+\f[C]s5\f[], \f[C]slidy\f[], \f[C]slideous\f[], \f[C]dzslides\f[], and+\f[C]revealjs\f[]. Scripts, images, and stylesheets at absolute URLs will be downloaded; those at relative URLs will be sought first relative to the working directory, then relative to the user data directory (see \f[C]\-\-data\-dir\f[]), and finally relative to pandoc\[aq]s default data directory.+\f[C]\-\-self\-contained\f[] does not work with \f[C]\-\-mathjax\f[]. .RS .RE .TP@@ -526,7 +588,7 @@ .RE .TP .B \f[C]\-\-atx\-headers\f[]-Use ATX style headers in markdown output.+Use ATX style headers in markdown and asciidoc output. The default is to use setext\-style headers for levels 1\-2, and then ATX headers. .RS@@ -667,11 +729,11 @@ for a file \f[C]reference.docx\f[] in the user data directory (see \f[C]\-\-data\-dir\f[]). If this is not found either, sensible defaults will be used.-The following styles are used by pandoc: [paragraph] Normal, Title,-Authors, Date, Heading 1, Heading 2, Heading 3, Heading 4, Heading 5,-Block Quote, Definition Term, Definition, Body Text, Table Caption,-Image Caption; [character] Default Paragraph Font, Body Text Char,-Verbatim Char, Footnote Ref, Link.+The following styles are used by pandoc: [paragraph] Normal, Compact,+Title, Authors, Date, Heading 1, Heading 2, Heading 3, Heading 4,+Heading 5, Block Quote, Definition Term, Definition, Body Text, Table+Caption, Image Caption; [character] Default Paragraph Font, Body Text+Char, Verbatim Char, Footnote Ref, Link. .RS .RE .TP@@ -774,76 +836,27 @@ .SS Citation rendering .TP .B \f[C]\-\-bibliography=\f[]\f[I]FILE\f[]-Specify bibliography database to be used in resolving citations.-The database type will be determined from the extension of-\f[I]FILE\f[], which may be \f[C]\&.mods\f[] (MODS format),-\f[C]\&.bib\f[] (BibLaTeX format, which will normally work for BibTeX-files as well), \f[C]\&.bibtex\f[] (BibTeX format), \f[C]\&.ris\f[] (RIS-format), \f[C]\&.enl\f[] (EndNote format), \f[C]\&.xml\f[] (EndNote XML-format), \f[C]\&.wos\f[] (ISI format), \f[C]\&.medline\f[] (MEDLINE-format), \f[C]\&.copac\f[] (Copac format), or \f[C]\&.json\f[] (citeproc-JSON).-If you want to use multiple bibliographies, just use this option-repeatedly.+Set the \f[C]bibliography\f[] field in the document\[aq]s metadata to+\f[I]FILE\f[], overriding any value set in the metadata, and process+citations using \f[C]pandoc\-citeproc\f[].+(This is equivalent to+\f[C]\-\-metadata\ bibliography=FILE\ \-\-filter\ pandoc\-citeproc\f[].) .RS .RE .TP .B \f[C]\-\-csl=\f[]\f[I]FILE\f[]-Specify CSL style to be used in formatting citations and the-bibliography.-If \f[I]FILE\f[] is not found, pandoc will look for it in+Set the \f[C]csl\f[] field in the document\[aq]s metadata to+\f[I]FILE\f[], overriding any value set in the metadata.+(This is equivalent to \f[C]\-\-metadata\ csl=FILE\f[].) .RS-.IP-.nf-\f[C]-$HOME/.csl-\f[]-.fi-.PP-in unix,-.IP-.nf-\f[C]-C:\\Documents\ And\ Settings\\USERNAME\\Application\ Data\\csl-\f[]-.fi-.PP-in Windows XP, and-.IP-.nf-\f[C]-C:\\Users\\USERNAME\\AppData\\Roaming\\csl-\f[]-.fi-.PP-in Windows 7.-If the \f[C]\-\-csl\f[] option is not specified, pandoc will use a-default style: either \f[C]default.csl\f[] in the user data directory-(see \f[C]\-\-data\-dir\f[]), or, if that is not present, the Chicago-author\-date style. .RE .TP .B \f[C]\-\-citation\-abbreviations=\f[]\f[I]FILE\f[]-Specify a file containing abbreviations for journal titles and other-bibliographic fields (indicated by setting \f[C]form="short"\f[] in the-CSL node for the field).-The format is described at-http://citationstylist.org/2011/10/19/abbreviations\-for\-zotero\-test\-release/.-Here is a short example:+Set the \f[C]citation\-abbreviations\f[] field in the document\[aq]s+metadata to \f[I]FILE\f[], overriding any value set in the metadata.+(This is equivalent to+\f[C]\-\-metadata\ citation\-abbreviations=FILE\f[].) .RS-.IP-.nf-\f[C]-{\ "default":\ {-\ \ \ \ "container\-title":\ {-\ \ \ \ \ \ \ \ \ \ \ \ "Lloyd\[aq]s\ Law\ Reports":\ "Lloyd\[aq]s\ Rep",-\ \ \ \ \ \ \ \ \ \ \ \ "Estates\ Gazette":\ "EG",-\ \ \ \ \ \ \ \ \ \ \ \ "Scots\ Law\ Times":\ "SLT"-\ \ \ \ }-\ \ }-}-\f[]-.fi .RE .TP .B \f[C]\-\-natbib\f[]@@ -997,7 +1010,9 @@ To write a literal \f[C]$\f[] in a template, use \f[C]$$\f[]. .PP Some variables are set automatically by pandoc.-These vary somewhat depending on the output format, but include:+These vary somewhat depending on the output format, but include metadata+fields (such as \f[C]title\f[], \f[C]author\f[], and \f[C]date\f[]) as+well as the following: .TP .B \f[C]header\-includes\f[] contents specified by \f[C]\-H/\-\-include\-in\-header\f[] (may have@@ -1028,22 +1043,6 @@ .RS .RE .TP-.B \f[C]title\f[]-title of document, as specified in title block-.RS-.RE-.TP-.B \f[C]author\f[]-author of document, as specified in title block (may have multiple-values)-.RS-.RE-.TP-.B \f[C]date\f[]-date of document, as specified in title block-.RS-.RE-.TP .B \f[C]lang\f[] language code for HTML or LaTeX documents .RS@@ -1065,6 +1064,21 @@ .RS .RE .TP+.B \f[C]revealjs\-url\f[]+base URL for reveal.js documents (defaults to \f[C]reveal.js\f[])+.RS+.RE+.TP+.B \f[C]theme\f[]+reveal.js or LaTeX beamer theme+.RS+.RE+.TP+.B \f[C]transition\f[]+reveal.js transition+.RS+.RE+.TP .B \f[C]fontsize\f[] font size (10pt, 11pt, 12pt) for LaTeX documents .RS@@ -1075,6 +1089,12 @@ .RS .RE .TP+.B \f[C]classoption\f[]+option for LaTeX documentclass, e.g.+\f[C]oneside\f[]; may be repeated for multiple options+.RS+.RE+.TP .B \f[C]geometry\f[] options for LaTeX \f[C]geometry\f[] class, e.g. \f[C]margin=1in\f[]; may be repeated for multiple options@@ -1087,13 +1107,13 @@ .RS .RE .TP-.B \f[C]theme\f[]-theme for LaTeX beamer documents+.B \f[C]colortheme\f[]+colortheme for LaTeX beamer documents .RS .RE .TP-.B \f[C]colortheme\f[]-colortheme for LaTeX beamer documents+.B \f[C]fonttheme\f[]+fonttheme for LaTeX beamer documents .RS .RE .TP@@ -1109,14 +1129,39 @@ .RS .RE .TP+.B \f[C]citecolor\f[]+color for citation links in LaTeX documents+.RS+.RE+.TP .B \f[C]links\-as\-notes\f[] causes links to be printed as footnotes in LaTeX documents .RS .RE+.TP+.B \f[C]biblio\-style\f[]+bibliography style in LaTeX, when used with \f[C]\-\-natbib\f[]+.RS+.RE+.TP+.B \f[C]section\f[]+section number in man pages+.RS+.RE+.TP+.B \f[C]header\f[]+header in man pages+.RS+.RE+.TP+.B \f[C]footer\f[]+footer in man pages+.RS+.RE .PP Variables may be set at the command line using the \f[C]\-V/\-\-variable\f[] option.-This allows users to include custom variables in their templates.+Variables set in this way override metadata fields with the same name. .PP Templates may contain conditionals. The syntax is as follows:@@ -1157,6 +1202,16 @@ \f[] .fi .PP+A dot can be used to select a field of a variable that takes an object+as its value.+So, for example:+.IP+.nf+\f[C]+$author.name$\ ($author.affiliation$)+\f[]+.fi+.PP If you use custom templates, you may need to revise them as pandoc changes. We recommend tracking the changes in the default templates, and@@ -1164,115 +1219,12 @@ An easy way to do this is to fork the pandoc\-templates repository (http://github.com/jgm/pandoc\-templates) and merge in changes after each pandoc release.-.SH NON\-PANDOC EXTENSIONS-.PP-The following markdown syntax extensions are not enabled by default in-pandoc, but may be enabled by adding \f[C]+EXTENSION\f[] to the format-name, where \f[C]EXTENSION\f[] is the name of the extension.-Thus, for example, \f[C]markdown+hard_line_breaks\f[] is markdown with-hard line breaks.-.PP-\f[B]Extension: \f[C]hard_line_breaks\f[]\f[]-.PD 0-.P-.PD-Causes all newlines within a paragraph to be interpreted as hard line-breaks instead of spaces.-.PP-\f[B]Extension: \f[C]tex_math_single_backslash\f[]\f[]-.PD 0-.P-.PD-Causes anything between \f[C]\\(\f[] and \f[C]\\)\f[] to be interpreted-as inline TeX math, and anything between \f[C]\\[\f[] and \f[C]\\]\f[]-to be interpreted as display TeX math.-Note: a drawback of this extension is that it precludes escaping-\f[C](\f[] and \f[C][\f[].-.PP-\f[B]Extension: \f[C]tex_math_double_backslash\f[]\f[]-.PD 0-.P-.PD-Causes anything between \f[C]\\\\(\f[] and \f[C]\\\\)\f[] to be-interpreted as inline TeX math, and anything between \f[C]\\\\[\f[] and-\f[C]\\\\]\f[] to be interpreted as display TeX math.-.PP-\f[B]Extension: \f[C]markdown_attribute\f[]\f[]-.PD 0-.P-.PD-By default, pandoc interprets material inside block\-level tags as-markdown.-This extension changes the behavior so that markdown is only parsed-inside block\-level tags if the tags have the attribute-\f[C]markdown=1\f[].-.PP-\f[B]Extension: \f[C]mmd_title_block\f[]\f[]-.PD 0-.P-.PD-Enables a MultiMarkdown style title block at the top of the document,-for example:-.IP-.nf-\f[C]-Title:\ \ \ My\ title-Author:\ \ John\ Doe-Date:\ \ \ \ September\ 1,\ 2008-Comment:\ This\ is\ a\ sample\ mmd\ title\ block,\ with-\ \ \ \ \ \ \ \ \ a\ field\ spanning\ multiple\ lines.-\f[]-.fi-.PP-See the MultiMarkdown documentation for details.-Note that only title, author, and date are recognized; other fields are-simply ignored by pandoc.-If \f[C]pandoc_title_block\f[] is enabled, it will take precedence over-\f[C]mmd_title_block\f[].-.PP-\f[B]Extension: \f[C]abbrevations\f[]\f[]-.PD 0-.P-.PD-Parses PHP Markdown Extra abbreviation keys, like-.IP-.nf-\f[C]-*[HTML]:\ Hyper\ Text\ Markup\ Language-\f[]-.fi-.PP-Note that the pandoc document model does not support abbreviations, so-if this extension is enabled, abbreviation keys are simply skipped (as-opposed to being parsed as paragraphs).-.PP-\f[B]Extension: \f[C]autolink_bare_uris\f[]\f[]-.PD 0-.P-.PD-Makes all absolute URIs into links, even when not surrounded by pointy-braces \f[C]<...>\f[].-.PP-\f[B]Extension: \f[C]link_attributes\f[]\f[]-.PD 0-.P-.PD-Parses multimarkdown style key\-value attributes on link and image-references.-Note that pandoc\[aq]s internal document model provides nowhere to put-these, so they are presently just ignored.-.PP-\f[B]Extension: \f[C]mmd_header_identifiers\f[]\f[]-.PD 0-.P-.PD-Parses multimarkdown style header identifiers (in square brackets, after-the header but before any trailing \f[C]#\f[]s in an ATX header). .SH PRODUCING SLIDE SHOWS WITH PANDOC .PP You can use Pandoc to produce an HTML + javascript slide presentation that can be viewed via a web browser.-There are four ways to do this, using S5, DZSlides, Slidy, or Slideous.+There are five ways to do this, using S5, DZSlides, Slidy, Slideous, or+reveal.js. You can also produce a PDF slide show using LaTeX beamer. .PP Here\[aq]s the markdown source for a simple slide show,@@ -1314,39 +1266,35 @@ \f[] .fi .PP-To produce the slide show, simply type+To produce an HTML/javascript slide show, simply type .IP .nf \f[C]-pandoc\ \-t\ s5\ \-s\ habits.txt\ \-o\ habits.html+pandoc\ \-t\ FORMAT\ \-s\ habits.txt\ \-o\ habits.html \f[] .fi .PP-for S5,-.IP-.nf-\f[C]-pandoc\ \-t\ slidy\ \-s\ habits.txt\ \-o\ habits.html-\f[]-.fi+where \f[C]FORMAT\f[] is either \f[C]s5\f[], \f[C]slidy\f[],+\f[C]slideous\f[], \f[C]dzslides\f[], or \f[C]revealjs\f[]. .PP-for Slidy,-.IP-.nf-\f[C]-pandoc\ \-t\ slideous\ \-s\ habits.txt\ \-o\ habits.html-\f[]-.fi+For Slidy, Slideous, reveal.js, and S5, the file produced by pandoc with+the \f[C]\-s/\-\-standalone\f[] option embeds a link to javascripts and+CSS files, which are assumed to be available at the relative path+\f[C]s5/default\f[] (for S5), \f[C]slideous\f[] (for Slideous),+\f[C]reveal.js\f[] (for reveal.js), or at the Slidy website at+\f[C]w3.org\f[] (for Slidy).+(These paths can be changed by setting the \f[C]slidy\-url\f[],+\f[C]slideous\-url\f[], \f[C]revealjs\-url\f[], or \f[C]s5\-url\f[]+variables; see \f[C]\-\-variable\f[], above.) For DZSlides, the+(relatively short) javascript and css are included in the file by+default. .PP-for Slideous,-.IP-.nf-\f[C]-pandoc\ \-t\ dzslides\ \-s\ habits.txt\ \-o\ habits.html-\f[]-.fi+With all HTML slide formats, the \f[C]\-\-self\-contained\f[] option can+be used to produce a single file that contains all of the data necessary+to display the slide show, including linked scripts, stylesheets,+images, and videos. .PP-for DZSlides, or+To produce a PDF slide show using beamer, type .IP .nf \f[C]@@ -1354,12 +1302,8 @@ \f[] .fi .PP-for beamer.-.PP-With all HTML slide formats, the \f[C]\-\-self\-contained\f[] option can-be used to produce a single file that contains all of the data necessary-to display the slide show, including linked scripts, stylesheets,-images, and videos.+Note that a reveal.js slide show can also be converted to a PDF by+printing it to a file from the browser. .SS Structuring the slide show .PP By default, the \f[I]slide level\f[] is the highest header level in the@@ -1394,15 +1338,11 @@ (In that case, level 1 will be the slide level.) But you can also structure the slide show into sections, as in the example above. .PP-For Slidy, Slideous and S5, the file produced by pandoc with the-\f[C]\-s/\-\-standalone\f[] option embeds a link to javascripts and CSS-files, which are assumed to be available at the relative path-\f[C]s5/default\f[] (for S5) or \f[C]slideous\f[] (for Slideous), or at-the Slidy website at \f[C]w3.org\f[] (for Slidy).-(These paths can be changed by setting the \f[C]slidy\-url\f[],-\f[C]slideous\-url\f[] or \f[C]s5\-url\f[] variables; see-\f[C]\-\-variable\f[], above.) For DZSlides, the (relatively short)-javascript and css are included in the file by default.+Note: in reveal.js slide shows, if slide level is 2, a two\-dimensional+layout will be produced, with level 1 headers building horizontally and+level 2 headers building vertically.+It is not recommended that you use deeper nesting of section levels with+reveal.js. .SS Incremental lists .PP By default, these writers produces lists that display "all at once." If@@ -1421,6 +1361,22 @@ .PP In this way incremental and nonincremental lists can be mixed in a single document.+.SS Inserting pauses+.PP+You can add "pauses" within a slide by including a paragraph containing+three dots, separated by spaces:+.IP+.nf+\f[C]+#\ Slide\ with\ a\ pause++content\ before\ the\ pause++\&.\ .\ .++content\ after\ the\ pause+\f[]+.fi .SS Styling the slides .PP You can change the style of HTML slides by putting customized CSS files@@ -1436,6 +1392,18 @@ For dzslides, the CSS is included in the HTML file itself, and may be modified there. .PP+For reveal.js, themes can be used by setting the \f[C]theme\f[]+variable, for example:+.IP+.nf+\f[C]+\-V\ theme=moon+\f[]+.fi+.PP+Or you can specify a custom stylesheet using the \f[C]\-\-css\f[]+option.+.PP To style beamer slides, you can specify a beamer "theme" or "colortheme" using the \f[C]\-V\f[] option: .IP@@ -1444,6 +1412,21 @@ pandoc\ \-t\ beamer\ habits.txt\ \-V\ theme:Warsaw\ \-o\ habits.pdf \f[] .fi+.PP+Note that header attributes will turn into slide attributes (on a+\f[C]<div>\f[] or \f[C]<section>\f[]) in HTML slide formats, allowing+you to style individual slides.+In Beamer, the only header attribute that affects slides is the+\f[C]allowframebreaks\f[] class, which sets the+\f[C]allowframebreaks\f[] option, causing multiple slides to be created+if the content overfills the frame.+This is recommended especially for bibliographies:+.IP+.nf+\f[C]+#\ References\ {.allowframebreaks}+\f[]+.fi .SH LITERATE HASKELL SUPPORT .PP If you append \f[C]+lhs\f[] (or \f[C]+literate_haskell\f[]) to an@@ -1501,6 +1484,32 @@ .PP writes HTML with the Haskell code in bird tracks, so it can be copied and pasted as literate Haskell source.+.SH CUSTOM WRITERS+.PP+Pandoc can be extended with custom writers written in lua.+(Pandoc includes a lua interpreter, so lua need not be installed+separately.)+.PP+To use a custom writer, simply specify the path to the lua script in+place of the output format.+For example:+.IP+.nf+\f[C]+pandoc\ \-t\ data/sample.lua+\f[]+.fi+.PP+Creating a custom writer requires writing a lua function for each+possible element in a pandoc document.+To get a documented example which you can modify according to your+needs, do+.IP+.nf+\f[C]+pandoc\ \-\-print\-default\-data\-file\ sample.lua+\f[]+.fi .SH AUTHORS .PP © 2006\-2013 John MacFarlane (jgm at berkeley dot edu).@@ -1514,13 +1523,14 @@ Christopher Sawicki, Kelsey Hightower, Masayoshi Takahashi, Antoine Latter, Ralf Stephan, Eric Seidel, B. Scott Michel, Gavin Beatty, Sergey Astanin, Arlo O\[aq]Keeffe, Denis-Laxalde, Brent Yorgey.+Laxalde, Brent Yorgey, David Lazar, Jamie F.+Olson. .SH PANDOC'S MARKDOWN For a complete description of pandoc's extensions to standard markdown, see \f[C]pandoc_markdown\f[] (5). .SH SEE ALSO .PP-\f[C]markdown2pdf\f[] (1), \f[C]pandoc_markdown\f[] (5).+\f[C]pandoc_markdown\f[] (5). .PP The Pandoc source code and all documentation may be downloaded from <http://johnmacfarlane.net/pandoc/>.
man/man1/pandoc.1.template view
@@ -10,7 +10,7 @@ see \f[C]pandoc_markdown\f[] (5). .SH SEE ALSO .PP-\f[C]markdown2pdf\f[] (1), \f[C]pandoc_markdown\f[] (5).+\f[C]pandoc_markdown\f[] (5). .PP The Pandoc source code and all documentation may be downloaded from <http://johnmacfarlane.net/pandoc/>.
man/man5/pandoc_markdown.5 view
@@ -1,5 +1,5 @@ .\"t-.TH PANDOC_MARKDOWN 5 "January 19, 2013" "Pandoc"+.TH PANDOC_MARKDOWN 5 "January 19, 2013" "Pandoc User\[aq]s Guide" .SH NAME pandoc_markdown - markdown syntax for pandoc(1) .SH DESCRIPTION@@ -55,7 +55,7 @@ .SS Setext\-style headers .PP A setext\-style header is a line of text "underlined" with a row of-\f[C]=\f[] signs (for a level one header) of \f[C]\-\f[] signs (for a+\f[C]=\f[] signs (for a level one header) or \f[C]\-\f[] signs (for a level two header): .IP .nf@@ -169,6 +169,8 @@ .IP \[bu] 2 Remove all formatting, links, etc. .IP \[bu] 2+Remove all footnotes.+.IP \[bu] 2 Remove all punctuation, except underscores, hyphens, and periods. .IP \[bu] 2 Replace all spaces and newlines with hyphens.@@ -669,6 +671,16 @@ and, if the list marker is a capital letter with a period, by at least two spaces.[1] .PP+The \f[C]fancy_lists\f[] extension also allows \[aq]\f[C]#\f[]\[aq] to+be used as an ordered list marker in place of a numeral:+.IP+.nf+\f[C]+#.\ one+#.\ two+\f[]+.fi+.PP \f[B]Extension: \f[C]startnum\f[]\f[] .PP Pandoc also pays attention to the type of list marker used, and to the@@ -1215,6 +1227,63 @@ .fi .PP will also have "Version 4.0" in the header.+.SH YAML METADATA BLOCK+.PP+\f[B]Extension: \f[C]yaml_metadata_block\f[]\f[]+.PP+A YAML metadata block is a valid YAML object, delimited by a line of+three hyphens (\f[C]\-\-\-\f[]) at the top and a line of three hyphens+(\f[C]\-\-\-\f[]) or three dots (\f[C]\&...\f[]) at the bottom.+A YAML metadata block may occur anywhere in the document, but if it is+not at the beginning, it must be preceded by a blank line.+.PP+Metadata will be taken from the fields of the YAML object and added to+any existing document metadata.+Metadata can contain lists and objects (nested arbitrarily), but all+string scalars will be interpreted as markdown.+Fields with names ending in an underscore will be ignored by pandoc.+(They may be given a role by external processors.)+.PP+A document may contain multiple metadata blocks.+The metadata fields will be combined through a \f[I]left\-biased+union\f[]: if two metadata blocks attempt to set the same field, the+value from the first block will be taken.+.PP+Note that YAML escaping rules must be followed.+Thus, for example, if a title contains a colon, it must be quoted.+The pipe character (\f[C]|\f[]) can be used to begin an indented block+that will be interpreted literally, without need for escaping.+This form is necessary when the field contains blank lines:+.IP+.nf+\f[C]+\-\-\-+title:\ \ \[aq]This\ is\ the\ title:\ it\ contains\ a\ colon\[aq]+author:+\-\ name:\ Author\ One+\ \ affiliation:\ University\ of\ Somewhere+\-\ name:\ Author\ Two+\ \ affiliation:\ University\ of\ Nowhere+tags:\ [nothing,\ nothingness]+abstract:\ |+\ \ This\ is\ the\ abstract.++\ \ It\ consists\ of\ two\ paragraphs.+\&...+\f[]+.fi+.PP+Template variables will be set automatically from the metadata.+Thus, for example, in writing HTML, the variable \f[C]abstract\f[] will+be set to the HTML equivalent of the markdown in the \f[C]abstract\f[]+field:+.IP+.nf+\f[C]+<p>This\ is\ the\ abstract.</p>+<p>It\ consists\ of\ two\ paragraphs.</p>+\f[]+.fi .SH BACKSLASH ESCAPES .PP \f[B]Extension: \f[C]all_symbols_escapable\f[]\f[]@@ -1886,11 +1955,22 @@ .PP \f[B]Extension: \f[C]citations\f[]\f[] .PP-Pandoc can automatically generate citations and a bibliography in a-number of styles (using Andrea Rossato\[aq]s \f[C]hs\-citeproc\f[]).-In order to use this feature, you will need a bibliographic database in-one of the following formats:+Using an external filter, \f[C]pandoc\-citeproc\f[], pandoc can+automatically generate citations and a bibliography in a number of+styles.+Basic usage is+.IP+.nf+\f[C]+pandoc\ \-\-filter\ pandoc\-citeproc\ myinput.txt+\f[]+.fi .PP+In order to use this feature, you will need to specify a bibliography+file using the \f[C]bibliography\f[] metadata field in a YAML metadata+section.+The bibliography may have any of these formats:+.PP .TS tab(@); l l.@@ -1955,14 +2035,42 @@ Note that \f[C]\&.bib\f[] can generally be used with both BibTeX and BibLaTeX files, but you can use \f[C]\&.bibtex\f[] to force BibTeX. .PP-You will need to specify the bibliography file using the-\f[C]\-\-bibliography\f[] command\-line option (which may be repeated if-you have several bibliographies).+Alternatively you can use a \f[C]references\f[] field in the+document\[aq]s YAML metadata.+This should include an array of YAML\-encoded references, for example:+.IP+.nf+\f[C]+\-\-\-+references:+\-\ id:\ fenner2012a+\ \ title:\ One\-click\ science\ marketing+\ \ author:+\ \ \-\ family:\ Fenner+\ \ \ \ given:\ Martin+\ \ container\-title:\ Nature\ Materials+\ \ volume:\ 11+\ \ URL:\ \[aq]http://dx.doi.org/10.1038/nmat3283\[aq]+\ \ DOI:\ 10.1038/nmat3283+\ \ issue:\ 4+\ \ publisher:\ Nature\ Publishing\ Group+\ \ page:\ 261\-263+\ \ type:\ article\-journal+\ \ issued:+\ \ \ \ year:\ 2012+\ \ \ \ month:\ 3+\&...+\f[]+.fi .PP-By default, pandoc will use a Chicago author\-date format for citations-and references.-To use another style, you will need to use the \f[C]\-\-csl\f[] option-to specify a CSL 1.0 style file.+(The program \f[C]mods2yaml\f[], which comes with+\f[C]pandoc\-citeproc\f[], can help produce these from a MODS reference+collection.)+.PP+By default, \f[C]pandoc\-citeproc\f[] will use a Chicago author\-date+format for citations and references.+To use another style, you will need to specify a CSL 1.0 style file in+the \f[C]csl\f[] metadata field. A primer on creating and modifying CSL styles can be found at http://citationstyles.org/downloads/primer.html. A repository of CSL styles can be found at@@ -2018,6 +2126,173 @@ .fi .PP The bibliography will be inserted after this header.+.SH NON\-PANDOC EXTENSIONS+.PP+The following markdown syntax extensions are not enabled by default in+pandoc, but may be enabled by adding \f[C]+EXTENSION\f[] to the format+name, where \f[C]EXTENSION\f[] is the name of the extension.+Thus, for example, \f[C]markdown+hard_line_breaks\f[] is markdown with+hard line breaks.+.PP+\f[B]Extension: \f[C]lists_without_preceding_blankline\f[]\f[]+.PD 0+.P+.PD+Allow a list to occur right after a paragraph, with no intervening blank+space.+.PP+\f[B]Extension: \f[C]hard_line_breaks\f[]\f[]+.PD 0+.P+.PD+Causes all newlines within a paragraph to be interpreted as hard line+breaks instead of spaces.+.PP+\f[B]Extension: \f[C]ignore_line_breaks\f[]\f[]+.PD 0+.P+.PD+Causes newlines within a paragraph to be ignored, rather than being+treated as spaces or as hard line breaks.+This option is intended for use with East Asian languages where spaces+are not used between words, but text is divided into lines for+readability.+.PP+\f[B]Extension: \f[C]tex_math_single_backslash\f[]\f[]+.PD 0+.P+.PD+Causes anything between \f[C]\\(\f[] and \f[C]\\)\f[] to be interpreted+as inline TeX math, and anything between \f[C]\\[\f[] and \f[C]\\]\f[]+to be interpreted as display TeX math.+Note: a drawback of this extension is that it precludes escaping+\f[C](\f[] and \f[C][\f[].+.PP+\f[B]Extension: \f[C]tex_math_double_backslash\f[]\f[]+.PD 0+.P+.PD+Causes anything between \f[C]\\\\(\f[] and \f[C]\\\\)\f[] to be+interpreted as inline TeX math, and anything between \f[C]\\\\[\f[] and+\f[C]\\\\]\f[] to be interpreted as display TeX math.+.PP+\f[B]Extension: \f[C]markdown_attribute\f[]\f[]+.PD 0+.P+.PD+By default, pandoc interprets material inside block\-level tags as+markdown.+This extension changes the behavior so that markdown is only parsed+inside block\-level tags if the tags have the attribute+\f[C]markdown=1\f[].+.PP+\f[B]Extension: \f[C]mmd_title_block\f[]\f[]+.PD 0+.P+.PD+Enables a MultiMarkdown style title block at the top of the document,+for example:+.IP+.nf+\f[C]+Title:\ \ \ My\ title+Author:\ \ John\ Doe+Date:\ \ \ \ September\ 1,\ 2008+Comment:\ This\ is\ a\ sample\ mmd\ title\ block,\ with+\ \ \ \ \ \ \ \ \ a\ field\ spanning\ multiple\ lines.+\f[]+.fi+.PP+See the MultiMarkdown documentation for details.+Note that only title, author, and date are recognized; other fields are+simply ignored by pandoc.+If \f[C]pandoc_title_block\f[] or \f[C]yaml_metadata_block\f[] is+enabled, it will take precedence over \f[C]mmd_title_block\f[].+.PP+\f[B]Extension: \f[C]abbreviations\f[]\f[]+.PD 0+.P+.PD+Parses PHP Markdown Extra abbreviation keys, like+.IP+.nf+\f[C]+*[HTML]:\ Hyper\ Text\ Markup\ Language+\f[]+.fi+.PP+Note that the pandoc document model does not support abbreviations, so+if this extension is enabled, abbreviation keys are simply skipped (as+opposed to being parsed as paragraphs).+.PP+\f[B]Extension: \f[C]autolink_bare_uris\f[]\f[]+.PD 0+.P+.PD+Makes all absolute URIs into links, even when not surrounded by pointy+braces \f[C]<...>\f[].+.PP+\f[B]Extension: \f[C]ascii_identifiers\f[]\f[]+.PD 0+.P+.PD+Causes the identifiers produced by \f[C]auto_identifiers\f[] to be pure+ASCII.+Accents are stripped off of accented latin letters, and non\-latin+letters are omitted.+.PP+\f[B]Extension: \f[C]link_attributes\f[]\f[]+.PD 0+.P+.PD+Parses multimarkdown style key\-value attributes on link and image+references.+Note that pandoc\[aq]s internal document model provides nowhere to put+these, so they are presently just ignored.+.PP+\f[B]Extension: \f[C]mmd_header_identifiers\f[]\f[]+.PD 0+.P+.PD+Parses multimarkdown style header identifiers (in square brackets, after+the header but before any trailing \f[C]#\f[]s in an ATX header).+.SH MARKDOWN VARIANTS+.PP+In addition to pandoc\[aq]s extended markdown, the following markdown+variants are supported:+.TP+.B \f[C]markdown_phpextra\f[] (PHP Markdown Extra)+\f[C]footnotes\f[], \f[C]pipe_tables\f[], \f[C]raw_html\f[],+\f[C]markdown_attribute\f[], \f[C]fenced_code_blocks\f[],+\f[C]definition_lists\f[], \f[C]intraword_underscores\f[],+\f[C]header_attributes\f[], \f[C]abbreviations\f[].+.RS+.RE+.TP+.B \f[C]markdown_github\f[] (Github\-flavored Markdown)+\f[C]pipe_tables\f[], \f[C]raw_html\f[],+\f[C]tex_math_single_backslash\f[], \f[C]fenced_code_blocks\f[],+\f[C]fenced_code_attributes\f[], \f[C]auto_identifiers\f[],+\f[C]ascii_identifiers\f[], \f[C]backtick_code_blocks\f[],+\f[C]autolink_bare_uris\f[], \f[C]intraword_underscores\f[],+\f[C]strikeout\f[], \f[C]hard_line_breaks\f[]+.RS+.RE+.TP+.B \f[C]markdown_mmd\f[] (MultiMarkdown)+\f[C]pipe_tables\f[] \f[C]raw_html\f[], \f[C]markdown_attribute\f[],+\f[C]link_attributes\f[], \f[C]raw_tex\f[],+\f[C]tex_math_double_backslash\f[], \f[C]intraword_underscores\f[],+\f[C]mmd_title_block\f[], \f[C]footnotes\f[], \f[C]definition_lists\f[],+\f[C]all_symbols_escapable\f[], \f[C]implicit_header_references\f[],+\f[C]auto_identifiers\f[], \f[C]mmd_header_identifiers\f[]+.RS+.RE+.TP+.B \f[C]markdown_strict\f[] (Markdown.pl)+\f[C]raw_html\f[]+.RS+.RE .SH NOTES .SS [1] .PP
pandoc.cabal view
@@ -1,5 +1,5 @@ Name:            pandoc-Version:         1.11.1+Version:         1.12 Cabal-Version:   >= 1.10 Build-Type:      Custom License:         GPL@@ -16,12 +16,14 @@ Description:     Pandoc is a Haskell library for converting from one markup                  format to another, and a command-line tool that uses                  this library. It can read markdown and (subsets of) HTML,-                 reStructuredText, LaTeX, DocBook, MediaWiki markup,-                 and Textile, and it can write markdown, reStructuredText,-                 HTML, LaTeX, ConTeXt, Docbook, OpenDocument, ODT,-                 Word docx, RTF, MediaWiki, Textile, groff man pages,-                 plain text, Emacs Org-Mode, AsciiDoc, EPUB (v2 and v3),-                 FictionBook2, and S5, Slidy and Slideous HTML slide shows.+                 reStructuredText, LaTeX, DocBook, MediaWiki markup, Haddock+                 markup, OPML, and Textile, and it can write markdown,+                 reStructuredText, HTML, LaTeX, ConTeXt, Docbook, OPML,+                 OpenDocument, ODT, Word docx, RTF, MediaWiki, Textile,+                 groff man pages, plain text, Emacs Org-Mode, AsciiDoc,+                 EPUB (v2 and v3), FictionBook2, and several kinds of+                 HTML/javascript slide shows (S5, Slidy, Slideous, DZSlides,+                 reveal.js).                  .                  Pandoc extends standard markdown syntax with footnotes,                  embedded LaTeX, definition lists, tables, and other@@ -38,22 +40,31 @@                  only adding a reader or writer. Data-Files:                  -- templates-                 data/templates/default.html, data/templates/default.html5,-                 data/templates/default.docbook, data/templates/default.beamer,+                 data/templates/default.html,+                 data/templates/default.html5,+                 data/templates/default.docbook,+                 data/templates/default.beamer,                  data/templates/default.opendocument,+                 data/templates/default.opml, 		 data/templates/default.latex,                  data/templates/default.context, 		 data/templates/default.texinfo,                  data/templates/default.man, 		 data/templates/default.markdown,-                 data/templates/default.rst, data/templates/default.plain,-                 data/templates/default.mediawiki, data/templates/default.rtf,-                 data/templates/default.s5, data/templates/default.slidy,+                 data/templates/default.rst,+                 data/templates/default.plain,+                 data/templates/default.mediawiki,+                 data/templates/default.rtf,+                 data/templates/default.s5,+                 data/templates/default.slidy,                  data/templates/default.slideous,+                 data/templates/default.revealjs,                  data/templates/default.dzslides, 		 data/templates/default.asciidoc,-                 data/templates/default.textile, data/templates/default.org,-                 data/templates/default.epub, data/templates/default.epub3,+                 data/templates/default.textile,+                 data/templates/default.org,+                 data/templates/default.epub,+                 data/templates/default.epub3,                  -- data for ODT writer                  data/reference.odt,                  -- data for docx writer@@ -77,7 +88,7 @@                  data/s5/default/bodybg.gif,                  -- data for slidy writer                  data/slidy/styles/slidy.css,-                 data/slidy/scripts/slidy.js.gz,+                 data/slidy/scripts/slidy.js,                  data/slidy/graphics/fold.gif,                  data/slidy/graphics/unfold.gif,                  data/slidy/graphics/nofold-dim.gif,@@ -88,10 +99,10 @@                  data/slideous/slideous.js,                  -- data for dzslides writer                  data/dzslides/template.html,-                 -- data for citeproc-                 data/default.csl,+                 -- sample lua custom writer+                 data/sample.lua                  -- documentation-                 README, INSTALL, COPYRIGHT, BUGS, changelog+                 README, INSTALL, COPYRIGHT, BUGS, CONTRIBUTING.md, changelog Extra-Source-Files:                  -- code to create pandoc.1 man page                  man/man1/pandoc.1.template,@@ -105,13 +116,13 @@                  tests/docbook-reader.native                  tests/html-reader.html,                  tests/html-reader.native,+                 tests/opml-reader.opml,+                 tests/opml-reader.native,+                 tests/haddock-reader.haddock,+                 tests/haddock-reader.native,                  tests/insert,                  tests/lalune.jpg,                  tests/movie.jpg,-                 tests/biblio.bib,-                 tests/chicago-author-date.csl,-                 tests/ieee.csl,-                 tests/mhra.csl,                  tests/latex-reader.latex,                  tests/latex-reader.native,                  tests/textile-reader.textile,@@ -119,9 +130,7 @@                  tests/markdown-reader-more.txt,                  tests/markdown-reader-more.native,                  tests/markdown-citations.txt,-                 tests/markdown-citations.chicago-author-date.txt,-                 tests/markdown-citations.mhra.txt,-                 tests/markdown-citations.ieee.txt,+                 tests/markdown-citations.native,                  tests/textile-reader.textile,                  tests/mediawiki-reader.wiki,                  tests/mediawiki-reader.native,@@ -170,6 +179,7 @@                  tests/writer.rtf,                  tests/writer.texinfo,                  tests/writer.fb2,+                 tests/writer.opml,                  tests/lhs-test.native,                  tests/lhs-test-markdown.native,                  tests/lhs-test.markdown,@@ -202,17 +212,20 @@   type:          git   location:      git://github.com/jgm/pandoc.git -Flag blaze_html_0_5-  Description:   Use blaze-html >= 0.5 and blaze-markup >= 0.5-  Default:       True Flag embed_data_files   Description:   Embed data files in binary for relocatable executable.   Default:       False +Flag http-conduit+  Description:   Enable downloading of resources over https.+  Default:       True+ Library   Build-Depends: base >= 4.2 && <5,                  syb >= 0.1 && < 0.5,                  containers >= 0.1 && < 0.6,+                 unordered-containers >= 0.2 && < 0.3,+                 array >= 0.3 && < 0.5,                  parsec >= 3.1 && < 3.2,                  mtl >= 1.1 && < 2.2,                  network >= 2 && < 2.5,@@ -225,43 +238,36 @@                  old-locale >= 1 && < 1.1,                  time >= 1.2 && < 1.5,                  HTTP >= 4000.0.5 && < 4000.3,-                 texmath >= 0.6.1.3 && < 0.7,+                 texmath >= 0.6.4 && < 0.7,                  xml >= 1.3.12 && < 1.4,                  random >= 1 && < 1.1,                  extensible-exceptions >= 0.1 && < 0.2,-                 citeproc-hs >= 0.3.7 && < 0.4,-                 pandoc-types >= 1.10 && < 1.11,-                 json >= 0.4 && < 0.8,-                 tagsoup >= 0.12.5 && < 0.13,+                 pandoc-types >= 1.12 && < 1.13,+                 aeson >= 0.6 && < 0.7,+                 tagsoup >= 0.12.5 && < 0.14,                  base64-bytestring >= 0.1 && < 1.1,                  zlib >= 0.5 && < 0.6,-                 highlighting-kate >= 0.5.3.7 && < 0.6,+                 highlighting-kate >= 0.5.5 && < 0.6,                  data-default >= 0.4 && < 0.6,-                 temporary >= 1.1 && < 1.2-  if flag(blaze_html_0_5)-    build-depends:+                 temporary >= 1.1 && < 1.2,                  blaze-html >= 0.5 && < 0.7,-                 blaze-markup >= 0.5.1 && < 0.6-  else-    build-depends:-                 blaze-html >= 0.4.3.0 && < 0.5+                 blaze-markup >= 0.5.1 && < 0.6,+                 attoparsec >= 0.10 && < 0.11,+                 stringable >= 0.1 && < 0.2,+                 yaml >= 0.8.3 && < 0.9,+                 vector >= 0.10 && < 0.11,+                 hslua >= 0.3 && < 0.4+  if flag(http-conduit)+     Build-Depends: http-conduit >= 1.9 && < 1.10,+                    http-types >= 0.8 && < 0.9+     cpp-options:   -DHTTP_CONDUIT   if flag(embed_data_files)      cpp-options:   -DEMBED_DATA_FILES      -- build-tools:   hsb2hs      other-modules: Text.Pandoc.Data-  if impl(ghc >= 7.0.1)-    Ghc-Options:   -rtsopts -Wall -fno-warn-unused-do-bind-  else-    if impl(ghc >= 6.12)-      Ghc-Options:   -Wall -fno-warn-unused-do-bind-    else-      Ghc-Options:   -Wall-  if impl(ghc >= 7.0.1)-    Ghc-Prof-Options: -auto-all -caf-all -rtsopts-  else-    Ghc-Prof-Options: -auto-all -caf-all+  Ghc-Options:   -rtsopts -Wall -fno-warn-unused-do-bind+  Ghc-Prof-Options: -auto-all -caf-all -rtsopts   Default-Language: Haskell98-  Default-Extensions: CPP   Other-Extensions:   PatternGuards, OverloadedStrings,                       ScopedTypeVariables, GeneralizedNewtypeDeriving,                       RelaxedPolyRec, DeriveDataTypeable, TypeSynonymInstances,@@ -278,11 +284,14 @@                    Text.Pandoc.Readers.MediaWiki,                    Text.Pandoc.Readers.RST,                    Text.Pandoc.Readers.DocBook,+                   Text.Pandoc.Readers.OPML,                    Text.Pandoc.Readers.TeXMath,                    Text.Pandoc.Readers.Textile,                    Text.Pandoc.Readers.Native,+                   Text.Pandoc.Readers.Haddock,                    Text.Pandoc.Writers.Native,                    Text.Pandoc.Writers.Docbook,+                   Text.Pandoc.Writers.OPML,                    Text.Pandoc.Writers.HTML,                    Text.Pandoc.Writers.LaTeX,                    Text.Pandoc.Writers.ConTeXt,@@ -293,6 +302,7 @@                    Text.Pandoc.Writers.RST,                    Text.Pandoc.Writers.Org,                    Text.Pandoc.Writers.AsciiDoc,+                   Text.Pandoc.Writers.Custom,                    Text.Pandoc.Writers.Textile,                    Text.Pandoc.Writers.MediaWiki,                    Text.Pandoc.Writers.RTF,@@ -304,20 +314,27 @@                    Text.Pandoc.UTF8,                    Text.Pandoc.Templates,                    Text.Pandoc.XML,-                   Text.Pandoc.Biblio,-                   Text.Pandoc.SelfContained-  Other-Modules:   Text.Pandoc.MIME,+                   Text.Pandoc.SelfContained,+                   Text.Pandoc.Process+  Other-Modules:   Text.Pandoc.Readers.Haddock.Lex,+                   Text.Pandoc.Readers.Haddock.Parse,+                   Text.Pandoc.Writers.Shared,+                   Text.Pandoc.Asciify,+                   Text.Pandoc.MIME,                    Text.Pandoc.Parsing,                    Text.Pandoc.UUID,                    Text.Pandoc.ImageSize,                    Text.Pandoc.Slides,                    Text.Pandoc.Highlighting,+                   Text.Pandoc.Compat.Monoid,+                   Text.Pandoc.Compat.TagSoupEntity,                    Paths_pandoc    Buildable:       True  Executable pandoc   Build-Depends: pandoc,+                 pandoc-types >= 1.12 && < 1.13,                  base >= 4.2 && <5,                  directory >= 1 && < 1.3,                  filepath >= 1.1 && < 1.4,@@ -325,22 +342,14 @@                  text >= 0.11 && < 0.12,                  bytestring >= 0.9 && < 0.11,                  extensible-exceptions >= 0.1 && < 0.2,-                 highlighting-kate >= 0.5.3.7 && < 0.6,-                 HTTP >= 4000.0.5 && < 4000.3,-                 citeproc-hs >= 0.3.7 && < 0.4-  if impl(ghc >= 7.0.1)-    Ghc-Options:   -rtsopts -Wall -fno-warn-unused-do-bind-  else-    if impl(ghc >= 6.12)-      Ghc-Options:  -Wall -fno-warn-unused-do-bind-    else-      Ghc-Options:  -Wall-  if impl(ghc >= 7.0.1)-    Ghc-Prof-Options: -auto-all -caf-all -rtsopts-  else-    Ghc-Prof-Options: -auto-all -caf-all+                 highlighting-kate >= 0.5.5 && < 0.6,+                 aeson >= 0.6 && < 0.7,+                 HTTP >= 4000.0.5 && < 4000.3+  Ghc-Options:   -rtsopts -with-rtsopts=-K16m -Wall -fno-warn-unused-do-bind+  Ghc-Prof-Options: -auto-all -caf-all -rtsopts -with-rtsopts=-K16m+  if os(windows)+    Cpp-options:      -D_WINDOWS   Default-Language: Haskell98-  Default-Extensions: CPP   Other-Extensions: PatternGuards, OverloadedStrings,                     ScopedTypeVariables, GeneralizedNewtypeDeriving,                     RelaxedPolyRec, DeriveDataTypeable, TypeSynonymInstances,@@ -360,7 +369,6 @@                  old-time >= 1.0 && < 1.2,                  time >= 1.2 && < 1.5   Default-Language: Haskell98-  Default-Extensions: CPP  Test-Suite test-pandoc   Type:           exitcode-stdio-1.0@@ -369,13 +377,13 @@   Build-Depends:  base >= 4.2 && < 5,                   syb >= 0.1 && < 0.5,                   pandoc,-                  pandoc-types >= 1.10 && < 1.11,+                  pandoc-types >= 1.12 && < 1.13,                   bytestring >= 0.9 && < 0.11,                   text >= 0.11 && < 0.12,                   directory >= 1 && < 1.3,                   filepath >= 1.1 && < 1.4,                   process >= 1 && < 1.2,-                 highlighting-kate >= 0.5.3.7 && < 0.6,+                  highlighting-kate >= 0.5.5 && < 0.6,                   Diff >= 0.2 && < 0.4,                   test-framework >= 0.3 && < 0.9,                   test-framework-hunit >= 0.2 && < 0.4,@@ -388,6 +396,7 @@                   Tests.Helpers                   Tests.Arbitrary                   Tests.Shared+                  Tests.Walk                   Tests.Readers.LaTeX                   Tests.Readers.Markdown                   Tests.Readers.RST@@ -396,19 +405,8 @@                   Tests.Writers.HTML                   Tests.Writers.Markdown                   Tests.Writers.LaTeX-  if impl(ghc >= 7.0.1)-    Ghc-Options:  -rtsopts -Wall -fno-warn-unused-do-bind-  else-    if impl(ghc >= 6.12)-      Ghc-Options: -Wall -fno-warn-unused-do-bind-    else-      Ghc-Options: -Wall-  if impl(ghc >= 7)-    cpp-options:   -D_LIT=lit-  else-    cpp-options:   -D_LIT=$lit+  Ghc-Options:  -rtsopts -Wall -fno-warn-unused-do-bind   Default-Language: Haskell98-  Default-Extensions: CPP  benchmark benchmark-pandoc   Type:            exitcode-stdio-1.0@@ -417,13 +415,6 @@   Build-Depends:   pandoc,                    base >= 4.2 && < 5,                    syb >= 0.1 && < 0.5,-                   criterion >= 0.5 && < 0.7,-                   json >= 0.4 && < 0.8-  if impl(ghc >= 7.0.1)-    Ghc-Options:   -rtsopts -Wall -fno-warn-unused-do-bind-  else-    if impl(ghc >= 6.12)-      Ghc-Options:   -Wall -fno-warn-unused-do-bind-    else-      Ghc-Options:   -Wall+                   criterion >= 0.5 && < 0.9+  Ghc-Options:   -rtsopts -Wall -fno-warn-unused-do-bind   Default-Language: Haskell98
pandoc.hs view
@@ -31,12 +31,14 @@ -} module Main where import Text.Pandoc-import Text.Pandoc.PDF (tex2pdf)+import Text.Pandoc.Builder (setMeta)+import Text.Pandoc.PDF (makePDF) import Text.Pandoc.Readers.LaTeX (handleIncludes)-import Text.Pandoc.Shared ( tabFilter, readDataFileUTF8, safeRead,-                            headerShift, normalize, err, warn )-import Text.Pandoc.XML ( toEntities, fromEntities )+import Text.Pandoc.Shared ( tabFilter, readDataFileUTF8, readDataFile,+                            safeRead, headerShift, normalize, err, warn )+import Text.Pandoc.XML ( toEntities ) import Text.Pandoc.SelfContained ( makeSelfContained )+import Text.Pandoc.Process (pipeProcess) import Text.Highlighting.Kate ( languages, Style, tango, pygments,          espresso, zenburn, kate, haddock, monochrome ) import System.Environment ( getArgs, getProgName )@@ -44,19 +46,20 @@ import System.FilePath import System.Console.GetOpt import Data.Char ( toLower )-import Data.List ( intercalate, isPrefixOf )-import System.Directory ( getAppUserDataDirectory, doesFileExist, findExecutable )-import System.IO ( stdout )+import Data.List ( intercalate, isPrefixOf, sort )+import System.Directory ( getAppUserDataDirectory, findExecutable )+import System.IO ( stdout, stderr ) import System.IO.Error ( isDoesNotExistError ) import qualified Control.Exception as E import Control.Exception.Extensible ( throwIO ) import qualified Text.Pandoc.UTF8 as UTF8-import qualified Text.CSL as CSL import Control.Monad (when, unless, liftM)+import Data.Foldable (foldrM) import Network.HTTP (simpleHTTP, mkRequest, getResponseBody, RequestMethod(..)) import Network.URI (parseURI, isURI, URI(..)) import qualified Data.ByteString.Lazy as B-import Text.CSL.Reference (Reference(..))+import qualified Data.ByteString as BS+import Data.Aeson (eitherDecode', encode)  copyrightMessage :: String copyrightMessage = "\nCopyright (C) 2006-2013 John MacFarlane\n" ++@@ -66,7 +69,7 @@  compileInfo :: String compileInfo =-  "\nCompiled with citeproc-hs " ++ VERSION_citeproc_hs ++ ", texmath " +++  "\nCompiled with texmath " ++   VERSION_texmath ++ ", highlighting-kate " ++ VERSION_highlighting_kate ++    ".\nSyntax highlighting is supported for the following languages:\n    " ++        wrapWords 4 78@@ -86,6 +89,18 @@ isTextFormat :: String -> Bool isTextFormat s = takeWhile (`notElem` "+-") s `notElem` ["odt","docx","epub","epub3"] +externalFilter :: FilePath -> [String] -> Pandoc -> IO Pandoc+externalFilter f args' d = do+      (exitcode, outbs, errbs) <- E.handle filterException $+                                    pipeProcess Nothing f args' $ encode d+      when (not $ B.null errbs) $ B.hPutStr stderr errbs+      case exitcode of+           ExitSuccess    -> return $ either error id $ eitherDecode' outbs+           ExitFailure _  -> err 83 $ "Error running filter " ++ f+ where filterException :: E.SomeException -> IO a+       filterException e = err 83 $ "Error running filter " ++ f +++                                     "\n" ++ show e+ -- | Data structure for command line options. data Opt = Opt     { optTabStop           :: Int     -- ^ Number of spaces per tab@@ -98,6 +113,7 @@     , optTransforms        :: [Pandoc -> Pandoc]  -- ^ Doc transforms to apply     , optTemplate          :: Maybe FilePath  -- ^ Custom template     , optVariables         :: [(String,String)] -- ^ Template variables to set+    , optMetadata          :: [(String,MetaValue)] -- ^ Metadata fields to set     , optOutputFile        :: String  -- ^ Name of output file     , optNumberSections    :: Bool    -- ^ Number sections in LaTeX     , optNumberOffset      :: [Int]   -- ^ Starting number for sections@@ -124,15 +140,12 @@     , optReferenceLinks    :: Bool    -- ^ Use reference links in writing markdown, rst     , optWrapText          :: Bool    -- ^ Wrap text     , optColumns           :: Int     -- ^ Line length in characters-    , optPlugins           :: [Pandoc -> IO Pandoc] -- ^ Plugins to apply+    , optFilters           :: [FilePath] -- ^ Filters to apply     , optEmailObfuscation  :: ObfuscationMethod     , optIdentifierPrefix  :: String     , optIndentedCodeClasses :: [String] -- ^ Default classes for indented code blocks     , optDataDir           :: Maybe FilePath     , optCiteMethod        :: CiteMethod -- ^ Method to output cites-    , optBibliography      :: [String]-    , optCslFile           :: Maybe FilePath-    , optAbbrevsFile       :: Maybe FilePath     , optListings          :: Bool       -- ^ Use listings package for code blocks     , optLaTeXEngine       :: String     -- ^ Program to use for latex -> pdf     , optSlideLevel        :: Maybe Int  -- ^ Header level that creates slides@@ -155,6 +168,7 @@     , optTransforms            = []     , optTemplate              = Nothing     , optVariables             = []+    , optMetadata              = []     , optOutputFile            = "-"    -- "-" means stdout     , optNumberSections        = False     , optNumberOffset          = [0,0,0,0,0,0]@@ -181,15 +195,12 @@     , optReferenceLinks        = False     , optWrapText              = True     , optColumns               = 72-    , optPlugins               = []+    , optFilters               = []     , optEmailObfuscation      = JavascriptObfuscation     , optIdentifierPrefix      = ""     , optIndentedCodeClasses   = []     , optDataDir               = Nothing     , optCiteMethod            = Citeproc-    , optBibliography          = []-    , optCslFile               = Nothing-    , optAbbrevsFile           = Nothing     , optListings              = False     , optLaTeXEngine           = "pdflatex"     , optSlideLevel            = Nothing@@ -272,6 +283,12 @@                    "STRING")                   "" -- "Classes (whitespace- or comma-separated) to use for indented code-blocks" +    , Option "F" ["filter"]+                 (ReqArg+                  (\arg opt -> return opt { optFilters = arg : optFilters opt })+                  "PROGRAM")+                 "" -- "External JSON filter"+     , Option "" ["normalize"]                  (NoArg                   (\opt -> return opt { optTransforms =@@ -306,6 +323,16 @@                   "FILENAME")                  "" -- "Use custom template" +    , Option "M" ["metadata"]+                 (ReqArg+                  (\arg opt -> do+                     let (key,val) = case break (`elem` ":=") arg of+                                       (k,_:v) -> (k, MetaString v)+                                       (k,_)   -> (k, MetaBool True)+                     return opt{ optMetadata = (key,val) : optMetadata opt })+                  "KEY[:VALUE]")+                 ""+     , Option "V" ["variable"]                  (ReqArg                   (\arg opt -> do@@ -314,7 +341,7 @@                                        (k,_)   -> (k,"true")                      return opt{ optVariables = (key,val) : optVariables opt })                   "KEY[:VALUE]")-                 "" -- "Use custom template"+                 ""      , Option "D" ["print-default-template"]                  (ReqArg@@ -327,6 +354,14 @@                   "FORMAT")                  "" -- "Print default template for FORMAT" +    , Option "" ["print-default-data-file"]+                 (ReqArg+                  (\arg _ -> do+                     readDataFile Nothing arg >>= BS.hPutStr stdout+                     exitWith ExitSuccess)+                  "FILE")+                  "" -- "Print default data file"+     , Option "" ["no-wrap"]                  (NoArg                   (\opt -> return opt { optWrapText = False }))@@ -352,8 +387,7 @@                   (\arg opt -> do                       case safeRead arg of                            Just t | t >= 1 && t <= 6 ->-                                    return opt { optTOCDepth = t,-                                                 optTableOfContents = True }+                                    return opt { optTOCDepth = t }                            _      -> err 57 $                                     "TOC level must be a number between 1 and 6")                  "NUMBER")@@ -622,20 +656,28 @@      , Option "" ["bibliography"]                  (ReqArg-                  (\arg opt -> return opt { optBibliography = (optBibliography opt) ++ [arg] })-                  "FILENAME")+                  (\arg opt ->+                     return opt{ optMetadata = ("bibliography",MetaString arg) :+                                 optMetadata opt+                               })+                   "FILE")                  "" -    , Option "" ["csl"]+     , Option "" ["csl"]                  (ReqArg-                  (\arg opt -> return opt { optCslFile = Just arg })-                  "FILENAME")+                  (\arg opt ->+                     return opt{ optMetadata = ("csl", MetaString arg) :+                                 optMetadata opt })+                   "FILE")                  "" -    , Option "" ["citation-abbreviations"]+     , Option "" ["citation-abbreviations"]                  (ReqArg-                  (\arg opt -> return opt { optAbbrevsFile = Just arg })-                  "FILENAME")+                  (\arg opt ->+                     return opt{ optMetadata = ("citation-abbreviations",+                                                MetaString arg) :+                                 optMetadata opt })+                   "FILE")                  ""      , Option "" ["natbib"]@@ -739,10 +781,12 @@ usageMessage programName = usageInfo   (programName ++ " [OPTIONS] [FILES]" ++ "\nInput formats:  " ++   (wrapWords 16 78 $ readers'names) ++ "\nOutput formats: " ++-  (wrapWords 16 78 $ writers'names) ++ "\nOptions:")+  (wrapWords 16 78 $ writers'names) +++     '\n' : replicate 16 ' ' +++     "[*for pdf output, use latex or beamer and -o FILENAME.pdf]\nOptions:")   where-    writers'names = map fst writers-    readers'names = map fst readers+    writers'names = sort $ "pdf*" : map fst writers+    readers'names = sort $ map fst readers  -- Determine default reader based on source file extensions defaultReaderName :: String -> [FilePath] -> String@@ -758,6 +802,7 @@     ".rst"      -> "rst"     ".lhs"      -> "markdown+lhs"     ".db"       -> "docbook"+    ".opml"     -> "opml"     ".wiki"     -> "mediawiki"     ".textile"  -> "textile"     ".native"   -> "native"@@ -801,6 +846,7 @@     ".asciidoc" -> "asciidoc"     ".pdf"      -> "latex"     ".fb2"      -> "fb2"+    ".opml"     -> "opml"     ['.',y] | y `elem` ['1'..'9'] -> "man"     _          -> "html" @@ -836,6 +882,7 @@               , optWriter                = writerName               , optParseRaw              = parseRaw               , optVariables             = variables+              , optMetadata              = metadata               , optTableOfContents       = toc               , optTransforms            = transforms               , optTemplate              = templatePath@@ -865,13 +912,11 @@               , optReferenceLinks        = referenceLinks               , optWrapText              = wrap               , optColumns               = columns+              , optFilters               = filters               , optEmailObfuscation      = obfuscationMethod               , optIdentifierPrefix      = idPrefix               , optIndentedCodeClasses   = codeBlockClasses               , optDataDir               = mbDataDir-              , optBibliography          = reffiles-              , optCslFile               = mbCsl-              , optAbbrevsFile           = cslabbrevs               , optCiteMethod            = citeMethod               , optListings              = listings               , optLaTeXEngine           = latexEngine@@ -887,6 +932,13 @@        mapM_ (\arg -> UTF8.hPutStrLn stdout arg) args        exitWith ExitSuccess +  -- --bibliography implies -F pandoc-citeproc for backwards compatibility:+  let filters' = case lookup "bibliography" metadata of+                       Just _ | all (\f -> takeBaseName f /= "pandoc-citeproc")+                                filters -> "pandoc-citeproc" : filters+                       _                -> filters+  let plugins = map externalFilter filters'+   let sources = if ignoreArgs then [] else args    datadir <- case mbDataDir of@@ -972,43 +1024,15 @@                                              $ lines dztempl                         return $ ("dzslides-core", dzcore) : variables'                     else return variables'--  -- unescape reference ids, which may contain XML entities, so-  -- that we can do lookups with regular string equality-  let unescapeRefId ref = ref{ refId = fromEntities (refId ref) }--  refs <- mapM (\f -> E.catch (CSL.readBiblioFile f)-                   (\e -> let _ = (e :: E.SomeException)-                          in  err 23 $ "Error reading bibliography `" ++ f ++-                                       "'" ++ "\n" ++ show e))-          reffiles >>=-           return . map unescapeRefId . concat--  mbsty <- if citeMethod == Citeproc && not (null refs)-              then do-                csl <- CSL.parseCSL =<<-                        case mbCsl of-                            Nothing      -> readDataFileUTF8 datadir-                                              "default.csl"-                            Just cslfile -> do-                                  exists <- doesFileExist cslfile-                                  if exists-                                     then UTF8.readFile cslfile-                                     else do-                                       csldir <- getAppUserDataDirectory "csl"-                                       readDataFileUTF8 (Just csldir)-                                           (replaceExtension cslfile "csl")-                abbrevs <- maybe (return []) CSL.readJsonAbbrevFile cslabbrevs-                return $ Just csl { CSL.styleAbbrevs = abbrevs }-              else return Nothing--  let sourceDir = case sources of-                        []    -> "."+  let sourceURL = case sources of+                        []    -> Nothing                         (x:_) -> case parseURI x of                                     Just u                                       | uriScheme u `elem` ["http:","https:"] ->-                                          show u{ uriPath = "", uriQuery = "", uriFragment = "" }-                                    _ -> takeDirectory x+                                          Just $ show u{ uriPath = "",+                                                         uriQuery = "",+                                                         uriFragment = "" }+                                    _ -> Nothing    let readerOpts = def{ readerSmart = smart || (texLigatures &&                           (laTeXOutput || "context" `isPrefixOf` writerName'))@@ -1017,8 +1041,6 @@                       , readerColumns = columns                       , readerTabStop = tabStop                       , readerOldDashes = oldDashes-                      , readerReferences = refs-                      , readerCitationStyle = mbsty                       , readerIndentedCodeClasses = codeBlockClasses                       , readerApplyMacros = not laTeXOutput                       , readerDefaultImageExtension = defaultImageExtension@@ -1032,7 +1054,6 @@                             writerHTMLMathMethod   = mathMethod,                             writerIncremental      = incremental,                             writerCiteMethod       = citeMethod,-                            writerBiblioFiles      = reffiles,                             writerIgnoreNotes      = False,                             writerNumberSections   = numberSections,                             writerNumberOffset     = numberFrom,@@ -1042,7 +1063,7 @@                             writerColumns          = columns,                             writerEmailObfuscation = obfuscationMethod,                             writerIdentifierPrefix = idPrefix,-                            writerSourceDirectory  = sourceDir,+                            writerSourceURL        = sourceURL,                             writerUserDataDir      = datadir,                             writerHtml5            = html5,                             writerHtmlQTags        = htmlQTags,@@ -1087,8 +1108,11 @@            handleIncludes' . convertTabs . intercalate "\n" >>=            reader readerOpts -  let doc0 = foldr ($) doc transforms +  let doc0 = foldr (\(k,v) -> setMeta k v) doc metadata+  let doc1 = foldr ($) doc0 transforms+  doc2 <- foldrM ($) doc1 $ map ($ [writerName']) plugins+   let writeBinary :: B.ByteString -> IO ()       writeBinary = B.writeFile (UTF8.encodePath outputFile) @@ -1098,20 +1122,20 @@    case getWriter writerName' of     Left e -> err 9 e-    Right (IOStringWriter f) -> f writerOptions doc0 >>= writerFn outputFile-    Right (IOByteStringWriter f) -> f writerOptions doc0 >>= writeBinary+    Right (IOStringWriter f) -> f writerOptions doc2 >>= writerFn outputFile+    Right (IOByteStringWriter f) -> f writerOptions doc2 >>= writeBinary     Right (PureStringWriter f)       | pdfOutput -> do-              res <- tex2pdf latexEngine $ f writerOptions doc0+              res <- makePDF latexEngine f writerOptions doc2               case res of                    Right pdf -> writeBinary pdf                    Left err' -> err 43 $ UTF8.toStringLazy err'-      | otherwise -> selfcontain (f writerOptions doc0 +++      | otherwise -> selfcontain (f writerOptions doc2 ++                                   ['\n' | not standalone'])                       >>= writerFn outputFile . handleEntities           where htmlFormat = writerName' `elem`                                ["html","html+lhs","html5","html5+lhs",-                               "s5","slidy","slideous","dzslides"]+                               "s5","slidy","slideous","dzslides","revealjs"]                 selfcontain = if selfContained && htmlFormat                                  then makeSelfContained datadir                                  else return
src/Text/Pandoc.hs view
@@ -37,9 +37,6 @@  > module Main where > import Text.Pandoc-> -- include the following two lines only if you're using ghc < 6.12:-> import Prelude hiding (getContents, putStrLn)-> import System.IO.UTF8 > > markdownToRST :: String -> String > markdownToRST =@@ -72,10 +69,14 @@                , readHtml                , readTextile                , readDocBook+               , readOPML+               , readHaddock                , readNative+               , readJSON                -- * Writers: converting /from/ Pandoc format                , Writer (..)                , writeNative+               , writeJSON                , writeMarkdown                , writePlain                , writeRST@@ -85,6 +86,7 @@                , writeHtml                , writeHtmlString                , writeDocbook+               , writeOPML                , writeOpenDocument                , writeMan                , writeMediaWiki@@ -96,6 +98,7 @@                , writeFB2                , writeOrg                , writeAsciiDoc+               , writeCustom                -- * Rendering templates and default templates                , module Text.Pandoc.Templates                -- * Version@@ -103,20 +106,22 @@                -- * Miscellaneous                , getReader                , getWriter-               , jsonFilter                , ToJsonFilter(..)              ) where  import Text.Pandoc.Definition import Text.Pandoc.Generic+import Text.Pandoc.JSON import Text.Pandoc.Readers.Markdown import Text.Pandoc.Readers.MediaWiki import Text.Pandoc.Readers.RST import Text.Pandoc.Readers.DocBook+import Text.Pandoc.Readers.OPML import Text.Pandoc.Readers.LaTeX import Text.Pandoc.Readers.HTML import Text.Pandoc.Readers.Textile import Text.Pandoc.Readers.Native+import Text.Pandoc.Readers.Haddock import Text.Pandoc.Writers.Native import Text.Pandoc.Writers.Markdown import Text.Pandoc.Writers.RST@@ -129,6 +134,7 @@ import Text.Pandoc.Writers.EPUB import Text.Pandoc.Writers.FB2 import Text.Pandoc.Writers.Docbook+import Text.Pandoc.Writers.OPML import Text.Pandoc.Writers.OpenDocument import Text.Pandoc.Writers.Man import Text.Pandoc.Writers.RTF@@ -136,17 +142,19 @@ import Text.Pandoc.Writers.Textile import Text.Pandoc.Writers.Org import Text.Pandoc.Writers.AsciiDoc+import Text.Pandoc.Writers.Custom import Text.Pandoc.Templates import Text.Pandoc.Options import Text.Pandoc.Shared (safeRead, warn)-import Data.ByteString.Lazy (ByteString)-import Data.List (intercalate)+import Data.Aeson+import qualified Data.ByteString.Lazy as BL+import Data.List (intercalate, isSuffixOf) import Data.Version (showVersion)-import Text.JSON.Generic import Data.Set (Set) import qualified Data.Set as Set import Text.Parsec import Text.Parsec.Error+import qualified Text.Pandoc.UTF8 as UTF8 import Paths_pandoc (version)  -- | Version number of pandoc library.@@ -182,34 +190,36 @@  -- | Association list of formats and readers. readers :: [(String, ReaderOptions -> String -> IO Pandoc)]-readers = [("native"       , \_ s -> return $ readNative s)-          ,("json"         , \_ s -> return $ decodeJSON s)-          ,("markdown"     , markdown)-          ,("markdown_strict" , markdown)-          ,("markdown_phpextra" , markdown)-          ,("markdown_github" , markdown)-          ,("markdown_mmd",  markdown)-          ,("rst"          , \o s -> return $ readRST o s)-          ,("mediawiki"    , \o s -> return $ readMediaWiki o s)-          ,("docbook"      , \o s -> return $ readDocBook o s)-          ,("textile"      , \o s -> return $ readTextile o s) -- TODO : textile+lhs-          ,("html"         , \o s -> return $ readHtml o s)-          ,("latex"        , \o s -> return $ readLaTeX o s)-          ]+readers = [ ("native"       , \_ s -> return $ readNative s)+           ,("json"         , \o s -> return $ readJSON o s)+           ,("markdown"     , markdown)+           ,("markdown_strict" , markdown)+           ,("markdown_phpextra" , markdown)+           ,("markdown_github" , markdown)+           ,("markdown_mmd",  markdown)+           ,("rst"          , \o s -> return $ readRST o s)+           ,("mediawiki"    , \o s -> return $ readMediaWiki o s)+           ,("docbook"      , \o s -> return $ readDocBook o s)+           ,("opml"         , \o s -> return $ readOPML o s)+           ,("textile"      , \o s -> return $ readTextile o s) -- TODO : textile+lhs+           ,("html"         , \o s -> return $ readHtml o s)+           ,("latex"        , \o s -> return $ readLaTeX o s)+           ,("haddock"      , \o s -> return $ readHaddock o s)+           ]  data Writer = PureStringWriter   (WriterOptions -> Pandoc -> String)             | IOStringWriter     (WriterOptions -> Pandoc -> IO String)-            | IOByteStringWriter (WriterOptions -> Pandoc -> IO ByteString)+            | IOByteStringWriter (WriterOptions -> Pandoc -> IO BL.ByteString)  -- | Association list of formats and writers. writers :: [ ( String, Writer ) ] writers = [    ("native"       , PureStringWriter writeNative)-  ,("json"         , PureStringWriter $ \_ -> encodeJSON)+  ,("json"         , PureStringWriter writeJSON)   ,("docx"         , IOByteStringWriter writeDocx)   ,("odt"          , IOByteStringWriter writeODT)   ,("epub"         , IOByteStringWriter $ \o ->-                       writeEPUB o{ writerEpubVersion = Just EPUB2 })+                      writeEPUB o{ writerEpubVersion = Just EPUB2 })   ,("epub3"        , IOByteStringWriter $ \o ->                        writeEPUB o{ writerEpubVersion = Just EPUB3 })   ,("fb2"          , IOStringWriter writeFB2)@@ -226,7 +236,11 @@   ,("dzslides"     , PureStringWriter $ \o ->      writeHtmlString o{ writerSlideVariant = DZSlides                       , writerHtml5 = True })+  ,("revealjs"      , PureStringWriter $ \o ->+     writeHtmlString o{ writerSlideVariant = RevealJsSlides+                      , writerHtml5 = True })   ,("docbook"      , PureStringWriter writeDocbook)+  ,("opml"         , PureStringWriter writeOPML)   ,("opendocument" , PureStringWriter writeOpenDocument)   ,("latex"        , PureStringWriter writeLaTeX)   ,("beamer"       , PureStringWriter $ \o ->@@ -274,7 +288,10 @@        Left e  -> Left $ intercalate "\n" $ [m | Message m <- errorMessages e]        Right (writerName, setExts) ->            case lookup writerName writers of-                   Nothing  -> Left $ "Unknown writer: " ++ writerName+                   Nothing+                     | ".lua" `isSuffixOf` s ->+                       Right $ IOStringWriter $ writeCustom s+                     | otherwise -> Left $ "Unknown writer: " ++ writerName                    Just (PureStringWriter r) -> Right $ PureStringWriter $                            \o -> r o{ writerExtensions = setExts $                                             getDefaultExtensions writerName }@@ -285,52 +302,15 @@                            \o -> r o{ writerExtensions = setExts $                                             getDefaultExtensions writerName } -{-# DEPRECATED jsonFilter "Use toJsonFilter instead" #-}--- | Converts a transformation on the Pandoc AST into a function--- that reads and writes a JSON-encoded string.  This is useful--- for writing small scripts.-jsonFilter :: (Pandoc -> Pandoc) -> String -> String-jsonFilter f = encodeJSON . f . decodeJSON---- | 'toJsonFilter' convert a function into a filter that reads pandoc's json output--- from stdin, transforms it by walking the AST and applying the specified--- function, and writes the result as json to stdout.  Usage example:------ > -- capitalize.hs--- > -- compile with:  ghc --make capitalize--- > -- run with:      pandoc -t json | ./capitalize | pandoc -f json--- >--- > import Text.Pandoc--- > import Data.Char (toUpper)--- >--- > main :: IO ()--- > main = toJsonFilter capitalizeStrings--- >--- > capitalizeStrings :: Inline -> Inline--- > capitalizeStrings (Str s) = Str $ map toUpper s--- > capitalizeStrings x       = x------ The function can be any type @(a -> a)@, @(a -> IO a)@, @(a -> [a])@,--- or @(a -> IO [a])@, where @a@ is an instance of 'Data'.--- So, for example, @a@ can be 'Pandoc', 'Inline', 'Block', ['Inline'],--- ['Block'], 'Meta', 'ListNumberStyle', 'Alignment', 'ListNumberDelim',--- 'QuoteType', etc. See 'Text.Pandoc.Definition'.-class ToJsonFilter a where-  toJsonFilter :: a -> IO ()--instance (Data a) => ToJsonFilter (a -> a) where-  toJsonFilter f = getContents-    >>= putStr . encodeJSON . (bottomUp f :: Pandoc -> Pandoc) . decodeJSON+{-# DEPRECATED toJsonFilter "Use 'toJSONFilter' from 'Text.Pandoc.JSON' instead" #-}+-- | Deprecated.  Use @toJSONFilter@ from @Text.Pandoc.JSON@ instead.+class ToJSONFilter a => ToJsonFilter a+  where toJsonFilter :: a -> IO ()+        toJsonFilter = toJSONFilter -instance (Data a) => ToJsonFilter (a -> IO a) where-  toJsonFilter f = getContents >>= (bottomUpM f :: Pandoc -> IO Pandoc) . decodeJSON-    >>= putStr . encodeJSON+readJSON :: ReaderOptions -> String -> Pandoc+readJSON _ = either error id . eitherDecode' . UTF8.fromStringLazy -instance (Data a) => ToJsonFilter (a -> [a]) where-  toJsonFilter f = getContents-    >>= putStr . encodeJSON . (bottomUp (concatMap f) :: Pandoc -> Pandoc) . decodeJSON+writeJSON :: WriterOptions -> Pandoc -> String+writeJSON _ = UTF8.toStringLazy . encode -instance (Data a) => ToJsonFilter (a -> IO [a]) where-  toJsonFilter f = getContents-    >>= (bottomUpM (fmap concat . mapM f) :: Pandoc -> IO Pandoc) . decodeJSON-    >>= putStr . encodeJSON
+ src/Text/Pandoc/Asciify.hs view
@@ -0,0 +1,422 @@+{-+Copyright (C) 2013 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++{- |+   Module      : Text.Pandoc.SelfContained+   Copyright   : Copyright (C) 2013 John MacFarlane+   License     : GNU GPL, version 2 or above++   Maintainer  : John MacFarlane <jgm@berkeley.edu>+   Stability   : alpha+   Portability : portable++Function to convert accented latin letters to their unaccented+ascii equivalents (used in constructing HTML identifiers).+-}+module Text.Pandoc.Asciify (toAsciiChar)+where+import qualified Data.Map as M+import Data.Char (isAscii)++toAsciiChar :: Char -> Maybe Char+toAsciiChar c | isAscii c = Just c+              | otherwise = M.lookup c asciiMap++asciiMap :: M.Map Char Char+asciiMap = M.fromList+  [('\192','A')+  ,('\193','A')+  ,('\194','A')+  ,('\195','A')+  ,('\196','A')+  ,('\197','A')+  ,('\199','C')+  ,('\200','E')+  ,('\201','E')+  ,('\202','E')+  ,('\203','E')+  ,('\204','I')+  ,('\205','I')+  ,('\206','I')+  ,('\207','I')+  ,('\209','N')+  ,('\210','O')+  ,('\211','O')+  ,('\212','O')+  ,('\213','O')+  ,('\214','O')+  ,('\217','U')+  ,('\218','U')+  ,('\219','U')+  ,('\220','U')+  ,('\221','Y')+  ,('\224','a')+  ,('\225','a')+  ,('\226','a')+  ,('\227','a')+  ,('\228','a')+  ,('\229','a')+  ,('\231','c')+  ,('\232','e')+  ,('\233','e')+  ,('\234','e')+  ,('\235','e')+  ,('\236','i')+  ,('\237','i')+  ,('\238','i')+  ,('\239','i')+  ,('\241','n')+  ,('\242','o')+  ,('\243','o')+  ,('\244','o')+  ,('\245','o')+  ,('\246','o')+  ,('\249','u')+  ,('\250','u')+  ,('\251','u')+  ,('\252','u')+  ,('\253','y')+  ,('\255','y')+  ,('\256','A')+  ,('\257','a')+  ,('\258','A')+  ,('\259','a')+  ,('\260','A')+  ,('\261','a')+  ,('\262','C')+  ,('\263','c')+  ,('\264','C')+  ,('\265','c')+  ,('\266','C')+  ,('\267','c')+  ,('\268','C')+  ,('\269','c')+  ,('\270','D')+  ,('\271','d')+  ,('\274','E')+  ,('\275','e')+  ,('\276','E')+  ,('\277','e')+  ,('\278','E')+  ,('\279','e')+  ,('\280','E')+  ,('\281','e')+  ,('\282','E')+  ,('\283','e')+  ,('\284','G')+  ,('\285','g')+  ,('\286','G')+  ,('\287','g')+  ,('\288','G')+  ,('\289','g')+  ,('\290','G')+  ,('\291','g')+  ,('\292','H')+  ,('\293','h')+  ,('\296','I')+  ,('\297','i')+  ,('\298','I')+  ,('\299','i')+  ,('\300','I')+  ,('\301','i')+  ,('\302','I')+  ,('\303','i')+  ,('\304','I')+  ,('\308','J')+  ,('\309','j')+  ,('\310','K')+  ,('\311','k')+  ,('\313','L')+  ,('\314','l')+  ,('\315','L')+  ,('\316','l')+  ,('\317','L')+  ,('\318','l')+  ,('\323','N')+  ,('\324','n')+  ,('\325','N')+  ,('\326','n')+  ,('\327','N')+  ,('\328','n')+  ,('\332','O')+  ,('\333','o')+  ,('\334','O')+  ,('\335','o')+  ,('\336','O')+  ,('\337','o')+  ,('\340','R')+  ,('\341','r')+  ,('\342','R')+  ,('\343','r')+  ,('\344','R')+  ,('\345','r')+  ,('\346','S')+  ,('\347','s')+  ,('\348','S')+  ,('\349','s')+  ,('\350','S')+  ,('\351','s')+  ,('\352','S')+  ,('\353','s')+  ,('\354','T')+  ,('\355','t')+  ,('\356','T')+  ,('\357','t')+  ,('\360','U')+  ,('\361','u')+  ,('\362','U')+  ,('\363','u')+  ,('\364','U')+  ,('\365','u')+  ,('\366','U')+  ,('\367','u')+  ,('\368','U')+  ,('\369','u')+  ,('\370','U')+  ,('\371','u')+  ,('\372','W')+  ,('\373','w')+  ,('\374','Y')+  ,('\375','y')+  ,('\376','Y')+  ,('\377','Z')+  ,('\378','z')+  ,('\379','Z')+  ,('\380','z')+  ,('\381','Z')+  ,('\382','z')+  ,('\416','O')+  ,('\417','o')+  ,('\431','U')+  ,('\432','u')+  ,('\461','A')+  ,('\462','a')+  ,('\463','I')+  ,('\464','i')+  ,('\465','O')+  ,('\466','o')+  ,('\467','U')+  ,('\468','u')+  ,('\486','G')+  ,('\487','g')+  ,('\488','K')+  ,('\489','k')+  ,('\490','O')+  ,('\491','o')+  ,('\496','j')+  ,('\500','G')+  ,('\501','g')+  ,('\504','N')+  ,('\505','n')+  ,('\512','A')+  ,('\513','a')+  ,('\514','A')+  ,('\515','a')+  ,('\516','E')+  ,('\517','e')+  ,('\518','E')+  ,('\519','e')+  ,('\520','I')+  ,('\521','i')+  ,('\522','I')+  ,('\523','i')+  ,('\524','O')+  ,('\525','o')+  ,('\526','O')+  ,('\527','o')+  ,('\528','R')+  ,('\529','r')+  ,('\530','R')+  ,('\531','r')+  ,('\532','U')+  ,('\533','u')+  ,('\534','U')+  ,('\535','u')+  ,('\536','S')+  ,('\537','s')+  ,('\538','T')+  ,('\539','t')+  ,('\542','H')+  ,('\543','h')+  ,('\550','A')+  ,('\551','a')+  ,('\552','E')+  ,('\553','e')+  ,('\558','O')+  ,('\559','o')+  ,('\562','Y')+  ,('\563','y')+  ,('\894',';')+  ,('\7680','A')+  ,('\7681','a')+  ,('\7682','B')+  ,('\7683','b')+  ,('\7684','B')+  ,('\7685','b')+  ,('\7686','B')+  ,('\7687','b')+  ,('\7690','D')+  ,('\7691','d')+  ,('\7692','D')+  ,('\7693','d')+  ,('\7694','D')+  ,('\7695','d')+  ,('\7696','D')+  ,('\7697','d')+  ,('\7698','D')+  ,('\7699','d')+  ,('\7704','E')+  ,('\7705','e')+  ,('\7706','E')+  ,('\7707','e')+  ,('\7710','F')+  ,('\7711','f')+  ,('\7712','G')+  ,('\7713','g')+  ,('\7714','H')+  ,('\7715','h')+  ,('\7716','H')+  ,('\7717','h')+  ,('\7718','H')+  ,('\7719','h')+  ,('\7720','H')+  ,('\7721','h')+  ,('\7722','H')+  ,('\7723','h')+  ,('\7724','I')+  ,('\7725','i')+  ,('\7728','K')+  ,('\7729','k')+  ,('\7730','K')+  ,('\7731','k')+  ,('\7732','K')+  ,('\7733','k')+  ,('\7734','L')+  ,('\7735','l')+  ,('\7738','L')+  ,('\7739','l')+  ,('\7740','L')+  ,('\7741','l')+  ,('\7742','M')+  ,('\7743','m')+  ,('\7744','M')+  ,('\7745','m')+  ,('\7746','M')+  ,('\7747','m')+  ,('\7748','N')+  ,('\7749','n')+  ,('\7750','N')+  ,('\7751','n')+  ,('\7752','N')+  ,('\7753','n')+  ,('\7754','N')+  ,('\7755','n')+  ,('\7764','P')+  ,('\7765','p')+  ,('\7766','P')+  ,('\7767','p')+  ,('\7768','R')+  ,('\7769','r')+  ,('\7770','R')+  ,('\7771','r')+  ,('\7774','R')+  ,('\7775','r')+  ,('\7776','S')+  ,('\7777','s')+  ,('\7778','S')+  ,('\7779','s')+  ,('\7786','T')+  ,('\7787','t')+  ,('\7788','T')+  ,('\7789','t')+  ,('\7790','T')+  ,('\7791','t')+  ,('\7792','T')+  ,('\7793','t')+  ,('\7794','U')+  ,('\7795','u')+  ,('\7796','U')+  ,('\7797','u')+  ,('\7798','U')+  ,('\7799','u')+  ,('\7804','V')+  ,('\7805','v')+  ,('\7806','V')+  ,('\7807','v')+  ,('\7808','W')+  ,('\7809','w')+  ,('\7810','W')+  ,('\7811','w')+  ,('\7812','W')+  ,('\7813','w')+  ,('\7814','W')+  ,('\7815','w')+  ,('\7816','W')+  ,('\7817','w')+  ,('\7818','X')+  ,('\7819','x')+  ,('\7820','X')+  ,('\7821','x')+  ,('\7822','Y')+  ,('\7823','y')+  ,('\7824','Z')+  ,('\7825','z')+  ,('\7826','Z')+  ,('\7827','z')+  ,('\7828','Z')+  ,('\7829','z')+  ,('\7830','h')+  ,('\7831','t')+  ,('\7832','w')+  ,('\7833','y')+  ,('\7840','A')+  ,('\7841','a')+  ,('\7842','A')+  ,('\7843','a')+  ,('\7864','E')+  ,('\7865','e')+  ,('\7866','E')+  ,('\7867','e')+  ,('\7868','E')+  ,('\7869','e')+  ,('\7880','I')+  ,('\7881','i')+  ,('\7882','I')+  ,('\7883','i')+  ,('\7884','O')+  ,('\7885','o')+  ,('\7886','O')+  ,('\7887','o')+  ,('\7908','U')+  ,('\7909','u')+  ,('\7910','U')+  ,('\7911','u')+  ,('\7922','Y')+  ,('\7923','y')+  ,('\7924','Y')+  ,('\7925','y')+  ,('\7926','Y')+  ,('\7927','y')+  ,('\7928','Y')+  ,('\7929','y')+  ,('\8175','`')+  ,('\8490','K')+  ,('\8800','=')+  ,('\8814','<')+  ,('\8815','>')+  ]
− src/Text/Pandoc/Biblio.hs
@@ -1,187 +0,0 @@-{-# LANGUAGE PatternGuards #-}-{--Copyright (C) 2008 Andrea Rossato <andrea.rossato@ing.unitn.it>--This program is free software; you can redistribute it and/or modify-it under the terms of the GNU General Public License as published by-the Free Software Foundation; either version 2 of the License, or-(at your option) any later version.--This program is distributed in the hope that it will be useful,-but WITHOUT ANY WARRANTY; without even the implied warranty of-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the-GNU General Public License for more details.--You should have received a copy of the GNU General Public License-along with this program; if not, write to the Free Software-Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA--}--{- |-   Module      : Text.Pandoc.Biblio-   Copyright   : Copyright (C) 2008-2010 Andrea Rossato-   License     : GNU GPL, version 2 or above--   Maintainer  : Andrea Rossato <andrea.rossato@unitn.it>-   Stability   : alpha-   Portability : portable--}--module Text.Pandoc.Biblio ( processBiblio ) where--import Data.List-import Data.Char ( isDigit, isPunctuation )-import qualified Data.Map as M-import Text.CSL hiding ( Cite(..), Citation(..) )-import qualified Text.CSL as CSL ( Cite(..) )-import Text.Pandoc.Definition-import Text.Pandoc.Generic-import Text.Pandoc.Shared (stringify)-import Text.Parsec hiding (State)-import Control.Monad-import Control.Monad.State---- | Process a 'Pandoc' document by adding citations formatted--- according to a CSL style, using 'citeproc' from citeproc-hs.-processBiblio :: Maybe Style -> [Reference] -> Pandoc -> Pandoc-processBiblio Nothing _ p = p-processBiblio _      [] p = p-processBiblio (Just style) r p =-  let p'         = evalState (bottomUpM setHash p) 1-      grps       = queryWith getCitation p'-      result     = citeproc procOpts style r (setNearNote style $-                      map (map toCslCite) grps)-      cits_map   = M.fromList $ zip grps (citations result)-      biblioList = map (renderPandoc' style) (bibliography result)-      Pandoc m b = bottomUp mvPunct . deNote . bottomUp (processCite style cits_map) $ p'-  in  Pandoc m $ b ++ biblioList---- | Substitute 'Cite' elements with formatted citations.-processCite :: Style -> M.Map [Citation] [FormattedOutput] -> Inline -> Inline-processCite s cs (Cite t _) =-   case M.lookup t cs of-        Just (x:xs)-          | isTextualCitation t && not (null xs) ->-             let xs' = renderPandoc s xs-             in  if styleClass s == "note"-                    then Cite t (renderPandoc s [x] ++ [Note [Para xs']])-                    else Cite t (renderPandoc s [x] ++ [Space | not (startWithPunct xs')] ++ xs')-          | otherwise -> if styleClass s == "note"-                            then Cite t [Note [Para $ renderPandoc s (x:xs)]]-                            else Cite t (renderPandoc s (x:xs))-        _             -> Strong [Str "???"]  -- TODO raise error instead?-processCite _ _ x = x--isNote :: Inline -> Bool-isNote (Note _) = True-isNote (Cite _ [Note _]) = True-isNote _ = False--mvPunct :: [Inline] -> [Inline]-mvPunct (Space : Space : xs) = Space : xs-mvPunct (Space : x : ys) | isNote x, startWithPunct ys =-   Str (headInline ys) : x : tailFirstInlineStr ys-mvPunct (Space : x : ys) | isNote x = x : ys-mvPunct xs = xs--sanitize :: [Inline] -> [Inline]-sanitize xs | endWithPunct xs = toCapital xs-            | otherwise       = toCapital (xs ++ [Str "."])--deNote :: Pandoc -> Pandoc-deNote = topDown go-  where go (Note [Para xs]) = Note $ bottomUp go' [Para $ sanitize xs]-        go (Note xs) = Note $ bottomUp go' xs-        go x = x-        go' (Note [Para xs]:ys) =-             if startWithPunct ys && endWithPunct xs-                then initInline xs ++ ys-                else xs ++ ys-        go' xs = xs--isTextualCitation :: [Citation] -> Bool-isTextualCitation (c:_) = citationMode c == AuthorInText-isTextualCitation _     = False---- | Retrieve all citations from a 'Pandoc' docuument. To be used with--- 'queryWith'.-getCitation :: Inline -> [[Citation]]-getCitation i | Cite t _ <- i = [t]-              | otherwise     = []--setHash :: Citation -> State Int Citation-setHash c = do-  ident <- get-  put $ ident + 1-  return c{ citationHash = ident }--toCslCite :: Citation -> CSL.Cite-toCslCite c-    = let (l, s)  = locatorWords $ citationSuffix c-          (la,lo) = parseLocator l-          s'      = case (l,s,citationMode c) of-                         -- treat a bare locator as if it begins with comma-                         -- so @item1 [blah] is like [@item1, blah]-                         ("",(x:_),AuthorInText) | not (isPunct x)-                                                 -> [Str ",",Space] ++ s-                         _                       -> s-          isPunct (Str (x:_)) = isPunctuation x-          isPunct _           = False-          citMode = case citationMode c of-                      AuthorInText   -> (True, False)-                      SuppressAuthor -> (False,True )-                      NormalCitation -> (False,False)-      in   emptyCite { CSL.citeId         = citationId c-                     , CSL.citePrefix     = PandocText $ citationPrefix c-                     , CSL.citeSuffix     = PandocText s'-                     , CSL.citeLabel      = la-                     , CSL.citeLocator    = lo-                     , CSL.citeNoteNumber = show $ citationNoteNum c-                     , CSL.authorInText   = fst citMode-                     , CSL.suppressAuthor = snd citMode-                     , CSL.citeHash       = citationHash c-                     }--locatorWords :: [Inline] -> (String, [Inline])-locatorWords inp =-  case parse pLocatorWords "suffix" $ breakup inp of-       Right r   -> r-       Left _    -> ("",inp)-   where breakup [] = []-         breakup (Str x : xs) = map Str (splitup x) ++ breakup xs-         breakup (x : xs) = x : breakup xs-         splitup = groupBy (\x y -> x /= '\160' && y /= '\160')--pLocatorWords :: Parsec [Inline] st (String, [Inline])-pLocatorWords = do-  l <- pLocator-  s <- getInput -- rest is suffix-  if length l > 0 && last l == ','-     then return (init l, Str "," : s)-     else return (l, s)--pMatch :: (Inline -> Bool) -> Parsec [Inline] st Inline-pMatch condition = try $ do-  t <- anyToken-  guard $ condition t-  return t--pSpace :: Parsec [Inline] st Inline-pSpace = pMatch (\t -> t == Space || t == Str "\160")--pLocator :: Parsec [Inline] st String-pLocator = try $ do-  optional $ pMatch (== Str ",")-  optional pSpace-  f  <- many1 (notFollowedBy pSpace >> anyToken)-  gs <- many1 pWordWithDigits-  return $ stringify f ++ (' ' : unwords gs)--pWordWithDigits :: Parsec [Inline] st String-pWordWithDigits = try $ do-  pSpace-  r <- many1 (notFollowedBy pSpace >> anyToken)-  let s = stringify r-  guard $ any isDigit s-  return s-
+ src/Text/Pandoc/Compat/Monoid.hs view
@@ -0,0 +1,20 @@+{-# LANGUAGE CPP #-}+module Text.Pandoc.Compat.Monoid ( Monoid(..)+                                 , (<>)+                          ) where++#if MIN_VERSION_base(4,5,0)+import Data.Monoid ((<>), Monoid(..))+#else+import Data.Monoid (mappend, Monoid(..))+#endif++#if MIN_VERSION_base(4,5,0)+#else+infixr 6 <>++-- | An infix synonym for 'mappend'.+(<>) :: Monoid m => m -> m -> m+(<>) = mappend+{-# INLINE (<>) #-}+#endif
+ src/Text/Pandoc/Compat/TagSoupEntity.hs view
@@ -0,0 +1,15 @@+{-# LANGUAGE CPP #-}+module Text.Pandoc.Compat.TagSoupEntity (lookupEntity+                          ) where++import qualified Text.HTML.TagSoup.Entity as TE++lookupEntity :: String -> Maybe Char+#if MIN_VERSION_tagsoup(0,13,0)+lookupEntity = str2chr . TE.lookupEntity+  where str2chr :: Maybe String -> Maybe Char+        str2chr (Just [c]) = Just c+        str2chr _ = Nothing+#else+lookupEntity = TE.lookupEntity+#endif
src/Text/Pandoc/ImageSize.hs view
@@ -34,11 +34,12 @@ import qualified Data.ByteString.Char8 as B import Control.Monad import Data.Bits+import Text.Pandoc.Shared (safeRead)  -- quick and dirty functions to get image sizes -- algorithms borrowed from wwwis.pl -data ImageType = Png | Gif | Jpeg | Pdf deriving Show+data ImageType = Png | Gif | Jpeg | Pdf | Eps deriving Show  data ImageSize = ImageSize{                      pxX   :: Integer@@ -54,6 +55,9 @@                      "\x47\x49\x46\x38" -> return Gif                      "\xff\xd8\xff\xe0" -> return Jpeg                      "%PDF"             -> return Pdf+                     "%!PS"+                       | (B.take 4 $ B.drop 1 $ B.dropWhile (/=' ') img) == "EPSF"+                                        -> return Eps                      _                  -> fail "Unknown image type"  imageSize :: ByteString -> Maybe ImageSize@@ -63,6 +67,7 @@        Png  -> pngSize img        Gif  -> gifSize img        Jpeg -> jpegSize img+       Eps  -> epsSize img        Pdf  -> Nothing  -- TODO  sizeInPixels :: ImageSize -> (Integer, Integer)@@ -70,6 +75,23 @@  sizeInPoints :: ImageSize -> (Integer, Integer) sizeInPoints s = (pxX s * 72 `div` dpiX s, pxY s * 72 `div` dpiY s)++epsSize :: ByteString -> Maybe ImageSize+epsSize img = do+  let ls = takeWhile ("%" `B.isPrefixOf`) $ B.lines img+  let ls' = dropWhile (not . ("%%BoundingBox:" `B.isPrefixOf`)) ls+  case ls' of+       []    -> mzero+       (x:_) -> case B.words x of+                     (_:_:_:ux:uy:[]) -> do+                        ux' <- safeRead $ B.unpack ux+                        uy' <- safeRead $ B.unpack uy+                        return ImageSize{+                            pxX  = ux'+                          , pxY  = uy'+                          , dpiX = 72+                          , dpiY = 72 }+                     _ -> mzero  pngSize :: ByteString -> Maybe ImageSize pngSize img = do
src/Text/Pandoc/MIME.hs view
@@ -27,7 +27,7 @@  Mime type lookup for ODT writer. -}-module Text.Pandoc.MIME ( getMimeType )+module Text.Pandoc.MIME ( getMimeType, extensionFromMimeType ) where import System.FilePath import Data.Char ( toLower )@@ -37,7 +37,14 @@ getMimeType :: FilePath -> Maybe String getMimeType "layout-cache" = Just "application/binary"  -- in ODT getMimeType f = M.lookup (map toLower $ drop 1 $ takeExtension f) mimeTypes-  where mimeTypes = M.fromList -- List borrowed from happstack-server.+  where mimeTypes = M.fromList mimeTypesList++extensionFromMimeType :: String -> Maybe String+extensionFromMimeType mimetype = M.lookup mimetype reverseMimeTypes+  where reverseMimeTypes = M.fromList $ map (\(k,v) -> (v,k)) mimeTypesList++mimeTypesList :: [(String, String)]+mimeTypesList = -- List borrowed from happstack-server.            [("gz","application/x-gzip")            ,("cabal","application/x-cabal")            ,("%","application/x-trash")
src/Text/Pandoc/Options.hs view
@@ -48,13 +48,13 @@ import qualified Data.Set as Set import Data.Default import Text.Pandoc.Highlighting (Style, pygments)-import qualified Text.CSL as CSL  -- | Individually selectable syntax extensions. data Extension =       Ext_footnotes           -- ^ Pandoc/PHP/MMD style footnotes     | Ext_inline_notes        -- ^ Pandoc-style inline notes     | Ext_pandoc_title_block  -- ^ Pandoc title block+    | Ext_yaml_metadata_block -- ^ YAML metadata block     | Ext_mmd_title_block     -- ^ Multimarkdown metadata block     | Ext_table_captions      -- ^ Pandoc-style table captions     | Ext_implicit_figures    -- ^ A paragraph with just an image is a figure@@ -80,6 +80,7 @@     | Ext_link_attributes     -- ^ MMD style reference link attributes     | Ext_autolink_bare_uris  -- ^ Make all absolute URIs into links     | Ext_fancy_lists         -- ^ Enable fancy list numbers and delimiters+    | Ext_lists_without_preceding_blankline -- ^ Allow lists without preceding blank     | Ext_startnum            -- ^ Make start number of ordered list significant     | Ext_definition_lists    -- ^ Definition lists as in pandoc, mmd, php     | Ext_example_lists       -- ^ Markdown-style numbered examples@@ -91,9 +92,11 @@     | Ext_superscript         -- ^ Superscript using ^this^ syntax     | Ext_subscript           -- ^ Subscript using ~this~ syntax     | Ext_hard_line_breaks    -- ^ All newlines become hard line breaks+    | Ext_ignore_line_breaks  -- ^ Newlines in paragraphs are ignored     | Ext_literate_haskell    -- ^ Enable literate Haskell conventions     | Ext_abbreviations       -- ^ PHP markdown extra abbreviation definitions     | Ext_auto_identifiers    -- ^ Automatic identifiers for headers+    | Ext_ascii_identifiers   -- ^ ascii-only identifiers for headers     | Ext_header_attributes   -- ^ Explicit header attributes {#id .class k=v}     | Ext_mmd_header_identifiers -- ^ Multimarkdown style header identifiers [myid]     | Ext_implicit_header_references -- ^ Implicit reference links for headers@@ -105,6 +108,7 @@   [ Ext_footnotes   , Ext_inline_notes   , Ext_pandoc_title_block+  , Ext_yaml_metadata_block   , Ext_table_captions   , Ext_implicit_figures   , Ext_simple_tables@@ -159,11 +163,14 @@   , Ext_tex_math_single_backslash   , Ext_fenced_code_blocks   , Ext_fenced_code_attributes+  , Ext_auto_identifiers+  , Ext_ascii_identifiers   , Ext_backtick_code_blocks   , Ext_autolink_bare_uris   , Ext_intraword_underscores   , Ext_strikeout   , Ext_hard_line_breaks+  , Ext_lists_without_preceding_blankline   ]  multimarkdownExtensions :: Set Extension@@ -199,8 +206,6 @@        , readerOldDashes       :: Bool -- ^ Use pandoc <= 1.8.2.1 behavior                                        --   in parsing dashes; -- is em-dash;                                        --   - before numerial is en-dash-       , readerReferences      :: [CSL.Reference]  -- ^ Bibliographic references-       , readerCitationStyle   :: Maybe CSL.Style -- ^ Citation style        , readerApplyMacros     :: Bool -- ^ Apply macros to TeX math        , readerIndentedCodeClasses :: [String] -- ^ Default classes for                                        -- indented code blocks@@ -217,8 +222,6 @@                , readerColumns               = 80                , readerTabStop               = 4                , readerOldDashes             = False-               , readerReferences            = []-               , readerCitationStyle         = Nothing                , readerApplyMacros           = True                , readerIndentedCodeClasses   = []                , readerDefaultImageExtension = ""@@ -255,6 +258,7 @@                       | SlidySlides                       | SlideousSlides                       | DZSlides+                      | RevealJsSlides                       | NoSlides                       deriving (Show, Read, Eq) @@ -279,10 +283,9 @@   , writerEmailObfuscation :: ObfuscationMethod -- ^ How to obfuscate emails   , writerIdentifierPrefix :: String -- ^ Prefix for section & note ids in HTML                                      -- and for footnote marks in markdown-  , writerSourceDirectory  :: FilePath -- ^ Directory path of 1st source file+  , writerSourceURL        :: Maybe String  -- ^ Absolute URL + directory of 1st source file   , writerUserDataDir      :: Maybe FilePath -- ^ Path of user data directory   , writerCiteMethod       :: CiteMethod -- ^ How to print cites-  , writerBiblioFiles      :: [FilePath] -- ^ Biblio files to use for citations   , writerHtml5            :: Bool       -- ^ Produce HTML5   , writerHtmlQTags        :: Bool       -- ^ Use @<q>@ tags for quotes in HTML   , writerBeamer           :: Bool       -- ^ Produce beamer LaTeX slide show@@ -322,10 +325,9 @@                       , writerColumns          = 72                       , writerEmailObfuscation = JavascriptObfuscation                       , writerIdentifierPrefix = ""-                      , writerSourceDirectory  = "."+                      , writerSourceURL        = Nothing                       , writerUserDataDir      = Nothing                       , writerCiteMethod       = Citeproc-                      , writerBiblioFiles      = []                       , writerHtml5            = False                       , writerHtmlQTags        = False                       , writerBeamer           = False
src/Text/Pandoc/PDF.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings, CPP #-} {- Copyright (C) 2012 John MacFarlane <jgm@berkeley.edu> @@ -28,29 +28,76 @@  Conversion of LaTeX documents to PDF. -}-module Text.Pandoc.PDF ( tex2pdf ) where+module Text.Pandoc.PDF ( makePDF ) where  import System.IO.Temp import Data.ByteString.Lazy (ByteString) import qualified Data.ByteString.Lazy as B import qualified Data.ByteString.Lazy.Char8 as BC+import qualified Data.ByteString as BS import System.Exit (ExitCode (..)) import System.FilePath import System.Directory-import System.Process-import Control.Exception (evaluate)-import System.IO (hClose)-import Control.Concurrent (putMVar, takeMVar, newEmptyMVar, forkIO)-import Text.Pandoc.UTF8 as UTF8+import System.Environment import Control.Monad (unless) import Data.List (isInfixOf)+import qualified Data.ByteString.Base64 as B64+import qualified Text.Pandoc.UTF8 as UTF8+import Text.Pandoc.Definition+import Text.Pandoc.Walk (walkM)+import Text.Pandoc.Shared (fetchItem, warn)+import Text.Pandoc.Options (WriterOptions(..))+import Text.Pandoc.MIME (extensionFromMimeType)+import Text.Pandoc.Process (pipeProcess)+import qualified Data.ByteString.Lazy as BL -tex2pdf :: String       -- ^ tex program (pdflatex, lualatex, xelatex)-        -> String       -- ^ latex source+withTempDir :: String -> (FilePath -> IO a) -> IO a+withTempDir =+#ifdef _WINDOWS+  withTempDirectory "."+#else+  withSystemTempDirectory+#endif++makePDF :: String              -- ^ pdf creator (pdflatex, lualatex, xelatex)+        -> (WriterOptions -> Pandoc -> String)  -- ^ writer+        -> WriterOptions       -- ^ options+        -> Pandoc              -- ^ document         -> IO (Either ByteString ByteString)-tex2pdf program source = withSystemTempDirectory "tex2pdf" $ \tmpdir ->+makePDF program writer opts doc = withTempDir "tex2pdf." $ \tmpdir -> do+  doc' <- handleImages (writerSourceURL opts) tmpdir doc+  let source = writer opts doc'   tex2pdf' tmpdir program source +handleImages :: Maybe String  -- ^ source base URL+             -> FilePath      -- ^ temp dir to store images+             -> Pandoc        -- ^ document+             -> IO Pandoc+handleImages baseURL tmpdir = walkM (handleImage' baseURL tmpdir)++handleImage' :: Maybe String+             -> FilePath+             -> Inline+             -> IO Inline+handleImage' baseURL tmpdir (Image ils (src,tit)) = do+    exists <- doesFileExist src+    if exists+       then return $ Image ils (src,tit)+       else do+         res <- fetchItem baseURL src+         case res of+              Right (contents, Just mime) -> do+                let ext = maybe (takeExtension src) id $+                          extensionFromMimeType mime+                let basename = UTF8.toString $ B64.encode $ UTF8.fromString src+                let fname = tmpdir </> basename <.> ext+                BS.writeFile fname contents+                return $ Image ils (fname,tit)+              _ -> do+                warn $ "Could not find image `" ++ src ++ "', skipping..."+                return $ Image ils (src,tit)+handleImage' _ _ x = return x+ tex2pdf' :: FilePath                        -- ^ temp directory for output          -> String                          -- ^ tex program          -> String                          -- ^ tex source@@ -62,8 +109,14 @@   (exit, log', mbPdf) <- runTeXProgram program numruns tmpDir source   let msg = "Error producing PDF from TeX source."   case (exit, mbPdf) of-       (ExitFailure _, _)      -> return $ Left $-                                     msg <> "\n" <> extractMsg log'+       (ExitFailure _, _)      -> do+          let logmsg = extractMsg log'+          let extramsg =+                case logmsg of+                     x | "! Package inputenc Error" `BC.isPrefixOf` x ->+                           "\nTry running pandoc with --latex-engine=xelatex."+                     _ -> ""+          return $ Left $ msg <> "\n" <> extractMsg log' <> extramsg        (ExitSuccess, Nothing)  -> return $ Left msg        (ExitSuccess, Just pdf) -> return $ Right pdf @@ -94,7 +147,12 @@     unless exists $ UTF8.writeFile file source     let programArgs = ["-halt-on-error", "-interaction", "nonstopmode",          "-output-directory", tmpDir, file]-    (exit, out, err) <- readCommand program programArgs+    env' <- getEnvironment+    let texinputs = maybe (tmpDir ++ ":") ((tmpDir ++ ":") ++)+          $ lookup "TEXINPUTS" env'+    let env'' = ("TEXINPUTS", texinputs) :+                  [(k,v) | (k,v) <- env', k /= "TEXINPUTS"]+    (exit, out, err) <- pipeProcess (Just env'') program programArgs BL.empty     if runsLeft > 1        then runTeXProgram program (runsLeft - 1) tmpDir source        else do@@ -105,32 +163,3 @@                    else return Nothing          return (exit, out <> err, pdf) --- utility functions---- Run a command and return exitcode, contents of stdout, and--- contents of stderr. (Based on--- 'readProcessWithExitCode' from 'System.Process'.)-readCommand :: FilePath                            -- ^ command to run-            -> [String]                            -- ^ any arguments-            -> IO (ExitCode,ByteString,ByteString) -- ^ exit, stdout, stderr-readCommand cmd args = do-    (Just inh, Just outh, Just errh, pid) <--        createProcess (proc cmd args){ std_in  = CreatePipe,-                                       std_out = CreatePipe,-                                       std_err = CreatePipe }-    outMVar <- newEmptyMVar-    -- fork off a thread to start consuming stdout-    out  <- B.hGetContents outh-    _ <- forkIO $ evaluate (B.length out) >> putMVar outMVar ()-    -- fork off a thread to start consuming stderr-    err  <- B.hGetContents errh-    _ <- forkIO $ evaluate (B.length err) >> putMVar outMVar ()-    -- now write and flush any input-    hClose inh -- done with stdin-    -- wait on the output-    takeMVar outMVar-    takeMVar outMVar-    hClose outh-    -- wait on the process-    ex <- waitForProcess pid-    return (ex, out, err)
src/Text/Pandoc/Parsing.hs view
@@ -75,6 +75,7 @@                              SubstTable,                              Key (..),                              toKey,+                             registerHeader,                              smartPunctuation,                              withQuoteContext,                              singleQuoteStart,@@ -141,6 +142,8 @@                              setPosition,                              sourceColumn,                              sourceLine,+                             setSourceColumn,+                             setSourceLine,                              newPos,                              token                              )@@ -148,7 +151,8 @@  import Text.Pandoc.Definition import Text.Pandoc.Options-import Text.Pandoc.Builder (Blocks, Inlines, rawBlock)+import Text.Pandoc.Builder (Blocks, Inlines, rawBlock, HasMeta(..))+import qualified Text.Pandoc.Builder as B import Text.Pandoc.XML (fromEntities) import qualified Text.Pandoc.UTF8 as UTF8 (putStrLn) import Text.Parsec@@ -159,12 +163,14 @@ import Text.Pandoc.Shared import qualified Data.Map as M import Text.TeXMath.Macros (applyMacros, Macro, parseMacroDefinitions)-import Text.HTML.TagSoup.Entity ( lookupEntity )+import Text.Pandoc.Compat.TagSoupEntity ( lookupEntity )+import Text.Pandoc.Asciify (toAsciiChar) import Data.Default import qualified Data.Set as Set import Control.Monad.Reader import Control.Applicative ((*>), (<*), (<$), liftA2) import Data.Monoid+import Data.Maybe (catMaybes)  type Parser t s = Parsec t s @@ -419,22 +425,23 @@ uri = try $ do   scheme <- uriScheme   char ':'-  -- /^[\/\w\u0080-\uffff]+|%[A-Fa-f0-9]+|&#?\w+;|(?:[,]+|[\S])[%&~\w\u0080-\uffff]/   -- We allow punctuation except at the end, since   -- we don't want the trailing '.' in 'http://google.com.' We want to allow   -- http://en.wikipedia.org/wiki/State_of_emergency_(disambiguation)   -- as a URL, while NOT picking up the closing paren in   -- (http://wikipedia.org). So we include balanced parens in the URL.-  let isWordChar c = isAlphaNum c || c == '_' || c == '/' || not (isAscii c)+  let isWordChar c = isAlphaNum c || c == '_' || c == '/' || c == '+' ||+                         not (isAscii c)   let wordChar = satisfy isWordChar   let percentEscaped = try $ char '%' >> skipMany1 (satisfy isHexDigit)   let entity = () <$ characterReference   let punct = skipMany1 (char ',')-          <|> () <$ (satisfy (not . isSpace))+          <|> () <$ (satisfy (\c -> not (isSpace c) && c /= '<'))   let uriChunk =  skipMany1 wordChar               <|> percentEscaped               <|> entity-              <|> (try $ punct >> lookAhead (satisfy isWordChar) >> return ())+              <|> (try $ punct >>+                    lookAhead (void (satisfy isWordChar) <|> percentEscaped))   str <- snd `fmap` withRaw (skipMany1 ( () <$                                          (enclosed (char '(') (char ')') uriChunk                                          <|> enclosed (char '{') (char '}') uriChunk@@ -762,13 +769,20 @@ ---  -- | Parse a string with a given parser and state.-readWith :: Parser [t] ParserState a      -- ^ parser-         -> ParserState                    -- ^ initial state-         -> [t]                            -- ^ input+readWith :: Parser [Char] st a       -- ^ parser+         -> st                       -- ^ initial state+         -> [Char]                   -- ^ input          -> a readWith parser state input =     case runParser parser state "source" input of-      Left err'    -> error $ "\nError:\n" ++ show err'+      Left err'    ->+        let errPos = errorPos err'+            errLine = sourceLine errPos+            errColumn = sourceColumn errPos+            theline = (lines input ++ [""]) !! (errLine - 1)+        in  error $ "\nError at " ++ show  err' ++ "\n" +++                theline ++ "\n" ++ replicate (errColumn - 1) ' ' +++                "^"       Right result -> result  -- | Parse a string with @parser@ (for testing).@@ -790,9 +804,8 @@       stateSubstitutions   :: SubstTable,    -- ^ List of substitution references       stateNotes           :: NoteTable,     -- ^ List of notes (raw bodies)       stateNotes'          :: NoteTable',    -- ^ List of notes (parsed bodies)-      stateTitle           :: [Inline],      -- ^ Title of document-      stateAuthors         :: [[Inline]],    -- ^ Authors of document-      stateDate            :: [Inline],      -- ^ Date of document+      stateMeta            :: Meta,          -- ^ Document metadata+      stateMeta'           :: F Meta,        -- ^ Document metadata       stateHeaderTable     :: [HeaderType],  -- ^ Ordered list of header types used       stateHeaders         :: M.Map Inlines String, -- ^ List of headers and ids (used for implicit ref links)       stateIdentifiers     :: [String],      -- ^ List of header identifiers used@@ -807,6 +820,12 @@ instance Default ParserState where   def = defaultParserState +instance HasMeta ParserState where+  setMeta field val st =+    st{ stateMeta = setMeta field val $ stateMeta st }+  deleteMeta field st =+    st{ stateMeta = deleteMeta field $ stateMeta st }+ defaultParserState :: ParserState defaultParserState =     ParserState { stateOptions         = def,@@ -819,9 +838,8 @@                   stateSubstitutions   = M.empty,                   stateNotes           = [],                   stateNotes'          = [],-                  stateTitle           = [],-                  stateAuthors         = [],-                  stateDate            = [],+                  stateMeta            = nullMeta,+                  stateMeta'           = return nullMeta,                   stateHeaderTable     = [],                   stateHeaders         = M.empty,                   stateIdentifiers     = [],@@ -871,6 +889,34 @@ type KeyTable = M.Map Key Target  type SubstTable = M.Map Key Inlines++--  | Add header to the list of headers in state, together+--  with its associated identifier.  If the identifier is null+--  and the auto_identifers extension is set, generate a new+--  unique identifier, and update the list of identifiers+--  in state.+registerHeader :: Attr -> Inlines -> Parser s ParserState Attr+registerHeader (ident,classes,kvs) header' = do+  ids <- stateIdentifiers `fmap` getState+  exts <- getOption readerExtensions+  let insert' = M.insertWith (\_new old -> old)+  if null ident && Ext_auto_identifiers `Set.member` exts+     then do+       let id' = uniqueIdent (B.toList header') ids+       let id'' = if Ext_ascii_identifiers `Set.member` exts+                     then catMaybes $ map toAsciiChar id'+                     else id'+       updateState $ \st -> st{+              stateIdentifiers = if id' == id''+                                    then id' : ids+                                    else id' : id'' : ids,+              stateHeaders = insert' header' id' $ stateHeaders st }+       return (id'',classes,kvs)+     else do+        unless (null ident) $+          updateState $ \st -> st{+               stateHeaders = insert' header' ident $ stateHeaders st }+        return (ident,classes,kvs)  -- | Fail unless we're in "smart typography" mode. failUnlessSmart :: Parser [tok] ParserState ()
src/Text/Pandoc/Pretty.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE GeneralizedNewtypeDeriving #-}+{-# LANGUAGE GeneralizedNewtypeDeriving, CPP #-} {- Copyright (C) 2010 John MacFarlane <jgm@berkeley.edu> 
+ src/Text/Pandoc/Process.hs view
@@ -0,0 +1,105 @@+{-+Copyright (C) 2013 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++{- |+   Module      : Text.Pandoc.Process+   Copyright   : Copyright (C) 2013 John MacFarlane+   License     : GNU GPL, version 2 or above++   Maintainer  : John MacFarlane <jgm@berkeley.edu>+   Stability   : alpha+   Portability : portable++ByteString variant of 'readProcessWithExitCode'.+-}+module Text.Pandoc.Process (pipeProcess)+where+import System.Process+import System.Exit (ExitCode (..))+import Control.Exception+import System.IO (hClose, hFlush)+import Control.Concurrent (putMVar, takeMVar, newEmptyMVar, forkIO)+import Control.Monad (unless)+import qualified Data.ByteString.Lazy as BL++{- |+Version of 'System.Process.readProcessWithExitCode' that uses lazy bytestrings+instead of strings and allows setting environment variables.++@readProcessWithExitCode@ creates an external process, reads its+standard output and standard error strictly, waits until the process+terminates, and then returns the 'ExitCode' of the process,+the standard output, and the standard error.++If an asynchronous exception is thrown to the thread executing+@readProcessWithExitCode@. The forked process will be terminated and+@readProcessWithExitCode@ will wait (block) until the process has been+terminated.+-}++pipeProcess+    :: Maybe [(String, String)] -- ^ environment variables+    -> FilePath                 -- ^ Filename of the executable (see 'proc' for details)+    -> [String]                 -- ^ any arguments+    -> BL.ByteString            -- ^ standard input+    -> IO (ExitCode,BL.ByteString,BL.ByteString) -- ^ exitcode, stdout, stderr+pipeProcess mbenv cmd args input =+    mask $ \restore -> do+      (Just inh, Just outh, Just errh, pid) <- createProcess (proc cmd args)+                                                   { env     = mbenv,+                                                     std_in  = CreatePipe,+                                                     std_out = CreatePipe,+                                                     std_err = CreatePipe }+      flip onException+        (do hClose inh; hClose outh; hClose errh;+            terminateProcess pid; waitForProcess pid) $ restore $ do+        -- fork off a thread to start consuming stdout+        out <- BL.hGetContents outh+        waitOut <- forkWait $ evaluate $ BL.length out++        -- fork off a thread to start consuming stderr+        err <- BL.hGetContents errh+        waitErr <- forkWait $ evaluate $ BL.length err++        -- now write and flush any input+        let writeInput = do+              unless (BL.null input) $ do+                BL.hPutStr inh input+                hFlush inh+              hClose inh++        writeInput++        -- wait on the output+        waitOut+        waitErr++        hClose outh+        hClose errh++        -- wait on the process+        ex <- waitForProcess pid++        return (ex, out, err)++forkWait :: IO a -> IO (IO a)+forkWait a = do+  res <- newEmptyMVar+  _ <- mask $ \restore -> forkIO $ try (restore a) >>= putMVar res+  return (takeMVar res >>= either (\ex -> throwIO (ex :: SomeException)) return)+
src/Text/Pandoc/Readers/DocBook.hs view
@@ -4,7 +4,7 @@ import Text.Pandoc.Definition import Text.Pandoc.Builder import Text.XML.Light-import Text.HTML.TagSoup.Entity (lookupEntity)+import Text.Pandoc.Compat.TagSoupEntity (lookupEntity) import Data.Generics import Data.Monoid import Data.Char (isSpace)
src/Text/Pandoc/Readers/HTML.hs view
@@ -39,7 +39,7 @@ import Text.HTML.TagSoup import Text.HTML.TagSoup.Match import Text.Pandoc.Definition-import Text.Pandoc.Builder (text, toList)+import qualified Text.Pandoc.Builder as B import Text.Pandoc.Shared import Text.Pandoc.Options import Text.Pandoc.Parsing@@ -47,6 +47,7 @@ import Data.List ( intercalate ) import Data.Char ( isDigit ) import Control.Monad ( liftM, guard, when, mzero )+import Control.Applicative ( (<$>), (<$), (<*) )  isSpace :: Char -> Bool isSpace ' '  = True@@ -58,29 +59,26 @@ readHtml :: ReaderOptions -- ^ Reader options          -> String        -- ^ String to parse (assumes @'\n'@ line endings)          -> Pandoc-readHtml opts inp = Pandoc meta blocks-  where blocks  = readWith parseBody def{ stateOptions = opts } rest-        tags    = canonicalizeTags $+readHtml opts inp =+  case runParser parseDoc def{ stateOptions = opts } "source" tags of+          Left err'    -> error $ "\nError at " ++ show  err'+          Right result -> result+    where tags = canonicalizeTags $                    parseTagsOptions parseOptions{ optTagPosition = True } inp-        hasHeader = any (~== TagOpen "head" []) tags-        (meta, rest) = if hasHeader-                          then parseHeader tags-                          else (Meta [] [] [], tags)+          parseDoc = do+             blocks <- (fixPlains False . concat) <$> manyTill block eof+             meta <- stateMeta <$> getState+             return $ Pandoc meta blocks  type TagParser = Parser [Tag String] ParserState --- TODO - fix this - not every header has a title tag-parseHeader :: [Tag String] -> (Meta, [Tag String])-parseHeader tags = (Meta{docTitle = tit'', docAuthors = [], docDate = []}, rest)-  where (tit,_) = break (~== TagClose "title") $ drop 1 $-                   dropWhile (\t -> not $ t ~== TagOpen "title" []) tags-        tit' = concatMap fromTagText $ filter isTagText tit-        tit'' = normalizeSpaces $ toList $ text tit'-        rest  = drop 1 $ dropWhile (\t -> not $ t ~== TagClose "head" ||-                                                t ~== TagOpen "body" []) tags+pBody :: TagParser [Block]+pBody = pInTags "body" block -parseBody :: TagParser [Block]-parseBody = liftM (fixPlains False . concat) $ manyTill block eof+pHead :: TagParser [Block]+pHead = pInTags "head" $ pTitle <|> ([] <$ pAnyTag)+  where pTitle = pInTags "title" inline >>= setTitle . normalizeSpaces+        setTitle t = [] <$ (updateState $ B.setMeta "title" (B.fromList t))  block :: TagParser [Block] block = choice@@ -90,7 +88,9 @@             , pCodeBlock             , pList             , pHrule-            , pSimpleTable+            , pTable+            , pHead+            , pBody             , pPlain             , pRawHtmlBlock             ]@@ -182,7 +182,7 @@   raw <- pHtmlBlock "script" <|> pHtmlBlock "style" <|> pRawTag   parseRaw <- getOption readerParseRaw   if parseRaw && not (null raw)-     then return [RawBlock "html" raw]+     then return [RawBlock (Format "html") raw]      else return []  pHtmlBlock :: String -> TagParser String@@ -212,28 +212,56 @@   pSelfClosing (=="hr") (const True)   return [HorizontalRule] -pSimpleTable :: TagParser [Block]-pSimpleTable = try $ do+pTable :: TagParser [Block]+pTable = try $ do   TagOpen _ _ <- pSatisfy (~== TagOpen "table" [])   skipMany pBlank   caption <- option [] $ pInTags "caption" inline >>~ skipMany pBlank-  skipMany $ (pInTags "col" block >> skipMany pBlank) <|>-             (pInTags "colgroup" block >> skipMany pBlank)+  -- TODO actually read these and take width information from them+  widths' <- pColgroup <|> many pCol   head' <- option [] $ pOptInTag "thead" $ pInTags "tr" (pCell "th")   skipMany pBlank   rows <- pOptInTag "tbody"           $ many1 $ try $ skipMany pBlank >> pInTags "tr" (pCell "td")   skipMany pBlank   TagClose _ <- pSatisfy (~== TagClose "table")-  let cols = maximum $ map length rows+  let isSinglePlain []        = True+      isSinglePlain [Plain _] = True+      isSinglePlain _         = False+  let isSimple = all isSinglePlain $ concat (head':rows)+  let cols = length $ if null head'+                         then head rows+                         else head'+  -- fail if there are colspans or rowspans+  guard $ all (\r -> length r == cols) rows   let aligns = replicate cols AlignLeft-  let widths = replicate cols 0+  let widths = if null widths'+                  then if isSimple+                       then replicate cols 0+                       else replicate cols (1.0 / fromIntegral cols)+                  else widths'   return [Table caption aligns widths head' rows] +pCol :: TagParser Double+pCol = try $ do+  TagOpen _ attribs <- pSatisfy (~== TagOpen "col" [])+  optional $ pSatisfy (~== TagClose "col")+  skipMany pBlank+  return $ case lookup "width" attribs of+           Just x | not (null x) && last x == '%' ->+             maybe 0.0 id $ safeRead ('0':'.':init x)+           _ -> 0.0++pColgroup :: TagParser [Double]+pColgroup = try $ do+  pSatisfy (~== TagOpen "colgroup" [])+  skipMany pBlank+  manyTill pCol (pCloses "colgroup" <|> eof) <* skipMany pBlank+ pCell :: String -> TagParser [TableCell] pCell celltype = try $ do   skipMany pBlank-  res <- pInTags celltype pPlain+  res <- pInTags celltype block   skipMany pBlank   return [res] @@ -363,7 +391,7 @@   let url = fromAttrib "src" tag   let title = fromAttrib "title" tag   let alt = fromAttrib "alt" tag-  return [Image (toList $ text alt) (escapeURI url, title)]+  return [Image (B.toList $ B.text alt) (escapeURI url, title)]  pCode :: TagParser [Inline] pCode = try $ do@@ -380,7 +408,7 @@   result <- pSatisfy (tagComment (const True)) <|> pSatisfy isInlineTag   parseRaw <- getOption readerParseRaw   if parseRaw-     then return [RawInline "html" $ renderTags' [result]]+     then return [RawInline (Format "html") $ renderTags' [result]]      else return []  pInlinesInTags :: String -> ([Inline] -> Inline)
+ src/Text/Pandoc/Readers/Haddock.hs view
@@ -0,0 +1,41 @@+{- |+   Module      : Text.Pandoc.Readers.Haddock+   Copyright   : Copyright (C) 2013 David Lazar+   License     : GNU GPL, version 2 or above++   Maintainer  : David Lazar <lazar6@illinois.edu>+   Stability   : alpha++Conversion of Haddock markup to 'Pandoc' document.+-}+module Text.Pandoc.Readers.Haddock+    ( readHaddock+    ) where++import Text.Pandoc.Builder+import Text.Pandoc.Options+import Text.Pandoc.Readers.Haddock.Lex+import Text.Pandoc.Readers.Haddock.Parse++-- | Parse Haddock markup and return a 'Pandoc' document.+readHaddock :: ReaderOptions -- ^ Reader options+            -> String        -- ^ String to parse+            -> Pandoc+readHaddock _ s = Pandoc nullMeta blocks+  where+    blocks = case parseParas (tokenise s (0,0)) of+        Left [] -> error "parse failure"+        Left (tok:_) -> error $ "parse failure " ++ pos (tokenPos tok)+          where pos (l, c) = "(line " ++ show l ++ ", column " ++ show c ++ ")"+        Right x -> mergeLists (toList x)++-- similar to 'docAppend' in Haddock.Doc+mergeLists :: [Block] -> [Block]+mergeLists (BulletList xs : BulletList ys : blocks)+    = mergeLists (BulletList (xs ++ ys) : blocks)+mergeLists (OrderedList _ xs : OrderedList a ys : blocks) +    = mergeLists (OrderedList a (xs ++ ys) : blocks)+mergeLists (DefinitionList xs : DefinitionList ys : blocks)+    = mergeLists (DefinitionList (xs ++ ys) : blocks)+mergeLists (x : blocks) = x : mergeLists blocks+mergeLists [] = []
+ src/Text/Pandoc/Readers/Haddock/Lex.x view
@@ -0,0 +1,171 @@+--+-- Haddock - A Haskell Documentation Tool+--+-- (c) Simon Marlow 2002+--+-- This file was modified and integrated into GHC by David Waern 2006.+-- Then moved back into Haddock by Isaac Dupree in 2009 :-)+-- Then copied into Pandoc by David Lazar in 2013 :-D++{+{-# LANGUAGE BangPatterns #-}   -- Generated by Alex+{-# OPTIONS -Wwarn -w #-}+-- The above warning supression flag is a temporary kludge.+-- While working on this module you are encouraged to remove it and fix+-- any warnings in the module. See+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings+-- for details++module Text.Pandoc.Readers.Haddock.Lex (+    Token(..),+    LToken,+    tokenise,+    tokenPos+ ) where++import Data.Char+import Numeric (readHex)+}++%wrapper "posn"++$ws       = $white # \n+$digit    = [0-9]+$hexdigit = [0-9a-fA-F]+$special  = [\"\@]+$alphanum = [A-Za-z0-9]+$ident    = [$alphanum \'\_\.\!\#\$\%\&\*\+\/\<\=\>\?\@\\\\\^\|\-\~\:]++:-++-- beginning of a paragraph+<0,para> {+  $ws* \n               ;+  $ws* \>               { begin birdtrack }+  $ws* prop \> .* \n    { strtoken TokProperty `andBegin` property}+  $ws* \>\>\>           { strtoken TokExamplePrompt `andBegin` exampleexpr }+  $ws* [\*\-]           { token TokBullet `andBegin` string }+  $ws* \[               { token TokDefStart `andBegin` def }+  $ws* \( $digit+ \)    { token TokNumber `andBegin` string }+  $ws* $digit+ \.       { token TokNumber `andBegin` string }+  $ws*                  { begin string }+}++-- beginning of a line+<line> {+  $ws* \>               { begin birdtrack }+  $ws* \>\>\>           { strtoken TokExamplePrompt `andBegin` exampleexpr }++  $ws* \n               { token TokPara `andBegin` para }+  -- ^ Here, we really want to be able to say+  -- $ws* (\n | <eof>)  { token TokPara `andBegin` para}+  -- because otherwise a trailing line of whitespace will result in+  -- a spurious TokString at the end of a docstring.  We don't have <eof>,+  -- though (NOW I realise what it was for :-).  To get around this, we always+  -- append \n to the end of a docstring.++  ()                    { begin string }+}++<birdtrack> .*  \n?     { strtokenNL TokBirdTrack `andBegin` line }++<property> ()           { token TokPara `andBegin` para }++<example> {+  $ws*  \n              { token TokPara `andBegin` para }+  $ws* \>\>\>           { strtoken TokExamplePrompt `andBegin` exampleexpr }+  ()                    { begin exampleresult }+}++<exampleexpr> .* \n     { strtokenNL TokExampleExpression `andBegin` example }++<exampleresult> .* \n   { strtokenNL TokExampleResult `andBegin` example }++<string,def> {+  $special              { strtoken $ \s -> TokSpecial (head s) }+  \<\< [^\>]* \>\>      { strtoken $ \s -> TokPic (init $ init $ tail $ tail s) }+  \< [^\>]* \>          { strtoken $ \s -> TokURL (init (tail s)) }+  \# [^\#]* \#          { strtoken $ \s -> TokAName (init (tail s)) }+  \/ [^\/]* \/          { strtoken $ \s -> TokEmphasis (init (tail s)) }+  [\'\`] $ident+ [\'\`] { strtoken $ \s -> TokIdent (init (tail s)) }+  \\ .                  { strtoken (TokString . tail) }+  "&#" $digit+ \;       { strtoken $ \s -> TokString [chr (read (init (drop 2 s)))] }+  "&#" [xX] $hexdigit+ \;+        { strtoken $ \s -> case readHex (init (drop 3 s)) of [(n,_)] -> TokString [chr n] }+  -- allow special characters through if they don't fit one of the previous+  -- patterns.+  [\/\'\`\<\#\&\\]      { strtoken TokString }+  [^ $special \/ \< \# \n \'\` \& \\ \]]* \n { strtokenNL TokString `andBegin` line }+  [^ $special \/ \< \# \n \'\` \& \\ \]]+    { strtoken TokString }+}++<def> {+  \]                    { token TokDefEnd `andBegin` string }+}++-- ']' doesn't have any special meaning outside of the [...] at the beginning+-- of a definition paragraph.+<string> {+  \]                    { strtoken TokString }+}++{+-- | A located token+type LToken = (Token, AlexPosn)++data Token+  = TokPara+  | TokNumber+  | TokBullet+  | TokDefStart+  | TokDefEnd+  | TokSpecial Char+  | TokIdent String+  | TokString String+  | TokURL String+  | TokPic String+  | TokEmphasis String+  | TokAName String+  | TokBirdTrack String+  | TokProperty String+  | TokExamplePrompt String+  | TokExampleExpression String+  | TokExampleResult String+  deriving Show++tokenPos :: LToken -> (Int, Int)+tokenPos t = let AlexPn _ line col = snd t in (line, col)++type StartCode = Int+type Action = AlexPosn -> String -> StartCode -> (StartCode -> [LToken]) -> [LToken]++tokenise :: String -> (Int, Int) -> [LToken]+tokenise str (line, col) = go (posn,'\n',[],eofHack str) para+  where posn = AlexPn 0 line col+        go inp@(pos,_,_,str) sc =+          case alexScan inp sc of+                AlexEOF -> []+                AlexError _ -> []+                AlexSkip  inp' len     -> go inp' sc+                AlexToken inp' len act -> act pos (take len str) sc (\sc -> go inp' sc)++-- NB. we add a final \n to the string, (see comment in the beginning of line+-- production above).+eofHack str = str++"\n"++andBegin :: Action -> StartCode -> Action+andBegin act new_sc = \pos str _ cont -> act pos str new_sc cont++token :: Token -> Action+token t = \pos _ sc cont -> (t, pos) : cont sc++strtoken, strtokenNL :: (String -> Token) -> Action+strtoken t = \pos str sc cont -> (t str, pos) : cont sc+strtokenNL t = \pos str sc cont -> (t (filter (/= '\r') str), pos) : cont sc+-- ^ We only want LF line endings in our internal doc string format, so we+-- filter out all CRs.++begin :: StartCode -> Action+begin sc = \_ _ _ cont -> cont sc++}
+ src/Text/Pandoc/Readers/Haddock/Parse.y view
@@ -0,0 +1,178 @@+-- This code was copied from the 'haddock' package, modified, and integrated+-- into Pandoc by David Lazar.+{+{-# LANGUAGE BangPatterns #-} -- required for versions of Happy before 1.18.6+-- The above warning supression flag is a temporary kludge.+-- While working on this module you are encouraged to remove it and fix+-- any warnings in the module. See+--     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings+-- for details++module Text.Pandoc.Readers.Haddock.Parse (parseString, parseParas) where++import Text.Pandoc.Readers.Haddock.Lex+import Text.Pandoc.Builder+import Text.Pandoc.Shared (trim, trimr)+import Data.Generics (everywhere, mkT)+import Data.Char  (isSpace)+import Data.Maybe (fromMaybe)+import Data.List  (stripPrefix, intersperse)+import Data.Monoid (mempty, mconcat)+}++%expect 0++%tokentype  { LToken }++%token+    '/'     { (TokSpecial '/',_) }+    '@'     { (TokSpecial '@',_) }+    '['     { (TokDefStart,_) }+    ']'     { (TokDefEnd,_) }+    DQUO    { (TokSpecial '\"',_) }+    URL     { (TokURL $$,_) }+    PIC     { (TokPic $$,_) }+    ANAME   { (TokAName $$,_) }+    '/../'  { (TokEmphasis $$,_) }+    '-'     { (TokBullet,_) }+    '(n)'   { (TokNumber,_) }+    '>..'   { (TokBirdTrack $$,_) }+    PROP    { (TokProperty $$,_) }+    PROMPT  { (TokExamplePrompt $$,_) }+    RESULT  { (TokExampleResult $$,_) }+    EXP     { (TokExampleExpression $$,_) }+    IDENT   { (TokIdent $$,_) }+    PARA    { (TokPara,_) }+    STRING  { (TokString $$,_) }++%monad { Either [LToken] }++%name parseParas doc+%name parseString seq++%%++doc :: { Blocks }+    : apara PARA doc    { $1 <> $3 }+    | PARA doc          { $2 }+    | apara             { $1 }+    | {- empty -}       { mempty }++apara :: { Blocks }+    : ulpara            { bulletList [$1] }+    | olpara            { orderedList [$1] }+    | defpara           { definitionList [$1] }+    | para              { $1 }++ulpara :: { Blocks }+    : '-' para          { $2 }++olpara  :: { Blocks }+    : '(n)' para        { $2 }++defpara :: { (Inlines, [Blocks]) }+    : '[' seq ']' seq   { (trimInlines $2, [plain $ trimInlines $4]) }++para :: { Blocks }+    : seq               { para' $1 }+    | codepara          { codeBlockWith ([], ["haskell"], []) $1 }+    | property          { $1 }+    | examples          { $1 }++codepara :: { String }+    : '>..' codepara    { $1 ++ $2 }+    | '>..'             { $1 }++property :: { Blocks }+    : PROP              { makeProperty $1 }++examples :: { Blocks }+    : example examples  { $1 <> $2 }+    | example           { $1 }++example :: { Blocks }+    : PROMPT EXP result { makeExample $1 $2 (lines $3) }+    | PROMPT EXP        { makeExample $1 $2 [] }++result :: { String }+    : RESULT result     { $1 ++ $2 }+    | RESULT            { $1 }++seq :: { Inlines }+    : elem seq          { $1 <> $2 }+    | elem              { $1 }++elem :: { Inlines }+    : elem1             { $1 }+    | '@' seq1 '@'      { monospace $2 }++seq1 :: { Inlines }+    : PARA seq1         { linebreak <> $2 }+    | elem1 seq1        { $1 <> $2 }+    | elem1             { $1 }++elem1 :: { Inlines }+    : STRING            { text $1 }+    | '/../'            { emph (str $1) }+    | URL               { makeHyperlink $1 }+    | PIC               { image $1 $1 mempty }+    | ANAME             { mempty } -- TODO+    | IDENT             { codeWith ([], ["haskell"], []) $1 }+    | DQUO strings DQUO { codeWith ([], ["haskell"], []) $2 }++strings :: { String }+    : STRING            { $1 }+    | STRING strings    { $1 ++ $2 }++{+happyError :: [LToken] -> Either [LToken] a+happyError toks = Left toks++para' :: Inlines -> Blocks+para' = para . trimInlines++monospace :: Inlines -> Inlines+monospace = everywhere (mkT go)+  where+    go (Str s) = Code nullAttr s+    go x = x++-- | Create a `Hyperlink` from given string.+--+-- A hyperlink consists of a URL and an optional label.  The label is separated+-- from the url by one or more whitespace characters.+makeHyperlink :: String -> Inlines+makeHyperlink input = case break isSpace $ trim input of+  (url, "") -> link url url (str url)+  (url, lb) -> link url url (trimInlines $ text lb)++makeProperty :: String -> Blocks+makeProperty s = case trim s of+  'p':'r':'o':'p':'>':xs ->+    codeBlockWith ([], ["property"], []) (dropWhile isSpace xs)+  xs ->+    error $ "makeProperty: invalid input " ++ show xs++-- | Create an 'Example', stripping superfluous characters as appropriate+makeExample :: String -> String -> [String] -> Blocks+makeExample prompt expression result =+    para $ codeWith ([], ["haskell","expr"], []) (trim expression)+        <> linebreak+        <> (mconcat $ intersperse linebreak $ map coder result')+  where+    -- 1. drop trailing whitespace from the prompt, remember the prefix+    prefix = takeWhile isSpace prompt++    -- 2. drop, if possible, the exact same sequence of whitespace+    -- characters from each result line+    --+    -- 3. interpret lines that only contain the string "<BLANKLINE>" as an+    -- empty line+    result' = map (substituteBlankLine . tryStripPrefix prefix) result+      where+        tryStripPrefix xs ys = fromMaybe ys $ stripPrefix xs ys++        substituteBlankLine "<BLANKLINE>" = ""+        substituteBlankLine line          = line+    coder = codeWith ([], ["result"], [])+}
src/Text/Pandoc/Readers/LaTeX.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE ScopedTypeVariables #-}+{-# LANGUAGE ScopedTypeVariables, OverloadedStrings #-} {- Copyright (C) 2006-2012 John MacFarlane <jgm@berkeley.edu> @@ -35,20 +35,21 @@                                  ) where  import Text.Pandoc.Definition+import Text.Pandoc.Walk import Text.Pandoc.Shared import Text.Pandoc.Options-import Text.Pandoc.Biblio (processBiblio) import Text.Pandoc.Parsing hiding ((<|>), many, optional, space) import qualified Text.Pandoc.UTF8 as UTF8 import Data.Char ( chr, ord ) import Control.Monad import Text.Pandoc.Builder-import Data.Char (isLetter, isPunctuation, isSpace)+import Data.Char (isLetter) import Control.Applicative import Data.Monoid+import Data.Maybe (fromMaybe) import System.Environment (getEnv) import System.FilePath (replaceExtension, (</>))-import Data.List (intercalate)+import Data.List (intercalate, intersperse) import qualified Data.Map as M import qualified Control.Exception as E import System.FilePath (takeExtension, addExtension)@@ -65,13 +66,9 @@   bs <- blocks   eof   st <- getState-  let title' = stateTitle st-  let authors' = stateAuthors st-  let date' = stateDate st-  refs <- getOption readerReferences-  mbsty <- getOption readerCitationStyle-  return $ processBiblio mbsty refs-         $ Pandoc (Meta title' authors' date') $ toList bs+  let meta = stateMeta st+  let (Pandoc _ bs') = doc bs+  return $ Pandoc meta bs'  type LP = Parser [Char] ParserState @@ -249,13 +246,13 @@ blockCommands :: M.Map String (LP Blocks) blockCommands = M.fromList $   [ ("par", mempty <$ skipopts)-  , ("title", mempty <$ (skipopts *> tok >>= addTitle))-  , ("subtitle", mempty <$ (skipopts *> tok >>= addSubtitle))+  , ("title", mempty <$ (skipopts *> tok >>= addMeta "title"))+  , ("subtitle", mempty <$ (skipopts *> tok >>= addMeta "subtitle"))   , ("author", mempty <$ (skipopts *> authors))   -- -- in letter class, temp. store address & sig as title, author-  , ("address", mempty <$ (skipopts *> tok >>= addTitle))+  , ("address", mempty <$ (skipopts *> tok >>= addMeta "address"))   , ("signature", mempty <$ (skipopts *> authors))-  , ("date", mempty <$ (skipopts *> tok >>= addDate))+  , ("date", mempty <$ (skipopts *> tok >>= addMeta "date"))   -- sectioning   , ("chapter", updateState (\s -> s{ stateHasChapters = True })                       *> section nullAttr 0)@@ -301,12 +298,8 @@   , "hspace", "vspace"   ] -addTitle :: Inlines -> LP ()-addTitle tit = updateState (\s -> s{ stateTitle = toList tit })--addSubtitle :: Inlines -> LP ()-addSubtitle tit = updateState (\s -> s{ stateTitle = stateTitle s ++-                        toList (str ":" <> linebreak <> tit) })+addMeta :: ToMetaValue a => String -> a -> LP ()+addMeta field val = updateState $ setMeta field val  authors :: LP () authors = try $ do@@ -317,18 +310,17 @@                -- skip e.g. \vspace{10pt}   auths <- sepBy oneAuthor (controlSeq "and")   char '}'-  updateState (\s -> s { stateAuthors = map (normalizeSpaces . toList) auths })--addDate :: Inlines -> LP ()-addDate dat = updateState (\s -> s{ stateDate = toList dat })+  addMeta "authors" (map trimInlines auths)  section :: Attr -> Int -> LP Blocks-section attr lvl = do+section (ident, classes, kvs) lvl = do   hasChapters <- stateHasChapters `fmap` getState   let lvl' = if hasChapters then lvl + 1 else lvl   skipopts   contents <- grouped inline-  return $ headerWith attr lvl' contents+  lab <- option ident $ try (spaces >> controlSeq "label" >> spaces >> braced)+  attr' <- registerHeader (lab, classes, kvs) contents+  return $ headerWith attr' lvl' contents  inlineCommand :: LP Inlines inlineCommand = try $ do@@ -363,6 +355,7 @@ inlineCommands = M.fromList $   [ ("emph", emph <$> tok)   , ("textit", emph <$> tok)+  , ("textsl", emph <$> tok)   , ("textsc", smallcaps <$> tok)   , ("sout", strikeout <$> tok)   , ("textsuperscript", superscript <$> tok)@@ -409,9 +402,13 @@   , ("l", lit "ł")   , ("ae", lit "æ")   , ("AE", lit "Æ")+  , ("oe", lit "œ")+  , ("OE", lit "Œ")   , ("pounds", lit "£")   , ("euro", lit "€")   , ("copyright", lit "©")+  , ("textasciicircum", lit "^")+  , ("textasciitilde", lit "~")   , ("`", option (str "`") $ try $ tok >>= accent grave)   , ("'", option (str "'") $ try $ tok >>= accent acute)   , ("^", option (str "^") $ try $ tok >>= accent circ)@@ -420,6 +417,8 @@   , (".", option (str ".") $ try $ tok >>= accent dot)   , ("=", option (str "=") $ try $ tok >>= accent macron)   , ("c", option (str "c") $ try $ tok >>= accent cedilla)+  , ("v", option (str "v") $ try $ tok >>= accent hacek)+  , ("u", option (str "u") $ try $ tok >>= accent breve)   , ("i", lit "i")   , ("\\", linebreak <$ (optional (bracketed inline) *> optional sp))   , (",", pure mempty)@@ -544,138 +543,197 @@ lit :: String -> LP Inlines lit = pure . str -accent :: (Char -> Char) -> Inlines -> LP Inlines+accent :: (Char -> String) -> Inlines -> LP Inlines accent f ils =   case toList ils of-       (Str (x:xs) : ys) -> return $ fromList $ (Str (f x : xs) : ys)+       (Str (x:xs) : ys) -> return $ fromList $ (Str (f x ++ xs) : ys)        []                -> mzero        _                 -> return ils -grave :: Char -> Char-grave 'A' = 'À'-grave 'E' = 'È'-grave 'I' = 'Ì'-grave 'O' = 'Ò'-grave 'U' = 'Ù'-grave 'a' = 'à'-grave 'e' = 'è'-grave 'i' = 'ì'-grave 'o' = 'ò'-grave 'u' = 'ù'-grave c   = c+grave :: Char -> String+grave 'A' = "À"+grave 'E' = "È"+grave 'I' = "Ì"+grave 'O' = "Ò"+grave 'U' = "Ù"+grave 'a' = "à"+grave 'e' = "è"+grave 'i' = "ì"+grave 'o' = "ò"+grave 'u' = "ù"+grave c   = [c] -acute :: Char -> Char-acute 'A' = 'Á'-acute 'E' = 'É'-acute 'I' = 'Í'-acute 'O' = 'Ó'-acute 'U' = 'Ú'-acute 'Y' = 'Ý'-acute 'a' = 'á'-acute 'e' = 'é'-acute 'i' = 'í'-acute 'o' = 'ó'-acute 'u' = 'ú'-acute 'y' = 'ý'-acute 'C' = 'Ć'-acute 'c' = 'ć'-acute 'L' = 'Ĺ'-acute 'l' = 'ĺ'-acute 'N' = 'Ń'-acute 'n' = 'ń'-acute 'R' = 'Ŕ'-acute 'r' = 'ŕ'-acute 'S' = 'Ś'-acute 's' = 'ś'-acute 'Z' = 'Ź'-acute 'z' = 'ź'-acute c = c+acute :: Char -> String+acute 'A' = "Á"+acute 'E' = "É"+acute 'I' = "Í"+acute 'O' = "Ó"+acute 'U' = "Ú"+acute 'Y' = "Ý"+acute 'a' = "á"+acute 'e' = "é"+acute 'i' = "í"+acute 'o' = "ó"+acute 'u' = "ú"+acute 'y' = "ý"+acute 'C' = "Ć"+acute 'c' = "ć"+acute 'L' = "Ĺ"+acute 'l' = "ĺ"+acute 'N' = "Ń"+acute 'n' = "ń"+acute 'R' = "Ŕ"+acute 'r' = "ŕ"+acute 'S' = "Ś"+acute 's' = "ś"+acute 'Z' = "Ź"+acute 'z' = "ź"+acute c   = [c] -circ :: Char -> Char-circ 'A' = 'Â'-circ 'E' = 'Ê'-circ 'I' = 'Î'-circ 'O' = 'Ô'-circ 'U' = 'Û'-circ 'a' = 'â'-circ 'e' = 'ê'-circ 'i' = 'î'-circ 'o' = 'ô'-circ 'u' = 'û'-circ 'C' = 'Ĉ'-circ 'c' = 'ĉ'-circ 'G' = 'Ĝ'-circ 'g' = 'ĝ'-circ 'H' = 'Ĥ'-circ 'h' = 'ĥ'-circ 'J' = 'Ĵ'-circ 'j' = 'ĵ'-circ 'S' = 'Ŝ'-circ 's' = 'ŝ'-circ 'W' = 'Ŵ'-circ 'w' = 'ŵ'-circ 'Y' = 'Ŷ'-circ 'y' = 'ŷ'-circ c = c+circ :: Char -> String+circ 'A' = "Â"+circ 'E' = "Ê"+circ 'I' = "Î"+circ 'O' = "Ô"+circ 'U' = "Û"+circ 'a' = "â"+circ 'e' = "ê"+circ 'i' = "î"+circ 'o' = "ô"+circ 'u' = "û"+circ 'C' = "Ĉ"+circ 'c' = "ĉ"+circ 'G' = "Ĝ"+circ 'g' = "ĝ"+circ 'H' = "Ĥ"+circ 'h' = "ĥ"+circ 'J' = "Ĵ"+circ 'j' = "ĵ"+circ 'S' = "Ŝ"+circ 's' = "ŝ"+circ 'W' = "Ŵ"+circ 'w' = "ŵ"+circ 'Y' = "Ŷ"+circ 'y' = "ŷ"+circ c   = [c] -tilde :: Char -> Char-tilde 'A' = 'Ã'-tilde 'a' = 'ã'-tilde 'O' = 'Õ'-tilde 'o' = 'õ'-tilde 'I' = 'Ĩ'-tilde 'i' = 'ĩ'-tilde 'U' = 'Ũ'-tilde 'u' = 'ũ'-tilde 'N' = 'Ñ'-tilde 'n' = 'ñ'-tilde c   = c+tilde :: Char -> String+tilde 'A' = "Ã"+tilde 'a' = "ã"+tilde 'O' = "Õ"+tilde 'o' = "õ"+tilde 'I' = "Ĩ"+tilde 'i' = "ĩ"+tilde 'U' = "Ũ"+tilde 'u' = "ũ"+tilde 'N' = "Ñ"+tilde 'n' = "ñ"+tilde c   = [c] -umlaut :: Char -> Char-umlaut 'A' = 'Ä'-umlaut 'E' = 'Ë'-umlaut 'I' = 'Ï'-umlaut 'O' = 'Ö'-umlaut 'U' = 'Ü'-umlaut 'a' = 'ä'-umlaut 'e' = 'ë'-umlaut 'i' = 'ï'-umlaut 'o' = 'ö'-umlaut 'u' = 'ü'-umlaut c = c+umlaut :: Char -> String+umlaut 'A' = "Ä"+umlaut 'E' = "Ë"+umlaut 'I' = "Ï"+umlaut 'O' = "Ö"+umlaut 'U' = "Ü"+umlaut 'a' = "ä"+umlaut 'e' = "ë"+umlaut 'i' = "ï"+umlaut 'o' = "ö"+umlaut 'u' = "ü"+umlaut c   = [c] -dot :: Char -> Char-dot 'C' = 'Ċ'-dot 'c' = 'ċ'-dot 'E' = 'Ė'-dot 'e' = 'ė'-dot 'G' = 'Ġ'-dot 'g' = 'ġ'-dot 'I' = 'İ'-dot 'Z' = 'Ż'-dot 'z' = 'ż'-dot c = c+dot :: Char -> String+dot 'C' = "Ċ"+dot 'c' = "ċ"+dot 'E' = "Ė"+dot 'e' = "ė"+dot 'G' = "Ġ"+dot 'g' = "ġ"+dot 'I' = "İ"+dot 'Z' = "Ż"+dot 'z' = "ż"+dot c   = [c] -macron :: Char -> Char-macron 'A' = 'Ā'-macron 'E' = 'Ē'-macron 'I' = 'Ī'-macron 'O' = 'Ō'-macron 'U' = 'Ū'-macron 'a' = 'ā'-macron 'e' = 'ē'-macron 'i' = 'ī'-macron 'o' = 'ō'-macron 'u' = 'ū'-macron c = c+macron :: Char -> String+macron 'A' = "Ā"+macron 'E' = "Ē"+macron 'I' = "Ī"+macron 'O' = "Ō"+macron 'U' = "Ū"+macron 'a' = "ā"+macron 'e' = "ē"+macron 'i' = "ī"+macron 'o' = "ō"+macron 'u' = "ū"+macron c   = [c] -cedilla :: Char -> Char-cedilla 'c' = 'ç'-cedilla 'C' = 'Ç'-cedilla 's' = 'ş'-cedilla 'S' = 'Ş'-cedilla c = c+cedilla :: Char -> String+cedilla 'c' = "ç"+cedilla 'C' = "Ç"+cedilla 's' = "ş"+cedilla 'S' = "Ş"+cedilla 't' = "ţ"+cedilla 'T' = "Ţ"+cedilla 'e' = "ȩ"+cedilla 'E' = "Ȩ"+cedilla 'h' = "ḩ"+cedilla 'H' = "Ḩ"+cedilla 'o' = "o̧"+cedilla 'O' = "O̧"+cedilla c   = [c] +hacek :: Char -> String+hacek 'A' = "Ǎ"+hacek 'a' = "ǎ"+hacek 'C' = "Č"+hacek 'c' = "č"+hacek 'D' = "Ď"+hacek 'd' = "ď"+hacek 'E' = "Ě"+hacek 'e' = "ě"+hacek 'G' = "Ǧ"+hacek 'g' = "ǧ"+hacek 'H' = "Ȟ"+hacek 'h' = "ȟ"+hacek 'I' = "Ǐ"+hacek 'i' = "ǐ"+hacek 'j' = "ǰ"+hacek 'K' = "Ǩ"+hacek 'k' = "ǩ"+hacek 'L' = "Ľ"+hacek 'l' = "ľ"+hacek 'N' = "Ň"+hacek 'n' = "ň"+hacek 'O' = "Ǒ"+hacek 'o' = "ǒ"+hacek 'R' = "Ř"+hacek 'r' = "ř"+hacek 'S' = "Š"+hacek 's' = "š"+hacek 'T' = "Ť"+hacek 't' = "ť"+hacek 'U' = "Ǔ"+hacek 'u' = "ǔ"+hacek 'Z' = "Ž"+hacek 'z' = "ž"+hacek c   = [c]++breve :: Char -> String+breve 'A' = "Ă"+breve 'a' = "ă"+breve 'E' = "Ĕ"+breve 'e' = "ĕ"+breve 'G' = "Ğ"+breve 'g' = "ğ"+breve 'I' = "Ĭ"+breve 'i' = "ĭ"+breve 'O' = "Ŏ"+breve 'o' = "ŏ"+breve 'U' = "Ŭ"+breve 'u' = "ŭ"+breve c   = [c]+ tok :: LP Inlines tok = try $ grouped inline <|> inlineCommand <|> str <$> (count 1 $ inlineChar) @@ -782,13 +840,21 @@ keyvals :: LP [(String, String)] keyvals = try $ char '[' *> manyTill keyval (char ']') +alltt :: String -> LP Blocks+alltt t = walk strToCode <$> parseFromString blocks+  (substitute " " "\\ " $ substitute "%" "\\%" $+   concat $ intersperse "\\\\\n" $ lines t)+  where strToCode (Str s) = Code nullAttr s+        strToCode x       = x+ verbatimEnv :: LP (String, String) verbatimEnv = do   (_,r) <- withRaw $ do              controlSeq "begin"              name <- braced              guard $ name == "verbatim" || name == "Verbatim" ||-                     name == "lstlisting" || name == "minted"+                     name == "lstlisting" || name == "minted" ||+                     name == "alltt"              verbEnv name   rest <- getInput   return (r,rest)@@ -805,6 +871,7 @@ environments = M.fromList   [ ("document", env "document" blocks <* skipMany anyChar)   , ("letter", env "letter" letter_contents)+  , ("figure", env "figure" $ skipopts *> blocks)   , ("center", env "center" blocks)   , ("tabular", env "tabular" simpTable)   , ("quote", blockQuote <$> env "quote" blocks)@@ -813,6 +880,7 @@   , ("itemize", bulletList <$> listenv "itemize" (many item))   , ("description", definitionList <$> listenv "description" (many descItem))   , ("enumerate", ordered_list)+  , ("alltt", alltt =<< verbEnv "alltt")   , ("code", guardEnabled Ext_literate_haskell *>       (codeBlockWith ("",["sourceCode","literate","haskell"],[]) <$>         verbEnv "code"))@@ -833,7 +901,7 @@                                       lookup "numbers" options == Just "left" ]                                  ++ maybe [] (:[]) (lookup "language" options                                          >>= fromListingsLanguage)-                      let attr = ("",classes,kvs)+                      let attr = (fromMaybe "" (lookup "label" options),classes,kvs)                       codeBlockWith attr <$> (verbEnv "lstlisting"))   , ("minted",     do options <- option [] keyvals                       lang <- grouped (many1 $ satisfy (/='}'))@@ -868,20 +936,24 @@   bs <- blocks   st <- getState   -- add signature (author) and address (title)-  let addr = case stateTitle st of-                  []   -> mempty-                  x    -> para $ trimInlines $ fromList x-  updateState $ \s -> s{ stateAuthors = [], stateTitle = [] }+  let addr = case lookupMeta "address" (stateMeta st) of+                  Just (MetaBlocks [Plain xs]) ->+                     para $ trimInlines $ fromList xs+                  _ -> mempty   return $ addr <> bs -- sig added by \closing  closing :: LP Blocks closing = do   contents <- tok   st <- getState-  let sigs = case stateAuthors st of-                  []   -> mempty-                  xs   -> para $ trimInlines $ fromList-                               $ intercalate [LineBreak] xs+  let extractInlines (MetaBlocks [Plain ys]) = ys+      extractInlines (MetaBlocks [Para ys ]) = ys+      extractInlines _          = []+  let sigs = case lookupMeta "author" (stateMeta st) of+                  Just (MetaList xs) ->+                    para $ trimInlines $ fromList $+                      intercalate [LineBreak] $ map extractInlines xs+                  _ -> mempty   return $ para (trimInlines contents) <> sigs  item :: LP Blocks@@ -977,12 +1049,8 @@  addSuffix :: [Inline] -> [Citation] -> [Citation] addSuffix s ks@(_:_) =-  let k  = last ks-      s' = case s of-                (Str (c:_):_)-                  | not (isPunctuation c || isSpace c) -> Str "," : Space : s-                _                                      -> s-  in  init ks ++ [k {citationSuffix = citationSuffix k ++ s'}]+  let k = last ks+  in  init ks ++ [k {citationSuffix = citationSuffix k ++ s}] addSuffix _ _ = []  simpleCiteArgs :: LP [Citation]@@ -1048,12 +1116,13 @@ parseAligns :: LP [Alignment] parseAligns = try $ do   char '{'-  optional $ char '|'+  let maybeBar = try $ spaces >> optional (char '|')+  maybeBar   let cAlign = AlignCenter <$ char 'c'   let lAlign = AlignLeft <$ char 'l'   let rAlign = AlignRight <$ char 'r'   let alignChar = optional sp *> (cAlign <|> lAlign <|> rAlign)-  aligns' <- sepEndBy alignChar (optional $ char '|')+  aligns' <- sepEndBy alignChar maybeBar   spaces   char '}'   spaces
src/Text/Pandoc/Readers/Markdown.hs view
@@ -37,7 +37,14 @@ import Data.Char ( isAlphaNum, toLower ) import Data.Maybe import Text.Pandoc.Definition+import qualified Data.Text as T+import Data.Text (Text)+import qualified Data.Yaml as Yaml+import Data.Yaml (ParseException(..), YamlException(..), YamlMark(..))+import qualified Data.HashMap.Strict as H import qualified Text.Pandoc.Builder as B+import qualified Text.Pandoc.UTF8 as UTF8+import qualified Data.Vector as V import Text.Pandoc.Builder (Inlines, Blocks, trimInlines, (<>)) import Text.Pandoc.Options import Text.Pandoc.Shared@@ -46,8 +53,6 @@ import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXBlock ) import Text.Pandoc.Readers.HTML ( htmlTag, htmlInBalanced, isInlineTag, isBlockTag,                                   isTextTag, isCommentTag )-import Text.Pandoc.Biblio (processBiblio)-import qualified Text.CSL as CSL import Data.Monoid (mconcat, mempty) import Control.Applicative ((<$>), (<*), (*>), (<$)) import Control.Monad@@ -195,12 +200,10 @@   skipSpaces   trimInlinesF . mconcat <$> manyTill inline newline -titleBlock :: MarkdownParser (F Inlines, F [Inlines], F Inlines)-titleBlock = pandocTitleBlock-         <|> mmdTitleBlock-         <|> return (mempty, return [], mempty)+titleBlock :: MarkdownParser ()+titleBlock = pandocTitleBlock <|> mmdTitleBlock -pandocTitleBlock :: MarkdownParser (F Inlines, F [Inlines], F Inlines)+pandocTitleBlock :: MarkdownParser () pandocTitleBlock = try $ do   guardEnabled Ext_pandoc_title_block   lookAhead (char '%')@@ -208,25 +211,107 @@   author <- option (return []) authorsLine   date <- option mempty dateLine   optional blanklines-  return (title, author, date)+  let meta' = do title' <- title+                 author' <- author+                 date' <- date+                 return $+                   ( if B.isNull title' then id else B.setMeta "title" title'+                   . if null author' then id else B.setMeta "author" author'+                   . if B.isNull date' then id else B.setMeta "date" date' )+                   nullMeta+  updateState $ \st -> st{ stateMeta' = stateMeta' st <> meta' } -mmdTitleBlock :: MarkdownParser (F Inlines, F [Inlines], F Inlines)+yamlMetaBlock :: MarkdownParser (F Blocks)+yamlMetaBlock = try $ do+  guardEnabled Ext_yaml_metadata_block+  pos <- getPosition+  string "---"+  blankline+  rawYamlLines <- manyTill anyLine stopLine+  -- by including --- and ..., we allow yaml blocks with just comments:+  let rawYaml = unlines ("---" : (rawYamlLines ++ ["..."]))+  optional blanklines+  opts <- stateOptions <$> getState+  meta' <- case Yaml.decodeEither' $ UTF8.fromString rawYaml of+                Right (Yaml.Object hashmap) -> return $ return $+                         H.foldrWithKey (\k v m ->+                              if ignorable k+                                 then m+                                 else B.setMeta (T.unpack k)+                                            (yamlToMeta opts v) m)+                           nullMeta hashmap+                Right Yaml.Null -> return $ return nullMeta+                Right _ -> do+                            addWarning (Just pos) "YAML header is not an object"+                            return $ return nullMeta+                Left err' -> do+                         case err' of+                            InvalidYaml (Just YamlParseException{+                                        yamlProblem = problem+                                      , yamlContext = _ctxt+                                      , yamlProblemMark = Yaml.YamlMark {+                                            yamlLine = yline+                                          , yamlColumn = ycol+                                      }}) ->+                                 addWarning (Just $ setSourceLine+                                    (setSourceColumn pos+                                       (sourceColumn pos + ycol))+                                    (sourceLine pos + 1 + yline))+                                    $ "Could not parse YAML header: " +++                                        problem+                            _ -> addWarning (Just pos)+                                    $ "Could not parse YAML header: " +++                                        show err'+                         return $ return nullMeta+  updateState $ \st -> st{ stateMeta' = stateMeta' st <> meta' }+  return mempty++-- ignore fields ending with _+ignorable :: Text -> Bool+ignorable t = (T.pack "_") `T.isSuffixOf` t++toMetaValue :: ReaderOptions -> Text -> MetaValue+toMetaValue opts x =+  case readMarkdown opts (T.unpack x) of+       Pandoc _ [Plain xs] -> MetaInlines xs+       Pandoc _ [Para xs]+         | endsWithNewline x -> MetaBlocks [Para xs]+         | otherwise         -> MetaInlines xs+       Pandoc _ bs           -> MetaBlocks bs+  where endsWithNewline t = (T.pack "\n") `T.isSuffixOf` t++yamlToMeta :: ReaderOptions -> Yaml.Value -> MetaValue+yamlToMeta opts (Yaml.String t) = toMetaValue opts t+yamlToMeta _    (Yaml.Number n) = MetaString $ show n+yamlToMeta _    (Yaml.Bool b) = MetaBool b+yamlToMeta opts (Yaml.Array xs) = B.toMetaValue $ map (yamlToMeta opts)+                                                $ V.toList xs+yamlToMeta opts (Yaml.Object o) = MetaMap $ H.foldrWithKey (\k v m ->+                                if ignorable k+                                   then m+                                   else M.insert (T.unpack k)+                                           (yamlToMeta opts v) m)+                               M.empty o+yamlToMeta _ _ = MetaString ""++stopLine :: MarkdownParser ()+stopLine = try $ (string "---" <|> string "...") >> blankline >> return ()++mmdTitleBlock :: MarkdownParser () mmdTitleBlock = try $ do   guardEnabled Ext_mmd_title_block   kvPairs <- many1 kvPair   blanklines-  let title = maybe mempty return $ lookup "title" kvPairs-  let author = maybe mempty (\x -> return [x]) $ lookup "author" kvPairs-  let date = maybe mempty return $ lookup "date" kvPairs-  return (title, author, date)+  updateState $ \st -> st{ stateMeta' = stateMeta' st <>+                             return (Meta $ M.fromList kvPairs) } -kvPair :: MarkdownParser (String, Inlines)+kvPair :: MarkdownParser (String, MetaValue) kvPair = try $ do   key <- many1Till (alphaNum <|> oneOf "_- ") (char ':')   val <- manyTill anyChar           (try $ newline >> lookAhead (blankline <|> nonspaceChar))   let key' = concat $ words $ map toLower key-  let val' = trimInlines $ B.text val+  let val' = MetaBlocks $ B.toList $ B.plain $ B.text $ trim val   return (key',val')  parseMarkdown :: MarkdownParser Pandoc@@ -235,16 +320,12 @@   updateState $ \state -> state { stateOptions =                 let oldOpts = stateOptions state in                     oldOpts{ readerParseRaw = True } }-  (title, authors, date) <- option (mempty,return [],mempty) titleBlock+  optional titleBlock   blocks <- parseBlocks   st <- getState-  mbsty <- getOption readerCitationStyle-  refs <- getOption readerReferences-  return $ processBiblio mbsty refs-         $ B.setTitle (runF title st)-         $ B.setAuthors (runF authors st)-         $ B.setDate (runF date st)-         $ B.doc $ runF blocks st+  let meta = runF (stateMeta' st) st+  let Pandoc _ bs = B.doc $ runF blocks st+  return $ Pandoc meta bs  addWarning :: Maybe SourcePos -> String -> MarkdownParser () addWarning mbpos msg =@@ -358,11 +439,14 @@ parseBlocks = mconcat <$> manyTill block eof  block :: MarkdownParser (F Blocks)-block = choice [ codeBlockFenced+block = choice [ mempty <$ blanklines+               , codeBlockFenced+               , yamlMetaBlock                , guardEnabled Ext_latex_macros *> (macro >>= return . return)                , header                , lhsCodeBlock                , rawTeXBlock+               , divHtml                , htmlBlock                , table                , lineBlock@@ -377,7 +461,6 @@                , abbrevKey                , para                , plain-               , mempty <$ blanklines                ] <?> "block"  --@@ -387,34 +470,15 @@ header :: MarkdownParser (F Blocks) header = setextHeader <|> atxHeader <?> "header" ---  returns unique identifier-addToHeaderList :: Attr -> F Inlines -> MarkdownParser Attr-addToHeaderList (ident,classes,kvs) text = do-  let header' = runF text defaultParserState-  exts <- getOption readerExtensions-  let insert' = M.insertWith (\_new old -> old)-  if null ident && Ext_auto_identifiers `Set.member` exts-     then do-       ids <- stateIdentifiers `fmap` getState-       let id' = uniqueIdent (B.toList header') ids-       updateState $ \st -> st{-              stateIdentifiers = id' : ids,-              stateHeaders = insert' header' id' $ stateHeaders st }-       return (id',classes,kvs)-     else do-        unless (null ident) $-          updateState $ \st -> st{-               stateHeaders = insert' header' ident $ stateHeaders st }-        return (ident,classes,kvs)- atxHeader :: MarkdownParser (F Blocks) atxHeader = try $ do   level <- many1 (char '#') >>= return . length-  notFollowedBy (char '.' <|> char ')') -- this would be a list+  notFollowedBy $ guardEnabled Ext_fancy_lists >>+                  (char '.' <|> char ')') -- this would be a list   skipSpaces   text <- trimInlinesF . mconcat <$> many (notFollowedBy atxClosing >> inline)   attr <- atxClosing-  attr' <- addToHeaderList attr text+  attr' <- registerHeader attr (runF text defaultParserState)   return $ B.headerWith attr' level <$> text  atxClosing :: MarkdownParser Attr@@ -453,7 +517,7 @@   many (char underlineChar)   blanklines   let level = (fromMaybe 0 $ findIndex (== underlineChar) setextHChars) + 1-  attr' <- addToHeaderList attr text+  attr' <- registerHeader attr (runF text defaultParserState)   return $ B.headerWith attr' level <$> text  --@@ -667,7 +731,7 @@                      many (spaceChar)                      listStart)   chunks <- manyTill (liftM snd (htmlTag isCommentTag) <|> count 1 anyChar) newline-  return $ concat chunks ++ "\n"+  return $ concat chunks  -- parse raw text for one list item, excluding start marker and continuations rawListItem :: MarkdownParser a@@ -677,7 +741,7 @@   first <- listLine   rest <- many (notFollowedBy listStart >> listLine)   blanks <- many blankline-  return $ concat (first:rest)  ++ blanks+  return $ unlines (first:rest) ++ blanks  -- continuation of a list item - indented and separated by blankline -- or (in compact lists) endline.@@ -807,8 +871,11 @@     $ try $ do             newline             (blanklines >> return mempty)-              <|> (guardDisabled Ext_blank_before_blockquote >> lookAhead blockQuote)-              <|> (guardDisabled Ext_blank_before_header >> lookAhead header)+              <|> (guardDisabled Ext_blank_before_blockquote >> () <$ lookAhead blockQuote)+              <|> (guardEnabled Ext_backtick_code_blocks >> () <$ lookAhead codeBlockFenced)+              <|> (guardDisabled Ext_blank_before_header >> () <$ lookAhead header)+              <|> (guardEnabled Ext_lists_without_preceding_blankline >>+                       () <$ lookAhead listStart)             return $ do               result' <- result               case B.toList result' of@@ -1256,19 +1323,18 @@                 , str                 , endline                 , code-                , fours-                , strong-                , emph+                , strongOrEmph                 , note                 , cite                 , link                 , image                 , math                 , strikeout-                , superscript                 , subscript+                , superscript                 , inlineNote  -- after superscript because of ^[link](/foo)^                 , autoLink+                , spanHtml                 , rawHtmlInline                 , escapedChar                 , rawLaTeXInline'@@ -1371,15 +1437,59 @@   notFollowedBy digit  -- to prevent capture of $5   return $ concat words' --- to avoid performance problems, treat 4 or more _ or * or ~ or ^ in a row--- as a literal rather than attempting to parse for emph/strong/strikeout/super/sub-fours :: Parser [Char] st (F Inlines)-fours = try $ do-  x <- char '*' <|> char '_' <|> char '~' <|> char '^'-  count 2 $ satisfy (==x)-  rest <- many1 (satisfy (==x))-  return $ return $ B.str (x:x:x:rest)+-- Parses material enclosed in *s, **s, _s, or __s.+-- Designed to avoid backtracking.+enclosure :: Char+          -> MarkdownParser (F Inlines)+enclosure c = do+  cs <- many1 (char c)+  (return (B.str cs) <>) <$> whitespace+    <|> case length cs of+             3  -> three c+             2  -> two   c mempty+             1  -> one   c mempty+             _  -> return (return $ B.str cs) +-- Parse inlines til you hit one c or a sequence of two cs.+-- If one c, emit emph and then parse two.+-- If two cs, emit strong and then parse one.+three :: Char -> MarkdownParser (F Inlines)+three c = do+  contents <- mconcat <$> many (notFollowedBy (char c) >> inline)+  (try (string [c,c,c]) >> return ((B.strong . B.emph) <$> contents))+    <|> (try (string [c,c]) >> one c (B.strong <$> contents))+    <|> (char c >> two c (B.emph <$> contents))+    <|> return (return (B.str [c,c,c]) <> contents)++-- Parse inlines til you hit two c's, and emit strong.+-- If you never do hit two cs, emit ** plus inlines parsed.+two :: Char -> F Inlines -> MarkdownParser (F Inlines)+two c prefix' = do+  let ender = try $ string [c,c]+  contents <- mconcat <$> many (try $ notFollowedBy ender >> inline)+  (ender >> return (B.strong <$> (prefix' <> contents)))+    <|> return (return (B.str [c,c]) <> (prefix' <> contents))++-- Parse inlines til you hit a c, and emit emph.+-- If you never hit a c, emit * plus inlines parsed.+one :: Char -> F Inlines -> MarkdownParser (F Inlines)+one c prefix' = do+  contents <- mconcat <$> many (  (notFollowedBy (char c) >> inline)+                           <|> try (string [c,c] >>+                                    notFollowedBy (char c) >>+                                    two c prefix') )+  (char c >> return (B.emph <$> (prefix' <> contents)))+    <|> return (return (B.str [c]) <> (prefix' <> contents))++strongOrEmph :: MarkdownParser (F Inlines)+strongOrEmph =  enclosure '*' <|> (checkIntraword >> enclosure '_')+  where  checkIntraword = do+           exts <- getOption readerExtensions+           when (Ext_intraword_underscores `Set.member` exts) $ do+             pos <- getPosition+             lastStrPos <- stateLastStrPos <$> getState+             guard $ lastStrPos /= Just pos+ -- | Parses a list of inlines between start and end delimiters. inlinesBetween :: (Show b)                => MarkdownParser a@@ -1390,28 +1500,6 @@     where inner      = innerSpace <|> (notFollowedBy' (() <$ whitespace) >> inline)           innerSpace = try $ whitespace >>~ notFollowedBy' end -emph :: MarkdownParser (F Inlines)-emph = fmap B.emph <$> nested-  (inlinesBetween starStart starEnd <|> inlinesBetween ulStart ulEnd)-    where starStart = char '*' >> lookAhead nonspaceChar-          starEnd   = notFollowedBy' (() <$ strong) >> char '*'-          ulStart   = checkIntraword >> char '_' >> lookAhead nonspaceChar-          ulEnd     = notFollowedBy' (() <$ strong) >> char '_'-          checkIntraword = do-            exts <- getOption readerExtensions-            when (Ext_intraword_underscores `Set.member` exts) $ do-              pos <- getPosition-              lastStrPos <- stateLastStrPos <$> getState-              guard $ lastStrPos /= Just pos--strong :: MarkdownParser (F Inlines)-strong = fmap B.strong <$> nested-  (inlinesBetween starStart starEnd <|> inlinesBetween ulStart ulEnd)-    where starStart = string "**" >> lookAhead nonspaceChar-          starEnd   = try $ string "**"-          ulStart   = string "__" >> lookAhead nonspaceChar-          ulEnd     = try $ string "__"- strikeout :: MarkdownParser (F Inlines) strikeout = fmap B.strikeout <$>  (guardEnabled Ext_strikeout >> inlinesBetween strikeStart strikeEnd)@@ -1474,14 +1562,18 @@ endline = try $ do   newline   notFollowedBy blankline+  guardDisabled Ext_lists_without_preceding_blankline <|> notFollowedBy listStart   guardEnabled Ext_blank_before_blockquote <|> notFollowedBy emailBlockQuoteStart   guardEnabled Ext_blank_before_header <|> notFollowedBy (char '#') -- atx header+  guardEnabled Ext_backtick_code_blocks >>+     notFollowedBy (() <$ (lookAhead (char '`') >> codeBlockFenced))   -- parse potential list-starts differently if in a list:   st <- getState   when (stateParserContext st == ListItemState) $ do      notFollowedBy' bulletListStart      notFollowedBy' anyOrderedListStart   (guardEnabled Ext_hard_line_breaks >> return (return B.linebreak))+    <|> (guardEnabled Ext_ignore_line_breaks >> return mempty)     <|> (return $ return B.space)  --@@ -1536,37 +1628,47 @@ referenceLink :: (String -> String -> Inlines -> Inlines)               -> (F Inlines, String) -> MarkdownParser (F Inlines) referenceLink constructor (lab, raw) = do-  (ref,raw') <- try (optional (char ' ') >>-                 optional (newline >> skipSpaces) >>-                 reference) <|> return (mempty, "")+  sp <- (True <$ lookAhead (char ' ')) <|> return False+  (ref,raw') <- try+           (skipSpaces >> optional (newline >> skipSpaces) >> reference)+           <|> return (mempty, "")   let labIsRef = raw' == "" || raw' == "[]"   let key = toKey $ if labIsRef then raw else raw'-  let dropRB (']':xs) = xs-      dropRB xs = xs-  let dropLB ('[':xs) = xs-      dropLB xs = xs-  let dropBrackets = reverse . dropRB . reverse . dropLB+  parsedRaw <- parseFromString (mconcat <$> many inline) raw'   fallback <- parseFromString (mconcat <$> many inline) $ dropBrackets raw   implicitHeaderRefs <- option False $                          True <$ guardEnabled Ext_implicit_header_references+  let makeFallback = do+       parsedRaw' <- parsedRaw+       fallback' <- fallback+       return $ B.str "[" <> fallback' <> B.str "]" <>+                (if sp && not (null raw) then B.space else mempty) <>+                parsedRaw'   return $ do     keys <- asksF stateKeys     case M.lookup key keys of        Nothing        -> do          headers <- asksF stateHeaders-         let ref' = runF (if labIsRef then lab else ref) defaultParserState-         let makeFallback x = B.str "[" <> x <> B.str "]" <> B.str raw'+         ref' <- if labIsRef then lab else ref          if implicitHeaderRefs             then case M.lookup ref' headers of                    Just ident -> constructor ('#':ident) "" <$> lab-                   Nothing    -> makeFallback <$> fallback-            else makeFallback <$> fallback+                   Nothing    -> makeFallback+            else makeFallback        Just (src,tit) -> constructor src tit <$> lab +dropBrackets :: String -> String+dropBrackets = reverse . dropRB . reverse . dropLB+  where dropRB (']':xs) = xs+        dropRB xs = xs+        dropLB ('[':xs) = xs+        dropLB xs = xs+ bareURL :: MarkdownParser (F Inlines) bareURL = try $ do   guardEnabled Ext_autolink_bare_uris   (orig, src) <- uri <|> emailAddress+  notFollowedBy $ try $ spaces >> htmlTag (~== TagClose "a")   return $ return $ B.link src "" (B.str orig)  autoLink :: MarkdownParser (F Inlines)@@ -1637,6 +1739,26 @@   char ']'   return $ "[" ++ contents ++ "]" +spanHtml :: MarkdownParser (F Inlines)+spanHtml = try $ do+  guardEnabled Ext_markdown_in_html_blocks+  (TagOpen _ attrs, _) <- htmlTag (~== TagOpen "span" [])+  contents <- mconcat <$> manyTill inline (htmlTag (~== TagClose "span"))+  let ident = maybe "" id $ lookup "id" attrs+  let classes = maybe [] words $ lookup "class" attrs+  let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]+  return $ B.spanWith (ident, classes, keyvals) <$> contents++divHtml :: MarkdownParser (F Blocks)+divHtml = try $ do+  guardEnabled Ext_markdown_in_html_blocks+  (TagOpen _ attrs, _) <- htmlTag (~== TagOpen "div" [])+  contents <- mconcat <$> manyTill block (htmlTag (~== TagClose "div"))+  let ident = maybe "" id $ lookup "id" attrs+  let classes = maybe [] words $ lookup "class" attrs+  let keyvals = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]+  return $ B.divWith (ident, classes, keyvals) <$> contents+ rawHtmlInline :: MarkdownParser (F Inlines) rawHtmlInline = do   guardEnabled Ext_raw_html@@ -1652,11 +1774,12 @@ cite :: MarkdownParser (F Inlines) cite = do   guardEnabled Ext_citations-  getOption readerReferences >>= guard . not . null-  citations <- textualCite <|> normalCite-  return $ flip B.cite mempty <$> citations+  citations <- textualCite+            <|> do (cs, raw) <- withRaw normalCite+                   return $ (flip B.cite (B.text raw)) <$> cs+  return citations -textualCite :: MarkdownParser (F [Citation])+textualCite :: MarkdownParser (F Inlines) textualCite = try $ do   (_, key) <- citeKey   let first = Citation{ citationId      = key@@ -1666,10 +1789,18 @@                       , citationNoteNum = 0                       , citationHash    = 0                       }-  mbrest <- option Nothing $ try $ spnl >> Just <$> normalCite+  mbrest <- option Nothing $ try $ spnl >> Just <$> withRaw normalCite   case mbrest of-       Just rest  -> return $ (first:) <$> rest-       Nothing    -> option (return [first]) $ bareloc first+       Just (rest, raw) ->+         return $ (flip B.cite (B.text $ '@':key ++ " " ++ raw) . (first:))+               <$> rest+       Nothing   ->+         (do (cs, raw) <- withRaw $ bareloc first+             return $ (flip B.cite (B.text $ '@':key ++ " " ++ raw)) <$> cs)+         <|> return (do st <- askF+                        return $ case M.lookup key (stateExamples st) of+                                 Just n -> B.str (show n)+                                 _      -> B.cite [first] $ B.str $ '@':key)  bareloc :: Citation -> MarkdownParser (F [Citation]) bareloc c = try $ do@@ -1695,14 +1826,17 @@  citeKey :: MarkdownParser (Bool, String) citeKey = try $ do+  -- make sure we're not right after an alphanumeric,+  -- since foo@bar.baz is probably an email address+  lastStrPos <- stateLastStrPos <$> getState+  pos <- getPosition+  guard $ lastStrPos /= Just pos   suppress_author <- option False (char '-' >> return True)   char '@'   first <- letter   let internal p = try $ p >>~ lookAhead (letter <|> digit)-  rest <- many $ letter <|> digit <|> internal (oneOf ":.#$%&-_?<>~/")+  rest <- many $ letter <|> digit <|> internal (oneOf ":.#$%&-_+?<>~/")   let key = first:rest-  citations' <- map CSL.refId <$> getOption readerReferences-  guard $ key `elem` citations'   return (suppress_author, key)  suffix :: MarkdownParser (F Inlines)
src/Text/Pandoc/Readers/MediaWiki.hs view
@@ -42,15 +42,16 @@ import Text.Pandoc.Readers.HTML ( htmlTag, isBlockTag, isCommentTag ) import Text.Pandoc.XML ( fromEntities ) import Text.Pandoc.Parsing hiding ( nested )-import Text.Pandoc.Generic ( bottomUp )-import Text.Pandoc.Shared ( stripTrailingNewlines, safeRead )+import Text.Pandoc.Walk ( walk )+import Text.Pandoc.Shared ( stripTrailingNewlines, safeRead, stringify ) import Data.Monoid (mconcat, mempty) import Control.Applicative ((<$>), (<*), (*>), (<$)) import Control.Monad import Data.List (intersperse, intercalate, isPrefixOf ) import Text.HTML.TagSoup import Data.Sequence (viewl, ViewL(..), (<|))-import Data.Char (isDigit)+import qualified Data.Foldable as F+import Data.Char (isDigit, isSpace)  -- | Read mediawiki from an input string and return a Pandoc document. readMediaWiki :: ReaderOptions -- ^ Reader options@@ -90,7 +91,7 @@   return res  specialChars :: [Char]-specialChars = "'[]<=&*{}|\""+specialChars = "'[]<=&*{}|\":\\"  spaceChars :: [Char] spaceChars = " \n\t"@@ -175,13 +176,17 @@      <|> para  para :: MWParser Blocks-para = B.para . trimInlines . mconcat <$> many1 inline+para = do+  contents <- trimInlines . mconcat <$> many1 inline+  if F.all (==Space) contents+     then return mempty+     else return $ B.para contents  table :: MWParser Blocks table = do   tableStart-  styles <- anyLine-  let tableWidth = case lookup "width" $ parseAttrs styles of+  styles <- option [] parseAttrs <* blankline+  let tableWidth = case lookup "width" styles of                          Just w  -> maybe 1.0 id $ parseWidth w                          Nothing -> 1.0   caption <- option mempty tableCaption@@ -204,32 +209,31 @@                           else (replicate cols mempty, hdr:rows')   return $ B.table caption cellspecs headers rows -parseAttrs :: String -> [(String,String)]-parseAttrs s = case parse (many parseAttr) "attributes" s of-                    Right r -> r-                    Left _  -> []+parseAttrs :: MWParser [(String,String)]+parseAttrs = many1 parseAttr -parseAttr :: Parser String () (String, String)+parseAttr :: MWParser (String, String) parseAttr = try $ do   skipMany spaceChar   k <- many1 letter   char '='   char '"'-  v <- many1Till anyChar (char '"')+  v <- many1Till (satisfy (/='\n')) (char '"')   return (k,v)  tableStart :: MWParser ()-tableStart = try $ guardColumnOne *> sym "{|"+tableStart = try $ guardColumnOne *> skipSpaces *> sym "{|"  tableEnd :: MWParser ()-tableEnd = try $ guardColumnOne *> sym "|}"+tableEnd = try $ guardColumnOne *> skipSpaces *> sym "|}"  rowsep :: MWParser ()-rowsep = try $ guardColumnOne *> sym "|-" <* blanklines+rowsep = try $ guardColumnOne *> skipSpaces *> sym "|-" <*+               optional parseAttr <* blanklines  cellsep :: MWParser () cellsep = try $-             (guardColumnOne <*+             (guardColumnOne *> skipSpaces <*                  (  (char '|' <* notFollowedBy (oneOf "-}+"))                 <|> (char '!')                  )@@ -240,10 +244,10 @@ tableCaption :: MWParser Inlines tableCaption = try $ do   guardColumnOne+  skipSpaces   sym "|+"-  skipMany spaceChar-  res <- anyLine >>= parseFromString (many inline)-  return $ trimInlines $ mconcat res+  optional (try $ parseAttr *> skipSpaces *> char '|' *> skipSpaces)+  (trimInlines . mconcat) <$> many (notFollowedBy (cellsep <|> rowsep) *> inline)  tableRow :: MWParser [((Alignment, Double), Blocks)] tableRow = try $ many tableCell@@ -252,8 +256,8 @@ tableCell = try $ do   cellsep   skipMany spaceChar-  attrs <- option [] $ try $ parseAttrs <$>-       manyTill (satisfy (/='\n')) (char '|' <* notFollowedBy (char '|'))+  attrs <- option [] $ try $ parseAttrs <* skipSpaces <* char '|' <*+                                 notFollowedBy (char '|')   skipMany spaceChar   ls <- concat <$> many (notFollowedBy (cellsep <|> rowsep <|> tableEnd) *>                      ((snd <$> withRaw table) <|> count 1 anyChar))@@ -329,10 +333,16 @@                 lines . fromEntities . map spToNbsp <$> try                   (htmlTag (~== TagOpen "nowiki" []) *>                    manyTill anyChar (htmlTag (~== TagClose "nowiki")))-  let inline' = whitespace' <|> endline' <|> nowiki' <|> inline+  let inline' = whitespace' <|> endline' <|> nowiki'+                  <|> (try $ notFollowedBy newline *> inline)   let strToCode (Str s) = Code ("",[],[]) s       strToCode  x      = x-  B.para . bottomUp strToCode . mconcat <$> many1 inline'+  contents <- mconcat <$> many1 inline'+  let spacesStr (Str xs) = all isSpace xs+      spacesStr _        = False+  if F.all spacesStr contents+     then return mempty+     else return $ B.para $ walk strToCode contents  header :: MWParser Blocks header = try $ do@@ -370,8 +380,9 @@   terms <- mconcat . intersperse B.linebreak <$> many defListTerm   -- we allow dd with no dt, or dt with no dd   defs  <- if B.isNull terms-              then many1 $ listItem ':'-              else many $ listItem ':'+              then notFollowedBy (try $ string ":<math>") *>+                       many1 (listItem ':')+              else many (listItem ':')   return (terms, defs)  defListTerm  :: MWParser Inlines@@ -452,6 +463,7 @@       <|> image       <|> internalLink       <|> externalLink+      <|> math       <|> inlineTag       <|> B.singleton <$> charRef       <|> inlineHtml@@ -462,6 +474,16 @@ str :: MWParser Inlines str = B.str <$> many1 (noneOf $ specialChars ++ spaceChars) +math :: MWParser Inlines+math = (B.displayMath <$> try (char ':' >> charsInTags "math"))+   <|> (B.math <$> charsInTags "math")+   <|> (B.displayMath <$> try (dmStart *> manyTill anyChar dmEnd))+   <|> (B.math <$> try (mStart *> manyTill (satisfy (/='\n')) mEnd))+ where dmStart = string "\\["+       dmEnd   = try (string "\\]")+       mStart  = string "\\("+       mEnd    = try (string "\\)")+ variable :: MWParser String variable = try $ do   string "{{{"@@ -485,7 +507,6 @@        TagOpen "del" _ -> B.strikeout <$> inlinesInTags "del"        TagOpen "sub" _ -> B.subscript <$> inlinesInTags "sub"        TagOpen "sup" _ -> B.superscript <$> inlinesInTags "sup"-       TagOpen "math" _ -> B.math <$> charsInTags "math"        TagOpen "code" _ -> B.code <$> charsInTags "code"        TagOpen "tt" _ -> B.code <$> charsInTags "tt"        TagOpen "hask" _ -> B.codeWith ("",["haskell"],[]) <$> charsInTags "hask"@@ -503,7 +524,8 @@  endline :: MWParser () endline = () <$ try (newline <*-                     notFollowedBy blankline <*+                     notFollowedBy spaceChar <*+                     notFollowedBy newline <*                      notFollowedBy' hrule <*                      notFollowedBy tableStart <*                      notFollowedBy' header <*@@ -512,12 +534,12 @@ image :: MWParser Inlines image = try $ do   sym "[["-  sym "File:"+  sym "File:" <|> sym "Image:"   fname <- many1 (noneOf "|]")   _ <- many (try $ char '|' *> imageOption)   caption <-   (B.str fname <$ sym "]]")            <|> try (char '|' *> (mconcat <$> manyTill inline (sym "]]")))-  return $ B.image fname "image" caption+  return $ B.image fname ("fig:" ++ stringify caption) caption  imageOption :: MWParser String imageOption =
src/Text/Pandoc/Readers/Native.hs view
@@ -33,12 +33,6 @@ import Text.Pandoc.Definition import Text.Pandoc.Shared (safeRead) -nullMeta :: Meta-nullMeta = Meta{ docTitle = []-               , docAuthors = []-               , docDate = []-               }- -- | Read native formatted text and return a Pandoc document. -- The input may be a full pandoc document, a block list, a block, -- an inline list, or an inline.  Thus, for example,@@ -47,7 +41,7 @@ -- -- will be treated as if it were ----- > Pandoc (Meta [] [] []) [Plain [Str "hi"]]+-- > Pandoc nullMeta [Plain [Str "hi"]] -- readNative :: String      -- ^ String to parse (assuming @'\n'@ line endings)            -> Pandoc
+ src/Text/Pandoc/Readers/OPML.hs view
@@ -0,0 +1,95 @@+module Text.Pandoc.Readers.OPML ( readOPML ) where+import Data.Char (toUpper)+import Text.Pandoc.Options+import Text.Pandoc.Definition+import Text.Pandoc.Builder+import Text.Pandoc.Readers.HTML (readHtml)+import Text.Pandoc.Readers.Markdown (readMarkdown)+import Text.XML.Light+import Text.Pandoc.Compat.TagSoupEntity (lookupEntity)+import Data.Generics+import Data.Monoid+import Control.Monad.State+import Control.Applicative ((<$>), (<$))++type OPML = State OPMLState++data OPMLState = OPMLState{+                        opmlSectionLevel :: Int+                      , opmlDocTitle     :: Inlines+                      , opmlDocAuthors   :: [Inlines]+                      , opmlDocDate      :: Inlines+                      } deriving Show++readOPML :: ReaderOptions -> String -> Pandoc+readOPML _ inp  = setTitle (opmlDocTitle st')+                   $ setAuthors (opmlDocAuthors st')+                   $ setDate (opmlDocDate st')+                   $ doc $ mconcat bs+  where (bs, st') = runState (mapM parseBlock $ normalizeTree $ parseXML inp)+                             OPMLState{ opmlSectionLevel = 0+                                    , opmlDocTitle = mempty+                                    , opmlDocAuthors = []+                                    , opmlDocDate = mempty+                                    }++-- normalize input, consolidating adjacent Text and CRef elements+normalizeTree :: [Content] -> [Content]+normalizeTree = everywhere (mkT go)+  where go :: [Content] -> [Content]+        go (Text (CData CDataRaw _ _):xs) = xs+        go (Text (CData CDataText s1 z):Text (CData CDataText s2 _):xs) =+           Text (CData CDataText (s1 ++ s2) z):xs+        go (Text (CData CDataText s1 z):CRef r:xs) =+           Text (CData CDataText (s1 ++ convertEntity r) z):xs+        go (CRef r:Text (CData CDataText s1 z):xs) =+             Text (CData CDataText (convertEntity r ++ s1) z):xs+        go (CRef r1:CRef r2:xs) =+             Text (CData CDataText (convertEntity r1 ++ convertEntity r2) Nothing):xs+        go xs = xs++convertEntity :: String -> String+convertEntity e = maybe (map toUpper e) (:[]) (lookupEntity e)++-- convenience function to get an attribute value, defaulting to ""+attrValue :: String -> Element -> String+attrValue attr elt =+  case lookupAttrBy (\x -> qName x == attr) (elAttribs elt) of+    Just z  -> z+    Nothing -> ""++asHtml :: String -> Inlines+asHtml s = case readHtml def s of+                Pandoc _ [Plain ils] -> fromList ils+                _ -> mempty++asMarkdown :: String -> Blocks+asMarkdown s = fromList bs+  where Pandoc _ bs = readMarkdown def s++getBlocks :: Element -> OPML Blocks+getBlocks e =  mconcat <$> (mapM parseBlock $ elContent e)++parseBlock :: Content -> OPML Blocks+parseBlock (Elem e) =+  case qName (elName e) of+        "ownerName"    -> mempty <$ modify (\st ->+                              st{opmlDocAuthors = [text $ strContent e]})+        "dateModified" -> mempty <$ modify (\st ->+                              st{opmlDocDate = text $ strContent e})+        "title"        -> mempty <$ modify (\st ->+                              st{opmlDocTitle = text $ strContent e})+        "outline" -> gets opmlSectionLevel >>= sect . (+1)+        "?xml"  -> return mempty+        _       -> getBlocks e+   where sect n = do let headerText = asHtml $ attrValue "text" e+                     let noteBlocks = asMarkdown $ attrValue "_note" e+                     modify $ \st -> st{ opmlSectionLevel = n }+                     bs <- getBlocks e+                     modify $ \st -> st{ opmlSectionLevel = n - 1 }+                     let headerText' = case map toUpper (attrValue "type" e) of+                                             "LINK"  -> link+                                               (attrValue "url" e) "" headerText+                                             _ -> headerText+                     return $ header n headerText' <> noteBlocks <> bs+parseBlock _ = return mempty
src/Text/Pandoc/Readers/RST.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE OverloadedStrings #-} {- Copyright (C) 2006-2010 John MacFarlane <jgm@berkeley.edu> @@ -31,6 +32,7 @@                                 readRST                                ) where import Text.Pandoc.Definition+import Text.Pandoc.Builder (setMeta, fromList) import Text.Pandoc.Shared import Text.Pandoc.Parsing import Text.Pandoc.Options@@ -39,7 +41,6 @@                    transpose, sort, deleteFirstsBy, isSuffixOf ) import qualified Data.Map as M import Text.Printf ( printf )-import Data.Maybe ( catMaybes ) import Control.Applicative ((<$>), (<$), (<*), (*>)) import Text.Pandoc.Builder (Inlines, Blocks, trimInlines, (<>)) import qualified Text.Pandoc.Builder as B@@ -87,17 +88,52 @@  -- | If list of blocks starts with a header (or a header and subheader) -- of level that are not found elsewhere, return it as a title and--- promote all the other headers.-titleTransform :: [Block]              -- ^ list of blocks-               -> ([Block], [Inline])  -- ^ modified list of blocks, title-titleTransform ((Header 1 _ head1):(Header 2 _ head2):rest) |-   not (any (isHeader 1) rest || any (isHeader 2) rest) =  -- both title & subtitle-   (promoteHeaders 2 rest, head1 ++ [Str ":", Space] ++ head2)-titleTransform ((Header 1 _ head1):rest) |-   not (any (isHeader 1) rest) =  -- title, no subtitle-   (promoteHeaders 1 rest, head1)-titleTransform blocks = (blocks, [])+-- promote all the other headers.  Also process a definition list right+-- after the title block as metadata.+titleTransform :: ([Block], Meta)  -- ^ list of blocks, metadata+               -> ([Block], Meta)  -- ^ modified list of blocks, metadata+titleTransform (bs, meta) =+  let (bs', meta') =+       case bs of+          ((Header 1 _ head1):(Header 2 _ head2):rest)+           | not (any (isHeader 1) rest || any (isHeader 2) rest) -> -- tit/sub+            (promoteHeaders 2 rest, setMeta "title" (fromList head1) $+              setMeta "subtitle" (fromList head2) meta)+          ((Header 1 _ head1):rest)+           | not (any (isHeader 1) rest) -> -- title only+            (promoteHeaders 1 rest,+                setMeta "title" (fromList head1) meta)+          _ -> (bs, meta)+  in   case bs' of+          (DefinitionList ds : rest) ->+            (rest, metaFromDefList ds meta')+          _ -> (bs', meta') +metaFromDefList :: [([Inline], [[Block]])] -> Meta -> Meta+metaFromDefList ds meta = adjustAuthors $ foldr f meta ds+ where f (k,v) = setMeta (map toLower $ stringify k) (mconcat $ map fromList v)+       adjustAuthors (Meta metamap) = Meta $ M.adjust toPlain "author"+                                           $ M.adjust toPlain "date"+                                           $ M.adjust toPlain "title"+                                           $ M.adjust splitAuthors "authors"+                                           $ metamap+       toPlain (MetaBlocks [Para xs]) = MetaInlines xs+       toPlain x                      = x+       splitAuthors (MetaBlocks [Para xs]) = MetaList $ map MetaInlines+                                                      $ splitAuthors' xs+       splitAuthors x                 = x+       splitAuthors'                  = map normalizeSpaces .+                                         splitOnSemi . concatMap factorSemi+       splitOnSemi                    = splitBy (==Str ";")+       factorSemi (Str [])            = []+       factorSemi (Str s)             = case break (==';') s of+                                             (xs,[]) -> [Str xs]+                                             (xs,';':ys) -> Str xs : Str ";" :+                                                factorSemi (Str ys)+                                             (xs,ys) -> Str xs :+                                                factorSemi (Str ys)+       factorSemi x                   = [x]+ parseRST :: RSTParser Pandoc parseRST = do   optional blanklines -- skip blank lines at beginning of file@@ -114,14 +150,12 @@   -- now parse it for real...   blocks <- B.toList <$> parseBlocks   standalone <- getOption readerStandalone-  let (blocks', title) = if standalone-                            then titleTransform blocks-                            else (blocks, [])   state <- getState-  let authors = stateAuthors state-  let date = stateDate state-  let title' = if null title then stateTitle state else title-  return $ Pandoc (Meta title' authors date) blocks'+  let meta = stateMeta state+  let (blocks', meta') = if standalone+                            then titleTransform (blocks, meta)+                            else (blocks, meta)+  return $ Pandoc meta' blocks'  -- -- parsing blocks@@ -163,38 +197,19 @@   return (name, raw)  fieldListItem :: String-              -> RSTParser (Maybe (Inlines, [Blocks]))+              -> RSTParser (Inlines, [Blocks]) fieldListItem indent = try $ do   (name, raw) <- rawFieldListItem indent   let term = B.str name   contents <- parseFromString parseBlocks raw   optional blanklines-  case (name, B.toList contents) of-       ("Author", x) -> do-           updateState $ \st ->-             st{ stateAuthors = stateAuthors st ++ [extractContents x] }-           return Nothing-       ("Authors", [BulletList auths]) -> do-           updateState $ \st -> st{ stateAuthors = map extractContents auths }-           return Nothing-       ("Date", x) -> do-           updateState $ \st -> st{ stateDate = extractContents x }-           return Nothing-       ("Title", x) -> do-           updateState $ \st -> st{ stateTitle = extractContents x }-           return Nothing-       _            -> return $ Just (term, [contents])--extractContents :: [Block] -> [Inline]-extractContents [Plain auth] = auth-extractContents [Para auth]  = auth-extractContents _            = []+  return (term, [contents])  fieldList :: RSTParser Blocks fieldList = try $ do   indent <- lookAhead $ many spaceChar   items <- many1 $ fieldListItem indent-  case catMaybes items of+  case items of      []     -> return mempty      items' -> return $ B.definitionList items' @@ -260,7 +275,8 @@         Just ind -> (headerTable, ind + 1)         Nothing -> (headerTable ++ [DoubleHeader c], (length headerTable) + 1)   setState (state { stateHeaderTable = headerTable' })-  return $ B.header level txt+  attr <- registerHeader nullAttr txt+  return $ B.headerWith attr level txt  -- a header with line on the bottom only singleHeader :: RSTParser Blocks@@ -280,7 +296,8 @@         Just ind -> (headerTable, ind + 1)         Nothing -> (headerTable ++ [SingleHeader c], (length headerTable) + 1)   setState (state { stateHeaderTable = headerTable' })-  return $ B.header level txt+  attr <- registerHeader nullAttr txt+  return $ B.headerWith attr level txt  -- -- hrule block@@ -441,7 +458,12 @@   -- parse the extracted block, which may itself contain block elements   parsed <- parseFromString parseBlocks $ concat (first:rest) ++ blanks   updateState (\st -> st {stateParserContext = oldContext})-  return parsed+  return $ case B.toList parsed of+                [Para xs] -> B.singleton $ Plain xs+                [Para xs, BulletList ys] -> B.fromList [Plain xs, BulletList ys]+                [Para xs, OrderedList s ys] -> B.fromList [Plain xs, OrderedList s ys]+                [Para xs, DefinitionList ys] -> B.fromList [Plain xs, DefinitionList ys]+                _         -> parsed  orderedList :: RSTParser Blocks orderedList = try $ do
src/Text/Pandoc/Readers/TeXMath.hs view
@@ -30,93 +30,13 @@ module Text.Pandoc.Readers.TeXMath ( readTeXMath ) where  import Text.Pandoc.Definition-import Text.TeXMath.Types-import Text.TeXMath.Parser+import Text.TeXMath  -- | Converts a raw TeX math formula to a list of 'Pandoc' inlines. -- Defaults to raw formula between @$@ characters if entire formula -- can't be converted. readTeXMath :: String    -- ^ String to parse (assumes @'\n'@ line endings)             -> [Inline]-readTeXMath inp = case texMathToPandoc inp of+readTeXMath inp = case texMathToPandoc DisplayInline inp of                         Left _    -> [Str ("$" ++ inp ++ "$")]                         Right res -> res--texMathToPandoc :: String -> Either String [Inline]-texMathToPandoc inp = inp `seq`-  case parseFormula inp of-         Left err    -> Left err-         Right exps  -> case expsToInlines exps of-                             Nothing  -> Left "Formula too complex for [Inline]"-                             Just r   -> Right r--expsToInlines :: [Exp] -> Maybe [Inline]-expsToInlines xs = do-  res <- mapM expToInlines xs-  return (concat res)--expToInlines :: Exp -> Maybe [Inline]-expToInlines (ENumber s) = Just [Str s]-expToInlines (EIdentifier s) = Just [Emph [Str s]]-expToInlines (EMathOperator s) = Just [Str s]-expToInlines (ESymbol t s) = Just $ addSpace t (Str s)-  where addSpace Op x = [x, thinspace]-        addSpace Bin x = [medspace, x, medspace]-        addSpace Rel x = [widespace, x, widespace]-        addSpace Pun x = [x, thinspace]-        addSpace _ x = [x]-        thinspace = Str "\x2006"-        medspace  = Str "\x2005"-        widespace = Str "\x2004"-expToInlines (EStretchy x) = expToInlines x-expToInlines (EDelimited start end xs) = do-  xs' <- mapM expToInlines xs-  return $ [Str start] ++ concat xs' ++ [Str end]-expToInlines (EGrouped xs) = expsToInlines xs-expToInlines (ESpace "0.167em") = Just [Str "\x2009"]-expToInlines (ESpace "0.222em") = Just [Str "\x2005"]-expToInlines (ESpace "0.278em") = Just [Str "\x2004"]-expToInlines (ESpace "0.333em") = Just [Str "\x2004"]-expToInlines (ESpace "1em")     = Just [Str "\x2001"]-expToInlines (ESpace "2em")     = Just [Str "\x2001\x2001"]-expToInlines (ESpace _)         = Just [Str " "]-expToInlines (EBinary _ _ _) = Nothing-expToInlines (ESub x y) = do-  x' <- expToInlines x-  y' <- expToInlines y-  return $ x' ++ [Subscript y']-expToInlines (ESuper x y) = do-  x' <- expToInlines x-  y' <- expToInlines y-  return $ x' ++ [Superscript y']-expToInlines (ESubsup x y z) = do-  x' <- expToInlines x-  y' <- expToInlines y-  z' <- expToInlines z-  return $ x' ++ [Subscript y'] ++ [Superscript z']-expToInlines (EDown x y) = expToInlines (ESub x y)-expToInlines (EUp x y) = expToInlines (ESuper x y)-expToInlines (EDownup x y z) = expToInlines (ESubsup x y z)-expToInlines (EText TextNormal x) = Just [Str x]-expToInlines (EText TextBold x) = Just [Strong [Str x]]-expToInlines (EText TextMonospace x) = Just [Code nullAttr x]-expToInlines (EText TextItalic x) = Just [Emph [Str x]]-expToInlines (EText _ x) = Just [Str x]-expToInlines (EOver (EGrouped [EIdentifier [c]]) (ESymbol Accent [accent])) =-    case accent of-         '\x203E' -> Just [Emph [Str [c,'\x0304']]]  -- bar-         '\x00B4' -> Just [Emph [Str [c,'\x0301']]]  -- acute-         '\x0060' -> Just [Emph [Str [c,'\x0300']]]  -- grave-         '\x02D8' -> Just [Emph [Str [c,'\x0306']]]  -- breve-         '\x02C7' -> Just [Emph [Str [c,'\x030C']]]  -- check-         '.'      -> Just [Emph [Str [c,'\x0307']]]  -- dot-         '\x00B0' -> Just [Emph [Str [c,'\x030A']]]  -- ring-         '\x20D7' -> Just [Emph [Str [c,'\x20D7']]]  -- arrow right-         '\x20D6' -> Just [Emph [Str [c,'\x20D6']]]  -- arrow left-         '\x005E' -> Just [Emph [Str [c,'\x0302']]]  -- hat-         '\x0302' -> Just [Emph [Str [c,'\x0302']]]  -- hat-         '~'      -> Just [Emph [Str [c,'\x0303']]]  -- tilde-         _        -> Nothing-expToInlines _ = Nothing--
src/Text/Pandoc/Readers/Textile.hs view
@@ -52,11 +52,13 @@ module Text.Pandoc.Readers.Textile ( readTextile) where  import Text.Pandoc.Definition+import qualified Text.Pandoc.Builder as B import Text.Pandoc.Shared import Text.Pandoc.Options import Text.Pandoc.Parsing import Text.Pandoc.Readers.HTML ( htmlTag, isInlineTag, isBlockTag ) import Text.Pandoc.Readers.LaTeX ( rawLaTeXInline, rawLaTeXBlock )+import Text.HTML.TagSoup (parseTags, innerText, fromAttrib, Tag(..)) import Text.HTML.TagSoup.Match import Data.List ( intercalate ) import Data.Char ( digitToInt, isUpper )@@ -93,7 +95,7 @@   updateState $ \s -> s { stateNotes = reverse reversedNotes }   -- now parse it for real...   blocks <- parseBlocks-  return $ Pandoc (Meta [] [] []) blocks -- FIXME+  return $ Pandoc nullMeta blocks -- FIXME  noteMarker :: Parser [Char] ParserState [Char] noteMarker = skipMany spaceChar >> string "fn" >> manyTill digit (char '.')@@ -152,8 +154,10 @@ -- | Code Blocks in Textile are between <pre> and </pre> codeBlockPre :: Parser [Char] ParserState Block codeBlockPre = try $ do-  htmlTag (tagOpen (=="pre") null)-  result' <- manyTill anyChar (try $ htmlTag (tagClose (=="pre")) >> blockBreak)+  (t@(TagOpen _ attrs),_) <- htmlTag (tagOpen (=="pre") (const True))+  result' <- (innerText . parseTags) `fmap` -- remove internal tags+               manyTill anyChar (htmlTag (tagClose (=="pre")))+  optional blanklines   -- drop leading newline if any   let result'' = case result' of                       '\n':xs -> xs@@ -162,7 +166,10 @@   let result''' = case reverse result'' of                        '\n':_ -> init result''                        _      -> result''-  return $ CodeBlock ("",[],[]) result'''+  let classes = words $ fromAttrib "class" t+  let ident = fromAttrib "id" t+  let kvs = [(k,v) | (k,v) <- attrs, k /= "id" && k /= "class"]+  return $ CodeBlock (ident,classes,kvs) result'''  -- | Header of the form "hN. content" with N in 1..6 header :: Parser [Char] ParserState Block@@ -173,7 +180,8 @@   char '.'   whitespace   name <- normalizeSpaces <$> manyTill inline blockBreak-  return $ Header level attr name+  attr' <- registerHeader attr (B.fromList name)+  return $ Header level attr' name  -- | Blockquote of the form "bq. content" blockQuote :: Parser [Char] ParserState Block@@ -275,7 +283,7 @@ -- blocks support, we have to lookAhead for a rawHtmlBlock. blockBreak :: Parser [Char] ParserState () blockBreak = try (newline >> blanklines >> return ()) <|>-              (lookAhead rawHtmlBlock >> return ())+             try (optional spaces >> lookAhead rawHtmlBlock >> return ())  -- raw content @@ -284,13 +292,13 @@ rawHtmlBlock = try $ do   (_,b) <- htmlTag isBlockTag   optional blanklines-  return $ RawBlock "html" b+  return $ RawBlock (Format "html") b  -- | Raw block of LaTeX content rawLaTeXBlock' :: Parser [Char] ParserState Block rawLaTeXBlock' = do   guardEnabled Ext_raw_tex-  RawBlock "latex" <$> (rawLaTeXBlock <* spaces)+  RawBlock (Format "latex") <$> (rawLaTeXBlock <* spaces)   -- | In textile, paragraphs are separated by blank lines.@@ -374,6 +382,7 @@                 , link                 , image                 , mark+                , (Str . (:[])) <$> characterReference                 , smartPunctuation inline                 , symbol                 ]@@ -424,7 +433,7 @@  -- | Special chars markupChars :: [Char]-markupChars = "\\*#_@~-+^|%=[]"+markupChars = "\\*#_@~-+^|%=[]&"  -- | Break strings on following chars. Space tab and newline break for --  inlines breaking. Open paren breaks for mark. Quote, dash and dot@@ -480,7 +489,7 @@   return LineBreak  rawHtmlInline :: Parser [Char] ParserState Inline-rawHtmlInline = RawInline "html" . snd <$> htmlTag isInlineTag+rawHtmlInline = RawInline (Format "html") . snd <$> htmlTag isInlineTag  -- | Raw LaTeX Inline rawLaTeXInline' :: Parser [Char] ParserState Inline
src/Text/Pandoc/SelfContained.hs view
@@ -40,7 +40,7 @@ import Data.Char (toLower, isAscii, isAlphaNum) import Codec.Compression.GZip as Gzip import qualified Data.ByteString.Lazy as L-import Text.Pandoc.Shared (renderTags', openURL, readDataFile)+import Text.Pandoc.Shared (renderTags', openURL, readDataFile, err) import Text.Pandoc.UTF8 (toString,  fromString) import Text.Pandoc.MIME (getMimeType) import System.Directory (doesFileExist)@@ -49,20 +49,15 @@ isOk c = isAscii c && isAlphaNum c  convertTag :: Maybe FilePath -> Tag String -> IO (Tag String)-convertTag userdata t@(TagOpen "img" as) =-       case fromAttrib "src" t of-         []   -> return t-         src  -> do-           (raw, mime) <- getRaw userdata (fromAttrib "type" t) src-           let enc = "data:" ++ mime ++ ";base64," ++ toString (encode raw)-           return $ TagOpen "img" (("src",enc) : [(x,y) | (x,y) <- as, x /= "src"])-convertTag userdata t@(TagOpen "video" as) =+convertTag userdata t@(TagOpen tagname as)+  | tagname `elem` ["img", "embed", "video", "input", "audio", "source"] =        case fromAttrib "src" t of          []   -> return t          src  -> do            (raw, mime) <- getRaw userdata (fromAttrib "type" t) src            let enc = "data:" ++ mime ++ ";base64," ++ toString (encode raw)-           return $ TagOpen "video" (("src",enc) : [(x,y) | (x,y) <- as, x /= "src"])+           return $ TagOpen tagname+                    (("src",enc) : [(x,y) | (x,y) <- as, x /= "src"]) convertTag userdata t@(TagOpen "script" as) =   case fromAttrib "src" t of        []     -> return t@@ -79,6 +74,7 @@            return $ TagOpen "link" (("href",enc) : [(x,y) | (x,y) <- as, x /= "href"]) convertTag _ t = return t +-- NOTE: This is really crude, it doesn't respect CSS comments. cssURLs :: Maybe FilePath -> FilePath -> ByteString -> IO ByteString cssURLs userdata d orig =   case B.breakSubstring "url(" orig of@@ -102,14 +98,19 @@ getItem :: Maybe FilePath -> String -> IO (ByteString, Maybe String) getItem userdata f =   if isAbsoluteURI f-     then openURL f+     then openURL f >>= either handleErr return      else do-       let mime = case takeExtension f of-                       ".gz" -> getMimeType $ dropExtension f+       -- strip off trailing query or fragment part, if relative URL.+       -- this is needed for things like cmunrm.eot?#iefix,+       -- which is used to get old versions of IE to work with web fonts.+       let f' = takeWhile (\c -> c /= '?' && c /= '#') f+       let mime = case takeExtension f' of+                       ".gz" -> getMimeType $ dropExtension f'                        x     -> getMimeType x-       exists <- doesFileExist f-       cont <- if exists then B.readFile f else readDataFile userdata f+       exists <- doesFileExist f'+       cont <- if exists then B.readFile f' else readDataFile userdata f'        return (cont, mime)+  where handleErr e = err 61 $ "Failed to retrieve " ++ f ++ "\n" ++ show e  getRaw :: Maybe FilePath -> String -> String -> IO (ByteString, String) getRaw userdata mimetype src = do
src/Text/Pandoc/Shared.hs view
@@ -1,6 +1,7 @@-{-# LANGUAGE DeriveDataTypeable, CPP #-}+{-# LANGUAGE DeriveDataTypeable, CPP, MultiParamTypeClasses,+    FlexibleContexts #-} {--Copyright (C) 2006-2010 John MacFarlane <jgm@berkeley.edu>+Copyright (C) 2006-2013 John MacFarlane <jgm@berkeley.edu>  This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by@@ -19,7 +20,7 @@  {- |    Module      : Text.Pandoc.Shared-   Copyright   : Copyright (C) 2006-2010 John MacFarlane+   Copyright   : Copyright (C) 2006-2013 John MacFarlane    License     : GNU GPL, version 2 or above     Maintainer  : John MacFarlane <jgm@berkeley.edu>@@ -61,6 +62,8 @@                      isHeaderBlock,                      headerShift,                      isTightList,+                     addMetaField,+                     makeMeta,                      -- * TagSoup HTML handling                      renderTags',                      -- * File handling@@ -77,8 +80,9 @@                     ) where  import Text.Pandoc.Definition+import Text.Pandoc.Walk import Text.Pandoc.Generic-import Text.Pandoc.Builder (Blocks)+import Text.Pandoc.Builder (Blocks, ToMetaValue(..)) import qualified Text.Pandoc.Builder as B import qualified Text.Pandoc.UTF8 as UTF8 import System.Environment (getProgName)@@ -86,12 +90,14 @@ import Data.Char ( toLower, isLower, isUpper, isAlpha,                    isLetter, isDigit, isSpace ) import Data.List ( find, isPrefixOf, intercalate )-import Network.URI ( escapeURIString, isAbsoluteURI, parseURI )+import qualified Data.Map as M+import Network.URI ( escapeURIString, isAbsoluteURI, unEscapeString ) import System.Directory import Text.Pandoc.MIME (getMimeType) import System.FilePath ( (</>), takeExtension, dropExtension ) import Data.Generics (Typeable, Data) import qualified Control.Monad.State as S+import qualified Control.Exception as E import Control.Monad (msum, unless) import Text.Pandoc.Pretty (charWidth) import System.Locale (defaultTimeLocale)@@ -99,14 +105,27 @@ import System.IO (stderr) import Text.HTML.TagSoup (renderTagsOptions, RenderOptions(..), Tag(..),          renderOptions)-import qualified Data.ByteString as B-import Network.HTTP (findHeader, rspBody, simpleHTTP, RequestMethod(..),-                     HeaderName(..), mkRequest)+import qualified Data.ByteString as BS+import qualified Data.ByteString.Char8 as B8+import Text.Pandoc.Compat.Monoid+ #ifdef EMBED_DATA_FILES import Text.Pandoc.Data (dataFiles)+import System.FilePath ( joinPath, splitDirectories ) #else import Paths_pandoc (getDataFileName) #endif+#ifdef HTTP_CONDUIT+import Data.ByteString.Lazy (toChunks)+import Network.HTTP.Conduit (httpLbs, parseUrl, withManager,+                             responseBody, responseHeaders)+import Network.HTTP.Types.Header ( hContentType)+#else+import Network.URI (parseURI)+import Network.HTTP (findHeader, rspBody,+                     RequestMethod(..), HeaderName(..), mkRequest)+import Network.Browser (browse, setAllowRedirects, setOutHandler, request)+#endif  -- -- List processing@@ -365,9 +384,11 @@ consolidateInlines (x : xs) = x : consolidateInlines xs consolidateInlines [] = [] --- | Convert list of inlines to a string with formatting removed.-stringify :: [Inline] -> String-stringify = queryWith go+-- | Convert pandoc structure to a string with formatting removed.+-- Footnotes are skipped (since we don't want their contents in link+-- labels).+stringify :: Walkable Inline a => a -> String+stringify = query go . walk deNote   where go :: Inline -> [Char]         go Space = " "         go (Str x) = x@@ -375,6 +396,8 @@         go (Math _ x) = x         go LineBreak = " "         go _ = ""+        deNote (Note _) = Str ""+        deNote x = x  -- | Change final list item from @Para@ to @Plain@ if the list contains -- no other @Para@ blocks.@@ -417,6 +440,29 @@              --    lvl  num attributes label    contents              deriving (Eq, Read, Show, Typeable, Data) +instance Walkable Inline Element where+  walk f (Blk x) = Blk (walk f x)+  walk f (Sec lev nums attr ils elts) = Sec lev nums attr (walk f ils) (walk f elts)+  walkM f (Blk x) = Blk `fmap` walkM f x+  walkM f (Sec lev nums attr ils elts) = do+    ils' <- walkM f ils+    elts' <- walkM f elts+    return $ Sec lev nums attr ils' elts'+  query f (Blk x) = query f x+  query f (Sec _ _ _ ils elts) = query f ils <> query f elts++instance Walkable Block Element where+  walk f (Blk x) = Blk (walk f x)+  walk f (Sec lev nums attr ils elts) = Sec lev nums attr (walk f ils) (walk f elts)+  walkM f (Blk x) = Blk `fmap` walkM f x+  walkM f (Sec lev nums attr ils elts) = do+    ils' <- walkM f ils+    elts' <- walkM f elts+    return $ Sec lev nums attr ils' elts'+  query f (Blk x) = query f x+  query f (Sec _ _ _ ils elts) = query f ils <> query f elts++ -- | Convert Pandoc inline list to plain text identifier.  HTML -- identifiers must start with a letter, and may contain only -- letters, digits, and the characters _-.@@ -477,7 +523,7 @@  -- | Shift header levels up or down. headerShift :: Int -> Pandoc -> Pandoc-headerShift n = bottomUp shift+headerShift n = walk shift   where shift :: Block -> Block         shift (Header level attr inner) = Header (level + n) attr inner         shift x                         = x@@ -488,6 +534,27 @@   where firstIsPlain (Plain _ : _) = True         firstIsPlain _             = False +-- | Set a field of a 'Meta' object.  If the field already has a value,+-- convert it into a list with the new value appended to the old value(s).+addMetaField :: ToMetaValue a+             => String+             -> a+             -> Meta+             -> Meta+addMetaField key val (Meta meta) =+  Meta $ M.insertWith combine key (toMetaValue val) meta+  where combine newval (MetaList xs) = MetaList (xs ++ [newval])+        combine newval x             = MetaList [x, newval]++-- | Create 'Meta' from old-style title, authors, date.  This is+-- provided to ease the transition from the old API.+makeMeta :: [Inline] -> [[Inline]] -> [Inline] -> Meta+makeMeta title authors date =+      addMetaField "title" (B.fromList title)+    $ addMetaField "author" (map B.fromList authors)+    $ addMetaField "date" (B.fromList date)+    $ nullMeta+ -- -- TagSoup HTML handling --@@ -517,25 +584,34 @@   setCurrentDirectory oldDir   return result -readDefaultDataFile :: FilePath -> IO B.ByteString+readDefaultDataFile :: FilePath -> IO BS.ByteString readDefaultDataFile fname = #ifdef EMBED_DATA_FILES-  case lookup fname dataFiles of-    Nothing       -> ioError $ userError-                             $ "Data file `" ++ fname ++ "' does not exist"+  case lookup (makeCanonical fname) dataFiles of+    Nothing       -> err 97 $ "Could not find data file " ++ fname     Just contents -> return contents+  where makeCanonical = joinPath . transformPathParts . splitDirectories+        transformPathParts = reverse . foldl go []+        go as     "."  = as+        go (_:as) ".." = as+        go as     x    = x : as #else-  getDataFileName ("data" </> fname) >>= B.readFile+  getDataFileName ("data" </> fname) >>= checkExistence >>= BS.readFile+   where checkExistence fn = do+           exists <- doesFileExist fn+           if exists+              then return fn+              else err 97 ("Could not find data file " ++ fname) #endif  -- | Read file from specified user data directory or, if not found there, from -- Cabal data directory.-readDataFile :: Maybe FilePath -> FilePath -> IO B.ByteString+readDataFile :: Maybe FilePath -> FilePath -> IO BS.ByteString readDataFile Nothing fname = readDefaultDataFile fname readDataFile (Just userDir) fname = do   exists <- doesFileExist (userDir </> fname)   if exists-     then B.readFile (userDir </> fname)+     then BS.readFile (userDir </> fname)      else readDefaultDataFile fname  -- | Same as 'readDataFile' but returns a String instead of a ByteString.@@ -545,29 +621,46 @@  -- | Fetch an image or other item from the local filesystem or the net. -- Returns raw content and maybe mime type.-fetchItem :: String -> String -> IO (B.ByteString, Maybe String)-fetchItem sourceDir s =-  case s of-    _ | isAbsoluteURI s         -> openURL s-      | isAbsoluteURI sourceDir -> openURL $ sourceDir ++ "/" ++ s-      | otherwise               -> do+fetchItem :: Maybe String -> String+          -> IO (Either E.SomeException (BS.ByteString, Maybe String))+fetchItem sourceURL s+  | isAbsoluteURI s = openURL s+  | otherwise       = case sourceURL of+                           Just u  -> openURL (u ++ "/" ++ s)+                           Nothing -> E.try readLocalFile+  where readLocalFile = do           let mime = case takeExtension s of-                        ".gz" -> getMimeType $ dropExtension s-                        x     -> getMimeType x-          let f = sourceDir </> s-          cont <- B.readFile f+                          ".gz" -> getMimeType $ dropExtension s+                          x     -> getMimeType x+          cont <- BS.readFile s           return (cont, mime) --- TODO - have this return mime type too - then it can work for google--- chart API, e.g. -- | Read from a URL and return raw data and maybe mime type.-openURL :: String -> IO (B.ByteString, Maybe String)-openURL u = getBodyAndMimeType =<< simpleHTTP (getReq u)-  where getReq v = case parseURI v of-                     Nothing  -> error $ "Could not parse URI: " ++ v-                     Just u'  -> mkRequest GET u'-        getBodyAndMimeType (Left e) = fail (show e)-        getBodyAndMimeType (Right r)  = return (rspBody r, findHeader HdrContentType r)+openURL :: String -> IO (Either E.SomeException (BS.ByteString, Maybe String))+openURL u+  | "data:" `isPrefixOf` u =+    let mime     = takeWhile (/=',') $ drop 5 u+        contents = B8.pack $ unEscapeString $ drop 1 $ dropWhile (/=',') u+    in  return $ Right (contents, Just mime)+#ifdef HTTP_CONDUIT+  | otherwise = E.try $ do+     req <- parseUrl u+     resp <- withManager $ httpLbs req+     return (BS.concat $ toChunks $ responseBody resp,+             UTF8.toString `fmap` lookup hContentType (responseHeaders resp))+#else+  | otherwise = E.try $ getBodyAndMimeType `fmap` browse+              (do S.liftIO $ UTF8.hPutStrLn stderr $ "Fetching " ++ u ++ "..."+                  setOutHandler $ const (return ())+                  setAllowRedirects True+                  request (getRequest' u'))+  where getBodyAndMimeType (_, r) = (rspBody r, findHeader HdrContentType r)+        getRequest' uriString = case parseURI uriString of+                                   Nothing -> error ("Not a valid URL: " +++                                                        uriString)+                                   Just v  -> mkRequest GET v+        u' = escapeURIString (/= '|') u  -- pipes are rejected by Network.URI+#endif  -- -- Error reporting
src/Text/Pandoc/Slides.hs view
@@ -26,7 +26,7 @@    Portability : portable  Utility functions for splitting documents into slides for slide-show formats (dzslides, s5, slidy, slideous, beamer).+show formats (dzslides, revealjs, s5, slidy, slideous, beamer). -} module Text.Pandoc.Slides ( getSlideLevel, prepSlides ) where import Text.Pandoc.Definition
src/Text/Pandoc/Templates.hs view
@@ -1,6 +1,7 @@-{-# LANGUAGE TypeSynonymInstances, FlexibleInstances, CPP #-}+{-# LANGUAGE TypeSynonymInstances, FlexibleInstances, CPP,+    OverloadedStrings, GeneralizedNewtypeDeriving #-} {--Copyright (C) 2009-2010 John MacFarlane <jgm@berkeley.edu>+Copyright (C) 2009-2013 John MacFarlane <jgm@berkeley.edu>  This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by@@ -19,7 +20,7 @@  {- |    Module      : Text.Pandoc.Templates-   Copyright   : Copyright (C) 2009-2010 John MacFarlane+   Copyright   : Copyright (C) 2009-2013 John MacFarlane    License     : GNU GPL, version 2 or above     Maintainer  : John MacFarlane <jgm@berkeley.edu>@@ -27,17 +28,43 @@    Portability : portable  A simple templating system with variable substitution and conditionals.-Example:+The following program illustrates its use: -> renderTemplate [("name","Sam"),("salary","50,000")] $->    "Hi, $name$.  $if(salary)$You make $$$salary$.$else$No salary data.$endif$"-> "Hi, John.  You make $50,000."+> {-# LANGUAGE OverloadedStrings #-}+> import Data.Text+> import Data.Aeson+> import Text.Pandoc.Templates+>+> data Employee = Employee { firstName :: String+>                          , lastName  :: String+>                          , salary    :: Maybe Int }+> instance ToJSON Employee where+>   toJSON e = object [ "name" .= object [ "first" .= firstName e+>                                        , "last"  .= lastName e ]+>                     , "salary" .= salary e ]+>+> employees :: [Employee]+> employees = [ Employee "John" "Doe" Nothing+>             , Employee "Omar" "Smith" (Just 30000)+>             , Employee "Sara" "Chen" (Just 60000) ]+>+> template :: Template+> template = either error id $ compileTemplate+>   "$for(employee)$Hi, $employee.name.first$. $if(employee.salary)$You make $employee.salary$.$else$No salary data.$endif$$sep$\n$endfor$"+>+> main = putStrLn $ renderTemplate template $ object ["employee" .= employees ]  A slot for an interpolated variable is a variable name surrounded by dollar signs.  To include a literal @$@ in your template, use @$$@.  Variable names must begin with a letter and can contain letters,-numbers, @_@, and @-@.+numbers, @_@, @-@, and @.@. +The values of variables are determined by a JSON object that is+passed as a parameter to @renderTemplate@.  So, for example,+@title@ will return the value of the @title@ field, and+@employee.salary@ will return the value of the @salary@ field+of the object that is the value of the @employee@ field.+ The value of a variable will be indented to the same level as the variable. @@ -49,39 +76,47 @@ Conditional keywords should not be indented, or unexpected spacing problems may occur. -If a variable name is associated with multiple values in the association-list passed to 'renderTemplate', you may use the @$for$@ keyword to-iterate over them:--> renderTemplate [("name","Sam"),("name","Joe")] $->   "$for(name)$\nHi, $name$.\n$endfor$"-> "Hi, Sam.\nHi, Joe."+The @$for$@ keyword can be used to iterate over an array.  If+the value of the associated variable is not an array, a single+iteration will be performed on its value. -You may optionally specify separators using @$sep$@:+You may optionally specify separators using @$sep$@, as in the+example above. -> renderTemplate [("name","Sam"),("name","Joe"),("name","Lynn")] $->   "Hi, $for(name)$$name$$sep$, $endfor$"-> "Hi, Sam, Joe, Lynn." -}  module Text.Pandoc.Templates ( renderTemplate-                             , TemplateTarget+                             , renderTemplate'+                             , TemplateTarget(..)+                             , varListToJSON+                             , compileTemplate+                             , Template                              , getDefaultTemplate ) where -import Text.Parsec-import Control.Monad (liftM, when, forM, mzero)-import System.FilePath-import Data.List (intercalate, intersperse)+import Data.Char (isAlphaNum)+import Control.Monad (guard, when)+import Data.Aeson (ToJSON(..), Value(..))+import qualified Data.Attoparsec.Text as A+import Data.Attoparsec.Text (Parser)+import Control.Applicative+import qualified Data.Text as T+import Data.Text (Text)+import Data.Text.Encoding (encodeUtf8)+import Text.Pandoc.Compat.Monoid ((<>), Monoid(..))+import Data.List (intersperse, nub)+import System.FilePath ((</>), (<.>))+import qualified Data.Map as M+import qualified Data.HashMap.Strict as H+import Data.Foldable (toList)+import qualified Control.Exception.Extensible as E (try, IOException) #if MIN_VERSION_blaze_html(0,5,0) import Text.Blaze.Html (Html)-import Text.Blaze.Internal (preEscapedString)+import Text.Blaze.Internal (preEscapedText) #else-import Text.Blaze (preEscapedString, Html)+import Text.Blaze (preEscapedText, Html) #endif-import Text.Pandoc.UTF8 (fromStringLazy)-import Data.ByteString.Lazy (ByteString)+import Data.ByteString.Lazy (ByteString, fromChunks) import Text.Pandoc.Shared (readDataFileUTF8)-import qualified Control.Exception.Extensible as E (try, IOException)  -- | Get default template for the specified writer. getDefaultTemplate :: (Maybe FilePath) -- ^ User data directory to search first@@ -94,125 +129,192 @@        "json"   -> return $ Right ""        "docx"   -> return $ Right ""        "odt"    -> getDefaultTemplate user "opendocument"-       "markdown_strict" -> getDefaultTemplate user "markdown"-       "multimarkdown"   -> getDefaultTemplate user "markdown"-       "markdown_github" -> getDefaultTemplate user "markdown"+       "markdown_strict"   -> getDefaultTemplate user "markdown"+       "multimarkdown"     -> getDefaultTemplate user "markdown"+       "markdown_github"   -> getDefaultTemplate user "markdown"+       "markdown_mmd"      -> getDefaultTemplate user "markdown"+       "markdown_phpextra" -> getDefaultTemplate user "markdown"        _        -> let fname = "templates" </> "default" <.> format                    in  E.try $ readDataFileUTF8 user fname -data TemplateState = TemplateState Int [(String,String)]+newtype Template = Template { unTemplate :: Value -> Text }+                 deriving Monoid -adjustPosition :: String -> Parsec [Char] TemplateState String-adjustPosition str = do-  let lastline = takeWhile (/= '\n') $ reverse str-  updateState $ \(TemplateState pos x) ->-    if str == lastline-       then TemplateState (pos + length lastline) x-       else TemplateState (length lastline) x-  return str+type Variable = [Text]  class TemplateTarget a where-  toTarget :: String -> a+  toTarget :: Text -> a -instance TemplateTarget String where+instance TemplateTarget Text where   toTarget = id +instance TemplateTarget String where+  toTarget = T.unpack+ instance TemplateTarget ByteString where-  toTarget = fromStringLazy+  toTarget = fromChunks . (:[]) . encodeUtf8  instance TemplateTarget Html where-  toTarget = preEscapedString+  toTarget = preEscapedText --- | Renders a template-renderTemplate :: TemplateTarget a-               => [(String,String)]  -- ^ Assoc. list of values for variables-               -> String             -- ^ Template-               -> a-renderTemplate vals templ =-  case runParser (do x <- parseTemplate; eof; return x) (TemplateState 0 vals) "template" templ of-       Left e        -> error $ show e-       Right r       -> toTarget $ concat r+varListToJSON :: [(String, String)] -> Value+varListToJSON assoc = toJSON $ M.fromList assoc'+  where assoc' = [(T.pack k, toVal [T.pack z | (y,z) <- assoc,+                                                not (null z),+                                                y == k])+                        | k <- nub $ map fst assoc ]+        toVal [x] = toJSON x+        toVal []  = Null+        toVal xs  = toJSON xs -reservedWords :: [String]-reservedWords = ["else","endif","for","endfor","sep"]+renderTemplate :: (ToJSON a, TemplateTarget b) => Template -> a -> b+renderTemplate (Template f) context = toTarget $ f $ toJSON context -parseTemplate :: Parsec [Char] TemplateState [String]-parseTemplate =-  many $ (plaintext <|> escapedDollar <|> conditional <|> for <|> variable)-           >>= adjustPosition+compileTemplate :: Text -> Either String Template+compileTemplate template = A.parseOnly pTemplate template -plaintext :: Parsec [Char] TemplateState String-plaintext = many1 $ noneOf "$"+-- | Like 'renderTemplate', but compiles the template first,+-- raising an error if compilation fails.+renderTemplate' :: (ToJSON a, TemplateTarget b) => String -> a -> b+renderTemplate' template =+  renderTemplate (either error id $ compileTemplate $ T.pack template) -escapedDollar :: Parsec [Char] TemplateState String-escapedDollar = try $ string "$$" >> return "$"+var :: Variable -> Template+var = Template . resolveVar -skipEndline :: Parsec [Char] st ()-skipEndline = try $ skipMany (oneOf " \t") >> newline >> return ()+resolveVar :: Variable -> Value -> Text+resolveVar var' val =+  case multiLookup var' val of+       Just (Array vec) -> mconcat $ map (resolveVar []) $ toList vec+       Just (String t)  -> T.stripEnd t+       Just (Number n)  -> T.pack $ show n+       Just (Bool True) -> "true"+       Just _           -> mempty+       Nothing          -> mempty -conditional :: Parsec [Char] TemplateState String-conditional = try $ do-  TemplateState pos vars <- getState-  string "$if("-  id' <- ident-  string ")$"+multiLookup :: [Text] -> Value -> Maybe Value+multiLookup [] x = Just x+multiLookup (v:vs) (Object o) = H.lookup v o >>= multiLookup vs+multiLookup _ _ = Nothing++lit :: Text -> Template+lit = Template . const++cond :: Variable -> Template -> Template -> Template+cond var' (Template ifyes) (Template ifno) = Template $ \val ->+  case resolveVar var' val of+       "" -> ifno val+       _  -> ifyes val++iter :: Variable -> Template -> Template -> Template+iter var' template sep = Template $ \val -> unTemplate+  (case multiLookup var' val of+           Just (Array vec) -> mconcat $ intersperse sep+                                       $ map (setVar template var')+                                       $ toList vec+           Just x           -> cond var' (setVar template var' x) mempty+           Nothing          -> mempty) val++setVar :: Template -> Variable -> Value -> Template+setVar (Template f) var' val = Template $ f . replaceVar var' val++replaceVar :: Variable -> Value -> Value -> Value+replaceVar []     new _          = new+replaceVar (v:vs) new (Object o) =+  Object $ H.adjust (\x -> replaceVar vs new x) v o+replaceVar _ _ old = old++--- parsing++pTemplate :: Parser Template+pTemplate = do+  sp <- A.option mempty pInitialSpace+  rest <- mconcat <$> many (pConditional <|>+                            pFor <|>+                            pNewline <|>+                            pVar <|>+                            pLit <|>+                            pEscapedDollar)+  return $ sp <> rest++pLit :: Parser Template+pLit = lit <$> A.takeWhile1 (\x -> x /='$' && x /= '\n')++pNewline :: Parser Template+pNewline = do+  A.char '\n'+  sp <- A.option mempty pInitialSpace+  return $ lit "\n" <> sp++pInitialSpace :: Parser Template+pInitialSpace = do+  sps <- A.takeWhile1 (==' ')+  let indentVar = if T.null sps+                     then id+                     else indent (T.length sps)+  v <- A.option mempty $ indentVar <$> pVar+  return $ lit sps <> v++pEscapedDollar :: Parser Template+pEscapedDollar = lit "$" <$ A.string "$$"++pVar :: Parser Template+pVar = var <$> (A.char '$' *> pIdent <* A.char '$')++pIdent :: Parser [Text]+pIdent = do+  first <- pIdentPart+  rest <- many (A.char '.' *> pIdentPart)+  return (first:rest)++pIdentPart :: Parser Text+pIdentPart = do+  first <- A.letter+  rest <- A.takeWhile (\c -> isAlphaNum c || c == '_' || c == '-')+  let id' = T.singleton first <> rest+  guard $ id' `notElem` reservedWords+  return id'++reservedWords :: [Text]+reservedWords = ["else","endif","for","endfor","sep"]++skipEndline :: Parser ()+skipEndline = A.skipWhile (`elem` " \t") >> A.char '\n' >> return ()++pConditional :: Parser Template+pConditional = do+  A.string "$if("+  id' <- pIdent+  A.string ")$"   -- if newline after the "if", then a newline after "endif" will be swallowed-  multiline <- option False $ try $ skipEndline >> return True-  ifContents <- liftM concat parseTemplate-  -- reset state for else block-  setState $ TemplateState pos vars-  elseContents <- option "" $ do try (string "$else$")-                                 when multiline $ optional skipEndline-                                 liftM concat parseTemplate-  string "$endif$"-  when multiline $ optional skipEndline-  let conditionSatisfied = case lookup id' vars of-                                Nothing -> False-                                Just "" -> False-                                Just _  -> True-  return $ if conditionSatisfied-              then ifContents-              else elseContents+  multiline <- A.option False (True <$ skipEndline)+  ifContents <- pTemplate+  elseContents <- A.option mempty $+                      do A.string "$else$"+                         when multiline $ A.option () skipEndline+                         pTemplate+  A.string "$endif$"+  when multiline $ A.option () skipEndline+  return $ cond id' ifContents elseContents -for :: Parsec [Char] TemplateState String-for = try $ do-  TemplateState pos vars <- getState-  string "$for("-  id' <- ident-  string ")$"+pFor :: Parser Template+pFor = do+  A.string "$for("+  id' <- pIdent+  A.string ")$"   -- if newline after the "for", then a newline after "endfor" will be swallowed-  multiline <- option False $ try $ skipEndline >> return True-  let matches = filter (\(k,_) -> k == id') vars-  let indent = replicate pos ' '-  contents <- forM matches $ \m -> do-                      updateState $ \(TemplateState p v) -> TemplateState p (m:v)-                      raw <- liftM concat $ lookAhead parseTemplate-                      return $ intercalate ('\n':indent) $ lines $ raw ++ "\n"-  parseTemplate-  sep <- option "" $ do try (string "$sep$")-                        when multiline $ optional skipEndline-                        liftM concat parseTemplate-  string "$endfor$"-  when multiline $ optional skipEndline-  setState $ TemplateState pos vars-  return $ concat $ intersperse sep contents--ident :: Parsec [Char] TemplateState String-ident = do-  first <- letter-  rest <- many (alphaNum <|> oneOf "_-")-  let id' = first : rest-  if id' `elem` reservedWords-     then mzero-     else return id'+  multiline <- A.option False $ skipEndline >> return True+  contents <- pTemplate+  sep <- A.option mempty $+           do A.string "$sep$"+              when multiline $ A.option () skipEndline+              pTemplate+  A.string "$endfor$"+  when multiline $ A.option () skipEndline+  return $ iter id' contents sep -variable :: Parsec [Char] TemplateState String-variable = try $ do-  char '$'-  id' <- ident-  char '$'-  TemplateState pos vars <- getState-  let indent = replicate pos ' '-  return $ case lookup id' vars of-             Just val  -> intercalate ('\n' : indent) $ lines val-             Nothing   -> ""+indent :: Int -> Template -> Template+indent 0   x            = x+indent ind (Template f) = Template $ \val -> indent' (f val)+  where indent' t = T.concat+                    $ intersperse ("\n" <> T.replicate ind " ") $ T.lines t
src/Text/Pandoc/UTF8.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {- Copyright (C) 2010 John MacFarlane <jgm@berkeley.edu> @@ -47,8 +48,12 @@  import System.IO hiding (readFile, writeFile, getContents,                           putStr, putStrLn, hPutStr, hPutStrLn, hGetContents)+#if MIN_VERSION_base(4,6,0)+import Prelude hiding (readFile, writeFile, getContents, putStr, putStrLn)+#else import Prelude hiding (readFile, writeFile, getContents, putStr, putStrLn,                        catch)+#endif import qualified System.IO as IO import qualified Data.ByteString.Char8 as B import qualified Data.ByteString.Lazy as BL@@ -81,7 +86,7 @@ hPutStrLn h s = hSetEncoding h utf8 >> IO.hPutStrLn h s  hGetContents :: Handle -> IO String-hGetContents = fmap toStringLazy . BL.hGetContents+hGetContents = fmap toString . B.hGetContents -- hGetContents h = hSetEncoding h utf8_bom --                   >> hSetNewlineMode h universalNewlineMode --                   >> IO.hGetContents h
src/Text/Pandoc/Writers/AsciiDoc.hs view
@@ -38,13 +38,17 @@ -} module Text.Pandoc.Writers.AsciiDoc (writeAsciiDoc) where import Text.Pandoc.Definition-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Options import Text.Pandoc.Parsing hiding (blankline, space) import Data.List ( isPrefixOf, intersperse, intercalate ) import Text.Pandoc.Pretty import Control.Monad.State+import qualified Data.Map as M+import Data.Aeson (Value(String), fromJSON, toJSON, Result(..))+import qualified Data.Text as T  data WriterState = WriterState { defListMarker :: String                                , orderedListLevel :: Int@@ -62,29 +66,32 @@  -- | Return asciidoc representation of document. pandocToAsciiDoc :: WriterOptions -> Pandoc -> State WriterState String-pandocToAsciiDoc opts (Pandoc (Meta title authors date) blocks) = do-  title' <- inlineListToAsciiDoc opts title-  let title'' = title' $$ text (replicate (offset title') '=')-  authors' <- mapM (inlineListToAsciiDoc opts) authors-  -- asciidoc only allows a singel author-  date' <- inlineListToAsciiDoc opts date-  let titleblock = not $ null title && null authors && null date-  body <- blockListToAsciiDoc opts blocks+pandocToAsciiDoc opts (Pandoc meta blocks) = do+  let titleblock = not $ null (docTitle meta) && null (docAuthors meta) &&+                         null (docDate meta)   let colwidth = if writerWrapText opts                     then Just $ writerColumns opts                     else Nothing+  metadata <- metaToJSON opts+              (fmap (render colwidth) . blockListToAsciiDoc opts)+              (fmap (render colwidth) . inlineListToAsciiDoc opts)+              meta+  let addTitleLine (String t) = String $+         t <> "\n" <> T.replicate (T.length t) "="+      addTitleLine x = x+  let metadata' = case fromJSON metadata of+                        Success m  -> toJSON $ M.adjust addTitleLine+                                                 ("title" :: T.Text) m+                        _          -> metadata+  body <- blockListToAsciiDoc opts blocks   let main = render colwidth body-  let context  = writerVariables opts ++-                 [ ("body", main)-                 , ("title", render colwidth title'')-                 , ("date", render colwidth date')-                 ] ++-                 [ ("toc", "yes") | writerTableOfContents opts &&-                                    writerStandalone opts ] ++-                 [ ("titleblock", "yes") | titleblock ] ++-                 [ ("author", render colwidth a) | a <- authors' ]+  let context  = defField "body" main+               $ defField "toc"+                  (writerTableOfContents opts && writerStandalone opts)+               $ defField "titleblock" titleblock+               $ metadata'   if writerStandalone opts-     then return $ renderTemplate context $ writerTemplate opts+     then return $ renderTemplate' (writerTemplate opts) context      else return main  -- | Escape special characters for AsciiDoc.@@ -125,19 +132,30 @@                then text "\\"                else empty   return $ esc <> contents <> blankline-blockToAsciiDoc _ (RawBlock _ _) = return empty+blockToAsciiDoc _ (RawBlock f s)+  | f == "asciidoc" = return $ text s+  | otherwise       = return empty blockToAsciiDoc _ HorizontalRule =   return $ blankline <> text "'''''" <> blankline blockToAsciiDoc opts (Header level (ident,_,_) inlines) = do   contents <- inlineListToAsciiDoc opts inlines   let len = offset contents-  return $ ("[[" <> text ident <> "]]") $$ contents $$-         (case level of+  -- ident seem to be empty most of the time and asciidoc will generate them automatically+  -- so lets make them not show up when null+  let identifier = if (null ident) then empty else ("[[" <> text ident <> "]]") +  let setext = writerSetextHeaders opts+  return $ +         (if setext +            then+              identifier $$ contents $$+              (case level of                1  -> text $ replicate len '-'                2  -> text $ replicate len '~'                3  -> text $ replicate len '^'                4  -> text $ replicate len '+'                _  -> empty) <> blankline+            else+              identifier $$ text (replicate level '=') <> space <> contents <> blankline)  blockToAsciiDoc _ (CodeBlock (_,classes,_) str) = return $   flush (attrs <> dashes <> space <> attrs <> cr <> text str <>            cr <> dashes) <> blankline@@ -230,6 +248,7 @@ blockToAsciiDoc opts (DefinitionList items) = do   contents <- mapM (definitionListItemToAsciiDoc opts) items   return $ cat contents <> blankline+blockToAsciiDoc opts (Div _ bs) = blockListToAsciiDoc opts bs  -- | Convert bullet list item (list of blocks) to asciidoc. bulletListItemToAsciiDoc :: WriterOptions -> [Block] -> State WriterState Doc@@ -330,7 +349,9 @@   return $ "latexmath:[$" <> text str <> "$]" inlineToAsciiDoc _ (Math DisplayMath str) =   return $ "latexmath:[\\[" <> text str <> "\\]]"-inlineToAsciiDoc _ (RawInline _ _) = return empty+inlineToAsciiDoc _ (RawInline f s)+  | f == "asciidoc" = return $ text s+  | otherwise       = return empty inlineToAsciiDoc _ (LineBreak) = return $ " +" <> cr inlineToAsciiDoc _ Space = return space inlineToAsciiDoc opts (Cite _ lst) = inlineListToAsciiDoc opts lst@@ -367,3 +388,4 @@   return $ text "footnote:[" <> contents <> "]" -- asciidoc can't handle blank lines in notes inlineToAsciiDoc _ (Note _) = return "[multiblock footnote omitted]"+inlineToAsciiDoc opts (Span _ ils) = inlineListToAsciiDoc opts ils
src/Text/Pandoc/Writers/ConTeXt.hs view
@@ -31,13 +31,14 @@ module Text.Pandoc.Writers.ConTeXt ( writeConTeXt ) where import Text.Pandoc.Definition import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Options-import Text.Pandoc.Generic (queryWith)+import Text.Pandoc.Walk (query) import Text.Printf ( printf ) import Data.List ( intercalate, isPrefixOf ) import Control.Monad.State import Text.Pandoc.Pretty-import Text.Pandoc.Templates ( renderTemplate )+import Text.Pandoc.Templates ( renderTemplate' ) import Network.URI ( isURI, unEscapeString )  data WriterState =@@ -59,36 +60,31 @@   in evalState (pandocToConTeXt options document) defaultWriterState  pandocToConTeXt :: WriterOptions -> Pandoc -> State WriterState String-pandocToConTeXt options (Pandoc (Meta title authors date) blocks) = do+pandocToConTeXt options (Pandoc meta blocks) = do   let colwidth = if writerWrapText options                     then Just $ writerColumns options                     else Nothing-  titletext <- if null title-                  then return ""-                  else liftM (render colwidth) $ inlineListToConTeXt title-  authorstext <- mapM (liftM (render colwidth) . inlineListToConTeXt) authors-  datetext <-  if null date-                  then return ""-                  else liftM (render colwidth) $ inlineListToConTeXt date+  metadata <- metaToJSON options+              (fmap (render colwidth) . blockListToConTeXt)+              (fmap (render colwidth) . inlineListToConTeXt)+              meta   body <- mapM (elementToConTeXt options) $ hierarchicalize blocks   let main = (render colwidth . vcat) body-  let context  = writerVariables options ++-                 [ ("toc", if writerTableOfContents options then "yes" else "")-                 , ("placelist", intercalate "," $+  let context =   defField "toc" (writerTableOfContents options)+                $ defField "placelist" (intercalate ("," :: String) $                      take (writerTOCDepth options + if writerChapters options                                                        then 0                                                        else 1)                        ["chapter","section","subsection","subsubsection",                         "subsubsubsection","subsubsubsubsection"])-                 , ("body", main)-                 , ("title", titletext)-                 , ("date", datetext) ] ++-                 [ ("number-sections", "yes") | writerNumberSections options ] ++-                 [ ("mainlang", maybe "" (reverse . takeWhile (/=',') . reverse)-                                (lookup "lang" $ writerVariables options)) ] ++-                 [ ("author", a) | a <- authorstext ]+                $ defField "body" main+                $ defField "number-sections" (writerNumberSections options)+                $ defField "mainlang" (maybe ""+                    (reverse . takeWhile (/=',') . reverse)+                    (lookup "lang" $ writerVariables options))+                $ metadata   return $ if writerStandalone options-              then renderTemplate context $ writerTemplate options+              then renderTemplate' (writerTemplate options) context               else main  -- escape things as needed for ConTeXt@@ -147,6 +143,7 @@   -- blankline because \stoptyping can't have anything after it, inc. '}' blockToConTeXt (RawBlock "context" str) = return $ text str <> blankline blockToConTeXt (RawBlock _ _ ) = return empty+blockToConTeXt (Div _ bs) = blockListToConTeXt bs blockToConTeXt (BulletList lst) = do   contents <- mapM listItemToConTeXt lst   return $ ("\\startitemize" <> if isTightList lst@@ -207,9 +204,11 @@                   then return empty                   else liftM ($$ "\\HL") $ tableRowToConTeXt heads     captionText <- inlineListToConTeXt caption-    let captionText' = if null caption then text "none" else captionText     rows' <- mapM tableRowToConTeXt rows-    return $ "\\placetable[here]" <> braces captionText' $$+    return $ "\\placetable" <> brackets ("here" <> if null caption+                                                      then ",none"+                                                      else "")+                            <> braces captionText $$              "\\starttable" <> brackets (text colDescriptors) $$              "\\HL" $$ headers $$              vcat rows' $$ "\\HL" $$ "\\stoptable" <> blankline@@ -327,11 +326,12 @@   contents' <- blockListToConTeXt contents   let codeBlock x@(CodeBlock _ _) = [x]       codeBlock _ = []-  let codeBlocks = queryWith codeBlock contents+  let codeBlocks = query codeBlock contents   return $ if null codeBlocks               then text "\\footnote{" <> nest 2 contents' <> char '}'               else text "\\startbuffer " <> nest 2 contents' <>                    text "\\stopbuffer\\footnote{\\getbuffer}"+inlineToConTeXt (Span _ ils) = inlineListToConTeXt ils  -- | Craft the section header, inserting the secton reference, if supplied. sectionHeader :: Attr
+ src/Text/Pandoc/Writers/Custom.hs view
@@ -0,0 +1,253 @@+{-# LANGUAGE OverlappingInstances, FlexibleInstances, OverloadedStrings #-}+{-# OPTIONS_GHC -fno-warn-orphans #-}+{- Copyright (C) 2012 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++{- |+   Module      : Text.Pandoc.Writers.Custom+   Copyright   : Copyright (C) 2012 John MacFarlane+   License     : GNU GPL, version 2 or above++   Maintainer  : John MacFarlane <jgm@berkeley.edu>+   Stability   : alpha+   Portability : portable++Conversion of 'Pandoc' documents to custom markup using+a lua writer.+-}+module Text.Pandoc.Writers.Custom ( writeCustom ) where+import Text.Pandoc.Definition+import Text.Pandoc.Options+import Data.List ( intersperse )+import Data.Char ( toLower )+import Scripting.Lua (LuaState, StackValue, callfunc)+import qualified Scripting.Lua as Lua+import Text.Pandoc.UTF8 (fromString, toString)+import Data.ByteString (ByteString)+import qualified Data.ByteString.Char8 as C8+import Data.Monoid+import qualified Data.Map as M++attrToMap :: Attr -> M.Map ByteString ByteString+attrToMap (id',classes,keyvals) = M.fromList+    $ ("id", fromString id')+    : ("class", fromString $ unwords classes)+    : map (\(x,y) -> (fromString x, fromString y)) keyvals++getList :: StackValue a => LuaState -> Int -> IO [a]+getList lua i' = do+  continue <- Lua.next lua i'+  if continue+     then do+       next <- Lua.peek lua (-1)+       Lua.pop lua 1+       x <- maybe (fail "peek returned Nothing") return next+       rest <- getList lua i'+       return (x : rest)+     else return []++instance StackValue ByteString where+    push l x = Lua.push l $ C8.unpack x+    peek l n = (fmap . fmap) C8.pack (Lua.peek l n)+    valuetype _ = Lua.TSTRING++instance StackValue a => StackValue [a] where+  push lua xs = do+    Lua.createtable lua (length xs + 1) 0+    let addValue (i, x) = Lua.push lua x >> Lua.rawseti lua (-2) i+    mapM_ addValue $ zip [1..] xs+  peek lua i = do+    top <- Lua.gettop lua+    let i' = if i < 0 then top + i + 1 else i+    Lua.pushnil lua+    lst <- getList lua i'+    Lua.pop lua 1+    return (Just lst)+  valuetype _ = Lua.TTABLE++instance StackValue Format where+  push lua (Format f) = Lua.push lua (map toLower f)+  peek l n = fmap Format `fmap` Lua.peek l n+  valuetype _ = Lua.TSTRING++instance (StackValue a, StackValue b) => StackValue (M.Map a b) where+  push lua m = do+    let xs = M.toList m+    Lua.createtable lua (length xs + 1) 0+    let addValue (k, v) = Lua.push lua k >> Lua.push lua v >>+                          Lua.rawset lua (-3)+    mapM_ addValue xs+  peek _ _ = undefined -- not needed for our purposes+  valuetype _ = Lua.TTABLE++instance (StackValue a, StackValue b) => StackValue (a,b) where+  push lua (k,v) = do+    Lua.createtable lua 2 0+    Lua.push lua k+    Lua.push lua v+    Lua.rawset lua (-3)+  peek _ _ = undefined -- not needed for our purposes+  valuetype _ = Lua.TTABLE++instance StackValue [Inline] where+  push l ils = Lua.push l . C8.unpack =<< inlineListToCustom l ils+  peek _ _ = undefined+  valuetype _ = Lua.TSTRING++instance StackValue [Block] where+  push l ils = Lua.push l . C8.unpack =<< blockListToCustom l ils+  peek _ _ = undefined+  valuetype _ = Lua.TSTRING++instance StackValue MetaValue where+  push l (MetaMap m) = Lua.push l m+  push l (MetaList xs) = Lua.push l xs+  push l (MetaBool x) = Lua.push l x+  push l (MetaString s) = Lua.push l s+  push l (MetaInlines ils) = Lua.push l ils+  push l (MetaBlocks bs) = Lua.push l bs+  peek _ _ = undefined+  valuetype (MetaMap _) = Lua.TTABLE+  valuetype (MetaList _) = Lua.TTABLE+  valuetype (MetaBool _) = Lua.TBOOLEAN+  valuetype (MetaString _) = Lua.TSTRING+  valuetype (MetaInlines _) = Lua.TSTRING+  valuetype (MetaBlocks _) = Lua.TSTRING++-- | Convert Pandoc to custom markup.+writeCustom :: FilePath -> WriterOptions -> Pandoc -> IO String+writeCustom luaFile opts doc = do+  luaScript <- readFile luaFile+  lua <- Lua.newstate+  Lua.openlibs lua+  Lua.loadstring lua luaScript "custom"+  Lua.call lua 0 0+  -- TODO - call hierarchicalize, so we have that info+  rendered <- docToCustom lua opts doc+  Lua.close lua+  return $ toString rendered++docToCustom :: LuaState -> WriterOptions -> Pandoc -> IO ByteString+docToCustom lua opts (Pandoc (Meta metamap) blocks) = do+  body <- blockListToCustom lua blocks+  callfunc lua "Doc" body metamap (writerVariables opts)++-- | Convert Pandoc block element to Custom.+blockToCustom :: LuaState      -- ^ Lua state+              -> Block         -- ^ Block element+              -> IO ByteString++blockToCustom _ Null = return ""++blockToCustom lua (Plain inlines) = callfunc lua "Plain" inlines++blockToCustom lua (Para [Image txt (src,tit)]) =+  callfunc lua "CaptionedImage" src tit txt++blockToCustom lua (Para inlines) = callfunc lua "Para" inlines++blockToCustom lua (RawBlock format str) =+  callfunc lua "RawBlock" format (fromString str)++blockToCustom lua HorizontalRule = callfunc lua "HorizontalRule"++blockToCustom lua (Header level attr inlines) =+  callfunc lua "Header" level inlines (attrToMap attr)++blockToCustom lua (CodeBlock attr str) =+  callfunc lua "CodeBlock" (fromString str) (attrToMap attr)++blockToCustom lua (BlockQuote blocks) = callfunc lua "BlockQuote" blocks++blockToCustom lua (Table capt aligns widths headers rows') =+  callfunc lua "Table" capt (map show aligns) widths headers rows'++blockToCustom lua (BulletList items) = callfunc lua "BulletList" items++blockToCustom lua (OrderedList (num,sty,delim) items) =+  callfunc lua "OrderedList" items num (show sty) (show delim)++blockToCustom lua (DefinitionList items) =+  callfunc lua "DefinitionList" items++blockToCustom lua (Div attr items) =+  callfunc lua "Div" items (attrToMap attr)++-- | Convert list of Pandoc block elements to Custom.+blockListToCustom :: LuaState -- ^ Options+                  -> [Block]       -- ^ List of block elements+                  -> IO ByteString+blockListToCustom lua xs = do+  blocksep <- callfunc lua "Blocksep"+  bs <- mapM (blockToCustom lua) xs+  return $ mconcat $ intersperse blocksep bs++-- | Convert list of Pandoc inline elements to Custom.+inlineListToCustom :: LuaState -> [Inline] -> IO ByteString+inlineListToCustom lua lst = do+  xs <- mapM (inlineToCustom lua) lst+  return $ C8.concat xs++-- | Convert Pandoc inline element to Custom.+inlineToCustom :: LuaState -> Inline -> IO ByteString++inlineToCustom lua (Str str) = callfunc lua "Str" $ fromString str++inlineToCustom lua Space = callfunc lua "Space"++inlineToCustom lua (Emph lst) = callfunc lua "Emph" lst++inlineToCustom lua (Strong lst) = callfunc lua "Strong" lst++inlineToCustom lua (Strikeout lst) = callfunc lua "Strikeout" lst++inlineToCustom lua (Superscript lst) = callfunc lua "Superscript" lst++inlineToCustom lua (Subscript lst) = callfunc lua "Subscript" lst++inlineToCustom lua (SmallCaps lst) = callfunc lua "SmallCaps" lst++inlineToCustom lua (Quoted SingleQuote lst) = callfunc lua "SingleQuoted" lst++inlineToCustom lua (Quoted DoubleQuote lst) = callfunc lua "DoubleQuoted" lst++inlineToCustom lua (Cite _  lst) = callfunc lua "Cite" lst++inlineToCustom lua (Code attr str) =+  callfunc lua "Code" (fromString str) (attrToMap attr)++inlineToCustom lua (Math DisplayMath str) =+  callfunc lua "DisplayMath" (fromString str)++inlineToCustom lua (Math InlineMath str) =+  callfunc lua "InlineMath" (fromString str)++inlineToCustom lua (RawInline format str) =+  callfunc lua "RawInline" format (fromString str)++inlineToCustom lua (LineBreak) = callfunc lua "LineBreak"++inlineToCustom lua (Link txt (src,tit)) =+  callfunc lua "Link" txt (fromString src) (fromString tit)++inlineToCustom lua (Image alt (src,tit)) =+  callfunc lua "Image" alt (fromString src) (fromString tit)++inlineToCustom lua (Note contents) = callfunc lua "Note" contents++inlineToCustom lua (Span attr items) =+  callfunc lua "Span" items (attrToMap attr)
src/Text/Pandoc/Writers/Docbook.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE OverloadedStrings #-} {- Copyright (C) 2006-2010 John MacFarlane <jgm@berkeley.edu> @@ -31,22 +32,28 @@ import Text.Pandoc.Definition import Text.Pandoc.XML import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Options-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Readers.TeXMath import Data.List ( isPrefixOf, intercalate, isSuffixOf ) import Data.Char ( toLower ) import Text.Pandoc.Highlighting ( languages, languagesByExtension ) import Text.Pandoc.Pretty+import qualified Text.Pandoc.Builder as B import Text.TeXMath import qualified Text.XML.Light as Xml import Data.Generics (everywhere, mkT)  -- | Convert list of authors to a docbook <author> section-authorToDocbook :: WriterOptions -> [Inline] -> Doc+authorToDocbook :: WriterOptions -> [Inline] -> B.Inlines authorToDocbook opts name' =   let name = render Nothing $ inlinesToDocbook opts name'-  in  if ',' `elem` name+      colwidth = if writerWrapText opts+                    then Just $ writerColumns opts+                    else Nothing+  in  B.rawInline "docbook" $ render colwidth $+      if ',' `elem` name          then -- last name first               let (lastname, rest) = break (==',') name                   firstname = triml rest in@@ -64,11 +71,8 @@  -- | Convert Pandoc document to string in Docbook format. writeDocbook :: WriterOptions -> Pandoc -> String-writeDocbook opts (Pandoc (Meta tit auths dat) blocks) =-  let title = inlinesToDocbook opts tit-      authors = map (authorToDocbook opts) auths-      date = inlinesToDocbook opts dat-      elements = hierarchicalize blocks+writeDocbook opts (Pandoc meta blocks) =+  let elements = hierarchicalize blocks       colwidth = if writerWrapText opts                     then Just $ writerColumns opts                     else Nothing@@ -78,17 +82,20 @@                  then opts{ writerChapters = True }                  else opts       startLvl = if writerChapters opts' then 0 else 1+      auths'   = map (authorToDocbook opts) $ docAuthors meta+      meta'    = B.setMeta "author" auths' meta+      Just metadata = metaToJSON opts+                 (Just . render colwidth . blocksToDocbook opts)+                 (Just . render colwidth . inlinesToDocbook opts)+                 meta'       main     = render' $ vcat (map (elementToDocbook opts' startLvl) elements)-      context = writerVariables opts ++-                [ ("body", main)-                , ("title", render' title)-                , ("date", render' date) ] ++-                [ ("author", render' a) | a <- authors ] ++-                [ ("mathml", "yes") | case writerHTMLMathMethod opts of-                                            MathML _ -> True-                                            _ -> False ]+      context = defField "body" main+              $ defField "mathml" (case writerHTMLMathMethod opts of+                                        MathML _ -> True+                                        _        -> False)+              $ metadata   in  if writerStandalone opts-         then renderTemplate context $ writerTemplate opts+         then renderTemplate' (writerTemplate opts) context          else main  -- | Convert an Element to Docbook.@@ -142,6 +149,7 @@ -- | Convert a Pandoc block element to Docbook. blockToDocbook :: WriterOptions -> Block -> Doc blockToDocbook _ Null = empty+blockToDocbook opts (Div _ bs) = blocksToDocbook opts $ map plainToPara bs blockToDocbook _ (Header _ _ _) = empty -- should not occur after hierarchicalize blockToDocbook opts (Plain lst) = inlinesToDocbook opts lst -- title beginning with fig: indicates that the image is a figure@@ -192,10 +200,10 @@   in  inTags True "orderedlist" attribs items blockToDocbook opts (DefinitionList lst) =   inTagsIndented "variablelist" $ deflistItemsToDocbook opts lst-blockToDocbook _ (RawBlock "docbook" str) = text str -- raw XML block--- we allow html for compatibility with earlier versions of pandoc-blockToDocbook _ (RawBlock "html" str) = text str -- raw XML block-blockToDocbook _ (RawBlock _ _) = empty+blockToDocbook _ (RawBlock f str)+  | f == "docbook" = text str -- raw XML block+  | f == "html"    = text str -- allow html for backwards compatibility+  | otherwise      = empty blockToDocbook _ HorizontalRule = empty -- not semantic blockToDocbook opts (Table caption aligns widths headers rows) =   let captionDoc   = if null caption@@ -261,6 +269,8 @@   inTagsSimple "quote" $ inlinesToDocbook opts lst inlineToDocbook opts (Cite _ lst) =   inlinesToDocbook opts lst+inlineToDocbook opts (Span _ ils) =+  inlinesToDocbook opts ils inlineToDocbook _ (Code _ str) =   inTagsSimple "literal" $ text (escapeStringForXML str) inlineToDocbook opts (Math t str)
src/Text/Pandoc/Writers/Docx.hs view
@@ -32,8 +32,10 @@ import Data.List ( intercalate, groupBy ) import qualified Data.ByteString as B import qualified Data.ByteString.Lazy as BL+import qualified Data.ByteString.Lazy.Char8 as BL8 import qualified Data.Map as M import qualified Text.Pandoc.UTF8 as UTF8+import Text.Pandoc.Compat.Monoid ((<>)) import Codec.Archive.Zip import Data.Time.Clock.POSIX import Text.Pandoc.Definition@@ -43,6 +45,7 @@ import Text.Pandoc.Options import Text.Pandoc.Readers.TeXMath import Text.Pandoc.Highlighting ( highlight )+import Text.Pandoc.Walk import Text.Highlighting.Kate.Types () import Text.XML.Light import Text.TeXMath@@ -89,9 +92,6 @@  type WS a = StateT WriterState IO a -showTopElement' :: Element -> String-showTopElement' x = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" ++ showElement x- mknode :: Node t => String -> [(String,String)] -> t -> Element mknode s attrs =   add_attrs (map (\(k,v) -> Attr (unqual k) v) attrs) . node (unqual s)@@ -99,18 +99,23 @@ toLazy :: B.ByteString -> BL.ByteString toLazy = BL.fromChunks . (:[]) +renderXml :: Element -> BL.ByteString+renderXml elt = BL8.pack "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" <>+  UTF8.fromStringLazy (showElement elt)+ -- | Produce an Docx file from a Pandoc document. writeDocx :: WriterOptions  -- ^ Writer options           -> Pandoc         -- ^ Document to convert           -> IO BL.ByteString-writeDocx opts doc@(Pandoc (Meta tit auths date) _) = do+writeDocx opts doc@(Pandoc meta _) = do   let datadir = writerUserDataDir opts+  let doc' = walk fixDisplayMath doc   refArchive <- liftM (toArchive . toLazy) $        case writerReferenceDocx opts of              Just f  -> B.readFile f              Nothing -> readDataFile datadir "reference.docx" -  ((contents, footnotes), st) <- runStateT (writeOpenXML opts{writerWrapText = False} doc)+  ((contents, footnotes), st) <- runStateT (writeOpenXML opts{writerWrapText = False} doc')                        defaultWriterState   epochtime <- floor `fmap` getPOSIXTime   let imgs = M.elems $ stImages st@@ -154,7 +159,7 @@               [("Extension","rels"),("ContentType","application/vnd.openxmlformats-package.relationships+xml")] ()]   let contentTypesDoc = mknode "Types" [("xmlns","http://schemas.openxmlformats.org/package/2006/content-types")] $ defaultnodes ++ overrides   let contentTypesEntry = toEntry "[Content_Types].xml" epochtime-        $ UTF8.fromStringLazy $ showTopElement' contentTypesDoc+        $ renderXml contentTypesDoc    -- word/_rels/document.xml.rels   let toBaseRel (url', id', target') = mknode "Relationship"@@ -189,34 +194,34 @@   let linkrels = map toLinkRel $ M.toList $ stExternalLinks st   let reldoc = mknode "Relationships" [("xmlns","http://schemas.openxmlformats.org/package/2006/relationships")] $ baserels ++ imgrels ++ linkrels   let relEntry = toEntry "word/_rels/document.xml.rels" epochtime-        $ UTF8.fromStringLazy $ showTopElement' reldoc+        $ renderXml reldoc    -- create entries for images in word/media/...   let toImageEntry (_,path,_,_,img) = toEntry ("word/" ++ path) epochtime $ toLazy img   let imageEntries = map toImageEntry imgs    -- word/document.xml-  let contentEntry = toEntry "word/document.xml" epochtime $ UTF8.fromStringLazy $ showTopElement' contents+  let contentEntry = toEntry "word/document.xml" epochtime $ renderXml contents    -- footnotes-  let footnotesEntry = toEntry "word/footnotes.xml" epochtime $ UTF8.fromStringLazy $-        showTopElement' footnotes+  let footnotesEntry = toEntry "word/footnotes.xml" epochtime $ renderXml footnotes    -- footnote rels-  let footnoteRelEntry = toEntry "word/_rels/footnotes.xml.rels" epochtime $ UTF8.fromStringLazy $-        showTopElement' $ mknode "Relationships" [("xmlns","http://schemas.openxmlformats.org/package/2006/relationships")]+  let footnoteRelEntry = toEntry "word/_rels/footnotes.xml.rels" epochtime+        $ renderXml $ mknode "Relationships" [("xmlns","http://schemas.openxmlformats.org/package/2006/relationships")]         $ linkrels    -- styles   let newstyles = styleToOpenXml $ writerHighlightStyle opts   let stylepath = "word/styles.xml"   styledoc <- parseXml refArchive stylepath-  let styledoc' = styledoc{ elContent = elContent styledoc ++ map Elem newstyles }-  let styleEntry = toEntry stylepath epochtime $ UTF8.fromStringLazy $ showTopElement' styledoc'+  let styledoc' = styledoc{ elContent = elContent styledoc +++                  [Elem x | x <- newstyles, writerHighlight opts] }+  let styleEntry = toEntry stylepath epochtime $ renderXml styledoc'    -- construct word/numbering.xml   let numpath = "word/numbering.xml"-  numEntry <- (toEntry numpath epochtime . UTF8.fromStringLazy . showTopElement')+  numEntry <- (toEntry numpath epochtime . renderXml)                  `fmap` mkNumbering (stNumStyles st) (stLists st)   let docPropsPath = "docProps/core.xml"   let docProps = mknode "cp:coreProperties"@@ -225,26 +230,41 @@           ,("xmlns:dcterms","http://purl.org/dc/terms/")           ,("xmlns:dcmitype","http://purl.org/dc/dcmitype/")           ,("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance")]-          $ mknode "dc:title" [] (stringify tit)+          $ mknode "dc:title" [] (stringify $ docTitle meta)           : mknode "dcterms:created" [("xsi:type","dcterms:W3CDTF")]-            (maybe "" id $ normalizeDate $ stringify date)+            (maybe "" id $ normalizeDate $ stringify $ docDate meta)           : mknode "dcterms:modified" [("xsi:type","dcterms:W3CDTF")] () -- put current time here-          : map (mknode "dc:creator" [] . stringify) auths-  let docPropsEntry = toEntry docPropsPath epochtime $ UTF8.fromStringLazy $ showTopElement' docProps+          : map (mknode "dc:creator" [] . stringify) (docAuthors meta)+  let docPropsEntry = toEntry docPropsPath epochtime $ renderXml docProps+   let relsPath = "_rels/.rels"-  rels <- case findEntryByPath relsPath refArchive of-                   Just e  -> return $ UTF8.toStringLazy $ fromEntry e-                   Nothing -> err 57 "could not find .rels/_rels in reference docx"+  let rels = mknode "Relationships" [("xmlns", "http://schemas.openxmlformats.org/package/2006/relationships")]+        $ map (\attrs -> mknode "Relationship" attrs ())+        [ [("Id","rId1")+          ,("Type","http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument")+          ,("Target","word/document.xml")]+        , [("Id","rId4")+          ,("Type","http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties")+          ,("Target","docProps/app.xml")]+        , [("Id","rId3")+          ,("Type","http://schemas.openxmlformats.org/officedocument/2006/relationships/metadata/core-properties")+          ,("Target","docProps/core.xml")]+        ]+  let relsEntry = toEntry relsPath epochtime $ renderXml rels -  -- fix .rels/_rels, which can get screwed up when reference.docx is edited by Word-  let rels' = substitute "http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties"-                  "http://schemas.openxmlformats.org/officedocument/2006/relationships/metadata/core-properties"-                  rels-  let relsEntry = toEntry relsPath epochtime $ UTF8.fromStringLazy rels'+  let entryFromArchive path = (toEntry path epochtime . renderXml) `fmap`+                                parseXml refArchive path+  docPropsAppEntry <- entryFromArchive "docProps/app.xml"+  themeEntry <- entryFromArchive "word/theme/theme1.xml"+  fontTableEntry <- entryFromArchive "word/fontTable.xml"+  webSettingsEntry <- entryFromArchive "word/webSettings.xml"    -- Create archive-  let archive = foldr addEntryToArchive refArchive $-                  contentTypesEntry : relsEntry : contentEntry : relEntry : footnoteRelEntry : numEntry : styleEntry : footnotesEntry : docPropsEntry : imageEntries+  let archive = foldr addEntryToArchive emptyArchive $+                  contentTypesEntry : relsEntry : contentEntry : relEntry :+                  footnoteRelEntry : numEntry : styleEntry : footnotesEntry :+                  docPropsEntry : docPropsAppEntry : themeEntry :+                  fontTableEntry : webSettingsEntry : imageEntries   return $ fromArchive archive  styleToOpenXml :: Style -> [Element]@@ -360,7 +380,12 @@  -- | Convert Pandoc document to two OpenXML elements (the main document and footnotes). writeOpenXML :: WriterOptions -> Pandoc -> WS (Element, Element)-writeOpenXML opts (Pandoc (Meta tit auths dat) blocks) = do+writeOpenXML opts (Pandoc meta blocks) = do+  let tit = docTitle meta ++ case lookupMeta "subtitle" meta of+                                  Just (MetaBlocks [Plain xs]) -> LineBreak : xs+                                  _ -> []+  let auths = docAuthors meta+  let dat = docDate meta   title <- withParaProp (pStyle "Title") $ blocksToOpenXML opts [Para tit | not (null tit)]   authors <- withParaProp (pStyle "Authors") $ blocksToOpenXML opts                  [Para (intercalate [LineBreak] auths) | not (null auths)]@@ -371,7 +396,7 @@   let blocks' = bottomUp convertSpace $ blocks   doc' <- blocksToOpenXML opts blocks'   notes' <- reverse `fmap` gets stFootnotes-  let meta = title ++ authors ++ date+  let meta' = title ++ authors ++ date   let stdAttributes =             [("xmlns:w","http://schemas.openxmlformats.org/wordprocessingml/2006/main")             ,("xmlns:m","http://schemas.openxmlformats.org/officeDocument/2006/math")@@ -382,7 +407,7 @@             ,("xmlns:a","http://schemas.openxmlformats.org/drawingml/2006/main")             ,("xmlns:pic","http://schemas.openxmlformats.org/drawingml/2006/picture")             ,("xmlns:wp","http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing")]-  let doc = mknode "w:document" stdAttributes $ mknode "w:body" [] (meta ++ doc')+  let doc = mknode "w:document" stdAttributes $ mknode "w:body" [] (meta' ++ doc')   let notes = mknode "w:footnotes" stdAttributes notes'   return (doc, notes) @@ -404,6 +429,7 @@ -- | Convert a Pandoc block element to OpenXML. blockToOpenXML :: WriterOptions -> Block -> WS [Element] blockToOpenXML _ Null = return []+blockToOpenXML opts (Div _ bs) = blocksToOpenXML opts bs blockToOpenXML opts (Header lev (ident,_,_) lst) = do   contents <- withParaProp (pStyle $ "Heading" ++ show lev) $                blockToOpenXML opts (Para lst)@@ -417,27 +443,26 @@                                                ,("w:name",bookmarkName)] ()   let bookmarkEnd = mknode "w:bookmarkEnd" [("w:id", id')] ()   return $ [bookmarkStart] ++ contents ++ [bookmarkEnd]-blockToOpenXML opts (Plain lst) = blockToOpenXML opts (Para lst)+blockToOpenXML opts (Plain lst) = withParaProp (pStyle "Compact")+  $ blockToOpenXML opts (Para lst) -- title beginning with fig: indicates that the image is a figure blockToOpenXML opts (Para [Image alt (src,'f':'i':'g':':':tit)]) = do-  paraProps <- getParaProps+  paraProps <- getParaProps False   contents <- inlinesToOpenXML opts [Image alt (src,tit)]   captionNode <- withParaProp (pStyle "ImageCaption")                  $ blockToOpenXML opts (Para alt)   return $ mknode "w:p" [] (paraProps ++ contents) : captionNode-blockToOpenXML opts (Para lst)-  | any isDisplayMath lst && not (all isDisplayMath lst) = do-    -- chop into several paragraphs so each displaymath is its own-    let lsts = groupBy (\x y -> (isDisplayMath x && isDisplayMath y) ||-                         not (isDisplayMath x || isDisplayMath y)) lst-    blocksToOpenXML opts (map Para lsts)-  | otherwise = do-    paraProps <- getParaProps+-- fixDisplayMath sometimes produces a Para [] as artifact+blockToOpenXML _ (Para []) = return []+blockToOpenXML opts (Para lst) = do+    paraProps <- getParaProps $ case lst of+                                     [Math DisplayMath _] -> True+                                     _                    -> False     contents <- inlinesToOpenXML opts lst     return [mknode "w:p" [] (paraProps ++ contents)] blockToOpenXML _ (RawBlock format str)-  | format == "openxml" = return [ x | Elem x <- parseXML str ]-  | otherwise           = return []+  | format == Format "openxml" = return [ x | Elem x <- parseXML str ]+  | otherwise                  = return [] blockToOpenXML opts (BlockQuote blocks) =   withParaProp (pStyle "BlockQuote") $ blocksToOpenXML opts blocks blockToOpenXML opts (CodeBlock attrs str) =@@ -571,12 +596,12 @@   popTextProp   return res -getParaProps :: WS [Element]-getParaProps = do+getParaProps :: Bool -> WS [Element]+getParaProps displayMathPara = do   props <- gets stParaProperties   listLevel <- gets stListLevel   numid <- gets stListNumId-  let listPr = if listLevel >= 0+  let listPr = if listLevel >= 0 && not displayMathPara                   then [ mknode "w:numPr" []                          [ mknode "w:numId" [("w:val",show numid)] ()                          , mknode "w:ilvl" [("w:val",show listLevel)] () ]@@ -610,6 +635,7 @@ inlineToOpenXML :: WriterOptions -> Inline -> WS [Element] inlineToOpenXML _ (Str str) = formattedString str inlineToOpenXML opts Space = inlineToOpenXML opts (Str " ")+inlineToOpenXML opts (Span _ ils) = inlinesToOpenXML opts ils inlineToOpenXML opts (Strong lst) =   withTextProp (mknode "w:b" [] ()) $ inlinesToOpenXML opts lst inlineToOpenXML opts (Emph lst) =@@ -628,8 +654,8 @@   $ inlinesToOpenXML opts lst inlineToOpenXML _ LineBreak = return [br] inlineToOpenXML _ (RawInline f str)-  | f == "openxml" = return [ x | Elem x <- parseXML str ]-  | otherwise      = return []+  | f == Format "openxml" = return [ x | Elem x <- parseXML str ]+  | otherwise            = return [] inlineToOpenXML opts (Quoted quoteType lst) =   inlinesToOpenXML opts $ [Str open] ++ lst ++ [Str close]     where (open, close) = case quoteType of@@ -643,13 +669,16 @@         Right r -> return [r]         Left  _ -> inlinesToOpenXML opts (readTeXMath str) inlineToOpenXML opts (Cite _ lst) = inlinesToOpenXML opts lst-inlineToOpenXML _ (Code attrs str) =+inlineToOpenXML opts (Code attrs str) =   withTextProp (rStyle "VerbatimChar")-  $ case highlight formatOpenXML attrs str of-         Nothing  -> intercalate [br]-                     `fmap` (mapM formattedString $ lines str)-         Just h   -> return h-     where formatOpenXML _fmtOpts = intercalate [br] . map (map toHlTok)+  $ if writerHighlight opts+       then case highlight formatOpenXML attrs str of+             Nothing  -> unhighlighted+             Just h   -> return h+       else unhighlighted+     where unhighlighted = intercalate [br] `fmap`+                             (mapM formattedString $ lines str)+           formatOpenXML _fmtOpts = intercalate [br] . map (map toHlTok)            toHlTok (toktype,tok) = mknode "w:r" []                                      [ mknode "w:rPr" []                                        [ rStyle $ show toktype ]@@ -660,7 +689,7 @@   let notemarker = mknode "w:r" []                    [ mknode "w:rPr" [] (rStyle "FootnoteRef")                    , mknode "w:footnoteRef" [] () ]-  let notemarkerXml = RawInline "openxml" $ ppElement notemarker+  let notemarkerXml = RawInline (Format "openxml") $ ppElement notemarker   let insertNoteRef (Plain ils : xs) = Plain (notemarkerXml : ils) : xs       insertNoteRef (Para ils  : xs) = Para  (notemarkerXml : ils) : xs       insertNoteRef xs               = Para [notemarkerXml] : xs@@ -699,8 +728,7 @@   case M.lookup src imgs of     Just (_,_,_,elt,_) -> return [elt]     Nothing -> do-      let sourceDir = writerSourceDirectory opts-      res <- liftIO $ E.try $ fetchItem sourceDir src+      res <- liftIO $ fetchItem (writerSourceURL opts) src       case res of         Left (_ :: E.SomeException) -> do           liftIO $ warn $ "Could not find image `" ++ src ++ "', skipping..."@@ -750,6 +778,7 @@                              Just Jpeg -> ".jpeg"                              Just Gif  -> ".gif"                              Just Pdf  -> ".pdf"+                             Just Eps  -> ".eps"                              Nothing   -> takeExtension src           if null imgext              then -- without an extension there is no rule for content type@@ -764,7 +793,7 @@                return [imgElt]  br :: Element-br = mknode "w:r" [] [mknode "w:cr" [] () ]+br = mknode "w:r" [] [mknode "w:br" [("w:type","textWrapping")] () ]  parseXml :: Archive -> String -> IO Element parseXml refArchive relpath =@@ -775,3 +804,23 @@ isDisplayMath :: Inline -> Bool isDisplayMath (Math DisplayMath _) = True isDisplayMath _                    = False++stripLeadingTrailingSpace :: [Inline] -> [Inline]+stripLeadingTrailingSpace = go . reverse . go . reverse+  where go (Space:xs) = xs+        go xs         = xs++fixDisplayMath :: Block -> Block+fixDisplayMath (Plain lst)+  | any isDisplayMath lst && not (all isDisplayMath lst) =+    -- chop into several paragraphs so each displaymath is its own+    Div ("",["math"],[]) $ map (Plain . stripLeadingTrailingSpace) $+       groupBy (\x y -> (isDisplayMath x && isDisplayMath y) ||+                         not (isDisplayMath x || isDisplayMath y)) lst+fixDisplayMath (Para lst)+  | any isDisplayMath lst && not (all isDisplayMath lst) =+    -- chop into several paragraphs so each displaymath is its own+    Div ("",["math"],[]) $ map (Para . stripLeadingTrailingSpace) $+       groupBy (\x y -> (isDisplayMath x && isDisplayMath y) ||+                         not (isDisplayMath x || isDisplayMath y)) lst+fixDisplayMath x = x
src/Text/Pandoc/Writers/EPUB.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE PatternGuards, CPP #-} {- Copyright (C) 2010 John MacFarlane <jgm@berkeley.edu> @@ -37,15 +38,17 @@ import qualified Data.ByteString.Lazy as B import qualified Data.ByteString.Lazy.Char8 as B8 import Text.Pandoc.UTF8 ( fromStringLazy, toString )+import Text.Pandoc.SelfContained ( makeSelfContained ) import Codec.Archive.Zip import Data.Time.Clock.POSIX import Data.Time import System.Locale import Text.Pandoc.Shared hiding ( Element ) import qualified Text.Pandoc.Shared as Shared+import Text.Pandoc.Builder (fromList, setMeta) import Text.Pandoc.Options import Text.Pandoc.Definition-import Text.Pandoc.Generic+import Text.Pandoc.Walk import Control.Monad.State import Text.XML.Light hiding (ppTopElement) import Text.Pandoc.UUID@@ -54,13 +57,12 @@ import Data.Char ( toLower ) import Network.URI ( unEscapeString ) import Text.Pandoc.MIME (getMimeType)+#if MIN_VERSION_base(4,6,0)+#else import Prelude hiding (catch)+#endif import Control.Exception (catch, SomeException)-#if MIN_VERSION_blaze_html(0,5,0) import Text.Blaze.Html.Renderer.Utf8 (renderHtml)-#else-import Text.Blaze.Renderer.Utf8 (renderHtml)-#endif  -- A Chapter includes a list of blocks and maybe a section -- number offset.  Note, some chapters are unnumbered. The section@@ -91,7 +93,6 @@                           then MathML Nothing                           else writerHTMLMathMethod opts                   , writerWrapText = False }-  let sourceDir = writerSourceDirectory opts'   let mbCoverImage = lookup "epub-cover-image" vars    -- cover page@@ -101,7 +102,7 @@                      Just img  -> do                        let coverImage = "cover-image" ++ takeExtension img                        let cpContent = renderHtml $ writeHtml opts'-                               (Pandoc meta [RawBlock "html" $ "<div id=\"cover-image\">\n<img src=\"" ++ coverImage ++ "\" alt=\"cover image\" />\n</div>"])+                               (Pandoc meta [RawBlock (Format "html") $ "<div id=\"cover-image\">\n<img src=\"" ++ coverImage ++ "\" alt=\"cover image\" />\n</div>"])                        imgContent <- B.readFile img                        return ( [mkEntry "cover.xhtml" cpContent]                               , [mkEntry coverImage imgContent] )@@ -114,13 +115,18 @@    -- handle pictures   picsRef <- newIORef []-  Pandoc _ blocks <- bottomUpM-       (transformInlines (writerHTMLMathMethod opts') sourceDir picsRef) doc+  Pandoc _ blocks <- walkM+       (transformInline opts' picsRef) doc   pics <- readIORef picsRef-  let readPicEntry (oldsrc, newsrc) = do-        (img,_) <- fetchItem sourceDir oldsrc-        return $ toEntry newsrc epochtime $ B.fromChunks . (:[]) $ img-  picEntries <- mapM readPicEntry pics+  let readPicEntry entries (oldsrc, newsrc) = do+        res <- fetchItem (writerSourceURL opts') oldsrc+        case res of+             Left _        -> do+              warn $ "Could not find image `" ++ oldsrc ++ "', skipping..."+              return entries+             Right (img,_) -> return $+              (toEntry newsrc epochtime $ B.fromChunks . (:[]) $ img) : entries+  picEntries <- foldM readPicEntry [] pics    -- handle fonts   let mkFontEntry f = mkEntry (takeFileName f) `fmap` B.readFile f@@ -175,8 +181,10 @@         $ writeHtml opts'{ writerNumberOffset =             maybe [] id mbnum }         $ case bs of-              (Header _ _ xs : _) -> Pandoc (Meta xs [] []) bs-              _                   -> Pandoc (Meta [] [] []) bs+              (Header _ _ xs : _) ->+                 Pandoc (setMeta "title" (fromList xs) nullMeta) bs+              _                   ->+                 Pandoc nullMeta bs    let chapterEntries = zipWith chapToEntry [1..] chapters @@ -242,7 +250,10 @@                     Nothing -> []                     Just _ -> [ unode "itemref" !                                 [("idref", "cover"),("linear","no")] $ () ]-              ++ ((unode "itemref" ! [("idref", "title_page"),("linear","yes")] $ ()) :+              ++ ((unode "itemref" ! [("idref", "title_page")+                                     ,("linear", if null (docTitle meta)+                                                    then "no"+                                                    else "yes")] $ ()) :                   (unode "itemref" ! [("idref", "nav")                                      ,("linear", if writerTableOfContents opts                                                     then "yes"@@ -332,7 +343,7 @@             , unode "link" ! [("rel","stylesheet"),("type","text/css"),("href","stylesheet.css")] $ () ]           , unode "body" $               unode navtag ! [("epub:type","toc") | epub3] $-                [ unode "h1" plainTitle+                [ unode "h1" ! [("id","toc-title")] $ plainTitle                 , unode "ol" ! [("class","toc")] $ evalState (mapM (navPointNode navXhtmlFormatter) secs) 1]           ]   let navEntry = mkEntry "nav.xhtml" navData@@ -390,7 +401,7 @@            [ unode "dc:identifier" ! [("id","BookId")] $ show uuid |                not (elt `contains` "identifier") ] ++            [ unode "dc:creator" ! [("opf:role","aut") | version == EPUB2]-                     $ a | a <- authors ] +++                     $ a | a <- authors, not (elt `contains` "creator") ] ++            [ unode "dc:date" date | not (elt `contains` "date") ] ++            [ unode "meta" ! [("property", "dcterms:modified")] $                (showDateTimeISO8601 currentTime) | version == EPUB3] ++@@ -401,35 +412,33 @@ showDateTimeISO8601 :: UTCTime -> String showDateTimeISO8601 = formatTime defaultTimeLocale "%FT%TZ" -transformInlines :: HTMLMathMethod-                 -> FilePath+transformInline  :: WriterOptions                  -> IORef [(FilePath, FilePath)] -- ^ (oldpath, newpath) images-                 -> [Inline]-                 -> IO [Inline]-transformInlines _ _ _ (Image lab (src,_) : xs)-  | isNothing (imageTypeOf src) = return $ Emph lab : xs-transformInlines _ sourceDir picsRef (Image lab (src,tit) : xs) = do-  let src' = unEscapeString src-  pics <- readIORef picsRef-  let oldsrc = sourceDir </> src'-  let ext = takeExtension src'-  newsrc <- case lookup oldsrc pics of-                  Just n  -> return n-                  Nothing -> do-                        let new = "images/img" ++ show (length pics) ++ ext-                        modifyIORef picsRef ( (oldsrc, new): )-                        return new-  return $ Image lab (newsrc, tit) : xs-transformInlines (MathML _) _ _ (x@(Math _ _) : xs) = do-  -- note: ideally we'd use a switch statement to provide a fallback-  -- but switch does not seem to be widely implemented yet, so we just-  -- provide the mathml-  let writeHtmlInline opts z = trimr $-         writeHtmlString opts $ Pandoc (Meta [] [] []) [Plain [z]]-      result = writeHtmlInline def{writerHTMLMathMethod = MathML Nothing } x-  return $ RawInline "html" result : xs-transformInlines _ _ _ xs = return xs+                 -> Inline+                 -> IO Inline+transformInline opts picsRef (Image lab (src,tit)) = do+    let src' = unEscapeString src+    pics <- readIORef picsRef+    let oldsrc = maybe src' (</> src) $ writerSourceURL opts+    let ext = takeExtension src'+    newsrc <- case lookup oldsrc pics of+                    Just n  -> return n+                    Nothing -> do+                          let new = "images/img" ++ show (length pics) ++ ext+                          modifyIORef picsRef ( (oldsrc, new): )+                          return new+    return $ Image lab (newsrc, tit)+transformInline opts _ (x@(Math _ _))+  | WebTeX _ <- writerHTMLMathMethod opts = do+    raw <- makeSelfContained Nothing $ writeHtmlInline opts x+    return $ RawInline (Format "html") raw+transformInline _ _ x = return x +writeHtmlInline :: WriterOptions -> Inline -> String+writeHtmlInline opts z = trimr $+  writeHtmlString opts{ writerStandalone = False }+    $ Pandoc nullMeta [Plain [z]]+ (!) :: Node t => (t -> Element) -> [(String, String)] -> t -> Element (!) f attrs n = add_attrs (map (\(k,v) -> Attr (unqual k) v) attrs) (f n) @@ -504,7 +513,7 @@ -- Replace internal link references using the table produced -- by correlateRefs. replaceRefs :: [(String,String)] -> [Block] -> [Block]-replaceRefs refTable = bottomUp replaceOneRef+replaceRefs refTable = walk replaceOneRef   where replaceOneRef x@(Link lab ('#':xs,tit)) =           case lookup xs refTable of                 Just url -> Link lab (url,tit)
src/Text/Pandoc/Writers/FB2.hs view
@@ -45,7 +45,7 @@ import Text.Pandoc.Definition import Text.Pandoc.Options (WriterOptions(..), HTMLMathMethod(..), def) import Text.Pandoc.Shared (orderedListMarkers)-import Text.Pandoc.Generic (bottomUp)+import Text.Pandoc.Walk  -- | Data to be written at the end of the document: -- (foot)notes, URLs, references, images.@@ -324,6 +324,7 @@                              map (el "p" . el "code") . lines $ s blockToXml (RawBlock _ s) = return . spaceBeforeAfter .                             map (el "p" . el "code") . lines $ s+blockToXml (Div _ bs) = cMapM blockToXml bs blockToXml (BlockQuote bs) = liftM (list . el "cite") $ cMapM blockToXml bs blockToXml (OrderedList a bss) = do     state <- get@@ -422,15 +423,20 @@   indentLines ins = let lns = split isLineBreak ins :: [[Inline]]                     in  intercalate [LineBreak] $ map ((Str spacer):) lns +capitalize :: Inline -> Inline+capitalize (Str xs) = Str $ map toUpper xs+capitalize x = x+ -- | Convert a Pandoc's Inline element to FictionBook XML representation. toXml :: Inline -> FBM [Content] toXml (Str s) = return [txt s]+toXml (Span _ ils) = cMapM toXml ils toXml (Emph ss) = list `liftM` wrap "emphasis" ss toXml (Strong ss) = list `liftM` wrap "strong" ss toXml (Strikeout ss) = list `liftM` wrap "strikethrough" ss toXml (Superscript ss) = list `liftM` wrap "sup" ss toXml (Subscript ss) = list `liftM` wrap "sub" ss-toXml (SmallCaps ss) = cMapM toXml $ bottomUp (map toUpper) ss+toXml (SmallCaps ss) = cMapM toXml $ walk capitalize ss toXml (Quoted SingleQuote ss) = do  -- FIXME: should be language-specific   inner <- cMapM toXml ss   return $ [txt "‘"] ++ inner ++ [txt "’"]@@ -560,6 +566,7 @@ plain :: Inline -> String plain (Str s) = s plain (Emph ss) = concat (map plain ss)+plain (Span _ ss) = concat (map plain ss) plain (Strong ss) = concat (map plain ss) plain (Strikeout ss) = concat (map plain ss) plain (Superscript ss) = concat (map plain ss)
src/Text/Pandoc/Writers/HTML.hs view
@@ -32,14 +32,14 @@ module Text.Pandoc.Writers.HTML ( writeHtml , writeHtmlString ) where import Text.Pandoc.Definition import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Options import Text.Pandoc.Templates-import Text.Pandoc.Generic import Text.Pandoc.Readers.TeXMath import Text.Pandoc.Slides import Text.Pandoc.Highlighting ( highlight, styleToCss,                                   formatHtmlInline, formatHtmlBlock )-import Text.Pandoc.XML (stripTags, fromEntities)+import Text.Pandoc.XML (fromEntities, escapeStringForXML) import Network.HTTP ( urlEncode ) import Numeric ( showHex ) import Data.Char ( ord, toLower )@@ -47,12 +47,8 @@ import Data.String ( fromString ) import Data.Maybe ( catMaybes ) import Control.Monad.State-#if MIN_VERSION_blaze_html(0,5,0) import Text.Blaze.Html hiding(contents) import Text.Blaze.Internal(preEscapedString)-#else-import Text.Blaze-#endif #if MIN_VERSION_blaze_html(0,5,1) import qualified Text.Blaze.XHtml5 as H5 #else@@ -65,6 +61,7 @@ import Text.XML.Light.Output import System.FilePath (takeExtension) import Data.Monoid+import Data.Aeson (Value)  data WriterState = WriterState     { stNotes            :: [Html]  -- ^ List of notes@@ -96,39 +93,31 @@ -- | Convert Pandoc document to Html string. writeHtmlString :: WriterOptions -> Pandoc -> String writeHtmlString opts d =-  let (tit, auths, authsMeta, date, toc, body', newvars) = evalState (pandocToHtml opts d)-                                                             defaultWriterState+  let (body, context) = evalState (pandocToHtml opts d) defaultWriterState   in  if writerStandalone opts-         then inTemplate opts tit auths authsMeta date toc body' newvars-         else renderHtml body'+         then inTemplate opts context body+         else renderHtml body  -- | Convert Pandoc document to Html structure. writeHtml :: WriterOptions -> Pandoc -> Html writeHtml opts d =-  let (tit, auths, authsMeta, date, toc, body', newvars) = evalState (pandocToHtml opts d)-                                                            defaultWriterState+  let (body, context) = evalState (pandocToHtml opts d) defaultWriterState   in  if writerStandalone opts-         then inTemplate opts tit auths authsMeta date toc body' newvars-         else body'+         then inTemplate opts context body+         else body  -- result is (title, authors, date, toc, body, new variables) pandocToHtml :: WriterOptions              -> Pandoc-             -> State WriterState (Html, [Html], [Html], Html, Maybe Html, Html, [(String,String)])-pandocToHtml opts (Pandoc (Meta title' authors' date') blocks) = do-  let standalone = writerStandalone opts-  tit <- if standalone-            then inlineListToHtml opts title'-            else return mempty-  auths <- if standalone-              then mapM (inlineListToHtml opts) authors'-              else return []-  authsMeta <- if standalone-                  then mapM (inlineListToHtml opts . prepForMeta) authors'-                  else return []-  date <- if standalone-             then inlineListToHtml opts date'-             else return mempty+             -> State WriterState (Html, Value)+pandocToHtml opts (Pandoc meta blocks) = do+  metadata <- metaToJSON opts+              (fmap renderHtml . blockListToHtml opts)+              (fmap renderHtml . inlineListToHtml opts)+              meta+  let stringifyHTML = escapeStringForXML . stringify+  let authsMeta = map stringifyHTML $ docAuthors meta+  let dateMeta  = stringifyHTML $ docDate meta   let slideLevel = maybe (getSlideLevel blocks) id $ writerSlideLevel opts   let sects = hierarchicalize $               if writerSlideVariant opts == NoSlides@@ -155,7 +144,8 @@                            MathJax url ->                               H.script ! A.src (toValue url)                                        ! A.type_ "text/javascript"-                                       $ mempty+                                       $ preEscapedString+                                         "MathJax.Hub.Queue([\"Typeset\",MathJax.Hub]);"                            JsMath (Just url) ->                               H.script ! A.src (toValue url)                                        ! A.type_ "text/javascript"@@ -168,54 +158,36 @@                                              | otherwise -> mempty                                       Nothing -> mempty                 else mempty-  let newvars = [("highlighting-css",-                   styleToCss $ writerHighlightStyle opts) |-                   stHighlighting st] ++-                [("math", renderHtml math) | stMath st] ++-                [("quotes", "yes") | stQuotes st]-  return (tit, auths, authsMeta, date, toc, thebody, newvars)---- | Prepare author for meta tag, converting notes into--- bracketed text and removing links.-prepForMeta :: [Inline] -> [Inline]-prepForMeta = bottomUp (concatMap fixInline)-  where fixInline (Note [Para xs])  = [Str " ["] ++ xs ++ [Str "]"]-        fixInline (Note [Plain xs]) = [Str " ["] ++ xs ++ [Str "]"]-        fixInline (Link lab _)      = lab-        fixInline (Image lab _)     = lab-        fixInline x                 = [x]+  let context =   (if stHighlighting st+                      then defField "highlighting-css"+                             (styleToCss $ writerHighlightStyle opts)+                      else id) $+                  (if stMath st+                      then defField "math" (renderHtml math)+                      else id) $+                  defField "quotes" (stQuotes st) $+                  maybe id (defField "toc" . renderHtml) toc $+                  defField "author-meta" authsMeta $+                  maybe id (defField "date-meta") (normalizeDate dateMeta) $+                  defField "pagetitle" (stringifyHTML $ docTitle meta) $+                  defField "idprefix" (writerIdentifierPrefix opts) $+                  -- these should maybe be set in pandoc.hs+                  defField "slidy-url"+                    ("http://www.w3.org/Talks/Tools/Slidy2" :: String) $+                  defField "slideous-url" ("slideous" :: String) $+                  defField "revealjs-url" ("reveal.js" :: String) $+                  defField "s5-url" ("s5/default" :: String) $+                  defField "html5" (writerHtml5 opts) $+                  metadata+  return (thebody, context)  inTemplate :: TemplateTarget a            => WriterOptions-           -> Html-           -> [Html]-           -> [Html]-           -> Html-           -> Maybe Html+           -> Value            -> Html-           -> [(String,String)]            -> a-inTemplate opts tit auths authsMeta date toc body' newvars =-  let title'      = renderHtml tit-      date'       = renderHtml date-      dateMeta    = maybe [] (\x -> [("date-meta",x)]) $ normalizeDate date'-      variables   = writerVariables opts ++ newvars-      context     = variables ++ dateMeta ++-                    [ ("body", dropWhile (=='\n') $ renderHtml body')-                    , ("pagetitle", stripTags title')-                    , ("title", title')-                    , ("date", date')-                    , ("idprefix", writerIdentifierPrefix opts)-                    , ("slidy-url", "http://www.w3.org/Talks/Tools/Slidy2")-                    , ("slideous-url", "slideous")-                    , ("s5-url", "s5/default") ] ++-                    [ ("html5","true") | writerHtml5 opts ] ++-                    (case toc of-                         Just t  -> [ ("toc", renderHtml t)]-                         Nothing -> [])  ++-                    [ ("author", renderHtml a) | a <- auths ] ++-                    [ ("author-meta", stripTags $ renderHtml a) | a <- authsMeta ]-  in  renderTemplate context $ writerTemplate opts+inTemplate opts context body = renderTemplate' (writerTemplate opts)+                             $ defField "body" (renderHtml body) context  -- | Like Text.XHtml's identifier, but adds the writerIdentifierPrefix prefixedId :: WriterOptions -> String -> Attribute@@ -224,14 +196,23 @@     ""       -> mempty     _        -> A.id $ toValue $ writerIdentifierPrefix opts ++ s --- | Replacement for Text.XHtml's unordList.-unordList :: WriterOptions -> ([Html] -> Html)-unordList opts items = H.ul $ mconcat $ toListItems opts items+toList :: (Html -> Html) -> WriterOptions -> ([Html] -> Html)+toList listop opts items = do+    if (writerIncremental opts)+       then if (writerSlideVariant opts /= RevealJsSlides)+               then (listop $ mconcat items) ! A.class_ "incremental"+               else listop $ mconcat $ map (! A.class_ "fragment") items+       else listop $ mconcat items --- | Replacement for Text.XHtml's ordList.-ordList :: WriterOptions -> ([Html] -> Html)-ordList opts items = H.ol $ mconcat $ toListItems opts items+unordList :: WriterOptions -> [Html] -> Html+unordList opts = toList H.ul opts . toListItems opts +ordList :: WriterOptions -> [Html] -> Html+ordList opts = toList H.ol opts . toListItems opts++defList :: WriterOptions -> [Html] -> Html+defList opts items = toList H.dl opts (items ++ [nl opts])+ -- | Construct table of contents from list of elements. tableOfContents :: WriterOptions -> [Element] -> State WriterState (Maybe Html) tableOfContents _ [] = return Nothing@@ -263,10 +244,13 @@   let subList = if null subHeads                    then mempty                    else unordList opts subHeads+  -- in reveal.js, we need #/apples, not #apples:+  let revealSlash = ['/' | writerSlideVariant opts == RevealJsSlides]   return $ Just          $ if null id'               then (H.a $ toHtml txt) >> subList-              else (H.a ! A.href (toValue $ "#" ++ writerIdentifierPrefix opts ++ id')+              else (H.a ! A.href (toValue $ "#" ++ revealSlash +++                    writerIdentifierPrefix opts ++ id')                        $ toHtml txt) >> subList elementToListItem _ _ = return Nothing @@ -285,11 +269,24 @@                 else blockToHtml opts (Header level' (id',classes,keyvals) title')   let isSec (Sec _ _ _ _ _) = True       isSec (Blk _)         = False+  let isPause (Blk x) = x == Para [Str ".",Space,Str ".",Space,Str "."]+      isPause _       = False+  let fragmentClass = case writerSlideVariant opts of+                           RevealJsSlides  -> "fragment"+                           _               -> "incremental"+  let inDiv xs = Blk (RawBlock (Format "html") ("<div class=\""+                       ++ fragmentClass ++ "\">")) :+                   (xs ++ [Blk (RawBlock (Format "html") "</div>")])   innerContents <- mapM (elementToHtml slideLevel opts)                    $ if titleSlide                         -- title slides have no content of their own                         then filter isSec elements-                        else elements+                        else if slide+                                then case splitBy isPause elements of+                                          []   -> []+                                          [x]  -> x+                                          xs   -> concatMap inDiv xs+                                else elements   let inNl x = mconcat $ nl opts : intersperse (nl opts) x ++ [nl opts]   let classes' = ["titleslide" | titleSlide] ++ ["slide" | slide] ++                   ["section" | (slide || writerSectionDivs opts) &&@@ -301,8 +298,10 @@                     else H.div   let attr = (id',classes',keyvals)   return $ if titleSlide-              then mconcat $-                   (addAttrs opts attr $ secttag $ header') : innerContents+              then (if writerSlideVariant opts == RevealJsSlides+                       then H5.section+                       else id) $ mconcat $+                       (addAttrs opts attr $ secttag $ header') : innerContents               else if writerSectionDivs opts || slide                    then addAttrs opts attr                         $ secttag $ inNl $ header' : innerContents@@ -327,11 +326,13 @@  -- | Parse a mailto link; return Just (name, domain) or Nothing. parseMailto :: String -> Maybe (String, String)-parseMailto ('m':'a':'i':'l':'t':'o':':':addr) =-  let (name', rest) = span (/='@') addr-      domain = drop 1 rest-  in  Just (name', domain)-parseMailto _ = Nothing+parseMailto s = do+  case break (==':') s of+       (xs,':':addr) | map toLower xs == "mailto" -> do+         let (name', rest) = span (/='@') addr+         let domain = drop 1 rest+         return (name', domain)+       _ -> fail "not a mailto: URL"  -- | Obfuscate a "mailto:" link. obfuscateLink :: WriterOptions -> String -> String -> Html@@ -339,7 +340,7 @@   H.a ! A.href (toValue s) $ toHtml txt obfuscateLink opts txt s =   let meth = writerEmailObfuscation opts-      s' = map toLower s+      s' = map toLower (take 7 s) ++ drop 7 s   in  case parseMailto s' of         (Just (name', domain)) ->           let domain'  = substitute "." " dot " domain@@ -417,8 +418,12 @@ blockToHtml opts (Para lst) = do   contents <- inlineListToHtml opts lst   return $ H.p contents-blockToHtml _ (RawBlock "html" str) = return $ preEscapedString str-blockToHtml _ (RawBlock _ _) = return mempty+blockToHtml opts (Div attr bs) = do+  contents <- blockListToHtml opts bs+  return $ addAttrs opts attr $ H.div $ nl opts >> contents >> nl opts+blockToHtml _ (RawBlock f str)+  | f == Format "html" = return $ preEscapedString str+  | otherwise          = return mempty blockToHtml opts (HorizontalRule) = return $ if writerHtml5 opts then H5.hr else H.hr blockToHtml opts (CodeBlock (id',classes,keyvals) rawCode) = do   let tolhs = isEnabled Ext_literate_haskell opts &&@@ -432,7 +437,10 @@       adjCode  = if tolhs                     then unlines . map ("> " ++) . lines $ rawCode                     else rawCode-  case highlight formatHtmlBlock (id',classes',keyvals) adjCode of+      hlCode   = if writerHighlight opts -- check highlighting options+                    then highlight formatHtmlBlock (id',classes',keyvals) adjCode+                    else Nothing+  case hlCode of          Nothing -> return $ addAttrs opts (id',classes,keyvals)                            $ H.pre $ H.code $ toHtml adjCode          Just  h -> modify (\st -> st{ stHighlighting = True }) >>@@ -449,6 +457,9 @@              [OrderedList attribs lst] ->                                   blockToHtml (opts {writerIncremental = inc})                                   (OrderedList attribs lst)+             [DefinitionList lst] ->+                                  blockToHtml (opts {writerIncremental = inc})+                                  (DefinitionList lst)              _                 -> do contents <- blockListToHtml opts blocks                                      return $ H.blockquote                                             $ nl opts >> contents >> nl opts@@ -462,9 +473,12 @@                      then (H.span ! A.class_ "header-section-number" $ toHtml                           $ showSecNum secnum) >> strToHtml " " >> contents                      else contents+  let revealSlash = ['/' | writerSlideVariant opts == RevealJsSlides]   let contents''  = if writerTableOfContents opts && not (null ident)                        then H.a ! A.href (toValue $-                              '#' : writerIdentifierPrefix opts ++ ident) $ contents'+                              '#' : revealSlash +++                                    writerIdentifierPrefix opts +++                                    ident) $ contents'                        else contents'   return $ case level of               1 -> H.h1 contents''@@ -476,18 +490,11 @@               _ -> H.p contents'' blockToHtml opts (BulletList lst) = do   contents <- mapM (blockListToHtml opts) lst-  let lst' = unordList opts contents-  let lst'' = if writerIncremental opts-                 then lst' ! A.class_ "incremental"-                 else lst'-  return lst''+  return $ unordList opts contents blockToHtml opts (OrderedList (startnum, numstyle, _) lst) = do   contents <- mapM (blockListToHtml opts) lst   let numstyle' = camelCaseToHyphenated $ show numstyle-  let attribs = (if writerIncremental opts-                   then [A.class_ "incremental"]-                   else []) ++-                (if startnum /= 1+  let attribs = (if startnum /= 1                    then [A.start $ toValue startnum]                    else []) ++                 (if numstyle /= DefaultStyle@@ -513,11 +520,7 @@                                     blockListToHtml opts) defs                      return $ mconcat $ nl opts : term' : nl opts :                                         intersperse (nl opts) defs') lst-  let lst' = H.dl $ mconcat contents >> nl opts-  let lst'' = if writerIncremental opts-                 then lst' ! A.class_ "incremental"-                 else lst'-  return lst''+  return $ defList opts contents blockToHtml opts (Table capt aligns widths headers rows') = do   captionDoc <- if null capt                    then return mempty@@ -587,8 +590,7 @@  blockListToHtml :: WriterOptions -> [Block] -> State WriterState Html blockListToHtml opts lst =-  mapM (blockToHtml opts) lst >>=-  return . mconcat . intersperse (nl opts)+  fmap (mconcat . intersperse (nl opts)) $ mapM (blockToHtml opts) lst  -- | Convert list of Pandoc inline elements to HTML. inlineListToHtml :: WriterOptions -> [Inline] -> State WriterState Html@@ -602,16 +604,21 @@     (Str str)        -> return $ strToHtml str     (Space)          -> return $ strToHtml " "     (LineBreak)      -> return $ if writerHtml5 opts then H5.br else H.br+    (Span attr ils)  -> inlineListToHtml opts ils >>=+                           return . addAttrs opts attr . H.span     (Emph lst)       -> inlineListToHtml opts lst >>= return . H.em     (Strong lst)     -> inlineListToHtml opts lst >>= return . H.strong-    (Code attr str)  -> case highlight formatHtmlInline attr str of+    (Code attr str)  -> case hlCode of                              Nothing -> return                                         $ addAttrs opts attr                                         $ H.code $ strToHtml str                              Just  h -> do                                modify $ \st -> st{ stHighlighting = True }                                return $ addAttrs opts (id',[],keyvals) h-                                where (id',_,keyvals) = attr+                        where (id',_,keyvals) = attr+                              hlCode = if writerHighlight opts+                                          then highlight formatHtmlInline attr str+                                          else Nothing     (Strikeout lst)  -> inlineListToHtml opts lst >>=                         return . H.del     (SmallCaps lst)   -> inlineListToHtml opts lst >>=@@ -682,12 +689,14 @@                                   return  $ case t of                                              InlineMath  -> m                                              DisplayMath -> brtag >> m >> brtag )-    (RawInline "latex" str) -> case writerHTMLMathMethod opts of+    (RawInline f str)+      | f == Format "latex" ->+                          case writerHTMLMathMethod opts of                                LaTeXMathML _ -> do modify (\st -> st {stMath = True})                                                    return $ toHtml str                                _             -> return mempty-    (RawInline "html" str) -> return $ preEscapedString str-    (RawInline _ _) -> return mempty+      | f == Format "html" -> return $ preEscapedString str+      | otherwise          -> return mempty     (Link [Str str] (s,_)) | "mailto:" `isPrefixOf` s &&                              s == escapeURI ("mailto" ++ str) ->                         -- autolink@@ -697,7 +706,11 @@                         return $ obfuscateLink opts (renderHtml linkText) s     (Link txt (s,tit)) -> do                         linkText <- inlineListToHtml opts txt-                        let link = H.a ! A.href (toValue s) $ linkText+                        let s' = case s of+                                      '#':xs | writerSlideVariant opts ==+                                            RevealJsSlides -> '#':'/':xs+                                      _ -> s+                        let link = H.a ! A.href (toValue s') $ linkText                         return $ if null tit                                     then link                                     else link ! A.title (toValue tit)@@ -728,7 +741,10 @@                         htmlContents <- blockListToNote opts ref contents                         -- push contents onto front of notes                         put $ st {stNotes = (htmlContents:notes)}+                        let revealSlash = ['/' | writerSlideVariant opts+                                                 == RevealJsSlides]                         let link = H.a ! A.href (toValue $ "#" +++                                         revealSlash ++                                          writerIdentifierPrefix opts ++ "fn" ++ ref)                                        ! A.class_ "footnoteRef"                                        ! prefixedId opts ("fnref" ++ ref)
src/Text/Pandoc/Writers/LaTeX.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-} {- Copyright (C) 2006-2010 John MacFarlane <jgm@berkeley.edu> @@ -30,8 +30,9 @@ -} module Text.Pandoc.Writers.LaTeX ( writeLaTeX ) where import Text.Pandoc.Definition-import Text.Pandoc.Generic+import Text.Pandoc.Walk import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Options import Text.Pandoc.Templates import Text.Printf ( printf )@@ -42,7 +43,6 @@ import Control.Applicative ((<|>)) import Control.Monad.State import Text.Pandoc.Pretty-import System.FilePath (dropExtension) import Text.Pandoc.Slides import Text.Pandoc.Highlighting (highlight, styleToLaTeX,                                  formatLaTeXInline, formatLaTeXBlock,@@ -50,8 +50,6 @@  data WriterState =   WriterState { stInNote        :: Bool          -- true if we're in a note-              , stInTable       :: Bool          -- true if we're in a table-              , stTableNotes    :: [Doc]         -- List of notes in current table               , stOLLevel       :: Int           -- level of ordered list nesting               , stOptions       :: WriterOptions -- writer options, so they don't have to be parameter               , stVerbInNote    :: Bool          -- true if document has verbatim text in note@@ -72,8 +70,8 @@ writeLaTeX :: WriterOptions -> Pandoc -> String writeLaTeX options document =   evalState (pandocToLaTeX options document) $-  WriterState { stInNote = False, stInTable = False,-                stTableNotes = [], stOLLevel = 1, stOptions = options,+  WriterState { stInNote = False,+                stOLLevel = 1, stOptions = options,                 stVerbInNote = False,                 stTable = False, stStrikeout = False,                 stUrl = False, stGraphics = False,@@ -83,11 +81,11 @@                 stInternalLinks = [], stUsesEuro = False }  pandocToLaTeX :: WriterOptions -> Pandoc -> State WriterState String-pandocToLaTeX options (Pandoc (Meta title authors date) blocks) = do+pandocToLaTeX options (Pandoc meta blocks) = do   -- see if there are internal links   let isInternalLink (Link _ ('#':xs,_))  = [xs]       isInternalLink _                    = []-  modify $ \s -> s{ stInternalLinks = queryWith isInternalLink blocks }+  modify $ \s -> s{ stInternalLinks = query isInternalLink blocks }   let template = writerTemplate options   -- set stBook depending on documentclass   let bookClasses = ["memoir","book","report","scrreprt","scrbook"]@@ -105,9 +103,10 @@   let colwidth = if writerWrapText options                     then Just $ writerColumns options                     else Nothing-  titletext <- liftM (render colwidth) $ inlineListToLaTeX title-  authorsText <- mapM (liftM (render colwidth) . inlineListToLaTeX) authors-  dateText <- liftM (render colwidth) $ inlineListToLaTeX date+  metadata <- metaToJSON options+              (fmap (render colwidth) . blockListToLaTeX)+              (fmap (render colwidth) . inlineListToLaTeX)+              meta   let (blocks', lastHeader) = if writerCiteMethod options == Citeproc then                                 (blocks, [])                               else case last blocks of@@ -117,55 +116,48 @@                  then toSlides blocks'                  else return blocks'   body <- mapM (elementToLaTeX options) $ hierarchicalize blocks''-  biblioTitle <- liftM (render colwidth) $ inlineListToLaTeX lastHeader+  (biblioTitle :: String) <- liftM (render colwidth) $ inlineListToLaTeX lastHeader   let main = render colwidth $ vsep body   st <- get-  let biblioFiles = intercalate "," $ map dropExtension $  writerBiblioFiles options-      citecontext = case writerCiteMethod options of-                         Natbib   -> [ ("biblio-files", biblioFiles)-                                     , ("biblio-title", biblioTitle)-                                     , ("natbib", "yes")-                                     ]-                         Biblatex -> [ ("biblio-files", biblioFiles)-                                     , ("biblio-title", biblioTitle)-                                     , ("biblatex", "yes")-                                     ]-                         _      -> []-      context  = writerVariables options ++-                 [ ("toc", if writerTableOfContents options then "yes" else "")-                 , ("toc-depth", show (writerTOCDepth options --                                       if writerChapters options-                                          then 1-                                          else 0))-                 , ("body", main)-                 , ("title", titletext)-                 , ("title-meta", stringify title)-                 , ("author-meta", intercalate "; " $ map stringify authors)-                 , ("date", dateText)-                 , ("documentclass", if writerBeamer options-                                        then "beamer"-                                        else if writerChapters options-                                                then "book"-                                                else "article") ] ++-                 [ ("author", a) | a <- authorsText ] ++-                 [ ("verbatim-in-note", "yes") | stVerbInNote st ] ++-                 [ ("tables", "yes") | stTable st ] ++-                 [ ("strikeout", "yes") | stStrikeout st ] ++-                 [ ("url", "yes") | stUrl st ] ++-                 [ ("numbersections", "yes") | writerNumberSections options ] ++-                 [ ("lhs", "yes") | stLHS st ] ++-                 [ ("graphics", "yes") | stGraphics st ] ++-                 [ ("book-class", "yes") | stBook st] ++-                 [ ("euro", "yes") | stUsesEuro st] ++-                 [ ("listings", "yes") | writerListings options || stLHS st ] ++-                 [ ("beamer", "yes") | writerBeamer options ] ++-                 [ ("mainlang", maybe "" (reverse . takeWhile (/=',') . reverse)-                                (lookup "lang" $ writerVariables options)) ] ++-                 [ ("highlighting-macros", styleToLaTeX-                       $ writerHighlightStyle options ) | stHighlighting st ] ++-                 citecontext+  let context  =  defField "toc" (writerTableOfContents options) $+                  defField "toc-depth" (show (writerTOCDepth options -+                                              if writerChapters options+                                                 then 1+                                                 else 0)) $+                  defField "body" main $+                  defField "title-meta" (stringify $ docTitle meta) $+                  defField "author-meta" (intercalate "; " $ map stringify $ docAuthors meta) $+                  defField "documentclass" (if writerBeamer options+                                               then ("beamer" :: String)+                                               else if writerChapters options+                                                    then "book"+                                                    else "article") $+                  defField "verbatim-in-note" (stVerbInNote st) $+                  defField "tables" (stTable st) $+                  defField "strikeout" (stStrikeout st) $+                  defField "url" (stUrl st) $+                  defField "numbersections" (writerNumberSections options) $+                  defField "lhs" (stLHS st) $+                  defField "graphics" (stGraphics st) $+                  defField "book-class" (stBook st) $+                  defField "euro" (stUsesEuro st) $+                  defField "listings" (writerListings options || stLHS st) $+                  defField "beamer" (writerBeamer options) $+                  defField "mainlang" (maybe "" (reverse . takeWhile (/=',') . reverse)+                                (lookup "lang" $ writerVariables options)) $+                  (if stHighlighting st+                      then defField "highlighting-macros" (styleToLaTeX+                                $ writerHighlightStyle options )+                      else id) $+                  (case writerCiteMethod options of+                         Natbib   -> defField "biblio-title" biblioTitle .+                                     defField "natbib" True+                         Biblatex -> defField "biblio-title" biblioTitle .+                                     defField "biblatex" True+                         _        -> id) $+                  metadata   return $ if writerStandalone options-              then renderTemplate context template+              then renderTemplate' template context               else main  -- | Convert Elements to LaTeX@@ -176,13 +168,19 @@   innerContents <- mapM (elementToLaTeX opts) elements   return $ vsep (header' : innerContents) +data StringContext = TextString+                   | URLString+                   | CodeString+                   deriving (Eq)+ -- escape things as needed for LaTeX-stringToLaTeX :: Bool -> String -> State WriterState String+stringToLaTeX :: StringContext -> String -> State WriterState String stringToLaTeX  _     []     = return ""-stringToLaTeX  isUrl (x:xs) = do+stringToLaTeX  ctx (x:xs) = do   opts <- gets stOptions-  rest <- stringToLaTeX isUrl xs-  let ligatures = writerTeXLigatures opts+  rest <- stringToLaTeX ctx xs+  let ligatures = writerTeXLigatures opts && not (ctx == CodeString)+  let isUrl = ctx == URLString   when (x == '€') $      modify $ \st -> st{ stUsesEuro = True }   return $@@ -200,7 +198,8 @@                    _       -> '-' : rest        '~' | not isUrl -> "\\textasciitilde{}" ++ rest        '^' -> "\\^{}" ++ rest-       '\\' -> "\\textbackslash{}" ++ rest+       '\\'| isUrl     -> '/' : rest  -- NB. / works as path sep even on Windows+           | otherwise -> "\\textbackslash{}" ++ rest        '|' -> "\\textbar{}" ++ rest        '<' -> "\\textless{}" ++ rest        '>' -> "\\textgreater{}" ++ rest@@ -216,13 +215,6 @@        '\x2013' | ligatures -> "--" ++ rest        _        -> x : rest --- This is needed because | in math mode interacts badly with--- highlighting-kate, which redefines | as a short verb command.-escapeMath :: String -> String-escapeMath ('|':xs) = "\\vert " ++ escapeMath xs-escapeMath (x:xs)   = x : escapeMath xs-escapeMath []       = ""- -- | Puts contents into LaTeX command. inCmd :: String -> Doc -> Doc inCmd cmd contents = char '\\' <> text cmd <> braces contents@@ -236,7 +228,7 @@  elementToBeamer :: Int -> Element -> State WriterState [Block] elementToBeamer _slideLevel (Blk b) = return [b]-elementToBeamer slideLevel  (Sec lvl _num (ident,classes,_) tit elts)+elementToBeamer slideLevel  (Sec lvl _num (ident,classes,kvs) tit elts)   | lvl >  slideLevel = do       bs <- concat `fmap` mapM (elementToBeamer slideLevel) elts       return $ Para ( RawInline "latex" "\\begin{block}{"@@ -244,7 +236,7 @@              : bs ++ [RawBlock "latex" "\\end{block}"]   | lvl <  slideLevel = do       bs <- concat `fmap` mapM (elementToBeamer slideLevel) elts-      return $ (Header lvl (ident,classes,[]) tit) : bs+      return $ (Header lvl (ident,classes,kvs) tit) : bs   | otherwise = do -- lvl == slideLevel       -- note: [fragile] is required or verbatim breaks       let hasCodeBlock (CodeBlock _ _) = [True]@@ -252,17 +244,20 @@       let hasCode (Code _ _) = [True]           hasCode _          = []       opts <- gets stOptions-      let fragile = if not $ null $ queryWith hasCodeBlock elts +++      let fragile = not $ null $ query hasCodeBlock elts ++                                      if writerListings opts-                                        then queryWith hasCode elts+                                        then query hasCode elts                                         else []-                       then "[fragile]"-                       else ""-      let slideStart = Para $ RawInline "latex" ("\\begin{frame}" ++ fragile) :+      let allowframebreaks = "allowframebreaks" `elem` classes+      let optionslist = ["fragile" | fragile] +++                        ["allowframebreaks" | allowframebreaks]+      let options = if null optionslist+                       then ""+                       else "[" ++ intercalate "," optionslist ++ "]"+      let slideStart = Para $ RawInline "latex" ("\\begin{frame}" ++ options) :                 if tit == [Str "\0"]  -- marker for hrule                    then []-                   else (RawInline "latex" "\\frametitle{") : tit ++-                        [RawInline "latex" "}"]+                   else (RawInline "latex" "{") : tit ++ [RawInline "latex" "}"]       let slideEnd = RawBlock "latex" "\\end{frame}"       -- now carve up slide into blocks if there are sections inside       bs <- concat `fmap` mapM (elementToBeamer slideLevel) elts@@ -283,6 +278,7 @@ blockToLaTeX :: Block     -- ^ Block to convert              -> State WriterState Doc blockToLaTeX Null = return empty+blockToLaTeX (Div _ bs) = blockListToLaTeX bs blockToLaTeX (Plain lst) =   inlineListToLaTeX $ dropWhile isLineBreakOrSpace lst -- title beginning with fig: indicates that the image is a figure@@ -293,6 +289,12 @@   img <- inlineToLaTeX (Image txt (src,tit))   return $ "\\begin{figure}[htbp]" $$ "\\centering" $$ img $$            capt $$ "\\end{figure}"+-- . . . indicates pause in beamer slides+blockToLaTeX (Para [Str ".",Space,Str ".",Space,Str "."]) = do+  beamer <- writerBeamer `fmap` gets stOptions+  if beamer+     then blockToLaTeX (RawBlock "latex" "\\pause")+     else inlineListToLaTeX [Str ".",Space,Str ".",Space,Str "."] blockToLaTeX (Para lst) =   inlineListToLaTeX $ dropWhile isLineBreakOrSpace lst blockToLaTeX (BlockQuote lst) = do@@ -307,7 +309,7 @@        _ -> do          contents <- blockListToLaTeX lst          return $ "\\begin{quote}" $$ contents $$ "\\end{quote}"-blockToLaTeX (CodeBlock (_,classes,keyvalAttr) str) = do+blockToLaTeX (CodeBlock (identifier,classes,keyvalAttr) str) = do   opts <- gets stOptions   case () of      _ | isEnabled Ext_literate_haskell opts && "haskell" `elem` classes &&@@ -338,7 +340,11 @@                              [ (if key == "startFrom"                                    then "firstnumber"                                    else key) ++ "=" ++ attr |-                                   (key,attr) <- keyvalAttr ]+                                   (key,attr) <- keyvalAttr ] +++                             (if identifier == ""+                                   then []+                                   else [ "label=" ++ identifier ])+                         else []                printParams                    | null params = empty@@ -350,8 +356,10 @@                   Nothing -> rawCodeBlock                   Just  h -> modify (\st -> st{ stHighlighting = True }) >>                              return (flush $ text h)-blockToLaTeX (RawBlock "latex" x) = return $ text x-blockToLaTeX (RawBlock _ _) = return empty+blockToLaTeX (RawBlock f x)+  | f == Format "latex" || f == Format "tex"+                        = return $ text x+  | otherwise           = return empty blockToLaTeX (BulletList []) = return empty  -- otherwise latex error blockToLaTeX (BulletList lst) = do   incremental <- gets stIncremental@@ -416,7 +424,6 @@ blockToLaTeX (Header level (id',classes,_) lst) =   sectionHeader ("unnumbered" `elem` classes) id' level lst blockToLaTeX (Table caption aligns widths heads rows) = do-  modify $ \s -> s{ stInTable = True, stTableNotes = [] }   headers <- if all null heads                 then return empty                 else ($$ "\\hline\\noalign{\\medskip}") `fmap`@@ -427,11 +434,8 @@                 else text "\\noalign{\\medskip}"                      $$ text "\\caption" <> braces captionText   rows' <- mapM (tableRowToLaTeX False aligns widths) rows-  tableNotes <- liftM (reverse . stTableNotes) get-  let toNote x = "\\footnotetext" <> braces (nest 2 x)-  let notes = vcat $ map toNote tableNotes   let colDescriptors = text $ concat $ map toColDescriptor aligns-  modify $ \s -> s{ stTable = True, stInTable = False, stTableNotes = [] }+  modify $ \s -> s{ stTable = True }   return $ "\\begin{longtable}[c]" <>               braces ("@{}" <> colDescriptors <> "@{}")               -- the @{} removes extra space at beginning and end@@ -440,7 +444,6 @@          $$ vcat rows'          $$ "\\hline"          $$ capt-         $$ notes          $$ "\\end{longtable}"  toColDescriptor :: Alignment -> String@@ -467,9 +470,13 @@                   AlignRight   -> "\\raggedleft"                   AlignCenter  -> "\\centering"                   AlignDefault -> "\\raggedright"+  -- scale factor compensates for extra space between columns+  -- so the whole table isn't larger than columnwidth+  let scaleFactor = 0.97 ** fromIntegral (length aligns)   let toCell 0 _ c = c       toCell w a c = "\\begin{minipage}" <> valign <>-                     braces (text (printf "%.2f\\columnwidth" w)) <>+                     braces (text (printf "%.2f\\columnwidth"+                                    (w * scaleFactor))) <>                      (halign a <> cr <> c <> cr) <> "\\end{minipage}"   let cells = zipWith3 toCell widths aligns renderedCells   return $ hsep (intersperse "&" cells) $$ "\\\\\\noalign{\\medskip}"@@ -494,28 +501,31 @@   txt <- inlineListToLaTeX lst   let noNote (Note _) = Str ""       noNote x        = x-  let lstNoNotes = bottomUp noNote lst+  let lstNoNotes = walk noNote lst+  txtNoNotes <- inlineListToLaTeX lstNoNotes   let star = if unnumbered then text "*" else empty-  -- footnotes in sections don't work unless you specify an optional-  -- argument:  \section[mysec]{mysec\footnote{blah}}-  optional <- if lstNoNotes == lst+  -- footnotes in sections don't work (except for starred variants)+  -- unless you specify an optional argument:+  -- \section[mysec]{mysec\footnote{blah}}+  optional <- if unnumbered || lstNoNotes == lst                  then return empty                  else do-                   res <- inlineListToLaTeX lstNoNotes-                   return $ char '[' <> res <> char ']'+                   return $ brackets txtNoNotes   let stuffing = star <> optional <> braces txt   book <- gets stBook   opts <- gets stOptions   let level' = if book || writerChapters opts then level - 1 else level   internalLinks <- gets stInternalLinks-  let refLabel lab = (if ref `elem` internalLinks-                         then text "\\hyperdef"+  let refLabel x = (if ref `elem` internalLinks+                       then text "\\hyperdef"                                 <> braces empty                                 <> braces (text ref)-                                <> braces (lab <> text "\\label"-                                               <> braces (text ref))-                         else lab)-  let headerWith x y = refLabel $ text x <> y+                                <> braces x+                       else x)+  let headerWith x y r = refLabel $ text x <> y <>+                             if null r+                                then empty+                                else text "\\label" <> braces (text r)   let sectionType = case level' of                           0  | writerBeamer opts -> "part"                              | otherwise -> "chapter"@@ -527,11 +537,11 @@                           _  -> ""   return $ if level' > 5               then txt-              else headerWith ('\\':sectionType) stuffing+              else headerWith ('\\':sectionType) stuffing ref                    $$ if unnumbered                          then "\\addcontentsline{toc}" <>                                 braces (text sectionType) <>-                                braces txt+                                braces txtNoNotes                          else empty  -- | Convert list of inline elements to LaTeX.@@ -558,6 +568,7 @@ -- | Convert inline element to LaTeX inlineToLaTeX :: Inline    -- ^ Inline to convert               -> State WriterState Doc+inlineToLaTeX (Span _ ils) = inlineListToLaTeX ils >>= return . braces inlineToLaTeX (Emph lst) =   inlineListToLaTeX lst >>= return . inCmd "emph" inlineToLaTeX (Strong lst) =@@ -597,7 +608,7 @@                   Just  h -> modify (\st -> st{ stHighlighting = True }) >>                              return (text h)          rawCode = liftM (text . (\s -> "\\texttt{" ++ s ++ "}"))-                          $ stringToLaTeX False str+                          $ stringToLaTeX CodeString str inlineToLaTeX (Quoted qt lst) = do   contents <- inlineListToLaTeX lst   csquotes <- liftM stCsquotes get@@ -621,28 +632,29 @@                    if writerTeXLigatures opts                       then char '`' <> inner <> char '\''                       else char '\x2018' <> inner <> char '\x2019'-inlineToLaTeX (Str str) = liftM text $ stringToLaTeX False str+inlineToLaTeX (Str str) = liftM text $ stringToLaTeX TextString str inlineToLaTeX (Math InlineMath str) =-  return $ char '$' <> text (escapeMath str) <> char '$'+  return $ char '$' <> text str <> char '$' inlineToLaTeX (Math DisplayMath str) =-  return $ "\\[" <> text (escapeMath str) <> "\\]"-inlineToLaTeX (RawInline "latex" str) = return $ text str-inlineToLaTeX (RawInline "tex" str) = return $ text str-inlineToLaTeX (RawInline _ _) = return empty+  return $ "\\[" <> text str <> "\\]"+inlineToLaTeX (RawInline f str)+  | f == Format "latex" || f == Format "tex"+                        = return $ text str+  | otherwise           = return empty inlineToLaTeX (LineBreak) = return "\\\\" inlineToLaTeX Space = return space inlineToLaTeX (Link txt ('#':ident, _)) = do   contents <- inlineListToLaTeX txt-  ident' <- stringToLaTeX True ident+  ident' <- stringToLaTeX URLString ident   return $ text "\\hyperref" <> brackets (text ident') <> braces contents inlineToLaTeX (Link txt (src, _)) =   case txt of         [Str x] | x == src ->  -- autolink              do modify $ \s -> s{ stUrl = True }-                src' <- stringToLaTeX True x+                src' <- stringToLaTeX URLString x                 return $ text $ "\\url{" ++ src' ++ "}"         _ -> do contents <- inlineListToLaTeX txt-                src' <- stringToLaTeX True src+                src' <- stringToLaTeX URLString src                 return $ text ("\\href{" ++ src' ++ "}{") <>                          contents <> char '}' inlineToLaTeX (Image _ (source, _)) = do@@ -650,21 +662,16 @@   let source' = if isAbsoluteURI source                    then source                    else unEscapeString source-  return $ "\\includegraphics" <> braces (text source')+  source'' <- stringToLaTeX URLString source'+  return $ "\\includegraphics" <> braces (text source'') inlineToLaTeX (Note contents) = do   modify (\s -> s{stInNote = True})   contents' <- blockListToLaTeX contents   modify (\s -> s {stInNote = False})-  inTable <- liftM stInTable get   let optnl = case reverse contents of                    (CodeBlock _ _ : _) -> cr                    _                   -> empty-  if inTable-     then do-       curnotes <- liftM stTableNotes get-       modify $ \s -> s{ stTableNotes = contents' : curnotes }-       return $ "\\footnotemark" <> space-     else return $ "\\footnote" <> braces (nest 2 contents' <> optnl)+  return $ "\\footnote" <> braces (nest 2 contents' <> optnl)      -- note: a \n before } needed when note ends with a Verbatim environment  citationsToNatbib :: [Citation] -> State WriterState Doc
src/Text/Pandoc/Writers/Man.hs view
@@ -32,12 +32,15 @@ import Text.Pandoc.Definition import Text.Pandoc.Templates import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Options import Text.Pandoc.Readers.TeXMath import Text.Printf ( printf ) import Data.List ( isPrefixOf, intersperse, intercalate ) import Text.Pandoc.Pretty+import Text.Pandoc.Builder (deleteMeta) import Control.Monad.State+import Data.Char ( isDigit )  type Notes = [[Block]] data WriterState = WriterState { stNotes  :: Notes@@ -49,36 +52,41 @@  -- | Return groff man representation of document. pandocToMan :: WriterOptions -> Pandoc -> State WriterState String-pandocToMan opts (Pandoc (Meta title authors date) blocks) = do-  titleText <- inlineListToMan opts title-  authors' <- mapM (inlineListToMan opts) authors-  date' <- inlineListToMan opts date+pandocToMan opts (Pandoc meta blocks) = do   let colwidth = if writerWrapText opts                     then Just $ writerColumns opts                     else Nothing   let render' = render colwidth-  let (cmdName, rest) = break (== ' ') $ render' titleText-  let (title', section) = case reverse cmdName of-                            (')':d:'(':xs) | d `elem` ['0'..'9'] ->-                                  (text (reverse xs), char d)-                            xs -> (text (reverse xs), doubleQuotes empty)-  let description = hsep $-                    map (doubleQuotes . text . trim) $ splitBy (== '|') rest+  titleText <- inlineListToMan opts $ docTitle meta+  let title' = render' titleText+  let setFieldsFromTitle =+       case break (== ' ') title' of+           (cmdName, rest) -> case reverse cmdName of+                                   (')':d:'(':xs) | isDigit d ->+                                     defField "title" (reverse xs) .+                                     defField "section" [d] .+                                     case splitBy (=='|') rest of+                                          (ft:hds) ->+                                            defField "footer" (trim ft) .+                                            defField "header"+                                               (trim $ concat hds)+                                          [] -> id+                                   _  -> defField "title" title'+  metadata <- metaToJSON opts+              (fmap (render colwidth) . blockListToMan opts)+              (fmap (render colwidth) . inlineListToMan opts)+              $ deleteMeta "title" meta   body <- blockListToMan opts blocks   notes <- liftM stNotes get   notes' <- notesToMan opts (reverse notes)   let main = render' $ body $$ notes' $$ text ""   hasTables <- liftM stHasTables get-  let context  = writerVariables opts ++-                 [ ("body", main)-                 , ("title", render' title')-                 , ("section", render' section)-                 , ("date", render' date')-                 , ("description", render' description) ] ++-                 [ ("has-tables", "yes") | hasTables ] ++-                 [ ("author", render' a) | a <- authors' ]+  let context = defField "body" main+              $ setFieldsFromTitle+              $ defField "has-tables" hasTables+              $ metadata   if writerStandalone opts-     then return $ renderTemplate context $ writerTemplate opts+     then return $ renderTemplate' (writerTemplate opts) context      else return main  -- | Return man representation of notes.@@ -152,14 +160,16 @@                 -> Block         -- ^ Block element                 -> State WriterState Doc blockToMan _ Null = return empty+blockToMan opts (Div _ bs) = blockListToMan opts bs blockToMan opts (Plain inlines) =   liftM vcat $ mapM (inlineListToMan opts) $ splitSentences inlines blockToMan opts (Para inlines) = do   contents <- liftM vcat $ mapM (inlineListToMan opts) $     splitSentences inlines   return $ text ".PP" $$ contents-blockToMan _ (RawBlock "man" str) = return $ text str-blockToMan _ (RawBlock _ _) = return empty+blockToMan _ (RawBlock f str)+  | f == Format "man" = return $ text str+  | otherwise         = return empty blockToMan _ HorizontalRule = return $ text ".PP" $$ text "   *   *   *   *   *" blockToMan opts (Header level _ inlines) = do   contents <- inlineListToMan opts inlines@@ -187,7 +197,7 @@   modify $ \st -> st{ stHasTables = True }   let iwidths = if all (== 0) widths                    then repeat ""-                   else map (printf "w(%0.2fn)" . (70 *)) widths+                   else map (printf "w(%0.1fn)" . (70 *)) widths   -- 78n default width - 8n indent = 70n   let coldescriptions = text $ intercalate " "                         (zipWith (\align width -> aligncode align ++ width)@@ -292,6 +302,7 @@  -- | Convert Pandoc inline element to man. inlineToMan :: WriterOptions -> Inline -> State WriterState Doc+inlineToMan opts (Span _ ils) = inlineListToMan opts ils inlineToMan opts (Emph lst) = do   contents <- inlineListToMan opts lst   return $ text "\\f[I]" <> contents <> text "\\f[]"@@ -323,8 +334,9 @@ inlineToMan opts (Math DisplayMath str) = do   contents <- inlineListToMan opts $ readTeXMath str   return $ cr <> text ".RS" $$ contents $$ text ".RE"-inlineToMan _ (RawInline "man" str) = return $ text str-inlineToMan _ (RawInline _ _) = return empty+inlineToMan _ (RawInline f str)+  | f == Format "man" = return $ text str+  | otherwise         = return empty inlineToMan _ (LineBreak) = return $   cr <> text ".PD 0" $$ text ".P" $$ text ".PD" <> cr inlineToMan _ Space = return space
src/Text/Pandoc/Writers/Markdown.hs view
@@ -1,6 +1,6 @@-{-# LANGUAGE OverloadedStrings, TupleSections #-}+{-# LANGUAGE OverloadedStrings, TupleSections, ScopedTypeVariables #-} {--Copyright (C) 2006-2010 John MacFarlane <jgm@berkeley.edu>+Copyright (C) 2006-2013 John MacFarlane <jgm@berkeley.edu>  This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by@@ -19,7 +19,7 @@  {- |    Module      : Text.Pandoc.Writers.Markdown-   Copyright   : Copyright (C) 2006-2010 John MacFarlane+   Copyright   : Copyright (C) 2006-2013 John MacFarlane    License     : GNU GPL, version 2 or above     Maintainer  : John MacFarlane <jgm@berkeley.edu>@@ -32,19 +32,27 @@ -} module Text.Pandoc.Writers.Markdown (writeMarkdown, writePlain) where import Text.Pandoc.Definition-import Text.Pandoc.Generic-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Walk+import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Options import Text.Pandoc.Parsing hiding (blankline, char, space)-import Data.List ( group, isPrefixOf, find, intersperse, transpose )+import Data.List ( group, isPrefixOf, find, intersperse, transpose, sortBy )+import Data.Char ( isSpace, isPunctuation )+import Data.Ord ( comparing ) import Text.Pandoc.Pretty import Control.Monad.State import qualified Data.Set as Set import Text.Pandoc.Writers.HTML (writeHtmlString) import Text.Pandoc.Readers.TeXMath (readTeXMath) import Text.HTML.TagSoup (renderTags, parseTags, isTagText, Tag(..))+import Network.URI (isAbsoluteURI) import Data.Default+import Data.Yaml (Value(Object,String,Array,Bool,Number))+import qualified Data.HashMap.Strict as H+import qualified Data.Vector as V+import qualified Data.Text as T  type Notes = [[Block]] type Refs = [([Inline], Target)]@@ -74,7 +82,7 @@     where document' = plainify document  plainify :: Pandoc -> Pandoc-plainify = bottomUp go+plainify = walk go   where go :: Inline -> Inline         go (Emph xs) = SmallCaps xs         go (Strong xs) = SmallCaps xs@@ -93,14 +101,29 @@ pandocTitleBlock :: Doc -> [Doc] -> Doc -> Doc pandocTitleBlock tit auths dat =   hang 2 (text "% ") tit <> cr <>-  hang 2 (text "% ") (hcat (intersperse (text "; ") auths)) <> cr <>+  hang 2 (text "% ") (vcat $ map nowrap auths) <> cr <>   hang 2 (text "% ") dat <> cr -mmdTitleBlock :: Doc -> [Doc] -> Doc -> Doc-mmdTitleBlock tit auths dat =-  hang 8 (text "Title:  ") tit <> cr <>-  hang 8 (text "Author: ") (hcat (intersperse (text "; ") auths)) <> cr <>-  hang 8 (text "Date:   ") dat <> cr+mmdTitleBlock :: Value -> Doc+mmdTitleBlock (Object hashmap) =+  vcat $ map go $ sortBy (comparing fst) $ H.toList hashmap+  where go (k,v) =+          case (text (T.unpack k), v) of+               (k', Array vec)+                 | V.null vec     -> empty+                 | otherwise      -> k' <> ":" <> space <>+                                      hcat (intersperse "; "+                                           (map fromstr $ V.toList vec))+               (_, String "")  -> empty+               (k', x)         -> k' <> ":" <> space <> nest 2 (fromstr x)+        fromstr (String s) = text (removeBlankLines $ T.unpack s)+        fromstr (Bool b)   = text (show b)+        fromstr (Number n) = text (show n)+        fromstr _          = empty+        -- blank lines not allowed in MMD metadata - we replace with .+        removeBlankLines   = trimr . unlines . map (\x ->+                               if all isSpace x then "." else x) . lines+mmdTitleBlock _ = empty  plainTitleBlock :: Doc -> [Doc] -> Doc -> Doc plainTitleBlock tit auths dat =@@ -108,47 +131,85 @@   (hcat (intersperse (text "; ") auths)) <> cr <>   dat <> cr +yamlMetadataBlock :: Value -> Doc+yamlMetadataBlock v = "---" $$ (jsonToYaml v) $$ "..."++jsonToYaml :: Value -> Doc+jsonToYaml (Object hashmap) =+  vcat $ map (\(k,v) ->+          case (text (T.unpack k), v, jsonToYaml v) of+               (k', Array vec, x)+                 | V.null vec     -> empty+                 | otherwise      -> (k' <> ":") $$ x+               (k', Object _, x)  -> (k' <> ":") $$ nest 2 x+               (_, String "", _)  -> empty+               (k', _, x)         -> k' <> ":" <> space <> hang 2 "" x)+       $ sortBy (comparing fst) $ H.toList hashmap+jsonToYaml (Array vec) =+  vcat $ map (\v -> hang 2 "- " (jsonToYaml v)) $ V.toList vec+jsonToYaml (String "") = empty+jsonToYaml (String s) =+  case T.unpack s of+     x | '\n' `elem` x -> hang 2 ("|" <> cr) $ text x+       | not (any isPunctuation x) -> text x+       | otherwise     -> text $ "'" ++ substitute "'" "''" x ++ "'"+jsonToYaml (Bool b) = text $ show b+jsonToYaml (Number n) = text $ show n+jsonToYaml _ = empty+ -- | Return markdown representation of document. pandocToMarkdown :: WriterOptions -> Pandoc -> State WriterState String-pandocToMarkdown opts (Pandoc (Meta title authors date) blocks) = do-  title' <- inlineListToMarkdown opts title-  authors' <- mapM (inlineListToMarkdown opts) authors-  date' <- inlineListToMarkdown opts date+pandocToMarkdown opts (Pandoc meta blocks) = do+  let colwidth = if writerWrapText opts+                    then Just $ writerColumns opts+                    else Nothing   isPlain <- gets stPlain-  let titleblock = case True of-                        _ | isPlain ->-                              plainTitleBlock title' authors' date'-                          | isEnabled Ext_pandoc_title_block opts ->-                              pandocTitleBlock title' authors' date'-                          | isEnabled Ext_mmd_title_block opts ->-                              mmdTitleBlock title' authors' date'-                          | otherwise -> empty+  metadata <- metaToJSON opts+               (fmap (render colwidth) . blockListToMarkdown opts)+               (fmap (render colwidth) . inlineListToMarkdown opts)+               meta+  let title' = maybe empty text $ getField "title" metadata+  let authors' = maybe [] (map text) $ getField "author" metadata+  let date' = maybe empty text $ getField "date" metadata+  let titleblock = case writerStandalone opts of+                        True | isPlain ->+                                plainTitleBlock title' authors' date'+                             | isEnabled Ext_yaml_metadata_block opts ->+                                 yamlMetadataBlock metadata+                             | isEnabled Ext_pandoc_title_block opts ->+                                 pandocTitleBlock title' authors' date'+                             | isEnabled Ext_mmd_title_block opts ->+                                 mmdTitleBlock metadata+                             | otherwise -> empty+                        False -> empty   let headerBlocks = filter isHeaderBlock blocks   let toc = if writerTableOfContents opts                then tableOfContents opts headerBlocks                else empty-  body <- blockListToMarkdown opts blocks+  -- Strip off final 'references' header if markdown citations enabled+  let blocks' = case reverse blocks of+                     (Div (_,["references"],_) _):xs+                       | not isPlain && isEnabled Ext_citations opts+                       -> reverse xs+                     _ -> blocks+  body <- blockListToMarkdown opts blocks'   st <- get   notes' <- notesToMarkdown opts (reverse $ stNotes st)   st' <- get  -- note that the notes may contain refs   refs' <- refsToMarkdown opts (reverse $ stRefs st')-  let colwidth = if writerWrapText opts-                    then Just $ writerColumns opts-                    else Nothing-  let main = render colwidth $ body <>+  let render' :: Doc -> String+      render' = render colwidth+  let main = render' $ body <>                (if isEmpty notes' then empty else blankline <> notes') <>                (if isEmpty refs' then empty else blankline <> refs')-  let context  = writerVariables opts ++-                 [ ("toc", render colwidth toc)-                 , ("body", main)-                 , ("title", render Nothing title')-                 , ("date", render Nothing date')-                 ] ++-                 [ ("author", render Nothing a) | a <- authors' ] ++-                 [ ("titleblock", render colwidth titleblock)-                   | not (null title && null authors && null date) ]+  let context  = defField "toc" (render' toc)+               $ defField "body" main+               $ (if isNullMeta meta+                     then id+                     else defField "titleblock" (render' titleblock))+               $ metadata   if writerStandalone opts-     then return $ renderTemplate context $ writerTemplate opts+     then return $ renderTemplate' (writerTemplate opts) context      else return main  -- | Return markdown representation of reference key table.@@ -246,6 +307,13 @@                 -> Block         -- ^ Block element                 -> State WriterState Doc blockToMarkdown _ Null = return empty+blockToMarkdown opts (Div attrs ils) = do+  isPlain <- gets stPlain+  contents <- blockListToMarkdown opts ils+  return $ if isPlain || not (isEnabled Ext_markdown_in_html_blocks opts)+              then contents <> blankline+              else tagWithAttrs "div" attrs <> blankline <>+                      contents <> blankline <> "</div>" <> blankline blockToMarkdown opts (Plain inlines) = do   contents <- inlineListToMarkdown opts inlines   return $ contents <> cr@@ -315,10 +383,10 @@ blockToMarkdown opts (CodeBlock attribs str) = return $   case attribs of      x | x /= nullAttr && isEnabled Ext_fenced_code_blocks opts ->-          tildes <> space <> attrs <> cr <> text str <>+          tildes <> " " <> attrs <> cr <> text str <>            cr <> tildes <> blankline      (_,(cls:_),_) | isEnabled Ext_backtick_code_blocks opts ->-          backticks <> space <> text cls <> cr <> text str <>+          backticks <> " " <> text cls <> cr <> text str <>            cr <> backticks <> blankline      _ -> nest (writerTabStop opts) (text str) <> blankline    where tildes    = text $ case [ln | ln <- lines str, all (=='~') ln] of@@ -352,25 +420,24 @@   let isPlainBlock (Plain _) = True       isPlainBlock _         = False   let hasBlocks = not (all isPlainBlock $ concat . concat $ headers:rows)-  (nst,tbl) <- case isSimple of-                True  | isEnabled Ext_simple_tables opts -> fmap (nest 2,) $+  (nst,tbl) <- case True of+                _ | isSimple &&+                    isEnabled Ext_simple_tables opts -> fmap (nest 2,) $                          pandocTable opts (all null headers) aligns widths                              rawHeaders rawRows-                      | isEnabled Ext_pipe_tables opts -> fmap (id,) $+                  | isSimple &&+                    isEnabled Ext_pipe_tables opts -> fmap (id,) $                          pipeTable (all null headers) aligns rawHeaders rawRows-                      | otherwise -> fmap (id,) $-                         return $ text $ writeHtmlString def-                                $ Pandoc (Meta [] [] []) [t]-                False | not hasBlocks &&-                        isEnabled Ext_multiline_tables opts -> fmap (nest 2,) $+                  | not hasBlocks &&+                    isEnabled Ext_multiline_tables opts -> fmap (nest 2,) $                          pandocTable opts (all null headers) aligns widths                              rawHeaders rawRows-                      | isEnabled Ext_grid_tables opts -> fmap (id,) $+                  | isEnabled Ext_grid_tables opts -> fmap (id,) $                          gridTable opts (all null headers) aligns widths                              rawHeaders rawRows-                      | otherwise -> fmap (id,) $+                  | otherwise -> fmap (id,) $                          return $ text $ writeHtmlString def-                                $ Pandoc (Meta [] [] []) [t]+                                $ Pandoc nullMeta [t]   return $ nst $ tbl $$ blankline $$ caption'' $$ blankline blockToMarkdown opts (BulletList items) = do   contents <- mapM (bulletListItemToMarkdown opts) items@@ -458,7 +525,11 @@ gridTable :: WriterOptions -> Bool -> [Alignment] -> [Double]           -> [Doc] -> [[Doc]] -> State WriterState Doc gridTable opts headless _aligns widths headers' rawRows =  do-  let widthsInChars = map (floor . (fromIntegral (writerColumns opts) *)) widths+  let numcols = length headers'+  let widths' = if all (==0) widths+                   then replicate numcols (1.0 / fromIntegral numcols)+                   else widths+  let widthsInChars = map (floor . (fromIntegral (writerColumns opts) *)) widths'   let hpipeBlocks blocks = hcat [beg, middle, end]         where h       = maximum (map height blocks)               sep'    = lblock 3 $ vcat (map text $ replicate h " | ")@@ -570,6 +641,9 @@  -- | Convert Pandoc inline element to markdown. inlineToMarkdown :: WriterOptions -> Inline -> State WriterState Doc+inlineToMarkdown opts (Span attrs ils) = do+  contents <- inlineListToMarkdown opts ils+  return $ tagWithAttrs "span" attrs <> contents <> text "</span>" inlineToMarkdown opts (Emph lst) = do   contents <- inlineListToMarkdown opts lst   return $ "*" <> contents <> "*"@@ -582,13 +656,13 @@               then "~~" <> contents <> "~~"               else "<s>" <> contents <> "</s>" inlineToMarkdown opts (Superscript lst) = do-  let lst' = bottomUp escapeSpaces lst+  let lst' = walk escapeSpaces lst   contents <- inlineListToMarkdown opts lst'   return $ if isEnabled Ext_superscript opts               then "^" <> contents <> "^"               else "<sup>" <> contents <> "</sup>" inlineToMarkdown opts (Subscript lst) = do-  let lst' = bottomUp escapeSpaces lst+  let lst' = walk escapeSpaces lst   contents <- inlineListToMarkdown opts lst'   return $ if isEnabled Ext_subscript opts               then "~" <> contents <> "~"@@ -643,17 +717,20 @@   | isEnabled Ext_escaped_line_breaks opts = return $ "\\" <> cr   | otherwise                              = return $ "  " <> cr inlineToMarkdown _ Space = return space-inlineToMarkdown opts (Cite (c:cs) lst@[RawInline "latex" _])+inlineToMarkdown opts (Cite [] lst) = inlineListToMarkdown opts lst+inlineToMarkdown opts (Cite (c:cs) lst)   | not (isEnabled Ext_citations opts) = inlineListToMarkdown opts lst-  | citationMode c == AuthorInText = do-    suffs <- inlineListToMarkdown opts $ citationSuffix c-    rest <- mapM convertOne cs-    let inbr = suffs <+> joincits rest-        br   = if isEmpty inbr then empty else char '[' <> inbr <> char ']'-    return $ text ("@" ++ citationId c) <+> br-  | otherwise = do-    cits <- mapM convertOne (c:cs)-    return $ text "[" <> joincits cits <> text "]"+  | otherwise =+      if citationMode c == AuthorInText+         then do+           suffs <- inlineListToMarkdown opts $ citationSuffix c+           rest <- mapM convertOne cs+           let inbr = suffs <+> joincits rest+               br   = if isEmpty inbr then empty else char '[' <> inbr <> char ']'+           return $ text ("@" ++ citationId c) <+> br+         else do+           cits <- mapM convertOne (c:cs)+           return $ text "[" <> joincits cits <> text "]"   where         joincits = hcat . intersperse (text "; ") . filter (not . isEmpty)         convertOne Citation { citationId      = k@@ -670,14 +747,14 @@            return $ pdoc <+> r         modekey SuppressAuthor = "-"         modekey _              = ""-inlineToMarkdown opts (Cite _ lst) = inlineListToMarkdown opts lst inlineToMarkdown opts (Link txt (src, tit)) = do   linktext <- inlineListToMarkdown opts txt   let linktitle = if null tit                      then empty                      else text $ " \"" ++ tit ++ "\""   let srcSuffix = if isPrefixOf "mailto:" src then drop 7 src else src-  let useAuto = case txt of+  let useAuto = isAbsoluteURI src &&+                case txt of                       [Str s] | escapeURI s == srcSuffix -> True                       _                                  -> False   let useRefLinks = writerReferenceLinks opts && not useAuto
src/Text/Pandoc/Writers/MediaWiki.hs view
@@ -33,9 +33,11 @@ import Text.Pandoc.Definition import Text.Pandoc.Options import Text.Pandoc.Shared-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Writers.Shared+import Text.Pandoc.Pretty (render)+import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.XML ( escapeStringForXML )-import Data.List ( intersect, intercalate )+import Data.List ( intersect, intercalate, intersperse ) import Network.URI ( isURI ) import Control.Monad.State @@ -53,18 +55,22 @@  -- | Return MediaWiki representation of document. pandocToMediaWiki :: WriterOptions -> Pandoc -> State WriterState String-pandocToMediaWiki opts (Pandoc _ blocks) = do+pandocToMediaWiki opts (Pandoc meta blocks) = do+  metadata <- metaToJSON opts+              (fmap trimr . blockListToMediaWiki opts)+              (inlineListToMediaWiki opts)+              meta   body <- blockListToMediaWiki opts blocks   notesExist <- get >>= return . stNotes   let notes = if notesExist                  then "\n<references />"                  else ""   let main = body ++ notes-  let context = writerVariables opts ++-                [ ("body", main) ] ++-                [ ("toc", "yes") | writerTableOfContents opts ]+  let context = defField "body" main+                $ defField "toc" (writerTableOfContents opts)+                $ metadata   if writerStandalone opts-     then return $ renderTemplate context $ writerTemplate opts+     then return $ renderTemplate' (writerTemplate opts) context      else return main  -- | Escape special characters for MediaWiki.@@ -78,6 +84,11 @@  blockToMediaWiki _ Null = return "" +blockToMediaWiki opts (Div attrs bs) = do+  contents <- blockListToMediaWiki opts bs+  return $ render Nothing (tagWithAttrs "div" attrs) ++ "\n\n" +++                     contents ++ "\n\n" ++ "</div>"+ blockToMediaWiki opts (Plain inlines) =   inlineListToMediaWiki opts inlines @@ -99,9 +110,10 @@               then  "<p>" ++ contents ++ "</p>"               else contents ++ if null listLevel then "\n" else "" -blockToMediaWiki _ (RawBlock "mediawiki" str) = return str-blockToMediaWiki _ (RawBlock "html" str) = return str-blockToMediaWiki _ (RawBlock _ _) = return ""+blockToMediaWiki _ (RawBlock f str)+  | f == Format "mediawiki" = return str+  | f == Format "html"      = return str+  | otherwise               = return ""  blockToMediaWiki _ HorizontalRule = return "\n-----\n" @@ -130,25 +142,17 @@   return $ "<blockquote>" ++ contents ++ "</blockquote>"  blockToMediaWiki opts (Table capt aligns widths headers rows') = do-  let alignStrings = map alignmentToString aligns-  captionDoc <- if null capt-                   then return ""-                   else do-                      c <- inlineListToMediaWiki opts capt-                      return $ "<caption>" ++ c ++ "</caption>\n"-  let percent w = show (truncate (100*w) :: Integer) ++ "%"-  let coltags = if all (== 0.0) widths-                   then ""-                   else unlines $ map-                         (\w -> "<col width=\"" ++ percent w ++ "\" />") widths-  head' <- if all null headers-              then return ""-              else do-                 hs <- tableRowToMediaWiki opts alignStrings 0 headers-                 return $ "<thead>\n" ++ hs ++ "\n</thead>\n"-  body' <- zipWithM (tableRowToMediaWiki opts alignStrings) [1..] rows'-  return $ "<table>\n" ++ captionDoc ++ coltags ++ head' ++-            "<tbody>\n" ++ unlines body' ++ "</tbody>\n</table>\n"+  caption <- if null capt+                then return ""+                else do+                   c <- inlineListToMediaWiki opts capt+                   return $ "|+ " ++ trimr c ++ "\n"+  let headless = all null headers+  let allrows = if headless then rows' else headers:rows'+  tableBody <- (concat . intersperse "|-\n") `fmap`+                mapM (tableRowToMediaWiki opts headless aligns widths)+                     (zip [1..] allrows)+  return $ "{|\n" ++ caption ++ tableBody ++ "|}\n"  blockToMediaWiki opts x@(BulletList items) = do   oldUseTags <- get >>= return . stUseTags@@ -280,21 +284,35 @@ -- Auxiliary functions for tables:  tableRowToMediaWiki :: WriterOptions-                    -> [String]-                    -> Int-                    -> [[Block]]+                    -> Bool+                    -> [Alignment]+                    -> [Double]+                    -> (Int, [[Block]])                     -> State WriterState String-tableRowToMediaWiki opts alignStrings rownum cols' = do-  let celltype = if rownum == 0 then "th" else "td"-  let rowclass = case rownum of-                      0                  -> "header"-                      x | x `rem` 2 == 1 -> "odd"-                      _                  -> "even"-  cols'' <- sequence $ zipWith-            (\alignment item -> tableItemToMediaWiki opts celltype alignment item)-            alignStrings cols'-  return $ "<tr class=\"" ++ rowclass ++ "\">\n" ++ unlines cols'' ++ "</tr>"+tableRowToMediaWiki opts headless alignments widths (rownum, cells) = do+  cells' <- mapM (\cellData ->+          tableCellToMediaWiki opts headless rownum cellData)+          $ zip3 alignments widths cells+  return $ unlines cells' +tableCellToMediaWiki :: WriterOptions+                     -> Bool+                     -> Int+                     -> (Alignment, Double, [Block])+                     -> State WriterState String+tableCellToMediaWiki opts headless rownum (alignment, width, bs) = do+  contents <- blockListToMediaWiki opts bs+  let marker = if rownum == 1 && not headless then "!" else "|"+  let percent w = show (truncate (100*w) :: Integer) ++ "%"+  let attrs = ["align=" ++ show (alignmentToString alignment) |+                 alignment /= AlignDefault && alignment /= AlignLeft] +++              ["width=\"" ++ percent width ++ "\"" |+                 width /= 0.0 && rownum == 1]+  let attr = if null attrs+                then ""+                else unwords attrs ++ "|"+  return $ marker ++ attr ++ trimr contents+ alignmentToString :: Alignment -> [Char] alignmentToString alignment = case alignment of                                  AlignLeft    -> "left"@@ -302,17 +320,6 @@                                  AlignCenter  -> "center"                                  AlignDefault -> "left" -tableItemToMediaWiki :: WriterOptions-                     -> String-                     -> String-                     -> [Block]-                     -> State WriterState String-tableItemToMediaWiki opts celltype align' item = do-  let mkcell x = "<" ++ celltype ++ " align=\"" ++ align' ++ "\">" ++-                    x ++ "</" ++ celltype ++ ">"-  contents <- blockListToMediaWiki opts item-  return $ mkcell contents- -- | Convert list of Pandoc block elements to MediaWiki. blockListToMediaWiki :: WriterOptions -- ^ Options                     -> [Block]       -- ^ List of block elements@@ -328,6 +335,10 @@ -- | Convert Pandoc inline element to MediaWiki. inlineToMediaWiki :: WriterOptions -> Inline -> State WriterState String +inlineToMediaWiki opts (Span attrs ils) = do+  contents <- inlineListToMediaWiki opts ils+  return $ render Nothing (tagWithAttrs "span" attrs) ++ contents ++ "</span>"+ inlineToMediaWiki opts (Emph lst) = do   contents <- inlineListToMediaWiki opts lst   return $ "''" ++ contents ++ "''"@@ -368,9 +379,10 @@ inlineToMediaWiki _ (Math _ str) = return $ "<math>" ++ str ++ "</math>"                                  -- note:  str should NOT be escaped -inlineToMediaWiki _ (RawInline "mediawiki" str) = return str-inlineToMediaWiki _ (RawInline "html" str) = return str-inlineToMediaWiki _ (RawInline _ _) = return ""+inlineToMediaWiki _ (RawInline f str)+  | f == Format "mediawiki" = return str+  | f == Format "html"      = return str+  | otherwise               = return ""  inlineToMediaWiki _ (LineBreak) = return "<br />" 
src/Text/Pandoc/Writers/Native.hs view
@@ -72,7 +72,7 @@                     then Just $ writerColumns opts                     else Nothing       withHead = if writerStandalone opts-                    then \bs -> text ("Pandoc " ++ "(" ++ show meta ++ ")") $$-                           bs $$ cr+                    then \bs -> text ("Pandoc (" ++ show meta ++ ")") $$+                                  bs $$ cr                     else id   in  render colwidth $ withHead $ prettyList $ map prettyBlock blocks
src/Text/Pandoc/Writers/ODT.hs view
@@ -39,10 +39,9 @@ import Text.Pandoc.ImageSize ( imageSize, sizeInPoints ) import Text.Pandoc.MIME ( getMimeType ) import Text.Pandoc.Definition-import Text.Pandoc.Generic+import Text.Pandoc.Walk import Text.Pandoc.Writers.OpenDocument ( writeOpenDocument ) import Control.Monad (liftM)-import Control.Monad.Trans (liftIO) import Text.Pandoc.XML import Text.Pandoc.Pretty import qualified Control.Exception as E@@ -53,8 +52,9 @@ writeODT :: WriterOptions  -- ^ Writer options          -> Pandoc         -- ^ Document to convert          -> IO B.ByteString-writeODT opts doc@(Pandoc (Meta title _ _) _) = do+writeODT opts doc@(Pandoc meta _) = do   let datadir = writerUserDataDir opts+  let title = docTitle meta   refArchive <- liftM toArchive $        case writerReferenceODT opts of              Just f -> B.readFile f@@ -62,30 +62,33 @@                            readDataFile datadir "reference.odt"   -- handle pictures   picEntriesRef <- newIORef ([] :: [Entry])-  let sourceDir = writerSourceDirectory opts-  doc' <- bottomUpM (transformPic sourceDir picEntriesRef) doc+  doc' <- walkM (transformPic opts picEntriesRef) doc   let newContents = writeOpenDocument opts{writerWrapText = False} doc'   epochtime <- floor `fmap` getPOSIXTime-  let contentEntry = toEntry "content.xml" epochtime $ fromStringLazy newContents+  let contentEntry = toEntry "content.xml" epochtime+                     $ fromStringLazy newContents   picEntries <- readIORef picEntriesRef-  let archive = foldr addEntryToArchive refArchive $ contentEntry : picEntries+  let archive = foldr addEntryToArchive refArchive+                $ contentEntry : picEntries   -- construct META-INF/manifest.xml based on archive   let toFileEntry fp = case getMimeType fp of                         Nothing  -> empty                         Just m   -> selfClosingTag "manifest:file-entry"                                      [("manifest:media-type", m)                                      ,("manifest:full-path", fp)+                                     ,("manifest:version", "1.2")                                      ]-  let files = [ ent | ent <- filesInArchive archive, not ("META-INF" `isPrefixOf` ent) ]+  let files = [ ent | ent <- filesInArchive archive,+                             not ("META-INF" `isPrefixOf` ent) ]   let manifestEntry = toEntry "META-INF/manifest.xml" epochtime         $ fromStringLazy $ render Nothing         $ text "<?xml version=\"1.0\" encoding=\"utf-8\"?>"         $$          ( inTags True "manifest:manifest"-            [("xmlns:manifest","urn:oasis:names:tc:opendocument:xmlns:manifest:1.0")]+            [("xmlns:manifest","urn:oasis:names:tc:opendocument:xmlns:manifest:1.0")+            ,("manifest:version","1.2")]             $ ( selfClosingTag "manifest:file-entry"                  [("manifest:media-type","application/vnd.oasis.opendocument.text")-                 ,("manifest:version","1.2")                  ,("manifest:full-path","/")]                 $$ vcat ( map toFileEntry $ files )               )@@ -108,15 +111,19 @@                   )              )         )-  let archive'' = addEntryToArchive metaEntry archive'+  -- make sure mimetype is first+  let mimetypeEntry = toEntry "mimetype" epochtime+                      $ fromStringLazy "application/vnd.oasis.opendocument.text"+  let archive'' = addEntryToArchive mimetypeEntry+                  $ addEntryToArchive metaEntry archive'   return $ fromArchive archive'' -transformPic :: FilePath -> IORef [Entry] -> Inline -> IO Inline-transformPic sourceDir entriesRef (Image lab (src,_)) = do-  res <- liftIO $ E.try $ fetchItem sourceDir src+transformPic :: WriterOptions -> IORef [Entry] -> Inline -> IO Inline+transformPic opts entriesRef (Image lab (src,_)) = do+  res <- fetchItem (writerSourceURL opts) src   case res of      Left (_ :: E.SomeException) -> do-       liftIO $ warn $ "Could not find image `" ++ src ++ "', skipping..."+       warn $ "Could not find image `" ++ src ++ "', skipping..."        return $ Emph lab      Right (img, _) -> do        let size = imageSize img
+ src/Text/Pandoc/Writers/OPML.hs view
@@ -0,0 +1,90 @@+{-+Copyright (C) 2013 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++{- |+   Module      : Text.Pandoc.Writers.OPML+   Copyright   : Copyright (C) 2013 John MacFarlane+   License     : GNU GPL, version 2 or above++   Maintainer  : John MacFarlane <jgm@berkeley.edu>+   Stability   : alpha+   Portability : portable++Conversion of 'Pandoc' documents to OPML XML.+-}+module Text.Pandoc.Writers.OPML ( writeOPML) where+import Text.Pandoc.Definition+import Text.Pandoc.XML+import Text.Pandoc.Writers.Shared+import Text.Pandoc.Shared+import Text.Pandoc.Options+import Text.Pandoc.Templates (renderTemplate')+import Text.Pandoc.Writers.HTML (writeHtmlString)+import Text.Pandoc.Writers.Markdown (writeMarkdown)+import Text.Pandoc.Pretty+import Data.Time+import System.Locale (defaultTimeLocale)+import qualified Text.Pandoc.Builder as B++-- | Convert Pandoc document to string in OPML format.+writeOPML :: WriterOptions -> Pandoc -> String+writeOPML opts (Pandoc meta blocks) =+  let elements = hierarchicalize blocks+      colwidth = if writerWrapText opts+                    then Just $ writerColumns opts+                    else Nothing+      meta' = B.setMeta "date" (B.str $ convertDate $ docDate meta) meta+      Just metadata = metaToJSON opts+                      (Just . writeMarkdown def . Pandoc nullMeta)+                      (Just . trimr . writeMarkdown def . Pandoc nullMeta .+                         (\ils -> [Plain ils]))+                      meta'+      main     = render colwidth $ vcat (map (elementToOPML opts) elements)+      context = defField "body" main metadata+  in  if writerStandalone opts+         then renderTemplate' (writerTemplate opts) context+         else main++writeHtmlInlines :: [Inline] -> String+writeHtmlInlines ils = trim $ writeHtmlString def+                            $ Pandoc nullMeta [Plain ils]++-- date format: RFC 822: Thu, 14 Jul 2005 23:41:05 GMT+showDateTimeRFC822 :: UTCTime -> String+showDateTimeRFC822 = formatTime defaultTimeLocale "%a, %d %b %Y %X %Z"++convertDate :: [Inline] -> String+convertDate ils = maybe "" showDateTimeRFC822+  $ parseTime defaultTimeLocale "%F" =<< (normalizeDate $ stringify ils)++-- | Convert an Element to OPML.+elementToOPML :: WriterOptions -> Element -> Doc+elementToOPML _ (Blk _) = empty+elementToOPML opts (Sec _ _num _ title elements) =+  let isBlk (Blk _) = True+      isBlk _     = False+      fromBlk (Blk x) = x+      fromBlk _ = error "fromBlk called on non-block"+      (blocks, rest) = span isBlk elements+      attrs = [("text", writeHtmlInlines title)] +++              [("_note", writeMarkdown def (Pandoc nullMeta+                              (map fromBlk blocks)))+                | not (null blocks)]+  in  inTags True "outline" attrs $+      vcat (map (elementToOPML opts) rest)+
src/Text/Pandoc/Writers/OpenDocument.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE PatternGuards #-}+{-# LANGUAGE PatternGuards, OverloadedStrings #-} {- Copyright (C) 2008-2010 Andrea Rossato <andrea.rossato@ing.unitn.it> and John MacFarlane.@@ -33,7 +33,7 @@ import Text.Pandoc.Definition import Text.Pandoc.Options import Text.Pandoc.XML-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.Readers.TeXMath import Text.Pandoc.Pretty import Text.Printf ( printf )@@ -42,6 +42,7 @@ import Control.Monad.State hiding ( when ) import Data.Char (chr, isDigit) import qualified Data.Map as Map+import Text.Pandoc.Writers.Shared  -- | Auxiliary function to convert Plain block to Para. plainToPara :: Block -> Block@@ -172,34 +173,31 @@  -- | Convert Pandoc document to string in OpenDocument format. writeOpenDocument :: WriterOptions -> Pandoc -> String-writeOpenDocument opts (Pandoc (Meta title authors date) blocks) =-  let ((doc, title', authors', date'),s) = flip runState-        defaultWriterState $ do-           title'' <- inlinesToOpenDocument opts title-           authors'' <- mapM (inlinesToOpenDocument opts) authors-           date'' <- inlinesToOpenDocument opts date-           doc'' <- blocksToOpenDocument opts blocks-           return (doc'', title'', authors'', date'')-      colwidth = if writerWrapText opts+writeOpenDocument opts (Pandoc meta blocks) =+  let colwidth = if writerWrapText opts                     then Just $ writerColumns opts                     else Nothing       render' = render colwidth-      body'    = render' doc+      ((body, metadata),s) = flip runState+        defaultWriterState $ do+           m <- metaToJSON opts+                  (fmap (render colwidth) . blocksToOpenDocument opts)+                  (fmap (render colwidth) . inlinesToOpenDocument opts)+                  meta+           b <- render' `fmap` blocksToOpenDocument opts blocks+           return (b, m)       styles   = stTableStyles s ++ stParaStyles s ++ stTextStyles s       listStyle (n,l) = inTags True "text:list-style"                           [("style:name", "L" ++ show n)] (vcat l)       listStyles  = map listStyle (stListStyles s)       automaticStyles = inTagsIndented "office:automatic-styles" $ vcat $                           reverse $ styles ++ listStyles-      context = writerVariables opts ++-                [ ("body", body')-                , ("automatic-styles", render' automaticStyles)-                , ("title", render' title')-                , ("date", render' date') ] ++-                [ ("author", render' a) | a <- authors' ]+      context = defField "body" body+              $ defField "automatic-styles" (render' automaticStyles)+              $ metadata   in  if writerStandalone opts-         then renderTemplate context $ writerTemplate opts-         else body'+         then renderTemplate' (writerTemplate opts) context+         else body  withParagraphStyle :: WriterOptions -> String -> [Block] -> State WriterState Doc withParagraphStyle  o s (b:bs)@@ -287,6 +285,7 @@ blockToOpenDocument o bs     | Plain          b <- bs = inParagraphTags =<< inlinesToOpenDocument o b     | Para           b <- bs = inParagraphTags =<< inlinesToOpenDocument o b+    | Div _ xs         <- bs = blocksToOpenDocument o xs     | Header     i _ b <- bs = setFirstPara >>                                (inHeaderTags  i =<< inlinesToOpenDocument o b)     | BlockQuote     b <- bs = setFirstPara >> mkBlockQuote b@@ -297,7 +296,9 @@     | Table  c a w h r <- bs = setFirstPara >> table c a w h r     | HorizontalRule   <- bs = setFirstPara >> return (selfClosingTag "text:p"                                 [ ("text:style-name", "Horizontal_20_Line") ])-    | RawBlock _     _ <- bs = return empty+    | RawBlock f     s <- bs = if f == "opendocument"+                                  then preformatted s+                                  else return empty     | Null             <- bs = return empty     | otherwise              = return empty     where@@ -362,6 +363,7 @@ inlineToOpenDocument :: WriterOptions -> Inline -> State WriterState Doc inlineToOpenDocument o ils     | Space         <- ils = inTextStyle space+    | Span _ xs     <- ils = inlinesToOpenDocument o xs     | LineBreak     <- ils = return $ selfClosingTag "text:line-break" []     | Str         s <- ils = inTextStyle $ handleSpaces $ escapeStringForXML s     | Emph        l <- ils = withTextStyle Italic $ inlinesToOpenDocument o l@@ -374,9 +376,9 @@     | Code      _ s <- ils = preformatted s     | Math      _ s <- ils = inlinesToOpenDocument o (readTeXMath s)     | Cite      _ l <- ils = inlinesToOpenDocument o l-    | RawInline "opendocument" s <- ils = preformatted s-    | RawInline "html" s <- ils = preformatted s  -- for backwards compat.-    | RawInline _ _ <- ils = return empty+    | RawInline f s <- ils = if f == "opendocument" || f == "html"+                                then preformatted s+                                else return empty     | Link  l (s,t) <- ils = mkLink s t <$> inlinesToOpenDocument o l     | Image _ (s,t) <- ils = return $ mkImg  s t     | Note        l <- ils = mkNote l@@ -459,7 +461,8 @@ tableStyle num wcs =     let tableId        = "Table" ++ show (num + 1)         table          = inTags True "style:style"-                         [("style:name", tableId)] $+                         [("style:name", tableId)+                         ,("style:family", "table")] $                          selfClosingTag "style:table-properties"                          [("table:align"    , "center")]         colStyle (c,0) = selfClosingTag "style:style"@@ -491,14 +494,16 @@       tight     = if t then [ ("fo:margin-top"          , "0in"    )                             , ("fo:margin-bottom"       , "0in"    )]                        else []-      indent    = when (i /= 0 || b || t) $-                  selfClosingTag "style:paragraph-properties" $-                           [ ("fo:margin-left"         , indentVal)+      indent    = if (i /= 0 || b) +                      then [ ("fo:margin-left"         , indentVal)                            , ("fo:margin-right"        , "0in"    )                            , ("fo:text-indent"         , "0in"    )                            , ("style:auto-text-indent" , "false"  )]-                         ++ tight-  addParaStyle $ inTags True "style:style" (styleAttr ++ attrs) indent+                      else []+      attributes = indent ++ tight+      paraProps = when (not $ null attributes) $+                    selfClosingTag "style:paragraph-properties" attributes+  addParaStyle $ inTags True "style:style" (styleAttr ++ attrs) paraProps   return pn  paraListStyle :: Int -> State WriterState Int
src/Text/Pandoc/Writers/Org.hs view
@@ -34,8 +34,9 @@ import Text.Pandoc.Definition import Text.Pandoc.Options import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Pretty-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Templates (renderTemplate') import Data.List ( intersect, intersperse, transpose ) import Control.Monad.State import Control.Applicative ( (<$>) )@@ -58,27 +59,25 @@  -- | Return Org representation of document. pandocToOrg :: Pandoc -> State WriterState String-pandocToOrg (Pandoc (Meta tit auth dat) blocks) = do+pandocToOrg (Pandoc meta blocks) = do   opts <- liftM stOptions get-  title <- titleToOrg tit-  authors <- mapM inlineListToOrg auth-  date <- inlineListToOrg dat+  let colwidth = if writerWrapText opts+                    then Just $ writerColumns opts+                    else Nothing+  metadata <- metaToJSON opts+               (fmap (render colwidth) . blockListToOrg)+               (fmap (render colwidth) . inlineListToOrg)+               meta   body <- blockListToOrg blocks   notes <- liftM (reverse . stNotes) get >>= notesToOrg   -- note that the notes may contain refs, so we do them first   hasMath <- liftM stHasMath get-  let colwidth = if writerWrapText opts-                    then Just $ writerColumns opts-                    else Nothing   let main = render colwidth $ foldl ($+$) empty $ [body, notes]-  let context = writerVariables opts ++-                [ ("body", main)-                , ("title", render Nothing title)-                , ("date", render Nothing date) ] ++-                [ ("math", "yes") | hasMath ] ++-                [ ("author", render Nothing a) | a <- authors ]+  let context = defField "body" main+              $ defField "math" hasMath+              $ metadata   if writerStandalone opts-     then return $ renderTemplate context $ writerTemplate opts+     then return $ renderTemplate' (writerTemplate opts) context      else return main  -- | Return Org representation of notes.@@ -103,16 +102,18 @@                , ('\x2026',"...")                ] ++ backslashEscapes "^_" -titleToOrg :: [Inline] -> State WriterState Doc-titleToOrg [] = return empty-titleToOrg lst = do-  contents <- inlineListToOrg lst-  return $ "#+TITLE: " <> contents- -- | Convert Pandoc block element to Org. blockToOrg :: Block         -- ^ Block element            -> State WriterState Doc blockToOrg Null = return empty+blockToOrg (Div attrs bs) = do+  contents <- blockListToOrg bs+  let startTag = tagWithAttrs "div" attrs+  let endTag = text "</div>"+  return $ blankline $$ "#+BEGIN_HTML" $$+           nest 2 startTag $$ "#+END_HTML" $$ blankline $$+           contents $$ blankline $$ "#+BEGIN_HTML" $$+           nest 2 endTag $$ "#+END_HTML" $$ blankline blockToOrg (Plain inlines) = inlineListToOrg inlines -- title beginning with fig: indicates that the image is a figure blockToOrg (Para [Image txt (src,'f':'i':'g':':':tit)]) = do@@ -236,6 +237,8 @@  -- | Convert Pandoc inline element to Org. inlineToOrg :: Inline -> State WriterState Doc+inlineToOrg (Span _ lst) =+  inlineListToOrg lst inlineToOrg (Emph lst) = do   contents <- inlineListToOrg lst   return $ "/" <> contents <> "/"
src/Text/Pandoc/Writers/RST.hs view
@@ -30,16 +30,19 @@  reStructuredText:  <http://docutils.sourceforge.net/rst.html> -}-module Text.Pandoc.Writers.RST ( writeRST) where+module Text.Pandoc.Writers.RST ( writeRST ) where import Text.Pandoc.Definition import Text.Pandoc.Options import Text.Pandoc.Shared-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Writers.Shared+import Text.Pandoc.Templates (renderTemplate')+import Text.Pandoc.Builder (deleteMeta) import Data.List ( isPrefixOf, intersperse, transpose )+import Network.URI (isAbsoluteURI) import Text.Pandoc.Pretty import Control.Monad.State import Control.Applicative ( (<$>) )-import Data.Char (isSpace)+import Data.Char (isSpace, toLower)  type Refs = [([Inline], Target)] @@ -61,31 +64,35 @@  -- | Return RST representation of document. pandocToRST :: Pandoc -> State WriterState String-pandocToRST (Pandoc (Meta tit auth dat) blocks) = do+pandocToRST (Pandoc meta blocks) = do   opts <- liftM stOptions get-  title <- titleToRST tit-  authors <- mapM inlineListToRST auth-  date <- inlineListToRST dat+  let colwidth = if writerWrapText opts+                    then Just $ writerColumns opts+                    else Nothing+  let subtit = case lookupMeta "subtitle" meta of+                    Just (MetaBlocks [Plain xs]) -> xs+                    _ -> []+  title <- titleToRST (docTitle meta) subtit+  metadata <- metaToJSON opts+                (fmap (render colwidth) . blockListToRST)+                (fmap (trimr . render colwidth) . inlineListToRST)+                $ deleteMeta "title" $ deleteMeta "subtitle" meta   body <- blockListToRST blocks   notes <- liftM (reverse . stNotes) get >>= notesToRST   -- note that the notes may contain refs, so we do them first   refs <- liftM (reverse . stLinks) get >>= refsToRST   pics <- liftM (reverse . stImages) get >>= pictRefsToRST   hasMath <- liftM stHasMath get-  let colwidth = if writerWrapText opts-                    then Just $ writerColumns opts-                    else Nothing   let main = render colwidth $ foldl ($+$) empty $ [body, notes, refs, pics]-  let context = writerVariables opts ++-                [ ("body", main)-                , ("title", render Nothing title)-                , ("date", render colwidth date)-                , ("toc", if writerTableOfContents opts then "yes" else "")-                , ("toc-depth", show (writerTOCDepth opts)) ] ++-                [ ("math", "yes") | hasMath ] ++-                [ ("author", render colwidth a) | a <- authors ]+  let context = defField "body" main+              $ defField "toc" (writerTableOfContents opts)+              $ defField "toc-depth" (writerTOCDepth opts)+              $ defField "math" hasMath+              $ defField "title" (render Nothing title :: String)+              $ defField "math" hasMath+              $ metadata   if writerStandalone opts-     then return $ renderTemplate context $ writerTemplate opts+     then return $ renderTemplate' (writerTemplate opts) context      else return main  -- | Return RST representation of reference key table.@@ -135,18 +142,30 @@ escapeString :: String -> String escapeString = escapeStringUsing (backslashEscapes "`\\|*_") -titleToRST :: [Inline] -> State WriterState Doc-titleToRST [] = return empty-titleToRST lst = do-  contents <- inlineListToRST lst-  let titleLength = length $ (render Nothing contents :: String)-  let border = text (replicate titleLength '=')-  return $ border $$ contents $$ border+titleToRST :: [Inline] -> [Inline] -> State WriterState Doc+titleToRST [] _ = return empty+titleToRST tit subtit = do+  title <- inlineListToRST tit+  subtitle <- inlineListToRST subtit+  return $ bordered title '=' $$ bordered subtitle '-' +bordered :: Doc -> Char -> Doc+bordered contents c =+  if len > 0+     then border $$ contents $$ border+     else empty+   where len = offset contents+         border = text (replicate len c)+ -- | Convert Pandoc block element to RST. blockToRST :: Block         -- ^ Block element            -> State WriterState Doc blockToRST Null = return empty+blockToRST (Div attr bs) = do+  contents <- blockListToRST bs+  let startTag = ".. raw:: html" $+$ nest 3 (tagWithAttrs "div" attr)+  let endTag = ".. raw:: html" $+$ nest 3 "</div>"+  return $ blankline <> startTag $+$ contents $+$ endTag $$ blankline blockToRST (Plain inlines) = inlineListToRST inlines -- title beginning with fig: indicates that the image is a figure blockToRST (Para [Image txt (src,'f':'i':'g':':':tit)]) = do@@ -161,9 +180,11 @@   | otherwise = do       contents <- inlineListToRST inlines       return $ contents <> blankline-blockToRST (RawBlock f str) =-  return $ blankline <> ".. raw:: " <> text f $+$-           (nest 3 $ text str) $$ blankline+blockToRST (RawBlock f@(Format f') str)+  | f == "rst" = return $ text str+  | otherwise  = return $ blankline <> ".. raw:: " <>+                    text (map toLower f') $+$+                    (nest 3 $ text str) $$ blankline blockToRST HorizontalRule =   return $ blankline $$ "--------------" $$ blankline blockToRST (Header level _ inlines) = do@@ -324,6 +345,7 @@  -- | Convert Pandoc inline element to RST. inlineToRST :: Inline -> State WriterState Doc+inlineToRST (Span _ ils) = inlineListToRST ils inlineToRST (Emph lst) = do   contents <- inlineListToRST lst   return $ "*" <> contents <> "*"@@ -358,15 +380,17 @@                    then blankline $$ ".. math::" $$                         blankline $$ nest 3 (text str) $$ blankline                    else blankline $$ (".. math:: " <> text str) $$ blankline-inlineToRST (RawInline "rst" x) = return $ text x-inlineToRST (RawInline _ _) = return empty+inlineToRST (RawInline f x)+  | f == "rst" = return $ text x+  | otherwise  = return empty inlineToRST (LineBreak) = return cr -- there's no line break in RST (see Para) inlineToRST Space = return space -- autolink inlineToRST (Link [Str str] (src, _))-  | if "mailto:" `isPrefixOf` src-    then src == escapeURI ("mailto:" ++ str)-    else src == escapeURI str = do+  | isAbsoluteURI src &&+    if "mailto:" `isPrefixOf` src+       then src == escapeURI ("mailto:" ++ str)+       else src == escapeURI str = do   let srcSuffix = if isPrefixOf "mailto:" src then drop 7 src else src   return $ text srcSuffix inlineToRST (Link [Image alt (imgsrc,imgtit)] (src, _tit)) = do
src/Text/Pandoc/Writers/RTF.hs view
@@ -31,11 +31,12 @@ import Text.Pandoc.Definition import Text.Pandoc.Options import Text.Pandoc.Shared+import Text.Pandoc.Writers.Shared import Text.Pandoc.Readers.TeXMath-import Text.Pandoc.Templates (renderTemplate)-import Text.Pandoc.Generic (bottomUpM)+import Text.Pandoc.Templates (renderTemplate')+import Text.Pandoc.Walk import Data.List ( isSuffixOf, intercalate )-import Data.Char ( ord, isDigit, toLower )+import Data.Char ( ord, chr, isDigit, toLower ) import System.FilePath ( takeExtension ) import qualified Data.ByteString as B import Text.Printf ( printf )@@ -61,7 +62,7 @@        let raw = "{\\pict" ++ filetype ++ " " ++ concat bytes ++ "}"        return $ if B.null imgdata                    then x-                   else RawInline "rtf" raw+                   else RawInline (Format "rtf") raw      else return x rtfEmbedImage x = return x @@ -69,28 +70,28 @@ -- images embedded as encoded binary data. writeRTFWithEmbeddedImages :: WriterOptions -> Pandoc -> IO String writeRTFWithEmbeddedImages options doc =-  writeRTF options `fmap` bottomUpM rtfEmbedImage doc+  writeRTF options `fmap` walkM rtfEmbedImage doc  -- | Convert Pandoc to a string in rich text format. writeRTF :: WriterOptions -> Pandoc -> String-writeRTF options (Pandoc (Meta title authors date) blocks) =-  let titletext = inlineListToRTF title-      authorstext = map inlineListToRTF authors-      datetext = inlineListToRTF date-      spacer = not $ all null $ titletext : datetext : authorstext+writeRTF options (Pandoc meta blocks) =+  let spacer = not $ all null $ docTitle meta : docDate meta : docAuthors meta+      Just metadata = metaToJSON options+              (Just . concatMap (blockToRTF 0 AlignDefault))+              (Just . inlineListToRTF)+              meta       body = concatMap (blockToRTF 0 AlignDefault) blocks       isTOCHeader (Header lev _ _) = lev <= writerTOCDepth options       isTOCHeader _ = False-      context = writerVariables options ++-                [ ("body", body)-                , ("title", titletext)-                , ("date", datetext) ] ++-                [ ("author", a) | a <- authorstext ] ++-                [ ("spacer", "yes") | spacer ] ++-                [ ("toc", tableOfContents $ filter isTOCHeader blocks) |-                   writerTableOfContents options ]+      context = defField "body" body+              $ defField "spacer" spacer+              $ (if writerTableOfContents options+                    then defField "toc"+                          (tableOfContents $ filter isTOCHeader blocks)+                    else id)+              $ metadata   in  if writerStandalone options-         then renderTemplate context $ writerTemplate options+         then renderTemplate' (writerTemplate options) context          else body  -- | Construct table of contents from list of header blocks.@@ -113,8 +114,18 @@ handleUnicode [] = [] handleUnicode (c:cs) =   if ord c > 127-     then '\\':'u':(show (ord c)) ++ "?" ++ handleUnicode cs+     then if surrogate c+          then let x = ord c - 0x10000+                   (q, r) = x `divMod` 0x400+                   upper = q + 0xd800+                   lower = r + 0xDC00+               in enc (chr upper) ++ enc (chr lower) ++ handleUnicode cs+          else enc c ++ handleUnicode cs      else c:(handleUnicode cs)+  where+    surrogate x = not (   (0x0000 <= ord x && ord x <= 0xd7ff)+                       || (0xe000 <= ord x && ord x <= 0xffff) )+    enc x = '\\':'u':(show (ord x)) ++ "?"  -- | Escape special characters. escapeSpecial :: String -> String@@ -197,6 +208,8 @@            -> Block     -- ^ block to convert            -> String blockToRTF _ _ Null = ""+blockToRTF indent alignment (Div _ bs) =+  concatMap (blockToRTF indent alignment) bs blockToRTF indent alignment (Plain lst) =   rtfCompact indent 0 alignment $ inlineListToRTF lst blockToRTF indent alignment (Para lst) =@@ -205,8 +218,9 @@   concatMap (blockToRTF (indent + indentIncrement) alignment) lst blockToRTF indent _ (CodeBlock _ str) =   rtfPar indent 0 AlignLeft ("\\f1 " ++ (codeStringToRTF str))-blockToRTF _ _ (RawBlock "rtf" str) = str-blockToRTF _ _ (RawBlock _ _) = ""+blockToRTF _ _ (RawBlock f str)+  | f == Format "rtf" = str+  | otherwise         = "" blockToRTF indent alignment (BulletList lst) = spaceAtEnd $   concatMap (listItemToRTF alignment indent (bulletMarker indent)) lst blockToRTF indent alignment (OrderedList attribs lst) = spaceAtEnd $ concat $@@ -297,6 +311,7 @@ -- | Convert inline item to RTF. inlineToRTF :: Inline         -- ^ inline to convert             -> String+inlineToRTF (Span _ lst) = inlineListToRTF lst inlineToRTF (Emph lst) = "{\\i " ++ (inlineListToRTF lst) ++ "}" inlineToRTF (Strong lst) = "{\\b " ++ (inlineListToRTF lst) ++ "}" inlineToRTF (Strikeout lst) = "{\\strike " ++ (inlineListToRTF lst) ++ "}"@@ -311,8 +326,9 @@ inlineToRTF (Str str) = stringToRTF str inlineToRTF (Math _ str) = inlineListToRTF $ readTeXMath str inlineToRTF (Cite _ lst) = inlineListToRTF lst-inlineToRTF (RawInline "rtf" str) = str-inlineToRTF (RawInline _ _) = ""+inlineToRTF (RawInline f str)+  | f == Format "rtf" = str+  | otherwise         = "" inlineToRTF (LineBreak) = "\\line " inlineToRTF Space = " " inlineToRTF (Link text (src, _)) =
+ src/Text/Pandoc/Writers/Shared.hs view
@@ -0,0 +1,140 @@+{-# LANGUAGE OverloadedStrings #-}+{-+Copyright (C) 2013 John MacFarlane <jgm@berkeley.edu>++This program is free software; you can redistribute it and/or modify+it under the terms of the GNU General Public License as published by+the Free Software Foundation; either version 2 of the License, or+(at your option) any later version.++This program is distributed in the hope that it will be useful,+but WITHOUT ANY WARRANTY; without even the implied warranty of+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the+GNU General Public License for more details.++You should have received a copy of the GNU General Public License+along with this program; if not, write to the Free Software+Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA+-}++{- |+   Module      : Text.Pandoc.Writers.Shared+   Copyright   : Copyright (C) 2013 John MacFarlane+   License     : GNU GPL, version 2 or above++   Maintainer  : John MacFarlane <jgm@berkeley.edu>+   Stability   : alpha+   Portability : portable++Shared utility functions for pandoc writers.+-}+module Text.Pandoc.Writers.Shared (+                       metaToJSON+                     , getField+                     , setField+                     , defField+                     , tagWithAttrs+                     )+where+import Text.Pandoc.Definition+import Text.Pandoc.Pretty+import Text.Pandoc.XML (escapeStringForXML)+import Control.Monad (liftM)+import Text.Pandoc.Options (WriterOptions(..))+import qualified Data.HashMap.Strict as H+import qualified Data.Map as M+import qualified Data.Text as T+import Data.Aeson (FromJSON(..), fromJSON, ToJSON (..), Value(Object), Result(..))+import qualified Data.Traversable as Traversable++-- | Create JSON value for template from a 'Meta' and an association list+-- of variables, specified at the command line or in the writer.+-- Variables overwrite metadata fields with the same names.+-- If multiple variables are set with the same name, a list is+-- assigned.+metaToJSON :: Monad m+           => WriterOptions+           -> ([Block] -> m String)+           -> ([Inline] -> m String)+           -> Meta+           -> m Value+metaToJSON opts blockWriter inlineWriter (Meta metamap)+  | writerStandalone opts = do+    let baseContext = foldl (\acc (x,y) -> setField x y acc) (Object H.empty)+                      $ writerVariables opts+    renderedMap <- Traversable.mapM+                   (metaValueToJSON blockWriter inlineWriter)+                   metamap+    return $ M.foldWithKey (\key val obj -> defField key val obj)+                   baseContext renderedMap+  | otherwise = return (Object H.empty)++metaValueToJSON :: Monad m+                => ([Block] -> m String)+                -> ([Inline] -> m String)+                -> MetaValue+                -> m Value+metaValueToJSON blockWriter inlineWriter (MetaMap metamap) = liftM toJSON $+  Traversable.mapM (metaValueToJSON blockWriter inlineWriter) metamap+metaValueToJSON blockWriter inlineWriter (MetaList xs) = liftM toJSON $+  Traversable.mapM (metaValueToJSON blockWriter inlineWriter) xs+metaValueToJSON _ _ (MetaBool b) = return $ toJSON b+metaValueToJSON _ _ (MetaString s) = return $ toJSON s+metaValueToJSON blockWriter _ (MetaBlocks bs) = liftM toJSON $ blockWriter bs+metaValueToJSON _ inlineWriter (MetaInlines bs) = liftM toJSON $ inlineWriter bs++-- | Retrieve a field value from a JSON object.+getField :: FromJSON a+         => String+         -> Value+         -> Maybe a+getField field (Object hashmap) = do+  result <- H.lookup (T.pack field) hashmap+  case fromJSON result of+       Success x -> return x+       _         -> fail "Could not convert from JSON"+getField _ _ = fail "Not a JSON object"++setField :: ToJSON a+         => String+         -> a+         -> Value+         -> Value+-- | Set a field of a JSON object.  If the field already has a value,+-- convert it into a list with the new value appended to the old value(s).+-- This is a utility function to be used in preparing template contexts.+setField field val (Object hashmap) =+  Object $ H.insertWith combine (T.pack field) (toJSON val) hashmap+  where combine newval oldval =+          case fromJSON oldval of+                Success xs  -> toJSON $ xs ++ [newval]+                _           -> toJSON [oldval, newval]+setField _ _  x = x++defField :: ToJSON a+         => String+         -> a+         -> Value+         -> Value+-- | Set a field of a JSON object if it currently has no value.+-- If it has a value, do nothing.+-- This is a utility function to be used in preparing template contexts.+defField field val (Object hashmap) =+  Object $ H.insertWith f (T.pack field) (toJSON val) hashmap+    where f _newval oldval = oldval+defField _ _  x = x++-- Produce an HTML tag with the given pandoc attributes.+tagWithAttrs :: String -> Attr -> Doc+tagWithAttrs tag (ident,classes,kvs) = hsep+  ["<" <> text tag+  ,if null ident+      then empty+      else "id=" <> doubleQuotes (text ident)+  ,if null classes+      then empty+      else "class=" <> doubleQuotes (text (unwords classes))+  ]+  <> hsep (map (\(k,v) -> text k <> "=" <>+                doubleQuotes (text (escapeStringForXML v))) kvs)+  <> ">"
src/Text/Pandoc/Writers/Texinfo.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE OverloadedStrings #-} {- Copyright (C) 2008-2010 John MacFarlane and Peter Wang @@ -31,7 +32,8 @@ import Text.Pandoc.Definition import Text.Pandoc.Options import Text.Pandoc.Shared-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Writers.Shared+import Text.Pandoc.Templates (renderTemplate') import Text.Printf ( printf ) import Data.List ( transpose, maximumBy ) import Data.Ord ( comparing )@@ -63,33 +65,32 @@  -- | Add a "Top" node around the document, needed by Texinfo. wrapTop :: Pandoc -> Pandoc-wrapTop (Pandoc (Meta title authors date) blocks) =-  Pandoc (Meta title authors date) (Header 0 nullAttr title : blocks)+wrapTop (Pandoc meta blocks) =+  Pandoc meta (Header 0 nullAttr (docTitle meta) : blocks)  pandocToTexinfo :: WriterOptions -> Pandoc -> State WriterState String-pandocToTexinfo options (Pandoc (Meta title authors date) blocks) = do-  titleText <- inlineListToTexinfo title-  authorsText <- mapM inlineListToTexinfo authors-  dateText <- inlineListToTexinfo date-  let titlePage = not $ all null $ title : date : authors-  main <- blockListToTexinfo blocks-  st <- get+pandocToTexinfo options (Pandoc meta blocks) = do+  let titlePage = not $ all null+                      $ docTitle meta : docDate meta : docAuthors meta   let colwidth = if writerWrapText options                     then Just $ writerColumns options                     else Nothing+  metadata <- metaToJSON options+              (fmap (render colwidth) . blockListToTexinfo)+              (fmap (render colwidth) . inlineListToTexinfo)+              meta+  main <- blockListToTexinfo blocks+  st <- get   let body = render colwidth main-  let context = writerVariables options ++-                [ ("body", body)-                , ("title", render colwidth titleText)-                , ("date", render colwidth dateText) ] ++-                [ ("toc", "yes") | writerTableOfContents options ] ++-                [ ("titlepage", "yes") | titlePage ] ++-                [ ("subscript", "yes") | stSubscript st ] ++-                [ ("superscript", "yes") | stSuperscript st ] ++-                [ ("strikeout", "yes") | stStrikeout st ] ++-                [ ("author", render colwidth a) | a <- authorsText ]+  let context = defField "body" body+              $ defField "toc" (writerTableOfContents options)+              $ defField "titlepage" titlePage+              $ defField "subscript" (stSubscript st)+              $ defField "superscript" (stSuperscript st)+              $ defField "strikeout" (stStrikeout st)+              $ metadata   if writerStandalone options-     then return $ renderTemplate context $ writerTemplate options+     then return $ renderTemplate' (writerTemplate options) context      else return body  -- | Escape things as needed for Texinfo.@@ -123,6 +124,8 @@  blockToTexinfo Null = return empty +blockToTexinfo (Div _ bs) = blockListToTexinfo bs+ blockToTexinfo (Plain lst) =   inlineListToTexinfo lst @@ -150,10 +153,11 @@            flush (text str) $$            text "@end verbatim" <> blankline -blockToTexinfo (RawBlock "texinfo" str) = return $ text str-blockToTexinfo (RawBlock "latex" str) =-  return $ text "@tex" $$ text str $$ text "@end tex"-blockToTexinfo (RawBlock _ _) = return empty+blockToTexinfo (RawBlock f str)+  | f == "texinfo" = return $ text str+  | f == "latex" || f == "tex" =+                      return $ text "@tex" $$ text str $$ text "@end tex"+  | otherwise      = return empty  blockToTexinfo (BulletList lst) = do   items <- mapM listItemToTexinfo lst@@ -374,6 +378,9 @@ inlineToTexinfo :: Inline    -- ^ Inline to convert                 -> State WriterState Doc +inlineToTexinfo (Span _ lst) =+  inlineListToTexinfo lst+ inlineToTexinfo (Emph lst) =   inlineListToTexinfo lst >>= return . inCmd "emph" @@ -413,10 +420,11 @@   inlineListToTexinfo lst inlineToTexinfo (Str str) = return $ text (stringToTexinfo str) inlineToTexinfo (Math _ str) = return $ inCmd "math" $ text str-inlineToTexinfo (RawInline f str) | f == "latex" || f == "tex" =-  return $ text "@tex" $$ text str $$ text "@end tex"-inlineToTexinfo (RawInline "texinfo" str) = return $ text str-inlineToTexinfo (RawInline _ _) = return empty+inlineToTexinfo (RawInline f str)+  | f == "latex" || f == "tex" =+                      return $ text "@tex" $$ text str $$ text "@end tex"+  | f == "texinfo" =  return $ text str+  | otherwise      =  return empty inlineToTexinfo (LineBreak) = return $ text "@*" inlineToTexinfo Space = return $ char ' ' 
src/Text/Pandoc/Writers/Textile.hs view
@@ -33,7 +33,9 @@ import Text.Pandoc.Definition import Text.Pandoc.Options import Text.Pandoc.Shared-import Text.Pandoc.Templates (renderTemplate)+import Text.Pandoc.Pretty (render)+import Text.Pandoc.Writers.Shared+import Text.Pandoc.Templates (renderTemplate') import Text.Pandoc.XML ( escapeStringForXML ) import Data.List ( intercalate ) import Control.Monad.State@@ -53,13 +55,15 @@  -- | Return Textile representation of document. pandocToTextile :: WriterOptions -> Pandoc -> State WriterState String-pandocToTextile opts (Pandoc _ blocks) = do+pandocToTextile opts (Pandoc meta blocks) = do+  metadata <- metaToJSON opts (blockListToTextile opts)+                 (inlineListToTextile opts) meta   body <- blockListToTextile opts blocks   notes <- liftM (unlines . reverse . stNotes) get   let main = body ++ if null notes then "" else ("\n\n" ++ notes)-  let context = writerVariables opts ++ [ ("body", main) ]+  let context = defField "body" main metadata   if writerStandalone opts-     then return $ renderTemplate context $ writerTemplate opts+     then return $ renderTemplate' (writerTemplate opts) context      else return main  withUseTags :: State WriterState a -> State WriterState a@@ -98,6 +102,12 @@  blockToTextile _ Null = return "" +blockToTextile opts (Div attr bs) = do+  let startTag = render Nothing $ tagWithAttrs "div" attr+  let endTag = "</div>"+  contents <- blockListToTextile opts bs+  return $ startTag ++ "\n\n" ++ contents ++ "\n\n" ++ endTag ++ "\n"+ blockToTextile opts (Plain inlines) =   inlineListToTextile opts inlines @@ -115,10 +125,9 @@               then "<p>" ++ contents ++ "</p>"               else contents ++ if null listLevel then "\n" else "" -blockToTextile _ (RawBlock f str) =-  if f == "html" || f == "textile"-     then return str-     else return ""+blockToTextile _ (RawBlock f str)+  | f == Format "html" || f == Format "textile" = return str+  | otherwise                                   = return ""  blockToTextile _ HorizontalRule = return "<hr />\n" @@ -340,6 +349,9 @@ -- | Convert Pandoc inline element to Textile. inlineToTextile :: WriterOptions -> Inline -> State WriterState String +inlineToTextile opts (Span _ lst) =+  inlineListToTextile opts lst+ inlineToTextile opts (Emph lst) = do   contents <- inlineListToTextile opts lst   return $ if '_' `elem` contents@@ -392,10 +404,9 @@ inlineToTextile _ (Math _ str) =   return $ "<span class=\"math\">" ++ escapeStringForXML str ++ "</math>" -inlineToTextile _ (RawInline f str) =-  if f == "html" || f == "textile"-     then return str-     else return ""+inlineToTextile _ (RawInline f str)+  | f == Format "html" || f == Format "textile" = return str+  | otherwise                                   = return ""  inlineToTextile _ (LineBreak) = return "\n" 
src/Text/Pandoc/XML.hs view
@@ -27,8 +27,7 @@  Functions for escaping and formatting XML. -}-module Text.Pandoc.XML ( stripTags,-                         escapeCharForXML,+module Text.Pandoc.XML ( escapeCharForXML,                          escapeStringForXML,                          inTags,                          selfClosingTag,@@ -39,17 +38,7 @@  import Text.Pandoc.Pretty import Data.Char (ord, isAscii, isSpace)-import Text.HTML.TagSoup.Entity (lookupEntity)---- | Remove everything between <...>-stripTags :: String -> String-stripTags ('<':xs) =-  let (_,rest) = break (=='>') xs-  in  if null rest-         then ""-         else stripTags (tail rest) -- leave off >-stripTags (x:xs) = x : stripTags xs-stripTags [] = []+import Text.Pandoc.Compat.TagSoupEntity (lookupEntity)  -- | Escape one character as needed for XML. escapeCharForXML :: Char -> String@@ -64,11 +53,18 @@ escapeStringForXML :: String -> String escapeStringForXML = concatMap escapeCharForXML +-- | Escape newline characters as &#10;+escapeNls :: String -> String+escapeNls (x:xs)+  | x == '\n' = "&#10;" ++ escapeNls xs+  | otherwise = x : escapeNls xs+escapeNls []     = []+ -- | Return a text object with a string of formatted XML attributes. attributeList :: [(String, String)] -> Doc attributeList = hcat . map   (\(a, b) -> text (' ' : escapeStringForXML a ++ "=\"" ++-  escapeStringForXML b ++ "\""))+  escapeNls (escapeStringForXML b) ++ "\""))  -- | Put the supplied contents between start and end tags of tagType, --   with specified attributes and (if specified) indentation.
tests/Tests/Arbitrary.hs view
@@ -41,8 +41,8 @@ arbInline n = frequency $ [ (60, liftM Str realString)                           , (60, return Space)                           , (10, liftM2 Code arbAttr realString)-                          , (5,  elements [ RawInline "html" "<a id=\"eek\">"-                                          , RawInline "latex" "\\my{command}" ])+                          , (5,  elements [ RawInline (Format "html") "<a id=\"eek\">"+                                          , RawInline (Format "latex") "\\my{command}" ])                           ] ++ [ x | x <- nesters, n > 1]    where nesters = [ (10,  liftM Emph $ arbInlines (n-1))                    , (10,  liftM Strong $ arbInlines (n-1))@@ -74,9 +74,9 @@ arbBlock n = frequency $ [ (10, liftM Plain $ arbInlines (n-1))                          , (15, liftM Para $ arbInlines (n-1))                          , (5,  liftM2 CodeBlock arbAttr realString)-                         , (2,  elements [ RawBlock "html"+                         , (2,  elements [ RawBlock (Format "html")                                             "<div>\n*&amp;*\n</div>"-                                         , RawBlock "latex"+                                         , RawBlock (Format "latex")                                             "\\begin[opt]{env}\nhi\n{\\end{env}"                                          ])                          , (5,  do x1 <- choose (1 :: Int, 6)@@ -150,10 +150,13 @@  instance Arbitrary Meta where         arbitrary-          = do x1 <- arbitrary-               x2 <- liftM (filter (not . null)) arbitrary-               x3 <- arbitrary-               return (Meta x1 x2 x3)+          = do (x1 :: Inlines) <- arbitrary+               (x2 :: [Inlines]) <- liftM (filter (not . isNull)) arbitrary+               (x3 :: Inlines) <- arbitrary+               return $ setMeta "title" x1+                      $ setMeta "author" x2+                      $ setMeta "date" x3+                      $ nullMeta  instance Arbitrary Alignment where         arbitrary
tests/Tests/Helpers.hs view
@@ -20,6 +20,7 @@ import Text.Pandoc.Writers.Native (writeNative) import qualified Test.QuickCheck.Property as QP import Data.Algorithm.Diff+import qualified Data.Map as M  test :: (ToString a, ToString b, ToString c)      => (a -> b)  -- ^ function to test@@ -58,8 +59,9 @@ instance ToString Pandoc where   toString d = writeNative def{ writerStandalone = s } $ toPandoc d    where s = case d of-                  (Pandoc (Meta [] [] []) _) -> False-                  _                          -> True+                  (Pandoc (Meta m) _)+                    | M.null m  -> False+                    | otherwise -> True  instance ToString Blocks where   toString = writeNative def . toPandoc
tests/Tests/Old.hs view
@@ -63,7 +63,10 @@               "markdown-reader-more.txt" "markdown-reader-more.native"             , lhsReaderTest "markdown+lhs"             ]-          , testGroup "citations" markdownCitationTests+          , testGroup "citations"+            [ test "citations" ["-r", "markdown", "-w", "native"]+              "markdown-citations.txt" "markdown-citations.native"+            ]           ]         , testGroup "rst"           [ testGroup "writer" (writerTests "rst" ++ lhsWriterTests "rst")@@ -124,6 +127,16 @@           , test "reader" ["-r", "mediawiki", "-w", "native", "-s"]             "mediawiki-reader.wiki" "mediawiki-reader.native"           ]+        , testGroup "opml"+          [ test "basic" ["-r", "native", "-w", "opml", "--columns=78", "-s"]+             "testsuite.native" "writer.opml"+          , test "reader" ["-r", "opml", "-w", "native", "-s"]+            "opml-reader.opml" "opml-reader.native"+          ]+        , testGroup "haddock"+          [ test "reader" ["-r", "haddock", "-w", "native", "-s"]+            "haddock-reader.haddock" "haddock-reader.native"+          ]         , testGroup "other writers" $ map (\f -> testGroup f $ writerTests f)           [ "opendocument" , "context" , "texinfo"           , "man" , "plain" , "rtf", "org", "asciidoc"@@ -179,19 +192,6 @@     splitTags ((c,_):rest) = c : splitTags rest     ignoreBinary = unlines . filter (not . startsWith "<binary ") . lines     startsWith tag str = all (uncurry (==)) $ zip tag str--markdownCitationTests :: [Test]-markdownCitationTests-  =  map styleToTest ["chicago-author-date","ieee","mhra"]-     ++ [test "natbib" wopts "markdown-citations.txt"-         "markdown-citations.txt"]-  where-    ropts             = ["-r", "markdown", "-w", "markdown", "--bibliography",-                         "biblio.bib", "--no-wrap"]-    wopts             = ["-r", "markdown", "-w", "markdown", "--no-wrap", "--natbib"]-    styleToTest style = test style (ropts ++ ["--csl", style ++ ".csl"])-                        "markdown-citations.txt"-                        ("markdown-citations." ++ style ++ ".txt")  -- | Run a test without normalize function, return True if test passed. test :: String    -- ^ Title of test
tests/Tests/Readers/LaTeX.hs view
@@ -28,17 +28,17 @@          , testGroup "headers"           [ "level 1" =:-            "\\section{header}" =?> header 1 "header"+            "\\section{header}" =?> headerWith ("header",[],[]) 1 "header"           , "level 2" =:-            "\\subsection{header}" =?> header 2 "header"+            "\\subsection{header}" =?> headerWith ("header",[],[]) 2 "header"           , "level 3" =:-            "\\subsubsection{header}" =?> header 3 "header"+            "\\subsubsection{header}" =?> headerWith ("header",[],[]) 3 "header"           , "emph" =:             "\\section{text \\emph{emph}}" =?>-             header 1 ("text" <> space <> emph "emph")+             headerWith ("text-emph",[],[]) 1 ("text" <> space <> emph "emph")           , "link" =:             "\\section{text \\href{/url}{link}}" =?>-              header 1 ("text" <> space <> link "/url" "" "link")+              headerWith ("text-link",[],[]) 1 ("text" <> space <> link "/url" "" "link")           ]          , testGroup "math"@@ -55,6 +55,13 @@             "hi % this is a comment\nthere\n" =?> para "hi there"           ] +        , testGroup "code blocks"+          [ "identifier" =:+            "\\begin{lstlisting}[label=test]\\end{lstlisting}" =?> codeBlockWith ("test", [], [("label","test")]) ""+          , "no identifier" =:+            "\\begin{lstlisting}\\end{lstlisting}" =?> codeBlock ""+          ]+         , testGroup "citations"           [ natbibCitations           , biblatexCitations@@ -79,14 +86,14 @@     =?> para (cite [baseCitation] (rt "\\citet{item1}"))   , "suffix" =: "\\citet[p.~30]{item1}"     =?> para-        (cite [baseCitation{ citationSuffix = toList $ text ", p.\160\&30" }] (rt "\\citet[p.~30]{item1}"))+        (cite [baseCitation{ citationSuffix = toList $ text "p.\160\&30" }] (rt "\\citet[p.~30]{item1}"))   , "suffix long" =: "\\citet[p.~30, with suffix]{item1}"     =?> para (cite [baseCitation{ citationSuffix =-                       toList $ text ", p.\160\&30, with suffix" }] (rt "\\citet[p.~30, with suffix]{item1}"))+                       toList $ text "p.\160\&30, with suffix" }] (rt "\\citet[p.~30, with suffix]{item1}"))   , "multiple" =: "\\citeauthor{item1} \\citetext{\\citeyear{item1}; \\citeyear[p.~30]{item2}; \\citealp[see also][]{item3}}"     =?> para (cite [baseCitation{ citationMode = AuthorInText }                    ,baseCitation{ citationMode = SuppressAuthor-                                , citationSuffix = [Str ",",Space,Str "p.\160\&30"]+                                , citationSuffix = [Str "p.\160\&30"]                                 , citationId = "item2" }                    ,baseCitation{ citationId = "item3"                                 , citationPrefix = [Str "see",Space,Str "also"]@@ -95,28 +102,28 @@   , "group" =: "\\citetext{\\citealp[see][p.~34--35]{item1}; \\citealp[also][chap. 3]{item3}}"     =?> para (cite [baseCitation{ citationMode = NormalCitation                                 , citationPrefix = [Str "see"]-                                , citationSuffix = [Str ",",Space,Str "p.\160\&34\8211\&35"] }+                                , citationSuffix = [Str "p.\160\&34\8211\&35"] }                    ,baseCitation{ citationMode = NormalCitation                                 , citationId = "item3"                                 , citationPrefix = [Str "also"]-                                , citationSuffix = [Str ",",Space,Str "chap.",Space,Str "3"] }+                                , citationSuffix = [Str "chap.",Space,Str "3"] }                    ] (rt "\\citetext{\\citealp[see][p.~34--35]{item1}; \\citealp[also][chap. 3]{item3}}"))   , "suffix and locator" =: "\\citep[pp.~33, 35--37, and nowhere else]{item1}"     =?> para (cite [baseCitation{ citationMode = NormalCitation-                                , citationSuffix = [Str ",",Space,Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\citep[pp.~33, 35--37, and nowhere else]{item1}"))+                                , citationSuffix = [Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\citep[pp.~33, 35--37, and nowhere else]{item1}"))   , "suffix only" =: "\\citep[and nowhere else]{item1}"     =?> para (cite [baseCitation{ citationMode = NormalCitation-                                , citationSuffix = toList $ text ", and nowhere else" }] (rt "\\citep[and nowhere else]{item1}"))+                                , citationSuffix = toList $ text "and nowhere else" }] (rt "\\citep[and nowhere else]{item1}"))   , "no author" =: "\\citeyearpar{item1}, and now Doe with a locator \\citeyearpar[p.~44]{item2}"     =?> para (cite [baseCitation{ citationMode = SuppressAuthor }] (rt "\\citeyearpar{item1}") <>               text ", and now Doe with a locator " <>               cite [baseCitation{ citationMode = SuppressAuthor-                                , citationSuffix = [Str ",",Space,Str "p.\160\&44"]+                                , citationSuffix = [Str "p.\160\&44"]                                 , citationId = "item2" }] (rt "\\citeyearpar[p.~44]{item2}"))   , "markup" =: "\\citep[\\emph{see}][p. \\textbf{32}]{item1}"     =?> para (cite [baseCitation{ citationMode = NormalCitation                                 , citationPrefix = [Emph [Str "see"]]-                                , citationSuffix = [Str ",",Space,Str "p.",Space,+                                , citationSuffix = [Str "p.",Space,                                     Strong [Str "32"]] }] (rt "\\citep[\\emph{see}][p. \\textbf{32}]{item1}"))   ] @@ -126,14 +133,14 @@     =?> para (cite [baseCitation] (rt "\\textcite{item1}"))   , "suffix" =: "\\textcite[p.~30]{item1}"     =?> para-        (cite [baseCitation{ citationSuffix = toList $ text ", p.\160\&30" }] (rt "\\textcite[p.~30]{item1}"))+        (cite [baseCitation{ citationSuffix = toList $ text "p.\160\&30" }] (rt "\\textcite[p.~30]{item1}"))   , "suffix long" =: "\\textcite[p.~30, with suffix]{item1}"     =?> para (cite [baseCitation{ citationSuffix =-                       toList $ text ", p.\160\&30, with suffix" }] (rt "\\textcite[p.~30, with suffix]{item1}"))+                       toList $ text "p.\160\&30, with suffix" }] (rt "\\textcite[p.~30, with suffix]{item1}"))   , "multiple" =: "\\textcites{item1}[p.~30]{item2}[see also][]{item3}"     =?> para (cite [baseCitation{ citationMode = AuthorInText }                    ,baseCitation{ citationMode = NormalCitation-                                , citationSuffix = [Str ",",Space,Str "p.\160\&30"]+                                , citationSuffix = [Str "p.\160\&30"]                                 , citationId = "item2" }                    ,baseCitation{ citationId = "item3"                                 , citationPrefix = [Str "see",Space,Str "also"]@@ -142,28 +149,28 @@   , "group" =: "\\autocites[see][p.~34--35]{item1}[also][chap. 3]{item3}"     =?> para (cite [baseCitation{ citationMode = NormalCitation                                 , citationPrefix = [Str "see"]-                                , citationSuffix = [Str ",",Space,Str "p.\160\&34\8211\&35"] }+                                , citationSuffix = [Str "p.\160\&34\8211\&35"] }                    ,baseCitation{ citationMode = NormalCitation                                 , citationId = "item3"                                 , citationPrefix = [Str "also"]-                                , citationSuffix = [Str ",",Space,Str "chap.",Space,Str "3"] }+                                , citationSuffix = [Str "chap.",Space,Str "3"] }                    ] (rt "\\autocites[see][p.~34--35]{item1}[also][chap. 3]{item3}"))   , "suffix and locator" =: "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"     =?> para (cite [baseCitation{ citationMode = NormalCitation-                                , citationSuffix = [Str ",",Space,Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"))+                                , citationSuffix = [Str "pp.\160\&33,",Space,Str "35\8211\&37,",Space,Str "and",Space,Str "nowhere",Space, Str "else"] }] (rt "\\autocite[pp.~33, 35--37, and nowhere else]{item1}"))   , "suffix only" =: "\\autocite[and nowhere else]{item1}"     =?> para (cite [baseCitation{ citationMode = NormalCitation-                                , citationSuffix = toList $ text ", and nowhere else" }] (rt "\\autocite[and nowhere else]{item1}"))+                                , citationSuffix = toList $ text "and nowhere else" }] (rt "\\autocite[and nowhere else]{item1}"))   , "no author" =: "\\autocite*{item1}, and now Doe with a locator \\autocite*[p.~44]{item2}"     =?> para (cite [baseCitation{ citationMode = SuppressAuthor }] (rt "\\autocite*{item1}") <>               text ", and now Doe with a locator " <>               cite [baseCitation{ citationMode = SuppressAuthor-                                , citationSuffix = [Str ",",Space,Str "p.\160\&44"]+                                , citationSuffix = [Str "p.\160\&44"]                                 , citationId = "item2" }] (rt "\\autocite*[p.~44]{item2}"))   , "markup" =: "\\autocite[\\emph{see}][p. \\textbf{32}]{item1}"     =?> para (cite [baseCitation{ citationMode = NormalCitation                                 , citationPrefix = [Emph [Str "see"]]-                                , citationSuffix = [Str ",",Space,Str "p.",Space,+                                , citationSuffix = [Str "p.",Space,                                     Strong [Str "32"]] }] (rt "\\autocite[\\emph{see}][p. \\textbf{32}]{item1}"))   , "parencite" =: "\\parencite{item1}"     =?> para (cite [baseCitation{ citationMode = NormalCitation }] (rt "\\parencite{item1}"))
tests/Tests/Readers/Markdown.hs view
@@ -24,7 +24,7 @@ testBareLink :: (String, Inlines) -> Test testBareLink (inp, ils) =   test (readMarkdown def{ readerExtensions =-             Set.fromList [Ext_autolink_bare_uris] })+             Set.fromList [Ext_autolink_bare_uris, Ext_raw_html] })        inp (inp, doc $ para ils)  autolink :: String -> Inlines@@ -34,6 +34,9 @@ bareLinkTests =   [ ("http://google.com is a search engine.",      autolink "http://google.com" <> " is a search engine.")+  , ("<a href=\"http://foo.bar.baz\">http://foo.bar.baz</a>",+     rawInline "html" "<a href=\"http://foo.bar.baz\">" <>+     "http://foo.bar.baz" <> rawInline "html" "</a>")   , ("Try this query: http://google.com?search=fish&time=hour.",      "Try this query: " <> autolink "http://google.com?search=fish&time=hour" <> ".")   , ("HTTPS://GOOGLE.COM,",@@ -155,6 +158,11 @@           ]         , testGroup "bare URIs"           (map testBareLink bareLinkTests)+        , testGroup "Headers"+          [ "blank line before header" =:+            "\n# Header\n"+            =?> headerWith ("header",[],[]) 1 "Header"+          ]         , testGroup "smart punctuation"           [ test markdownSmart "quote before ellipses"             ("'...hi'"
tests/Tests/Readers/RST.hs view
@@ -1,4 +1,4 @@-{-# LANGUAGE OverloadedStrings #-}+{-# LANGUAGE OverloadedStrings, ScopedTypeVariables #-} module Tests.Readers.RST (tests) where  import Text.Pandoc.Definition@@ -7,9 +7,10 @@ import Tests.Arbitrary() import Text.Pandoc.Builder import Text.Pandoc+import Data.Monoid (mempty)  rst :: String -> Pandoc-rst = readRST def+rst = readRST def{ readerStandalone = True }  infix 4 =: (=:) :: ToString c@@ -21,14 +22,12 @@           "| a\n|\n|  b" =?> para (str "a") <>                              para (str "\160b")         , "field list" =: unlines-             [ ":Hostname: media08"+             [ "para"+             , ""+             , ":Hostname: media08"              , ":IP address: 10.0.0.19"              , ":Size: 3ru"-             , ":Date: 2001-08-16"              , ":Version: 1"-             , ":Authors: - Me"-             , "              - Myself"-             , "              - I"              , ":Indentation: Since the field marker may be quite long, the second"              , "   and subsequent lines of the field body do not have to line up"              , "   with the first line, but they must be indented relative to the"@@ -36,10 +35,9 @@              , ":Parameter i: integer"              , ":Final: item"              , "  on two lines" ]-           =?> ( setAuthors ["Me","Myself","I"]-               $ setDate "2001-08-16"-               $ doc-               $ definitionList [ (str "Hostname", [para "media08"])+           =?> ( doc+               $ para "para" <>+                 definitionList [ (str "Hostname", [para "media08"])                                 , (str "IP address", [para "10.0.0.19"])                                 , (str "Size", [para "3ru"])                                 , (str "Version", [para "1"])@@ -47,6 +45,20 @@                                 , (str "Parameter i", [para "integer"])                                 , (str "Final", [para "item on two lines"])                               ])+        , "initial field list" =: unlines+             [ "====="+             , "Title"+             , "====="+             , "--------"+             , "Subtitle"+             , "--------"+             , ""+             , ":Version: 1"+             ]+           =?> ( setMeta "version" (para "1")+               $ setMeta "title" ("Title" :: Inlines)+               $ setMeta "subtitle" ("Subtitle" :: Inlines)+               $ doc mempty )         , "URLs with following punctuation" =:           ("http://google.com, http://yahoo.com; http://foo.bar.baz.\n" ++            "http://foo.bar/baz_(bam) (http://foo.bar)") =?>
+ tests/Tests/Walk.hs view
@@ -0,0 +1,47 @@+{-# LANGUAGE ScopedTypeVariables, FlexibleContexts #-}+module Tests.Walk (tests) where++import Text.Pandoc.Definition+import Text.Pandoc.Walk+import Test.Framework+import Tests.Helpers+import Data.Char (toUpper)+import Tests.Arbitrary()+import Data.Generics+import Data.Monoid++tests :: [Test]+tests = [ testGroup "Walk"+          [ property "p_walk inlineTrans" (p_walk inlineTrans)+          , property "p_walk blockTrans" (p_walk blockTrans)+          , property "p_query inlineQuery" (p_query inlineQuery)+          , property "p_query blockQuery" (p_query blockQuery)+          ]+        ]++p_walk :: (Typeable a, Walkable a Pandoc)+       => (a -> a) -> Pandoc -> Bool+p_walk f = (\(d :: Pandoc) -> everywhere (mkT f) d == walk f d)++p_query :: (Eq a, Typeable a1, Monoid a, Walkable a1 Pandoc)+        => (a1 -> a) -> Pandoc -> Bool+p_query f = (\(d :: Pandoc) -> everything mappend (mempty `mkQ` f) d == query f d)++inlineTrans :: Inline -> Inline+inlineTrans (Str xs) = Str $ map toUpper xs+inlineTrans (Emph xs) = Strong xs+inlineTrans x = x++blockTrans :: Block -> Block+blockTrans (Plain xs) = Para xs+blockTrans (BlockQuote xs) = Div ("",["special"],[]) xs+blockTrans x = x++inlineQuery :: Inline -> String+inlineQuery (Str xs) = xs+inlineQuery _ = ""++blockQuery :: Block -> [Int]+blockQuery (Header lev _ _) = [lev]+blockQuery _ = []+
tests/Tests/Writers/HTML.hs view
@@ -6,7 +6,6 @@ import Text.Pandoc import Tests.Helpers import Tests.Arbitrary()-import Text.Highlighting.Kate (languages) -- null if no hl support  html :: (ToString a, ToPandoc a) => a -> String html = writeHtmlString def{ writerWrapText = False } . toPandoc@@ -32,9 +31,7 @@ tests = [ testGroup "inline code"           [ "basic" =: code "@&" =?> "<code>@&amp;</code>"           , "haskell" =: codeWith ("",["haskell"],[]) ">>="-            =?> if null languages-                   then "<code class=\"haskell\">&gt;&gt;=</code>"-                   else "<code class=\"sourceCode haskell\"><span class=\"fu\">&gt;&gt;=</span></code>"+            =?> "<code class=\"haskell\">&gt;&gt;=</code>"           , "nolanguage" =: codeWith ("",["nolanguage"],[]) ">>="             =?> "<code class=\"nolanguage\">&gt;&gt;=</code>"           ]
tests/Tests/Writers/LaTeX.hs view
@@ -10,6 +10,9 @@ latex :: (ToString a, ToPandoc a) => a -> String latex = writeLaTeX def . toPandoc +latexListing :: (ToString a, ToPandoc a) => a -> String+latexListing = writeLaTeX def{ writerListings = True } . toPandoc+ {-   "my test" =: X =?> Y @@ -31,9 +34,19 @@ tests = [ testGroup "code blocks"           [ "in footnotes" =: note (para "hi" <> codeBlock "hi") =?>             "\\footnote{hi\n\n\\begin{Verbatim}\nhi\n\\end{Verbatim}\n}"+          , test latexListing "identifier" $ codeBlockWith ("id",[],[]) "hi" =?>+            ("\\begin{lstlisting}[label=id]\nhi\n\\end{lstlisting}" :: String)+          , test latexListing "no identifier" $ codeBlock "hi" =?>+            ("\\begin{lstlisting}\nhi\n\\end{lstlisting}" :: String)           ]         , testGroup "math"           [ "escape |" =: para (math "\\sigma|_{\\{x\\}}") =?>-            "$\\sigma\\vert _{\\{x\\}}$"+            "$\\sigma|_{\\{x\\}}$"+          ]+        , testGroup "headers"+          [ "unnumbered header" =:+            headerWith ("foo",["unnumbered"],[]) 1+              (text "Header 1" <> note (plain $ text "note")) =?>+            "\\section*{Header 1\\footnote{note}}\\label{foo}\n\\addcontentsline{toc}{section}{Header 1}\n"           ]         ]
tests/Tests/Writers/Native.hs view
@@ -12,7 +12,7 @@  p_write_blocks_rt :: [Block] -> Bool p_write_blocks_rt bs = length bs > 20 ||-  read (writeNative def (Pandoc (Meta [] [] []) bs)) ==+  read (writeNative def (Pandoc nullMeta bs)) ==   bs  tests :: [Test]
− tests/biblio.bib
@@ -1,26 +0,0 @@-@Book{item1,-author="John Doe",-title="First Book",-year="2005",-address="Cambridge",-publisher="Cambridge University Press"-}--@Article{item2,-author="John Doe",-title="Article",-year="2006",-journal="Journal of Generic Studies",-volume="6",-pages="33-34"-}--@InCollection{пункт3,-author="John Doe and Jenny Roe",-title="Why Water Is Wet",-booktitle="Third Book",-editor="Sam Smith",-publisher="Oxford University Press",-address="Oxford",-year="2007"-}
− tests/chicago-author-date.csl
@@ -1,422 +0,0 @@-<?xml version="1.0" encoding="utf-8"?>-<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="sort-only">-   <info>-      <title>Chicago Manual of Style (Author-Date format)</title>-      <id>http://www.zotero.org/styles/chicago-author-date</id>-      <link href="http://www.zotero.org/styles/chicago-author-date" rel="self"/>-      <author>-         <name>Julian Onions</name>-         <email>julian.onions@gmail.com</email>-      </author>-      <contributor>-         <name>Sebastian Karcher</name>-      </contributor>-      <category citation-format="author-date"/>-      <category field="generic-base"/>-      <updated>2011-11-17T22:01:05+00:00</updated>-      <summary>The author-date variant of the Chicago style</summary>-      <link href="http://www.chicagomanualofstyle.org/tools_citationguide.html" rel="documentation"/>-      <rights>This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/</rights>-   </info>-   <macro name="secondary-contributors">-      <choose>-         <if type="chapter paper-conference" match="none">-            <group delimiter=". ">-               <choose>-                  <if variable="author">-                     <names variable="editor">-                        <label form="verb-short" text-case="capitalize-first" suffix=". " strip-periods="true"/>-                        <name and="text" delimiter=", "/>-                     </names>-                  </if>-               </choose>-               <choose>-                  <if variable="author editor" match="any">-                     <names variable="translator">-                        <label form="verb-short" text-case="capitalize-first" suffix=". " strip-periods="true"/>-                        <name and="text" delimiter=", "/>-                     </names>-                  </if>-               </choose>-            </group>-         </if>-      </choose>-   </macro>-   <macro name="container-contributors">-      <choose>-         <if type="chapter paper-conference" match="any">-            <group prefix="," delimiter=", ">-               <choose>-                  <if variable="author">-                     <names variable="editor">-                        <label form="verb-short" prefix=" " text-case="lowercase" suffix=". " strip-periods="true"/>-                        <name and="text" delimiter=", "/>-                     </names>-                     <choose>-                        <if variable="container-author">-                           <group>-                              <names variable="container-author">-                                 <label form="verb-short" prefix=" " text-case="lowercase" suffix=" " strip-periods="true"/>-                                 <name and="text" delimiter=", "/>-                              </names>-                           </group>-                        </if>-                     </choose>-                  </if>-               </choose>-               <choose>-                  <if variable="author editor" match="any">-                     <names variable="translator">-                        <label form="verb-short" prefix=" " text-case="lowercase" suffix=". " strip-periods="true"/>-                        <name and="text" delimiter=", "/>-                     </names>-                  </if>-               </choose>-            </group>-         </if>-      </choose>-   </macro>-   <macro name="anon">-      <text term="anonymous" form="short" text-case="capitalize-first" suffix="." strip-periods="true"/>-   </macro>-   <macro name="editor">-      <names variable="editor">-         <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>-         <label form="short" prefix=", " suffix="." strip-periods="true"/>-      </names>-   </macro>-   <macro name="translator">-      <names variable="translator">-         <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>-         <label form="verb-short" prefix=", " suffix="." strip-periods="true"/>-      </names>-   </macro>-   <macro name="recipient">-      <choose>-         <if type="personal_communication">-            <choose>-               <if variable="genre">-                  <text variable="genre" text-case="capitalize-first"/>-               </if>-               <else>-                  <text term="letter" text-case="capitalize-first"/>-               </else>-            </choose>-         </if>-      </choose>-      <names variable="recipient" delimiter=", ">-         <label form="verb" prefix=" " text-case="lowercase" suffix=" "/>-         <name and="text" delimiter=", "/>-      </names>-   </macro>-   <macro name="contributors">-      <names variable="author">-         <name and="text" name-as-sort-order="first" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>-         <label form="verb-short" prefix=", " suffix="." text-case="lowercase" strip-periods="true"/>-         <substitute>-            <text macro="editor"/>-            <text macro="translator"/>-            <text macro="anon"/>-         </substitute>-      </names>-      <text macro="recipient"/>-   </macro>-   <macro name="contributors-short">-      <names variable="author">-         <name form="short" and="text" delimiter=", " initialize-with=". "/>-         <substitute>-            <names variable="editor"/>-            <names variable="translator"/>-            <text macro="anon"/>-         </substitute>-      </names>-   </macro>-   <macro name="interviewer">-      <names variable="interviewer" delimiter=", ">-         <label form="verb" prefix=" " text-case="capitalize-first" suffix=" "/>-         <name and="text" delimiter=", "/>-      </names>-   </macro>-   <macro name="archive">-      <group delimiter=". ">-         <text variable="archive_location" text-case="capitalize-first"/>-         <text variable="archive"/>-         <text variable="archive-place"/>-      </group>-   </macro>-   <macro name="access">-      <group delimiter=". ">-         <choose>-            <if type="graphic report" match="any">-               <text macro="archive"/>-            </if>-            <else-if type="bill book graphic legal_case motion_picture report song article-magazine article-newspaper thesis chapter paper-conference" match="none">-               <text macro="archive"/>-            </else-if>-         </choose>-         <text variable="DOI" prefix="doi:"/>-         <choose>-            <if type="legal_case" match="none">-               <text variable="URL"/>-            </if>-         </choose>-      </group>-   </macro>-   <macro name="title">-      <choose>-         <if variable="title" match="none">-            <choose>-               <if type="personal_communication" match="none">-                  <text variable="genre" text-case="capitalize-first"/>-               </if>-            </choose>-         </if>-         <else-if type="bill book graphic legal_case motion_picture report song" match="any">-            <text variable="title" font-style="italic"/>-         </else-if>-	 <else>-            <text variable="title" quotes="true"/>-         </else>-      </choose>-   </macro>-   <macro name="edition">-      <choose>-         <if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any">-            <choose>-               <if is-numeric="edition">-                  <group delimiter=" ">-                     <number variable="edition" form="ordinal"/>-                     <text term="edition" form="short" suffix="." strip-periods="true"/>-                  </group>-               </if>-               <else>-                  <text variable="edition" suffix="."/>-               </else>-            </choose>-         </if>-      </choose>-   </macro>-   <macro name="locators">-      <choose>-         <if type="article-journal">-            <text variable="volume" prefix=" "/>-            <text variable="issue" prefix=" (" suffix=")"/>-         </if>-         <else-if type="legal_case">-            <text variable="volume" prefix=", "/>-            <text variable="container-title" prefix=" "/>-            <text variable="page" prefix=" "/>-         </else-if>-         <else-if type="bill book graphic legal_case motion_picture report song" match="any">-            <group prefix=". " delimiter=". ">-               <group>-                  <text term="volume" form="short" text-case="capitalize-first" suffix=". " strip-periods="true"/>-                  <number variable="volume" form="numeric"/>-               </group>-               <group>-                  <number variable="number-of-volumes" form="numeric"/>-                  <text term="volume" form="short" prefix=" " suffix="." plural="true" strip-periods="true"/>-               </group>-            </group>-         </else-if>-         <else-if type="chapter paper-conference" match="any">-            <choose>-               <if variable="page" match="none">-                  <group prefix=". ">-                     <text term="volume" form="short" text-case="capitalize-first" suffix=". " strip-periods="true"/>-                     <number variable="volume" form="numeric"/>-                  </group>-               </if>-            </choose>-         </else-if>-      </choose>-   </macro>-   <macro name="locators-chapter">-      <choose>-         <if type="chapter paper-conference" match="any">-            <choose>-               <if variable="page">-                  <group prefix=", ">-                     <text variable="volume" suffix=":"/>-                     <text variable="page"/>-                  </group>-               </if>-            </choose>-         </if>-      </choose>-   </macro>-   <macro name="locators-article">-      <choose>-         <if type="article-newspaper">-            <group prefix=", " delimiter=", ">-               <group>-                  <text variable="edition" suffix=" "/>-                  <text term="edition" prefix=" "/>-               </group>-               <group>-                  <text term="section" form="short" suffix=". " strip-periods="true"/>-                  <text variable="section"/>-               </group>-            </group>-         </if>-         <else-if type="article-journal">-            <text variable="page" prefix=": "/>-         </else-if>-      </choose>-   </macro>-   <macro name="point-locators">-      <choose>-         <if variable="locator">-            <choose>-               <if locator="page" match="none">-                  <choose>-                     <if type="bill book graphic legal_case motion_picture report song" match="any">-                        <choose>-                           <if variable="volume">-                              <group>-                                 <text term="volume" form="short" text-case="lowercase" suffix=". " strip-periods="true"/>-                                 <number variable="volume" form="numeric"/>-                                 <label variable="locator" form="short" prefix=", " suffix=" "/>-                              </group>-                           </if>-                           <else>-                              <label variable="locator" form="short" suffix=" "/>-                           </else>-                        </choose>-                     </if>-                  </choose>-               </if>-               <else-if type="bill book graphic legal_case motion_picture report song" match="any">-                  <number variable="volume" form="numeric" suffix=":"/>-               </else-if>-            </choose>-            <text variable="locator"/>-         </if>-      </choose>-   </macro>-   <macro name="container-prefix">-      <text term="in" text-case="capitalize-first"/>-   </macro>-   <macro name="container-title">-      <choose>-         <if type="chapter paper-conference" match="any">-            <text macro="container-prefix" suffix=" "/>-         </if>-      </choose>-      <choose>-         <if type="legal_case" match="none">-            <text variable="container-title" font-style="italic"/>-         </if>-      </choose>-   </macro>-   <macro name="publisher">-      <group delimiter=": ">-         <text variable="publisher-place"/>-         <text variable="publisher"/>-      </group>-   </macro>-   <macro name="date">-      <date variable="issued">-         <date-part name="year"/>-      </date>-   </macro>-   <macro name="day-month">-      <date variable="issued">-         <date-part name="month"/>-         <date-part name="day" prefix=" "/>-      </date>-   </macro>-   <macro name="collection-title">-      <text variable="collection-title"/>-      <text variable="collection-number" prefix=" "/>-   </macro>-   <macro name="event">-      <group>-         <text term="presented at" suffix=" "/>-         <text variable="event"/>-      </group>-   </macro>-   <macro name="description">-      <choose>-         <if type="interview">-            <group delimiter=". ">-               <text macro="interviewer"/>-               <text variable="medium" text-case="capitalize-first"/>-            </group>-         </if>-         <else>-            <text variable="medium" text-case="capitalize-first" prefix=". "/>-         </else>-      </choose>-      <choose>-         <if variable="title" match="none"/>-         <else-if type="thesis"/>-         <else>-            <text variable="genre" text-case="capitalize-first" prefix=". "/>-         </else>-      </choose>-   </macro>-   <macro name="issue">-      <choose>-         <if type="article-journal">-            <text macro="day-month" prefix=" (" suffix=")"/>-         </if>-         <else-if type="legal_case">-            <text variable="authority" prefix=". "/>-         </else-if>-         <else-if type="speech">-            <group prefix=" " delimiter=", ">-               <text macro="event"/>-               <text macro="day-month"/>-               <text variable="event-place"/>-            </group>-         </else-if>-         <else-if type="article-newspaper article-magazine" match="any">-            <text macro="day-month" prefix=", "/>-         </else-if>-         <else>-            <group prefix=". " delimiter=", ">-               <choose>-                  <if type="thesis">-                     <text variable="genre" text-case="capitalize-first"/>-                  </if>-               </choose>-               <text macro="publisher"/>-               </group>-         </else>-      </choose>-   </macro>-   <citation et-al-min="4" et-al-use-first="1" disambiguate-add-year-suffix="true" disambiguate-add-names="true" disambiguate-add-givenname="true" givenname-disambiguation-rule="primary-name">-      <layout prefix="(" suffix=")" delimiter="; ">-         <group delimiter=", ">-            <group delimiter=" ">-               <text macro="contributors-short"/>-               <text macro="date"/>-            </group>-            <text macro="point-locators"/>-         </group>-      </layout>-   </citation>-   <bibliography hanging-indent="true" et-al-min="11" et-al-use-first="7" subsequent-author-substitute="———" entry-spacing="0">-      <sort>-         <key macro="contributors"/>-         <key variable="issued"/>-      </sort>-      <layout suffix=".">-         <text macro="contributors" suffix=". "/>-         <text macro="date" suffix=". "/>-         <text macro="title"/>-         <text macro="description"/>-         <text macro="secondary-contributors" prefix=". "/>-         <text macro="container-title" prefix=". "/>-         <text macro="container-contributors"/>-         <text macro="locators-chapter"/>-         <text macro="edition" prefix=". "/>-         <text macro="locators"/>-         <text macro="collection-title" prefix=". "/>-         <text macro="issue"/>-         <text macro="locators-article"/>-         <text macro="access" prefix=". "/>-      </layout>-   </bibliography>-</style>
tests/docbook-reader.native view
@@ -1,4 +1,4 @@-Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite"], docAuthors = [[Str "John",Space,Str "MacFarlane"],[Str "Anonymous"]], docDate = [Str "July",Space,Str "17,",Space,Str "2006"]})+Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]}) [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."] ,Header 1 ("",[],[]) [Str "Headers"] ,Header 2 ("",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]
+ tests/haddock-reader.haddock view
@@ -0,0 +1,65 @@+This file tests the Pandoc reader for Haddock.+We've borrowed examples from Haddock's documentation: <http://www.haskell.org/haddock/doc/html/ch03s08.html>.++The following characters have special meanings in Haddock, \/, \', \`, \", \@, \<, so they must be escaped.++\* This is a paragraph, not a list item.+\> This sentence is not code.+\>\>\> This is not an example.++The references &#x3BB;, &#x3bb; and &#955; all represent the lower-case letter lambda.++This is a code block:++> map :: (a -> b) -> [a] -> [b]+> map _ []     = []+> map f (x:xs) = f x : map f xs++This is another code block:++@+    f x = x + x.+    The \@...\@ code block /interprets markup normally/.+    "Module.Foo"+    \"Hello World\"+@++Haddock supports REPL examples:++>>> fib 10+55+>>> putStrLn "foo\nbar"+foo+bar++That was /really cool/!+I had no idea @fib 10 = 55@.++This module defines the type 'T'.+The identifier 'M.T' is not in scope+I don't have to escape my apostrophes; great, isn't it?+This is a reference to the "Foo" module.++This is a bulleted list:++    * first item++    * second item++This is an enumerated list:++    (1) first item++    2. second item++This is a definition list:++    [@foo@] The description of @foo@.++    [@bar@] The description of @bar@.++Here is a link: <http://haskell.org>++<http://haskell.org Haskell> is a fun language!++<http://example.com Click Here!>
+ tests/haddock-reader.native view
@@ -0,0 +1,31 @@+Pandoc (Meta {unMeta = fromList []})+[Para [Str "This",Space,Str "file",Space,Str "tests",Space,Str "the",Space,Str "Pandoc",Space,Str "reader",Space,Str "for",Space,Str "Haddock.",Space,Str "We've",Space,Str "borrowed",Space,Str "examples",Space,Str "from",Space,Str "Haddock's",Space,Str "documentation:",Space,Link [Str "http://www.haskell.org/haddock/doc/html/ch03s08.html"] ("http://www.haskell.org/haddock/doc/html/ch03s08.html","http://www.haskell.org/haddock/doc/html/ch03s08.html"),Str "."]+,Para [Str "The",Space,Str "following",Space,Str "characters",Space,Str "have",Space,Str "special",Space,Str "meanings",Space,Str "in",Space,Str "Haddock,",Space,Str "/,",Space,Str "',",Space,Str "`,",Space,Str "\",",Space,Str "@,",Space,Str "<,",Space,Str "so",Space,Str "they",Space,Str "must",Space,Str "be",Space,Str "escaped."]+,Para [Str "*",Space,Str "This",Space,Str "is",Space,Str "a",Space,Str "paragraph,",Space,Str "not",Space,Str "a",Space,Str "list",Space,Str "item.",Space,Str ">",Space,Str "This",Space,Str "sentence",Space,Str "is",Space,Str "not",Space,Str "code.",Space,Str ">>>",Space,Str "This",Space,Str "is",Space,Str "not",Space,Str "an",Space,Str "example."]+,Para [Str "The",Space,Str "references",Space,Str "\955,",Space,Str "\955",Space,Str "and",Space,Str "\955",Space,Str "all",Space,Str "represent",Space,Str "the",Space,Str "lower-case",Space,Str "letter",Space,Str "lambda."]+,Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "code",Space,Str "block:"]+,CodeBlock ("",["haskell"],[]) " map :: (a -> b) -> [a] -> [b]\n map _ []     = []\n map f (x:xs) = f x : map f xs\n"+,Para [Str "This",Space,Str "is",Space,Str "another",Space,Str "code",Space,Str "block:"]+,Para [Code ("",[],[]) "f",Space,Code ("",[],[]) "x",Space,Code ("",[],[]) "=",Space,Code ("",[],[]) "x",Space,Code ("",[],[]) "+",Space,Code ("",[],[]) "x.",Space,Code ("",[],[]) "The",Space,Code ("",[],[]) "@...@",Space,Code ("",[],[]) "code",Space,Code ("",[],[]) "block",Space,Emph [Code ("",[],[]) "interprets markup normally"],Code ("",[],[]) ".",Space,Code ("",["haskell"],[]) "Module.Foo",Space,Code ("",[],[]) "\"Hello",Space,Code ("",[],[]) "World\""]+,Para [Str "Haddock",Space,Str "supports",Space,Str "REPL",Space,Str "examples:"]+,Para [Code ("",["haskell","expr"],[]) "fib 10",LineBreak,Code ("",["result"],[]) "55"]+,Para [Code ("",["haskell","expr"],[]) "putStrLn \"foo\\nbar\"",LineBreak,Code ("",["result"],[]) "foo",LineBreak,Code ("",["result"],[]) "bar"]+,Para [Str "That",Space,Str "was",Space,Emph [Str "really cool"],Str "!",Space,Str "I",Space,Str "had",Space,Str "no",Space,Str "idea",Space,Code ("",[],[]) "fib",Space,Code ("",[],[]) "10",Space,Code ("",[],[]) "=",Space,Code ("",[],[]) "55",Str "."]+,Para [Str "This",Space,Str "module",Space,Str "defines",Space,Str "the",Space,Str "type",Space,Code ("",["haskell"],[]) "T",Str ".",Space,Str "The",Space,Str "identifier",Space,Code ("",["haskell"],[]) "M.T",Space,Str "is",Space,Str "not",Space,Str "in",Space,Str "scope",Space,Str "I",Space,Str "don't",Space,Str "have",Space,Str "to",Space,Str "escape",Space,Str "my",Space,Str "apostrophes;",Space,Str "great,",Space,Str "isn't",Space,Str "it?",Space,Str "This",Space,Str "is",Space,Str "a",Space,Str "reference",Space,Str "to",Space,Str "the",Space,Code ("",["haskell"],[]) "Foo",Space,Str "module."]+,Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "bulleted",Space,Str "list:"]+,BulletList+ [[Para [Str "first",Space,Str "item"]]+ ,[Para [Str "second",Space,Str "item"]]]+,Para [Str "This",Space,Str "is",Space,Str "an",Space,Str "enumerated",Space,Str "list:"]+,OrderedList (1,DefaultStyle,DefaultDelim)+ [[Para [Str "first",Space,Str "item"]]+ ,[Para [Str "second",Space,Str "item"]]]+,Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "definition",Space,Str "list:"]+,DefinitionList+ [([Code ("",[],[]) "foo"],+   [[Plain [Str "The",Space,Str "description",Space,Str "of",Space,Code ("",[],[]) "foo",Str "."]]])+ ,([Code ("",[],[]) "bar"],+   [[Plain [Str "The",Space,Str "description",Space,Str "of",Space,Code ("",[],[]) "bar",Str "."]]])]+,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "link:",Space,Link [Str "http://haskell.org"] ("http://haskell.org","http://haskell.org")]+,Para [Link [Str "Haskell"] ("http://haskell.org","http://haskell.org"),Space,Str "is",Space,Str "a",Space,Str "fun",Space,Str "language!"]+,Para [Link [Str "Click",Space,Str "Here!"] ("http://example.com","http://example.com")]]
tests/html-reader.native view
@@ -1,4 +1,4 @@-Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite"], docAuthors = [], docDate = []})+Pandoc (Meta {unMeta = fromList [("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]}) [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc",Str ".",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber",Str "'",Str "s",Space,Str "markdown",Space,Str "test",Space,Str "suite",Str "."] ,HorizontalRule ,Header 1 ("",[],[]) [Str "Headers"]
− tests/ieee.csl
@@ -1,302 +0,0 @@-<?xml version="1.0" encoding="utf-8"?>-<style xmlns="http://purl.org/net/xbiblio/csl" class="in-text" version="1.0" demote-non-dropping-particle="sort-only">-  <info>-    <title>IEEE</title>-    <id>http://www.zotero.org/styles/ieee</id>-    <link href="http://www.zotero.org/styles/ieee" rel="self"/>-    <author>-      <name>Michael Berkowitz</name>-      <email>mberkowi@gmu.edu</email>-    </author>-    <contributor>-      <name>Julian Onions</name>-      <email>julian.onions@gmail.com</email>-    </contributor>-    <contributor>-      <name>Rintze Zelle</name>-      <uri>http://twitter.com/rintzezelle</uri>-    </contributor>-    <contributor>-      <name>Stephen Frank</name>-      <uri>http://www.zotero.org/sfrank</uri>-    </contributor>-    <contributor>-      <name>Sebastian Karcher</name>-    </contributor>-    <category field="engineering"/>-    <category field="generic-base"/>-    <category citation-format="numeric"/>-    <updated>2011-09-15T07:01:02+00:00</updated>-    <rights>-      This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License:-      http://creativecommons.org/licenses/by-sa/3.0/-    </rights>-    <link href="http://www.ieee.org/portal/cms_docs_iportals/iportals/publications/authors/transjnl/stylemanual.pdf" rel="documentation"/>-    <link href="http://www.ieee.org/documents/auinfo07.pdf" rel="documentation"/>-  </info>-  <!-- Macros -->-  <macro name="edition">-    <choose>-      <if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any">-	<choose>-	  <if is-numeric="edition">-	    <group delimiter=" ">-	      <number variable="edition" form="ordinal"/>-	      <text term="edition" form="short" suffix="." strip-periods="true"/>-	    </group>-	  </if>-	  <else>-	    <text variable="edition" text-case="capitalize-first" suffix="."/>-	  </else>-	</choose>-      </if>-    </choose>-  </macro>-  <macro name="issued">-    <choose>-      <if type="article-journal report" match="any">-	<date variable="issued">-	  <date-part name="month" form="short" suffix=" "/>-	  <date-part name="year" form="long"/>-	</date>-      </if>-      <else-if type="bill book graphic legal_case motion_picture  song thesis chapter paper-conference" match="any">-	<date variable="issued">-	  <date-part name="year" form="long"/>-	</date>-      </else-if>-      <else>-	<date variable="issued">-	  <date-part name="day" form="numeric-leading-zeros" suffix="-"/>-	  <date-part name="month" form="short" suffix="-" strip-periods="true"/>-	  <date-part name="year" form="long"/>-	</date>-      </else>-    </choose>-  </macro>-  <macro name="author">-    <names variable="author">-      <name initialize-with=". " delimiter=", " and="text"/>-      <label form="short" prefix=", " text-case="capitalize-first" suffix="." strip-periods="true"/>-      <substitute>-	<names variable="editor"/>-	<names variable="translator"/>-      </substitute>-    </names>-  </macro>-  <macro name="editor">-    <names variable="editor">-      <name initialize-with=". " delimiter=", " and="text"/>-      <label form="short" prefix=", " text-case="capitalize-first" suffix="." strip-periods="true"/>-    </names>-  </macro>-  <macro name="locators">-    <group delimiter=", ">-      <text macro="edition"/>-      <group delimiter=" ">-	<text term="volume" form="short" suffix="." strip-periods="true"/>-	<number variable="volume" form="numeric"/>-      </group>-      <group delimiter=" ">-	<number variable="number-of-volumes" form="numeric"/>-	<text term="volume" form="short" suffix="." plural="true" strip-periods="true"/>-      </group>-      <group delimiter=" ">-	<text term="issue" form="short" suffix="." strip-periods="true"/>-	<number variable="issue" form="numeric"/>-      </group>-    </group>-  </macro>-  <macro name="title">-    <choose>-      <if type="bill book graphic legal_case motion_picture song" match="any">-	<text variable="title" font-style="italic"/>-      </if>-      <else>-	<text variable="title" quotes="true"/>-      </else>-    </choose>-  </macro>-  <macro name="publisher">-    <choose>-      <if type="bill book graphic legal_case motion_picture  song chapter paper-conference" match="any">-	<text variable="publisher-place" suffix=": "/>-	<text variable="publisher"/>-      </if>-      <else>-	<group delimiter=", ">-	  <text variable="publisher"/>-	  <text variable="publisher-place"/>-	</group>-      </else>-    </choose>-  </macro>-  <macro name="event">-    <choose>-      <if type="paper-conference">-	<choose>-	  <!-- Published Conference Paper -->-	  <if variable="container-title">-	    <group delimiter=", ">-	      <text variable="container-title" prefix="in " font-style="italic"/>-	      <text variable="event-place"/>-	    </group>-	  </if>-	  <!-- Unpublished Conference Paper -->-	  <else>-	    <group delimiter=", ">-	      <text variable="event" prefix="presented at the "/>-	      <text variable="event-place"/>-	    </group>-	  </else>-	</choose>-      </if>-    </choose>-  </macro>-  <macro name="access">-    <choose>-      <if type="webpage">-	<choose>-	  <if variable="URL">-	    <group delimiter=". ">-	      <text value="[Online]"/>-	      <text variable="URL" prefix="Available: "/>-	      <group prefix="[" suffix="]">-		<date variable="accessed" prefix="Accessed: ">-		  <date-part name="day" form="numeric-leading-zeros" suffix="-"/>-		  <date-part name="month" form="short" suffix="-" strip-periods="true"/>-		  <date-part name="year" form="long"/>-		</date>-	      </group>-	    </group>-	  </if>-	</choose>-      </if>-    </choose>-  </macro>-  <macro name="page">-    <group>-      <label variable="page" form="short" suffix=". " strip-periods="true"/>-      <text variable="page"/>-    </group>-  </macro>-  <!-- Citation -->-  <citation  collapse="citation-number">-    <sort>-      <key variable="citation-number"/>-    </sort>-    <layout prefix="[" suffix="]" delimiter="], [">-      <text variable="citation-number"/>-    </layout>-  </citation>-  <!-- Bibliography -->-  <bibliography entry-spacing="0" second-field-align="flush">-    <layout suffix=".">-      <!-- Citation Number -->-      <text variable="citation-number" prefix="[" suffix="]"/>-      <!-- Author(s) -->-      <text macro="author" prefix=" " suffix=", "/>-      <!-- Rest of Citation -->-      <choose>-	<!-- Specific Formats -->-	<if type="article-journal">-	  <group delimiter=", ">-	    <text macro="title"/>-	    <text variable="container-title" font-style="italic" form="short"/>-	    <text macro="locators"/>-	    <text macro="page"/>-	    <text macro="issued"/>-	  </group>-	</if>-	<else-if type="paper-conference">-	  <group delimiter=", ">-	    <text macro="title"/>-	    <text macro="event"/>-	    <text macro="issued"/>-	    <text macro="locators"/>-	    <text macro="page"/>-	  </group>-	</else-if>-	<else-if type="report">-	  <group delimiter=", "> -	    <text macro="title"/>-	    <text macro="publisher"/>-	    <group delimiter=" ">-	      <text variable="genre"/>-	      <text variable="number"/>-	    </group>-	    <text macro="issued"/>-	  </group>-	</else-if>-	<else-if type="thesis">-	  <group delimiter=", ">-	    <text macro="title"/>-	    <text variable="genre"/>-	    <text macro="publisher"/>-	    <text macro="issued"/>-	  </group>-	</else-if>-	<else-if type="webpage">-	  <group delimiter=", " suffix=". ">-	    <text macro="title"/>-	    <text variable="container-title" font-style="italic"/>-	    <text macro="issued"/>-	  </group>-	  <text macro="access"/>-	</else-if>-	<else-if type="patent">-	  <text macro="title" suffix=", "/>-	  <text variable="number" prefix="U.S. Patent "/>-	  <text macro="issued"/>-	</else-if>-	<!-- Generic/Fallback Formats -->-	<else-if type="bill book graphic legal_case motion_picture report song" match="any">-	  <group delimiter=", " suffix=". ">-	    <text macro="title"/>-	    <text macro="locators"/>-	  </group>-	  <group delimiter=", ">-	    <text macro="publisher"/>-	    <text macro="issued"/>-	    <text macro="page"/>-	  </group>-	</else-if>-	<else-if type="article-magazine article-newspaper broadcast interview manuscript map patent personal_communication song speech thesis webpage" match="any">-	  <group delimiter=", ">-	    <text macro="title"/>-	    <text variable="container-title" font-style="italic"/>-	    <text macro="locators"/>-	    <text macro="publisher"/>-	    <text macro="page"/>-	    <text macro="issued"/>-	  </group>-	</else-if>-	<else-if type="chapter paper-conference" match="any">-	  <group delimiter=", " suffix=", ">-	    <text macro="title"/>-	    <text variable="container-title" prefix="in " font-style="italic"/>-	    <text macro="locators"/>-	  </group>-	  <text macro="editor" suffix=" "/>-	  <group delimiter=", ">-	    <text macro="publisher"/>-	    <text macro="issued"/>-	    <text macro="page"/>-	  </group>-	</else-if>-	<else>-	  <group delimiter=", " suffix=". ">-	    <text macro="title"/>-	    <text variable="container-title" font-style="italic"/>-	    <text macro="locators"/>-	  </group>-	  <group delimiter=", ">-	    <text macro="publisher"/>-	    <text macro="page"/>-	    <text macro="issued"/>-	  </group>-	</else>-      </choose>-    </layout>-  </bibliography>-</style>
tests/latex-reader.native view
@@ -1,26 +1,26 @@-Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite"], docAuthors = [[Str "John",Space,Str "MacFarlane"],[Str "Anonymous"]], docDate = [Str "July",Space,Str "17,",Space,Str "2006"]})-[RawBlock "latex" "\\maketitle"+Pandoc (Meta {unMeta = fromList [("authors",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]})+[RawBlock (Format "latex") "\\maketitle" ,Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Headers"]-,Header 2 ("",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]-,Header 3 ("",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]]+,Header 1 ("headers",[],[]) [Str "Headers"]+,Header 2 ("level-2-with-an-embedded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embedded",Space,Str "link"] ("/url","")]+,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Emph [Str "emphasis"]] ,Para [Str "Level",Space,Str "4"] ,Para [Str "Level",Space,Str "5"]-,Header 1 ("",[],[]) [Str "Level",Space,Str "1"]-,Header 2 ("",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Emph [Str "emphasis"]]-,Header 3 ("",[],[]) [Str "Level",Space,Str "3"]+,Header 1 ("level-1",[],[]) [Str "Level",Space,Str "1"]+,Header 2 ("level-2-with-emphasis",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Emph [Str "emphasis"]]+,Header 3 ("level-3",[],[]) [Str "Level",Space,Str "3"] ,Para [Str "with",Space,Str "no",Space,Str "blank",Space,Str "line"]-,Header 2 ("",[],[]) [Str "Level",Space,Str "2"]+,Header 2 ("level-2",[],[]) [Str "Level",Space,Str "2"] ,Para [Str "with",Space,Str "no",Space,Str "blank",Space,Str "line"] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Paragraphs"]+,Header 1 ("paragraphs",[],[]) [Str "Paragraphs"] ,Para [Str "Here\8217s",Space,Str "a",Space,Str "regular",Space,Str "paragraph."] ,Para [Str "In",Space,Str "Markdown",Space,Str "1.0.0",Space,Str "and",Space,Str "earlier.",Space,Str "Version",Space,Str "8.",Space,Str "This",Space,Str "line",Space,Str "turns",Space,Str "into",Space,Str "a",Space,Str "list",Space,Str "item.",Space,Str "Because",Space,Str "a",Space,Str "hard-wrapped",Space,Str "line",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Str "of",Space,Str "a",Space,Str "paragraph",Space,Str "looked",Space,Str "like",Space,Str "a",Space,Str "list",Space,Str "item."] ,Para [Str "Here\8217s",Space,Str "one",Space,Str "with",Space,Str "a",Space,Str "bullet.",Space,Str "*",Space,Str "criminey."] ,Para [Str "There",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "hard",Space,Str "line",Space,Str "break",LineBreak,Str "here."] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Block",Space,Str "Quotes"]+,Header 1 ("block-quotes",[],[]) [Str "Block",Space,Str "Quotes"] ,Para [Str "E-mail",Space,Str "style:"] ,BlockQuote  [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "block",Space,Str "quote.",Space,Str "It",Space,Str "is",Space,Str "pretty",Space,Str "short."]]@@ -52,15 +52,15 @@   [Para [Str "Don\8217t",Space,Str "quote",Space,Str "me."]]] ,Para [Str "And",Space,Str "a",Space,Str "following",Space,Str "paragraph."] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Code",Space,Str "Blocks"]+,Header 1 ("code-blocks",[],[]) [Str "Code",Space,Str "Blocks"] ,Para [Str "Code:"] ,CodeBlock ("",[],[]) "---- (should be four hyphens)\n\nsub status {\n    print \"working\";\n}\n\nthis code block is indented by one tab" ,Para [Str "And:"] ,CodeBlock ("",[],[]) "    this code block is indented by two tabs\n\nThese should not be escaped:  \\$ \\\\ \\> \\[ \\{" ,Para [Str "this",Space,Str "has",Space,Emph [Str "two",LineBreak,Str "lines"]] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Lists"]-,Header 2 ("",[],[]) [Str "Unordered"]+,Header 1 ("lists",[],[]) [Str "Lists"]+,Header 2 ("unordered",[],[]) [Str "Unordered"] ,Para [Str "Asterisks",Space,Str "tight:"] ,BulletList  [[Para [Str "asterisk",Space,Str "1"]]@@ -91,7 +91,7 @@  [[Para [Str "Minus",Space,Str "1"]]  ,[Para [Str "Minus",Space,Str "2"]]  ,[Para [Str "Minus",Space,Str "3"]]]-,Header 2 ("",[],[]) [Str "Ordered"]+,Header 2 ("ordered",[],[]) [Str "Ordered"] ,Para [Str "Tight:"] ,OrderedList (1,Decimal,Period)  [[Para [Str "First"]]@@ -118,7 +118,7 @@   ,Para [Str "Item",Space,Str "1.",Space,Str "graf",Space,Str "two.",Space,Str "The",Space,Str "quick",Space,Str "brown",Space,Str "fox",Space,Str "jumped",Space,Str "over",Space,Str "the",Space,Str "lazy",Space,Str "dog\8217s",Space,Str "back."]]  ,[Para [Str "Item",Space,Str "2."]]  ,[Para [Str "Item",Space,Str "3."]]]-,Header 2 ("",[],[]) [Str "Nested"]+,Header 2 ("nested",[],[]) [Str "Nested"] ,BulletList  [[Para [Str "Tab"]   ,BulletList@@ -143,14 +143,14 @@    ,[Para [Str "Fie"]]    ,[Para [Str "Foe"]]]]  ,[Para [Str "Third"]]]-,Header 2 ("",[],[]) [Str "Tabs",Space,Str "and",Space,Str "spaces"]+,Header 2 ("tabs-and-spaces",[],[]) [Str "Tabs",Space,Str "and",Space,Str "spaces"] ,BulletList  [[Para [Str "this",Space,Str "is",Space,Str "a",Space,Str "list",Space,Str "item",Space,Str "indented",Space,Str "with",Space,Str "tabs"]]  ,[Para [Str "this",Space,Str "is",Space,Str "a",Space,Str "list",Space,Str "item",Space,Str "indented",Space,Str "with",Space,Str "spaces"]   ,BulletList    [[Para [Str "this",Space,Str "is",Space,Str "an",Space,Str "example",Space,Str "list",Space,Str "item",Space,Str "indented",Space,Str "with",Space,Str "tabs"]]    ,[Para [Str "this",Space,Str "is",Space,Str "an",Space,Str "example",Space,Str "list",Space,Str "item",Space,Str "indented",Space,Str "with",Space,Str "spaces"]]]]]-,Header 2 ("",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]+,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"] ,OrderedList (2,Decimal,TwoParens)  [[Para [Str "begins",Space,Str "with",Space,Str "2"]]  ,[Para [Str "and",Space,Str "now",Space,Str "3"]@@ -180,7 +180,7 @@ ,Para [Str "M.A.",Space,Str "2007"] ,Para [Str "B.",Space,Str "Williams"] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Definition",Space,Str "Lists"]+,Header 1 ("definition-lists",[],[]) [Str "Definition",Space,Str "Lists"] ,Para [Str "Tight",Space,Str "using",Space,Str "spaces:"] ,DefinitionList  [([Str "apple"],@@ -215,7 +215,7 @@     ,CodeBlock ("",[],[]) "{ orange code block }"     ,BlockQuote      [Para [Str "orange",Space,Str "block",Space,Str "quote"]]]])]-,Header 1 ("",[],[]) [Str "HTML",Space,Str "Blocks"]+,Header 1 ("html-blocks",[],[]) [Str "HTML",Space,Str "Blocks"] ,Para [Str "Simple",Space,Str "block",Space,Str "on",Space,Str "one",Space,Str "line:"] ,Para [Str "foo",Space,Str "And",Space,Str "nested",Space,Str "without",Space,Str "indentation:"] ,Para [Str "foo",Space,Str "bar",Space,Str "Interpreted",Space,Str "markdown",Space,Str "in",Space,Str "a",Space,Str "table:"]@@ -234,7 +234,7 @@ ,CodeBlock ("",[],[]) "<hr />" ,Para [Str "Hr\8217s:"] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Inline",Space,Str "Markup"]+,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"] ,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."] ,Para [Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str "."] ,Para [Str "An",Space,Emph [Link [Str "emphasized",Space,Str "link"] ("/url","")],Str "."]@@ -248,7 +248,7 @@ ,Para [Str "Subscripts:",Space,Str "H",Subscript [Str "2"],Str "O,",Space,Str "H",Subscript [Str "23"],Str "O,",Space,Str "H",Subscript [Str "many",Space,Str "of",Space,Str "them"],Str "O."] ,Para [Str "These",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "superscripts",Space,Str "or",Space,Str "subscripts,",Space,Str "because",Space,Str "of",Space,Str "the",Space,Str "unescaped",Space,Str "spaces:",Space,Str "a^b",Space,Str "c^d,",Space,Str "a",Math InlineMath "\\sim",Str "b",Space,Str "c",Math InlineMath "\\sim",Str "d."] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Smart",Space,Str "quotes,",Space,Str "ellipses,",Space,Str "dashes"]+,Header 1 ("smart-quotes-ellipses-dashes",[],[]) [Str "Smart",Space,Str "quotes,",Space,Str "ellipses,",Space,Str "dashes"] ,Para [Quoted DoubleQuote [Str "Hello,"],Space,Str "said",Space,Str "the",Space,Str "spider.",Space,Quoted DoubleQuote [Quoted SingleQuote [Str "Shelob"],Space,Str "is",Space,Str "my",Space,Str "name."]] ,Para [Quoted SingleQuote [Str "A"],Str ",",Space,Quoted SingleQuote [Str "B"],Str ",",Space,Str "and",Space,Quoted SingleQuote [Str "C"],Space,Str "are",Space,Str "letters."] ,Para [Quoted SingleQuote [Str "Oak,"],Space,Quoted SingleQuote [Str "elm,"],Space,Str "and",Space,Quoted SingleQuote [Str "beech"],Space,Str "are",Space,Str "names",Space,Str "of",Space,Str "trees.",Space,Str "So",Space,Str "is",Space,Quoted SingleQuote [Str "pine."]]@@ -258,10 +258,10 @@ ,Para [Str "Dashes",Space,Str "between",Space,Str "numbers:",Space,Str "5\8211\&7,",Space,Str "255\8211\&66,",Space,Str "1987\8211\&1999."] ,Para [Str "Ellipses\8230and\8230and\8230."] ,HorizontalRule-,Header 1 ("",[],[]) [Str "LaTeX"]+,Header 1 ("latex",[],[]) [Str "LaTeX"] ,BulletList- [[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str ",",Space,Str "22-23"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [RawInline "latex" "\\cite[22-23]{smith.1899}"]]]- ,[Para [RawInline "latex" "\\doublespacing"]]+ [[Para [Cite [Citation {citationId = "smith.1899", citationPrefix = [], citationSuffix = [Str "22-23"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [RawInline (Format "latex") "\\cite[22-23]{smith.1899}"]]]+ ,[Para [RawInline (Format "latex") "\\doublespacing"]]  ,[Para [Math InlineMath "2+2=4"]]  ,[Para [Math InlineMath "x \\in y"]]  ,[Para [Math InlineMath "\\alpha \\wedge \\omega"]]@@ -288,7 +288,7 @@  [[[Plain [Str "Animal"]]]  ,[[Plain [Str "Vegetable"]]]] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Special",Space,Str "Characters"]+,Header 1 ("special-characters",[],[]) [Str "Special",Space,Str "Characters"] ,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "unicode:"] ,BulletList  [[Para [Str "I",Space,Str "hat:",Space,Str "\206"]]@@ -318,8 +318,8 @@ ,Para [Str "Plus:",Space,Str "+"] ,Para [Str "Minus:",Space,Str "-"] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Links"]-,Header 2 ("",[],[]) [Str "Explicit"]+,Header 1 ("links",[],[]) [Str "Links"]+,Header 2 ("explicit",[],[]) [Str "Explicit"] ,Para [Str "Just",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."] ,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."] ,Para [Link [Str "URL",Space,Str "and",Space,Str "title"] ("/url/",""),Str "."]@@ -329,7 +329,7 @@ ,Para [Link [Str "with_underscore"] ("/url/with_underscore","")] ,Para [Link [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")] ,Para [Link [Str "Empty"] ("",""),Str "."]-,Header 2 ("",[],[]) [Str "Reference"]+,Header 2 ("reference",[],[]) [Str "Reference"] ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."] ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."] ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."]@@ -342,12 +342,12 @@ ,CodeBlock ("",[],[]) "[not]: /url" ,Para [Str "Foo",Space,Link [Str "bar"] ("/url/",""),Str "."] ,Para [Str "Foo",Space,Link [Str "biz"] ("/url/",""),Str "."]-,Header 2 ("",[],[]) [Str "With",Space,Str "ampersands"]+,Header 2 ("with-ampersands",[],[]) [Str "With",Space,Str "ampersands"] ,Para [Str "Here\8217s",Space,Str "a",Space,Link [Str "link",Space,Str "with",Space,Str "an",Space,Str "ampersand",Space,Str "in",Space,Str "the",Space,Str "URL"] ("http://example.com/?foo=1&bar=2",""),Str "."] ,Para [Str "Here\8217s",Space,Str "a",Space,Str "link",Space,Str "with",Space,Str "an",Space,Str "amersand",Space,Str "in",Space,Str "the",Space,Str "link",Space,Str "text:",Space,Link [Str "AT&T"] ("http://att.com/",""),Str "."] ,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link"] ("/script?foo=1&bar=2",""),Str "."] ,Para [Str "Here\8217s",Space,Str "an",Space,Link [Str "inline",Space,Str "link",Space,Str "in",Space,Str "pointy",Space,Str "braces"] ("/script?foo=1&bar=2",""),Str "."]-,Header 2 ("",[],[]) [Str "Autolinks"]+,Header 2 ("autolinks",[],[]) [Str "Autolinks"] ,Para [Str "With",Space,Str "an",Space,Str "ampersand:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2","")] ,BulletList  [[Para [Str "In",Space,Str "a",Space,Str "list?"]]@@ -359,17 +359,17 @@ ,Para [Str "Auto-links",Space,Str "should",Space,Str "not",Space,Str "occur",Space,Str "here:",Space,Code ("",[],[]) "<http://example.com/>"] ,CodeBlock ("",[],[]) "or here: <http://example.com/>" ,HorizontalRule-,Header 1 ("",[],[]) [Str "Images"]+,Header 1 ("images",[],[]) [Str "Images"] ,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"] ,Para [Image [Str "image"] ("lalune.jpg","")] ,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "image"] ("movie.jpg",""),Space,Str "icon."] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Footnotes"]+,Header 1 ("footnotes",[],[]) [Str "Footnotes"] ,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Note [Para [Str "Here",Space,Str "is",Space,Str "the",Space,Str "footnote.",Space,Str "It",Space,Str "can",Space,Str "go",Space,Str "anywhere",Space,Str "after",Space,Str "the",Space,Str "footnote",Space,Str "reference.",Space,Str "It",Space,Str "need",Space,Str "not",Space,Str "be",Space,Str "placed",Space,Str "at",Space,Str "the",Space,Str "end",Space,Str "of",Space,Str "the",Space,Str "document."]],Space,Str "and",Space,Str "another.",Note [Para [Str "Here\8217s",Space,Str "the",Space,Str "long",Space,Str "note.",Space,Str "This",Space,Str "one",Space,Str "contains",Space,Str "multiple",Space,Str "blocks."],Para [Str "Subsequent",Space,Str "blocks",Space,Str "are",Space,Str "indented",Space,Str "to",Space,Str "show",Space,Str "that",Space,Str "they",Space,Str "belong",Space,Str "to",Space,Str "the",Space,Str "footnote",Space,Str "(as",Space,Str "with",Space,Str "list",Space,Str "items)."],CodeBlock ("",[],[]) "  { <code> }",Para [Str "If",Space,Str "you",Space,Str "want,",Space,Str "you",Space,Str "can",Space,Str "indent",Space,Str "every",Space,Str "line,",Space,Str "but",Space,Str "you",Space,Str "can",Space,Str "also",Space,Str "be",Space,Str "lazy",Space,Str "and",Space,Str "just",Space,Str "indent",Space,Str "the",Space,Str "first",Space,Str "line",Space,Str "of",Space,Str "each",Space,Str "block."]],Space,Str "This",Space,Str "should",Space,Emph [Str "not"],Space,Str "be",Space,Str "a",Space,Str "footnote",Space,Str "reference,",Space,Str "because",Space,Str "it",Space,Str "contains",Space,Str "a",Space,Str "space.[^my",Space,Str "note]",Space,Str "Here",Space,Str "is",Space,Str "an",Space,Str "inline",Space,Str "note.",Note [Para [Str "This",Space,Str "is",Space,Emph [Str "easier"],Space,Str "to",Space,Str "type.",Space,Str "Inline",Space,Str "notes",Space,Str "may",Space,Str "contain",Space,Link [Str "links"] ("http://google.com",""),Space,Str "and",Space,Code ("",[],[]) "]",Space,Str "verbatim",Space,Str "characters,",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "[bracketed",Space,Str "text]."]]] ,BlockQuote  [Para [Str "Notes",Space,Str "can",Space,Str "go",Space,Str "in",Space,Str "quotes.",Note [Para [Str "In",Space,Str "quote."]]]] ,OrderedList (1,Decimal,Period)  [[Para [Str "And",Space,Str "in",Space,Str "list",Space,Str "items.",Note [Para [Str "In",Space,Str "list."]]]]] ,Para [Str "This",Space,Str "paragraph",Space,Str "should",Space,Str "not",Space,Str "be",Space,Str "part",Space,Str "of",Space,Str "the",Space,Str "note,",Space,Str "as",Space,Str "it",Space,Str "is",Space,Str "not",Space,Str "indented."]-,Header 1 ("",[],[]) [Str "Escaped",Space,Str "characters"]+,Header 1 ("escaped-characters",[],[]) [Str "Escaped",Space,Str "characters"] ,Para [Str "$",Space,Str "%",Space,Str "&",Space,Str "#",Space,Str "_",Space,Str "{",Space,Str "}"]]
tests/lhs-test.html view
@@ -27,10 +27,10 @@   </style> </head> <body>-<h1>lhs test</h1>+<h1 id="lhs-test">lhs test</h1> <p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p> <pre class="sourceCode literate haskell"><code class="sourceCode haskell"><span class="ot">unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d-unsplit <span class="fu">=</span> arr <span class="fu">.</span> <span class="fu">uncurry</span>+unsplit <span class="fu">=</span> arr <span class="fu">.</span> uncurry           <span class="co">-- arr (\op (x,y) -&gt; x `op` y)</span></code></pre> <p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p> <pre><code>f *** g = first f &gt;&gt;&gt; second g</code></pre>
tests/lhs-test.html+lhs view
@@ -27,10 +27,10 @@   </style> </head> <body>-<h1>lhs test</h1>+<h1 id="lhs-test">lhs test</h1> <p><code>unsplit</code> is an arrow that takes a pair of values and combines them to return a single value:</p> <pre class="sourceCode literate literatehaskell"><code class="sourceCode literatehaskell"><span class="ot">&gt; unsplit ::</span> (<span class="dt">Arrow</span> a) <span class="ot">=&gt;</span> (b <span class="ot">-&gt;</span> c <span class="ot">-&gt;</span> d) <span class="ot">-&gt;</span> a (b, c) d-<span class="ot">&gt;</span> unsplit <span class="fu">=</span> arr <span class="fu">.</span> <span class="fu">uncurry</span>+<span class="ot">&gt;</span> unsplit <span class="fu">=</span> arr <span class="fu">.</span> uncurry <span class="ot">&gt;</span>           <span class="co">-- arr (\op (x,y) -&gt; x `op` y)</span></code></pre> <p><code>(***)</code> combines two arrows into a new arrow by running the two arrows on a pair of values (one arrow on the first item of the pair and one arrow on the second item of the pair).</p> <pre><code>f *** g = first f &gt;&gt;&gt; second g</code></pre>
tests/lhs-test.latex view
@@ -9,9 +9,11 @@ \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex   \usepackage[utf8]{inputenc} \else % if luatex or xelatex-  \usepackage{fontspec}   \ifxetex+    \usepackage{mathspec}     \usepackage{xltxtra,xunicode}+  \else+    \usepackage{fontspec}   \fi   \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}   \newcommand{\euro}{€}@@ -20,7 +22,8 @@ \IfFileExists{microtype.sty}{\usepackage{microtype}}{} \usepackage{color} \usepackage{fancyvrb}-\DefineShortVerb[commandchars=\\\{\}]{\|}+\newcommand{\VerbBar}{|}+\newcommand{\VERB}{\Verb[commandchars=\\\{\}]} \DefineVerbatimEnvironment{Highlighting}{Verbatim}{commandchars=\\\{\}} % Add ',fontsize=\small' for more characters per line \newenvironment{Shaded}{}{}@@ -50,6 +53,7 @@             pdfauthor={},             pdftitle={},             colorlinks=true,+            citecolor=blue,             urlcolor=blue,             linkcolor=magenta,             pdfborder={0 0 0}}@@ -64,7 +68,7 @@  \begin{document} -\section{lhs test}+\section{lhs test}\label{lhs-test}  \texttt{unsplit} is an arrow that takes a pair of values and combines them to return a single value:@@ -72,7 +76,7 @@ \begin{Shaded} \begin{Highlighting}[] \OtherTok{unsplit ::} \NormalTok{(}\DataTypeTok{Arrow} \NormalTok{a) }\OtherTok{=>} \NormalTok{(b }\OtherTok{->} \NormalTok{c }\OtherTok{->} \NormalTok{d) }\OtherTok{->} \NormalTok{a (b, c) d}-\NormalTok{unsplit }\FunctionTok{=} \NormalTok{arr }\FunctionTok{.} \FunctionTok{uncurry}+\NormalTok{unsplit }\FunctionTok{=} \NormalTok{arr }\FunctionTok{.} \NormalTok{uncurry}           \CommentTok{-- arr (\textbackslash{}op (x,y) -> x `op` y)} \end{Highlighting} \end{Shaded}
tests/lhs-test.latex+lhs view
@@ -9,9 +9,11 @@ \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex   \usepackage[utf8]{inputenc} \else % if luatex or xelatex-  \usepackage{fontspec}   \ifxetex+    \usepackage{mathspec}     \usepackage{xltxtra,xunicode}+  \else+    \usepackage{fontspec}   \fi   \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}   \newcommand{\euro}{€}@@ -32,6 +34,7 @@             pdfauthor={},             pdftitle={},             colorlinks=true,+            citecolor=blue,             urlcolor=blue,             linkcolor=magenta,             pdfborder={0 0 0}}@@ -46,7 +49,7 @@  \begin{document} -\section{lhs test}+\section{lhs test}\label{lhs-test}  \texttt{unsplit} is an arrow that takes a pair of values and combines them to return a single value:
tests/lhs-test.native view
@@ -1,4 +1,4 @@-[Header 1 ("",[],[]) [Str "lhs",Space,Str "test"]+[Header 1 ("lhs-test",[],[]) [Str "lhs",Space,Str "test"] ,Para [Code ("",[],[]) "unsplit",Space,Str "is",Space,Str "an",Space,Str "arrow",Space,Str "that",Space,Str "takes",Space,Str "a",Space,Str "pair",Space,Str "of",Space,Str "values",Space,Str "and",Space,Str "combines",Space,Str "them",Space,Str "to",Space,Str "return",Space,Str "a",Space,Str "single",Space,Str "value:"] ,CodeBlock ("",["sourceCode","literate","haskell"],[]) "unsplit :: (Arrow a) => (b -> c -> d) -> a (b, c) d\nunsplit = arr . uncurry\n          -- arr (\\op (x,y) -> x `op` y)" ,Para [Code ("",[],[]) "(***)",Space,Str "combines",Space,Str "two",Space,Str "arrows",Space,Str "into",Space,Str "a",Space,Str "new",Space,Str "arrow",Space,Str "by",Space,Str "running",Space,Str "the",Space,Str "two",Space,Str "arrows",Space,Str "on",Space,Str "a",Space,Str "pair",Space,Str "of",Space,Str "values",Space,Str "(one",Space,Str "arrow",Space,Str "on",Space,Str "the",Space,Str "first",Space,Str "item",Space,Str "of",Space,Str "the",Space,Str "pair",Space,Str "and",Space,Str "one",Space,Str "arrow",Space,Str "on",Space,Str "the",Space,Str "second",Space,Str "item",Space,Str "of",Space,Str "the",Space,Str "pair)."]
− tests/markdown-citations.chicago-author-date.txt
@@ -1,45 +0,0 @@-Pandoc with citeproc-hs-=======================---   [@nonexistent]---   @nonexistent---   Doe (2005) says blah.---   Doe (2005, 30) says blah.---   Doe (2005, 30, with suffix) says blah.---   Doe (2005; 2006, 30; see also Doe and Roe 2007) says blah.---   In a note.[^1]---   A citation group (see Doe 2005, chap. 3; also Doe and Roe 2007, 34–35).---   Another one (see Doe 2005, 34–35).---   And another one in a note.[^2]---   Citation with a suffix and locator (Doe 2005, 33, 35–37, and nowhere else).---   Citation with suffix only (Doe 2005 and nowhere else).---   Now some modifiers.[^3]---   With some markup (*see* Doe 2005, 32).--References-==========--Doe, John. 2005. *First Book*. Cambridge: Cambridge University Press.--———. 2006. “Article.” *Journal of Generic Studies* 6: 33–34.--Doe, John, and Jenny Roe. 2007. “Why Water Is Wet.” In *Third Book*, ed. Sam Smith. Oxford: Oxford University Press.--[^1]: Doe and Roe (2007, 12) and a citation without locators (Doe and Roe 2007).--[^2]: Some citations (see Doe 2005, chap. 3; Doe and Roe 2007; Doe 2006).--[^3]: Like a citation without author: (2005), and now Doe with a locator (2006, 44).
− tests/markdown-citations.ieee.txt
@@ -1,45 +0,0 @@-Pandoc with citeproc-hs-=======================---   [@nonexistent]---   @nonexistent---   Reference 1 says blah.---   Reference 1 says blah.---   Reference 1 says blah.---   Reference 1 [3] says blah.---   In a note.[^1]---   A citation group [1], [3].---   Another one [1].---   And another one in a note.[^2]---   Citation with a suffix and locator [1].---   Citation with suffix only [1].---   Now some modifiers.[^3]---   With some markup [1].--References-==========--[1] J. Doe, *First Book*. Cambridge: Cambridge University Press, 2005.--[2] J. Doe, “Article,” *Journal of Generic Studies*, vol. 6, pp. 33–34, 2006.--[3] J. Doe and J. Roe, “Why Water Is Wet,” in *Third Book*, S. Smith, Ed. Oxford: Oxford University Press, 2007.--[^1]: Reference 3 and a citation without locators [3].--[^2]: Some citations [1–3].--[^3]: Like a citation without author: [1], and now Doe with a locator [2].
− tests/markdown-citations.mhra.txt
@@ -1,63 +0,0 @@-Pandoc with citeproc-hs-=======================---   [@nonexistent]---   @nonexistent---   John Doe[^1] says blah.---   Doe[^2] says blah.---   Doe[^3] says blah.---   Doe[^4] says blah.---   In a note.[^5]---   A citation group.[^6]---   Another one.[^7]---   And another one in a note.[^8]---   Citation with a suffix and locator.[^9]---   Citation with suffix only.[^10]---   Now some modifiers.[^11]---   With some markup.[^12]--References-==========--Doe, John, ‘Article’, *Journal of Generic Studies*, 6 (2006), 33–34.-----, *First Book* (Cambridge: Cambridge University Press, 2005).--Doe, John, and Jenny Roe, ‘Why Water Is Wet’, in *Third Book*, ed. by Sam Smith (Oxford: Oxford University Press, 2007).--[^1]: *First Book* (Cambridge: Cambridge University Press, 2005).--[^2]: *First Book*, p. 30.--[^3]: *First Book*, p. 30, with suffix.--[^4]: *First Book*; ‘Article’, *Journal of Generic Studies*, 6 (2006), 33–34 (p. 30); see also John Doe and Jenny Roe, ‘Why Water Is Wet’, in *Third Book*, ed. by Sam Smith (Oxford: Oxford University Press, 2007).--[^5]: Doe and Roe, p. 12 and a citation without locators Doe and Roe.--[^6]: See Doe, *First Book*, chap. 3; also Doe and Roe, pp. 34–35.--[^7]: See Doe, *First Book*, pp. 34–35.--[^8]: Some citations see Doe, *First Book*, chap. 3; Doe and Roe; Doe, ‘Article’, 33–34.--[^9]: Doe, *First Book*, pp. 33, 35–37, and nowhere else.--[^10]: Doe, *First Book* and nowhere else.--[^11]: Like a citation without author: *First Book*, and now Doe with a locator ‘Article’, 33–34 (p. 44).--[^12]: *See* Doe, *First Book*, p. 32.
+ tests/markdown-citations.native view
@@ -0,0 +1,17 @@+[Header 1 ("pandoc-with-citeproc-hs",[],[]) [Str "Pandoc",Space,Str "with",Space,Str "citeproc-hs"]+,BulletList+ [[Para [Cite [Citation {citationId = "nonexistent", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@nonexistent]"]]]+ ,[Para [Cite [Citation {citationId = "nonexistent", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@nonexistent"]]]+ ,[Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@item1"],Space,Str "says",Space,Str "blah."]]+ ,[Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "30"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@item1",Space,Str "[p.",Space,Str "30]"],Space,Str "says",Space,Str "blah."]]+ ,[Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "30,",Space,Str "with",Space,Str "suffix"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@item1",Space,Str "[p.",Space,Str "30,",Space,Str "with",Space,Str "suffix]"],Space,Str "says",Space,Str "blah."]]+ ,[Para [Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "30"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 0},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "see",Space,Str "also"], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "@item1",Space,Str "[-@item2",Space,Str "p.",Space,Str "30;",Space,Str "see",Space,Str "also",Space,Str "@\1087\1091\1085\1082\1090\&3]"],Space,Str "says",Space,Str "blah."]]+ ,[Para [Str "In",Space,Str "a",Space,Str "note.",Note [Para [Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [Str "p.",Space,Str "12"], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@\1087\1091\1085\1082\1090\&3",Space,Str "[p.",Space,Str "12]"],Space,Str "and",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "locators",Space,Cite [Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@\1087\1091\1085\1082\1090\&3]"],Str "."]]]]+ ,[Para [Str "A",Space,Str "citation",Space,Str "group",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [Str "also"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[see",Space,Str "@item1",Space,Str "chap.",Space,Str "3;",Space,Str "also",Space,Str "@\1087\1091\1085\1082\1090\&3",Space,Str "p.",Space,Str "34-35]"],Str "."]]+ ,[Para [Str "Another",Space,Str "one",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "p.",Space,Str "34-35"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[see",Space,Str "@item1",Space,Str "p.",Space,Str "34-35]"],Str "."]]+ ,[Para [Str "And",Space,Str "another",Space,Str "one",Space,Str "in",Space,Str "a",Space,Str "note.",Note [Para [Str "Some",Space,Str "citations",Space,Cite [Citation {citationId = "item1", citationPrefix = [Str "see"], citationSuffix = [Space,Str "chap.",Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "\1087\1091\1085\1082\1090\&3", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0},Citation {citationId = "item2", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[see",Space,Str "@item1",Space,Str "chap.",Space,Str "3;",Space,Str "@\1087\1091\1085\1082\1090\&3;",Space,Str "@item2]"],Str "."]]]]+ ,[Para [Str "Citation",Space,Str "with",Space,Str "a",Space,Str "suffix",Space,Str "and",Space,Str "locator",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "pp.",Space,Str "33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@item1",Space,Str "pp.",Space,Str "33,",Space,Str "35-37,",Space,Str "and",Space,Str "nowhere",Space,Str "else]"],Str "."]]+ ,[Para [Str "Citation",Space,Str "with",Space,Str "suffix",Space,Str "only",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [Space,Str "and",Space,Str "nowhere",Space,Str "else"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@item1",Space,Str "and",Space,Str "nowhere",Space,Str "else]"],Str "."]]+ ,[Para [Str "Now",Space,Str "some",Space,Str "modifiers.",Note [Para [Str "Like",Space,Str "a",Space,Str "citation",Space,Str "without",Space,Str "author:",Space,Cite [Citation {citationId = "item1", citationPrefix = [], citationSuffix = [], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 0}] [Str "[-@item1]"],Str ",",Space,Str "and",Space,Str "now",Space,Str "Doe",Space,Str "with",Space,Str "a",Space,Str "locator",Space,Cite [Citation {citationId = "item2", citationPrefix = [], citationSuffix = [Space,Str "p.",Space,Str "44"], citationMode = SuppressAuthor, citationNoteNum = 0, citationHash = 0}] [Str "[-@item2",Space,Str "p.",Space,Str "44]"],Str "."]]]]+ ,[Para [Str "With",Space,Str "some",Space,Str "markup",Space,Cite [Citation {citationId = "item1", citationPrefix = [Emph [Str "see"]], citationSuffix = [Space,Str "p.",Space,Strong [Str "32"]], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[*see*",Space,Str "@item1",Space,Str "p.",Space,Str "**32**]"],Str "."]]]+,Header 1 ("references",[],[]) [Str "References"]]
tests/markdown-reader-more.native view
@@ -2,9 +2,9 @@ ,Header 2 ("blank-line-before-url-in-link-reference",[],[]) [Str "Blank",Space,Str "line",Space,Str "before",Space,Str "URL",Space,Str "in",Space,Str "link",Space,Str "reference"] ,Para [Link [Str "foo"] ("/url",""),Space,Str "and",Space,Link [Str "bar"] ("/url","title")] ,Header 2 ("raw-context-environments",[],[]) [Str "Raw",Space,Str "ConTeXt",Space,Str "environments"]-,Plain [RawInline "tex" "\\placeformula "]-,RawBlock "context" "\\startformula\n   L_{1} = L_{2}\n   \\stopformula"-,RawBlock "context" "\\start[a2]\n\\start[a2]\n\\stop[a2]\n\\stop[a2]"+,Plain [RawInline (Format "tex") "\\placeformula "]+,RawBlock (Format "context") "\\startformula\n   L_{1} = L_{2}\n   \\stopformula"+,RawBlock (Format "context") "\\start[a2]\n\\start[a2]\n\\stop[a2]\n\\stop[a2]" ,Header 2 ("urls-with-spaces",[],[]) [Str "URLs",Space,Str "with",Space,Str "spaces"] ,Para [Link [Str "foo"] ("/bar%20and%20baz",""),Space,Link [Str "foo"] ("/bar%20and%20baz",""),Space,Link [Str "foo"] ("/bar%20and%20baz",""),Space,Link [Str "foo"] ("bar%20baz","title")] ,Para [Link [Str "baz"] ("/foo%20foo",""),Space,Link [Str "bam"] ("/foo%20fee",""),Space,Link [Str "bork"] ("/foo/zee%20zob","title")]@@ -12,13 +12,13 @@ ,HorizontalRule ,HorizontalRule ,Header 2 ("raw-html-before-header",[],[]) [Str "Raw",Space,Str "HTML",Space,Str "before",Space,Str "header"]-,Para [RawInline "html" "<a>",RawInline "html" "</a>"]+,Para [RawInline (Format "html") "<a>",RawInline (Format "html") "</a>"] ,Header 3 ("my-header",[],[]) [Str "my",Space,Str "header"] ,Header 2 ("in-math",[],[]) [Str "$",Space,Str "in",Space,Str "math"] ,Para [Math InlineMath "\\$2 + \\$3"] ,Header 2 ("commented-out-list-item",[],[]) [Str "Commented-out",Space,Str "list",Space,Str "item"] ,BulletList- [[Plain [Str "one",Space,RawInline "html" "<!--\n- two\n-->"]]+ [[Plain [Str "one",Space,RawInline (Format "html") "<!--\n- two\n-->"]]  ,[Plain [Str "three"]]] ,Header 2 ("backslash-newline",[],[]) [Str "Backslash",Space,Str "newline"] ,Para [Str "hi",LineBreak,Str "there"]@@ -134,4 +134,6 @@ ,Header 2 ("parentheses-in-urls",[],[]) [Str "Parentheses",Space,Str "in",Space,Str "URLs"] ,Para [Link [Str "link"] ("/hi(there)","")] ,Para [Link [Str "link"] ("/hithere)","")]-,Para [Link [Str "linky"] ("hi_(there_(nested))","")]]+,Para [Link [Str "linky"] ("hi_(there_(nested))","")]+,Header 2 ("reference-link-fallbacks",[],[]) [Str "Reference",Space,Str "link",Space,Str "fallbacks"]+,Para [Str "[",Emph [Str "not",Space,Str "a",Space,Str "link"],Str "]",Space,Str "[",Emph [Str "nope"],Str "]\8230"]]
tests/markdown-reader-more.txt view
@@ -231,3 +231,7 @@ [linky]  [linky]: hi_(there_(nested))++## Reference link fallbacks++[*not a link*] [*nope*]...
tests/mediawiki-reader.native view
@@ -1,4 +1,4 @@-Pandoc (Meta {docTitle = [], docAuthors = [], docDate = []})+Pandoc (Meta {unMeta = fromList []}) [Header 1 ("",[],[]) [Str "header"] ,Header 2 ("",[],[]) [Str "header",Space,Str "level",Space,Str "two"] ,Header 3 ("",[],[]) [Str "header",Space,Str "level",Space,Str "3"]@@ -51,11 +51,11 @@ ,Para [Str "bud"] ,Para [Str "another"] ,Header 2 ("",[],[]) [Str "raw",Space,Str "html"]-,Para [Str "hi",Space,RawInline "html" "<span style=\"color:red\">",Emph [Str "there"],RawInline "html" "</span>",Str "."]-,Para [RawInline "html" "<ins>",Str "inserted",RawInline "html" "</ins>"]-,RawBlock "html" "<div class=\"special\">"+,Para [Str "hi",Space,RawInline (Format "html") "<span style=\"color:red\">",Emph [Str "there"],RawInline (Format "html") "</span>",Str "."]+,Para [RawInline (Format "html") "<ins>",Str "inserted",RawInline (Format "html") "</ins>"]+,RawBlock (Format "html") "<div class=\"special\">" ,Para [Str "hi",Space,Emph [Str "there"]]-,RawBlock "html" "</div>"+,RawBlock (Format "html") "</div>" ,Header 2 ("",[],[]) [Str "sup,",Space,Str "sub,",Space,Str "del"] ,Para [Str "H",Subscript [Str "2"],Str "O",Space,Str "base",Superscript [Emph [Str "exponent"]],Space,Strikeout [Str "hello"]] ,Header 2 ("",[],[]) [Str "inline",Space,Str "code"]@@ -84,10 +84,10 @@ ,Para [Link [Str "#My",Space,Str "anchor"] ("#My_anchor","wikilink")] ,Para [Link [Str "and",Space,Str "text"] ("Page#with_anchor","wikilink")] ,Header 2 ("",[],[]) [Str "images"]-,Para [Image [Str "caption"] ("example.jpg","image")]-,Para [Image [Str "the",Space,Emph [Str "caption"],Space,Str "with",Space,Link [Str "external",Space,Str "link"] ("http://google.com","")] ("example.jpg","image")]-,Para [Image [Str "caption"] ("example.jpg","image")]-,Para [Image [Str "example.jpg"] ("example.jpg","image")]+,Para [Image [Str "caption"] ("example.jpg","fig:caption")]+,Para [Image [Str "the",Space,Emph [Str "caption"],Space,Str "with",Space,Link [Str "external",Space,Str "link"] ("http://google.com","")] ("example.jpg","fig:the caption with external link")]+,Para [Image [Str "caption"] ("example.jpg","fig:caption")]+,Para [Image [Str "example.jpg"] ("example.jpg","fig:example.jpg")] ,Header 2 ("",[],[]) [Str "lists"] ,BulletList  [[Plain [Str "Start",Space,Str "each",Space,Str "line"]]@@ -140,7 +140,7 @@      ,[Plain [Str "this",Space,Str "looks",Space,Str "like",Space,Str "a",Space,Str "continuation"]]      ,[Plain [Str "and",Space,Str "is",Space,Str "often",Space,Str "used"]]      ,[Plain [Str "instead",LineBreak,Str "of",Space,Str "<br/>"]]])]]- ,[Plain [RawInline "mediawiki" "{{{template\n|author=John\n|title=My Book\n}}}"]+ ,[Plain [RawInline (Format "mediawiki") "{{{template\n|author=John\n|title=My Book\n}}}"]   ,OrderedList (1,DefaultStyle,DefaultDelim)    [[Plain [Str "five",Space,Str "sub",Space,Str "1"]     ,OrderedList (1,DefaultStyle,DefaultDelim)@@ -168,13 +168,16 @@ ,Para [Code ("",[],[]) "\160hell\160\160\160\160\160\160yeah"] ,Para [Code ("",[],[]) "Start\160with\160a\160space\160in\160the\160first\160column,",LineBreak,Code ("",[],[]) "(before\160the\160<nowiki>).",LineBreak,Code ("",[],[]) "",LineBreak,Code ("",[],[]) "Then\160your\160block\160format\160will\160be",LineBreak,Code ("",[],[]) "\160\160\160\160maintained.",LineBreak,Code ("",[],[]) "",LineBreak,Code ("",[],[]) "This\160is\160good\160for\160copying\160in\160code\160blocks:",LineBreak,Code ("",[],[]) "",LineBreak,Code ("",[],[]) "def\160function():",LineBreak,Code ("",[],[]) "\160\160\160\160\"\"\"documentation\160string\"\"\"",LineBreak,Code ("",[],[]) "",LineBreak,Code ("",[],[]) "\160\160\160\160if\160True:",LineBreak,Code ("",[],[]) "\160\160\160\160\160\160\160\160print\160True",LineBreak,Code ("",[],[]) "\160\160\160\160else:",LineBreak,Code ("",[],[]) "\160\160\160\160\160\160\160\160print\160False"] ,Para [Str "Not"]-,RawBlock "html" "<hr/>"+,RawBlock (Format "html") "<hr/>" ,Para [Str "preformatted"]+,Para [Str "Don't",Space,Str "need"]+,Para [Code ("",[],[]) "a\160blank\160line"]+,Para [Str "around",Space,Str "a",Space,Str "preformatted",Space,Str "block."] ,Header 2 ("",[],[]) [Str "templates"]-,RawBlock "mediawiki" "{{Welcome}}"-,RawBlock "mediawiki" "{{Foo:Bar}}"-,RawBlock "mediawiki" "{{Thankyou|all your effort|Me}}"-,Para [Str "Written",Space,RawInline "mediawiki" "{{{date}}}",Space,Str "by",Space,RawInline "mediawiki" "{{{name}}}",Str "."]+,RawBlock (Format "mediawiki") "{{Welcome}}"+,RawBlock (Format "mediawiki") "{{Foo:Bar}}"+,RawBlock (Format "mediawiki") "{{Thankyou|all your effort|Me}}"+,Para [Str "Written",Space,RawInline (Format "mediawiki") "{{{date}}}",Space,Str "by",Space,RawInline (Format "mediawiki") "{{{name}}}",Str "."] ,Header 2 ("",[],[]) [Str "tables"] ,Table [] [AlignDefault,AlignDefault] [0.0,0.0]  [[]@@ -242,4 +245,5 @@  [[[Para [Str "Orange"]]]] ,Para [Str "Paragraph",Space,Str "after",Space,Str "the",Space,Str "table."] ,Header 2 ("",[],[]) [Str "notes"]-,Para [Str "My",Space,Str "note!",Note [Plain [Str "This."]]]]+,Para [Str "My",Space,Str "note!",Note [Plain [Str "This."]]]+,Para [Str "URL",Space,Str "note.",Note [Plain [Link [Str "http://docs.python.org/library/functions.html#range"] ("http://docs.python.org/library/functions.html#range","")]]]]
tests/mediawiki-reader.wiki view
@@ -274,6 +274,10 @@  Not<hr/> preformatted +Don't need+ a blank line+around a preformatted block.+ == templates ==  {{Welcome}}@@ -370,3 +374,4 @@  My note!<ref>This.</ref> +URL note.<ref>http://docs.python.org/library/functions.html#range</ref>
− tests/mhra.csl
@@ -1,399 +0,0 @@-<?xml version="1.0" encoding="utf-8"?>-<style xmlns="http://purl.org/net/xbiblio/csl" class="note" version="1.0" demote-non-dropping-particle="sort-only">-  <info>-    <title>Modern Humanities Research Association (Note with Bibliography)</title>-    <id>http://www.zotero.org/styles/mhra</id>-    <link href="http://www.zotero.org/styles/mhra" rel="self"/>-    <link href="http://www.mhra.org.uk/Publications/Books/StyleGuide/download.shtml" rel="documentation"/>-    <author>-      <name>Rintze Zelle</name>-      <uri>http://twitter.com/rintzezelle</uri>-    </author>-    <contributor>-      <name>Sebastian Karcher</name>-    </contributor>-    <summary>MHRA format with full notes and bibliography</summary>-    <category field="generic-base"/>-    <category citation-format="note"/>-    <updated>2011-08-18T16:08:33+00:00</updated>-    <rights>This work is licensed under a Creative Commons Attribution-Share Alike 3.0 License: http://creativecommons.org/licenses/by-sa/3.0/</rights>-  </info>-  <locale xml:lang="en">-    <terms>-      <term name="et-al">and others</term>-      <term name="editor" form="verb-short">ed. by</term>-      <term name="edition" form="short">edn</term>-      <term name="translator" form="verb-short">trans. by</term>-    </terms>-  </locale>-  <macro name="author">-    <names variable="author">-      <name name-as-sort-order="first" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="always"/>-      <label form="short" prefix=", " suffix="."/>-      <substitute>-	<names variable="editor"/>-	<names variable="translator"/>-	<text macro="title-note"/>-      </substitute>-    </names>-  </macro>-  <macro name="contributors-note">-    <names variable="author">-      <name and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="never"/>-    </names>-    <text macro="recipient-note"/>-  </macro>-  <macro name="title-note">-    <choose>-      <if type="bill book graphic legal_case motion_picture report song" match="any">-	<text variable="title" font-style="italic" text-case="title"/>-      </if>-      <else>-	<text variable="title" prefix="‘" suffix="’" text-case="title"/>-      </else>-    </choose>-  </macro>-  <macro name="title-short">-    <choose>-      <if disambiguate="true">-	<choose>-	  <if type="bill book graphic legal_case motion_picture report song" match="any">-	    <text variable="title" font-style="italic" text-case="title" form="short"/>-	  </if>-	  <else>-	    <text variable="title" prefix="‘" suffix="’" text-case="title" form="short"/>-	  </else>-	</choose>-      </if>-    </choose>-  </macro>-  <macro name="editor-translator">-    <group delimiter=", ">-      <names variable="editor" delimiter=", ">-	<label form="verb-short" text-case="lowercase" suffix=" "/>-	<name and="text" delimiter=", " delimiter-precedes-last="never"/>-      </names>-      <choose>-	<if variable="author editor" match="any">-	  <names variable="translator" delimiter=", ">-	    <label form="verb-short" text-case="lowercase" suffix=" "/>-	    <name and="text" delimiter=", " delimiter-precedes-last="never"/>-	  </names>-	</if>-      </choose>-    </group>-  </macro>-  <macro name="collection-title">-    <text variable="collection-title" text-case="title"/>-    <text variable="collection-number" prefix=", "/>-  </macro>-  <macro name="locators-note">-    <choose>-      <if type="article-journal">-	<text variable="volume"/>-      </if>-      <else-if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any">-	<group delimiter=", ">-	  <text macro="edition-note"/>-	  <group>-	    <number variable="number-of-volumes" form="numeric"/>-	    <text term="volume" form="short" prefix=" " plural="true"/>-	  </group>-	</group>-      </else-if>-    </choose>-  </macro>-  <macro name="volume">-    <choose>-      <if type="article-journal">-	<text variable="volume"/>-      </if>-      <else-if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any">-	<group delimiter=", ">-	  <text macro="edition-note"/>-	  <group>-	    <number variable="number-of-volumes" form="numeric"/>-	    <text term="volume" form="short" prefix=" " plural="true"/>-	  </group>-	</group>-      </else-if>-    </choose>-  </macro>-  <macro name="issue-note">-    <choose>-      <if type="article-journal">-	<choose>-	  <if variable="volume">-	    <text macro="issued" prefix=" (" suffix=")"/>-	  </if>-	  <else>-	    <text macro="issued" prefix=", "/>-	  </else>-	</choose>-      </if>-      <else-if variable="publisher-place publisher" match="any">-	<group prefix=" (" suffix=")" delimiter=", ">-	  <group delimiter=" ">-	    <choose>-	      <if variable="title" match="none"/>-	      <else-if type="thesis speech" match="any">-		<text variable="genre" prefix="unpublished "/>-	      </else-if>-	    </choose>-	    <text macro="event"/>-	  </group>-	  <text macro="publisher"/>-	  <text macro="issued"/>-	</group>-      </else-if>-      <else>-	<text macro="issued" prefix=", "/>-      </else>-    </choose>-  </macro>-  <macro name="locators-specific-note">-    <choose>-      <if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any">-	<choose>-	  <if is-numeric="volume">-	    <number variable="volume" form="roman" font-variant="small-caps"/>-	  </if>-	</choose>-      </if>-    </choose>-  </macro>-  <macro name="container-title-note">-    <choose>-      <if type="chapter paper-conference" match="any">-	<text term="in" text-case="lowercase" suffix=" "/>-      </if>-    </choose>-    <text variable="container-title" font-style="italic" text-case="title"/>-  </macro>-  <macro name="edition-note">-    <choose>-      <if type="bill book graphic legal_case motion_picture report song chapter paper-conference" match="any">-	<choose>-	  <if is-numeric="edition">-	    <group delimiter=" ">-	      <number variable="edition" form="ordinal"/>-	      <text term="edition" form="short"/>-	    </group>-	  </if>-	  <else>-	    <text variable="edition"/>-	  </else>-	</choose>-      </if>-    </choose>-  </macro>-  <macro name="editor-note">-    <names variable="editor">-      <name and="text" sort-separator=", " delimiter=", "/>-      <label form="short" prefix=", " suffix="."/>-    </names>-  </macro>-  <macro name="translator-note">-    <names variable="translator">-      <name and="text" sort-separator=", " delimiter=", "/>-      <label form="verb-short" prefix=", " suffix="."/>-    </names>-  </macro>-  <macro name="recipient-note">-    <names variable="recipient" delimiter=", ">-      <label form="verb" prefix=" " text-case="lowercase" suffix=" "/>-      <name and="text" delimiter=", "/>-    </names>-  </macro>-  <macro name="recipient-short">-    <names variable="recipient">-      <label form="verb" prefix=" " text-case="lowercase" suffix=" "/>-      <name form="short" and="text" delimiter=", "/>-    </names>-  </macro>-  <macro name="contributors-short">-    <names variable="author">-      <name form="short" and="text" sort-separator=", " delimiter=", " delimiter-precedes-last="never"/>-      <substitute>-	<names variable="editor"/>-	<names variable="translator"/>-      </substitute>-    </names>-    <text macro="recipient-short"/>-  </macro>-  <macro name="interviewer-note">-    <names variable="interviewer" delimiter=", ">-      <label form="verb" prefix=" " text-case="lowercase" suffix=" "/>-      <name and="text" delimiter=", "/>-    </names>-  </macro>-  <macro name="locators-newspaper">-    <choose>-      <if type="article-newspaper">-	<group delimiter=", ">-	  <group>-	    <text variable="edition" suffix=" "/>-	    <text term="edition" prefix=" "/>-	  </group>-	  <group>-	    <text term="section" suffix=" "/>-	    <text variable="section"/>-	  </group>-	</group>-      </if>-    </choose>-  </macro>-  <macro name="event">-    <group>-      <text term="presented at" suffix=" "/>-      <text variable="event"/>-    </group>-  </macro>-  <macro name="publisher">-    <group delimiter=": ">-      <text variable="publisher-place"/>-      <text variable="publisher"/>-    </group>-  </macro>-  <macro name="issued">-    <choose>-      <if type="graphic report article-newspaper" match="any">-	<date variable="issued">-	  <date-part name="day" suffix=" "/>-	  <date-part name="month" suffix=" "/>-	  <date-part name="year"/>-	</date>-      </if>-      <else-if type="bill book graphic legal_case motion_picture report song thesis chapter paper-conference" match="any">-	<date variable="issued">-	  <date-part name="year"/>-	</date>-      </else-if>-      <else>-	<date variable="issued">-	  <date-part name="year"/>-	</date>-      </else>-    </choose>-  </macro>-  <macro name="pages">-    <choose>-      <if type="article-journal">-	<text variable="page" prefix=", "/>-      </if>-      <else>-	<choose>-	  <if variable="volume">-	    <text variable="page" prefix=", "/>-	  </if>-	  <else>-	    <label variable="page" form="short" prefix=", " suffix=" "/>-	    <text variable="page"/>-	  </else>-	</choose>-      </else>-    </choose>-  </macro>-  <macro name="point-locators">-    <text macro="pages"/>-    <choose>-      <if variable="page">-	<group prefix=" (" suffix=")">-	  <label variable="locator" form="short" suffix=" "/>-	  <text variable="locator"/>-	</group>-      </if>-      <else>-	<label variable="locator" form="short" prefix=", " suffix=" "/>-	<text variable="locator"/>-      </else>-    </choose>-  </macro>-  <macro name="archive-note">-    <group delimiter=", ">-      <text variable="archive_location"/>-      <text variable="archive"/>-      <text variable="archive-place"/>-    </group>-  </macro>-  <macro name="access-note">-    <group delimiter=", ">-      <choose>-	<if type="graphic report" match="any">-	  <text macro="archive-note" prefix=", "/>-	</if>-	<else-if type="bill book graphic legal_case motion_picture report song article-journal article-magazine article-newspaper thesis chapter paper-conference" match="none">-	  <text macro="archive-note" prefix=", "/>-	</else-if>-      </choose>-    </group>-    <choose>-      <if variable="DOI">-	<text variable="DOI" prefix=" &lt;doi:" suffix="&gt;"/>-      </if>-      <else>-	<choose>-	  <if variable="URL">-	    <text variable="URL" prefix=" &lt;" suffix="&gt;"/>-	    <group prefix=" [" suffix="]">-	      <text term="accessed" text-case="lowercase"/>-	      <date variable="accessed">-		<date-part name="day" prefix=" "/>-		<date-part name="month" prefix=" "/>-		<date-part name="year" prefix=" "/>-	      </date>-	    </group>-	  </if>-	</choose>-      </else>-    </choose>-  </macro>-  <citation et-al-min="4" et-al-use-first="1" et-al-subsequent-min="4" et-al-subsequent-use-first="1" disambiguate-add-names="true" disambiguate-add-givenname="true">-    <layout prefix="" suffix="." delimiter="; ">-      <choose>-	<if position="subsequent">-	  <text macro="contributors-short"/>-	  <text macro="title-short" prefix=", "/>-	  <text macro="locators-specific-note" prefix=", "/>-	  <text macro="point-locators"/>-	</if>-	<else>-	  <group delimiter=", ">-	    <text macro="contributors-note"/>-	    <text macro="title-note"/>-	    <text macro="container-title-note"/>-	    <text macro="editor-translator"/>-	    <text macro="collection-title"/>-	    <text macro="locators-note"/>-	  </group>-	  <text macro="issue-note"/>-	  <text macro="locators-specific-note" prefix=", "/>-	  <text macro="locators-newspaper" prefix=", "/>-	  <text macro="point-locators"/>-	  <text macro="access-note"/>-	</else>-      </choose>-    </layout>-  </citation>-  <bibliography hanging-indent="true" et-al-min="6" et-al-use-first="6" subsequent-author-substitute="---">-    <sort>-      <key macro="author"/>-      <key variable="title"/>-    </sort>-    <layout suffix=".">-      <group delimiter=", ">-	<text macro="author"/>-	<text macro="title-note"/>-	<text macro="container-title-note"/>-	<text macro="editor-translator"/>-	<text macro="collection-title"/>-	<text macro="volume"/>-      </group>-      <text macro="issue-note"/>-      <text macro="locators-specific-note" prefix=", "/>-      <text macro="locators-newspaper" prefix=", "/>-      <text macro="pages"/>-      <text macro="access-note"/>-    </layout>-  </bibliography>-</style>
+ tests/opml-reader.native view
@@ -0,0 +1,66 @@+Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "Dave",Space,Str "Winer"]]),("date",MetaInlines [Str "Thu,",Space,Str "14",Space,Str "Jul",Space,Str "2005",Space,Str "23:41:05",Space,Str "GMT"]),("title",MetaInlines [Str "States"])]})+[Header 1 ("",[],[]) [Str "United",Space,Str "States"]+,Header 2 ("",[],[]) [Str "Far",Space,Str "West"]+,Header 3 ("",[],[]) [Str "Alaska"]+,Header 3 ("",[],[]) [Str "California"]+,Header 3 ("",[],[]) [Str "Hawaii"]+,Header 3 ("",[],[]) [Strong [Str "Nevada"]]+,Para [Str "I",Space,Str "lived",Space,Str "here",Space,Emph [Str "once"],Str "."]+,Para [Str "Loved",Space,Str "it."]+,Header 4 ("",[],[]) [Link [Str "Reno"] ("http://www.reno.gov","")]+,Header 4 ("",[],[]) [Str "Las",Space,Str "Vegas"]+,Header 4 ("",[],[]) [Str "Ely"]+,Header 4 ("",[],[]) [Str "Gerlach"]+,Header 3 ("",[],[]) [Str "Oregon"]+,Header 3 ("",[],[]) [Str "Washington"]+,Header 2 ("",[],[]) [Str "Great",Space,Str "Plains"]+,Header 3 ("",[],[]) [Str "Kansas"]+,Header 3 ("",[],[]) [Str "Nebraska"]+,Header 3 ("",[],[]) [Str "North",Space,Str "Dakota"]+,Header 3 ("",[],[]) [Str "Oklahoma"]+,Header 3 ("",[],[]) [Str "South",Space,Str "Dakota"]+,Header 2 ("",[],[]) [Str "Mid",Str "-",Str "Atlantic"]+,Header 3 ("",[],[]) [Str "Delaware"]+,Header 3 ("",[],[]) [Str "Maryland"]+,Header 3 ("",[],[]) [Str "New",Space,Str "Jersey"]+,Header 3 ("",[],[]) [Str "New",Space,Str "York"]+,Header 3 ("",[],[]) [Str "Pennsylvania"]+,Header 2 ("",[],[]) [Str "Midwest"]+,Header 3 ("",[],[]) [Str "Illinois"]+,Header 3 ("",[],[]) [Str "Indiana"]+,Header 3 ("",[],[]) [Str "Iowa"]+,Header 3 ("",[],[]) [Str "Kentucky"]+,Header 3 ("",[],[]) [Str "Michigan"]+,Header 3 ("",[],[]) [Str "Minnesota"]+,Header 3 ("",[],[]) [Str "Missouri"]+,Header 3 ("",[],[]) [Str "Ohio"]+,Header 3 ("",[],[]) [Str "West",Space,Str "Virginia"]+,Header 3 ("",[],[]) [Str "Wisconsin"]+,Header 2 ("",[],[]) [Str "Mountains"]+,Header 3 ("",[],[]) [Str "Colorado"]+,Header 3 ("",[],[]) [Str "Idaho"]+,Header 3 ("",[],[]) [Str "Montana"]+,Header 3 ("",[],[]) [Str "Utah"]+,Header 3 ("",[],[]) [Str "Wyoming"]+,Header 2 ("",[],[]) [Str "New",Space,Str "England"]+,Header 3 ("",[],[]) [Str "Connecticut"]+,Header 3 ("",[],[]) [Str "Maine"]+,Header 3 ("",[],[]) [Str "Massachusetts"]+,Header 3 ("",[],[]) [Str "New",Space,Str "Hampshire"]+,Header 3 ("",[],[]) [Str "Rhode",Space,Str "Island"]+,Header 3 ("",[],[]) [Str "Vermont"]+,Header 2 ("",[],[]) [Str "South"]+,Header 3 ("",[],[]) [Str "Alabama"]+,Header 3 ("",[],[]) [Str "Arkansas"]+,Header 3 ("",[],[]) [Str "Florida"]+,Header 3 ("",[],[]) [Str "Georgia"]+,Header 3 ("",[],[]) [Str "Louisiana"]+,Header 3 ("",[],[]) [Str "Mississippi"]+,Header 3 ("",[],[]) [Str "North",Space,Str "Carolina"]+,Header 3 ("",[],[]) [Str "South",Space,Str "Carolina"]+,Header 3 ("",[],[]) [Str "Tennessee"]+,Header 3 ("",[],[]) [Str "Virginia"]+,Header 2 ("",[],[]) [Str "Southwest"]+,Header 3 ("",[],[]) [Str "Arizona"]+,Header 3 ("",[],[]) [Str "New",Space,Str "Mexico"]+,Header 3 ("",[],[]) [Str "Texas"]]
+ tests/opml-reader.opml view
@@ -0,0 +1,83 @@+<?xml version="1.0" encoding="UTF-8"?>+<opml version="2.0">+  <head>+    <title>States</title>+    <dateModified>Thu, 14 Jul 2005 23:41:05 GMT</dateModified>+    <ownerName>Dave Winer</ownerName>+  </head>+  <body>+    <outline text="United States">+      <outline text="Far West">+        <outline text="Alaska"/>+        <outline text="California"/>+        <outline text="Hawaii"/>+          <outline text="&lt;strong&gt;Nevada&lt;/strong&gt;" _note="I lived here *once*.&#10;&#10;Loved it.">+          <outline text="Reno" created="Tue, 12 Jul 2005 23:56:35 GMT" type="link" url="http://www.reno.gov"/>+          <outline text="Las Vegas" created="Tue, 12 Jul 2005 23:56:37 GMT"/>+          <outline text="Ely" created="Tue, 12 Jul 2005 23:56:39 GMT"/>+          <outline text="Gerlach" created="Tue, 12 Jul 2005 23:56:47 GMT"/>+          </outline>+        <outline text="Oregon"/>+        <outline text="Washington"/>+        </outline>+      <outline text="Great Plains">+        <outline text="Kansas"/>+        <outline text="Nebraska"/>+        <outline text="North Dakota"/>+        <outline text="Oklahoma"/>+        <outline text="South Dakota"/>+        </outline>+      <outline text="Mid-Atlantic">+        <outline text="Delaware"/>+        <outline text="Maryland"/>+        <outline text="New Jersey"/>+        <outline text="New York"/>+        <outline text="Pennsylvania"/>+        </outline>+      <outline text="Midwest">+        <outline text="Illinois"/>+        <outline text="Indiana"/>+        <outline text="Iowa"/>+        <outline text="Kentucky"/>+        <outline text="Michigan"/>+        <outline text="Minnesota"/>+        <outline text="Missouri"/>+        <outline text="Ohio"/>+        <outline text="West Virginia"/>+        <outline text="Wisconsin"/>+        </outline>+      <outline text="Mountains">+        <outline text="Colorado"/>+        <outline text="Idaho"/>+        <outline text="Montana"/>+        <outline text="Utah"/>+        <outline text="Wyoming"/>+        </outline>+      <outline text="New England">+        <outline text="Connecticut"/>+        <outline text="Maine"/>+        <outline text="Massachusetts"/>+        <outline text="New Hampshire"/>+        <outline text="Rhode Island"/>+        <outline text="Vermont"/>+        </outline>+      <outline text="South">+        <outline text="Alabama"/>+        <outline text="Arkansas"/>+        <outline text="Florida"/>+        <outline text="Georgia"/>+        <outline text="Louisiana"/>+        <outline text="Mississippi"/>+        <outline text="North Carolina"/>+        <outline text="South Carolina"/>+        <outline text="Tennessee"/>+        <outline text="Virginia"/>+      </outline>+      <outline text="Southwest">+        <outline text="Arizona"/>+        <outline text="New Mexico"/>+        <outline text="Texas"/>+      </outline>+    </outline>+  </body>+</opml>
tests/rst-reader.native view
@@ -1,14 +1,11 @@-Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite",Str ":",Space,Str "Subtitle"], docAuthors = [[Str "John",Space,Str "MacFarlane"],[Str "Anonymous"]], docDate = [Str "July",Space,Str "17,",Space,Str "2006"]})-[DefinitionList- [([Str "Revision"],-   [[Para [Str "3"]]])]-,Header 1 ("",[],[]) [Str "Level",Space,Str "one",Space,Str "header"]+Pandoc (Meta {unMeta = fromList [("authors",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("revision",MetaBlocks [Para [Str "3"]]),("subtitle",MetaInlines [Str "Subtitle"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]})+[Header 1 ("level-one-header",[],[]) [Str "Level",Space,Str "one",Space,Str "header"] ,Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."]-,Header 2 ("",[],[]) [Str "Level",Space,Str "two",Space,Str "header"]-,Header 3 ("",[],[]) [Str "Level",Space,Str "three"]-,Header 4 ("",[],[]) [Str "Level",Space,Str "four",Space,Str "with",Space,Emph [Str "emphasis"]]-,Header 5 ("",[],[]) [Str "Level",Space,Str "five"]-,Header 1 ("",[],[]) [Str "Paragraphs"]+,Header 2 ("level-two-header",[],[]) [Str "Level",Space,Str "two",Space,Str "header"]+,Header 3 ("level-three",[],[]) [Str "Level",Space,Str "three"]+,Header 4 ("level-four-with-emphasis",[],[]) [Str "Level",Space,Str "four",Space,Str "with",Space,Emph [Str "emphasis"]]+,Header 5 ("level-five",[],[]) [Str "Level",Space,Str "five"]+,Header 1 ("paragraphs",[],[]) [Str "Paragraphs"] ,Para [Str "Here\8217s",Space,Str "a",Space,Str "regular",Space,Str "paragraph."] ,Para [Str "In",Space,Str "Markdown",Space,Str "1.0.0",Space,Str "and",Space,Str "earlier.",Space,Str "Version",Space,Str "8.",Space,Str "This",Space,Str "line",Space,Str "turns",Space,Str "into",Space,Str "a",Space,Str "list",Space,Str "item.",Space,Str "Because",Space,Str "a",Space,Str "hard-wrapped",Space,Str "line",Space,Str "in",Space,Str "the",Space,Str "middle",Space,Str "of",Space,Str "a",Space,Str "paragraph",Space,Str "looked",Space,Str "like",Space,Str "a",Space,Str "list",Space,Str "item."] ,Para [Str "Here\8217s",Space,Str "one",Space,Str "with",Space,Str "a",Space,Str "bullet.",Space,Str "*",Space,Str "criminey."]@@ -16,7 +13,7 @@ ,HorizontalRule ,Para [Str "Another:"] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Block",Space,Str "Quotes"]+,Header 1 ("block-quotes",[],[]) [Str "Block",Space,Str "Quotes"] ,Para [Str "Here\8217s",Space,Str "a",Space,Str "block",Space,Str "quote:"] ,BlockQuote  [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "block",Space,Str "quote.",Space,Str "It",Space,Str "is",Space,Str "pretty",Space,Str "short."]]@@ -34,7 +31,7 @@   [Para [Str "nested"]   ,BlockQuote    [Para [Str "nested"]]]]-,Header 1 ("",[],[]) [Str "Code",Space,Str "Blocks"]+,Header 1 ("code-blocks",[],[]) [Str "Code",Space,Str "Blocks"] ,Para [Str "Code:"] ,CodeBlock ("",[],[]) "---- (should be four hyphens)\n\nsub status {\n    print \"working\";\n}" ,CodeBlock ("",[],[]) "this code block is indented by one tab"@@ -42,8 +39,8 @@ ,CodeBlock ("",[],[]) "this block is indented by two tabs\n\nThese should not be escaped:  \\$ \\\\ \\> \\[ \\{" ,Para [Str "And:"] ,CodeBlock ("",["sourceCode","python"],[]) "def my_function(x):\n    return x + 1"-,Header 1 ("",[],[]) [Str "Lists"]-,Header 2 ("",[],[]) [Str "Unordered"]+,Header 1 ("lists",[],[]) [Str "Lists"]+,Header 2 ("unordered",[],[]) [Str "Unordered"] ,Para [Str "Asterisks",Space,Str "tight:"] ,BulletList  [[Plain [Str "asterisk",Space,Str "1"]]@@ -51,9 +48,9 @@  ,[Plain [Str "asterisk",Space,Str "3"]]] ,Para [Str "Asterisks",Space,Str "loose:"] ,BulletList- [[Para [Str "asterisk",Space,Str "1"]]- ,[Para [Str "asterisk",Space,Str "2"]]- ,[Para [Str "asterisk",Space,Str "3"]]]+ [[Plain [Str "asterisk",Space,Str "1"]]+ ,[Plain [Str "asterisk",Space,Str "2"]]+ ,[Plain [Str "asterisk",Space,Str "3"]]] ,Para [Str "Pluses",Space,Str "tight:"] ,BulletList  [[Plain [Str "Plus",Space,Str "1"]]@@ -61,9 +58,9 @@  ,[Plain [Str "Plus",Space,Str "3"]]] ,Para [Str "Pluses",Space,Str "loose:"] ,BulletList- [[Para [Str "Plus",Space,Str "1"]]- ,[Para [Str "Plus",Space,Str "2"]]- ,[Para [Str "Plus",Space,Str "3"]]]+ [[Plain [Str "Plus",Space,Str "1"]]+ ,[Plain [Str "Plus",Space,Str "2"]]+ ,[Plain [Str "Plus",Space,Str "3"]]] ,Para [Str "Minuses",Space,Str "tight:"] ,BulletList  [[Plain [Str "Minus",Space,Str "1"]]@@ -71,10 +68,10 @@  ,[Plain [Str "Minus",Space,Str "3"]]] ,Para [Str "Minuses",Space,Str "loose:"] ,BulletList- [[Para [Str "Minus",Space,Str "1"]]- ,[Para [Str "Minus",Space,Str "2"]]- ,[Para [Str "Minus",Space,Str "3"]]]-,Header 2 ("",[],[]) [Str "Ordered"]+ [[Plain [Str "Minus",Space,Str "1"]]+ ,[Plain [Str "Minus",Space,Str "2"]]+ ,[Plain [Str "Minus",Space,Str "3"]]]+,Header 2 ("ordered",[],[]) [Str "Ordered"] ,Para [Str "Tight:"] ,OrderedList (1,Decimal,Period)  [[Plain [Str "First"]]@@ -87,68 +84,68 @@  ,[Plain [Str "Three"]]] ,Para [Str "Loose",Space,Str "using",Space,Str "tabs:"] ,OrderedList (1,Decimal,Period)- [[Para [Str "First"]]- ,[Para [Str "Second"]]- ,[Para [Str "Third"]]]+ [[Plain [Str "First"]]+ ,[Plain [Str "Second"]]+ ,[Plain [Str "Third"]]] ,Para [Str "and",Space,Str "using",Space,Str "spaces:"] ,OrderedList (1,Decimal,Period)- [[Para [Str "One"]]- ,[Para [Str "Two"]]- ,[Para [Str "Three"]]]+ [[Plain [Str "One"]]+ ,[Plain [Str "Two"]]+ ,[Plain [Str "Three"]]] ,Para [Str "Multiple",Space,Str "paragraphs:"] ,OrderedList (1,Decimal,Period)  [[Para [Str "Item",Space,Str "1,",Space,Str "graf",Space,Str "one."]   ,Para [Str "Item",Space,Str "1.",Space,Str "graf",Space,Str "two.",Space,Str "The",Space,Str "quick",Space,Str "brown",Space,Str "fox",Space,Str "jumped",Space,Str "over",Space,Str "the",Space,Str "lazy",Space,Str "dog\8217s",Space,Str "back."]]- ,[Para [Str "Item",Space,Str "2."]]- ,[Para [Str "Item",Space,Str "3."]]]+ ,[Plain [Str "Item",Space,Str "2."]]+ ,[Plain [Str "Item",Space,Str "3."]]] ,Para [Str "Nested:"] ,BulletList- [[Para [Str "Tab"]+ [[Plain [Str "Tab"]   ,BulletList-   [[Para [Str "Tab"]+   [[Plain [Str "Tab"]     ,BulletList      [[Plain [Str "Tab"]]]]]]] ,Para [Str "Here\8217s",Space,Str "another:"] ,OrderedList (1,Decimal,Period)- [[Para [Str "First"]]+ [[Plain [Str "First"]]  ,[Para [Str "Second:"]   ,BlockQuote    [BulletList     [[Plain [Str "Fee"]]     ,[Plain [Str "Fie"]]     ,[Plain [Str "Foe"]]]]]- ,[Para [Str "Third"]]]-,Header 2 ("",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"]+ ,[Plain [Str "Third"]]]+,Header 2 ("fancy-list-markers",[],[]) [Str "Fancy",Space,Str "list",Space,Str "markers"] ,OrderedList (2,Decimal,TwoParens)  [[Plain [Str "begins",Space,Str "with",Space,Str "2"]]  ,[Para [Str "and",Space,Str "now",Space,Str "3"]   ,Para [Str "with",Space,Str "a",Space,Str "continuation"]   ,OrderedList (4,LowerRoman,Period)    [[Plain [Str "sublist",Space,Str "with",Space,Str "roman",Space,Str "numerals,",Space,Str "starting",Space,Str "with",Space,Str "4"]]-   ,[Para [Str "more",Space,Str "items"]+   ,[Plain [Str "more",Space,Str "items"]     ,OrderedList (1,UpperAlpha,TwoParens)      [[Plain [Str "a",Space,Str "subsublist"]]      ,[Plain [Str "a",Space,Str "subsublist"]]]]]]] ,Para [Str "Nesting:"] ,OrderedList (1,UpperAlpha,Period)- [[Para [Str "Upper",Space,Str "Alpha"]+ [[Plain [Str "Upper",Space,Str "Alpha"]   ,OrderedList (1,UpperRoman,Period)-   [[Para [Str "Upper",Space,Str "Roman."]+   [[Plain [Str "Upper",Space,Str "Roman."]     ,OrderedList (6,Decimal,TwoParens)-     [[Para [Str "Decimal",Space,Str "start",Space,Str "with",Space,Str "6"]+     [[Plain [Str "Decimal",Space,Str "start",Space,Str "with",Space,Str "6"]       ,OrderedList (3,LowerAlpha,OneParen)        [[Plain [Str "Lower",Space,Str "alpha",Space,Str "with",Space,Str "paren"]]]]]]]]] ,Para [Str "Autonumbering:"] ,OrderedList (1,DefaultStyle,DefaultDelim)  [[Plain [Str "Autonumber."]]- ,[Para [Str "More."]+ ,[Plain [Str "More."]   ,OrderedList (1,DefaultStyle,DefaultDelim)    [[Plain [Str "Nested."]]]]] ,Para [Str "Autonumbering",Space,Str "with",Space,Str "explicit",Space,Str "start:"] ,OrderedList (4,LowerAlpha,TwoParens)  [[Plain [Str "item",Space,Str "1"]]  ,[Plain [Str "item",Space,Str "2"]]]-,Header 2 ("",[],[]) [Str "Definition"]+,Header 2 ("definition",[],[]) [Str "Definition"] ,DefinitionList  [([Str "term",Space,Str "1"],    [[Para [Str "Definition",Space,Str "1."]]])@@ -157,7 +154,7 @@     ,Para [Str "Definition",Space,Str "2,",Space,Str "paragraph",Space,Str "2."]]])  ,([Str "term",Space,Str "with",Space,Emph [Str "emphasis"]],    [[Para [Str "Definition",Space,Str "3."]]])]-,Header 1 ("",[],[]) [Str "Field",Space,Str "Lists"]+,Header 1 ("field-lists",[],[]) [Str "Field",Space,Str "Lists"] ,BlockQuote  [DefinitionList   [([Str "address"],@@ -173,18 +170,18 @@    [[Para [Emph [Str "Nowhere"],Str ",",Space,Str "MA,",Space,Str "USA"]]])  ,([Str "phone"],    [[Para [Str "123-4567"]]])]-,Header 1 ("",[],[]) [Str "HTML",Space,Str "Blocks"]+,Header 1 ("html-blocks",[],[]) [Str "HTML",Space,Str "Blocks"] ,Para [Str "Simple",Space,Str "block",Space,Str "on",Space,Str "one",Space,Str "line:"]-,RawBlock "html" "<div>foo</div>"+,RawBlock (Format "html") "<div>foo</div>" ,Para [Str "Now,",Space,Str "nested:"]-,RawBlock "html" "<div>\n    <div>\n        <div>\n            foo\n        </div>\n    </div>\n</div>"-,Header 1 ("",[],[]) [Str "LaTeX",Space,Str "Block"]-,RawBlock "latex" "\\begin{tabular}{|l|l|}\\hline\nAnimal & Number \\\\ \\hline\nDog    & 2      \\\\\nCat    & 1      \\\\ \\hline\n\\end{tabular}"-,Header 1 ("",[],[]) [Str "Inline",Space,Str "Markup"]+,RawBlock (Format "html") "<div>\n    <div>\n        <div>\n            foo\n        </div>\n    </div>\n</div>"+,Header 1 ("latex-block",[],[]) [Str "LaTeX",Space,Str "Block"]+,RawBlock (Format "latex") "\\begin{tabular}{|l|l|}\\hline\nAnimal & Number \\\\ \\hline\nDog    & 2      \\\\\nCat    & 1      \\\\ \\hline\n\\end{tabular}"+,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"] ,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ".",Space,Str "This",Space,Str "is",Space,Strong [Str "strong"],Str "."] ,Para [Str "This",Space,Str "is",Space,Str "code:",Space,Code ("",[],[]) ">",Str ",",Space,Code ("",[],[]) "$",Str ",",Space,Code ("",[],[]) "\\",Str ",",Space,Code ("",[],[]) "\\$",Str ",",Space,Code ("",[],[]) "<html>",Str "."] ,Para [Str "This",Space,Str "is",Subscript [Str "subscripted"],Space,Str "and",Space,Str "this",Space,Str "is",Space,Superscript [Str "superscripted"],Str "."]-,Header 1 ("",[],[]) [Str "Special",Space,Str "Characters"]+,Header 1 ("special-characters",[],[]) [Str "Special",Space,Str "Characters"] ,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "unicode:"] ,BulletList  [[Plain [Str "I",Space,Str "hat:",Space,Str "\206"]]@@ -212,7 +209,7 @@ ,Para [Str "Bang:",Space,Str "!"] ,Para [Str "Plus:",Space,Str "+"] ,Para [Str "Minus:",Space,Str "-"]-,Header 1 ("",[],[]) [Str "Links"]+,Header 1 ("links",[],[]) [Str "Links"] ,Para [Str "Explicit:",Space,Str "a",Space,Link [Str "URL"] ("/url/",""),Str "."] ,Para [Str "Two",Space,Str "anonymous",Space,Str "links:",Space,Link [Str "the",Space,Str "first"] ("/url1/",""),Space,Str "and",Space,Link [Str "the",Space,Str "second"] ("/url2/","")] ,Para [Str "Reference",Space,Str "links:",Space,Link [Str "link1"] ("/url1/",""),Space,Str "and",Space,Link [Str "link2"] ("/url2/",""),Space,Str "and",Space,Link [Str "link1"] ("/url1/",""),Space,Str "again."]@@ -221,20 +218,20 @@ ,Para [Str "Autolinks:",Space,Link [Str "http://example.com/?foo=1&bar=2"] ("http://example.com/?foo=1&bar=2",""),Space,Str "and",Space,Link [Str "nobody@nowhere.net"] ("mailto:nobody@nowhere.net",""),Str "."] ,Para [Str "But",Space,Str "not",Space,Str "here:"] ,CodeBlock ("",[],[]) "http://example.com/"-,Header 1 ("",[],[]) [Str "Images"]+,Header 1 ("images",[],[]) [Str "Images"] ,Para [Str "From",Space,Quoted DoubleQuote [Str "Voyage",Space,Str "dans",Space,Str "la",Space,Str "Lune"],Space,Str "by",Space,Str "Georges",Space,Str "Melies",Space,Str "(1902):"] ,Para [Image [Str "image"] ("lalune.jpg","")] ,Para [Image [Str "Voyage dans la Lune"] ("lalune.jpg","")] ,Para [Str "Here",Space,Str "is",Space,Str "a",Space,Str "movie",Space,Image [Str "movie"] ("movie.jpg",""),Space,Str "icon."] ,Para [Str "And",Space,Str "an",Space,Link [Image [Str "A movie"] ("movie.jpg","")] ("/url",""),Str "."]-,Header 1 ("",[],[]) [Str "Comments"]+,Header 1 ("comments",[],[]) [Str "Comments"] ,Para [Str "First",Space,Str "paragraph"] ,Para [Str "Another",Space,Str "paragraph"] ,Para [Str "A",Space,Str "third",Space,Str "paragraph"]-,Header 1 ("",[],[]) [Str "Line",Space,Str "blocks"]+,Header 1 ("line-blocks",[],[]) [Str "Line",Space,Str "blocks"] ,Para [Str "But",Space,Str "can",Space,Str "a",Space,Str "bee",Space,Str "be",Space,Str "said",Space,Str "to",Space,Str "be",LineBreak,Str "\160\160\160\160or",Space,Str "not",Space,Str "to",Space,Str "be",Space,Str "an",Space,Str "entire",Space,Str "bee,",LineBreak,Str "\160\160\160\160\160\160\160\160when",Space,Str "half",Space,Str "the",Space,Str "bee",Space,Str "is",Space,Str "not",Space,Str "a",Space,Str "bee,",LineBreak,Str "\160\160\160\160\160\160\160\160\160\160\160\160due",Space,Str "to",Space,Str "some",Space,Str "ancient",Space,Str "injury?"] ,Para [Str "Continuation",Space,Str "line",LineBreak,Str "\160\160and",Space,Str "another"]-,Header 1 ("",[],[]) [Str "Simple",Space,Str "Tables"]+,Header 1 ("simple-tables",[],[]) [Str "Simple",Space,Str "Tables"] ,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0]  [[Plain [Str "col",Space,Str "1"]]  ,[Plain [Str "col",Space,Str "2"]]@@ -256,7 +253,7 @@  ,[[Plain [Str "r2",Space,Str "d"]]   ,[Plain [Str "e"]]   ,[Plain [Str "f"]]]]-,Header 1 ("",[],[]) [Str "Grid",Space,Str "Tables"]+,Header 1 ("grid-tables",[],[]) [Str "Grid",Space,Str "Tables"] ,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.2375,0.15,0.1625]  [[Plain [Str "col",Space,Str "1"]]  ,[Plain [Str "col",Space,Str "2"]]@@ -301,26 +298,26 @@     ,[Plain [Str "b",Space,Str "2"]]     ,[Plain [Str "b",Space,Str "2"]]]]   ,[Plain [Str "c",Space,Str "c",Space,Str "2",Space,Str "c",Space,Str "2"]]]]-,Header 1 ("",[],[]) [Str "Footnotes"]+,Header 1 ("footnotes",[],[]) [Str "Footnotes"] ,Para [Note [Para [Str "Note",Space,Str "with",Space,Str "one",Space,Str "line."]]] ,Para [Note [Para [Str "Note",Space,Str "with",Space,Str "continuation",Space,Str "line."]]] ,Para [Note [Para [Str "Note",Space,Str "with"],Para [Str "continuation",Space,Str "block."]]] ,Para [Note [Para [Str "Note",Space,Str "with",Space,Str "continuation",Space,Str "line"],Para [Str "and",Space,Str "a",Space,Str "second",Space,Str "para."]]] ,Para [Str "Not",Space,Str "in",Space,Str "note."]-,Header 1 ("",[],[]) [Str "Math"]+,Header 1 ("math",[],[]) [Str "Math"] ,Para [Str "Some",Space,Str "inline",Space,Str "math",Space,Math InlineMath "E=mc^2",Str ".",Space,Str "Now",Space,Str "some",Space,Str "display",Space,Str "math:"] ,Para [Math DisplayMath "E=mc^2"] ,Para [Math DisplayMath "E = mc^2"] ,Para [Math DisplayMath "E = mc^2",Math DisplayMath "\\alpha = \\beta"] ,Para [Math DisplayMath "E &= mc^2\\\\\nF &= \\pi E",Math DisplayMath "F &= \\gamma \\alpha^2"] ,Para [Str "All",Space,Str "done."]-,Header 1 ("",[],[]) [Str "Default-Role"]+,Header 1 ("default-role",[],[]) [Str "Default-Role"] ,Para [Str "Try",Space,Str "changing",Space,Str "the",Space,Str "default",Space,Str "role",Space,Str "to",Space,Str "a",Space,Str "few",Space,Str "different",Space,Str "things."]-,Header 2 ("",[],[]) [Str "Doesn\8217t",Space,Str "Break",Space,Str "Title",Space,Str "Parsing"]+,Header 2 ("doesnt-break-title-parsing",[],[]) [Str "Doesn\8217t",Space,Str "Break",Space,Str "Title",Space,Str "Parsing"] ,Para [Str "Inline",Space,Str "math:",Space,Math InlineMath "E=mc^2",Space,Str "or",Space,Math InlineMath "E=mc^2",Space,Str "or",Space,Math InlineMath "E=mc^2",Str ".",Space,Str "Other",Space,Str "roles:",Space,Superscript [Str "super"],Str ",",Space,Subscript [Str "sub"],Str "."] ,Para [Math DisplayMath "\\alpha = beta",Math DisplayMath "E = mc^2"] ,Para [Str "Some",Space,Superscript [Str "of"],Space,Str "these",Space,Superscript [Str "words"],Space,Str "are",Space,Str "in",Space,Superscript [Str "superscript"],Str "."] ,Para [Str "Reset",Space,Str "default-role",Space,Str "to",Space,Str "the",Space,Str "default",Space,Str "default."] ,Para [Str "And",Space,Str "now",Space,Str "some-invalid-string-3231231",Space,Str "is",Space,Str "nonsense."]-,Header 2 ("",[],[]) [Str "Literal",Space,Str "symbols"]+,Header 2 ("literal-symbols",[],[]) [Str "Literal",Space,Str "symbols"] ,Para [Str "2*2",Space,Str "=",Space,Str "4*1"]]
tests/rst-reader.rst view
@@ -3,8 +3,7 @@ Subtitle ^^^^^^^^ -:Author: John MacFarlane-:Author: Anonymous+:Authors: John MacFarlane; Anonymous :Date: July 17, 2006 :Revision: 3 
tests/s5.native view
@@ -1,4 +1,4 @@-Pandoc (Meta {docTitle = [Str "My",Space,Str "S5",Space,Str "Document"], docAuthors = [[Str "Sam",Space,Str "Smith"],[Str "Jen",Space,Str "Jones"]], docDate = [Str "July",Space,Str "15,",Space,Str "2006"]})+Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "Sam",Space,Str "Smith"],MetaInlines [Str "Jen",Space,Str "Jones"]]),("date",MetaInlines [Str "July",Space,Str "15,",Space,Str "2006"]),("title",MetaInlines [Str "My",Space,Str "S5",Space,Str "Document"])]}) [Header 1 ("first-slide",[],[]) [Str "First",Space,Str "slide"] ,BulletList  [[Plain [Str "first",Space,Str "bullet"]]
tests/tables.context view
@@ -29,7 +29,7 @@  Simple table without caption: -\placetable[here]{none}+\placetable[here,none]{} \starttable[|r|l|c|l|] \HL \NC Right@@ -111,7 +111,7 @@  Multiline table without caption: -\placetable[here]{none}+\placetable[here,none]{} \starttable[|cp(0.15\textwidth)|lp(0.14\textwidth)|rp(0.16\textwidth)|lp(0.34\textwidth)|] \HL \NC Centered Header@@ -135,7 +135,7 @@  Table without column headers: -\placetable[here]{none}+\placetable[here,none]{} \starttable[|r|l|c|r|] \HL \NC 12@@ -158,7 +158,7 @@  Multiline table without column headers: -\placetable[here]{none}+\placetable[here,none]{} \starttable[|cp(0.15\textwidth)|lp(0.14\textwidth)|rp(0.16\textwidth)|lp(0.34\textwidth)|] \HL \NC First
tests/tables.latex view
@@ -54,34 +54,34 @@  \begin{longtable}[c]{@{}clrl@{}} \hline\noalign{\medskip}-\begin{minipage}[b]{0.15\columnwidth}\centering+\begin{minipage}[b]{0.13\columnwidth}\centering Centered Header-\end{minipage} & \begin{minipage}[b]{0.14\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[b]{0.12\columnwidth}\raggedright Left Aligned-\end{minipage} & \begin{minipage}[b]{0.16\columnwidth}\raggedleft+\end{minipage} & \begin{minipage}[b]{0.14\columnwidth}\raggedleft Right Aligned-\end{minipage} & \begin{minipage}[b]{0.34\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[b]{0.30\columnwidth}\raggedright Default aligned \end{minipage} \\\noalign{\medskip} \hline\noalign{\medskip}-\begin{minipage}[t]{0.15\columnwidth}\centering+\begin{minipage}[t]{0.13\columnwidth}\centering First-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright row-\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedleft+\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft 12.0-\end{minipage} & \begin{minipage}[t]{0.34\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright Example of a row that spans multiple lines. \end{minipage} \\\noalign{\medskip}-\begin{minipage}[t]{0.15\columnwidth}\centering+\begin{minipage}[t]{0.13\columnwidth}\centering Second-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright row-\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedleft+\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft 5.0-\end{minipage} & \begin{minipage}[t]{0.34\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright Here's another one. Note the blank line between rows. \end{minipage} \\\noalign{\medskip}@@ -94,34 +94,34 @@  \begin{longtable}[c]{@{}clrl@{}} \hline\noalign{\medskip}-\begin{minipage}[b]{0.15\columnwidth}\centering+\begin{minipage}[b]{0.13\columnwidth}\centering Centered Header-\end{minipage} & \begin{minipage}[b]{0.14\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[b]{0.12\columnwidth}\raggedright Left Aligned-\end{minipage} & \begin{minipage}[b]{0.16\columnwidth}\raggedleft+\end{minipage} & \begin{minipage}[b]{0.14\columnwidth}\raggedleft Right Aligned-\end{minipage} & \begin{minipage}[b]{0.34\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[b]{0.30\columnwidth}\raggedright Default aligned \end{minipage} \\\noalign{\medskip} \hline\noalign{\medskip}-\begin{minipage}[t]{0.15\columnwidth}\centering+\begin{minipage}[t]{0.13\columnwidth}\centering First-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright row-\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedleft+\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft 12.0-\end{minipage} & \begin{minipage}[t]{0.34\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright Example of a row that spans multiple lines. \end{minipage} \\\noalign{\medskip}-\begin{minipage}[t]{0.15\columnwidth}\centering+\begin{minipage}[t]{0.13\columnwidth}\centering Second-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright row-\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedleft+\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft 5.0-\end{minipage} & \begin{minipage}[t]{0.34\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright Here's another one. Note the blank line between rows. \end{minipage} \\\noalign{\medskip}@@ -145,23 +145,23 @@  \begin{longtable}[c]{@{}clrl@{}} \hline\noalign{\medskip}-\begin{minipage}[t]{0.15\columnwidth}\centering+\begin{minipage}[t]{0.13\columnwidth}\centering First-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright row-\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedleft+\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft 12.0-\end{minipage} & \begin{minipage}[t]{0.34\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright Example of a row that spans multiple lines. \end{minipage} \\\noalign{\medskip}-\begin{minipage}[t]{0.15\columnwidth}\centering+\begin{minipage}[t]{0.13\columnwidth}\centering Second-\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.12\columnwidth}\raggedright row-\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedleft+\end{minipage} & \begin{minipage}[t]{0.14\columnwidth}\raggedleft 5.0-\end{minipage} & \begin{minipage}[t]{0.34\columnwidth}\raggedright+\end{minipage} & \begin{minipage}[t]{0.30\columnwidth}\raggedright Here's another one. Note the blank line between rows. \end{minipage} \\\noalign{\medskip}
tests/tables.man view
@@ -138,7 +138,7 @@ Here\[aq]s the caption. It may span multiple lines. .TS tab(@);-cw(10.50n) lw(9.63n) rw(11.38n) lw(23.63n).+cw(10.5n) lw(9.6n) rw(11.4n) lw(23.6n). T{ Centered Header T}@T{@@ -174,7 +174,7 @@ .PP .TS tab(@);-cw(10.50n) lw(9.63n) rw(11.38n) lw(23.63n).+cw(10.5n) lw(9.6n) rw(11.4n) lw(23.6n). T{ Centered Header T}@T{@@ -244,7 +244,7 @@ .PP .TS tab(@);-cw(10.50n) lw(9.63n) rw(11.38n) lw(23.63n).+cw(10.5n) lw(9.6n) rw(11.4n) lw(23.6n). T{ First T}@T{
tests/tables.mediawiki view
@@ -1,212 +1,146 @@ Simple table with caption: -<table>-<caption>Demonstration of simple table syntax.</caption>-<thead>-<tr class="header">-<th align="right">Right</th>-<th align="left">Left</th>-<th align="center">Center</th>-<th align="left">Default</th>-</tr>-</thead>-<tbody>-<tr class="odd">-<td align="right">12</td>-<td align="left">12</td>-<td align="center">12</td>-<td align="left">12</td>-</tr>-<tr class="even">-<td align="right">123</td>-<td align="left">123</td>-<td align="center">123</td>-<td align="left">123</td>-</tr>-<tr class="odd">-<td align="right">1</td>-<td align="left">1</td>-<td align="center">1</td>-<td align="left">1</td>-</tr>-</tbody>-</table>+{|+|+ Demonstration of simple table syntax.+!align="right"|Right+!Left+!align="center"|Center+!Default+|-+|align="right"|12+|12+|align="center"|12+|12+|-+|align="right"|123+|123+|align="center"|123+|123+|-+|align="right"|1+|1+|align="center"|1+|1+|}  Simple table without caption: -<table>-<thead>-<tr class="header">-<th align="right">Right</th>-<th align="left">Left</th>-<th align="center">Center</th>-<th align="left">Default</th>-</tr>-</thead>-<tbody>-<tr class="odd">-<td align="right">12</td>-<td align="left">12</td>-<td align="center">12</td>-<td align="left">12</td>-</tr>-<tr class="even">-<td align="right">123</td>-<td align="left">123</td>-<td align="center">123</td>-<td align="left">123</td>-</tr>-<tr class="odd">-<td align="right">1</td>-<td align="left">1</td>-<td align="center">1</td>-<td align="left">1</td>-</tr>-</tbody>-</table>+{|+!align="right"|Right+!Left+!align="center"|Center+!Default+|-+|align="right"|12+|12+|align="center"|12+|12+|-+|align="right"|123+|123+|align="center"|123+|123+|-+|align="right"|1+|1+|align="center"|1+|1+|}  Simple table indented two spaces: -<table>-<caption>Demonstration of simple table syntax.</caption>-<thead>-<tr class="header">-<th align="right">Right</th>-<th align="left">Left</th>-<th align="center">Center</th>-<th align="left">Default</th>-</tr>-</thead>-<tbody>-<tr class="odd">-<td align="right">12</td>-<td align="left">12</td>-<td align="center">12</td>-<td align="left">12</td>-</tr>-<tr class="even">-<td align="right">123</td>-<td align="left">123</td>-<td align="center">123</td>-<td align="left">123</td>-</tr>-<tr class="odd">-<td align="right">1</td>-<td align="left">1</td>-<td align="center">1</td>-<td align="left">1</td>-</tr>-</tbody>-</table>+{|+|+ Demonstration of simple table syntax.+!align="right"|Right+!Left+!align="center"|Center+!Default+|-+|align="right"|12+|12+|align="center"|12+|12+|-+|align="right"|123+|123+|align="center"|123+|123+|-+|align="right"|1+|1+|align="center"|1+|1+|}  Multiline table with caption: -<table>-<caption>Here's the caption. It may span multiple lines.</caption>-<col width="15%" />-<col width="13%" />-<col width="16%" />-<col width="33%" />-<thead>-<tr class="header">-<th align="center">Centered Header</th>-<th align="left">Left Aligned</th>-<th align="right">Right Aligned</th>-<th align="left">Default aligned</th>-</tr>-</thead>-<tbody>-<tr class="odd">-<td align="center">First</td>-<td align="left">row</td>-<td align="right">12.0</td>-<td align="left">Example of a row that spans multiple lines.</td>-</tr>-<tr class="even">-<td align="center">Second</td>-<td align="left">row</td>-<td align="right">5.0</td>-<td align="left">Here's another one. Note the blank line between rows.</td>-</tr>-</tbody>-</table>+{|+|+ Here's the caption. It may span multiple lines.+!align="center" width="15%"|Centered Header+!width="13%"|Left Aligned+!align="right" width="16%"|Right Aligned+!width="33%"|Default aligned+|-+|align="center"|First+|row+|align="right"|12.0+|Example of a row that spans multiple lines.+|-+|align="center"|Second+|row+|align="right"|5.0+|Here's another one. Note the blank line between rows.+|}  Multiline table without caption: -<table>-<col width="15%" />-<col width="13%" />-<col width="16%" />-<col width="33%" />-<thead>-<tr class="header">-<th align="center">Centered Header</th>-<th align="left">Left Aligned</th>-<th align="right">Right Aligned</th>-<th align="left">Default aligned</th>-</tr>-</thead>-<tbody>-<tr class="odd">-<td align="center">First</td>-<td align="left">row</td>-<td align="right">12.0</td>-<td align="left">Example of a row that spans multiple lines.</td>-</tr>-<tr class="even">-<td align="center">Second</td>-<td align="left">row</td>-<td align="right">5.0</td>-<td align="left">Here's another one. Note the blank line between rows.</td>-</tr>-</tbody>-</table>+{|+!align="center" width="15%"|Centered Header+!width="13%"|Left Aligned+!align="right" width="16%"|Right Aligned+!width="33%"|Default aligned+|-+|align="center"|First+|row+|align="right"|12.0+|Example of a row that spans multiple lines.+|-+|align="center"|Second+|row+|align="right"|5.0+|Here's another one. Note the blank line between rows.+|}  Table without column headers: -<table>-<tbody>-<tr class="odd">-<td align="right">12</td>-<td align="left">12</td>-<td align="center">12</td>-<td align="right">12</td>-</tr>-<tr class="even">-<td align="right">123</td>-<td align="left">123</td>-<td align="center">123</td>-<td align="right">123</td>-</tr>-<tr class="odd">-<td align="right">1</td>-<td align="left">1</td>-<td align="center">1</td>-<td align="right">1</td>-</tr>-</tbody>-</table>+{|+|align="right"|12+|12+|align="center"|12+|align="right"|12+|-+|align="right"|123+|123+|align="center"|123+|align="right"|123+|-+|align="right"|1+|1+|align="center"|1+|align="right"|1+|}  Multiline table without column headers: -<table>-<col width="15%" />-<col width="13%" />-<col width="16%" />-<col width="33%" />-<tbody>-<tr class="odd">-<td align="center">First</td>-<td align="left">row</td>-<td align="right">12.0</td>-<td align="left">Example of a row that spans multiple lines.</td>-</tr>-<tr class="even">-<td align="center">Second</td>-<td align="left">row</td>-<td align="right">5.0</td>-<td align="left">Here's another one. Note the blank line between rows.</td>-</tr>-</tbody>-</table>+{|+|align="center" width="15%"|First+|width="13%"|row+|align="right" width="16%"|12.0+|width="33%"|Example of a row that spans multiple lines.+|-+|align="center"|Second+|row+|align="right"|5.0+|Here's another one. Note the blank line between rows.+|} 
tests/test-pandoc.hs view
@@ -14,11 +14,13 @@ import qualified Tests.Writers.Native import qualified Tests.Writers.Markdown import qualified Tests.Shared+import qualified Tests.Walk import Text.Pandoc.Shared (inDirectory)  tests :: [Test] tests = [ testGroup "Old" Tests.Old.tests         , testGroup "Shared" Tests.Shared.tests+        , testGroup "Walk" Tests.Walk.tests         , testGroup "Writers"           [ testGroup "Native" Tests.Writers.Native.tests           , testGroup "ConTeXt" Tests.Writers.ConTeXt.tests
tests/testsuite.native view
@@ -1,4 +1,4 @@-Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite"], docAuthors = [[Str "John",Space,Str "MacFarlane"],[Str "Anonymous"]], docDate = [Str "July",Space,Str "17,",Space,Str "2006"]})+Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]}) [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."] ,HorizontalRule ,Header 1 ("headers",[],[]) [Str "Headers"]@@ -228,45 +228,35 @@      ,[Plain [Str "sublist"]]]]])] ,Header 1 ("html-blocks",[],[]) [Str "HTML",Space,Str "Blocks"] ,Para [Str "Simple",Space,Str "block",Space,Str "on",Space,Str "one",Space,Str "line:"]-,RawBlock "html" "<div>"-,Plain [Str "foo"]-,RawBlock "html" "</div>\n"+,Div ("",[],[]) [Plain [Str "foo"]] ,Para [Str "And",Space,Str "nested",Space,Str "without",Space,Str "indentation:"]-,RawBlock "html" "<div>\n<div>\n<div>"-,Plain [Str "foo"]-,RawBlock "html" "</div>\n</div>\n<div>"-,Plain [Str "bar"]-,RawBlock "html" "</div>\n</div>\n"+,Div ("",[],[]) [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "foo"]]],Div ("",[],[]) [Plain [Str "bar"]]] ,Para [Str "Interpreted",Space,Str "markdown",Space,Str "in",Space,Str "a",Space,Str "table:"]-,RawBlock "html" "<table>\n<tr>\n<td>"+,RawBlock (Format "html") "<table>\n<tr>\n<td>" ,Plain [Str "This",Space,Str "is",Space,Emph [Str "emphasized"]]-,RawBlock "html" "</td>\n<td>"+,RawBlock (Format "html") "</td>\n<td>" ,Plain [Str "And",Space,Str "this",Space,Str "is",Space,Strong [Str "strong"]]-,RawBlock "html" "</td>\n</tr>\n</table>\n\n<script type=\"text/javascript\">document.write('This *should not* be interpreted as markdown');</script>\n"+,RawBlock (Format "html") "</td>\n</tr>\n</table>\n\n<script type=\"text/javascript\">document.write('This *should not* be interpreted as markdown');</script>\n" ,Para [Str "Here\8217s",Space,Str "a",Space,Str "simple",Space,Str "block:"]-,RawBlock "html" "<div>\n    "-,Plain [Str "foo"]-,RawBlock "html" "</div>\n"+,Div ("",[],[]) [Plain [Str "foo"]] ,Para [Str "This",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "code",Space,Str "block,",Space,Str "though:"] ,CodeBlock ("",[],[]) "<div>\n    foo\n</div>" ,Para [Str "As",Space,Str "should",Space,Str "this:"] ,CodeBlock ("",[],[]) "<div>foo</div>" ,Para [Str "Now,",Space,Str "nested:"]-,RawBlock "html" "<div>\n    <div>\n        <div>\n            "-,Plain [Str "foo"]-,RawBlock "html" "</div>\n    </div>\n</div>\n"+,Div ("",[],[]) [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "foo"]]]] ,Para [Str "This",Space,Str "should",Space,Str "just",Space,Str "be",Space,Str "an",Space,Str "HTML",Space,Str "comment:"]-,RawBlock "html" "<!-- Comment -->\n"+,RawBlock (Format "html") "<!-- Comment -->\n" ,Para [Str "Multiline:"]-,RawBlock "html" "<!--\nBlah\nBlah\n-->\n\n<!--\n    This is another comment.\n-->\n"+,RawBlock (Format "html") "<!--\nBlah\nBlah\n-->\n\n<!--\n    This is another comment.\n-->\n" ,Para [Str "Code",Space,Str "block:"] ,CodeBlock ("",[],[]) "<!-- Comment -->" ,Para [Str "Just",Space,Str "plain",Space,Str "comment,",Space,Str "with",Space,Str "trailing",Space,Str "spaces",Space,Str "on",Space,Str "the",Space,Str "line:"]-,RawBlock "html" "<!-- foo -->   \n"+,RawBlock (Format "html") "<!-- foo -->   \n" ,Para [Str "Code:"] ,CodeBlock ("",[],[]) "<hr />" ,Para [Str "Hr\8217s:"]-,RawBlock "html" "<hr>\n\n<hr />\n\n<hr />\n\n<hr>   \n\n<hr />  \n\n<hr /> \n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\">\n"+,RawBlock (Format "html") "<hr>\n\n<hr />\n\n<hr />\n\n<hr>   \n\n<hr />  \n\n<hr /> \n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\">\n" ,HorizontalRule ,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"] ,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."]@@ -294,7 +284,7 @@ ,HorizontalRule ,Header 1 ("latex",[],[]) [Str "LaTeX"] ,BulletList- [[Plain [RawInline "tex" "\\cite[22-23]{smith.1899}"]]+ [[Plain [RawInline (Format "tex") "\\cite[22-23]{smith.1899}"]]  ,[Plain [Math InlineMath "2+2=4"]]  ,[Plain [Math InlineMath "x \\in y"]]  ,[Plain [Math InlineMath "\\alpha \\wedge \\omega"]]@@ -309,7 +299,7 @@  ,[Plain [Str "Shoes",Space,Str "($20)",Space,Str "and",Space,Str "socks",Space,Str "($5)."]]  ,[Plain [Str "Escaped",Space,Code ("",[],[]) "$",Str ":",Space,Str "$73",Space,Emph [Str "this",Space,Str "should",Space,Str "be",Space,Str "emphasized"],Space,Str "23$."]]] ,Para [Str "Here\8217s",Space,Str "a",Space,Str "LaTeX",Space,Str "table:"]-,RawBlock "latex" "\\begin{tabular}{|l|l|}\\hline\nAnimal & Number \\\\ \\hline\nDog    & 2      \\\\\nCat    & 1      \\\\ \\hline\n\\end{tabular}"+,RawBlock (Format "latex") "\\begin{tabular}{|l|l|}\\hline\nAnimal & Number \\\\ \\hline\nDog    & 2      \\\\\nCat    & 1      \\\\ \\hline\n\\end{tabular}" ,HorizontalRule ,Header 1 ("special-characters",[],[]) [Str "Special",Space,Str "Characters"] ,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "unicode:"]
tests/testsuite.txt view
@@ -377,7 +377,7 @@ Here's a simple block:  <div>-	foo+foo </div>  This should be a code block, though:@@ -393,11 +393,11 @@ Now, nested:  <div>-	<div>-		<div>-			foo-		</div>-	</div>+ <div>+  <div>+  foo+  </div>+ </div> </div>  This should just be an HTML comment:
tests/textile-reader.native view
@@ -1,13 +1,13 @@-Pandoc (Meta {docTitle = [], docAuthors = [], docDate = []})+Pandoc (Meta {unMeta = fromList []}) [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc",Space,Str "Textile",Space,Str "Reader",Str ".",Space,Str "Part",Space,Str "of",Space,Str "it",Space,Str "comes",LineBreak,Str "from",Space,Str "John",Space,Str "Gruber",Str "\8217",Str "s",Space,Str "markdown",Space,Str "test",Space,Str "suite",Str "."] ,HorizontalRule-,Header 1 ("",[],[]) [Str "Headers"]-,Header 2 ("",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embeded",Space,Str "link"] ("http://www.example.com","")]-,Header 3 ("",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Strong [Str "emphasis"]]-,Header 4 ("",[],[]) [Str "Level",Space,Str "4"]-,Header 5 ("",[],[]) [Str "Level",Space,Str "5"]-,Header 6 ("",[],[]) [Str "Level",Space,Str "6"]-,Header 1 ("",[],[]) [Str "Paragraphs"]+,Header 1 ("headers",[],[]) [Str "Headers"]+,Header 2 ("level-2-with-an-embeded-link",[],[]) [Str "Level",Space,Str "2",Space,Str "with",Space,Str "an",Space,Link [Str "embeded",Space,Str "link"] ("http://www.example.com","")]+,Header 3 ("level-3-with-emphasis",[],[]) [Str "Level",Space,Str "3",Space,Str "with",Space,Strong [Str "emphasis"]]+,Header 4 ("level-4",[],[]) [Str "Level",Space,Str "4"]+,Header 5 ("level-5",[],[]) [Str "Level",Space,Str "5"]+,Header 6 ("level-6",[],[]) [Str "Level",Space,Str "6"]+,Header 1 ("paragraphs",[],[]) [Str "Paragraphs"] ,Para [Str "Here",Str "\8217",Str "s",Space,Str "a",Space,Str "regular",Space,Str "paragraph",Str "."] ,Para [Str "Line",Space,Str "breaks",Space,Str "are",Space,Str "preserved",Space,Str "in",Space,Str "textile",Str ",",Space,Str "so",Space,Str "you",Space,Str "can",Space,Str "not",Space,Str "wrap",Space,Str "your",Space,Str "very",LineBreak,Str "long",Space,Str "paragraph",Space,Str "with",Space,Str "your",Space,Str "favourite",Space,Str "text",Space,Str "editor",Space,Str "and",Space,Str "have",Space,Str "it",Space,Str "rendered",LineBreak,Str "with",Space,Str "no",Space,Str "break",Str "."] ,Para [Str "Here",Str "\8217",Str "s",Space,Str "one",Space,Str "with",Space,Str "a",Space,Str "bullet",Str "."]@@ -16,23 +16,23 @@ ,Para [Str "There",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "paragraph",Space,Str "break",Space,Str "between",Space,Str "here"] ,Para [Str "and",Space,Str "here",Str "."] ,Para [Str "pandoc",Space,Str "converts",Space,Str "textile",Str "."]-,Header 1 ("",[],[]) [Str "Block",Space,Str "Quotes"]+,Header 1 ("block-quotes",[],[]) [Str "Block",Space,Str "Quotes"] ,BlockQuote  [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "famous",Space,Str "quote",Space,Str "from",Space,Str "somebody",Str ".",Space,Str "He",Space,Str "had",Space,Str "a",Space,Str "lot",Space,Str "of",Space,Str "things",Space,Str "to",LineBreak,Str "say",Str ",",Space,Str "so",Space,Str "the",Space,Str "text",Space,Str "is",Space,Str "really",Space,Str "really",Space,Str "long",Space,Str "and",Space,Str "spans",Space,Str "on",Space,Str "multiple",Space,Str "lines",Str "."]] ,Para [Str "And",Space,Str "a",Space,Str "following",Space,Str "paragraph",Str "."]-,Header 1 ("",[],[]) [Str "Code",Space,Str "Blocks"]+,Header 1 ("code-blocks",[],[]) [Str "Code",Space,Str "Blocks"] ,Para [Str "Code",Str ":"] ,CodeBlock ("",[],[]) "    ---- (should be four hyphens)\n\n    sub status {\n        print \"working\";\n    }\n\n    this code block is indented by one tab" ,Para [Str "And",Str ":"] ,CodeBlock ("",[],[]) "        this code block is indented by two tabs\n\n    These should not be escaped:  \\$ \\\\ \\> \\[ \\{" ,CodeBlock ("",[],[]) "Code block with .bc\n        continued\n    @</\\\n" ,Para [Str "Inline",Space,Str "code",Str ":",Space,Code ("",[],[]) "<tt>",Str ",",Space,Code ("",[],[]) "@",Str "."]-,Header 1 ("",[],[]) [Str "Notextile"]+,Header 1 ("notextile",[],[]) [Str "Notextile"] ,Para [Str "A",Space,Str "block",Space,Str "of",Space,Str "text",Space,Str "can",Space,Str "be",Space,Str "protected",Space,Str "with",Space,Str "notextile",Space,Str ":"] ,Para [Str "\nNo *bold* and\n* no bullet\n"] ,Para [Str "and",Space,Str "inlines",Space,Str "can",Space,Str "be",Space,Str "protected",Space,Str "with",Space,Str "double *equals (=)* markup",Str "."]-,Header 1 ("",[],[]) [Str "Lists"]-,Header 2 ("",[],[]) [Str "Unordered"]+,Header 1 ("lists",[],[]) [Str "Lists"]+,Header 2 ("unordered",[],[]) [Str "Unordered"] ,Para [Str "Asterisks",Space,Str "tight",Str ":"] ,BulletList  [[Plain [Str "asterisk",Space,Str "1"]]@@ -42,13 +42,13 @@ ,BulletList  [[Plain [Str "asterisk",Space,Str "1",LineBreak,Str "newline"]]  ,[Plain [Str "asterisk",Space,Str "2"]]]-,Header 2 ("",[],[]) [Str "Ordered"]+,Header 2 ("ordered",[],[]) [Str "Ordered"] ,Para [Str "Tight",Str ":"] ,OrderedList (1,DefaultStyle,DefaultDelim)  [[Plain [Str "First"]]  ,[Plain [Str "Second"]]  ,[Plain [Str "Third"]]]-,Header 2 ("",[],[]) [Str "Nested"]+,Header 2 ("nested",[],[]) [Str "Nested"] ,BulletList  [[Plain [Str "ui",Space,Str "1"]   ,BulletList@@ -63,7 +63,7 @@     ,BulletList      [[Plain [Str "ui",Space,Str "2",Str ".",Str "1",Str ".",Str "1"]]      ,[Plain [Str "ui",Space,Str "2",Str ".",Str "1",Str ".",Str "2"]]]]]]]-,Header 2 ("",[],[]) [Str "Definition",Space,Str "List"]+,Header 2 ("definition-list",[],[]) [Str "Definition",Space,Str "List"] ,DefinitionList  [([Str "coffee"],    [[Plain [Str "Hot",Space,Str "and",Space,Str "black"]]])@@ -74,23 +74,23 @@     ,Para [Str "Cold",Space,Str "drink",Space,Str "that",Space,Str "goes",Space,Str "great",Space,Str "with",Space,Str "cookies",Str "."]]])  ,([Str "beer"],    [[Plain [Str "fresh",Space,Str "and",Space,Str "bitter"]]])]-,Header 1 ("",[],[]) [Str "Inline",Space,Str "Markup"]+,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"] ,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str ".",LineBreak,Str "This",Space,Str "is",Space,Strong [Str "strong"],Str ",",Space,Str "and",Space,Str "so",Space,Strong [Str "is",Space,Str "this"],Str ".",LineBreak,Str "Hyphenated-words-are-ok",Str ",",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str "strange_underscore_notation",Str ".",LineBreak,Str "A",Space,Link [Strong [Str "strong",Space,Str "link"]] ("http://www.foobar.com",""),Str "."] ,Para [Emph [Strong [Str "This",Space,Str "is",Space,Str "strong",Space,Str "and",Space,Str "em",Str "."]],LineBreak,Str "So",Space,Str "is",Space,Strong [Emph [Str "this"]],Space,Str "word",Space,Str "and",Space,Emph [Strong [Str "that",Space,Str "one"]],Str ".",LineBreak,Strikeout [Str "This",Space,Str "is",Space,Str "strikeout",Space,Str "and",Space,Strong [Str "strong"]]] ,Para [Str "Superscripts",Str ":",Space,Str "a",Superscript [Str "bc"],Str "d",Space,Str "a",Superscript [Strong [Str "hello"]],Space,Str "a",Superscript [Str "hello",Space,Str "there"],Str ".",LineBreak,Str "Subscripts",Str ":",Space,Subscript [Str "here"],Space,Str "H",Subscript [Str "2"],Str "O",Str ",",Space,Str "H",Subscript [Str "23"],Str "O",Str ",",Space,Str "H",Subscript [Str "many",Space,Str "of",Space,Str "them"],Str "O",Str "."] ,Para [Str "Dashes",Space,Str ":",Space,Str "How",Space,Str "cool",Space,Str "\8212",Space,Str "automatic",Space,Str "dashes",Str "."] ,Para [Str "Elipses",Space,Str ":",Space,Str "He",Space,Str "thought",Space,Str "and",Space,Str "thought",Space,Str "\8230",Space,Str "and",Space,Str "then",Space,Str "thought",Space,Str "some",Space,Str "more",Str "."] ,Para [Str "Quotes",Space,Str "and",Space,Str "apostrophes",Space,Str ":",Space,Quoted DoubleQuote [Str "I",Str "\8217",Str "d",Space,Str "like",Space,Str "to",Space,Str "thank",Space,Str "you"],Space,Str "for",Space,Str "example",Str "."]-,Header 1 ("",[],[]) [Str "Links"]-,Header 2 ("",[],[]) [Str "Explicit"]+,Header 1 ("links",[],[]) [Str "Links"]+,Header 2 ("explicit",[],[]) [Str "Explicit"] ,Para [Str "Just",Space,Str "a",Space,Link [Str "url"] ("http://www.url.com","")] ,Para [Link [Str "Email",Space,Str "link"] ("mailto:nobody@nowhere.net","")] ,Para [Str "Automatic",Space,Str "linking",Space,Str "to",Space,Link [Str "http://www.example.com"] ("http://www.example.com",""),Str "."] ,Para [Link [Str "Example"] ("http://www.example.com/",""),Str ":",Space,Str "Example",Space,Str "of",Space,Str "a",Space,Str "link",Space,Str "followed",Space,Str "by",Space,Str "a",Space,Str "colon",Str "."] ,Para [Str "A",Space,Str "link",Link [Str "with",Space,Str "brackets"] ("http://www.example.com",""),Str "and",Space,Str "no",Space,Str "spaces",Str "."]-,Header 1 ("",[],[]) [Str "Tables"]+,Header 1 ("tables",[],[]) [Str "Tables"] ,Para [Str "Textile",Space,Str "allows",Space,Str "tables",Space,Str "with",Space,Str "and",Space,Str "without",Space,Str "headers",Space,Str ":"]-,Header 2 ("",[],[]) [Str "Without",Space,Str "headers"]+,Header 2 ("without-headers",[],[]) [Str "Without",Space,Str "headers"] ,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0]  []  [[[Plain [Str "name"]]@@ -106,7 +106,7 @@   ,[Plain [Str "45"]]   ,[Plain [Str "f"]]]] ,Para [Str "and",Space,Str "some",Space,Str "text",Space,Str "following",Space,Str "\8230"]-,Header 2 ("",[],[]) [Str "With",Space,Str "headers"]+,Header 2 ("with-headers",[],[]) [Str "With",Space,Str "headers"] ,Table [] [AlignDefault,AlignDefault,AlignDefault] [0.0,0.0,0.0]  [[Plain [Str "name"]]  ,[Plain [Str "age"]]@@ -120,9 +120,9 @@  ,[[Plain [Str "bella"]]   ,[Plain [Str "45"]]   ,[Plain [Str "f"]]]]-,Header 1 ("",[],[]) [Str "Images"]+,Header 1 ("images",[],[]) [Str "Images"] ,Para [Str "Textile",Space,Str "inline",Space,Str "image",Space,Str "syntax",Str ",",Space,Str "like",Space,LineBreak,Str "here",Space,Image [Str "this is the alt text"] ("this_is_an_image.png","this is the alt text"),LineBreak,Str "and",Space,Str "here",Space,Image [Str ""] ("this_is_an_image.png",""),Str "."]-,Header 1 ("",[],[]) [Str "Attributes"]+,Header 1 ("attributes",[],[]) [Str "Attributes"] ,Header 2 ("ident",["bar","foo"],[("style","color:red"),("lang","en")]) [Str "HTML",Space,Str "and",Space,Str "CSS",Space,Str "attributes",Space,Str "are",Space,Str "parsed",Space,Str "in",Space,Str "headers",Str "."] ,Para [Str "as",Space,Str "well",Space,Str "as",Space,Strong [Str "inline",Space,Str "attributes"],Space,Str "of",Space,Str " all kind"] ,Para [Str "and",Space,Str "paragraph",Space,Str "attributes",Str ",",Space,Str "and",Space,Str "table",Space,Str "attributes",Str "."]@@ -134,32 +134,34 @@  ,[[Plain [Str "joan"]]   ,[Plain [Str "24"]]   ,[Plain [Str "f"]]]]-,Header 1 ("",[],[]) [Str "Raw",Space,Str "HTML"]-,Para [Str "However",Str ",",Space,RawInline "html" "<strong>",Space,Str "raw",Space,Str "HTML",Space,Str "inlines",Space,RawInline "html" "</strong>",Space,Str "are",Space,Str "accepted",Str ",",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str ":"]-,RawBlock "html" "<div class=\"foobar\">"-,Para [Str "any",Space,Strong [Str "Raw",Space,Str "HTML",Space,Str "Block"],Space,Str "with",Space,Str "bold",LineBreak]-,RawBlock "html" "</div>"+,Header 1 ("entities",[],[]) [Str "Entities"]+,Para [Str "*",LineBreak,Str "&"]+,Header 1 ("raw-html",[],[]) [Str "Raw",Space,Str "HTML"]+,Para [Str "However",Str ",",Space,RawInline (Format "html") "<strong>",Space,Str "raw",Space,Str "HTML",Space,Str "inlines",Space,RawInline (Format "html") "</strong>",Space,Str "are",Space,Str "accepted",Str ",",Space,Str "as",Space,Str "well",Space,Str "as",Space,Str ":"]+,RawBlock (Format "html") "<div class=\"foobar\">"+,Para [Str "any",Space,Strong [Str "Raw",Space,Str "HTML",Space,Str "Block"],Space,Str "with",Space,Str "bold"]+,RawBlock (Format "html") "</div>" ,Para [Str "Html",Space,Str "blocks",Space,Str "can",Space,Str "be"]-,RawBlock "html" "<div>"+,RawBlock (Format "html") "<div>" ,Para [Str "inlined"]-,RawBlock "html" "</div>"+,RawBlock (Format "html") "</div>" ,Para [Str "as",Space,Str "well",Str "."] ,BulletList  [[Plain [Str "this",Space,Str "<",Str "div",Str ">",Space,Str "won",Str "\8217",Str "t",Space,Str "produce",Space,Str "raw",Space,Str "html",Space,Str "blocks",Space,Str "<",Str "/div",Str ">"]]- ,[Plain [Str "but",Space,Str "this",Space,RawInline "html" "<strong>",Space,Str "will",Space,Str "produce",Space,Str "inline",Space,Str "html",Space,RawInline "html" "</strong>"]]]+ ,[Plain [Str "but",Space,Str "this",Space,RawInline (Format "html") "<strong>",Space,Str "will",Space,Str "produce",Space,Str "inline",Space,Str "html",Space,RawInline (Format "html") "</strong>"]]] ,Para [Str "Can",Space,Str "you",Space,Str "prove",Space,Str "that",Space,Str "2",Space,Str "<",Space,Str "3",Space,Str "?"]-,Header 1 ("",[],[]) [Str "Raw",Space,Str "LaTeX"]+,Header 1 ("raw-latex",[],[]) [Str "Raw",Space,Str "LaTeX"] ,Para [Str "This",Space,Str "Textile",Space,Str "reader",Space,Str "also",Space,Str "accepts",Space,Str "raw",Space,Str "LaTeX",Space,Str "for",Space,Str "blocks",Space,Str ":"]-,RawBlock "latex" "\\begin{itemize}\n  \\item one\n  \\item two\n\\end{itemize}"-,Para [Str "and",Space,Str "for",Space,RawInline "latex" "\\emph{inlines}",Str "."]-,Header 1 ("",[],[]) [Str "Acronyms",Space,Str "and",Space,Str "marks"]+,RawBlock (Format "latex") "\\begin{itemize}\n  \\item one\n  \\item two\n\\end{itemize}"+,Para [Str "and",Space,Str "for",Space,RawInline (Format "latex") "\\emph{inlines}",Str "."]+,Header 1 ("acronyms-and-marks",[],[]) [Str "Acronyms",Space,Str "and",Space,Str "marks"] ,Para [Str "PBS (Public Broadcasting System)"] ,Para [Str "Hi",Str "\8482"] ,Para [Str "Hi",Space,Str "\8482"] ,Para [Str "\174",Space,Str "Hi",Str "\174"] ,Para [Str "Hi",Str "\169",Str "2008",Space,Str "\169",Space,Str "2008"]-,Header 1 ("",[],[]) [Str "Footnotes"]+,Header 1 ("footnotes",[],[]) [Str "Footnotes"] ,Para [Str "A",Space,Str "note",Str ".",Note [Para [Str "The",Space,Str "note",LineBreak,Str "is",Space,Str "here",Str "!"]],Space,Str "Another",Space,Str "note",Note [Para [Str "Other",Space,Str "note",Str "."]],Str "."]-,Header 1 ("",[],[]) [Str "Comment",Space,Str "blocks"]+,Header 1 ("comment-blocks",[],[]) [Str "Comment",Space,Str "blocks"] ,Null ,Para [Str "not",Space,Str "a",Space,Str "comment",Str "."]]
tests/textile-reader.textile view
@@ -203,6 +203,11 @@ | name   | age | sex | | joan   | 24  | f   | +h1. Entities++&#42;+&amp;+ h1. Raw HTML  However, <strong> raw HTML inlines </strong> are accepted, as well as :
tests/writer.docbook view
@@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8" ?>-<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"-                  "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd">+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"+                  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> <article>   <articleinfo>     <title>Pandoc Test Suite</title>@@ -862,23 +862,19 @@   <para>     Simple block on one line:   </para>-  <div>-  foo-  </div>   <para>+    foo+  </para>+  <para>     And nested without indentation:   </para>-  <div>-  <div>-  <div>-  foo-  </div>-  </div>-  <div>-  bar-  </div>-  </div>   <para>+    foo+  </para>+  <para>+    bar+  </para>+  <para>     Interpreted markdown in a table:   </para>   <table>@@ -896,11 +892,10 @@   <para>     Here’s a simple block:   </para>-  <div>-      -  foo-  </div>   <para>+    foo+  </para>+  <para>     This should be a code block, though:   </para>   <programlisting>@@ -917,14 +912,9 @@   <para>     Now, nested:   </para>-  <div>-      <div>-          <div>-              -  foo-  </div>-      </div>-  </div>+  <para>+    foo+  </para>   <para>     This should just be an HTML comment:   </para>
tests/writer.fb2 view
@@ -1,2 +1,2 @@ <?xml version="1.0" encoding="UTF-8"?>-<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><book-title>Pandoc Test Suite</book-title><author><first-name>John</first-name><last-name>MacFarlane</last-name></author><author><nickname>Anonymous</nickname></author><date>July 17, 2006</date></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p>Pandoc Test Suite</p></title><annotation><p>John MacFarlane</p><p>Anonymous</p><p>July 17, 2006</p></annotation><section><p>This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Headers</p></title><section><title><p>Level 2 with an embedded link &lt;/url&gt;</p></title><section><title><p>Level 3 with emphasis</p></title><section><title><p>Level 4</p></title><section><title><p>Level 5</p></title></section></section></section></section></section><section><title><p>Level 1</p></title><section><title><p>Level 2 with emphasis</p></title><section><title><p>Level 3</p></title><p>with no blank line</p></section></section><section><title><p>Level 2</p></title><p>with no blank line</p><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Paragraphs</p></title><p>Here’s a regular paragraph.</p><p>In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.</p><p>Here’s one with a bullet. * criminey.</p><p>There should be a hard line break<empty-line />here.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Block Quotes</p></title><p>E-mail style:</p><cite><p>This is a block quote. It is pretty short.</p></cite><cite><p>Code in a block quote:</p><empty-line /><p><code>sub status {</code></p><p><code>    print &quot;working&quot;;</code></p><p><code>}</code></p><empty-line /><p>A list:</p><p> 1. item one</p><p> 2. item two</p><p>Nested block quotes:</p><cite><p>nested</p></cite><cite><p>nested</p></cite></cite><p>This should not be a block quote: 2 &gt; 1.</p><p>And a following paragraph.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Code Blocks</p></title><p>Code:</p><empty-line /><p><code>---- (should be four hyphens)</code></p><p><code></code></p><p><code>sub status {</code></p><p><code>    print &quot;working&quot;;</code></p><p><code>}</code></p><p><code></code></p><p><code>this code block is indented by one tab</code></p><empty-line /><p>And:</p><empty-line /><p><code>    this code block is indented by two tabs</code></p><p><code></code></p><p><code>These should not be escaped:  \$ \\ \&gt; \[ \{</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Lists</p></title><section><title><p>Unordered</p></title><p>Asterisks tight:</p><p>• asterisk 1</p><p>• asterisk 2</p><p>• asterisk 3</p><p>Asterisks loose:</p><p>• asterisk 1<empty-line /></p><p>• asterisk 2<empty-line /></p><p>• asterisk 3<empty-line /></p><p>Pluses tight:</p><p>• Plus 1</p><p>• Plus 2</p><p>• Plus 3</p><p>Pluses loose:</p><p>• Plus 1<empty-line /></p><p>• Plus 2<empty-line /></p><p>• Plus 3<empty-line /></p><p>Minuses tight:</p><p>• Minus 1</p><p>• Minus 2</p><p>• Minus 3</p><p>Minuses loose:</p><p>• Minus 1<empty-line /></p><p>• Minus 2<empty-line /></p><p>• Minus 3<empty-line /></p></section><section><title><p>Ordered</p></title><p>Tight:</p><p> 1. First</p><p> 2. Second</p><p> 3. Third</p><p>and:</p><p> 1. One</p><p> 2. Two</p><p> 3. Three</p><p>Loose using tabs:</p><p> 1. First<empty-line /></p><p> 2. Second<empty-line /></p><p> 3. Third<empty-line /></p><p>and using spaces:</p><p> 1. One<empty-line /></p><p> 2. Two<empty-line /></p><p> 3. Three<empty-line /></p><p>Multiple paragraphs:</p><p> 1. Item 1, graf one.<empty-line />Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.<empty-line /></p><p> 2. Item 2.<empty-line /></p><p> 3. Item 3.<empty-line /></p></section><section><title><p>Nested</p></title><p>• Tab<p>◦ Tab<p>* Tab</p></p></p><p>Here’s another:</p><p> 1. First</p><p> 2. Second:<p>   • Fee</p><p>   • Fie</p><p>   • Foe</p></p><p> 3. Third</p><p>Same thing but with paragraphs:</p><p> 1. First<empty-line /></p><p> 2. Second:<empty-line /><p>   • Fee</p><p>   • Fie</p><p>   • Foe</p></p><p> 3. Third<empty-line /></p></section><section><title><p>Tabs and spaces</p></title><p>• this is a list item indented with tabs<empty-line /></p><p>• this is a list item indented with spaces<empty-line /><p>◦ this is an example list item indented with tabs<empty-line /></p><p>◦ this is an example list item indented with spaces<empty-line /></p></p></section><section><title><p>Fancy list markers</p></title><p> (2) begins with 2</p><p> (3) and now 3<empty-line />with a continuation<empty-line /><p> (3) iv. sublist with roman numerals, starting with 4</p><p> (3) v. more items<p> (3) v. (A) a subsublist</p><p> (3) v. (B) a subsublist</p></p></p><p>Nesting:</p><p> A. Upper Alpha<p> A. I. Upper Roman.<p> A. I. (6) Decimal start with 6<p> A. I. (6) c) Lower alpha with paren</p></p></p></p><p>Autonumbering:</p><p> 1. Autonumber.</p><p> 2. More.<p> 2. 1. Nested.</p></p><p>Should not be a list item:</p><p>M.A. 2007</p><p>B. Williams</p><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Definition Lists</p></title><p>Tight using spaces:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Tight using tabs:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Loose:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Multiple blocks with italics:</p><p><strong><emphasis>apple</emphasis></strong></p><p>    red fruit<empty-line />    contains seeds, crisp, pleasant to taste<empty-line /></p><p><strong><emphasis>orange</emphasis></strong></p><p>    orange fruit<empty-line /><empty-line /><p><code>    { orange code block }</code></p><empty-line /><cite><p>    orange block quote</p></cite></p><p>Multiple definitions, tight:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line />    bank<empty-line /></p><p>Multiple definitions, loose:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line />    bank<empty-line /></p><p>Blank line after term, indented marker, alternate markers:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /><p> 1. sublist</p><p> 2. sublist</p></p></section><section><title><p>HTML Blocks</p></title><p>Simple block on one line:</p><empty-line /><p><code>&lt;div&gt;</code></p><empty-line />foo<empty-line /><p><code>&lt;/div&gt;</code></p><empty-line /><p>And nested without indentation:</p><empty-line /><p><code>&lt;div&gt;</code></p><p><code>&lt;div&gt;</code></p><p><code>&lt;div&gt;</code></p><empty-line />foo<empty-line /><p><code>&lt;/div&gt;</code></p><p><code>&lt;/div&gt;</code></p><p><code>&lt;div&gt;</code></p><empty-line />bar<empty-line /><p><code>&lt;/div&gt;</code></p><p><code>&lt;/div&gt;</code></p><empty-line /><p>Interpreted markdown in a table:</p><empty-line /><p><code>&lt;table&gt;</code></p><p><code>&lt;tr&gt;</code></p><p><code>&lt;td&gt;</code></p><empty-line />This is <emphasis>emphasized</emphasis><empty-line /><p><code>&lt;/td&gt;</code></p><p><code>&lt;td&gt;</code></p><empty-line />And this is <strong>strong</strong><empty-line /><p><code>&lt;/td&gt;</code></p><p><code>&lt;/tr&gt;</code></p><p><code>&lt;/table&gt;</code></p><p><code></code></p><p><code>&lt;script type=&quot;text/javascript&quot;&gt;document.write(&#39;This *should not* be interpreted as markdown&#39;);&lt;/script&gt;</code></p><empty-line /><p>Here’s a simple block:</p><empty-line /><p><code>&lt;div&gt;</code></p><p><code>    </code></p><empty-line />foo<empty-line /><p><code>&lt;/div&gt;</code></p><empty-line /><p>This should be a code block, though:</p><empty-line /><p><code>&lt;div&gt;</code></p><p><code>    foo</code></p><p><code>&lt;/div&gt;</code></p><empty-line /><p>As should this:</p><empty-line /><p><code>&lt;div&gt;foo&lt;/div&gt;</code></p><empty-line /><p>Now, nested:</p><empty-line /><p><code>&lt;div&gt;</code></p><p><code>    &lt;div&gt;</code></p><p><code>        &lt;div&gt;</code></p><p><code>            </code></p><empty-line />foo<empty-line /><p><code>&lt;/div&gt;</code></p><p><code>    &lt;/div&gt;</code></p><p><code>&lt;/div&gt;</code></p><empty-line /><p>This should just be an HTML comment:</p><empty-line /><p><code>&lt;!-- Comment --&gt;</code></p><empty-line /><p>Multiline:</p><empty-line /><p><code>&lt;!--</code></p><p><code>Blah</code></p><p><code>Blah</code></p><p><code>--&gt;</code></p><p><code></code></p><p><code>&lt;!--</code></p><p><code>    This is another comment.</code></p><p><code>--&gt;</code></p><empty-line /><p>Code block:</p><empty-line /><p><code>&lt;!-- Comment --&gt;</code></p><empty-line /><p>Just plain comment, with trailing spaces on the line:</p><empty-line /><p><code>&lt;!-- foo --&gt;   </code></p><empty-line /><p>Code:</p><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><p>Hr’s:</p><empty-line /><p><code>&lt;hr&gt;</code></p><p><code></code></p><p><code>&lt;hr /&gt;</code></p><p><code></code></p><p><code>&lt;hr /&gt;</code></p><p><code></code></p><p><code>&lt;hr&gt;   </code></p><p><code></code></p><p><code>&lt;hr /&gt;  </code></p><p><code></code></p><p><code>&lt;hr /&gt; </code></p><p><code></code></p><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;</code></p><p><code></code></p><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;</code></p><p><code></code></p><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot;&gt;</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Inline Markup</p></title><p>This is <emphasis>emphasized</emphasis>, and so <emphasis>is this</emphasis>.</p><p>This is <strong>strong</strong>, and so <strong>is this</strong>.</p><p>An <emphasis>emphasized link<a l:href="#l1" type="note"><sup>[1]</sup></a></emphasis>.</p><p><strong><emphasis>This is strong and em.</emphasis></strong></p><p>So is <strong><emphasis>this</emphasis></strong> word.</p><p><strong><emphasis>This is strong and em.</emphasis></strong></p><p>So is <strong><emphasis>this</emphasis></strong> word.</p><p>This is code: <code>&gt;</code>, <code>$</code>, <code>\</code>, <code>\$</code>, <code>&lt;html&gt;</code>.</p><p><strikethrough>This is <emphasis>strikeout</emphasis>.</strikethrough></p><p>Superscripts: a<sup>bc</sup>d a<sup><emphasis>hello</emphasis></sup> a<sup>hello there</sup>.</p><p>Subscripts: H<sub>2</sub>O, H<sub>23</sub>O, H<sub>many of them</sub>O.</p><p>These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Smart quotes, ellipses, dashes</p></title><p>“Hello,” said the spider. “‘Shelob’ is my name.”</p><p>‘A’, ‘B’, and ‘C’ are letters.</p><p>‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’</p><p>‘He said, “I want to go.”’ Were you alive in the 70’s?</p><p>Here is some quoted ‘<code>code</code>’ and a “quoted link<a l:href="#l2" type="note"><sup>[2]</sup></a>”.</p><p>Some dashes: one—two — three—four — five.</p><p>Dashes between numbers: 5–7, 255–66, 1987–1999.</p><p>Ellipses…and…and….</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>LaTeX</p></title><p>• </p><p>• <code>2+2=4</code></p><p>• <code>x \in y</code></p><p>• <code>\alpha \wedge \omega</code></p><p>• <code>223</code></p><p>• <code>p</code>-Tree</p><p>• Here’s some display math: <code>\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</code></p><p>• Here’s one that has a line break in it: <code>\alpha + \omega \times x^2</code>.</p><p>These shouldn’t be math:</p><p>• To get the famous equation, write <code>$e = mc^2$</code>.</p><p>• $22,000 is a <emphasis>lot</emphasis> of money. So is $34,000. (It worked if “lot” is emphasized.)</p><p>• Shoes ($20) and socks ($5).</p><p>• Escaped <code>$</code>: $73 <emphasis>this should be emphasized</emphasis> 23$.</p><p>Here’s a LaTeX table:</p><empty-line /><p><code>\begin{tabular}{|l|l|}\hline</code></p><p><code>Animal &amp; Number \\ \hline</code></p><p><code>Dog    &amp; 2      \\</code></p><p><code>Cat    &amp; 1      \\ \hline</code></p><p><code>\end{tabular}</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Special Characters</p></title><p>Here is some unicode:</p><p>• I hat: Î</p><p>• o umlaut: ö</p><p>• section: §</p><p>• set membership: ∈</p><p>• copyright: ©</p><p>AT&amp;T has an ampersand in their name.</p><p>AT&amp;T is another way to write it.</p><p>This &amp; that.</p><p>4 &lt; 5.</p><p>6 &gt; 5.</p><p>Backslash: \</p><p>Backtick: `</p><p>Asterisk: *</p><p>Underscore: _</p><p>Left brace: {</p><p>Right brace: }</p><p>Left bracket: [</p><p>Right bracket: ]</p><p>Left paren: (</p><p>Right paren: )</p><p>Greater-than: &gt;</p><p>Hash: #</p><p>Period: .</p><p>Bang: !</p><p>Plus: +</p><p>Minus: -</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Links</p></title><section><title><p>Explicit</p></title><p>Just a URL<a l:href="#l3" type="note"><sup>[3]</sup></a>.</p><p>URL and title<a l:href="#l4" type="note"><sup>[4]</sup></a>.</p><p>URL and title<a l:href="#l5" type="note"><sup>[5]</sup></a>.</p><p>URL and title<a l:href="#l6" type="note"><sup>[6]</sup></a>.</p><p>URL and title<a l:href="#l7" type="note"><sup>[7]</sup></a></p><p>URL and title<a l:href="#l8" type="note"><sup>[8]</sup></a></p><p>with_underscore<a l:href="#l9" type="note"><sup>[9]</sup></a></p><p>Email link<a l:href="#l10" type="note"><sup>[10]</sup></a></p><p>Empty<a l:href="#l11" type="note"><sup>[11]</sup></a>.</p></section><section><title><p>Reference</p></title><p>Foo bar<a l:href="#l12" type="note"><sup>[12]</sup></a>.</p><p>Foo bar<a l:href="#l13" type="note"><sup>[13]</sup></a>.</p><p>Foo bar<a l:href="#l14" type="note"><sup>[14]</sup></a>.</p><p>With embedded [brackets]<a l:href="#l15" type="note"><sup>[15]</sup></a>.</p><p>b<a l:href="#l16" type="note"><sup>[16]</sup></a> by itself should be a link.</p><p>Indented once<a l:href="#l17" type="note"><sup>[17]</sup></a>.</p><p>Indented twice<a l:href="#l18" type="note"><sup>[18]</sup></a>.</p><p>Indented thrice<a l:href="#l19" type="note"><sup>[19]</sup></a>.</p><p>This should [not][] be a link.</p><empty-line /><p><code>[not]: /url</code></p><empty-line /><p>Foo bar<a l:href="#l20" type="note"><sup>[20]</sup></a>.</p><p>Foo biz<a l:href="#l21" type="note"><sup>[21]</sup></a>.</p></section><section><title><p>With ampersands</p></title><p>Here’s a link with an ampersand in the URL<a l:href="#l22" type="note"><sup>[22]</sup></a>.</p><p>Here’s a link with an amersand in the link text: AT&amp;T<a l:href="#l23" type="note"><sup>[23]</sup></a>.</p><p>Here’s an inline link<a l:href="#l24" type="note"><sup>[24]</sup></a>.</p><p>Here’s an inline link in pointy braces<a l:href="#l25" type="note"><sup>[25]</sup></a>.</p></section><section><title><p>Autolinks</p></title><p>With an ampersand: http://example.com/?foo=1&amp;bar=2<a l:href="#l26" type="note"><sup>[26]</sup></a></p><p>• In a list?</p><p>• http://example.com/<a l:href="#l27" type="note"><sup>[27]</sup></a></p><p>• It should.</p><p>An e-mail address: nobody@nowhere.net<a l:href="#l28" type="note"><sup>[28]</sup></a></p><cite><p>Blockquoted: http://example.com/<a l:href="#l29" type="note"><sup>[29]</sup></a></p></cite><p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p><empty-line /><p><code>or here: &lt;http://example.com/&gt;</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Images</p></title><p>From “Voyage dans la Lune” by Georges Melies (1902):</p><image l:href="#image1" l:type="imageType" alt="lalune" title="Voyage dans la Lune" /><p>Here is a movie <image l:href="#image2" l:type="inlineImageType" alt="movie" /> icon.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Footnotes</p></title><p>Here is a footnote reference,<a l:href="#n30" type="note"><sup>[30]</sup></a> and another.<a l:href="#n31" type="note"><sup>[31]</sup></a> This should <emphasis>not</emphasis> be a footnote reference, because it contains a space.[^my note] Here is an inline note.<a l:href="#n32" type="note"><sup>[32]</sup></a></p><cite><p>Notes can go in quotes.<a l:href="#n33" type="note"><sup>[33]</sup></a></p></cite><p> 1. And in list items.<a l:href="#n34" type="note"><sup>[34]</sup></a></p><p>This paragraph should not be part of the note, as it is not indented.</p></section></body><body name="notes"><section id="l1"><title><p>1</p></title><p><code>/url</code></p></section><section id="l2"><title><p>2</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l3"><title><p>3</p></title><p><code>/url/</code></p></section><section id="l4"><title><p>4</p></title><p>title: <code>/url/</code></p></section><section id="l5"><title><p>5</p></title><p>title preceded by two spaces: <code>/url/</code></p></section><section id="l6"><title><p>6</p></title><p>title preceded by a tab: <code>/url/</code></p></section><section id="l7"><title><p>7</p></title><p>title with &quot;quotes&quot; in it: <code>/url/</code></p></section><section id="l8"><title><p>8</p></title><p>title with single quotes: <code>/url/</code></p></section><section id="l9"><title><p>9</p></title><p><code>/url/with_underscore</code></p></section><section id="l10"><title><p>10</p></title><p><code>mailto:nobody@nowhere.net</code></p></section><section id="l11"><title><p>11</p></title><p><code></code></p></section><section id="l12"><title><p>12</p></title><p><code>/url/</code></p></section><section id="l13"><title><p>13</p></title><p><code>/url/</code></p></section><section id="l14"><title><p>14</p></title><p><code>/url/</code></p></section><section id="l15"><title><p>15</p></title><p><code>/url/</code></p></section><section id="l16"><title><p>16</p></title><p><code>/url/</code></p></section><section id="l17"><title><p>17</p></title><p><code>/url</code></p></section><section id="l18"><title><p>18</p></title><p><code>/url</code></p></section><section id="l19"><title><p>19</p></title><p><code>/url</code></p></section><section id="l20"><title><p>20</p></title><p>Title with &quot;quotes&quot; inside: <code>/url/</code></p></section><section id="l21"><title><p>21</p></title><p>Title with &quot;quote&quot; inside: <code>/url/</code></p></section><section id="l22"><title><p>22</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l23"><title><p>23</p></title><p>AT&amp;T: <code>http://att.com/</code></p></section><section id="l24"><title><p>24</p></title><p><code>/script?foo=1&amp;bar=2</code></p></section><section id="l25"><title><p>25</p></title><p><code>/script?foo=1&amp;bar=2</code></p></section><section id="l26"><title><p>26</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l27"><title><p>27</p></title><p><code>http://example.com/</code></p></section><section id="l28"><title><p>28</p></title><p><code>mailto:nobody@nowhere.net</code></p></section><section id="l29"><title><p>29</p></title><p><code>http://example.com/</code></p></section><section id="n30"><title><p>30</p></title><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</p></section><section id="n31"><title><p>31</p></title><p>Here’s the long note. This one contains multiple blocks.</p><p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p><empty-line /><p><code>  { &lt;code&gt; }</code></p><empty-line /><p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</p></section><section id="n32"><title><p>32</p></title><p>This is <emphasis>easier</emphasis> to type. Inline notes may contain links<a l:href="#l32" type="note"><sup>[32]</sup></a> and <code>]</code> verbatim characters, as well as [bracketed text].</p></section><section id="n33"><title><p>33</p></title><p>In quote.</p></section><section id="n34"><title><p>34</p></title><p>In list.</p></section></body><binary id="image2" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEASABIAAD//gBQVGhpcyBhcnQgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uIEtldmluIEh1Z2hlcywga2V2aW5oQGVpdC5jb20sIFNlcHRlbWJlciAxOTk1/9sAQwABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/9sAQwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/8AAEQgAFgAUAwEiAAIRAQMRAf/EABoAAQACAwEAAAAAAAAAAAAAAAAICQUGCgf/xAAjEAABBQEAAwABBQAAAAAAAAAGAwQFBwgCAAEJChEVOXa3/8QAFgEBAQEAAAAAAAAAAAAAAAAABggA/8QAJhEBAAECBQEJAAAAAAAAAAAAAQIAAwQFBhEhszE0NlFUcXR1tP/aAAwDAQACEQMRAD8AqQzziPNmpiqnIO1q4H+WkB84MdlzRSuM82/jVw/JCORtRmQz5d2VTy6WmS2eSYx3U/qkSRbgFsqRzH2Is4/mCluXc33vy8xTnJjTNqV/T8LKmkhr8Hq1da2aOvTfIh2CFeNt+GxFBP8AJFdFUbPWh+4FdXV7OtZOMR7mK9lBWNN+JBmMQ5cwmfH8DEFhTZUCRlE6CBq/ds/nBh9oYygeY1L9FnCUnBSN1t+w0l9bNomx1cllsOrL9OCTKtKOIqua6UVjP0dEvTyM7gp/3whbkAD0ScX3r6MLg+C2/XsMhCnJRn/5cVNHyJHiX6JKIFhhqnFeagm9BIgjfcJyNBTZiROBUk6Mp8CJRmT4NWU2MatV7n495DPk/wAbMJSRJOTBDItq0KR5s/nJN7LPW8AJWtYAoKQaDp+u4XShxgXhYcbHoxNTllCwETGQ8ag2jmDVsk8w/wCOp/C/hn+mWV/utpePH+D5wmF39NY6UakjUYR1Dn0YgRM5zQAAAMdfAA4AOAOArjkMNQ3vgm7UKtBR+m9QHFD5tpnDtpy+t2R20gK/OsmFtuDpaL5mVyiT5qdEVAvZci5ch5VoSGKbwlWTBr0RPoZT07av9lHfrXo6yLApWMugKpPM9SV1cDm65s/wkOHZBojoqiM+6GpMSj4FhtayNAUi5H3LfQBG2KWssFoSPuJdKyMLKtpuLi+e3jwFICUg7CSHsNVlYlKdizOTvKdq3KTsG8pQirsAG6vAB5FdhP490U4gfjxi+DedoqO4YftmKdKNulO26jiOv+2Ga/bftVNFXpHtVHrpLpRFJTpP3z77T469++fTx48e4LueE+NY6UKk7UniLP8A7rNf3X6//9k=</binary><binary id="image1" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAD6APoDAREAAhEBAxEB/8QAHAAAAAcBAQAAAAAAAAAAAAAAAQIDBAUGBwAI/8QAPhAAAgEDAwIEBAQFAgUFAAMAAQIDAAQRBRIhBjETIkFRB2FxgRQykaEjQlKxwRXwFjNictEIJEPh8SZTgv/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgT/xAAbEQEBAQEAAwEAAAAAAAAAAAAAARECEiExQf/aAAwDAQACEQMRAD8A2t0YoQpwT2qVzMV+N3UHgrDY2eoM0y58VEbgfp9K1yMRmnuJ5h40jyYHGSeKrWE8u2QAApOMdqGCsmT8h70TAJwMAZx249aKBy4c9vTNUC0zDCgmmmG7Ockjkj1PrUTAjcy5XP0ouCgHae4IomOJHhgIc55PHY0Uk5IXLMcUBQ27n96JYO2MYLebHtRBA7BcMx29sdxQJqwZRtIP+BQKpjHHc+xzigNGoAO/k+nPAoAYlee5oBiGeWySO9AJCgY5PHagFCADzj2GaA2N2TkjA/U0HMwbPPeiyBLDfkkj04FCl1cBMgn6URwYFGySR6D2oAeQDAxnHGKAhU4IbGc+tFwnwDj9aK7f8v2oNu+IHxNvJdXmt9EmKWSqArA/mPvxUxMZNe3Ml1dvNcMzSSEsxPOferJhht/OWyAPc0UfdgDcuM8n50AMCykZFARsngcY/egTcbjnJz9O9AB2kZGSQOcUCX8x83bntQCMruJ4B7D1oCyOGzxtJ9M80CAdg5UjFE0aFJrghLeNpHY4IRdx/QUNWCw6D6q1EZttEvirHAZ4ig/U4qw1b9H+CHVN3Mq6hJaWMJ5ZjJ4hA/7R3P3q3ET+pf8Ap/lWNm03XkkkA8qTW+3PHupP9qxopV78G+s7VSV0+OcAn/kzqSfscVvIKzqPTWu6XKE1LSL+Bhz5oDg/cd6lEZzGwLrtPqrA8frUCJfcw9gfegUjZsEAffNADyHt78UAjCjzDJxRcO5Pw3gwCGOVJQp8ZncMGOeNoxwMY96GCbQffFFcUXKjDDt2NEo+N3yyM5z3okKuqJgIzONoJyuMGi4QfGcqSfXBoYHJx659qKIRnnsfUGgJn/poJYoTIGLY+eDzQFlQK2G/KCTmgbspfO0qce/agPGcR7nHf9vnQFfBPlOc88Gg7uucc/M0Bd208YJJweKAYrea4kKQICRGW5IUYUZJ570DYqcknt3FE0VuVyDzj1oamOlulda6puvC0a0eZVIWSbtGn1Y1NNbX0x8ENH0qL8X1NdtqDoNxiQbIh8u+WpqL70Tc6fcxypouiRadbW8hhLFFXcB7Edz+tNFvEZxkmmgShbA9PlUA+Hgg/wBqDgmBkd6ArJuJBGR7VdEdqWgaVqMfh6hp9pcLj/5Ig2KaKJrvwW6S1EFoLaWwmPIe2fAz81ORTRm3UfwI1mzBbRL+K/ReyS/w3x/b+1Wexmev9O6xoE2zWdOubUDszr5T9G7H9auCJj2n3PPrUXTlGBB2kYx96GlQMjJJHuRRXBgDgk8DtRKH8w4OfYA0SUlIMsFXJ4oujHH8ufnRRGOSNoJNAeFC77F2jPucfvQFEqgY3nj/AKaCUY58wwq54AoCzOmVMke9QeRnGR7ZoEIF7pnaTk49KDpSSwQntQJsGKjgggZ9uDQc4OOe1Am2UCkHOR7dqA8t/cSW8MEkrGGEsUTPCk4zj9KJT3pzQtS6m1aPT9Jh8SVxlmJwqL/UfYURuuhfArR7f8NLrF1cXciKDJCrbI2b7c4+9NGtaRptrpdqltYW0VtAn5Y41wBUodvGjqUdQyn0YZqAIreOBFSFFRF7BQAKA1xcRwKplcJuOBn1NAR7y2ikWMzoZnGVQHJNAuQcD3oBKkD2FBy8jnvQFxnjjmg4rxwKBMqCBtPNA3vbCC+tngvYo54HGGSRQQR9DV0Y91n8DNOvFkuOmZmsrk5PgSNuiY98D1X+1XRhWu6DqWgX72er2j2069t/ZvmD2IoGG7jbnj1FFlB224PB+VClN4DYJHyAojmPGCck8cetCAxgjPp6UaAGKtx6+9ATAXO7nFBw8HHLN+goJhBuj2FeAcnmgNazW8U0vjweODGyqpYrsYjytx3x3oGa5LEEjH9XvQGlgmjjMmQq4HBPfPYgevagG5nhe3tkFuInQHxJQTmQntn0wKBKTlAeDx60DSY+U9zn+mgsnQvROr9Y3W2xi8KxV8SXUnCrjvj1Y/IUR6c6A6H03o6wMVgrSXMoBmuX/NIf8Djt/eiLfjJwO9ZBiOfmKDhktzQAzYBLZ8oyaDF+rOptVv8AUjNZL4tjA/lT+kr3wvqTQX/pi3Y+DqFxKXurmFWAaPaVzg4I/b0oHlxqV7penRTXFu93dPLsESYB2k8n7CgnradLq1WaIOFI/K42sPkRQCg3Kcd6Dgp3d6AdrGg5VxnjmgKWB8uQGxnFAUgKuSefSghuqNC0jXbAWGtxQyJKdsYc4YMf6T6GtDzR8S/hnqfSUz3NvuvNILYSZR5o+ezj/Pb6UGfLzyD/AJoFFySQVBHpQDJ5kGByPahAbWxn5+po0OF3D+XPtQJsNwOe+aAuygmMkebgHnHFALHYpJwSeGz2oGpOJWAI49BQEZlYAHkg4oARVOMvtBIJJ7AUAX6xxSOsUgmjViFcKRuHviiVfvhT8NZuqpk1LVFeHRkPlHZpznsP+n50qPS+mWVppdnFa2cEcFtGu1I41ChR8qyHVxK8cLPDD4kgGVQHBNAa0maaBJGTYzDJXOcUCy5JOaA2OMfoaArkheM7vlQNYNOtoWLJCgLHJwo5NApPKLaNpGRQB6j2oGmnRvcyNd3O/DkeErLhkWgklIdCyZOCRzxzQEeRxhdpUnncBkD5UCxXjJ7+tAlctMsIMLohz5mcZAH09aBQYdQwyAeaAuA7MAQxHH0oG1481nbGVInuWU5Kr+bHrgepoKB1u+o6jqlvBH05NevEBPBK0pQR4I4BHZj+1Bb9IS7lsFtNWtYwDGFYB/EXHqpJ7/WtQYx8VfhGbdZtV6Uh8gy81mpyR6koPb5UGKY4YkeYd88fbFAI5AC98c5oQBb+U9+9GnN5RgDgjOPWgAN3yMfWgAqc91/UUD2RSSRg9+49KCR6e0WfX9WS0icRwgb55WOFijH5nP0FBYNRi6dSR7HRNPmu0hOW1GaXaZMdwBwAP3oynE0XRYrFtV02wS4ECj8dp1wcsE7eJEf39qlFZ616ZttPu7Kbp9Zbi0vYzNCcgjHqoHuKsEp8LPh7P1PqjXerxywaXaviRSu1pWH8g+XuflQemIIY7S3SK3hVIo12pGoAAA7AClEL1N1RH0/oTalcwx+IACLaSQKx59Ppmshv0D1jH1ZbTubU27xkkAnKsuSMg/UUFluLlLaJXETyecKAg554zigXiubeRnSKeJ5FOGVXBIPsaBLULoWkIfw3kYsAqIOSTQJMbpm3oqlmwACeF9yfn+1A+Bx34oE5IY5P+YFbnPIzQKAckHuRQCAQOO1AL8r9KDhkZOT9M8UCcrxgAyYJzwD70CT3Itxm8kgi3fly+P7/AOKA9pskhEkZysnOfeg6RH8w3tgjAHtQRZ1uystSg0m5eRJ2UbHceV8fP3oJkBSAVII9xQFdSRwKDDvjN8L/AMSJte6chxcgFrm1QcSf9aj39x61YMH8Q+CkfhqpQncxBDH5H6VRwXJ/Ke1Am2QchuMYOaNFSAVznB9qAm8f10D2RmX8jDHP3oLbebtA6ej0m2LrfX6LcX7IMskf8kf6HcffIoG8yTadZxSTxCK3kRZUwSFfkruIJ78GhiS6Y1OS3160uZJFWO5bwZtxzuQ8bcfPNMZXvo2wsLnQ9R0q/maJNNv5Yo3bjCuMAHPzqA2jdUan0lF0/ZXcElxp9zE+5WVd/DE71IPPB7H2po1bSNXsdYthLp1ykyEcj+ZT817ioITrnoux6vs1gv5JYnjz4ckZ/Ln5etA+6N0BemdBttMina4WEFfFdQpIJJ7D60E5I4Vo9qnnsQO1A3k0yzeTxhCizZJ3qNpz9RQO449igMSxHGW5NAIwBtUAUAMORkfegMhG3jtQD8+fvQGXJz7UAHuRQA5YDI5FB0qCQA5yaCs2/SFit/Jd3AmvJ2bO64ctt5zwD2oLMilVAUDgcAelAJLbhgZz3oGN9HPIYmhtrWRw2czjt7Y+dA+h3mJS67W9gc0AvuLYANADpkZABHY85oPOnxy+Hx06Z+odGjC2jt/7qBRwjH+cY9D6/OrKMebcceHwfaqCYIyDgZ96GhHOFJI4/WjQpXnsaCz9J6fDqGvRC8OLO3Vri5PB/hqMkfc4H3oDT3UupapcXrKS9zISgDdhnAGPbsKC5aLLBHq9p01c6bbagPE23kpJYhmz5IySAAMj6nNGdRnT2lu3V9vaQQrJDHfCMFj5kAfufsMUFogu5H0jrLUYXK+Lq0aRse/lf/8AOKlFfudagvbnQpNQRmtILydCwPdCQcgMOMZFQanPoeiawBd9M6s9jeKPK1vKQp+RFA4septa6fuFtuqbRrmzx5b+BAdo927A+vsflQXfTr2z1O3W5025juIW/mjOR9KAZI914khaRNo4XdwT9KAl3b2+oWpjMoZWbOVfnI9sUCrXUNssUU8w3sQoJH5jQLvwQQC3NAKvuUPtK54waDg23v6UA7weBnNAIOBigMr+hoOjdZQdhBx3waAVG0Z7UBWfAOQSflQChyNxBAxQRutarb6bHALi9trSW4kEcJnGd7ewFA/j8QEK/IA/MBjmgWDDBB7igj9dupLTTbiaHZ4oQ7A7bQW9ATVgwXSNV6onl8azW6t45pWdxHIxWA/zNtz7A8Glg2S1u7fX+nt0J/H2c4MMhmQoW9GBUjj60g8sfEHpebpDqi4sHLG2Y77eQ486E8fcdvtVFekGW4UfegKVAAKgnFGhuDzxQXbpDTZF6a13UnUqrCOzQ5wGZmXIJ+lE0ppkEK6nJcRWcTW9hA08iKcjcowpye/mxQ0+6VRbC/jvLm48L8LG9y8pIOXxkDnuSTipqHXQMng3es9S3fhn8DbvcZI5Mr/lH700dc3Dad8NtPs4nU6jeXD6nMCwBRF5XOfU8YHrTNJFF1X8RawW1jc4GxTKNrZB385yPkBTFw1stSu7Ni9tPLGSQfK5Aphi8J8UNUm6fn0u72yvJ5fGbuF/39aYYtGgadp9/axXnRetzaXqnhqZI3bEcj4547Ak/X6UxFisPiXe6NMdO65057eQAr+LhUlHHbOPX07UwWXpQ6BqMo1LpgW0sioVI8Qgxk+684qC028M5890Y3kHKbUwF+lA4LDOzu2M4FAOG3DaoI9cntQdJxzQEyR259f/AKoGl5fSQRFo7ZpB/MhYIR9zxQdayyXKb7gqox5Yo2yB9WHc0DPUIWnhWKxkuYFRs5gcKWbPY59KBkx6isVeSGW31JNwHhyOUkA+o8v9qCfjkMo/LJFKqBmRvSgc2swnRyFcYODuXGfpQMtRsLK8vYJL+wjuGiUtHK6hghz6Z7H6UEmCsig84I9RigiruC9t0DaaVmIIHhTOQMeuGwT9qCJ1ywv9T0U29xFFiaVBJGHz5M5ODgYPY/arKJPTtLW1t44i7SKq48w8x+ZPrTRJoipGFQAAdgKgzX47dMJrXSrXkUe6807MykDkp/MP8/aro80FQyZ+tUJ7hvH0x270XQ7KGtXvIk0T4c9P2bIhkvpnvJVfjIxhf7qftRDXpu0/1DpzXltUlkvmWMBI+2zdnn64oYa6yX0XTm0i4jQ3t6wmuV53xov5UPpyeeKyLbpFtZ6Xpmn6TqNq7/ic6pqQRR/DVf8Alq2fTOP0FXBnXU+ox32o3lzeW+JrxlMXHKR9wfbJ/tVWK5f3AnaAjafCTwwcY4BOM/qKKSjA4Dg8j37UHZKkE5P0olSFlcLDdJPbTNBOigjxOVZu3+80Rbbnrq9l0t9I6isRd2rgKpPlZMdyre9An07oupoh1zo2+lea2fMlr+WZFx7ZwwqWDVug/ihDq7R6b1EPwmpMNokPlVj8xng1BqEUe1EAJOMDOc5oDSxq6YYeuaAJF4oCBUQ7mJ45zQHYB14wR86AVjBXyjge1AEcRTHlA9hQE8kbgEohJ5yQM0ETHNqMOr3IZQ9tIMQyEjKt7D3FBLqywRPJKTuxlj3zQI3Ut14e+yhWRj28Q7RjH60EfpF3rU/jLqFrHbS4/hqpJXH19aCRa8jgiVr1xGwXzYyf99qA9tc29/aRXFnKs1vINyOO2KByoxwe9AYocHGKBvdwLcWzxSLuR1KuD6gjBoPHXWujt071Nf6YSSkUnkJ4yp5H7f2rQgWAA3Y+1An4j/1t+tBrHxKuYS+gx24LRx6ZFtI/lz60FY0+/v8ASphNpd68EpXY5AGNvzFF1YOirZbzVrvX9dkNxZWH8eeaY5Lyj8qj7kcVlETqOqXd/HrPUNzcNE16Tbwxf1JkEgD2AA/etBte9R2Oq2cv+p6XHJfBFjgmjkMaRgAAEqO5o1FWfbgjsR8+9AlI5CgEggeoNAq0iug8uD7g80KKmCcZ7fPmjJzJfT/hWtjJvhOPK/OOe49u9A96X1W90/VrRtNkkSfxQF8I5yScdvX6UGidSLpfVFzcvbRiy6kgZBGysFW7B9T7HHNSjU+o9S1iz0e2uNLmX8RYxJ+KgYeVwVGTn5d6gjug/iU3UOt/6TewQpP59skL5B29x/8AYoNHPB78Ggb2l3bXO78PKsoyVyvIBHBFAoSkbfyhn4GfWgTnmWFN7ybAvc4Jz9hQRdx1dp0S3Dw+JJHbDdPIUZUjX3yRz9Bmrgzbqb4x9Oxho4bB751O5HPkXPsc80wQHT/xrJ1IHUbGKO0kdRiBiAgz+YjnsPpTKN/tLy3vLOK5t5klt5F3LKhyCPemAYLuK5XMDEj1OCP71ArGWLMPT0oIbU7h11u2t49OllWWNm/FIRsjI4AI/egfQ2ktpbww2XgxoDl9wJ49cUCHUGv2GixM13Mkcm0squwUH5/SrgxDW/jFcXOteHb3otrKEEiRISRM3zGc49v1qDT+gfiBpvV7y2unxTxywRhz4ozuHbOR2+9Bmf8A6kNIEWpaZqiooEqtBIR6kHI/atfRjDEt3AKjgVQjug9j+lQWh72e/htTOzyeCnhHPomeMYoJvQum7vVD47K9jpsQBkvZ5NoAHcgUAa7rKamE0Lp9Xh0G1OZZTwZSO8jn9cCsivdS38F9cJDZIY7G2URxKe5x/MT7nNaEKrENwAFPPlosFwS2cd/cc0UlIm3JOeKDo2LH+UA0SjgDk98URzPiJ2449e/NAbS7v8PdpKkpikQ5WQLkqccGgmYNQmXWLeQLG9wVRQVPlcj+Yn3xQa98OviAjz3WjdXSpFdliEuJCNjDtsJ7enepRdel+kdL0rqOTVdIsoYklV1dixO3nunpg9jUCnU3WMeka5b2EUcl3JInmigQs6ZPlJAHY8+vpQP9O1m3nthNo0cTwM2JDwoVj6H5gd6CbhtUiVn8TcXO4ktkZ+We1BAf8Z6fZ2uqXWpyxQrbStGseQzMB2IA961B59+IHXmodXal+HsPFh04HbHCo25+bY/zQWv4f/CCxvII73qC8iuXYb1tYZeF9txHf6U3BatX+DvSl86x6cr2dwjbnEUmcj6Enj6U8hLdJdEX/SmowJp2tTT6Oc+La3HO0442+3NBf1LmRUjjQAfmc+nyHvWQockYyQcY3CgaabaPZxGNnaUFi3mPb6f+KA2q3RstNurnBxDE0mPfCk1YPMemaP1L8RtYN9fJPc2aMUaVmCKg54H0z6VRYendf6Z6T1W56a6j6fgfwJyguhGJmPzbIzjHtSjTn0zSunbi01fSkt9Os5GAmWNCDOGxtXb6HnNZEZ8etOF90DPKFy1rKk3zAzg/3rXI8u7zvOTg4zVoTLDJ81QWDTb2SwuvFgcrkbXwM5H0PFGqsjpd6+kcT61Nc2ieb8OikFc/9PA+WfSjKA1nWBzpFlZ/hLWM4KH8zsPVj6mghN4IyQRk5NGo5BkFmyAfSgVjChdpGO/FAXYpOHLBe/FAQqoBJbA9sUBGxgtgEj/eaCf6DGjt1TZf8RNGumKS7mQZQkDIB+WaMrf8Ub/ovV7V20JIYL62K4khhCLOCcEcAdu9BmCuEQvxvyFUg42+v+/rQaj0zax/EXRY9Nns0t9TtM+BqCKAjEclXA98jn+1Si7Cz6u6O0tLjTrxLu2tQJJrDwcKE/m2M2SfeoLrpupDV9Mh1OytUS2vIN8m4BZQf6T7+vPpj50GfdK9L6rJqk1y1y0elRDKRqdjHHoyDhjx39e9BZr7fagW0j3kul3iETRqHkeF8ZBUjkZIxjtk5rQ86dW6r+O1OcW0UtvaRsY4oWfLKBxz7k/5NA46P6X1rqS6WPS7V9v88rAqi/f3oN46X6C1DSotkus+BIwKl8hn2+3PapROXPT2t20bPY6kJ5UGYmbIfIHGW5z68VBI6DrzzWSrrAjtrwFUbDja5OBlfuaCbluJLeNwIpLiVF3bVXAP0Pv8qBxLO8cYcW7vnuqkAigNFKs8CyxlwG/lcYI+1A31ayF/pt1auSFmiaM/LIxVgwfoO413o3qqfSLyUSwodogAyZVGcbPTPr71aNDvendJ6wtbu7Fi1lezK0bS4VZMjtnFZE0bC5u9Jh0qRAr2yw4uWx59vBI44PegN1tpbap0lqOk2sipLPB4aFsnHbBNOR5A1exFhqFxbeKkngyMhdOxIPcVuhiZFz/zBUEwcKvYnP6fWi0+6chjn6h062uATFLcRrIMnzAsO9EehNR+GvTV3GUh0+O2YsGaWHIf9amjIfib0no3S0VtFY3M000zMzLJtLKvvkenyx96oz0rwNjA8cj2osFLbVAbOc9jRQiXOAwxnj3oBlAxwDj37UDY+vHOQeTQBIdqjcPMfnQwJclWyBgCjJBFeefw4VaVycBUGST2wAKD0L8H9C1rSIILjWLSCytY1lZASVnlL4PI/wD8+vvUo1uwbxI5GkjdVc7isvOBjtj2qBWKFZiQ8CJCB5FHYj5jHFArDbQ20ey3RY1HOAOPsKCH1u61CPSLt9MtlXUHUrbCbJBbPdtvYetXR5T1y2udD6lni1ErJdJLvlK4wWOCePvVgsV/8Sr67UW1vA0NiowIonMe4+7FeT9ARQRmodWa9EYpPBhs1Tygw26rk9xknkn70EjonxZ17TXjAeKTkZ3L+YZ7N8vpSjX+lOpNM6umgkMG3EgBV1DYbG4kewz2NZGkC43CP8MPFBONysMAD50DaHVH8S6N1a+BaxMUjd280pA5wPb296DrXWLK9WNoJdtwybxDKPDcAnHIoJBifTBzzmgaz2UFzPFNNbwvLCcxuyglT7igdRRKg8qAZ5JAAzQEnuYoHiSWQIZW2ID/ADH2H6UERr12BY6hueIQJaO7SK/nHfnHtx3pyPGWoN4jynuCfU963RF+DL/UtQWTkjaWY/8ATnHFGql+j1VerdJY8r+KiJz/ANwoy9C/EjqSbpbRY723RJC8ojIcZ4IJ/wAVkecer9en1+9FzeLCCq4URjgDP7mtLhteadBY2kMczyHUpcO0YxtiUjgH/q9celAiLy1kjCX1ruyMLNGdrj0+h+lE0+t+kNQltJ7yKS3jgiTxUFw/hySp7qp70NV6YEBgWUNjBoaKeAODnHrRoVgDnBP0ozpxZ2f4y5trVeGuJFiBPpk4zQep9C0LTembS30fQbWP8ZsDyTugZgf6ix9fYZpbgmbXSmXULaa6kMzpltzcjJ//AGpaLCY1CDsF74PrUCgHY0HbSx7Z96BGUfxB2xjtQZ11t0Tb6jNfyw2wM18gV5AcBdpzyPnV0Yp1F0o/TEczXjXaTOQYpIk3QlT3B9Rj0zVl0VKbVppImheUSwbsgFfXHc0De0tri/ujFYQSSyfmKopPHqaDV/g9p+padr/gkSRTzKu0kZRlPLYPbOPf2pg9GWzRCMJAFxH5do4wayKX1z/G0CdzqLWRkiaTxQBLudclQvovbv3oMU/4Z67uwnUAt3u1Zw42yhmx3/Ln8v0oN86L1d00i3i1UiGQIocNnEbnkqT2xgiguEbI4DIysp7EHNAZnxQQ/Usksej3EsCl5EUthR5sY52/Mjigr6Qrp3R15LqEcIlmgdpFGAsY2navPJApyPJtwd8rnGBuJz6Gt0MzGSTyf0qCwSKA5ZsAjnn2otTXQYj/AOMNIDqCrXUZwf8AuGDRG6fF6Gyfo6+ub0CR4EPgIScLIeAcfc1keatN0661a+S3sYTPKzAbV9B7/StLrQ/iXp9pYLp8elWsUM11AzXMqt53I7g7j244oiB6W6Tn6j2TeAy2FspTeB+Z+/8AmgtnWlvpdl1Dp1pq07Ja20GFQpuDHHAwPf39KDHriVTKSPOCeBnHHtQGsrG5v5pfwcTOIlMjgEeVfck0XRIreS7uUigRpJXOEVe5PtRE/wBJ9HaxqvUcdhNFJp0lviaSWVcMgzxgdySeBipo9T6O8NppUJ1K4iW5KgSvIyqxb5jPH0paJm1NvKivE6Mp7MpyP1FQLRTwy58F0cjuAckfagOTtO3+Y8igMWCIWbOPlzQNhNBOWEbq5Q+YKc4+tAD7JEZgQfXj0oI/VtIttXsZLW5hRopByCP/ADVlGRa78Erae63aXK1tG3LAncM/Kmh10l8IZdBv4rxtTE0yggJsyoz6/P0po0zSNKEMdo9xGnjxuzkqMAEgjj7GmialjWQMgyCRyQcGoITqHT7q/a30+G2jFmwLSzl8GPBGFA9c5NBPRwJDbpHCipEi4CjtigqfWltqCaG8WhNbxyzOBIs8W8FcY4+dWQQ/wtuZdIGqadrknhy2u2QyOSEZOeRngY+XvTBZZevOmhC8janbqiZ53Zzj2FMFcs+sh1ZqsFrp8UkGkrlpbh+DNzhVX5Z5NQTfXyWUXSV2t+wW3EZ5I4HHt61eYPI0mA5C9snFaoLsPv8AvUEk5JcA8cZG480WnOlXX4PVLO4yQ0cyP244Yf8AiiPUfUump1B0/c2O8xfi4v8AmL3UcGpgw/SujNX0Trj8PpckimOMvHO/kEg9Rjs3PpV0aFq/Qqa1ZJ/qcrverEqNOwGM+uMfemiVtrKbQdMNjp9rvtkhPht6mU5yT8u1BkvXg1qXUtOvddgRY1R3j2YHiMvZSD27CgzSCyuNQ1KK0giL3Mz4VAOc/wDignoNNOnaHeiW8hgkku/Al2+Ziqgn09M0ETp0qpqSmGKOdFcEeLwMfPHag3JLuCRtPmQWsDhNphtVAcn1w3BPFSwDdWGpX1/OYdOtbbSrlQ80szHdn0GR24/c1AbWemdatLbTJdGvJIJypDQwMV3exwOPatSz9Ei/R+txy2mr3evyHV4miWIDhGwwyGA7nGRS2YNZAUBWYDdjGayEvxMYB3nYu4KCfU+woG93c2enWs1xcPFDCp8zEgDPzq4GGgz22saS1zZSZhkdsFePXt86YHWmySeLNDMYikZ4YNlvvUD+VARxQJqgwRQHUAAe2O1AWOFRM8mDlgB37fagb6reXFt4ItLZJnZsuWfaI0Hdjwcn2FAz0nWX1i4u4xY3VpFbv4eZ1x4vGdy/KgkriN2aMRlQoOW3DOR/5qwYr1P1tp2pdS3WnanKkGh24kRl2eaYgcb/AFxnnAqiv9Jno0dRLJPbtdQtkNPIALaMnODsPPpSjbdK0DTbWQXui+Gsco3BU5hPP5gPT7VkU74t6PZHpq/1N5ZZbwrtRnmOwDPOFJwPsK1xR5ybudw788VaC5X2WoJRULSBpAe5PA/aiinAZnHck4A70THq/Qr23/4Y0u4lmCpLBGA7epxjH60Du+WGOBvFlFuWOFcYyCfbPrUojri6k06xX8PFNfBUJ3ltzM3scVBjfVvVXVNit5dapNDZGQGK3shjeAe7YHIwAOT3zVggNTiu+orrR4p7m+upJFR7h3TPhggDaoBwRjnPH5hV0af0xotnoD3l5dWdrY2YjGLhwPEHoef996CC6m0HpuPpk3Wny2s9sJPHJ3AeI2D39T37UGU9QTDULuGPSLPwIyoVIYk2lj6/X70G2/DPp0hVudRuBLcwxhRGkeEjB9M+p96DSLprVHiieaAE+YxHkke4H1qUOIBawL4uAuc8nvj71AwjRtQ1eO78QNp9odyLju/qT8uf70Gb6r8SpLzryy0vp+4NxYSSCEswI2u2Rn3OOD9qC4dVamen9NlaC7tUaIFvCmnHiy4HJXJxnOeDVwed+rOvLnqSyWO4jZSru/kc7ck+30GKosXw2+KmqaDJDY3jR3OmqNoRhtZAP6SP7Ggtmt63qbTJ1XLazJpslwBFblypEOAA7L2OWANS+xrnR2vW3UmjJeWp8wJSRf6WHeoJdSPMCRmgMq8DmgBpNsgUIxBGSccD70DczmS8MDWoe28MN4+f588rj980CktuJZYpFdlKZ4B4OfegQ1hpIrVjbsRMBhBj8x9qsHnX/hm36y1O/u9V1ddPmS6aD8OkQdyxOSe4OMmqLUvwQsYY4Xjv7m4YEEhwFyMY7fXB5pRbvhp0jqfSMV7b6jqZvLGQAwxAEBDk54PuD6VkVb49a5DBpiaNaeF/FIaQDumOwpzMGDEZQZ5+VboR8In1I+9QWDY6gFn7jjHpQhtJEFbAGBnijT0P8H7qPVOh47a42yNaymPBOcDupoykep+m73V7g/8Av2itQowvJIx6j5/OpRjfUWrax051RPY6LqFy8YACkebO4Z7HjNWCY0ToW2utJbqPreW5na4O4R78cehY9+fQVKLX05p1ro97awC4kX8VFmJLeEKdoyfOxJPbHbHYVAz0rqKPWNauri9t1ktJgILYgEiNFJ/Op9STmrBBdeaFCo0y3jt444DI3jLE204Y5DD+9UPPhv0NaRtPq99mSLOy22nOfdh75oNC0vT7m1uJGvGiii3AW8UDbQAeDu9zUohLlhouqap1VciF4I1FtbxSthtobBIPuTn7VBJ2vUth1TYk2ULi9iALwyKQYz6Z9CM0Ft060/DWEcDHe2Mucdye9BFW3SekWt3LPb2cUTsd2UGCG9x7VYMzufhzdX/WmoXj+BPpx3I7XZMmXYckc8EVRKaP8I+nXikLQuxOQSTnBzj6UEjonw90XSrq3S3s7dplJcl1EhGDx396lFx1TQ4NVjaC7UNCU2lAO/8AvNWDCLp9X+E/WgWImXSp2LRq7eSRT3B9iP8AFSjd9P1+21TRodVsMS2rLmTbyUGOePXFQSltcLcW0c1vh4mXcjDswoDLdRm4FvISsgXeTghDzjAPbPyzmgVFxCzuiOC0WN3sM+5oDqySJmNg3rx7UFb60tNUubGJdFdEvhIdryflUFSM49TVgyTQenJemOorf/U4H1Fpp1edAh/hOQTuQ9375JA4q0bnbPBcxxT20wkjKkqYzlT9ayGWu38um2MbLEJ7iRtoUds+/wAgBzQeW/iHqi6j1PdzeL44HkL9txHtWhVUOVyvHNB2F9zQT8hUAhAdp5FCG0mSAzE4HGDRppvwL1bwOpJbEsFiuYyVX3deR98Zoy2ZtRgmjkSRZocEp51K7se3vUow/rfpFE124mVpfD4mk2MWdCc4A+VWCH1281/UmFnpklzPYRFBEG8uGC4yQfcn9alGgaJo95rRsbi53WaxwrHOm7BjYcHnvz/moJaw07pXSI5IW1K0CQnDhpAWB9R796CudY62msTRW+gadI8KnDXMkLLv9MA8HGOKC3dAXF1dRfh75f41moi4G0AdwcfTj7UFhv7RjqMBV5AJFZHkR8FRjIx6CgpXVNjJ1JqNn07p26CztSJLlpIydyj2J+fGaC+afplrazqLa3SKNIggx3IHYUEsBk4wQc4oK11L1z070/M9rql6wuVA3QopLcjNBDwfFboqeSO2W7kQNxuaEhQfnQLt8TuireVoV1UeXnckTFT9DigHRuv+mbu9ZV1W3Nyc4IRlVl9O47/KgtU+s6baw+JcX1umRkAuM/p3oK/1t0rYdX6cqXKESqN8Ug/Mp9P1qwZ702mo9GdUTWJsmOn3EY8CAORGXJAwScjJ5q0bJDNLb6YklxbKsgA3wwndg9sDtWQN3aw3ZKTwLLEQOGORn6ehoG1vYAw3FikRt7JSuH3Hc/GSc5P0oHn4aO2uGuYyiose044wBQIm6F1dwfh5ARs8R8L2BHGfnQHv9PS4PjxrGLtFKxysm4qD3oCxboIIo7e1jhQHzAYUJ8wP8VYM56j1ktaal1BMrS2sAaK1OQDD6eUepY9yfQVR5zv7hrmaSaRtzyHJY0DcE4BPIPb5UBwOO4oJYzFvzEYHAH9XvQhNZN7AEgDOSDRo/wBA1SXRdVtNQgb/AJUgfBHcZ/8AGaGPVlhPbarZ2t5CEeORBKje2RUrI1zYxTBhMinIwcjvUEcugWkO4AMisMEA8N69u3yoERrOhWNxNYy6hapcxAeJHM+D8u9ASLStLlm/EWdpZyxy+Z3RQ3I5B44oJKTT4blFWSNBEOeBg5+goFYbOK1TKhIxnIbGMH50Cpcyo6AMrIcM2OD68Ggb6Lbbllu5Cd88hYBu6rztWglSNkfm4P70Gaat8Rba96w0vp3R2mhufxyi4kO3YyDOV9+f8VYMw+P0cP8Ax4JVuEKzW8bEr5tuMj0+lUZ7Y2X4288GK+towRlZXYqv9uKCQi6YmbT2u11GzaJWKnYxbBB49KCFnhubdiwL+U8OhP60ElpXUFxY6nDdXQF0qYbZKxwT9vWg3npb42aHcmC11C3uLSQjEkpIdQfr3xUondP6x6e6tv7e101hczRzrNtaFiFC/wAxPYHtUF+lj8bYCTgMG59cUC4OBQQOo2eoXepFTeL/AKYQN1sEwWx6Fu+DQLX2kw3Ok3Vjas9qJ48Exd1PHb9KCE6R0G86Ut7mK71KK4gklM7TyKRIBjtjtjj96AOreudJsrMJbXksk8jBCbVdzRjONxBHP/3QQ9x1jcWGkERWWqXdpMPCt7x4wfFOOWPbA+fAqwZr8TJ9Qbp2ymvEjsrSTEVvawyHz45Lv6E4wPqaoyl8g91OKDlYEc8mgKW5PH7UE80f8PPHl7gDFAZkUjawUIQG8w5ouknAUbl9Dg59KK1X4Z9XXFvo8mlRXax3KHfBG8Rk3qe6jHOc54+dMZO7jr/qK8vWtba4tYu38TwvDOMc8N60wPLbrW10PS7pnvrnUtbAKobgBUUk9jg8f/lMC2rydMdRSaRqWoLEbx4UefwxkL2BVvvn9Klgv3Tp0lPxFno6wJ4IVmEOMEHsf2xUD2e4ks7n+NGDaCMu8q8lCMcEfPNA6tW/EwrMybEYZUHnI9Cf/FAzu7G4LXTWs38SRNqhs4Bz3z9KCO6x07UNT6altNMvEs7xkC7nPlI9R2/egwbrDT+r+kupLCeK9nu3KBYGRy+QvdWFWCU6avtA6h1iKDqLRhpmpvkxz2p8JGb3z7k557VRX77TdHteuPBut401CAouyXGcdvmASaC069030brYaay/CwPFwWspRErfUN7UGZX2hWSiY6ZrMc0CvhUlBUk/UcGgiLq2mtG8F54yDwfDfIoGkrRsSZXwOB2zmgsvw06XHVfUcFvI22xQ753Ze4H8v3OBUo9a6XodjpltHbabDHZIhVsQqBuA9DxznFQTQUe5oDYGMnn7UEbpV3JqDyz+BJFbBtsXiDBf/qx6CgDXL42cSRwGM3UzBQrHGFzy32oG2i2kKTSI80lzMow0rqQoyew+3tQO59KtJJRI9rEzgg7igz3z/egZ6paJdGGwW4eBXy7pGeXUdwT6A5qwebPjJrcOr9TvbWZQ2Onr+Gi2nIJHcj7+vyqigOuRk+vtxQAqEk4BU0ABj7j96CzzKxYD0GeM0CQG3OMAjkfOgbSZwzE4PJyfWi6caTdzaffW95akrPFIrLg/tRHpGzs9C6t0W31FrO3Y43MrcbH9c/eloZ6v0JpWoKlrHHBbScSFEHYc5Pz71NDXUoJrK1g0dvw9qsspW3nXaN6KMrHnH5ieSfan0U3Rr1uidaRbiwk8BUSS6naQkjc3ZcHaRnn70wbja6lZX+nw3NvMksM+FXnPJ9DUCeoXj2hSG2t2km7op4U/f/FAvHaNePb3N0jRzRA7VD8Akc9u/FAvcxnawZQ3HYtjJoKfDFAdeub6Vo1dSULIBtTbgYOfU8jNWUVvrm5ih0m1urixhlsI5HJliOwR5/LkkHHJPamjHdQ0HWdemlutN0+YWBYtC0rHDhjwVz3zWgx1n4e9U6QE8XT5Zd//APR5se9XBXbjS9S0zAvbO5tyWKAOhG4/KpQ3ZHXO5JFK98qRUGhfCbph77Uvx91pv463wVjR0LR7s483796WjW7rTrXpHWrSW2YK7lmXTbaIFpCRjjHOOSeeBipaNLtXuIre3R43lnkGXYADZnnmoH6Dkbzn6UDGWe9a/hKG3jsW8riQMJS3svp86B6zgMQmDtGT8qDNb6XUpOoPx72tzOkjFYowOduDwDjj70Gg6Wsq2KNeAJKRuKk52fIn5DvVkENrvW+iaSAsl0txI2Asdud5Yk4A4pgzv4l9ST6JZSXbyyprWpw+FFa5G21gz5icfzH3pgwCSQlh688+tUEwjjngZ7UHAHuWAHpn+1AXj5frQWXOGBZcKSe3c/rQIyAtnI27eBj/ADQIMAuH8vHBB9DQwVpPLjOckEZ/ahi9/Czqj/S9VhtLm6aG1uZFUsT5VOfX5Gpg9GiNJArxsrxsv1BHypYGF7pljeG3kvLZSlqzNGGxhSRjP6GoG1yLUWiWc2nSPA4KJGItyYHYHHarop3wu0jWYNUvzriNBp8ErraRMANxJ/N7nA7ZqDUHgSQLvAbacjI7H3oOuIFuYzGS68jJRyp4+lA0m0yDwGjiTw3bzBwTuDe+TQVbV+mLmW1NtbSok9weZiC2zPLEZ+/FBM6Xo40/TYdL8Jr21G4vJcuCck55HbFWUKQ/h4tR/DTz2o8TK21qmMgKOf8AfpmrokljG1i5BHI57D5VNorut9Lab1LA638W6H8sboNrqQckq3pntV0RWsfD6K7SGC3vTFahQJY2iVmkI9d+Mimie0Hp2DQ7AQacio3JZgqjcT3zxk1KHGldPWtnqMupS5uNTmGGnk5KjGNqf0r8qgmkhVGcquGblm96BDUZZYLGVrdN8+MIvux7UGKTdXdbaRrFvbaxbWN4d58BmwCjHPORycLx2q4LNe9S9TdN6I13qkWmzSXdwBCGlO4hiMKAB2A9ag0WySQwpLLtMjDcQBhVz6CgoHxF17XbnUYunulgsUsu4TTvjIUAEhR+x4qwZwtkOi7651PXJobm4tohHbQhdgecjnaPZeOfeqMy1vWLvWNQlvb+ZpJpWyT2A9gB6Cgjy5AO4A5oAGRgBR39aA7Z8MkFtxPY0AbV9UGfpQWhj5TkBQGxuBoEGG1iQCyHvj1oELgSkK6oRnIBIxzRdJ28Q3+fHiAds96LoH3AF1wCfyijNbF8JviI1rbQ6Pq/iSopxFOx5Uf0n3qUbWQk8II2SRyDPuCDUHMpSIiJQSBwDwKAgTxApnEbyIQ+APyn0+9A5B3AgfmoEWgcb3VlMpGFYjt+negSs7zxH/C3RWO9UElM8SAHG5fl/agNdXcEbJAZ1WadvDQDJO7Gf7c0ED1dqWv2enzw6Rb24nZfJd3EwREHqxyMZHzOKBbT7H8PZWTK5uZ9o3Xm1SzEry5PsT7UFF+JnUezSZ9LttRs2km2m5KSFWXDZI491AyBzVwK6J8T7CRtPjee0tbaGAtdNISdoXgLEo5JJxyfSmC6aF1fo2vELZXDJOxwkMybHYe4HtUFiJWJd8rKqjuTQcZV8SNI0dy43BlGVA+ZoBniE0RU7tp77Tg5zQUv4hNrU2tdNWOhylPEnaS5UHGYlAzn5cn74oHGt6l0z07k6nJC123HhKPFlbPptGTj9q0Kx0XMvU+ty6vqQtpWlZo4LOdGDWsak8Aflycgk+v2qC8a1q8OnaXLPOz2kCIWkZ+CqjgYx6n0xTBkmp9Sabp0KdRyI5vJkaGw08MVKIDw8jA557896QY1q2o3eqXr3N7O8skjnlnzgn5e1UMCGV/MOM0BJFOVwfX0oFtgZTjkg8UBtpOeO1B3hg85FBZXVMM+VJAA2+h96BO4IMJ/p7qvuKBKacmOKB5CYYx5UzgDPfHzoGwD5OApJHAHrQEAk8NWdNpx+XdkA0AIGhkGWOQcgg8UGw/DP4kmwhi07WCTZqAiSbstGc4+pFKNvs5o7q2Sa3kWaJxkOp4NZDOHUh/qL2k8LW78eG7kbZv+0+/yoEZp7fUpX/BXpgvYZTCSRtO7vtwe/vQdY6jeyatPp91FEPw8aSNMoYbi2cADt6Z70DS60KW7luJdV1JniJzBtURG2b0KN7+/vQKSWUWnLLqN3cSLP4ex5Y8jxiPykr23+nzzigpXUPVOu6Vqmmf8UWttb9OXDqkjRnfI3H849uRkDOKC0axLFr+nLB0rrUMM0bqCIGGGX1AH09qsGc9UfBiTV9Vhu9Pu5oPGLNeG6bczN7jHvVEr058Gre3sLeDVrmOdo3LmSFNjEH+XdntQXO51XQOl5YrCKGWa8SMYS3tzMyLjjJHb9alDqz1S5ktJ7nVdLmSVDiOONfEMiE4Xy+h9xUDm11CaTxEOn3VmpHFxKFCr9s5GPmKAus6jb9M6RJf3c88yxpjcxL7uM5OO3HrQVTSupoOuYdZMTSpptriNFtXKXDA/Pjhs9h2xQOJ7Xpnpa2S91WK2swqjbGw3ysfcnuxrQsGmapYvpwvra1FtDL52Mi+Gx49sZoMb+LXV0t+jWl3OYLGTO2zjx4h2nyszHsG4/Sgxt5ZJmEsjl3PB3GgSlyXBxkDnNADseB2PsaA8SoXQyFgmQCV70B5R/EIjYmPJxnvigEKcYDfrQF2/X9aCwqC7l2zwfT/FAJJ5747E5oGTqZArKOfccftQHZWwmOD23Z4NAEkTEBmwR7g5AoG7KSSE5HyFAMTyQsMHa/cEcEc5oL58P+v7rppdryPNAXx+GfsQe7Z9D2/Wg3zSdX0fqzT08F433eYwscOpHt9PcVkQPW632mX9vfWdrbXiRgrIdu2eHIwGD57+nIoKdc/ELVdC0u5afp27SUtta5vJMMzk+UDjzYHtQWDpj4gxXmif/wAitXZkGZzFGW8MehZO+PmM0Fibr/poWQmF6xXA2xmFg59sKRk0C2nQP1KFvdb0vwIUJNtDKcsVP8zD0Jx2oJDTNA0vR5p7qzs44pJOXkUc/SgNfa/pNvbF5L2JgTsCo2WJzjGKA1jcNcxOF/m/I0zbt4+gxgenNA5s7CCxWWYQxpNLgyMiY3nt2oHajcuexAoEL1C1uyFkVHO1ixHb17/KgwT4rdXWep6oul2OpywaTYqVLxDyySDjaM9x6Z+tWDPdB1TW7Wa9sumpGlursqMQRlpXwd3BA4571RcdN0i41G7h/wBSmNxqdkwn1O6u5/4cAXlYgcnngE/pQNvih8S211obHRyYbWInfJG/Ex9MD2+tBmNzcTXTtJcSSSSHH5jngDAH0oEdxbg5A9wKAzPwO+fegSLfLJoFoR5fUfegXOcHGAT8qAM+XaBzQCCwGDuyPlQWJpV37Q5TIweM7u/f9qA9vNYpFML2KaR8YiaJgAh55PvQRvnYoqA+MThcDnPai4PKWQlH3K6tggjnPaiEmz4ZznBPfFAVWG0AZDH1z2HzoE7lhv8AJIHI/mGRQI8AEeuOMGgndN6pu7V4RJLKY4WDLhypXj0oNL6d+MMS4ttetDdQgDNwAPEwPRh2NZGkabrvTXVZiexvba5aI+ILWZQG3Y4IDdvtQScvTdjK8chtFjkQ+VlYgqPXGKA17daV07apJrV9CsZbELTgbu3YY78UEHf9evJ4K9P6JqGoiR1XxjCUjAJ5OT3NBM9YdSWPTenwy3t7bWbSuBunUthfUhRyT+1BA2vXnS/jGdeo9LnIHljeLwSCe5zgmgejrOz1S3kGhazoaXYGAJ5Sw3e38uaCsJfX02rPD1XfXtvcCXdBJGjLbOO+EK88Y7nIoLB1H1Bb6WkN1ddSQ29io/5MZEjzt7DGTjj2FXNGUfEH4wRaxCtnp2kwGGM7llvBvIOO4XOAe/fNMwZbqusalfLBHfzSvFH+SIgKo+igYqiwWfWV30rpp03p6exJnUPJexQnxuR+Ulu2PkKCrT6jcSiTxZnbxCWcFidxPJJ96BBDlQ35fbFAbahBHJIGO+KAIwg5YnB455oDkKcbW7UAOowSMjOORQcCVXPp+9AqDkHcDmgMNpHPcUBTuzQWCJXcFvKR2Y0CMiqjnz4UcH/6oG8gKluwxyAfSjQ6ylEJBJfv37/OiYQMjbjkZXOSP/FEELAEkNn1waBCXdjORnPoc80CZeTb5wQe2BQAm4y7jlhjvQcWO3cW4GB7ZpgGC5a3uUeNyGQ5GCR+45pgt+l/EzqLTgxj1O5Zc4CSOXCj70wOE+Jd/Pq0V7qVvb3bISAWUBhnuc+/2pgvkHx0soLaNIdKkEiqR5yDg47cYpgresfELSNc1n8VrFtAw2ZBiiywwcgeb14x2xTBYNA13ozUo/GOqWVizDc1nf6crIh/7wOf1rOURvVupdE6ncpFeakiSWsZdbjSLfw1Zs+VVyMHA75xWsFDHU0idTJdf65rT28YKpPvHjKp9Bk49qYK/rGpXF/qU9zPdyzyyMSJJAAx9ifnVlwNZ7vxYEh8GAEHO8DDH5H5U0IPK8jHxSzFQAMnOKgJkFwPT6UBlAII5z3zQCjnA5OKBXeuAT9KABMA208DtxQHRhzgUC3KjJx9z2oAP6/L3NAHC8Hg/XNAcNtGe4oEy5yeaCdLk7yx2qQCAO1AmXZSSexHbPNAhJuLJkgjvzRonuAJy2cd8UCbyOi453Dj7GiYTZyVPPl74oYLJIyq68EH3Gf3oYTDEjLbiP1FEDHOUOdgOfXIBFAm77j5Mnng/WgLI5UE8Eg9iO9AnuJbuQx5wOBQFRxuIbOc54PrQK28ws76F722EyI4d4HJUOPb35yKBm8oeQsi4BPbPb71RyYIHmPGRg00GRsbsHIPY0Bg52AEEseBUCQJyOPXtQDtcdvvjtQCQ/GBwKAuXU4PrQBvZE5IGeO1AffjBJ57UBvEO045HagFWAAzktQKIzBeMg0C5kz5mOG/WgMrDJJ7jmgEnIyOccYoA3cEMRj05oC7/wDeBQTduzEoNxwcZGaAJOWfPNAlISVOT60aIQfkj+amgJ3bnnigKeFGPQUCf/x0Smw4V8exogX/AOY3+/SgKxKxeU459KAgJOckntQJkkcgkGgAAFFz/XQEmJaY7jnk96BM9yPQelAf/wCX7UBv/jagGP8AKB6ZoDf00HMfO/0oAH5TQA/5moECSMDPFAvGASMjPP8AigVX+b60BW7/AHoHEJJD55oDd4snv70CsSjCcDmgVAAbgYoGYJ3nk9qBUAYHAoP/2Q==</binary></FictionBook>+<FictionBook xmlns="http://www.gribuser.ru/xml/fictionbook/2.0" xmlns:l="http://www.w3.org/1999/xlink"><description><title-info><book-title>Pandoc Test Suite</book-title><author><first-name>John</first-name><last-name>MacFarlane</last-name></author><author><nickname>Anonymous</nickname></author><date>July 17, 2006</date></title-info><document-info><program-used>pandoc</program-used></document-info></description><body><title><p>Pandoc Test Suite</p></title><annotation><p>John MacFarlane</p><p>Anonymous</p><p>July 17, 2006</p></annotation><section><p>This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Headers</p></title><section><title><p>Level 2 with an embedded link &lt;/url&gt;</p></title><section><title><p>Level 3 with emphasis</p></title><section><title><p>Level 4</p></title><section><title><p>Level 5</p></title></section></section></section></section></section><section><title><p>Level 1</p></title><section><title><p>Level 2 with emphasis</p></title><section><title><p>Level 3</p></title><p>with no blank line</p></section></section><section><title><p>Level 2</p></title><p>with no blank line</p><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Paragraphs</p></title><p>Here’s a regular paragraph.</p><p>In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.</p><p>Here’s one with a bullet. * criminey.</p><p>There should be a hard line break<empty-line />here.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Block Quotes</p></title><p>E-mail style:</p><cite><p>This is a block quote. It is pretty short.</p></cite><cite><p>Code in a block quote:</p><empty-line /><p><code>sub status {</code></p><p><code>    print &quot;working&quot;;</code></p><p><code>}</code></p><empty-line /><p>A list:</p><p> 1. item one</p><p> 2. item two</p><p>Nested block quotes:</p><cite><p>nested</p></cite><cite><p>nested</p></cite></cite><p>This should not be a block quote: 2 &gt; 1.</p><p>And a following paragraph.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Code Blocks</p></title><p>Code:</p><empty-line /><p><code>---- (should be four hyphens)</code></p><p><code></code></p><p><code>sub status {</code></p><p><code>    print &quot;working&quot;;</code></p><p><code>}</code></p><p><code></code></p><p><code>this code block is indented by one tab</code></p><empty-line /><p>And:</p><empty-line /><p><code>    this code block is indented by two tabs</code></p><p><code></code></p><p><code>These should not be escaped:  \$ \\ \&gt; \[ \{</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Lists</p></title><section><title><p>Unordered</p></title><p>Asterisks tight:</p><p>• asterisk 1</p><p>• asterisk 2</p><p>• asterisk 3</p><p>Asterisks loose:</p><p>• asterisk 1<empty-line /></p><p>• asterisk 2<empty-line /></p><p>• asterisk 3<empty-line /></p><p>Pluses tight:</p><p>• Plus 1</p><p>• Plus 2</p><p>• Plus 3</p><p>Pluses loose:</p><p>• Plus 1<empty-line /></p><p>• Plus 2<empty-line /></p><p>• Plus 3<empty-line /></p><p>Minuses tight:</p><p>• Minus 1</p><p>• Minus 2</p><p>• Minus 3</p><p>Minuses loose:</p><p>• Minus 1<empty-line /></p><p>• Minus 2<empty-line /></p><p>• Minus 3<empty-line /></p></section><section><title><p>Ordered</p></title><p>Tight:</p><p> 1. First</p><p> 2. Second</p><p> 3. Third</p><p>and:</p><p> 1. One</p><p> 2. Two</p><p> 3. Three</p><p>Loose using tabs:</p><p> 1. First<empty-line /></p><p> 2. Second<empty-line /></p><p> 3. Third<empty-line /></p><p>and using spaces:</p><p> 1. One<empty-line /></p><p> 2. Two<empty-line /></p><p> 3. Three<empty-line /></p><p>Multiple paragraphs:</p><p> 1. Item 1, graf one.<empty-line />Item 1. graf two. The quick brown fox jumped over the lazy dog’s back.<empty-line /></p><p> 2. Item 2.<empty-line /></p><p> 3. Item 3.<empty-line /></p></section><section><title><p>Nested</p></title><p>• Tab<p>◦ Tab<p>* Tab</p></p></p><p>Here’s another:</p><p> 1. First</p><p> 2. Second:<p>   • Fee</p><p>   • Fie</p><p>   • Foe</p></p><p> 3. Third</p><p>Same thing but with paragraphs:</p><p> 1. First<empty-line /></p><p> 2. Second:<empty-line /><p>   • Fee</p><p>   • Fie</p><p>   • Foe</p></p><p> 3. Third<empty-line /></p></section><section><title><p>Tabs and spaces</p></title><p>• this is a list item indented with tabs<empty-line /></p><p>• this is a list item indented with spaces<empty-line /><p>◦ this is an example list item indented with tabs<empty-line /></p><p>◦ this is an example list item indented with spaces<empty-line /></p></p></section><section><title><p>Fancy list markers</p></title><p> (2) begins with 2</p><p> (3) and now 3<empty-line />with a continuation<empty-line /><p> (3) iv. sublist with roman numerals, starting with 4</p><p> (3) v. more items<p> (3) v. (A) a subsublist</p><p> (3) v. (B) a subsublist</p></p></p><p>Nesting:</p><p> A. Upper Alpha<p> A. I. Upper Roman.<p> A. I. (6) Decimal start with 6<p> A. I. (6) c) Lower alpha with paren</p></p></p></p><p>Autonumbering:</p><p> 1. Autonumber.</p><p> 2. More.<p> 2. 1. Nested.</p></p><p>Should not be a list item:</p><p>M.A. 2007</p><p>B. Williams</p><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Definition Lists</p></title><p>Tight using spaces:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Tight using tabs:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Loose:</p><p><strong>apple</strong></p><p>    red fruit<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /></p><p><strong>banana</strong></p><p>    yellow fruit<empty-line /></p><p>Multiple blocks with italics:</p><p><strong><emphasis>apple</emphasis></strong></p><p>    red fruit<empty-line />    contains seeds, crisp, pleasant to taste<empty-line /></p><p><strong><emphasis>orange</emphasis></strong></p><p>    orange fruit<empty-line /><empty-line /><p><code>    { orange code block }</code></p><empty-line /><cite><p>    orange block quote</p></cite></p><p>Multiple definitions, tight:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line />    bank<empty-line /></p><p>Multiple definitions, loose:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line />    bank<empty-line /></p><p>Blank line after term, indented marker, alternate markers:</p><p><strong>apple</strong></p><p>    red fruit<empty-line />    computer<empty-line /></p><p><strong>orange</strong></p><p>    orange fruit<empty-line /><p> 1. sublist</p><p> 2. sublist</p></p></section><section><title><p>HTML Blocks</p></title><p>Simple block on one line:</p>foo<p>And nested without indentation:</p>foobar<p>Interpreted markdown in a table:</p><empty-line /><p><code>&lt;table&gt;</code></p><p><code>&lt;tr&gt;</code></p><p><code>&lt;td&gt;</code></p><empty-line />This is <emphasis>emphasized</emphasis><empty-line /><p><code>&lt;/td&gt;</code></p><p><code>&lt;td&gt;</code></p><empty-line />And this is <strong>strong</strong><empty-line /><p><code>&lt;/td&gt;</code></p><p><code>&lt;/tr&gt;</code></p><p><code>&lt;/table&gt;</code></p><p><code></code></p><p><code>&lt;script type=&quot;text/javascript&quot;&gt;document.write(&#39;This *should not* be interpreted as markdown&#39;);&lt;/script&gt;</code></p><empty-line /><p>Here’s a simple block:</p>foo<p>This should be a code block, though:</p><empty-line /><p><code>&lt;div&gt;</code></p><p><code>    foo</code></p><p><code>&lt;/div&gt;</code></p><empty-line /><p>As should this:</p><empty-line /><p><code>&lt;div&gt;foo&lt;/div&gt;</code></p><empty-line /><p>Now, nested:</p>foo<p>This should just be an HTML comment:</p><empty-line /><p><code>&lt;!-- Comment --&gt;</code></p><empty-line /><p>Multiline:</p><empty-line /><p><code>&lt;!--</code></p><p><code>Blah</code></p><p><code>Blah</code></p><p><code>--&gt;</code></p><p><code></code></p><p><code>&lt;!--</code></p><p><code>    This is another comment.</code></p><p><code>--&gt;</code></p><empty-line /><p>Code block:</p><empty-line /><p><code>&lt;!-- Comment --&gt;</code></p><empty-line /><p>Just plain comment, with trailing spaces on the line:</p><empty-line /><p><code>&lt;!-- foo --&gt;   </code></p><empty-line /><p>Code:</p><empty-line /><p><code>&lt;hr /&gt;</code></p><empty-line /><p>Hr’s:</p><empty-line /><p><code>&lt;hr&gt;</code></p><p><code></code></p><p><code>&lt;hr /&gt;</code></p><p><code></code></p><p><code>&lt;hr /&gt;</code></p><p><code></code></p><p><code>&lt;hr&gt;   </code></p><p><code></code></p><p><code>&lt;hr /&gt;  </code></p><p><code></code></p><p><code>&lt;hr /&gt; </code></p><p><code></code></p><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;</code></p><p><code></code></p><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;</code></p><p><code></code></p><p><code>&lt;hr class=&quot;foo&quot; id=&quot;bar&quot;&gt;</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Inline Markup</p></title><p>This is <emphasis>emphasized</emphasis>, and so <emphasis>is this</emphasis>.</p><p>This is <strong>strong</strong>, and so <strong>is this</strong>.</p><p>An <emphasis>emphasized link<a l:href="#l1" type="note"><sup>[1]</sup></a></emphasis>.</p><p><strong><emphasis>This is strong and em.</emphasis></strong></p><p>So is <strong><emphasis>this</emphasis></strong> word.</p><p><strong><emphasis>This is strong and em.</emphasis></strong></p><p>So is <strong><emphasis>this</emphasis></strong> word.</p><p>This is code: <code>&gt;</code>, <code>$</code>, <code>\</code>, <code>\$</code>, <code>&lt;html&gt;</code>.</p><p><strikethrough>This is <emphasis>strikeout</emphasis>.</strikethrough></p><p>Superscripts: a<sup>bc</sup>d a<sup><emphasis>hello</emphasis></sup> a<sup>hello there</sup>.</p><p>Subscripts: H<sub>2</sub>O, H<sub>23</sub>O, H<sub>many of them</sub>O.</p><p>These should not be superscripts or subscripts, because of the unescaped spaces: a^b c^d, a~b c~d.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Smart quotes, ellipses, dashes</p></title><p>“Hello,” said the spider. “‘Shelob’ is my name.”</p><p>‘A’, ‘B’, and ‘C’ are letters.</p><p>‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’</p><p>‘He said, “I want to go.”’ Were you alive in the 70’s?</p><p>Here is some quoted ‘<code>code</code>’ and a “quoted link<a l:href="#l2" type="note"><sup>[2]</sup></a>”.</p><p>Some dashes: one—two — three—four — five.</p><p>Dashes between numbers: 5–7, 255–66, 1987–1999.</p><p>Ellipses…and…and….</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>LaTeX</p></title><p>• </p><p>• <code>2+2=4</code></p><p>• <code>x \in y</code></p><p>• <code>\alpha \wedge \omega</code></p><p>• <code>223</code></p><p>• <code>p</code>-Tree</p><p>• Here’s some display math: <code>\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}</code></p><p>• Here’s one that has a line break in it: <code>\alpha + \omega \times x^2</code>.</p><p>These shouldn’t be math:</p><p>• To get the famous equation, write <code>$e = mc^2$</code>.</p><p>• $22,000 is a <emphasis>lot</emphasis> of money. So is $34,000. (It worked if “lot” is emphasized.)</p><p>• Shoes ($20) and socks ($5).</p><p>• Escaped <code>$</code>: $73 <emphasis>this should be emphasized</emphasis> 23$.</p><p>Here’s a LaTeX table:</p><empty-line /><p><code>\begin{tabular}{|l|l|}\hline</code></p><p><code>Animal &amp; Number \\ \hline</code></p><p><code>Dog    &amp; 2      \\</code></p><p><code>Cat    &amp; 1      \\ \hline</code></p><p><code>\end{tabular}</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Special Characters</p></title><p>Here is some unicode:</p><p>• I hat: Î</p><p>• o umlaut: ö</p><p>• section: §</p><p>• set membership: ∈</p><p>• copyright: ©</p><p>AT&amp;T has an ampersand in their name.</p><p>AT&amp;T is another way to write it.</p><p>This &amp; that.</p><p>4 &lt; 5.</p><p>6 &gt; 5.</p><p>Backslash: \</p><p>Backtick: `</p><p>Asterisk: *</p><p>Underscore: _</p><p>Left brace: {</p><p>Right brace: }</p><p>Left bracket: [</p><p>Right bracket: ]</p><p>Left paren: (</p><p>Right paren: )</p><p>Greater-than: &gt;</p><p>Hash: #</p><p>Period: .</p><p>Bang: !</p><p>Plus: +</p><p>Minus: -</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Links</p></title><section><title><p>Explicit</p></title><p>Just a URL<a l:href="#l3" type="note"><sup>[3]</sup></a>.</p><p>URL and title<a l:href="#l4" type="note"><sup>[4]</sup></a>.</p><p>URL and title<a l:href="#l5" type="note"><sup>[5]</sup></a>.</p><p>URL and title<a l:href="#l6" type="note"><sup>[6]</sup></a>.</p><p>URL and title<a l:href="#l7" type="note"><sup>[7]</sup></a></p><p>URL and title<a l:href="#l8" type="note"><sup>[8]</sup></a></p><p>with_underscore<a l:href="#l9" type="note"><sup>[9]</sup></a></p><p>Email link<a l:href="#l10" type="note"><sup>[10]</sup></a></p><p>Empty<a l:href="#l11" type="note"><sup>[11]</sup></a>.</p></section><section><title><p>Reference</p></title><p>Foo bar<a l:href="#l12" type="note"><sup>[12]</sup></a>.</p><p>Foo bar<a l:href="#l13" type="note"><sup>[13]</sup></a>.</p><p>Foo bar<a l:href="#l14" type="note"><sup>[14]</sup></a>.</p><p>With embedded [brackets]<a l:href="#l15" type="note"><sup>[15]</sup></a>.</p><p>b<a l:href="#l16" type="note"><sup>[16]</sup></a> by itself should be a link.</p><p>Indented once<a l:href="#l17" type="note"><sup>[17]</sup></a>.</p><p>Indented twice<a l:href="#l18" type="note"><sup>[18]</sup></a>.</p><p>Indented thrice<a l:href="#l19" type="note"><sup>[19]</sup></a>.</p><p>This should [not][] be a link.</p><empty-line /><p><code>[not]: /url</code></p><empty-line /><p>Foo bar<a l:href="#l20" type="note"><sup>[20]</sup></a>.</p><p>Foo biz<a l:href="#l21" type="note"><sup>[21]</sup></a>.</p></section><section><title><p>With ampersands</p></title><p>Here’s a link with an ampersand in the URL<a l:href="#l22" type="note"><sup>[22]</sup></a>.</p><p>Here’s a link with an amersand in the link text: AT&amp;T<a l:href="#l23" type="note"><sup>[23]</sup></a>.</p><p>Here’s an inline link<a l:href="#l24" type="note"><sup>[24]</sup></a>.</p><p>Here’s an inline link in pointy braces<a l:href="#l25" type="note"><sup>[25]</sup></a>.</p></section><section><title><p>Autolinks</p></title><p>With an ampersand: http://example.com/?foo=1&amp;bar=2<a l:href="#l26" type="note"><sup>[26]</sup></a></p><p>• In a list?</p><p>• http://example.com/<a l:href="#l27" type="note"><sup>[27]</sup></a></p><p>• It should.</p><p>An e-mail address: nobody@nowhere.net<a l:href="#l28" type="note"><sup>[28]</sup></a></p><cite><p>Blockquoted: http://example.com/<a l:href="#l29" type="note"><sup>[29]</sup></a></p></cite><p>Auto-links should not occur here: <code>&lt;http://example.com/&gt;</code></p><empty-line /><p><code>or here: &lt;http://example.com/&gt;</code></p><empty-line /><empty-line /><p>——————————</p><empty-line /></section></section><section><title><p>Images</p></title><p>From “Voyage dans la Lune” by Georges Melies (1902):</p><image l:href="#image1" l:type="imageType" alt="lalune" title="Voyage dans la Lune" /><p>Here is a movie <image l:href="#image2" l:type="inlineImageType" alt="movie" /> icon.</p><empty-line /><p>——————————</p><empty-line /></section><section><title><p>Footnotes</p></title><p>Here is a footnote reference,<a l:href="#n30" type="note"><sup>[30]</sup></a> and another.<a l:href="#n31" type="note"><sup>[31]</sup></a> This should <emphasis>not</emphasis> be a footnote reference, because it contains a space.[^my note] Here is an inline note.<a l:href="#n32" type="note"><sup>[32]</sup></a></p><cite><p>Notes can go in quotes.<a l:href="#n33" type="note"><sup>[33]</sup></a></p></cite><p> 1. And in list items.<a l:href="#n34" type="note"><sup>[34]</sup></a></p><p>This paragraph should not be part of the note, as it is not indented.</p></section></body><body name="notes"><section id="l1"><title><p>1</p></title><p><code>/url</code></p></section><section id="l2"><title><p>2</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l3"><title><p>3</p></title><p><code>/url/</code></p></section><section id="l4"><title><p>4</p></title><p>title: <code>/url/</code></p></section><section id="l5"><title><p>5</p></title><p>title preceded by two spaces: <code>/url/</code></p></section><section id="l6"><title><p>6</p></title><p>title preceded by a tab: <code>/url/</code></p></section><section id="l7"><title><p>7</p></title><p>title with &quot;quotes&quot; in it: <code>/url/</code></p></section><section id="l8"><title><p>8</p></title><p>title with single quotes: <code>/url/</code></p></section><section id="l9"><title><p>9</p></title><p><code>/url/with_underscore</code></p></section><section id="l10"><title><p>10</p></title><p><code>mailto:nobody@nowhere.net</code></p></section><section id="l11"><title><p>11</p></title><p><code></code></p></section><section id="l12"><title><p>12</p></title><p><code>/url/</code></p></section><section id="l13"><title><p>13</p></title><p><code>/url/</code></p></section><section id="l14"><title><p>14</p></title><p><code>/url/</code></p></section><section id="l15"><title><p>15</p></title><p><code>/url/</code></p></section><section id="l16"><title><p>16</p></title><p><code>/url/</code></p></section><section id="l17"><title><p>17</p></title><p><code>/url</code></p></section><section id="l18"><title><p>18</p></title><p><code>/url</code></p></section><section id="l19"><title><p>19</p></title><p><code>/url</code></p></section><section id="l20"><title><p>20</p></title><p>Title with &quot;quotes&quot; inside: <code>/url/</code></p></section><section id="l21"><title><p>21</p></title><p>Title with &quot;quote&quot; inside: <code>/url/</code></p></section><section id="l22"><title><p>22</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l23"><title><p>23</p></title><p>AT&amp;T: <code>http://att.com/</code></p></section><section id="l24"><title><p>24</p></title><p><code>/script?foo=1&amp;bar=2</code></p></section><section id="l25"><title><p>25</p></title><p><code>/script?foo=1&amp;bar=2</code></p></section><section id="l26"><title><p>26</p></title><p><code>http://example.com/?foo=1&amp;bar=2</code></p></section><section id="l27"><title><p>27</p></title><p><code>http://example.com/</code></p></section><section id="l28"><title><p>28</p></title><p><code>mailto:nobody@nowhere.net</code></p></section><section id="l29"><title><p>29</p></title><p><code>http://example.com/</code></p></section><section id="n30"><title><p>30</p></title><p>Here is the footnote. It can go anywhere after the footnote reference. It need not be placed at the end of the document.</p></section><section id="n31"><title><p>31</p></title><p>Here’s the long note. This one contains multiple blocks.</p><p>Subsequent blocks are indented to show that they belong to the footnote (as with list items).</p><empty-line /><p><code>  { &lt;code&gt; }</code></p><empty-line /><p>If you want, you can indent every line, but you can also be lazy and just indent the first line of each block.</p></section><section id="n32"><title><p>32</p></title><p>This is <emphasis>easier</emphasis> to type. Inline notes may contain links<a l:href="#l32" type="note"><sup>[32]</sup></a> and <code>]</code> verbatim characters, as well as [bracketed text].</p></section><section id="n33"><title><p>33</p></title><p>In quote.</p></section><section id="n34"><title><p>34</p></title><p>In list.</p></section></body><binary id="image2" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEASABIAAD//gBQVGhpcyBhcnQgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uIEtldmluIEh1Z2hlcywga2V2aW5oQGVpdC5jb20sIFNlcHRlbWJlciAxOTk1/9sAQwABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/9sAQwEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEB/8AAEQgAFgAUAwEiAAIRAQMRAf/EABoAAQACAwEAAAAAAAAAAAAAAAAICQUGCgf/xAAjEAABBQEAAwABBQAAAAAAAAAGAwQFBwgCAAEJChEVOXa3/8QAFgEBAQEAAAAAAAAAAAAAAAAABggA/8QAJhEBAAECBQEJAAAAAAAAAAAAAQIAAwQFBhEhszE0NlFUcXR1tP/aAAwDAQACEQMRAD8AqQzziPNmpiqnIO1q4H+WkB84MdlzRSuM82/jVw/JCORtRmQz5d2VTy6WmS2eSYx3U/qkSRbgFsqRzH2Is4/mCluXc33vy8xTnJjTNqV/T8LKmkhr8Hq1da2aOvTfIh2CFeNt+GxFBP8AJFdFUbPWh+4FdXV7OtZOMR7mK9lBWNN+JBmMQ5cwmfH8DEFhTZUCRlE6CBq/ds/nBh9oYygeY1L9FnCUnBSN1t+w0l9bNomx1cllsOrL9OCTKtKOIqua6UVjP0dEvTyM7gp/3whbkAD0ScX3r6MLg+C2/XsMhCnJRn/5cVNHyJHiX6JKIFhhqnFeagm9BIgjfcJyNBTZiROBUk6Mp8CJRmT4NWU2MatV7n495DPk/wAbMJSRJOTBDItq0KR5s/nJN7LPW8AJWtYAoKQaDp+u4XShxgXhYcbHoxNTllCwETGQ8ag2jmDVsk8w/wCOp/C/hn+mWV/utpePH+D5wmF39NY6UakjUYR1Dn0YgRM5zQAAAMdfAA4AOAOArjkMNQ3vgm7UKtBR+m9QHFD5tpnDtpy+t2R20gK/OsmFtuDpaL5mVyiT5qdEVAvZci5ch5VoSGKbwlWTBr0RPoZT07av9lHfrXo6yLApWMugKpPM9SV1cDm65s/wkOHZBojoqiM+6GpMSj4FhtayNAUi5H3LfQBG2KWssFoSPuJdKyMLKtpuLi+e3jwFICUg7CSHsNVlYlKdizOTvKdq3KTsG8pQirsAG6vAB5FdhP490U4gfjxi+DedoqO4YftmKdKNulO26jiOv+2Ga/bftVNFXpHtVHrpLpRFJTpP3z77T469++fTx48e4LueE+NY6UKk7UniLP8A7rNf3X6//9k=</binary><binary id="image1" content-type="image/jpeg">/9j/4AAQSkZJRgABAQEAeAB4AAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcUFhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCj/wAARCAD6APoDAREAAhEBAxEB/8QAHAAAAAcBAQAAAAAAAAAAAAAAAQIDBAUGBwAI/8QAPhAAAgEDAwIEBAQFAgUFAAMAAQIDAAQRBRIhBjETIkFRB2FxgRQykaEjQlKxwRXwFjNictEIJEPh8SZTgv/EABcBAQEBAQAAAAAAAAAAAAAAAAABAgT/xAAbEQEBAQEAAwEAAAAAAAAAAAAAARECEiExQf/aAAwDAQACEQMRAD8A2t0YoQpwT2qVzMV+N3UHgrDY2eoM0y58VEbgfp9K1yMRmnuJ5h40jyYHGSeKrWE8u2QAApOMdqGCsmT8h70TAJwMAZx249aKBy4c9vTNUC0zDCgmmmG7Ockjkj1PrUTAjcy5XP0ouCgHae4IomOJHhgIc55PHY0Uk5IXLMcUBQ27n96JYO2MYLebHtRBA7BcMx29sdxQJqwZRtIP+BQKpjHHc+xzigNGoAO/k+nPAoAYlee5oBiGeWySO9AJCgY5PHagFCADzj2GaA2N2TkjA/U0HMwbPPeiyBLDfkkj04FCl1cBMgn6URwYFGySR6D2oAeQDAxnHGKAhU4IbGc+tFwnwDj9aK7f8v2oNu+IHxNvJdXmt9EmKWSqArA/mPvxUxMZNe3Ml1dvNcMzSSEsxPOferJhht/OWyAPc0UfdgDcuM8n50AMCykZFARsngcY/egTcbjnJz9O9AB2kZGSQOcUCX8x83bntQCMruJ4B7D1oCyOGzxtJ9M80CAdg5UjFE0aFJrghLeNpHY4IRdx/QUNWCw6D6q1EZttEvirHAZ4ig/U4qw1b9H+CHVN3Mq6hJaWMJ5ZjJ4hA/7R3P3q3ET+pf8Ap/lWNm03XkkkA8qTW+3PHupP9qxopV78G+s7VSV0+OcAn/kzqSfscVvIKzqPTWu6XKE1LSL+Bhz5oDg/cd6lEZzGwLrtPqrA8frUCJfcw9gfegUjZsEAffNADyHt78UAjCjzDJxRcO5Pw3gwCGOVJQp8ZncMGOeNoxwMY96GCbQffFFcUXKjDDt2NEo+N3yyM5z3okKuqJgIzONoJyuMGi4QfGcqSfXBoYHJx659qKIRnnsfUGgJn/poJYoTIGLY+eDzQFlQK2G/KCTmgbspfO0qce/agPGcR7nHf9vnQFfBPlOc88Gg7uucc/M0Bd208YJJweKAYrea4kKQICRGW5IUYUZJ570DYqcknt3FE0VuVyDzj1oamOlulda6puvC0a0eZVIWSbtGn1Y1NNbX0x8ENH0qL8X1NdtqDoNxiQbIh8u+WpqL70Tc6fcxypouiRadbW8hhLFFXcB7Edz+tNFvEZxkmmgShbA9PlUA+Hgg/wBqDgmBkd6ArJuJBGR7VdEdqWgaVqMfh6hp9pcLj/5Ig2KaKJrvwW6S1EFoLaWwmPIe2fAz81ORTRm3UfwI1mzBbRL+K/ReyS/w3x/b+1Wexmev9O6xoE2zWdOubUDszr5T9G7H9auCJj2n3PPrUXTlGBB2kYx96GlQMjJJHuRRXBgDgk8DtRKH8w4OfYA0SUlIMsFXJ4oujHH8ufnRRGOSNoJNAeFC77F2jPucfvQFEqgY3nj/AKaCUY58wwq54AoCzOmVMke9QeRnGR7ZoEIF7pnaTk49KDpSSwQntQJsGKjgggZ9uDQc4OOe1Am2UCkHOR7dqA8t/cSW8MEkrGGEsUTPCk4zj9KJT3pzQtS6m1aPT9Jh8SVxlmJwqL/UfYURuuhfArR7f8NLrF1cXciKDJCrbI2b7c4+9NGtaRptrpdqltYW0VtAn5Y41wBUodvGjqUdQyn0YZqAIreOBFSFFRF7BQAKA1xcRwKplcJuOBn1NAR7y2ikWMzoZnGVQHJNAuQcD3oBKkD2FBy8jnvQFxnjjmg4rxwKBMqCBtPNA3vbCC+tngvYo54HGGSRQQR9DV0Y91n8DNOvFkuOmZmsrk5PgSNuiY98D1X+1XRhWu6DqWgX72er2j2069t/ZvmD2IoGG7jbnj1FFlB224PB+VClN4DYJHyAojmPGCck8cetCAxgjPp6UaAGKtx6+9ATAXO7nFBw8HHLN+goJhBuj2FeAcnmgNazW8U0vjweODGyqpYrsYjytx3x3oGa5LEEjH9XvQGlgmjjMmQq4HBPfPYgevagG5nhe3tkFuInQHxJQTmQntn0wKBKTlAeDx60DSY+U9zn+mgsnQvROr9Y3W2xi8KxV8SXUnCrjvj1Y/IUR6c6A6H03o6wMVgrSXMoBmuX/NIf8Djt/eiLfjJwO9ZBiOfmKDhktzQAzYBLZ8oyaDF+rOptVv8AUjNZL4tjA/lT+kr3wvqTQX/pi3Y+DqFxKXurmFWAaPaVzg4I/b0oHlxqV7penRTXFu93dPLsESYB2k8n7CgnradLq1WaIOFI/K42sPkRQCg3Kcd6Dgp3d6AdrGg5VxnjmgKWB8uQGxnFAUgKuSefSghuqNC0jXbAWGtxQyJKdsYc4YMf6T6GtDzR8S/hnqfSUz3NvuvNILYSZR5o+ezj/Pb6UGfLzyD/AJoFFySQVBHpQDJ5kGByPahAbWxn5+po0OF3D+XPtQJsNwOe+aAuygmMkebgHnHFALHYpJwSeGz2oGpOJWAI49BQEZlYAHkg4oARVOMvtBIJJ7AUAX6xxSOsUgmjViFcKRuHviiVfvhT8NZuqpk1LVFeHRkPlHZpznsP+n50qPS+mWVppdnFa2cEcFtGu1I41ChR8qyHVxK8cLPDD4kgGVQHBNAa0maaBJGTYzDJXOcUCy5JOaA2OMfoaArkheM7vlQNYNOtoWLJCgLHJwo5NApPKLaNpGRQB6j2oGmnRvcyNd3O/DkeErLhkWgklIdCyZOCRzxzQEeRxhdpUnncBkD5UCxXjJ7+tAlctMsIMLohz5mcZAH09aBQYdQwyAeaAuA7MAQxHH0oG1481nbGVInuWU5Kr+bHrgepoKB1u+o6jqlvBH05NevEBPBK0pQR4I4BHZj+1Bb9IS7lsFtNWtYwDGFYB/EXHqpJ7/WtQYx8VfhGbdZtV6Uh8gy81mpyR6koPb5UGKY4YkeYd88fbFAI5AC98c5oQBb+U9+9GnN5RgDgjOPWgAN3yMfWgAqc91/UUD2RSSRg9+49KCR6e0WfX9WS0icRwgb55WOFijH5nP0FBYNRi6dSR7HRNPmu0hOW1GaXaZMdwBwAP3oynE0XRYrFtV02wS4ECj8dp1wcsE7eJEf39qlFZ616ZttPu7Kbp9Zbi0vYzNCcgjHqoHuKsEp8LPh7P1PqjXerxywaXaviRSu1pWH8g+XuflQemIIY7S3SK3hVIo12pGoAAA7AClEL1N1RH0/oTalcwx+IACLaSQKx59Ppmshv0D1jH1ZbTubU27xkkAnKsuSMg/UUFluLlLaJXETyecKAg554zigXiubeRnSKeJ5FOGVXBIPsaBLULoWkIfw3kYsAqIOSTQJMbpm3oqlmwACeF9yfn+1A+Bx34oE5IY5P+YFbnPIzQKAckHuRQCAQOO1AL8r9KDhkZOT9M8UCcrxgAyYJzwD70CT3Itxm8kgi3fly+P7/AOKA9pskhEkZysnOfeg6RH8w3tgjAHtQRZ1uystSg0m5eRJ2UbHceV8fP3oJkBSAVII9xQFdSRwKDDvjN8L/AMSJte6chxcgFrm1QcSf9aj39x61YMH8Q+CkfhqpQncxBDH5H6VRwXJ/Ke1Am2QchuMYOaNFSAVznB9qAm8f10D2RmX8jDHP3oLbebtA6ej0m2LrfX6LcX7IMskf8kf6HcffIoG8yTadZxSTxCK3kRZUwSFfkruIJ78GhiS6Y1OS3160uZJFWO5bwZtxzuQ8bcfPNMZXvo2wsLnQ9R0q/maJNNv5Yo3bjCuMAHPzqA2jdUan0lF0/ZXcElxp9zE+5WVd/DE71IPPB7H2po1bSNXsdYthLp1ykyEcj+ZT817ioITrnoux6vs1gv5JYnjz4ckZ/Ln5etA+6N0BemdBttMina4WEFfFdQpIJJ7D60E5I4Vo9qnnsQO1A3k0yzeTxhCizZJ3qNpz9RQO449igMSxHGW5NAIwBtUAUAMORkfegMhG3jtQD8+fvQGXJz7UAHuRQA5YDI5FB0qCQA5yaCs2/SFit/Jd3AmvJ2bO64ctt5zwD2oLMilVAUDgcAelAJLbhgZz3oGN9HPIYmhtrWRw2czjt7Y+dA+h3mJS67W9gc0AvuLYANADpkZABHY85oPOnxy+Hx06Z+odGjC2jt/7qBRwjH+cY9D6/OrKMebcceHwfaqCYIyDgZ96GhHOFJI4/WjQpXnsaCz9J6fDqGvRC8OLO3Vri5PB/hqMkfc4H3oDT3UupapcXrKS9zISgDdhnAGPbsKC5aLLBHq9p01c6bbagPE23kpJYhmz5IySAAMj6nNGdRnT2lu3V9vaQQrJDHfCMFj5kAfufsMUFogu5H0jrLUYXK+Lq0aRse/lf/8AOKlFfudagvbnQpNQRmtILydCwPdCQcgMOMZFQanPoeiawBd9M6s9jeKPK1vKQp+RFA4septa6fuFtuqbRrmzx5b+BAdo927A+vsflQXfTr2z1O3W5025juIW/mjOR9KAZI914khaRNo4XdwT9KAl3b2+oWpjMoZWbOVfnI9sUCrXUNssUU8w3sQoJH5jQLvwQQC3NAKvuUPtK54waDg23v6UA7weBnNAIOBigMr+hoOjdZQdhBx3waAVG0Z7UBWfAOQSflQChyNxBAxQRutarb6bHALi9trSW4kEcJnGd7ewFA/j8QEK/IA/MBjmgWDDBB7igj9dupLTTbiaHZ4oQ7A7bQW9ATVgwXSNV6onl8azW6t45pWdxHIxWA/zNtz7A8Glg2S1u7fX+nt0J/H2c4MMhmQoW9GBUjj60g8sfEHpebpDqi4sHLG2Y77eQ486E8fcdvtVFekGW4UfegKVAAKgnFGhuDzxQXbpDTZF6a13UnUqrCOzQ5wGZmXIJ+lE0ppkEK6nJcRWcTW9hA08iKcjcowpye/mxQ0+6VRbC/jvLm48L8LG9y8pIOXxkDnuSTipqHXQMng3es9S3fhn8DbvcZI5Mr/lH700dc3Dad8NtPs4nU6jeXD6nMCwBRF5XOfU8YHrTNJFF1X8RawW1jc4GxTKNrZB385yPkBTFw1stSu7Ni9tPLGSQfK5Aphi8J8UNUm6fn0u72yvJ5fGbuF/39aYYtGgadp9/axXnRetzaXqnhqZI3bEcj4547Ak/X6UxFisPiXe6NMdO65057eQAr+LhUlHHbOPX07UwWXpQ6BqMo1LpgW0sioVI8Qgxk+684qC028M5890Y3kHKbUwF+lA4LDOzu2M4FAOG3DaoI9cntQdJxzQEyR259f/AKoGl5fSQRFo7ZpB/MhYIR9zxQdayyXKb7gqox5Yo2yB9WHc0DPUIWnhWKxkuYFRs5gcKWbPY59KBkx6isVeSGW31JNwHhyOUkA+o8v9qCfjkMo/LJFKqBmRvSgc2swnRyFcYODuXGfpQMtRsLK8vYJL+wjuGiUtHK6hghz6Z7H6UEmCsig84I9RigiruC9t0DaaVmIIHhTOQMeuGwT9qCJ1ywv9T0U29xFFiaVBJGHz5M5ODgYPY/arKJPTtLW1t44i7SKq48w8x+ZPrTRJoipGFQAAdgKgzX47dMJrXSrXkUe6807MykDkp/MP8/aro80FQyZ+tUJ7hvH0x270XQ7KGtXvIk0T4c9P2bIhkvpnvJVfjIxhf7qftRDXpu0/1DpzXltUlkvmWMBI+2zdnn64oYa6yX0XTm0i4jQ3t6wmuV53xov5UPpyeeKyLbpFtZ6Xpmn6TqNq7/ic6pqQRR/DVf8Alq2fTOP0FXBnXU+ox32o3lzeW+JrxlMXHKR9wfbJ/tVWK5f3AnaAjafCTwwcY4BOM/qKKSjA4Dg8j37UHZKkE5P0olSFlcLDdJPbTNBOigjxOVZu3+80Rbbnrq9l0t9I6isRd2rgKpPlZMdyre9An07oupoh1zo2+lea2fMlr+WZFx7ZwwqWDVug/ihDq7R6b1EPwmpMNokPlVj8xng1BqEUe1EAJOMDOc5oDSxq6YYeuaAJF4oCBUQ7mJ45zQHYB14wR86AVjBXyjge1AEcRTHlA9hQE8kbgEohJ5yQM0ETHNqMOr3IZQ9tIMQyEjKt7D3FBLqywRPJKTuxlj3zQI3Ut14e+yhWRj28Q7RjH60EfpF3rU/jLqFrHbS4/hqpJXH19aCRa8jgiVr1xGwXzYyf99qA9tc29/aRXFnKs1vINyOO2KByoxwe9AYocHGKBvdwLcWzxSLuR1KuD6gjBoPHXWujt071Nf6YSSkUnkJ4yp5H7f2rQgWAA3Y+1An4j/1t+tBrHxKuYS+gx24LRx6ZFtI/lz60FY0+/v8ASphNpd68EpXY5AGNvzFF1YOirZbzVrvX9dkNxZWH8eeaY5Lyj8qj7kcVlETqOqXd/HrPUNzcNE16Tbwxf1JkEgD2AA/etBte9R2Oq2cv+p6XHJfBFjgmjkMaRgAAEqO5o1FWfbgjsR8+9AlI5CgEggeoNAq0iug8uD7g80KKmCcZ7fPmjJzJfT/hWtjJvhOPK/OOe49u9A96X1W90/VrRtNkkSfxQF8I5yScdvX6UGidSLpfVFzcvbRiy6kgZBGysFW7B9T7HHNSjU+o9S1iz0e2uNLmX8RYxJ+KgYeVwVGTn5d6gjug/iU3UOt/6TewQpP59skL5B29x/8AYoNHPB78Ggb2l3bXO78PKsoyVyvIBHBFAoSkbfyhn4GfWgTnmWFN7ybAvc4Jz9hQRdx1dp0S3Dw+JJHbDdPIUZUjX3yRz9Bmrgzbqb4x9Oxho4bB751O5HPkXPsc80wQHT/xrJ1IHUbGKO0kdRiBiAgz+YjnsPpTKN/tLy3vLOK5t5klt5F3LKhyCPemAYLuK5XMDEj1OCP71ArGWLMPT0oIbU7h11u2t49OllWWNm/FIRsjI4AI/egfQ2ktpbww2XgxoDl9wJ49cUCHUGv2GixM13Mkcm0squwUH5/SrgxDW/jFcXOteHb3otrKEEiRISRM3zGc49v1qDT+gfiBpvV7y2unxTxywRhz4ozuHbOR2+9Bmf8A6kNIEWpaZqiooEqtBIR6kHI/atfRjDEt3AKjgVQjug9j+lQWh72e/htTOzyeCnhHPomeMYoJvQum7vVD47K9jpsQBkvZ5NoAHcgUAa7rKamE0Lp9Xh0G1OZZTwZSO8jn9cCsivdS38F9cJDZIY7G2URxKe5x/MT7nNaEKrENwAFPPlosFwS2cd/cc0UlIm3JOeKDo2LH+UA0SjgDk98URzPiJ2449e/NAbS7v8PdpKkpikQ5WQLkqccGgmYNQmXWLeQLG9wVRQVPlcj+Yn3xQa98OviAjz3WjdXSpFdliEuJCNjDtsJ7enepRdel+kdL0rqOTVdIsoYklV1dixO3nunpg9jUCnU3WMeka5b2EUcl3JInmigQs6ZPlJAHY8+vpQP9O1m3nthNo0cTwM2JDwoVj6H5gd6CbhtUiVn8TcXO4ktkZ+We1BAf8Z6fZ2uqXWpyxQrbStGseQzMB2IA961B59+IHXmodXal+HsPFh04HbHCo25+bY/zQWv4f/CCxvII73qC8iuXYb1tYZeF9txHf6U3BatX+DvSl86x6cr2dwjbnEUmcj6Enj6U8hLdJdEX/SmowJp2tTT6Oc+La3HO0442+3NBf1LmRUjjQAfmc+nyHvWQockYyQcY3CgaabaPZxGNnaUFi3mPb6f+KA2q3RstNurnBxDE0mPfCk1YPMemaP1L8RtYN9fJPc2aMUaVmCKg54H0z6VRYendf6Z6T1W56a6j6fgfwJyguhGJmPzbIzjHtSjTn0zSunbi01fSkt9Os5GAmWNCDOGxtXb6HnNZEZ8etOF90DPKFy1rKk3zAzg/3rXI8u7zvOTg4zVoTLDJ81QWDTb2SwuvFgcrkbXwM5H0PFGqsjpd6+kcT61Nc2ieb8OikFc/9PA+WfSjKA1nWBzpFlZ/hLWM4KH8zsPVj6mghN4IyQRk5NGo5BkFmyAfSgVjChdpGO/FAXYpOHLBe/FAQqoBJbA9sUBGxgtgEj/eaCf6DGjt1TZf8RNGumKS7mQZQkDIB+WaMrf8Ub/ovV7V20JIYL62K4khhCLOCcEcAdu9BmCuEQvxvyFUg42+v+/rQaj0zax/EXRY9Nns0t9TtM+BqCKAjEclXA98jn+1Si7Cz6u6O0tLjTrxLu2tQJJrDwcKE/m2M2SfeoLrpupDV9Mh1OytUS2vIN8m4BZQf6T7+vPpj50GfdK9L6rJqk1y1y0elRDKRqdjHHoyDhjx39e9BZr7fagW0j3kul3iETRqHkeF8ZBUjkZIxjtk5rQ86dW6r+O1OcW0UtvaRsY4oWfLKBxz7k/5NA46P6X1rqS6WPS7V9v88rAqi/f3oN46X6C1DSotkus+BIwKl8hn2+3PapROXPT2t20bPY6kJ5UGYmbIfIHGW5z68VBI6DrzzWSrrAjtrwFUbDja5OBlfuaCbluJLeNwIpLiVF3bVXAP0Pv8qBxLO8cYcW7vnuqkAigNFKs8CyxlwG/lcYI+1A31ayF/pt1auSFmiaM/LIxVgwfoO413o3qqfSLyUSwodogAyZVGcbPTPr71aNDvendJ6wtbu7Fi1lezK0bS4VZMjtnFZE0bC5u9Jh0qRAr2yw4uWx59vBI44PegN1tpbap0lqOk2sipLPB4aFsnHbBNOR5A1exFhqFxbeKkngyMhdOxIPcVuhiZFz/zBUEwcKvYnP6fWi0+6chjn6h062uATFLcRrIMnzAsO9EehNR+GvTV3GUh0+O2YsGaWHIf9amjIfib0no3S0VtFY3M000zMzLJtLKvvkenyx96oz0rwNjA8cj2osFLbVAbOc9jRQiXOAwxnj3oBlAxwDj37UDY+vHOQeTQBIdqjcPMfnQwJclWyBgCjJBFeefw4VaVycBUGST2wAKD0L8H9C1rSIILjWLSCytY1lZASVnlL4PI/wD8+vvUo1uwbxI5GkjdVc7isvOBjtj2qBWKFZiQ8CJCB5FHYj5jHFArDbQ20ey3RY1HOAOPsKCH1u61CPSLt9MtlXUHUrbCbJBbPdtvYetXR5T1y2udD6lni1ErJdJLvlK4wWOCePvVgsV/8Sr67UW1vA0NiowIonMe4+7FeT9ARQRmodWa9EYpPBhs1Tygw26rk9xknkn70EjonxZ17TXjAeKTkZ3L+YZ7N8vpSjX+lOpNM6umgkMG3EgBV1DYbG4kewz2NZGkC43CP8MPFBONysMAD50DaHVH8S6N1a+BaxMUjd280pA5wPb296DrXWLK9WNoJdtwybxDKPDcAnHIoJBifTBzzmgaz2UFzPFNNbwvLCcxuyglT7igdRRKg8qAZ5JAAzQEnuYoHiSWQIZW2ID/ADH2H6UERr12BY6hueIQJaO7SK/nHfnHtx3pyPGWoN4jynuCfU963RF+DL/UtQWTkjaWY/8ATnHFGql+j1VerdJY8r+KiJz/ANwoy9C/EjqSbpbRY723RJC8ojIcZ4IJ/wAVkecer9en1+9FzeLCCq4URjgDP7mtLhteadBY2kMczyHUpcO0YxtiUjgH/q9celAiLy1kjCX1ruyMLNGdrj0+h+lE0+t+kNQltJ7yKS3jgiTxUFw/hySp7qp70NV6YEBgWUNjBoaKeAODnHrRoVgDnBP0ozpxZ2f4y5trVeGuJFiBPpk4zQep9C0LTembS30fQbWP8ZsDyTugZgf6ix9fYZpbgmbXSmXULaa6kMzpltzcjJ//AGpaLCY1CDsF74PrUCgHY0HbSx7Z96BGUfxB2xjtQZ11t0Tb6jNfyw2wM18gV5AcBdpzyPnV0Yp1F0o/TEczXjXaTOQYpIk3QlT3B9Rj0zVl0VKbVppImheUSwbsgFfXHc0De0tri/ujFYQSSyfmKopPHqaDV/g9p+padr/gkSRTzKu0kZRlPLYPbOPf2pg9GWzRCMJAFxH5do4wayKX1z/G0CdzqLWRkiaTxQBLudclQvovbv3oMU/4Z67uwnUAt3u1Zw42yhmx3/Ln8v0oN86L1d00i3i1UiGQIocNnEbnkqT2xgiguEbI4DIysp7EHNAZnxQQ/Usksej3EsCl5EUthR5sY52/Mjigr6Qrp3R15LqEcIlmgdpFGAsY2navPJApyPJtwd8rnGBuJz6Gt0MzGSTyf0qCwSKA5ZsAjnn2otTXQYj/AOMNIDqCrXUZwf8AuGDRG6fF6Gyfo6+ub0CR4EPgIScLIeAcfc1keatN0661a+S3sYTPKzAbV9B7/StLrQ/iXp9pYLp8elWsUM11AzXMqt53I7g7j244oiB6W6Tn6j2TeAy2FspTeB+Z+/8AmgtnWlvpdl1Dp1pq07Ja20GFQpuDHHAwPf39KDHriVTKSPOCeBnHHtQGsrG5v5pfwcTOIlMjgEeVfck0XRIreS7uUigRpJXOEVe5PtRE/wBJ9HaxqvUcdhNFJp0lviaSWVcMgzxgdySeBipo9T6O8NppUJ1K4iW5KgSvIyqxb5jPH0paJm1NvKivE6Mp7MpyP1FQLRTwy58F0cjuAckfagOTtO3+Y8igMWCIWbOPlzQNhNBOWEbq5Q+YKc4+tAD7JEZgQfXj0oI/VtIttXsZLW5hRopByCP/ADVlGRa78Erae63aXK1tG3LAncM/Kmh10l8IZdBv4rxtTE0yggJsyoz6/P0po0zSNKEMdo9xGnjxuzkqMAEgjj7GmialjWQMgyCRyQcGoITqHT7q/a30+G2jFmwLSzl8GPBGFA9c5NBPRwJDbpHCipEi4CjtigqfWltqCaG8WhNbxyzOBIs8W8FcY4+dWQQ/wtuZdIGqadrknhy2u2QyOSEZOeRngY+XvTBZZevOmhC8janbqiZ53Zzj2FMFcs+sh1ZqsFrp8UkGkrlpbh+DNzhVX5Z5NQTfXyWUXSV2t+wW3EZ5I4HHt61eYPI0mA5C9snFaoLsPv8AvUEk5JcA8cZG480WnOlXX4PVLO4yQ0cyP244Yf8AiiPUfUump1B0/c2O8xfi4v8AmL3UcGpgw/SujNX0Trj8PpckimOMvHO/kEg9Rjs3PpV0aFq/Qqa1ZJ/qcrverEqNOwGM+uMfemiVtrKbQdMNjp9rvtkhPht6mU5yT8u1BkvXg1qXUtOvddgRY1R3j2YHiMvZSD27CgzSCyuNQ1KK0giL3Mz4VAOc/wDignoNNOnaHeiW8hgkku/Al2+Ziqgn09M0ETp0qpqSmGKOdFcEeLwMfPHag3JLuCRtPmQWsDhNphtVAcn1w3BPFSwDdWGpX1/OYdOtbbSrlQ80szHdn0GR24/c1AbWemdatLbTJdGvJIJypDQwMV3exwOPatSz9Ei/R+txy2mr3evyHV4miWIDhGwwyGA7nGRS2YNZAUBWYDdjGayEvxMYB3nYu4KCfU+woG93c2enWs1xcPFDCp8zEgDPzq4GGgz22saS1zZSZhkdsFePXt86YHWmySeLNDMYikZ4YNlvvUD+VARxQJqgwRQHUAAe2O1AWOFRM8mDlgB37fagb6reXFt4ItLZJnZsuWfaI0Hdjwcn2FAz0nWX1i4u4xY3VpFbv4eZ1x4vGdy/KgkriN2aMRlQoOW3DOR/5qwYr1P1tp2pdS3WnanKkGh24kRl2eaYgcb/AFxnnAqiv9Jno0dRLJPbtdQtkNPIALaMnODsPPpSjbdK0DTbWQXui+Gsco3BU5hPP5gPT7VkU74t6PZHpq/1N5ZZbwrtRnmOwDPOFJwPsK1xR5ybudw788VaC5X2WoJRULSBpAe5PA/aiinAZnHck4A70THq/Qr23/4Y0u4lmCpLBGA7epxjH60Du+WGOBvFlFuWOFcYyCfbPrUojri6k06xX8PFNfBUJ3ltzM3scVBjfVvVXVNit5dapNDZGQGK3shjeAe7YHIwAOT3zVggNTiu+orrR4p7m+upJFR7h3TPhggDaoBwRjnPH5hV0af0xotnoD3l5dWdrY2YjGLhwPEHoef996CC6m0HpuPpk3Wny2s9sJPHJ3AeI2D39T37UGU9QTDULuGPSLPwIyoVIYk2lj6/X70G2/DPp0hVudRuBLcwxhRGkeEjB9M+p96DSLprVHiieaAE+YxHkke4H1qUOIBawL4uAuc8nvj71AwjRtQ1eO78QNp9odyLju/qT8uf70Gb6r8SpLzryy0vp+4NxYSSCEswI2u2Rn3OOD9qC4dVamen9NlaC7tUaIFvCmnHiy4HJXJxnOeDVwed+rOvLnqSyWO4jZSru/kc7ck+30GKosXw2+KmqaDJDY3jR3OmqNoRhtZAP6SP7Ggtmt63qbTJ1XLazJpslwBFblypEOAA7L2OWANS+xrnR2vW3UmjJeWp8wJSRf6WHeoJdSPMCRmgMq8DmgBpNsgUIxBGSccD70DczmS8MDWoe28MN4+f588rj980CktuJZYpFdlKZ4B4OfegQ1hpIrVjbsRMBhBj8x9qsHnX/hm36y1O/u9V1ddPmS6aD8OkQdyxOSe4OMmqLUvwQsYY4Xjv7m4YEEhwFyMY7fXB5pRbvhp0jqfSMV7b6jqZvLGQAwxAEBDk54PuD6VkVb49a5DBpiaNaeF/FIaQDumOwpzMGDEZQZ5+VboR8In1I+9QWDY6gFn7jjHpQhtJEFbAGBnijT0P8H7qPVOh47a42yNaymPBOcDupoykep+m73V7g/8Av2itQowvJIx6j5/OpRjfUWrax051RPY6LqFy8YACkebO4Z7HjNWCY0ToW2utJbqPreW5na4O4R78cehY9+fQVKLX05p1ro97awC4kX8VFmJLeEKdoyfOxJPbHbHYVAz0rqKPWNauri9t1ktJgILYgEiNFJ/Op9STmrBBdeaFCo0y3jt444DI3jLE204Y5DD+9UPPhv0NaRtPq99mSLOy22nOfdh75oNC0vT7m1uJGvGiii3AW8UDbQAeDu9zUohLlhouqap1VciF4I1FtbxSthtobBIPuTn7VBJ2vUth1TYk2ULi9iALwyKQYz6Z9CM0Ft060/DWEcDHe2Mucdye9BFW3SekWt3LPb2cUTsd2UGCG9x7VYMzufhzdX/WmoXj+BPpx3I7XZMmXYckc8EVRKaP8I+nXikLQuxOQSTnBzj6UEjonw90XSrq3S3s7dplJcl1EhGDx396lFx1TQ4NVjaC7UNCU2lAO/8AvNWDCLp9X+E/WgWImXSp2LRq7eSRT3B9iP8AFSjd9P1+21TRodVsMS2rLmTbyUGOePXFQSltcLcW0c1vh4mXcjDswoDLdRm4FvISsgXeTghDzjAPbPyzmgVFxCzuiOC0WN3sM+5oDqySJmNg3rx7UFb60tNUubGJdFdEvhIdryflUFSM49TVgyTQenJemOorf/U4H1Fpp1edAh/hOQTuQ9375JA4q0bnbPBcxxT20wkjKkqYzlT9ayGWu38um2MbLEJ7iRtoUds+/wAgBzQeW/iHqi6j1PdzeL44HkL9txHtWhVUOVyvHNB2F9zQT8hUAhAdp5FCG0mSAzE4HGDRppvwL1bwOpJbEsFiuYyVX3deR98Zoy2ZtRgmjkSRZocEp51K7se3vUow/rfpFE124mVpfD4mk2MWdCc4A+VWCH1281/UmFnpklzPYRFBEG8uGC4yQfcn9alGgaJo95rRsbi53WaxwrHOm7BjYcHnvz/moJaw07pXSI5IW1K0CQnDhpAWB9R796CudY62msTRW+gadI8KnDXMkLLv9MA8HGOKC3dAXF1dRfh75f41moi4G0AdwcfTj7UFhv7RjqMBV5AJFZHkR8FRjIx6CgpXVNjJ1JqNn07p26CztSJLlpIydyj2J+fGaC+afplrazqLa3SKNIggx3IHYUEsBk4wQc4oK11L1z070/M9rql6wuVA3QopLcjNBDwfFboqeSO2W7kQNxuaEhQfnQLt8TuireVoV1UeXnckTFT9DigHRuv+mbu9ZV1W3Nyc4IRlVl9O47/KgtU+s6baw+JcX1umRkAuM/p3oK/1t0rYdX6cqXKESqN8Ug/Mp9P1qwZ702mo9GdUTWJsmOn3EY8CAORGXJAwScjJ5q0bJDNLb6YklxbKsgA3wwndg9sDtWQN3aw3ZKTwLLEQOGORn6ehoG1vYAw3FikRt7JSuH3Hc/GSc5P0oHn4aO2uGuYyiose044wBQIm6F1dwfh5ARs8R8L2BHGfnQHv9PS4PjxrGLtFKxysm4qD3oCxboIIo7e1jhQHzAYUJ8wP8VYM56j1ktaal1BMrS2sAaK1OQDD6eUepY9yfQVR5zv7hrmaSaRtzyHJY0DcE4BPIPb5UBwOO4oJYzFvzEYHAH9XvQhNZN7AEgDOSDRo/wBA1SXRdVtNQgb/AJUgfBHcZ/8AGaGPVlhPbarZ2t5CEeORBKje2RUrI1zYxTBhMinIwcjvUEcugWkO4AMisMEA8N69u3yoERrOhWNxNYy6hapcxAeJHM+D8u9ASLStLlm/EWdpZyxy+Z3RQ3I5B44oJKTT4blFWSNBEOeBg5+goFYbOK1TKhIxnIbGMH50Cpcyo6AMrIcM2OD68Ggb6Lbbllu5Cd88hYBu6rztWglSNkfm4P70Gaat8Rba96w0vp3R2mhufxyi4kO3YyDOV9+f8VYMw+P0cP8Ax4JVuEKzW8bEr5tuMj0+lUZ7Y2X4288GK+towRlZXYqv9uKCQi6YmbT2u11GzaJWKnYxbBB49KCFnhubdiwL+U8OhP60ElpXUFxY6nDdXQF0qYbZKxwT9vWg3npb42aHcmC11C3uLSQjEkpIdQfr3xUondP6x6e6tv7e101hczRzrNtaFiFC/wAxPYHtUF+lj8bYCTgMG59cUC4OBQQOo2eoXepFTeL/AKYQN1sEwWx6Fu+DQLX2kw3Ok3Vjas9qJ48Exd1PHb9KCE6R0G86Ut7mK71KK4gklM7TyKRIBjtjtjj96AOreudJsrMJbXksk8jBCbVdzRjONxBHP/3QQ9x1jcWGkERWWqXdpMPCt7x4wfFOOWPbA+fAqwZr8TJ9Qbp2ymvEjsrSTEVvawyHz45Lv6E4wPqaoyl8g91OKDlYEc8mgKW5PH7UE80f8PPHl7gDFAZkUjawUIQG8w5ouknAUbl9Dg59KK1X4Z9XXFvo8mlRXax3KHfBG8Rk3qe6jHOc54+dMZO7jr/qK8vWtba4tYu38TwvDOMc8N60wPLbrW10PS7pnvrnUtbAKobgBUUk9jg8f/lMC2rydMdRSaRqWoLEbx4UefwxkL2BVvvn9Klgv3Tp0lPxFno6wJ4IVmEOMEHsf2xUD2e4ks7n+NGDaCMu8q8lCMcEfPNA6tW/EwrMybEYZUHnI9Cf/FAzu7G4LXTWs38SRNqhs4Bz3z9KCO6x07UNT6altNMvEs7xkC7nPlI9R2/egwbrDT+r+kupLCeK9nu3KBYGRy+QvdWFWCU6avtA6h1iKDqLRhpmpvkxz2p8JGb3z7k557VRX77TdHteuPBut401CAouyXGcdvmASaC069030brYaay/CwPFwWspRErfUN7UGZX2hWSiY6ZrMc0CvhUlBUk/UcGgiLq2mtG8F54yDwfDfIoGkrRsSZXwOB2zmgsvw06XHVfUcFvI22xQ753Ze4H8v3OBUo9a6XodjpltHbabDHZIhVsQqBuA9DxznFQTQUe5oDYGMnn7UEbpV3JqDyz+BJFbBtsXiDBf/qx6CgDXL42cSRwGM3UzBQrHGFzy32oG2i2kKTSI80lzMow0rqQoyew+3tQO59KtJJRI9rEzgg7igz3z/egZ6paJdGGwW4eBXy7pGeXUdwT6A5qwebPjJrcOr9TvbWZQ2Onr+Gi2nIJHcj7+vyqigOuRk+vtxQAqEk4BU0ABj7j96CzzKxYD0GeM0CQG3OMAjkfOgbSZwzE4PJyfWi6caTdzaffW95akrPFIrLg/tRHpGzs9C6t0W31FrO3Y43MrcbH9c/eloZ6v0JpWoKlrHHBbScSFEHYc5Pz71NDXUoJrK1g0dvw9qsspW3nXaN6KMrHnH5ieSfan0U3Rr1uidaRbiwk8BUSS6naQkjc3ZcHaRnn70wbja6lZX+nw3NvMksM+FXnPJ9DUCeoXj2hSG2t2km7op4U/f/FAvHaNePb3N0jRzRA7VD8Akc9u/FAvcxnawZQ3HYtjJoKfDFAdeub6Vo1dSULIBtTbgYOfU8jNWUVvrm5ih0m1urixhlsI5HJliOwR5/LkkHHJPamjHdQ0HWdemlutN0+YWBYtC0rHDhjwVz3zWgx1n4e9U6QE8XT5Zd//APR5se9XBXbjS9S0zAvbO5tyWKAOhG4/KpQ3ZHXO5JFK98qRUGhfCbph77Uvx91pv463wVjR0LR7s483796WjW7rTrXpHWrSW2YK7lmXTbaIFpCRjjHOOSeeBipaNLtXuIre3R43lnkGXYADZnnmoH6Dkbzn6UDGWe9a/hKG3jsW8riQMJS3svp86B6zgMQmDtGT8qDNb6XUpOoPx72tzOkjFYowOduDwDjj70Gg6Wsq2KNeAJKRuKk52fIn5DvVkENrvW+iaSAsl0txI2Asdud5Yk4A4pgzv4l9ST6JZSXbyyprWpw+FFa5G21gz5icfzH3pgwCSQlh688+tUEwjjngZ7UHAHuWAHpn+1AXj5frQWXOGBZcKSe3c/rQIyAtnI27eBj/ADQIMAuH8vHBB9DQwVpPLjOckEZ/ahi9/Czqj/S9VhtLm6aG1uZFUsT5VOfX5Gpg9GiNJArxsrxsv1BHypYGF7pljeG3kvLZSlqzNGGxhSRjP6GoG1yLUWiWc2nSPA4KJGItyYHYHHarop3wu0jWYNUvzriNBp8ErraRMANxJ/N7nA7ZqDUHgSQLvAbacjI7H3oOuIFuYzGS68jJRyp4+lA0m0yDwGjiTw3bzBwTuDe+TQVbV+mLmW1NtbSok9weZiC2zPLEZ+/FBM6Xo40/TYdL8Jr21G4vJcuCck55HbFWUKQ/h4tR/DTz2o8TK21qmMgKOf8AfpmrokljG1i5BHI57D5VNorut9Lab1LA638W6H8sboNrqQckq3pntV0RWsfD6K7SGC3vTFahQJY2iVmkI9d+Mimie0Hp2DQ7AQacio3JZgqjcT3zxk1KHGldPWtnqMupS5uNTmGGnk5KjGNqf0r8qgmkhVGcquGblm96BDUZZYLGVrdN8+MIvux7UGKTdXdbaRrFvbaxbWN4d58BmwCjHPORycLx2q4LNe9S9TdN6I13qkWmzSXdwBCGlO4hiMKAB2A9ag0WySQwpLLtMjDcQBhVz6CgoHxF17XbnUYunulgsUsu4TTvjIUAEhR+x4qwZwtkOi7651PXJobm4tohHbQhdgecjnaPZeOfeqMy1vWLvWNQlvb+ZpJpWyT2A9gB6Cgjy5AO4A5oAGRgBR39aA7Z8MkFtxPY0AbV9UGfpQWhj5TkBQGxuBoEGG1iQCyHvj1oELgSkK6oRnIBIxzRdJ28Q3+fHiAds96LoH3AF1wCfyijNbF8JviI1rbQ6Pq/iSopxFOx5Uf0n3qUbWQk8II2SRyDPuCDUHMpSIiJQSBwDwKAgTxApnEbyIQ+APyn0+9A5B3AgfmoEWgcb3VlMpGFYjt+negSs7zxH/C3RWO9UElM8SAHG5fl/agNdXcEbJAZ1WadvDQDJO7Gf7c0ED1dqWv2enzw6Rb24nZfJd3EwREHqxyMZHzOKBbT7H8PZWTK5uZ9o3Xm1SzEry5PsT7UFF+JnUezSZ9LttRs2km2m5KSFWXDZI491AyBzVwK6J8T7CRtPjee0tbaGAtdNISdoXgLEo5JJxyfSmC6aF1fo2vELZXDJOxwkMybHYe4HtUFiJWJd8rKqjuTQcZV8SNI0dy43BlGVA+ZoBniE0RU7tp77Tg5zQUv4hNrU2tdNWOhylPEnaS5UHGYlAzn5cn74oHGt6l0z07k6nJC123HhKPFlbPptGTj9q0Kx0XMvU+ty6vqQtpWlZo4LOdGDWsak8Aflycgk+v2qC8a1q8OnaXLPOz2kCIWkZ+CqjgYx6n0xTBkmp9Sabp0KdRyI5vJkaGw08MVKIDw8jA557896QY1q2o3eqXr3N7O8skjnlnzgn5e1UMCGV/MOM0BJFOVwfX0oFtgZTjkg8UBtpOeO1B3hg85FBZXVMM+VJAA2+h96BO4IMJ/p7qvuKBKacmOKB5CYYx5UzgDPfHzoGwD5OApJHAHrQEAk8NWdNpx+XdkA0AIGhkGWOQcgg8UGw/DP4kmwhi07WCTZqAiSbstGc4+pFKNvs5o7q2Sa3kWaJxkOp4NZDOHUh/qL2k8LW78eG7kbZv+0+/yoEZp7fUpX/BXpgvYZTCSRtO7vtwe/vQdY6jeyatPp91FEPw8aSNMoYbi2cADt6Z70DS60KW7luJdV1JniJzBtURG2b0KN7+/vQKSWUWnLLqN3cSLP4ex5Y8jxiPykr23+nzzigpXUPVOu6Vqmmf8UWttb9OXDqkjRnfI3H849uRkDOKC0axLFr+nLB0rrUMM0bqCIGGGX1AH09qsGc9UfBiTV9Vhu9Pu5oPGLNeG6bczN7jHvVEr058Gre3sLeDVrmOdo3LmSFNjEH+XdntQXO51XQOl5YrCKGWa8SMYS3tzMyLjjJHb9alDqz1S5ktJ7nVdLmSVDiOONfEMiE4Xy+h9xUDm11CaTxEOn3VmpHFxKFCr9s5GPmKAus6jb9M6RJf3c88yxpjcxL7uM5OO3HrQVTSupoOuYdZMTSpptriNFtXKXDA/Pjhs9h2xQOJ7Xpnpa2S91WK2swqjbGw3ysfcnuxrQsGmapYvpwvra1FtDL52Mi+Gx49sZoMb+LXV0t+jWl3OYLGTO2zjx4h2nyszHsG4/Sgxt5ZJmEsjl3PB3GgSlyXBxkDnNADseB2PsaA8SoXQyFgmQCV70B5R/EIjYmPJxnvigEKcYDfrQF2/X9aCwqC7l2zwfT/FAJJ5747E5oGTqZArKOfccftQHZWwmOD23Z4NAEkTEBmwR7g5AoG7KSSE5HyFAMTyQsMHa/cEcEc5oL58P+v7rppdryPNAXx+GfsQe7Z9D2/Wg3zSdX0fqzT08F433eYwscOpHt9PcVkQPW632mX9vfWdrbXiRgrIdu2eHIwGD57+nIoKdc/ELVdC0u5afp27SUtta5vJMMzk+UDjzYHtQWDpj4gxXmif/wAitXZkGZzFGW8MehZO+PmM0Fibr/poWQmF6xXA2xmFg59sKRk0C2nQP1KFvdb0vwIUJNtDKcsVP8zD0Jx2oJDTNA0vR5p7qzs44pJOXkUc/SgNfa/pNvbF5L2JgTsCo2WJzjGKA1jcNcxOF/m/I0zbt4+gxgenNA5s7CCxWWYQxpNLgyMiY3nt2oHajcuexAoEL1C1uyFkVHO1ixHb17/KgwT4rdXWep6oul2OpywaTYqVLxDyySDjaM9x6Z+tWDPdB1TW7Wa9sumpGlursqMQRlpXwd3BA4571RcdN0i41G7h/wBSmNxqdkwn1O6u5/4cAXlYgcnngE/pQNvih8S211obHRyYbWInfJG/Ex9MD2+tBmNzcTXTtJcSSSSHH5jngDAH0oEdxbg5A9wKAzPwO+fegSLfLJoFoR5fUfegXOcHGAT8qAM+XaBzQCCwGDuyPlQWJpV37Q5TIweM7u/f9qA9vNYpFML2KaR8YiaJgAh55PvQRvnYoqA+MThcDnPai4PKWQlH3K6tggjnPaiEmz4ZznBPfFAVWG0AZDH1z2HzoE7lhv8AJIHI/mGRQI8AEeuOMGgndN6pu7V4RJLKY4WDLhypXj0oNL6d+MMS4ttetDdQgDNwAPEwPRh2NZGkabrvTXVZiexvba5aI+ILWZQG3Y4IDdvtQScvTdjK8chtFjkQ+VlYgqPXGKA17daV07apJrV9CsZbELTgbu3YY78UEHf9evJ4K9P6JqGoiR1XxjCUjAJ5OT3NBM9YdSWPTenwy3t7bWbSuBunUthfUhRyT+1BA2vXnS/jGdeo9LnIHljeLwSCe5zgmgejrOz1S3kGhazoaXYGAJ5Sw3e38uaCsJfX02rPD1XfXtvcCXdBJGjLbOO+EK88Y7nIoLB1H1Bb6WkN1ddSQ29io/5MZEjzt7DGTjj2FXNGUfEH4wRaxCtnp2kwGGM7llvBvIOO4XOAe/fNMwZbqusalfLBHfzSvFH+SIgKo+igYqiwWfWV30rpp03p6exJnUPJexQnxuR+Ulu2PkKCrT6jcSiTxZnbxCWcFidxPJJ96BBDlQ35fbFAbahBHJIGO+KAIwg5YnB455oDkKcbW7UAOowSMjOORQcCVXPp+9AqDkHcDmgMNpHPcUBTuzQWCJXcFvKR2Y0CMiqjnz4UcH/6oG8gKluwxyAfSjQ6ylEJBJfv37/OiYQMjbjkZXOSP/FEELAEkNn1waBCXdjORnPoc80CZeTb5wQe2BQAm4y7jlhjvQcWO3cW4GB7ZpgGC5a3uUeNyGQ5GCR+45pgt+l/EzqLTgxj1O5Zc4CSOXCj70wOE+Jd/Pq0V7qVvb3bISAWUBhnuc+/2pgvkHx0soLaNIdKkEiqR5yDg47cYpgresfELSNc1n8VrFtAw2ZBiiywwcgeb14x2xTBYNA13ozUo/GOqWVizDc1nf6crIh/7wOf1rOURvVupdE6ncpFeakiSWsZdbjSLfw1Zs+VVyMHA75xWsFDHU0idTJdf65rT28YKpPvHjKp9Bk49qYK/rGpXF/qU9zPdyzyyMSJJAAx9ifnVlwNZ7vxYEh8GAEHO8DDH5H5U0IPK8jHxSzFQAMnOKgJkFwPT6UBlAII5z3zQCjnA5OKBXeuAT9KABMA208DtxQHRhzgUC3KjJx9z2oAP6/L3NAHC8Hg/XNAcNtGe4oEy5yeaCdLk7yx2qQCAO1AmXZSSexHbPNAhJuLJkgjvzRonuAJy2cd8UCbyOi453Dj7GiYTZyVPPl74oYLJIyq68EH3Gf3oYTDEjLbiP1FEDHOUOdgOfXIBFAm77j5Mnng/WgLI5UE8Eg9iO9AnuJbuQx5wOBQFRxuIbOc54PrQK28ws76F722EyI4d4HJUOPb35yKBm8oeQsi4BPbPb71RyYIHmPGRg00GRsbsHIPY0Bg52AEEseBUCQJyOPXtQDtcdvvjtQCQ/GBwKAuXU4PrQBvZE5IGeO1AffjBJ57UBvEO045HagFWAAzktQKIzBeMg0C5kz5mOG/WgMrDJJ7jmgEnIyOccYoA3cEMRj05oC7/wDeBQTduzEoNxwcZGaAJOWfPNAlISVOT60aIQfkj+amgJ3bnnigKeFGPQUCf/x0Smw4V8exogX/AOY3+/SgKxKxeU459KAgJOckntQJkkcgkGgAAFFz/XQEmJaY7jnk96BM9yPQelAf/wCX7UBv/jagGP8AKB6ZoDf00HMfO/0oAH5TQA/5moECSMDPFAvGASMjPP8AigVX+b60BW7/AHoHEJJD55oDd4snv70CsSjCcDmgVAAbgYoGYJ3nk9qBUAYHAoP/2Q==</binary></FictionBook>
tests/writer.html view
@@ -324,7 +324,6 @@ <div> foo </div>- <p>And nested without indentation:</p> <div> <div>@@ -336,7 +335,6 @@ bar </div> </div>- <p>Interpreted markdown in a table:</p> <table> <tr>@@ -353,10 +351,8 @@  <p>Here’s a simple block:</p> <div>-     foo </div>- <p>This should be a code block, though:</p> <pre><code>&lt;div&gt;     foo@@ -365,14 +361,12 @@ <pre><code>&lt;div&gt;foo&lt;/div&gt;</code></pre> <p>Now, nested:</p> <div>-    <div>-        <div>-            +<div>+<div> foo </div>-    </div> </div>-+</div> <p>This should just be an HTML comment:</p> <!-- Comment --> 
tests/writer.latex view
@@ -9,9 +9,11 @@ \ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex   \usepackage[utf8]{inputenc} \else % if luatex or xelatex-  \usepackage{fontspec}   \ifxetex+    \usepackage{mathspec}     \usepackage{xltxtra,xunicode}+  \else+    \usepackage{fontspec}   \fi   \defaultfontfeatures{Mapping=tex-text,Scale=MatchLowercase}   \newcommand{\euro}{€}@@ -20,15 +22,24 @@ \IfFileExists{microtype.sty}{\usepackage{microtype}}{} \usepackage{fancyvrb} \usepackage{graphicx}-% We will generate all images so they have a width \maxwidth. This means-% that they will get their normal width if they fit onto the page, but+% Redefine \includegraphics so that, unless explicit options are+% given, the image width will not exceed the width of the page.+% Images get their normal width if they fit onto the page, but % are scaled down if they would overflow the margins. \makeatletter-\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth-\else\Gin@nat@width\fi}+\def\ScaleIfNeeded{%+  \ifdim\Gin@nat@width>\linewidth+    \linewidth+  \else+    \Gin@nat@width+  \fi+} \makeatother \let\Oldincludegraphics\includegraphics-\renewcommand{\includegraphics}[1]{\Oldincludegraphics[width=\maxwidth]{#1}}+{%+ \catcode`\@=11\relax%+ \gdef\includegraphics{\@ifnextchar[{\Oldincludegraphics}{\Oldincludegraphics[width=\ScaleIfNeeded]}}%+}% \ifxetex   \usepackage[setpagesize=false, % page size defined by xetex               unicode=false, % unicode breaks when used with xetex@@ -41,6 +52,7 @@             pdfauthor={John MacFarlane; Anonymous},             pdftitle={Pandoc Test Suite},             colorlinks=true,+            citecolor=blue,             urlcolor=blue,             linkcolor=magenta,             pdfborder={0 0 0}}@@ -66,31 +78,32 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Headers}+\section{Headers}\label{headers} -\subsection{Level 2 with an \href{/url}{embedded link}}+\subsection{Level 2 with an \href{/url}{embedded+link}}\label{level-2-with-an-embedded-link} -\subsubsection{Level 3 with \emph{emphasis}}+\subsubsection{Level 3 with \emph{emphasis}}\label{level-3-with-emphasis} -\paragraph{Level 4}+\paragraph{Level 4}\label{level-4} -\subparagraph{Level 5}+\subparagraph{Level 5}\label{level-5} -\section{Level 1}+\section{Level 1}\label{level-1} -\subsection{Level 2 with \emph{emphasis}}+\subsection{Level 2 with \emph{emphasis}}\label{level-2-with-emphasis} -\subsubsection{Level 3}+\subsubsection{Level 3}\label{level-3}  with no blank line -\subsection{Level 2}+\subsection{Level 2}\label{level-2}  with no blank line  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Paragraphs}+\section{Paragraphs}\label{paragraphs}  Here's a regular paragraph. @@ -104,7 +117,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Block Quotes}+\section{Block Quotes}\label{block-quotes}  E-mail style: @@ -149,7 +162,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Code Blocks}+\section{Code Blocks}\label{code-blocks}  Code: @@ -173,9 +186,9 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Lists}+\section{Lists}\label{lists} -\subsection{Unordered}+\subsection{Unordered}\label{unordered}  Asterisks tight: @@ -246,7 +259,7 @@   Minus 3 \end{itemize} -\subsection{Ordered}+\subsection{Ordered}\label{ordered}  Tight: @@ -312,7 +325,7 @@   Item 3. \end{enumerate} -\subsection{Nested}+\subsection{Nested}\label{nested}  \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt@@ -377,7 +390,7 @@   Third \end{enumerate} -\subsection{Tabs and spaces}+\subsection{Tabs and spaces}\label{tabs-and-spaces}  \begin{itemize} \item@@ -393,7 +406,7 @@   \end{itemize} \end{itemize} -\subsection{Fancy list markers}+\subsection{Fancy list markers}\label{fancy-list-markers}  \begin{enumerate} \def\labelenumi{(\arabic{enumi})}@@ -481,7 +494,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Definition Lists}+\section{Definition Lists}\label{definition-lists}  Tight using spaces: @@ -584,7 +597,7 @@ \end{enumerate} \end{description} -\section{HTML Blocks}+\section{HTML Blocks}\label{html-blocks}  Simple block on one line: @@ -646,7 +659,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Inline Markup}+\section{Inline Markup}\label{inline-markup}  This is \emph{emphasized}, and so \emph{is this}. @@ -678,7 +691,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Smart quotes, ellipses, dashes}+\section{Smart quotes, ellipses, dashes}\label{smart-quotes-ellipses-dashes}  ``Hello,'' said the spider. ``\,`Shelob' is my name.'' @@ -699,7 +712,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{LaTeX}+\section{LaTeX}\label{latex}  \begin{itemize} \itemsep1pt\parskip0pt\parsep0pt@@ -747,7 +760,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Special Characters}+\section{Special Characters}\label{special-characters}  Here is some unicode: @@ -809,9 +822,9 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Links}+\section{Links}\label{links} -\subsection{Explicit}+\subsection{Explicit}\label{explicit}  Just a \href{/url/}{URL}. @@ -831,7 +844,7 @@  \href{}{Empty}. -\subsection{Reference}+\subsection{Reference}\label{reference}  Foo \href{/url/}{bar}. @@ -859,7 +872,7 @@  Foo \href{/url/}{biz}. -\subsection{With ampersands}+\subsection{With ampersands}\label{with-ampersands}  Here's a \href{http://example.com/?foo=1\&bar=2}{link with an ampersand in the URL}.@@ -871,7 +884,7 @@  Here's an \href{/script?foo=1\&bar=2}{inline link in pointy braces}. -\subsection{Autolinks}+\subsection{Autolinks}\label{autolinks}  With an ampersand: \url{http://example.com/?foo=1\&bar=2} @@ -900,7 +913,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Images}+\section{Images}\label{images}  From ``Voyage dans la Lune'' by Georges Melies (1902): @@ -914,7 +927,7 @@  \begin{center}\rule{3in}{0.4pt}\end{center} -\section{Footnotes}+\section{Footnotes}\label{footnotes}  Here is a footnote reference,\footnote{Here is the footnote. It can go   anywhere after the footnote reference. It need not be placed at the end of
tests/writer.man view
@@ -1,4 +1,4 @@-.TH Pandoc "" "July 17, 2006" "Test Suite"+.TH "Pandoc Test Suite" "" "July 17, 2006" "" "" .PP This is a set of tests for pandoc. Most of them are adapted from John Gruber's markdown test suite.
tests/writer.markdown view
@@ -1,6 +1,10 @@-% Pandoc Test Suite-% John MacFarlane; Anonymous-% July 17, 2006+---+author:+- John MacFarlane+- Anonymous+date: 'July 17, 2006'+title: Pandoc Test Suite+...  This is a set of tests for pandoc. Most of them are adapted from John Gruber’s markdown test suite.@@ -352,20 +356,31 @@ Simple block on one line:  <div>+ foo+ </div>  And nested without indentation:  <div>+ <div>+ <div>+ foo+ </div>+ </div>+ <div>+ bar+ </div>+ </div>  Interpreted markdown in a table:@@ -386,8 +401,9 @@ Here’s a simple block:  <div>-    + foo+ </div>  This should be a code block, though:@@ -403,12 +419,17 @@ Now, nested:  <div>-    <div>-        <div>-            ++<div>++<div>+ foo+ </div>-    </div>++</div>+ </div>  This should just be an HTML comment:
tests/writer.mediawiki view
@@ -311,22 +311,30 @@ Simple block on one line:  <div>+ foo-</div> +</div> And nested without indentation:  <div>+ <div>+ <div>+ foo+ </div>+ </div> <div>+ bar-</div>+ </div> +</div> Interpreted markdown in a table:  <table>@@ -345,10 +353,10 @@ Here’s a simple block:  <div>-    + foo-</div> +</div> This should be a code block, though:  <pre>&lt;div&gt;@@ -360,14 +368,18 @@ Now, nested:  <div>-    <div>-        <div>-            ++<div>++<div>+ foo+ </div>-    </div>+ </div> +</div> This should just be an HTML comment:  <!-- Comment -->
tests/writer.native view
@@ -1,4 +1,4 @@-Pandoc (Meta {docTitle = [Str "Pandoc",Space,Str "Test",Space,Str "Suite"], docAuthors = [[Str "John",Space,Str "MacFarlane"],[Str "Anonymous"]], docDate = [Str "July",Space,Str "17,",Space,Str "2006"]})+Pandoc (Meta {unMeta = fromList [("author",MetaList [MetaInlines [Str "John",Space,Str "MacFarlane"],MetaInlines [Str "Anonymous"]]),("date",MetaInlines [Str "July",Space,Str "17,",Space,Str "2006"]),("title",MetaInlines [Str "Pandoc",Space,Str "Test",Space,Str "Suite"])]}) [Para [Str "This",Space,Str "is",Space,Str "a",Space,Str "set",Space,Str "of",Space,Str "tests",Space,Str "for",Space,Str "pandoc.",Space,Str "Most",Space,Str "of",Space,Str "them",Space,Str "are",Space,Str "adapted",Space,Str "from",Space,Str "John",Space,Str "Gruber\8217s",Space,Str "markdown",Space,Str "test",Space,Str "suite."] ,HorizontalRule ,Header 1 ("headers",[],[]) [Str "Headers"]@@ -228,45 +228,35 @@      ,[Plain [Str "sublist"]]]]])] ,Header 1 ("html-blocks",[],[]) [Str "HTML",Space,Str "Blocks"] ,Para [Str "Simple",Space,Str "block",Space,Str "on",Space,Str "one",Space,Str "line:"]-,RawBlock "html" "<div>"-,Plain [Str "foo"]-,RawBlock "html" "</div>\n"+,Div ("",[],[]) [Plain [Str "foo"]] ,Para [Str "And",Space,Str "nested",Space,Str "without",Space,Str "indentation:"]-,RawBlock "html" "<div>\n<div>\n<div>"-,Plain [Str "foo"]-,RawBlock "html" "</div>\n</div>\n<div>"-,Plain [Str "bar"]-,RawBlock "html" "</div>\n</div>\n"+,Div ("",[],[]) [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "foo"]]],Div ("",[],[]) [Plain [Str "bar"]]] ,Para [Str "Interpreted",Space,Str "markdown",Space,Str "in",Space,Str "a",Space,Str "table:"]-,RawBlock "html" "<table>\n<tr>\n<td>"+,RawBlock (Format "html") "<table>\n<tr>\n<td>" ,Plain [Str "This",Space,Str "is",Space,Emph [Str "emphasized"]]-,RawBlock "html" "</td>\n<td>"+,RawBlock (Format "html") "</td>\n<td>" ,Plain [Str "And",Space,Str "this",Space,Str "is",Space,Strong [Str "strong"]]-,RawBlock "html" "</td>\n</tr>\n</table>\n\n<script type=\"text/javascript\">document.write('This *should not* be interpreted as markdown');</script>\n"+,RawBlock (Format "html") "</td>\n</tr>\n</table>\n\n<script type=\"text/javascript\">document.write('This *should not* be interpreted as markdown');</script>\n" ,Para [Str "Here\8217s",Space,Str "a",Space,Str "simple",Space,Str "block:"]-,RawBlock "html" "<div>\n    "-,Plain [Str "foo"]-,RawBlock "html" "</div>\n"+,Div ("",[],[]) [Plain [Str "foo"]] ,Para [Str "This",Space,Str "should",Space,Str "be",Space,Str "a",Space,Str "code",Space,Str "block,",Space,Str "though:"] ,CodeBlock ("",[],[]) "<div>\n    foo\n</div>" ,Para [Str "As",Space,Str "should",Space,Str "this:"] ,CodeBlock ("",[],[]) "<div>foo</div>" ,Para [Str "Now,",Space,Str "nested:"]-,RawBlock "html" "<div>\n    <div>\n        <div>\n            "-,Plain [Str "foo"]-,RawBlock "html" "</div>\n    </div>\n</div>\n"+,Div ("",[],[]) [Div ("",[],[]) [Div ("",[],[]) [Plain [Str "foo"]]]] ,Para [Str "This",Space,Str "should",Space,Str "just",Space,Str "be",Space,Str "an",Space,Str "HTML",Space,Str "comment:"]-,RawBlock "html" "<!-- Comment -->\n"+,RawBlock (Format "html") "<!-- Comment -->\n" ,Para [Str "Multiline:"]-,RawBlock "html" "<!--\nBlah\nBlah\n-->\n\n<!--\n    This is another comment.\n-->\n"+,RawBlock (Format "html") "<!--\nBlah\nBlah\n-->\n\n<!--\n    This is another comment.\n-->\n" ,Para [Str "Code",Space,Str "block:"] ,CodeBlock ("",[],[]) "<!-- Comment -->" ,Para [Str "Just",Space,Str "plain",Space,Str "comment,",Space,Str "with",Space,Str "trailing",Space,Str "spaces",Space,Str "on",Space,Str "the",Space,Str "line:"]-,RawBlock "html" "<!-- foo -->   \n"+,RawBlock (Format "html") "<!-- foo -->   \n" ,Para [Str "Code:"] ,CodeBlock ("",[],[]) "<hr />" ,Para [Str "Hr\8217s:"]-,RawBlock "html" "<hr>\n\n<hr />\n\n<hr />\n\n<hr>   \n\n<hr />  \n\n<hr /> \n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\">\n"+,RawBlock (Format "html") "<hr>\n\n<hr />\n\n<hr />\n\n<hr>   \n\n<hr />  \n\n<hr /> \n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\" />\n\n<hr class=\"foo\" id=\"bar\">\n" ,HorizontalRule ,Header 1 ("inline-markup",[],[]) [Str "Inline",Space,Str "Markup"] ,Para [Str "This",Space,Str "is",Space,Emph [Str "emphasized"],Str ",",Space,Str "and",Space,Str "so",Space,Emph [Str "is",Space,Str "this"],Str "."]@@ -294,7 +284,7 @@ ,HorizontalRule ,Header 1 ("latex",[],[]) [Str "LaTeX"] ,BulletList- [[Plain [RawInline "tex" "\\cite[22-23]{smith.1899}"]]+ [[Plain [RawInline (Format "tex") "\\cite[22-23]{smith.1899}"]]  ,[Plain [Math InlineMath "2+2=4"]]  ,[Plain [Math InlineMath "x \\in y"]]  ,[Plain [Math InlineMath "\\alpha \\wedge \\omega"]]@@ -309,7 +299,7 @@  ,[Plain [Str "Shoes",Space,Str "($20)",Space,Str "and",Space,Str "socks",Space,Str "($5)."]]  ,[Plain [Str "Escaped",Space,Code ("",[],[]) "$",Str ":",Space,Str "$73",Space,Emph [Str "this",Space,Str "should",Space,Str "be",Space,Str "emphasized"],Space,Str "23$."]]] ,Para [Str "Here\8217s",Space,Str "a",Space,Str "LaTeX",Space,Str "table:"]-,RawBlock "latex" "\\begin{tabular}{|l|l|}\\hline\nAnimal & Number \\\\ \\hline\nDog    & 2      \\\\\nCat    & 1      \\\\ \\hline\n\\end{tabular}"+,RawBlock (Format "latex") "\\begin{tabular}{|l|l|}\\hline\nAnimal & Number \\\\ \\hline\nDog    & 2      \\\\\nCat    & 1      \\\\ \\hline\n\\end{tabular}" ,HorizontalRule ,Header 1 ("special-characters",[],[]) [Str "Special",Space,Str "Characters"] ,Para [Str "Here",Space,Str "is",Space,Str "some",Space,Str "unicode:"]
tests/writer.opendocument view
@@ -1,5 +1,5 @@ <?xml version="1.0" encoding="utf-8" ?>-<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.0">+<office:document-content xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:meta:1.0" xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" xmlns:math="http://www.w3.org/1998/Math/MathML" xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" xmlns:ooo="http://openoffice.org/2004/office" xmlns:ooow="http://openoffice.org/2004/writer" xmlns:oooc="http://openoffice.org/2004/calc" xmlns:dom="http://www.w3.org/2001/xml-events" xmlns:xforms="http://www.w3.org/2002/xforms" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" office:version="1.2">   <office:automatic-styles>     <text:list-style style:name="L1">       <text:list-level-style-number text:level="1" text:style-name="Numbering_20_Symbols" style:num-format="1" text:start-value="1" style:num-suffix=".">@@ -741,25 +741,25 @@     <style:style style:name="P18" style:family="paragraph" style:parent-style-name="Preformatted_20_Text">     </style:style>     <style:style style:name="P19" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L2">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P20" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L3">     </style:style>     <style:style style:name="P21" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L4">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P22" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L5">     </style:style>     <style:style style:name="P23" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L6">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P24" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L7">     </style:style>     <style:style style:name="P25" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L8">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P26" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L9">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P27" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L10">     </style:style>@@ -768,37 +768,37 @@     <style:style style:name="P29" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L12">     </style:style>     <style:style style:name="P30" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L13">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P31" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L14">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P32" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L15">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P33" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L16">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P34" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L17">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P35" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L18">     </style:style>     <style:style style:name="P36" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L19">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P37" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L20">     </style:style>     <style:style style:name="P38" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L21">     </style:style>     <style:style style:name="P39" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L22">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P40" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L23">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P41" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L24">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P42" style:family="paragraph" style:parent-style-name="Preformatted_20_Text">       <style:paragraph-properties fo:margin-left="0.5in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" />@@ -822,18 +822,18 @@     <style:style style:name="P50" style:family="paragraph" style:parent-style-name="Preformatted_20_Text">     </style:style>     <style:style style:name="P51" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L26">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P52" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L27">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P53" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L28">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P54" style:family="paragraph" style:parent-style-name="Preformatted_20_Text">     </style:style>     <style:style style:name="P55" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L29">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>     <style:style style:name="P56" style:family="paragraph" style:parent-style-name="Quotations">       <style:paragraph-properties fo:margin-left="0.5in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" />@@ -846,7 +846,7 @@       <style:paragraph-properties fo:margin-left="0.5in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" />     </style:style>     <style:style style:name="P60" style:family="paragraph" style:parent-style-name="Text_20_body" style:list-style-name="L30">-      <style:paragraph-properties fo:margin-left="0.0in" fo:margin-right="0in" fo:text-indent="0in" style:auto-text-indent="false" fo:margin-top="0in" fo:margin-bottom="0in" />+      <style:paragraph-properties fo:margin-top="0in" fo:margin-bottom="0in" />     </style:style>   </office:automatic-styles> <office:body>
+ tests/writer.opml view
@@ -0,0 +1,72 @@+<?xml version="1.0" encoding="UTF-8"?>+<opml version="2.0">+  <head>+    <title>Pandoc Test Suite</title>+    <dateModified>Mon, 17 Jul 2006 00:00:00 UTC</dateModified>+    <ownerName>John MacFarlane; Anonymous</ownerName>+  </head>+  <body>+<outline text="Headers">+  <outline text="Level 2 with an &lt;a href=&quot;/url&quot;&gt;embedded link&lt;/a&gt;">+    <outline text="Level 3 with &lt;em&gt;emphasis&lt;/em&gt;">+      <outline text="Level 4">+        <outline text="Level 5">+        </outline>+      </outline>+    </outline>+  </outline>+</outline>+<outline text="Level 1">+  <outline text="Level 2 with &lt;em&gt;emphasis&lt;/em&gt;">+    <outline text="Level 3" _note="with no blank line">+    </outline>+  </outline>+  <outline text="Level 2" _note="with no blank line&#10;&#10;* * * * *">+  </outline>+</outline>+<outline text="Paragraphs" _note="Here’s a regular paragraph.&#10;&#10;In Markdown 1.0.0 and earlier. Version 8. This line turns into a list&#10;item. Because a hard-wrapped line in the middle of a paragraph looked&#10;like a list item.&#10;&#10;Here’s one with a bullet. \* criminey.&#10;&#10;There should be a hard line break\&#10;here.&#10;&#10;* * * * *">+</outline>+<outline text="Block Quotes" _note="E-mail style:&#10;&#10;&gt; This is a block quote. It is pretty short.&#10;&#10;&gt; Code in a block quote:&#10;&gt;&#10;&gt;     sub status {&#10;&gt;         print &quot;working&quot;;&#10;&gt;     }&#10;&gt;&#10;&gt; A list:&#10;&gt;&#10;&gt; 1.  item one&#10;&gt; 2.  item two&#10;&gt;&#10;&gt; Nested block quotes:&#10;&gt;&#10;&gt; &gt; nested&#10;&gt;&#10;&gt; &gt; nested&#10;&#10;This should not be a block quote: 2 \&gt; 1.&#10;&#10;And a following paragraph.&#10;&#10;* * * * *">+</outline>+<outline text="Code Blocks" _note="Code:&#10;&#10;    ---- (should be four hyphens)&#10;&#10;    sub status {&#10;        print &quot;working&quot;;&#10;    }&#10;&#10;    this code block is indented by one tab&#10;&#10;And:&#10;&#10;        this code block is indented by two tabs&#10;&#10;    These should not be escaped:  \$ \\ \&gt; \[ \{&#10;&#10;* * * * *">+</outline>+<outline text="Lists">+  <outline text="Unordered" _note="Asterisks tight:&#10;&#10;-   asterisk 1&#10;-   asterisk 2&#10;-   asterisk 3&#10;&#10;Asterisks loose:&#10;&#10;-   asterisk 1&#10;&#10;-   asterisk 2&#10;&#10;-   asterisk 3&#10;&#10;Pluses tight:&#10;&#10;-   Plus 1&#10;-   Plus 2&#10;-   Plus 3&#10;&#10;Pluses loose:&#10;&#10;-   Plus 1&#10;&#10;-   Plus 2&#10;&#10;-   Plus 3&#10;&#10;Minuses tight:&#10;&#10;-   Minus 1&#10;-   Minus 2&#10;-   Minus 3&#10;&#10;Minuses loose:&#10;&#10;-   Minus 1&#10;&#10;-   Minus 2&#10;&#10;-   Minus 3&#10;&#10;">+  </outline>+  <outline text="Ordered" _note="Tight:&#10;&#10;1.  First&#10;2.  Second&#10;3.  Third&#10;&#10;and:&#10;&#10;1.  One&#10;2.  Two&#10;3.  Three&#10;&#10;Loose using tabs:&#10;&#10;1.  First&#10;&#10;2.  Second&#10;&#10;3.  Third&#10;&#10;and using spaces:&#10;&#10;1.  One&#10;&#10;2.  Two&#10;&#10;3.  Three&#10;&#10;Multiple paragraphs:&#10;&#10;1.  Item 1, graf one.&#10;&#10;    Item 1. graf two. The quick brown fox jumped over the lazy dog’s&#10;    back.&#10;&#10;2.  Item 2.&#10;&#10;3.  Item 3.&#10;&#10;">+  </outline>+  <outline text="Nested" _note="-   Tab&#10;    -   Tab&#10;        -   Tab&#10;&#10;Here’s another:&#10;&#10;1.  First&#10;2.  Second:&#10;    -   Fee&#10;    -   Fie&#10;    -   Foe&#10;&#10;3.  Third&#10;&#10;Same thing but with paragraphs:&#10;&#10;1.  First&#10;&#10;2.  Second:&#10;&#10;    -   Fee&#10;    -   Fie&#10;    -   Foe&#10;&#10;3.  Third&#10;&#10;">+  </outline>+  <outline text="Tabs and spaces" _note="-   this is a list item indented with tabs&#10;&#10;-   this is a list item indented with spaces&#10;&#10;    -   this is an example list item indented with tabs&#10;&#10;    -   this is an example list item indented with spaces&#10;&#10;">+  </outline>+  <outline text="Fancy list markers" _note="(2) begins with 2&#10;(3) and now 3&#10;&#10;    with a continuation&#10;&#10;    iv. sublist with roman numerals, starting with 4&#10;    v.  more items&#10;        (A) a subsublist&#10;        (B) a subsublist&#10;&#10;Nesting:&#10;&#10;A.  Upper Alpha&#10;    I.  Upper Roman.&#10;        (6) Decimal start with 6&#10;            c)  Lower alpha with paren&#10;&#10;Autonumbering:&#10;&#10;1.  Autonumber.&#10;2.  More.&#10;    1.  Nested.&#10;&#10;Should not be a list item:&#10;&#10;M.A. 2007&#10;&#10;B. Williams&#10;&#10;* * * * *">+  </outline>+</outline>+<outline text="Definition Lists" _note="Tight using spaces:&#10;&#10;apple&#10;:   red fruit&#10;orange&#10;:   orange fruit&#10;banana&#10;:   yellow fruit&#10;&#10;Tight using tabs:&#10;&#10;apple&#10;:   red fruit&#10;orange&#10;:   orange fruit&#10;banana&#10;:   yellow fruit&#10;&#10;Loose:&#10;&#10;apple&#10;:   red fruit&#10;&#10;orange&#10;:   orange fruit&#10;&#10;banana&#10;:   yellow fruit&#10;&#10;Multiple blocks with italics:&#10;&#10;*apple*&#10;:   red fruit&#10;&#10;    contains seeds, crisp, pleasant to taste&#10;&#10;*orange*&#10;:   orange fruit&#10;&#10;        { orange code block }&#10;&#10;    &gt; orange block quote&#10;&#10;Multiple definitions, tight:&#10;&#10;apple&#10;:   red fruit&#10;:   computer&#10;orange&#10;:   orange fruit&#10;:   bank&#10;&#10;Multiple definitions, loose:&#10;&#10;apple&#10;:   red fruit&#10;&#10;:   computer&#10;&#10;orange&#10;:   orange fruit&#10;&#10;:   bank&#10;&#10;Blank line after term, indented marker, alternate markers:&#10;&#10;apple&#10;:   red fruit&#10;&#10;:   computer&#10;&#10;orange&#10;:   orange fruit&#10;&#10;    1.  sublist&#10;    2.  sublist&#10;&#10;">+</outline>+<outline text="HTML Blocks" _note="Simple block on one line:&#10;&#10;&lt;div&gt;&#10;&#10;foo&#10;&#10;&lt;/div&gt;&#10;&#10;And nested without indentation:&#10;&#10;&lt;div&gt;&#10;&#10;&lt;div&gt;&#10;&#10;&lt;div&gt;&#10;&#10;foo&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;div&gt;&#10;&#10;bar&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;Interpreted markdown in a table:&#10;&#10;&lt;table&gt;&#10;&lt;tr&gt;&#10;&lt;td&gt;&#10;This is *emphasized*&#10;&lt;/td&gt;&#10;&lt;td&gt;&#10;And this is **strong**&#10;&lt;/td&gt;&#10;&lt;/tr&gt;&#10;&lt;/table&gt;&#10;&#10;&lt;script type=&quot;text/javascript&quot;&gt;document.write('This *should not* be interpreted as markdown');&lt;/script&gt;&#10;&#10;Here’s a simple block:&#10;&#10;&lt;div&gt;&#10;&#10;foo&#10;&#10;&lt;/div&gt;&#10;&#10;This should be a code block, though:&#10;&#10;    &lt;div&gt;&#10;        foo&#10;    &lt;/div&gt;&#10;&#10;As should this:&#10;&#10;    &lt;div&gt;foo&lt;/div&gt;&#10;&#10;Now, nested:&#10;&#10;&lt;div&gt;&#10;&#10;&lt;div&gt;&#10;&#10;&lt;div&gt;&#10;&#10;foo&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;This should just be an HTML comment:&#10;&#10;&lt;!-- Comment --&gt;&#10;&#10;Multiline:&#10;&#10;&lt;!--&#10;Blah&#10;Blah&#10;--&gt;&#10;&#10;&lt;!--&#10;    This is another comment.&#10;--&gt;&#10;&#10;Code block:&#10;&#10;    &lt;!-- Comment --&gt;&#10;&#10;Just plain comment, with trailing spaces on the line:&#10;&#10;&lt;!-- foo --&gt;   &#10;&#10;Code:&#10;&#10;    &lt;hr /&gt;&#10;&#10;Hr’s:&#10;&#10;&lt;hr&gt;&#10;&#10;&lt;hr /&gt;&#10;&#10;&lt;hr /&gt;&#10;&#10;&lt;hr&gt;   &#10;&#10;&lt;hr /&gt;  &#10;&#10;&lt;hr /&gt; &#10;&#10;&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;&#10;&#10;&lt;hr class=&quot;foo&quot; id=&quot;bar&quot; /&gt;&#10;&#10;&lt;hr class=&quot;foo&quot; id=&quot;bar&quot;&gt;&#10;&#10;* * * * *">+</outline>+<outline text="Inline Markup" _note="This is *emphasized*, and so *is this*.&#10;&#10;This is **strong**, and so **is this**.&#10;&#10;An *[emphasized link](/url)*.&#10;&#10;***This is strong and em.***&#10;&#10;So is ***this*** word.&#10;&#10;***This is strong and em.***&#10;&#10;So is ***this*** word.&#10;&#10;This is code: `&gt;`, `$`, `\`, `\$`, `&lt;html&gt;`.&#10;&#10;~~This is *strikeout*.~~&#10;&#10;Superscripts: a^bc^d a^*hello*^ a^hello there^.&#10;&#10;Subscripts: H~2~O, H~23~O, H~many of them~O.&#10;&#10;These should not be superscripts or subscripts, because of the unescaped&#10;spaces: a\^b c\^d, a\~b c\~d.&#10;&#10;* * * * *">+</outline>+<outline text="Smart quotes, ellipses, dashes" _note="“Hello,” said the spider. “‘Shelob’ is my name.”&#10;&#10;‘A’, ‘B’, and ‘C’ are letters.&#10;&#10;‘Oak,’ ‘elm,’ and ‘beech’ are names of trees. So is ‘pine.’&#10;&#10;‘He said, “I want to go.”’ Were you alive in the 70’s?&#10;&#10;Here is some quoted ‘`code`’ and a “[quoted&#10;link](http://example.com/?foo=1&amp;bar=2)”.&#10;&#10;Some dashes: one—two — three—four — five.&#10;&#10;Dashes between numbers: 5–7, 255–66, 1987–1999.&#10;&#10;Ellipses…and…and….&#10;&#10;* * * * *">+</outline>+<outline text="LaTeX" _note="-   \cite[22-23]{smith.1899}&#10;-   $2+2=4$&#10;-   $x \in y$&#10;-   $\alpha \wedge \omega$&#10;-   $223$&#10;-   $p$-Tree&#10;-   Here’s some display math:&#10;    $$\frac{d}{dx}f(x)=\lim_{h\to 0}\frac{f(x+h)-f(x)}{h}$$&#10;-   Here’s one that has a line break in it:&#10;    $\alpha + \omega \times x^2$.&#10;&#10;These shouldn’t be math:&#10;&#10;-   To get the famous equation, write `$e = mc^2$`.&#10;-   \$22,000 is a *lot* of money. So is \$34,000. (It worked if “lot” is&#10;    emphasized.)&#10;-   Shoes (\$20) and socks (\$5).&#10;-   Escaped `$`: \$73 *this should be emphasized* 23\$.&#10;&#10;Here’s a LaTeX table:&#10;&#10;\begin{tabular}{|l|l|}\hline&#10;Animal &amp; Number \\ \hline&#10;Dog    &amp; 2      \\&#10;Cat    &amp; 1      \\ \hline&#10;\end{tabular}&#10;&#10;* * * * *">+</outline>+<outline text="Special Characters" _note="Here is some unicode:&#10;&#10;-   I hat: Î&#10;-   o umlaut: ö&#10;-   section: §&#10;-   set membership: ∈&#10;-   copyright: ©&#10;&#10;AT&amp;T has an ampersand in their name.&#10;&#10;AT&amp;T is another way to write it.&#10;&#10;This &amp; that.&#10;&#10;4 \&lt; 5.&#10;&#10;6 \&gt; 5.&#10;&#10;Backslash: \\&#10;&#10;Backtick: \`&#10;&#10;Asterisk: \*&#10;&#10;Underscore: \_&#10;&#10;Left brace: {&#10;&#10;Right brace: }&#10;&#10;Left bracket: [&#10;&#10;Right bracket: ]&#10;&#10;Left paren: (&#10;&#10;Right paren: )&#10;&#10;Greater-than: \&gt;&#10;&#10;Hash: \#&#10;&#10;Period: .&#10;&#10;Bang: !&#10;&#10;Plus: +&#10;&#10;Minus: -&#10;&#10;* * * * *">+</outline>+<outline text="Links">+  <outline text="Explicit" _note="Just a [URL](/url/).&#10;&#10;[URL and title](/url/ &quot;title&quot;).&#10;&#10;[URL and title](/url/ &quot;title preceded by two spaces&quot;).&#10;&#10;[URL and title](/url/ &quot;title preceded by a tab&quot;).&#10;&#10;[URL and title](/url/ &quot;title with &quot;quotes&quot; in it&quot;)&#10;&#10;[URL and title](/url/ &quot;title with single quotes&quot;)&#10;&#10;[with\_underscore](/url/with_underscore)&#10;&#10;[Email link](mailto:nobody@nowhere.net)&#10;&#10;[Empty]().">+  </outline>+  <outline text="Reference" _note="Foo [bar](/url/).&#10;&#10;Foo [bar](/url/).&#10;&#10;Foo [bar](/url/).&#10;&#10;With [embedded [brackets]](/url/).&#10;&#10;[b](/url/) by itself should be a link.&#10;&#10;Indented [once](/url).&#10;&#10;Indented [twice](/url).&#10;&#10;Indented [thrice](/url).&#10;&#10;This should [not][] be a link.&#10;&#10;    [not]: /url&#10;&#10;Foo [bar](/url/ &quot;Title with &quot;quotes&quot; inside&quot;).&#10;&#10;Foo [biz](/url/ &quot;Title with &quot;quote&quot; inside&quot;).">+  </outline>+  <outline text="With ampersands" _note="Here’s a [link with an ampersand in the&#10;URL](http://example.com/?foo=1&amp;bar=2).&#10;&#10;Here’s a link with an amersand in the link text:&#10;[AT&amp;T](http://att.com/ &quot;AT&amp;T&quot;).&#10;&#10;Here’s an [inline link](/script?foo=1&amp;bar=2).&#10;&#10;Here’s an [inline link in pointy braces](/script?foo=1&amp;bar=2).">+  </outline>+  <outline text="Autolinks" _note="With an ampersand: &lt;http://example.com/?foo=1&amp;bar=2&gt;&#10;&#10;-   In a list?&#10;-   &lt;http://example.com/&gt;&#10;-   It should.&#10;&#10;An e-mail address: &lt;nobody@nowhere.net&gt;&#10;&#10;&gt; Blockquoted: &lt;http://example.com/&gt;&#10;&#10;Auto-links should not occur here: `&lt;http://example.com/&gt;`&#10;&#10;    or here: &lt;http://example.com/&gt;&#10;&#10;* * * * *">+  </outline>+</outline>+<outline text="Images" _note="From “Voyage dans la Lune” by Georges Melies (1902):&#10;&#10;![lalune](lalune.jpg &quot;Voyage dans la Lune&quot;)&#10;&#10;Here is a movie ![movie](movie.jpg) icon.&#10;&#10;* * * * *">+</outline>+<outline text="Footnotes" _note="Here is a footnote reference,[^1] and another.[^2] This should *not* be&#10;a footnote reference, because it contains a space.[\^my note] Here is an&#10;inline note.[^3]&#10;&#10;&gt; Notes can go in quotes.[^4]&#10;&#10;1.  And in list items.[^5]&#10;&#10;This paragraph should not be part of the note, as it is not indented.&#10;&#10;[^1]: Here is the footnote. It can go anywhere after the footnote&#10;    reference. It need not be placed at the end of the document.&#10;&#10;[^2]: Here’s the long note. This one contains multiple blocks.&#10;&#10;    Subsequent blocks are indented to show that they belong to the&#10;    footnote (as with list items).&#10;&#10;          { &lt;code&gt; }&#10;&#10;    If you want, you can indent every line, but you can also be lazy and&#10;    just indent the first line of each block.&#10;&#10;[^3]: This is *easier* to type. Inline notes may contain&#10;    [links](http://google.com) and `]` verbatim characters, as well as&#10;    [bracketed text].&#10;&#10;[^4]: In quote.&#10;&#10;[^5]: In list.">+</outline>+  </body>+</opml>
tests/writer.org view
@@ -359,7 +359,13 @@  #+BEGIN_HTML   <div>+#+END_HTML++#+BEGIN_HTML   <div>+#+END_HTML++#+BEGIN_HTML   <div> #+END_HTML @@ -367,7 +373,13 @@  #+BEGIN_HTML   </div>+#+END_HTML++#+BEGIN_HTML   </div>+#+END_HTML++#+BEGIN_HTML   <div> #+END_HTML @@ -375,6 +387,9 @@  #+BEGIN_HTML   </div>+#+END_HTML++#+BEGIN_HTML   </div> #+END_HTML @@ -407,7 +422,6 @@  #+BEGIN_HTML   <div>-       #+END_HTML  foo@@ -434,16 +448,27 @@  #+BEGIN_HTML   <div>-      <div>-          <div>-               #+END_HTML +#+BEGIN_HTML+  <div>+#+END_HTML++#+BEGIN_HTML+  <div>+#+END_HTML+ foo  #+BEGIN_HTML   </div>-      </div>+#+END_HTML++#+BEGIN_HTML+  </div>+#+END_HTML++#+BEGIN_HTML   </div> #+END_HTML 
tests/writer.plain view
@@ -352,10 +352,13 @@ Simple block on one line:  foo+ And nested without indentation:  foo+ bar+ Interpreted markdown in a table:  This is emphasized@@ -363,6 +366,7 @@ Here’s a simple block:  foo+ This should be a code block, though:      <div>@@ -376,6 +380,7 @@ Now, nested:  foo+ This should just be an HTML comment:  Multiline:
tests/writer.rst view
@@ -394,7 +394,13 @@ .. raw:: html     <div>++.. raw:: html+    <div>++.. raw:: html+    <div>  foo@@ -402,7 +408,13 @@ .. raw:: html     </div>++.. raw:: html+    </div>++.. raw:: html+    <div>  bar@@ -410,6 +422,9 @@ .. raw:: html     </div>++.. raw:: html+    </div>  Interpreted markdown in a table:@@ -442,7 +457,6 @@ .. raw:: html     <div>-         foo @@ -469,16 +483,27 @@ .. raw:: html     <div>-       <div>-           <div>-                +.. raw:: html++   <div>++.. raw:: html++   <div>+ foo  .. raw:: html     </div>-       </div>++.. raw:: html++   </div>++.. raw:: html+    </div>  This should just be an HTML comment:
tests/writer.textile view
@@ -352,20 +352,33 @@ Simple block on one line:  <div>+ foo+ </div>  And nested without indentation:  <div>+ <div>+ <div>+ foo+ </div>++ </div>+ <div>+ bar+ </div>++ </div>  Interpreted markdown in a table:@@ -386,8 +399,9 @@ Here's a simple block:  <div>-    + foo+ </div>  This should be a code block, though:@@ -405,14 +419,21 @@ Now, nested:  <div>-    <div>-        <div>-            ++<div>++<div>+ foo+ </div>-    </div>++ </div> ++</div>+ This should just be an HTML comment:  <!-- Comment -->@@ -713,4 +734,3 @@   fn5. In list.-