summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristoph Helma <helma@in-silico.ch>2019-06-05 17:28:10 +0200
committerChristoph Helma <helma@in-silico.ch>2019-06-05 17:28:10 +0200
commit9a217185e791d6abbe46549cd4e87c1d1a643c05 (patch)
tree1968aebd8a38acd7784e58d478e0f6c3fb08ab76
parentfeb1f82356da50a1ebf63b1eda434c388ab009e1 (diff)
first manuscript version
-rw-r--r--paper/190501_Genotox-PA.docxbin0 -> 569964 bytes
-rw-r--r--paper/190501_Genotox-PA.md1325
-rw-r--r--paper/LICENSE339
-rw-r--r--paper/Makefile102
-rw-r--r--paper/README.md269
-rw-r--r--paper/bibliography.bib366
-rw-r--r--paper/example/article.md136
-rw-r--r--paper/example/bibliography.bib13
-rw-r--r--paper/lua-filters/.travis.yml55
-rw-r--r--paper/lua-filters/LICENSE21
-rw-r--r--paper/lua-filters/Makefile5
-rw-r--r--paper/lua-filters/README.md21
-rw-r--r--paper/lua-filters/abstract-to-meta/Makefile8
-rw-r--r--paper/lua-filters/abstract-to-meta/README.md37
-rw-r--r--paper/lua-filters/abstract-to-meta/abstract-to-meta.lua23
-rw-r--r--paper/lua-filters/abstract-to-meta/expected.md19
-rw-r--r--paper/lua-filters/abstract-to-meta/sample.md17
-rw-r--r--paper/lua-filters/author-info-blocks/Makefile8
-rw-r--r--paper/lua-filters/author-info-blocks/README.md59
-rw-r--r--paper/lua-filters/author-info-blocks/author-info-blocks.lua176
-rw-r--r--paper/lua-filters/author-info-blocks/document-screenshot.jpgbin0 -> 14584 bytes
-rw-r--r--paper/lua-filters/author-info-blocks/expected.native5
-rw-r--r--paper/lua-filters/author-info-blocks/sample.md28
-rw-r--r--paper/lua-filters/bibexport/Makefile5
-rw-r--r--paper/lua-filters/bibexport/README.md31
-rw-r--r--paper/lua-filters/bibexport/bibexport.lua82
-rw-r--r--paper/lua-filters/bibexport/coffee.bib48
-rw-r--r--paper/lua-filters/bibexport/expected.bibexport.aux3
-rw-r--r--paper/lua-filters/bibexport/expected.bibexport.bib27
-rw-r--r--paper/lua-filters/bibexport/sample.bib13
-rw-r--r--paper/lua-filters/bibexport/sample.md18
-rw-r--r--paper/lua-filters/cito/Makefile6
-rw-r--r--paper/lua-filters/cito/README.md76
-rw-r--r--paper/lua-filters/cito/cito.lua138
-rw-r--r--paper/lua-filters/cito/expected.md19
-rw-r--r--paper/lua-filters/cito/sample.bib24
-rw-r--r--paper/lua-filters/cito/sample.md10
-rw-r--r--paper/lua-filters/diagram-generator/.gitignore2
-rw-r--r--paper/lua-filters/diagram-generator/Makefile13
-rw-r--r--paper/lua-filters/diagram-generator/README.md252
-rw-r--r--paper/lua-filters/diagram-generator/diagram-generator.lua295
-rw-r--r--paper/lua-filters/diagram-generator/sample.md244
-rw-r--r--paper/lua-filters/minted/Makefile65
-rw-r--r--paper/lua-filters/minted/README.md316
-rwxr-xr-xpaper/lua-filters/minted/background_color.py76
-rw-r--r--paper/lua-filters/minted/minted.lua456
-rwxr-xr-xpaper/lua-filters/minted/run_minted_tests.py522
-rw-r--r--paper/lua-filters/minted/sample.md135
-rw-r--r--paper/lua-filters/multiple-bibliographies/Makefile6
-rw-r--r--paper/lua-filters/multiple-bibliographies/README.md33
-rw-r--r--paper/lua-filters/multiple-bibliographies/expected.native14
-rw-r--r--paper/lua-filters/multiple-bibliographies/multiple-bibliographies.lua110
-rw-r--r--paper/lua-filters/multiple-bibliographies/primary.bib10
-rw-r--r--paper/lua-filters/multiple-bibliographies/sample.md17
-rw-r--r--paper/lua-filters/multiple-bibliographies/secondary.bib10
-rw-r--r--paper/lua-filters/pagebreak/Makefile4
-rw-r--r--paper/lua-filters/pagebreak/README.md68
-rw-r--r--paper/lua-filters/pagebreak/expected.html6
-rw-r--r--paper/lua-filters/pagebreak/pagebreak.lua97
-rw-r--r--paper/lua-filters/pagebreak/sample.md14
-rw-r--r--paper/lua-filters/plantuml/Makefile3
-rw-r--r--paper/lua-filters/plantuml/output.html45
-rw-r--r--paper/lua-filters/plantuml/plantuml.lua56
-rw-r--r--paper/lua-filters/plantuml/readme.md30
-rwxr-xr-xpaper/lua-filters/runtests.sh16
-rw-r--r--paper/lua-filters/scholarly-metadata/Makefile8
-rw-r--r--paper/lua-filters/scholarly-metadata/README.md91
-rw-r--r--paper/lua-filters/scholarly-metadata/expected.md41
-rw-r--r--paper/lua-filters/scholarly-metadata/sample.md30
-rw-r--r--paper/lua-filters/scholarly-metadata/scholarly-metadata.lua180
-rw-r--r--paper/lua-filters/scrlttr2/Makefile9
-rw-r--r--paper/lua-filters/scrlttr2/README.md60
-rw-r--r--paper/lua-filters/scrlttr2/expected-strings.sh31
-rw-r--r--paper/lua-filters/scrlttr2/sample.md16
-rw-r--r--paper/lua-filters/scrlttr2/scrlttr2.lua161
-rw-r--r--paper/lua-filters/section-refs/Makefile26
-rw-r--r--paper/lua-filters/section-refs/README.md19
-rw-r--r--paper/lua-filters/section-refs/bibliography.bib70
-rw-r--r--paper/lua-filters/section-refs/expected_default.native25
-rw-r--r--paper/lua-filters/section-refs/expected_no_citeproc.native7
-rw-r--r--paper/lua-filters/section-refs/expected_refs_name.native27
-rw-r--r--paper/lua-filters/section-refs/expected_section_level.native31
-rw-r--r--paper/lua-filters/section-refs/sample.md18
-rw-r--r--paper/lua-filters/section-refs/section-refs.lua138
-rw-r--r--paper/lua-filters/short-captions/Makefile18
-rw-r--r--paper/lua-filters/short-captions/README.md52
-rw-r--r--paper/lua-filters/short-captions/expected-1.tex67
-rw-r--r--paper/lua-filters/short-captions/expected-2.tex67
-rw-r--r--paper/lua-filters/short-captions/fig.pdfbin0 -> 56971 bytes
-rw-r--r--paper/lua-filters/short-captions/short-captions.lua37
-rw-r--r--paper/lua-filters/spellcheck/Makefile2
-rw-r--r--paper/lua-filters/spellcheck/README.md42
-rw-r--r--paper/lua-filters/spellcheck/expected.txt2
-rw-r--r--paper/lua-filters/spellcheck/sample.md15
-rw-r--r--paper/lua-filters/spellcheck/spellcheck.lua70
-rw-r--r--paper/lua-filters/table-short-captions/Makefile24
-rw-r--r--paper/lua-filters/table-short-captions/README.md66
-rw-r--r--paper/lua-filters/table-short-captions/expected-sample.native68
-rw-r--r--paper/lua-filters/table-short-captions/expected-sample.tex291
-rw-r--r--paper/lua-filters/table-short-captions/sample.md84
-rw-r--r--paper/lua-filters/table-short-captions/table-short-captions.lua160
-rw-r--r--paper/lua-filters/track-changes/.gitignore2
-rw-r--r--paper/lua-filters/track-changes/Makefile26
-rw-r--r--paper/lua-filters/track-changes/README.md18
-rw-r--r--paper/lua-filters/track-changes/TODO.md18
-rw-r--r--paper/lua-filters/track-changes/expected_accept.markdown29
-rw-r--r--paper/lua-filters/track-changes/expected_draft.html41
-rw-r--r--paper/lua-filters/track-changes/expected_draft.tex159
-rw-r--r--paper/lua-filters/track-changes/expected_reject.markdown29
-rw-r--r--paper/lua-filters/track-changes/sample.md43
-rw-r--r--paper/lua-filters/track-changes/test-track-changes.sh25
-rw-r--r--paper/lua-filters/track-changes/track-changes.lua247
-rw-r--r--paper/lua-filters/wordcount/Makefile2
-rw-r--r--paper/lua-filters/wordcount/README.md11
-rw-r--r--paper/lua-filters/wordcount/expected.txt1
-rw-r--r--paper/lua-filters/wordcount/sample.md12
-rw-r--r--paper/lua-filters/wordcount/wordcount.lua29
-rw-r--r--paper/media/image1.pngbin0 -> 150987 bytes
-rw-r--r--paper/media/image2.pngbin0 -> 50793 bytes
-rw-r--r--paper/media/image3.pngbin0 -> 51318 bytes
-rw-r--r--paper/media/image4.pngbin0 -> 48737 bytes
-rw-r--r--paper/media/image5.pngbin0 -> 48732 bytes
-rw-r--r--paper/media/image6.pngbin0 -> 48818 bytes
-rw-r--r--paper/media/image7.pngbin0 -> 36233 bytes
-rw-r--r--paper/media/image8.pngbin0 -> 18746 bytes
-rw-r--r--paper/mutagenicity.md532
-rw-r--r--paper/outfile.docxbin0 -> 204123 bytes
-rw-r--r--paper/outfile.enriched.json1
-rw-r--r--paper/outfile.epubbin0 -> 199245 bytes
-rw-r--r--paper/outfile.html822
-rw-r--r--paper/outfile.latex779
-rw-r--r--paper/outfile.odtbin0 -> 204439 bytes
-rw-r--r--paper/outfile.pdfbin0 -> 241723 bytes
-rw-r--r--paper/pandoc-options.inc.mk47
-rw-r--r--paper/scholar-filters/dkjson.lua714
-rw-r--r--paper/scholar-filters/json-ld.lua233
-rw-r--r--paper/scholar-filters/template-helper.lua43
-rw-r--r--paper/templates/images/arrow-down.pngbin0 -> 216 bytes
-rw-r--r--paper/templates/images/octocat-small.pngbin0 -> 357 bytes
-rw-r--r--paper/templates/images/pdf.pngbin0 -> 1029 bytes
-rw-r--r--paper/templates/pandoc-scholar.html119
-rw-r--r--paper/templates/pandoc-scholar.latex309
-rw-r--r--paper/templates/styles/pandoc-scholar.css478
-rw-r--r--paper/writers/jsonld.lua14
144 files changed, 13283 insertions, 0 deletions
diff --git a/paper/190501_Genotox-PA.docx b/paper/190501_Genotox-PA.docx
new file mode 100644
index 0000000..bb46cfb
--- /dev/null
+++ b/paper/190501_Genotox-PA.docx
Binary files differ
diff --git a/paper/190501_Genotox-PA.md b/paper/190501_Genotox-PA.md
new file mode 100644
index 0000000..acf64e9
--- /dev/null
+++ b/paper/190501_Genotox-PA.md
@@ -0,0 +1,1325 @@
+Prediction of the mutagenic potential of different pyrrolizidine
+alkaloids using LAZAR, Random Forest, Support Vector Machines, and Deep
+Learning
+
+Authors
+
+Verena Schöning, Christoph Helma, Philipp Boss, Jürgen Drewe
+
+**Manuscript in preparation.**
+
+Corresponding author:
+
+Prof. Dr. Jürgen Drewe, MSc
+
+Abstract
+========
+
+Pyrrolizidine alkaloids (PAs) are secondary plant metabolites of some
+plant families, which protect against predators and generally considered
+as genotoxic and mutagenic. This mutagenicity is also the point of
+concern in regulatory risk assessment of this substance group [EFSA
+2011](#_ENREF_36)[EMA 2014](#_ENREF_38)[2016](#_ENREF_39)(; ; ). Several
+investigations already showed that the mutagenic potential of PAs is
+different, and largely depends on the structure.
+
+Since only very few of over 600 known PAs are available for *in vitro*
+or *in vivo* experiments, the mutagenicity of PAs in this study was
+estimated using four different machine learning techniques LAZAR and
+Deep Learning, Random Forest and Support Vector Machines. However, all
+models were not optimal for predicting the genotoxic potential of PAs
+either due to problems with the applicability domain or due to low
+performance. Therefore, no estimation regarding the genotoxic potential
+of single PAs could be made. An analysis of the genotoxic potential of
+different structural groups, showed promising results. For necine base
+and necic acid, the results fitted well with literature for three
+models. However, the prediction of the toxic principle of PAs,
+dehydropyrrolizidine was only within expectation in one model
+(TensorFlow-generated Deep Learning model), but not in the other four
+models. This study shows convincingly the need to critically review and
+assess the predictions obtained from machine learning approaches by
+internal cross-validation, but also by external validation through
+comparison with literature.
+
+Introduction
+============
+
+Pyrrolizidine alkaloids (PAs) are secondary plant ingredients found in
+many plant species as protection against predators [Hartmann & Witte
+1995](#_ENREF_59)[Langel et al. 2011](#_ENREF_76)(; ). PAs are ester
+alkaloids, which are composed of a necine base (two fused five-membered
+rings joined by a nitrogen atom) and one or two necic acid (carboxylic
+ester arms). The necine base can have different structures and thereby
+divides PAs into several structural groups, e.g. otonecine, platynecine,
+and retronecine. The structural groups of the necic acid are macrocyclic
+diester, open-ring diester and monoester [Langel et al.
+2011](#_ENREF_76)().
+
+PA are mainly metabolised in the liver, which is at the same time the
+main target organ of toxicity [Bull & Dick 1959](#_ENREF_17)[Bull et al.
+1958](#_ENREF_18)[Butler et al. 1970](#_ENREF_20)[DeLeve et al.
+1996](#_ENREF_33)[Jago 1971](#_ENREF_65)[Li et al.
+2011](#_ENREF_78)[Neumann et al. 2015](#_ENREF_99)(; ; ; ; ; ; ). There
+are three principal metabolic pathways for 1,2-unsaturated PAs [Chen et
+al. 2010](#_ENREF_26)(): (i) Detoxification by hydrolysis: the ester
+bond on positions C7 and C9 are hydrolysed by non-specific esterases to
+release necine base and necic acid, which are then subjected to further
+phase II-conjugation and excretion. (ii) Detoxification by *N*-oxidation
+of the necine base (only possible for retronecine-type PAs): the
+nitrogen is oxidised to form a PA *N*-oxides, which can be conjugated by
+phase II enzymes e.g. glutathione and then excreted. PA *N*-oxides can
+be converted back into the corresponding parent PA [Wang et al.
+2005](#_ENREF_134)(). (iii) Metabolic activation or toxification: PAs
+are metabolic activated/ toxified by oxidation (for retronecine-type
+PAs) or oxidative *N*-demethylation (for otonecine-type PAs [Lin
+1998](#_ENREF_82)()). This pathway is mainly catalysed by cytochrome
+P450 isoforms CYP2B and 3A [Ruan et al. 2014b](#_ENREF_115)(), and
+results in the formation of dehydropyrrolizidines (DHP, also known as
+pyrrolic ester or reactive pyrroles). DHPs are highly reactive and cause
+damage in the cells where they are formed, usually hepatocytes. However,
+they can also pass from the hepatocytes into the adjacent sinusoids and
+damage the endothelial lining cells [Gao et al. 2015](#_ENREF_48)()
+predominantly by reaction with protein, lipids and DNA. There is even
+evidence, that conjugation of DHP to glutathione, which would generally
+be considered a detoxification step, could result in reactive
+metabolites, which might also lead to DNA adduct formation [Xia et al.
+2015](#_ENREF_138)(). Due to the ability to form DNA adducts, DNA
+crosslinks and DNA breaks 1,2-unsaturated PAs are generally considered
+genotoxic and carcinogenic [Chen et al. 2010](#_ENREF_26)[EFSA
+2011](#_ENREF_36)[Fu et al. 2004](#_ENREF_45)[Li et al.
+2011](#_ENREF_78)[Takanashi et al. 1980](#_ENREF_126)[Yan et al.
+2008](#_ENREF_140)[Zhao et al. 2012](#_ENREF_148)(; ; ; ; ; ; ). Still,
+there is no evidence yet that PAs are carcinogenic in humans [ANZFA
+2001](#_ENREF_4)[EMA 2016](#_ENREF_39)(; ). One general limitation of
+studies with PAs is the number of different PAs investigated. Around 30
+PAs are currently commercially available, therefore all studies focus on
+these PAs. This is also true for *in vitro* and *in vivo* tests on
+mutagenicity and genotoxicity. To gain a wider perspective, in this
+study over 600 different PAs were assessed on their mutagenic potential
+using four different machine learning techniques.
+
+Materials and Methods
+=====================
+
+Training dataset
+----------------
+
+For all methods, the same validated training dataset was used. The
+training dataset was compiled from the following sources:
+
+- Kazius/Bursi Dataset (4337 compounds, [Kazius et al.
+ 2005](#_ENREF_71)()):
+
+> <http://cheminformatics.org/datasets/bursi/cas_4337.zip>
+
+- Hansen Dataset (6513 compounds, [Hansen et al. 2009](#_ENREF_57)()):
+
+> <http://doc.ml.tu-berlin.de/toxbenchmark/Mutagenicity_N6512.csv>
+
+- EFSA Dataset (695 compounds, [EFSA 2011](#_ENREF_36)()):
+
+> <https://data.europa.eu/euodp/data/storage/f/2017-0719T142131/GENOTOX%20data%20and%20dictionary.xls>
+
+Mutagenicity classifications from Kazius and Hansen datasets were used
+without further processing. To achieve consistency between these
+datasets, EFSA compounds were classified as mutagenic, if at least one
+positive result was found for TA98 or T100 Salmonella strains.
+
+Dataset merges were based on unique SMILES (*Simplified Molecular Input
+Line Entry Specification*) strings of the compound structures.
+Duplicated experimental data with the same outcome was merged into a
+single value, because it is likely that it originated from the same
+experiment. Contradictory results were kept as multiple measurements in
+the database. The combined training dataset contains 8281 unique
+structures.
+
+Source code for all data download, extraction and merge operations is
+publicly available from the git repository
+<https://git.in-silico.ch/pyrrolizidine> under a GPL3 License.
+
+Testing dataset
+---------------
+
+The testing dataset consisted of 602 different PAs. The compilation of
+the PA dataset is described in detail in [Schöning et al.
+(2017)](#_ENREF_119). The PAs were assigned to groups according to
+structural features of the necine base and necic acid.
+
+For the necine base, following groups were assigned:
+
+- Retronecine-type (1,2-unstaturated necine base)
+
+- Otonecine-type (1,2-unstaturated necine base)
+
+- Platynecine-type (1,2-saturated necine base)
+
+For the modification of necine base, following groups were assigned:
+
+- *N*-oxide-type
+
+- Tertiary-type (PAs which were neither from the *N*-oxide- nor
+ > DHP-type)
+
+- DHP-type (dehydropyrrolizidine, pyrrolic ester)
+
+For the necic acid, following groups were assigned:
+
+- Monoester-type
+
+- Open-ring diester-type
+
+- Macrocyclic diester-type
+
+For the Random Forest (RF), Support Vector Machines (SVM), and Deep
+Learning (DL) models, molecular descriptors of the PAs were calculated
+using the program PaDEL-Descriptors (version 2.21) [Yap
+2011](#_ENREF_142)[2014](#_ENREF_143)(; ). From these descriptors were
+chosen, which were actually used for the generation of the DL model.
+
+LAZAR
+-----
+
+LAZAR (*lazy structure activity relationships*) is a modular framework
+for read-across model development and validation. It follows the
+following basic workflow: For a given chemical structure LAZAR:
+
+- searches in a database for similar structures (neighbours) with
+ experimental data,
+
+- builds a local QSAR model with these neighbours and
+
+- uses this model to predict the unknown activity of the query
+ compound.
+
+This procedure resembles an automated version of read across predictions
+in toxicology, in machine learning terms it would be classified as a
+k-nearest-neighbour algorithm.
+
+Apart from this basic workflow, LAZAR is completely modular and allows
+the researcher to use any algorithm for similarity searches and local
+QSAR (*Quantitative structure--activity relationship*) modelling.
+Algorithms used within this study are described in the following
+sections.
+
+### Neighbour identification
+
+Similarity calculations were based on MolPrint2D fingerprints [Bender et
+al. 2004](#_ENREF_8)() from the OpenBabel cheminformatics library
+[O\'Boyle et al. 2011](#_ENREF_104)(). The MolPrint2D fingerprint uses
+atom environments as molecular representation, which resembles basically
+the chemical concept of functional groups. For each atom in a molecule,
+it represents the chemical environment using the atom types of connected
+atoms.
+
+MolPrint2D fingerprints are generated dynamically from chemical
+structures and do not rely on predefined lists of fragments (such as
+OpenBabel FP3, FP4 or MACCs fingerprints or lists of
+toxicophores/toxicophobes). This has the advantage that they may capture
+substructures of toxicological relevance that are not included in other
+fingerprints.
+
+From MolPrint2D fingerprints a feature vector with all atom environments
+of a compound can be constructed that can be used to calculate chemical
+similarities.
+
+The chemical similarity between two compounds a and b is expressed as
+the proportion between atom environments common in both structures A ∩ B
+and the total number of atom environments A U B (Jaccard/Tanimoto
+index).
+
+$$sim = \frac{\left| A\ \cap B \right|}{\left| A\ \cup B \right|}$$
+
+Threshold selection is a trade-off between prediction accuracy (high
+threshold) and the number of predictable compounds (low threshold). As
+it is in many practical cases desirable to make predictions even in the
+absence of closely related neighbours, we follow a tiered approach:
+
+- First a similarity threshold of 0.5 is used to collect neighbours,
+ to create a local QSAR model and to make a prediction for the query
+ compound.
+
+- If any of these steps fails, the procedure is repeated with a
+ similarity threshold of 0.2 and the prediction is flagged with a
+ warning that it might be out of the applicability domain of the
+ training data.
+
+- Similarity thresholds of 0.5 and 0.2 are the default values chosen
+ > by the software developers and remained unchanged during the
+ > course of these experiments.
+
+Compounds with the same structure as the query structure are
+automatically eliminated from neighbours to obtain unbiased predictions
+in the presence of duplicates.
+
+### Local QSAR models and predictions
+
+Only similar compounds (neighbours) above the threshold are used for
+local QSAR models. In this investigation, we are using a weighted
+majority vote from the neighbour's experimental data for mutagenicity
+classifications. Probabilities for both classes
+(mutagenic/non-mutagenic) are calculated according to the following
+formula and the class with the higher probability is used as prediction
+outcome.
+
+$$p_{c} = \ \frac{\sum_{}^{}\text{sim}_{n,c}}{\sum_{}^{}\text{sim}_{n}}$$
+
+$p_{c}$ Probability of class c (e.g. mutagenic or non-mutagenic)\
+$\sum_{}^{}\text{sim}_{n,c}$ Sum of similarities of neighbours with
+class c\
+$\sum_{}^{}\text{sim}_{n}$ Sum of all neighbours
+
+### Applicability domain
+
+The applicability domain (AD) of LAZAR models is determined by the
+structural diversity of the training data. If no similar compounds are
+found in the training data no predictions will be generated. Warnings
+are issued if the similarity threshold had to be lowered from 0.5 to 0.2
+in order to enable predictions. Predictions without warnings can be
+considered as close to the applicability domain and predictions with
+warnings as more distant from the applicability domain. Quantitative
+applicability domain information can be obtained from the similarities
+of individual neighbours.
+
+### Availability
+
+- LAZAR experiments for this manuscript:
+ [https://git.in-silico.ch/pyrrolizidine](https://deref-gmx.net/mail/client/Yn0laI8dUvs/dereferrer/?redirectUrl=https%3A%2F%2Fgit.in-silico.ch%2Fpyrrolizidine)
+ (source code, GPL3)
+
+- LAZAR framework:
+ [https://git.in-silico.ch/lazar](https://deref-gmx.net/mail/client/v26UgZbKEpE/dereferrer/?redirectUrl=https%3A%2F%2Fgit.in-silico.ch%2Flazar)
+ (source code, GPL3)
+
+- LAZAR GUI:
+ [https://git.in-silico.ch/lazar-gui](https://deref-gmx.net/mail/client/QstEPrpbcqQ/dereferrer/?redirectUrl=https%3A%2F%2Fgit.in-silico.ch%2Flazar-gui)
+ (source code, GPL3)
+
+- Public web interface:
+ [https://lazar.in-silico.ch](https://deref-gmx.net/mail/client/Gln3hLem0DY/dereferrer/?redirectUrl=https%3A%2F%2Flazar.in-silico.ch)
+
+Random Forest, Support Vector Machines, and Deep Learning in R-project
+----------------------------------------------------------------------
+
+In comparison to LAZAR, three other models (Random Forest (RF), Support
+Vector Machines (SVM), and Deep Learning (DL)) were evaluated.
+
+For the generation of these models, molecular 1D and 2D descriptors of
+the training dataset were calculated using PaDEL-Descriptors (version
+2.21) [Yap 2011](#_ENREF_142)[2014](#_ENREF_143)(; ).
+
+As the training dataset contained over 8280 instances, it was decided to
+delete instances with missing values during data pre-processing.
+Furthermore, substances with equivocal outcome were removed. The final
+training dataset contained 8080 instances with known mutagenic
+potential. The RF, SVM, and DL models were generated using the R
+software (R-project for Statistical Computing,
+<https://www.r-project.org/>*;* version 3.3.1), specific R packages used
+are identified for each step in the description below. During feature
+selection, descriptor with near zero variance were removed using
+'*NearZeroVar*'-function (package 'caret'). If the percentage of the
+most common value was more than 90% or when the frequency ratio of the
+most common value to the second most common value was greater than 95:5
+(e.g. 95 instances of the most common value and only 5 or less instances
+of the second most common value), a descriptor was classified as having
+a near zero variance. After that, highly correlated descriptors were
+removed using the '*findCorrelation*'-function (package 'caret') with a
+cut-off of 0.9. This resulted in a training dataset with 516
+descriptors. These descriptors were scaled to be in the range between 0
+and 1 using the '*preProcess*'-function (package 'caret'). The scaling
+routine was saved in order to apply the same scaling on the testing
+dataset. As these three steps did not consider the outcome, it was
+decided that they do not need to be included in the cross-validation of
+the model. To further reduce the number of features, a LASSO (*least
+absolute shrinkage and selection operator*) regression was performed
+using the '*glmnet*'-function (package '*glmnet*'). The reduced dataset
+was used for the generation of the pre-trained models.
+
+For the RF model, the '*randomForest*'-function (package
+'*randomForest*') was used. A forest with 1000 trees with maximal
+terminal nodes of 200 was grown for the prediction.
+
+The '*svm*'-function (package 'e1071') with a *radial basis function
+kernel* was used for the SVM model.
+
+The DL model was generated using the '*h2o.deeplearning*'-function
+(package '*h2o*'). The DL contained four hidden layer with 70, 50, 50,
+and 10 neurons, respectively. Other hyperparameter were set as follows:
+l1=1.0E-7, l2=1.0E-11, epsilon = 1.0E-10, rho = 0.8, and quantile\_alpha
+= 0.5. For all other hyperparameter, the default values were used.
+Weights and biases were in a first step determined with an unsupervised
+DL model. These values were then used for the actual, supervised DL
+model.
+
+To validate these models, an internal cross-validation approach was
+chosen. The training dataset was randomly split in training data, which
+contained 95% of the data, and validation data, which contain 5% of the
+data. A feature selection with LASSO on the training data was performed,
+reducing the number of descriptors to approximately 100. This step was
+repeated five times. Based on each of the five different training data,
+the predictive models were trained and the performance tested with the
+validation data. This step was repeated 10 times. Furthermore, a
+y-randomisation using the RF model was performed. During
+y-randomisation, the outcome (y-variable) is randomly permuted. The
+theory is that after randomisation of the outcome, the model should not
+be able to correlate the outcome to the properties (descriptor values)
+of the substances. The performance of the model should therefore
+indicate a by change prediction with an accuracy of about 50%. If this
+is true, it can be concluded that correlation between actual outcome and
+properties of the substances is real and not by chance [Rücker et al.
+2007](#_ENREF_117)().
+
+![](./media/media/image1.png){width="6.26875in"
+height="5.486111111111111in"}
+
+Figure 1: Flowchart of the generation and validation of the models
+generated in R-project
+
+Deep Learning in TensorFlow
+---------------------------
+
+Alternatively, a DL model was established with Python-based TensorFlow
+program (<https://www.tensorflow.org/>) using the high-level API Keras
+(<https://www.tensorflow.org/guide/keras>) to build the models.
+
+Data pre-processing was done by rank transformation using the
+'*QuantileTransformer*' procedure. A sequential model has been used.
+Four layers have been used: input layer, two hidden layers (with 12, 8
+and 8 nodes, respectively) and one output layer. For the output layer, a
+sigmoidal activation function and for all other layers the ReLU
+('*Rectified Linear Unit*') activation function was used. Additionally,
+a L^2^-penalty of 0.001 was used for the input layer. For training of
+the model, the ADAM algorithm was used to minimise the cross-entropy
+loss using the default parameters of Keras. Training was performed for
+100 epochs with a batch size of 64. The model was implemented with
+Python 3.6 and Keras. For training of the model, a 6-fold
+cross-validation was used. Accuracy was estimated by ROC-AUC and
+confusion matrix.
+
+Results
+=======
+
+LAZAR
+-----
+
+For 46 PAs, no prediction could be made. 26 PAs had no neighbours and 20
+PAs had only one neighbour. For additional 396 PAs, the similarity
+threshold had to be reduced from 0.5 to 0.2 to obtain enough neighbours
+for a prediction. This means that these substances might not be within
+the applicability domain (AD). Therefore, only 160 of 602 PAs were well
+within the stricter AD with the similarity threshold of 0.5 and 556 PAs
+in the AD with the similarity threshold of 0.2.
+
+![](./media/media/image2.png){width="5.905511811023622in"
+height="3.868241469816273in"}
+
+Figure 2: Genotoxic potential of the different PA groups as predicted by
+LAZAR, using the **similarity threshold** **of 0.5**.
+
+*Genotoxic*: percentage number of compounds per group, which were
+predicted to be genotoxic.\
+*Not genotoxic*: percentage number of compounds per group, which were
+predicted to be not genotoxic\
+*Outside AD*: percentage number of compounds per group, which were
+outside the applicability domain (AD).
+
+![](./media/media/image3.png){width="5.905511811023622in"
+height="3.868241469816273in"}
+
+Figure 3: Genotoxic potential of the different PA groups as predicted by
+LAZAR, using the **similarity threshold of 0.2**
+
+*Genotoxic*: percentage number of compounds per group, which were
+predicted to be genotoxic.\
+*Not genotoxic*: percentage number of compounds per group, which were
+predicted to be not genotoxic\
+*Outside AD*: percentage number of compounds per group, which were
+outside the applicability domain (AD).
+
+Interestingly, using both similarity thresholds (e.g. 0.2 and 0.5), the
+majority of PAs in all groups except otonecine, were predicted to be not
+genotoxic.
+
+The following rank order for genotoxicity probability can be deduced
+from the results of both similarity thresholds:
+
+- Necine base: platynecine ≤ retronecine \<\< otonecine
+
+- Necic acid: monoester \< diester \< macrocyclic diester
+
+- Modification of necine base: *N*-oxide \< DHP \< tertiary PA
+
+Random Forest, Support Vector Machines, and Deep Learning
+---------------------------------------------------------
+
+Applicability domain
+
+The AD of the training dataset and the PA dataset was evaluated using
+the Jaccard distance. A Jaccard distance of '0' indicates that the
+substances are similar, whereas a value of '1' shows that the substances
+are different. The Jaccard distance was below 0.2 for all PAs relative
+to the training dataset. Therefore, PA dataset is within the AD of the
+training dataset and the models can be used to predict the genotoxic
+potential of the PA dataset.
+
+y-randomisation
+
+After y-randomisation of the outcome, the accuracy and CCR are around
+50%, indicating a chance in the distribution of the results. This shows,
+that the outcome is actually related to the predictors and not by
+chance.
+
+Random Forest
+
+The validation showed that the RF model has an accuracy of 64%, a
+sensitivity of 66% and a specificity of 63%. The confusion matrix of the
+model, calculated for 8080 instances, is provided in Table 1.
+
+Table 1: Confusion matrix of the RF model
+
+ Predicted genotoxicity
+ ----------------------- ------------------------ ---------- ---------- -------------
+ Measured genotoxicity ***PP*** ***PN*** ***Total***
+ ***TP*** 2274 1163 3437
+ ***TN*** 1736 2907 4643
+ ***Total*** 4010 4070 8080
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+In general, the majority of PAs were considered to be not genotoxic by
+the RF model (Figure 4).
+
+![](./media/media/image4.png){width="6.063194444444444in"
+height="3.8756944444444446in"}
+
+Figure 4: Genotoxic potential of the different PA groups as predicted by
+**RF model**
+
+*Genotoxic*: percentage number of compounds per group, which was
+predicted to be genotoxic.\
+*Not genotoxic*: percentage number of compounds per group, which was
+predicted to be not genotoxic.
+
+From the results, the following rank orders of genotoxic potential could
+be deduced:
+
+- Necine base: platynecine \< retronecine \< otonecine
+
+- Necic acid: monoester (= 0%) \< diester \< macrocyclic diester
+
+- Modification of necine base: *N*-oxide = dehydropyrrolizidine (0%)
+ \< tertiary PA
+
+Support Vector Machines
+
+The validation showed that the SVM model has an accuracy of 62%, a
+sensitivity of 65% and a specificity of 60%. The confusion matrix of SVM
+model, calculated for 8080 instances, is provided in Table 2.
+
+Table 2: Confusion matrix of the SVM model
+
+ Predicted genotoxicity
+ ----------------------- ------------------------ ---------- ---------- -------------
+ Measured genotoxicity ***PP*** ***PN*** ***Total***
+ ***TP*** 2057 1107 3164
+ ***TN*** 1953 2963 4916
+ ***Total*** 4010 4070 8080
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+In the SVM model, also the majority of PAs were considered to be not
+genotoxic (Figure 5).
+
+![](./media/media/image5.png){width="6.063194444444444in"
+height="3.9694444444444446in"}
+
+Figure 5: Genotoxic potential of the different PA groups as predicted by
+**SVM model**
+
+*Genotoxic*: percentage number of compounds per group, which was
+predicted to be genotoxic.\
+*Not genotoxic*: percentage number of compounds per group, which was
+predicted to be not genotoxic
+
+From the results, the following rank orders of genotoxic potential could
+be deduced:
+
+- Necine base: otonecine \< platynecine = retronecine
+
+- Necic acid: macrocyclic diester \< monoester = diester
+
+- Modification of necine base: dehydropyrrolizidine \< tertiary
+ PA \< *N*-oxide 
+
+Deep Learning (R-project)
+
+The validation showed that the DL model generated in R has an accuracy
+of 59%, a sensitivity of 89% and a specificity of 30%. The confusion
+matrix of the model, normalised to 8080 instances, is provided in Table
+3.
+
+Table 3: Confusion matrix of the DL model (R-project)
+
+ Predicted genotoxicity
+ ----------------------- ------------------------ ---------- ---------- -------------
+ Measured genotoxicity ***PP*** ***PN*** ***Total***
+ ***TP*** 3575 435 4010
+ ***TN*** 2853 1217 4070
+ ***Total*** 6428 1652 8080
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+In contrast, the majority of PAs were considered to be genotoxic by the
+DL model in R (Figure 6).
+
+![](./media/media/image6.png){width="6.063194444444444in"
+height="3.982638888888889in"}
+
+Figure 6: Genotoxic potential of the different PA groups as predicted by
+**DL model (R-project)**
+
+*Genotoxic*: percentage number of compounds per group, which was
+predicted to be genotoxic.\
+*Not genotoxic*: percentage number of compounds per group, which was
+predicted to be not genotoxic
+
+From the results, the following rank orders of genotoxic potential could
+be proposed:
+
+- Necine base: platynecine \< retronecine \< otonecine
+
+- Necic acid: monoester \< diester \< macrocyclic diester
+
+- Modification of necine base: tertiary PA = dehydropyrrolizidine \<
+ *N*-oxide.
+
+DL model (TensorFlow)
+
+The validation showed that the DL model generated in TensorFlow has an
+accuracy of 68%, a sensitivity of 70% and a specificity of 46%. The
+confusion matrix of the model, normalised to 8080 instances, is provided
+in Table 4.
+
+Table 4: Confusion matrix of the DL model (TensorFlow)
+
+ Predicted genotoxicity
+ ----------------------- ------------------------ ---------- ---------- -------------
+ Measured genotoxicity ***PP*** ***PN*** ***Total***
+ ***TP*** 2851 1227 4078
+ ***TN*** 1825 2177 4002
+ ***Total*** 4676 3404 8080
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+The ROC curves from the 6-fold validation are shown in Figure 7.
+
+![C:\\Users\\JDrewe\\AppData\\Local\\Microsoft\\Windows\\INetCache\\Content.MSO\\7CFE5F13.tmp](./media/media/image7.png){width="3.825in"
+height="2.7327045056867894in"}
+
+Figure 7: Six-fold cross-validation of TensorFlow DL model show an
+average area under the ROC-curve (ROC-AUC; measure of accuracy) of 68%.
+
+In contrast to the DL generated in R, the DL model generated in
+TensorFlow predicted the majority of PAs as not genotoxic.
+
+![C:\\Users\\JDrewe\\AppData\\Local\\Microsoft\\Windows\\INetCache\\Content.MSO\\4F678848.tmp](./media/media/image8.png){width="6.26875in"
+height="3.6993055555555556in"}
+
+Figure 8: Genotoxic potential of the different PA groups as predicted by
+**DL model (TensorFlow)**
+
+*Genotoxic*: percentage number of compounds per group, which was
+predicted to be genotoxic.\
+*Not genotoxic*: percentage number of compounds per group, which was
+predicted to be not genotoxic
+
+The following rank orders of genotoxic potential could be proposed based
+on the results:
+
+- Necine base: platynecine \< otonecine \< retronecine 
+
+- Necic acid: monoester \< diester \< macrocyclic diester
+
+- Modification of necine base: tertiary PA \< *N*-oxide \<\<
+ dehydropyrrolizidine.
+
+In summary, the validation results of the four methods are presented in
+the following table.
+
+Table 5 Results of the cross-validation of the four models and after
+y-randomisation
+
+ ----------------------------------------------------------------------
+ Accuracy CCR Sensitivity Specificity
+ ----------------------- ---------- ------- ------------- -------------
+ RF model 64.1% 64.4% 66.2% 62.6%
+
+ SVM model 62.1% 62.6% 65.0% 60.3%
+
+ DL model\ 59.3% 59.5% 89.2% 29.9%
+ (R-project)
+
+ DL model (TensorFlow) 68% 62.2% 69.9% 45.6%
+
+ y-randomisation 50.5% 50.4% 50.3% 50.6%
+ ----------------------------------------------------------------------
+
+CCR (correct classification rate)
+
+Discussion
+==========
+
+General model performance
+
+Based on the results of the cross-validation for all models, LAZAR, RF,
+SVM, DL (R-project) and DL (TensorFlow) it can be state that the
+prediction results are not optimal due to different reasons. The
+accuracy as measured during cross-validation of the four models (RF,
+SVM, DL (R-project and TensorFlow)) was partly low with CCR values
+between 59.3 and 68%, with the R-generated DL model and the
+TensorFlow-generated DL model showing the worst and the best
+performance, respectively. The validation of the R-generated DL model
+revealed a high sensitivity (89.2%) but an unacceptably low specificity
+of 29.9% indicating a high number of false positive estimates. The
+TensorFlow-generated DL model, however, showed an acceptable but not
+optimal accuracy of 68%, a sensitivity of 69.9% and a specificity of
+45.6%. The low specificity indicates that both DL models tends to
+predict too many instances as positive (genotoxic), and therefore have a
+high false positive rate. This allows at least with the TensorFlow
+generated DL model to make group statements, but the confidence for
+estimations of single PAs appears to be insufficiently low.
+
+Several factors have likely contributed to the low to moderate
+performance of the used methods as shown during the cross-validation:
+
+1. The outcome in the training dataset was based on the results of AMES
+ tests for genotoxicity [ICH 2011](#_ENREF_63)(), an *in vitro* test
+ in different strains of the bacteria *Salmonella typhimurium*. In
+ this test, mutagenicity is evaluated with and without prior
+ metabolic activation of the test substance. Metabolic activation
+ could result in the formation of genotoxic metabolites from
+ non-genotoxic parent compounds. However, no distinction was made in
+ the training dataset between substances that needed metabolic
+ activation before being mutagenic and those that were mutagenic
+ without metabolic activation. LAZAR is able to handle this
+ 'inaccuracy' in the training dataset well due to the way the
+ algorithm works: LAZAR predicts the genotoxic potential based on the
+ neighbours of substances with comparable structural features,
+ considering mutagenic and not mutagenic neighbours. Based on the
+ structural similarity, a probability for mutagenicity and no
+ mutagenicity is calculated independently from each other (meaning
+ that the sum of probabilities does not necessarily adds up to 100%).
+ The class with the higher outcome is then the overall outcome for
+ the substance.
+
+> In contrast, the other models need to be trained first to recognise
+> the structural features that are responsible for genotoxicity.
+> Therefore, the mixture of substances being mutagenic with and without
+> metabolic activation in the training dataset may have adversely
+> affected the ability to separate the dataset in two distinct classes
+> and thus explains the relatively low performance of these models.
+
+2. Machine learning algorithms try to find an optimized solution in a
+ high-dimensional (one dimension per each predictor) space. Sometimes
+ these methods do not find the global optimum of estimates but only
+ local (not optimal) solutions. Strategies to find the global
+ solutions are systematic variation (grid search) of the
+ hyperparameters of the methods, which may be very time consuming in
+ particular in large datasets.
+
+Mutagenicity of PAs
+
+Due to the low to moderate predictivity of all models, quantitative
+statement on the genotoxicity of single PAs cannot be made with
+sufficient confidence.
+
+The predictions of the SVM model did not fit with the other models or
+literature, and are therefore not further considered in the discussion.
+
+Necic acid
+
+The rank order of the necic acid is comparable in the four models
+considered (LAZAR, RF and DL (R-project and TensorFlow). PAs from the
+monoester type had the lowest genotoxic potential, followed by PAs from
+the open-ring diester type. PAs with macrocyclic diesters had the
+highest genotoxic potential. The result fit well with current state of
+knowledge: in general, PAs, which have a macrocyclic diesters as necic
+acid, are considered more toxic than those with an open-ring diester or
+monoester [EFSA 2011](#_ENREF_36)[Fu et al. 2004](#_ENREF_45)[Ruan et
+al. 2014b](#_ENREF_115)(; ; ).
+
+Necine base
+
+The rank order of necine base is comparable in LAZAR, RF, and DL
+(R-project) models: with platynecine being less or as genotoxic as
+retronecine, and otonecine being the most genotoxic. In the
+TensorFlow-generate DL model, platynecine also has the lowest genotoxic
+probability, but are then followed by the otonecines and last by
+retronecine. These results partly correspond to earlier published
+studies. Saturated PAs of the platynecine-type are generally accepted to
+be less or non-toxic and have been shown in *in vitro* experiments to
+form no DNA-adducts [Xia et al. 2013](#_ENREF_139)(). Therefore, it is
+striking, that 1,2-unsaturated PAs of the retronecine-type should have
+an almost comparable genotoxic potential in the LAZAR and DL (R-project)
+model. In literature, otonecine-type PAs were shown to be more toxic
+than those of the retronecine-type [Li et al. 2013](#_ENREF_80)().
+
+Modifications of necine base
+
+The group-specific results of the TensorFlow-generated DL model appear
+to reflect the expected relationship between the groups: the low
+genotoxic potential of *N*-oxides and the highest potential of
+dehydropyrrolizidines [Chen et al. 2010](#_ENREF_26)().
+
+In the LAZAR model, the genotoxic potential of dehydropyrrolizidines
+(DHP) (using the extended AD) is comparable to that of tertiary PAs.
+Since, DHP is regarded as the toxic principle in the metabolism of PAs,
+and known to produce protein- and DNA-adducts [Chen et al.
+2010](#_ENREF_26)(), the LAZAR model did not meet this expectation it
+predicted the majority of DHP as being not genotoxic. However, the
+following issues need to be considered. On the one hand, all DHP were
+outside of the stricter AD of 0.5. This indicates that in general, there
+might be a problem with the AD. In addition, DHP has two unsaturated
+double bounds in its necine base, making it highly reactive. DHP and
+other comparable molecules have a very short lifespan, and usually
+cannot be used in *in vitro* experiments. This might explain the absence
+of suitable neighbours in LAZAR.
+
+Furthermore, the probabilities for this substance groups needs to be
+considered, and not only the consolidated prediction. In the LAZAR
+model, all DHPs had probabilities for both outcomes (genotoxic and not
+genotoxic) mainly below 30%. Additionally, the probabilities for both
+outcomes were close together, often within 10% of each other. The fact
+that for both outcomes, the probabilities were low and close together,
+indicates a lower confidence in the prediction of the model for DHPs.
+
+In the DL (R-project) and RF model, *N*-oxides have a by far more
+genotoxic potential that tertiary PAs or dehydropyrrolizidines. As PA
+*N*-oxides are easily conjugated for extraction, they are generally
+considered as detoxification products, which are *in vivo* quickly
+renally eliminated [Chen et al. 2010](#_ENREF_26)(). On the other hand,
+*N*-oxides can be also back-transformed to the corresponding tertiary PA
+[Wang et al. 2005](#_ENREF_134)(). Therefore, it may be questioned,
+whether *N*-oxides themselves are generally less genotoxic than the
+corresponding tertiary PAs. However, in the groups of modification of
+the necine base, dehydropyrrolizidine, the toxic principle of PAs,
+should have had the highest genotoxic potential. Taken together, the
+predictions of the modifications of the necine base from the LAZAR, RF
+and R-generated DL model cannot -- in contrast to the TensorFlow DL
+model - be considered as reliable.
+
+Overall, when comparing the prediction results of the PAs to current
+published knowledge, it can be concluded that the performance of most
+models was low to moderate. This might be contributed to the following
+issues:
+
+1. In the LAZAR model, only 26.6% PAs were within the stricter AD. With
+ the extended AD, 92.3% of the PAs could be included in the
+ prediction. Even though the Jaccard distance between the training
+ dataset and the PA dataset for the RF, SVM, and DL (R-project and
+ TensorFlow) models was small, suggesting a high similarity, the
+ LAZAR indicated that PAs have only few local neighbours, which might
+ adversely affect the prediction of the mutagenic potential of PAs.
+
+2. All above-mentioned models were used to predict the mutagenicity of
+ PAs. PAs are generally considered to be genotoxic, and the mode of
+ action is also known. Therefore, the fact that some models predict
+ the majority of PAs as not genotoxic seems contradictory. To
+ understand this result, the basis, the training dataset, has to be
+ considered. The mutagenicity of in the training dataset are based on
+ data of mutagenicity in bacteria. There are some studies, which show
+ mutagenicity of PAs in the AMES test [Chen et al.
+ 2010](#_ENREF_26)(). Also, [Rubiolo et al. (1992)](#_ENREF_116)
+ examined several different PAs and several different extracts of
+ PA-containing plants in the AMES test. They found that the AMES test
+ was indeed able to detect mutagenicity of PAs, but in general,
+ appeared to have a low sensitivity. The pre-incubation phase for
+ metabolic activation of PAs by microsomal enzymes was the
+ sensitivity-limiting step. This could very well mean that this is
+ also reflected in the QSAR models.
+
+Conclusions
+===========
+
+In this study, an attempt was made to predict the genotoxic potential of
+PAs using five different machine learning techniques (LAZAR, RF, SVM, DL
+(R-project and TensorFlow). The results of all models fitted only partly
+to the findings in literature, with best results obtained with the
+TensorFlow DL model. Therefore, modelling allows statements on the
+relative risks of genotoxicity of the different PA groups. Individual
+predictions for selective PAs appear, however, not reliable on the
+current basis of the used training dataset.
+
+This study emphasises the importance of critical assessment of
+predictions by QSAR models. This includes not only extensive literature
+research to assess the plausibility of the predictions, but also a good
+knowledge of the metabolism of the test substances and understanding for
+possible mechanisms of toxicity.
+
+In further studies, additional machine learning techniques or a modified
+(extended) training dataset should be used for an additional attempt to
+predict the genotoxic potential of PAs.
+
+References
+==========
+
+[]{#_ENREF_4 .anchor}
+
+[]{#_ENREF_8 .anchor}
+
+[]{#_ENREF_17 .anchor}
+
+[]{#_ENREF_18 .anchor}
+
+[]{#_ENREF_20 .anchor}
+
+[]{#_ENREF_26 .anchor}
+
+[]{#_ENREF_33 .anchor}
+
+[]{#_ENREF_36 .anchor}
+
+[]{#_ENREF_38 .anchor}
+
+[]{#_ENREF_39 .anchor}
+
+[]{#_ENREF_45 .anchor}
+
+[]{#_ENREF_48 .anchor}
+
+[]{#_ENREF_57 .anchor}
+
+[]{#_ENREF_59 .anchor}
+
+[]{#_ENREF_63 .anchor}
+
+[]{#_ENREF_65 .anchor}
+
+[]{#_ENREF_71 .anchor}
+
+[]{#_ENREF_76 .anchor}
+
+[]{#_ENREF_78 .anchor}
+
+[]{#_ENREF_80 .anchor}
+
+[]{#_ENREF_82 .anchor}
+
+[]{#_ENREF_99 .anchor}
+
+[]{#_ENREF_104 .anchor}
+
+<https://openbabel.org/docs/dev/Fingerprints/intro.html>
+
+[]{#_ENREF_115 .anchor}
+
+[]{#_ENREF_116 .anchor}
+
+[]{#_ENREF_117 .anchor}
+
+[]{#_ENREF_119 .anchor}
+
+[]{#_ENREF_126 .anchor}
+
+[]{#_ENREF_134 .anchor}
+
+[]{#_ENREF_138 .anchor}
+
+[]{#_ENREF_139 .anchor}
+
+[]{#_ENREF_140 .anchor}
+
+[]{#_ENREF_142 .anchor}
+
+[]{#_ENREF_143
+.anchor}<http://www.yapcwsoft.com/dd/padeldescriptor/Descriptors.xls>
+
+[]{#_ENREF_148 .anchor}
+
+Aguer C, Gambarotta D, Mailloux RJ, Moffat C, Dent R, et al. 2011.
+Galactose enhances oxidative metabolism and reveals mitochondrial
+dysfunction in human primary muscle cells. PLoS One 6:e28536Ahmed SN,
+Siddiqi ZA. 2006. Antiepileptic drugs and liver disease. Seizure
+15:156-64Aleo MD, Luo Y, Swiss R, Bonin PD, Potter DM, Will Y. 2014.
+Human drug-induced liver injury severity is highly associated with dual
+inhibition of liver mitochondrial function and bile salt export pump.
+Hepatology (Baltimore, Md) 60:1015-22ANZFA. 2001. Pyrrolizidine
+alkaloids in food. A Toxicological Review and Risk Assessment. ed.
+Authority, ANZF, pp. 1-16Armstrong SJ, Zuckerman AJ, Bird RG. 1972.
+Induction of morphological changes in human embryo liver cells by the
+pyrrolizidine alkaloid lasiocarpine. British journal of experimental
+pathology 53:145-9Barysz M, Jashari G, Lall RS, Srivastava AK,
+Trinajstic N. 1983. On the distance matrix of molecules containing
+heteroatoms. In *Chemical Applications of Topology and Graph Theory*,
+pp. 222-30. Amsterdam, The Netherlands: ElsevierBasak SC, Harriss DK,
+Magnuson VR. Comparative Study of Lipophilicity \<em\>versus\</em\>
+Topological Molecular Descriptors in Biological Correlations. Journal of
+Pharmaceutical Sciences 73:429-37Bender A, Mussa HY, Glen RC, Reiling S.
+2004. Molecular similarity searching using atom environments,
+information-based feature selection, and a naive Bayesian classifier. J
+Chem Inf Comput Sci 44:170-8Benichou C, Danan G, Flahault A. 1993.
+Causality assessment of adverse reactions to drugs\--II. An original
+model for validation of drug causality assessment methods: case reports
+with positive rechallenge. J Clin Epidemiol 46:1331-6Bergmeir C, Benítez
+JM. 2012. Neural Networks in R Using the Stuttgart Neural Network
+Simulator: RSNNS. Journal of Statistical Software 46:1-26Bishop-Bailey
+D, Thomson S, Askari A, Faulkner A, Wheeler-Jones C. 2014.
+Lipid-metabolizing CYPs in the regulation and dysregulation of
+metabolism. Annu Rev Nutr 34:261-79Blower PE, Cross KP. 2006. Decision
+Tree Methods in Pharmaceutical Research. Current topics in medicinal
+chemistry 6:31-9Boelsterli UA, Lee KK. 2014. Mechanisms of
+isoniazid-induced idiosyncratic liver injury: emerging role of
+mitochondrial stress. Journal of gastroenterology and hepatology
+29:678-87Bramer M. 2013. Principles of Data Mining. p. 444:
+Springer-VerlagBreimann L. 2001. Random Forests. Machine Learning
+45:5-32Breimann L. 2003. Manual-Setting Up, Using, And Understanding
+Random Forests V4.0.1-33Bull LB, Dick AT. 1959. The chronic pathological
+effects on the liver of the rat of the pyrrolizidine alkaloids
+heliotrine, lasiocarpine and their N-oxides. J Path Bact 78:483-502Bull
+LB, Dick AT, McKenzie JS. 1958. The actue toxic effects of heliotrine
+and lasiocarpine, and their N-oxides, on the rat. J Path Bact
+75:17-25Burden FR. 1989. Molecular identification number for
+substructure searches. Journal of Chemical Information and Computer
+Sciences 29:225-7Butler WH, Mattocks AR, Barnes JM. 1970. Lesions in the
+liver and lungs of rats given pyrrole derivates of pyrrolizidine
+alkaloids. J Path 100:169-75Chai J, He Y, Cai SY, Jiang Z, Wang H, et
+al. 2012. Elevated hepatic multidrug resistance-associated protein
+3/ATP-binding cassette subfamily C 3 expression in human obstructive
+cholestasis is mediated through tumor necrosis factor alpha and c-Jun
+NH2-terminal kinase/stress-activated protein kinase-signaling pathway.
+Hepatology 55:1485-94Chalhoub WM, Sliman KD, Arumuganathan M, Lewis JH.
+2014. Drug-induced liver injury: what was new in 2013? Expert Opin Drug
+Metab Toxicol 10:959-80Chawla NV, Bowyer KW, Hall LO. 2002. SMOTE:
+Synthetic Minority Over-sampling Technique. Journal of Artificial
+Intelligence Research 16:321--57Chen M, Borlak J, Tong W. 2013. High
+lipophilicity and high daily dose of oral medications are associated
+with significant risk for drug-induced liver injury. Hepatology
+(Baltimore, Md) 58:388-96Chen M, Suzuki A, Thakkar S, Yu K, Hu C, Tong
+W. 2016. DILIrank: the largest reference drug list ranked by the risk
+for developing drug-induced liver injury in humans. Drug Discov Today
+21:648-53Chen T, Mei N, Fu PP. 2010. Genotoxicity of pyrrolizidine
+alkaloids. J Appl Toxicol 30:183-96Crabtree HG. 1928. The carbohydrate
+metabolism of certain pathological overgrowths Biochem J 22:1289-98Daly
+AK, Donaldson PT, Bhatnagar P, Shen Y, Pe\'er I, et al. 2009.
+HLA-B\*5701 genotype is a major determinant of drug-induced liver injury
+due to flucloxacillin. Nature genetics 41:816-9Danan G, Benichou C.
+1993. Causality assessment of adverse reactions to drugs\--I. A novel
+method based on the conclusions of international consensus meetings:
+application to drug-induced liver injuries. J Clin Epidemiol
+46:1323-30Dar AC, Shokat KM. 2011. The evolution of protein kinase
+inhibitors from antagonists to agonists of cellular signaling. Annu Rev
+Biochem 80:769-95de Wildt SN, Kearns GL, Leeder JS, van den Anker JN.
+1999. Cytochrome P450 3A: ontogeny and drug disposition. Clin
+Pharmacokinet 37:485-505DeLeve LD, Ito Y, Bethea NW, McCuskey MK, Wang
+X, McCuskey RS. 2003. Embolization by sinusoidal lining cells obstructs
+the microcirculation in rat sinusoidal obstruction syndrome. Am J
+Physiol Gastrointest Liver Physiol 284:G1045--G52DeLeve LD, Wang X,
+Kuhlenkamp JF, Kaplowitz N. 1996. Toxicity of Azathioprine and
+Monocrotaline in Murine Sinusoidal Endothelial Cells and Hepatocytes:
+The Role of Glutathione and Relevance to Hepatic Venoocclusive Disease.
+Hepatology 23:589-99Dong H, Haining RL, Thummel KE, Rettie AE, Nelson
+SD. 2000. Involvement of human cytochrome P450 2D6 in the bioactivation
+of acetaminophen. Drug Metab Dispos 28:1397-400Doostdar H, Grant MH,
+Melvin WT, Wolf CR, Burke MD. 1993. The effects of inducing agents on
+cytochrome P450 and UDP-glucuronyltransferase activities in human HEPG2
+hepatoma cells. Biochemical pharmacology 46:629-35EFSA. 2011. Scientific
+Opinion on Pyrrolizidine alkaloids in food and feed. EFSA Journal
+9:1-134Ekins S, Williams AJ, Xu JJ. 2010. A predictive ligand-based
+Bayesian model for human drug-induced liver injury. Drug Metab. Dispos.
+38:2302-8EMA. 2014. EMA/HMPC/893108/2011: Public statement on the use of
+herbal medicinal products containing toxic, unsaturated pyrrolizidine
+alkaloids (PAs).1-24EMA. 2016. EMA/HMPC/328782/2016: Public statement on
+contamination of herbal medicinal products/traditional herbal medicinal
+products with pyrrolizidine alkaloids.1-11Fashe MM, Juvonen RO, Petsalo
+A, Vepsalainen J, Pasanen M, Rahnasto-Rilla M. 2015. In silico
+prediction of the site of oxidation by cytochrome P450 3A4 that leads to
+the formation of the toxic metabolites of pyrrolizidine alkaloids. Chem
+Res Toxicol 28:702-10Field RA, Stegelmeier BL, Colegate SM, Brown AW,
+Green BT. 2015. An in vitro comparison of the cytotoxic potential of
+selected dehydropyrrolizidine alkaloids and some N-oxides. Toxicon
+97:36-45Fleming I. 2014. The pharmacology of the cytochrome P450
+epoxygenase/soluble epoxide hydrolase axis in the vasculature and
+cardiovascular disease. Pharmacol Rev 66:1106-40Fonti V. 2017. *Feature
+Selection using LASSO*. Research paper. VU Amsterdam. 26 pp.Fu PP, Chou
+MW, Churchwell M, Wang Y, Zhao Y, et al. 2010. High-Performance Liquid
+Chromatography Electrospray Ionization Tandem Mass Spectrometry for the
+Detection and Quantitation of Pyrrolizidine Alkaloid-Derived DNA Adducts
+in Vitro and in Vivo. Chem Res Toxicol 23:637--52Fu PP, Xia Q, Lin G,
+Chou MW. 2004. Pyrrolizidine alkaloids\--genotoxicity, metabolism
+enzymes, metabolic activation, and mechanisms. Drug Metab Rev
+36:1-55Galeotti N, Vivoli E, Bilia AR, Vincieri FF, Ghelardini C. 2010.
+St. John\'s wort reduces neuropathic pain through a hypericin-mediated
+inhibition of the protein kinase Cgamma and epsilon activity. Biochem
+Pharmacol 79:1327-36Ganesan S, Tekwani BL, Sahu R, Tripathi LM, Walker
+LA. 2009. Cytochrome P(450)-dependent toxic effects of primaquine on
+human erythrocytes. Toxicol Appl Pharmacol 241:14-22Gao H, Ruan JQ, Chen
+J, Li N, Ke CQ, et al. 2015. Blood pyrrole-protein adducts as a
+diagnostic and prognostic index in pyrrolizidine alkaloid-hepatic
+sinusoidal obstruction syndrome. Drug Des Devel Ther 9:4861-8Gitlin N.
+1980. Salicylate hepatotoxicity: the potential role of hypoalbuminemia.
+J Clin Gastroenterol 2:281-5Gordon GJ, Coleman WB, Grisham JW. 2000.
+Bax-mediated apoptosis in the livers of rats after partial hepatectomy
+in the retrorsine model of hepatocellular injury. Hepatology
+32:312-20Gradhand U, Lang T, Schaeffeler E, Glaeser H, Tegude H, et al.
+2008. Variability in human hepatic MRP4 expression: influence of
+cholestasis and genotype. Pharmacogenomics J 8:42-52Gramatica P, Corradi
+M, Consonni V. 2000. Modelling and prediction of soil sorption
+coefficients of non-ionic organic pesticides by molecular descriptors.
+Chemosphere 41:763-77Greene N, Fisk L, Naven RT, Note RR, Patel ML,
+Pelletier DJ. 2010. Developing structure-activity relationships for the
+prediction of hepatotoxicity. Chemical Research in Toxicology
+23:1215-22Guo YX, Xu XF, Zhang QZ, Li C, Deng Y, et al. 2015. The
+inhibition of hepatic bile acids transporters Ntcp and Bsep is involved
+in the pathogenesis of isoniazid/rifampicin-induced hepatotoxicity.
+Toxicology mechanisms and methods 25:382-7Hall LH, Kier LB. 1995.
+Electrotopological State Indices for Atom Types: A Novel Combination of
+Electronic, Topological, and Valence State Information. Journal of
+Chemical Information and Computer Sciences 35:1039-45Hammann F, Schoning
+V, Drewe J. 2018. Prediction of clinically relevant drug-induced liver
+injury from structure using machine learning. J Appl Toxicol Hansen K,
+Mika S, Schroeter T, Sutter A, ter Laak A, et al. 2009. Benchmark data
+set for in silico prediction of Ames mutagenicity. J Chem Inf Model
+49:2077-81Hartmann T, Ehmke A, Eilert U, yon Borstel K, Thcuring C.
+1989. Sites of synthesis, translocation and accumulation of
+pyrrolizidine alkaloid N-oxides in Senecio vulgaris L. Planta
+177:98-107Hartmann T, Witte L. 1995. Chemistry, Biology and Chemoecology
+of the Pyrrolizidine Alkaloids. In *Alkaloids: Chemical and Biological
+Perspectives*, ed. Pelletier, pp. 155-233. Pergamon, London, New
+YorkHessel S, Gottschalk C, Schumann D, These A, Preiss-Weigert A,
+Lampen A. 2014. Structure-activity relationship in the passage of
+different pyrrolizidine alkaloids through the gastrointestinal barrier:
+ABCB1 excretes heliotrine and echimidine. Mol Nutr Food Res
+58:995-1004Hunt CM, Westerkam WR, Stave GM. 1992. Effect of age and
+gender on the activity of human hepatic CYP3A. Biochemical pharmacology
+44:275-83Ibanez L, Perez E, Vidal X, Laporte JR, Grup d\'Estudi
+Multicenteric d\'Hepatotoxicitat Aguda de B. 2002. Prospective
+surveillance of acute serious liver disease unrelated to infectious,
+obstructive, or metabolic diseases: epidemiological and clinical
+features, and exposure to drugs. J Hepatol 37:592-600ICH. 2011.
+Guideance on genotoxicity testing and data interpretation for
+pharmaceuticals intended for human use S2(R1). p. 29Iyer VV, Yang H,
+Ierapetritou MG, Roth CM. 2010. Effects of glucose and insulin on
+HepG2-C3A cell metabolism. Biotechnol Bioeng 107:347-56Jago MV. 1971.
+Factors affecting the chronic hepatotoxicity of pyrrolizidine alkaloids.
+The Journal of Pathology 105:1-11Jeon JY, Sparreboom A, Baker SD. 2017.
+Kinase Inhibitors: The Reality Behind the Success. Clin Pharmacol Ther
+102:726-30Jeong W, Doroshow JH, Kummar S. 2013. United States Food and
+Drug Administration approved oral kinase inhibitors for the treatment of
+malignancies. Curr Probl Cancer 37:110-44Ji L, Chen Y, Liu T, Wang Z.
+2008. Involvement of Bcl-xL degradation and mitochondrial-mediated
+apoptotic pathway in pyrrolizidine alkaloids-induced apoptosis in
+hepatocytes. Toxicol Appl Pharmacol 231:393-400Jornil J, Nielsen TS,
+Rosendal I, Ahlner J, Zackrisson AL, et al. 2013. A poor metabolizer of
+both CYP2C19 and CYP2D6 identified by mechanistic pharmacokinetic
+simulation in a fatal drug poisoning case involving venlafaxine.
+Forensic Sci Int 226:e26-31Kalthoff S, Ehmer U, Freiberg N, Manns MP,
+Strassburg CP. 2010. Interaction between oxidative stress sensor Nrf2
+and xenobiotic-activated aryl hydrocarbon receptor in the regulation of
+the human phase II detoxifying UDP-glucuronosyltransferase 1A10. J Biol
+Chem 285:5993-6002Kazius J, McGuire R, Bursi R. 2005. Derivation and
+validation of toxicophores for mutagenicity prediction. J Med Chem
+48:312-20Khan D, Khan AU. 2016. Descriptors and their selection methods
+in QSAR analysis: paradigm for drug design. Drug Discov Today
+21:1291-302Kim HY, Stermitz FR, Molyneux RJ, Wilson DW, Taylor D,
+Coulombe RA, Jr. 1993. Structural influences on pyrrolizidine
+alkaloid-induced cytopathology. Toxicol Appl Pharmacol 122:61-9Kock K,
+Ferslew BC, Netterberg I, Yang K, Urban TJ, et al. 2014. Risk factors
+for development of cholestatic drug-induced liver injury: inhibition of
+hepatic basolateral bile acid transporters multidrug
+resistance-associated proteins 3 and 4. Drug Metab Dispos
+42:665-74Lammert C, Einarsson S, Saha C, Niklasson A, Bjornsson E,
+Chalasani N. 2008. Relationship between daily dose of oral medications
+and idiosyncratic drug-induced liver injury: search for signals.
+Hepatology 47:2003-9Langel D, Ober D, Pelser PB. 2011. The evolution of
+pyrrolizidine alkaloid biosynthesis and diversity in the Senecioneae.
+Phytochemistry Reviews 10:3-74Lasser KE, Allen PD, Woolhandler SJ,
+Himmelstein DU, Wolfe SM, Bor DH. 2002. Timing of new black box warnings
+and withdrawals for prescription medications. JAMA 287:2215-20Li N, Xia
+Q, Ruan J, Fu PP, Lin G. 2011. Hepatotoxicity and Tumorigenicity Induced
+by Metabolic Activation of Pyrrolizidine Alkaloids in Herbs. Current
+Drug Metabolism 12Li X, Cameron MD. 2012. Potential role of a quetiapine
+metabolite in quetiapine-induced neutropenia and agranulocytosis. Chem
+Res Toxicol 25:1004-11Li YH, Kan WL, Li N, Lin G. 2013. Assessment of
+pyrrolizidine alkaloid-induced toxicity in an in vitro screening model.
+J Ethnopharmacol 150:560-7Lima A, Bernardes M, Azevedo R, Medeiros R,
+Seabra V. 2015. Pharmacogenomics of Methotrexate Membrane Transport
+Pathway: Can Clinical Response to Methotrexate in Rheumatoid Arthritis
+Be Predicted? Int J Mol Sci 16:13760-80Lin G. 1998. Microsomal Formation
+of a Pyrrolic Alcohol Glutathione Conjugate of ClivorineFirm Evidence
+for the Formation of a Pyrrolic Metabolite of an Otonecine-Type
+Pyrrolizidine Alkaloid. Drug Metabolism and Disposition
+26:181-4Lindigkeit R, Biller A, Buch M, Schiebel H-M, Boppré M, Hartmann
+T. 1997. The two faces of pyrrolizidine alkaloids: the role of the
+tertiary amine and its N-oxide in chemical defense of insects with
+acquired plant alkaloids. Eur J Biochem 245Makhlouf HA, Helmy A, Fawzy
+E, El-Attar M, Rashed HA. 2008. A prospective study of antituberculous
+drug-induced hepatotoxicity in an area endemic for liver diseases.
+Hepatol Int 2:353-60Marin-Hernandez A, Rodriguez-Enriquez S,
+Vital-Gonzalez PA, Flores-Rodriguez FL, Macias-Silva M, et al. 2006.
+Determining and understanding the control of glycolysis in fast-growth
+tumor cells. Flux control by an over-expressed but strongly
+product-inhibited hexokinase. FEBS J 273:1975-88Marroquin LD, Hynes J,
+Dykens JA, Jamieson JD, Will Y. 2007. Circumventing the Crabtree effect:
+replacing media glucose with galactose increases susceptibility of HepG2
+cells to mitochondrial toxicants. Toxicol Sci 97:539-47Mattocks AR.
+1986. *Chemistry and Toxicology of Pyrrolizidine Alkaloids*: Academic
+PressMeharena HS, Chang P, Keshwani MM, Oruganty K, Nene AK, et al.
+2013. Deciphering the structural basis of eukaryotic protein kinase
+regulation. PLoS Biol 11:e1001680Merz KH, Schrenk D. 2016. Interim
+relative potency factors for the toxicological risk assessment of
+pyrrolizidine alkaloids in food and herbal medicines. Toxicol Lett
+263:44-57Miners JO, Birkett DJ. 1998. Cytochrome P4502C9: an enzyme of
+major importance in human drug metabolism. British Journal of Clinical
+Pharmacology 45:525-38Mingard C, Paech F, Bouitbir J, Krahenbuhl S.
+2018. Mechanisms of toxicity associated with six tyrosine kinase
+inhibitors in human hepatocyte cell lines. J Appl Toxicol
+38:418-31Mingatto FE, Dorta DJ, dos Santos AB, Carvalho I, da Silva CH,
+et al. 2007. Dehydromonocrotaline inhibits mitochondrial complex I. A
+potential mechanism accounting for hepatotoxicity of monocrotaline.
+Toxicon 50:724-30Mitchell JB. 2014. Machine learning methods in
+chemoinformatics. Wiley Interdiscip Rev Comput Mol Sci 4:468-81Morgan
+RE, Trauner M, van Staden CJ, Lee PH, Ramachandran B, et al. 2010.
+Interference with bile salt export pump function is a susceptibility
+factor for human liver injury in drug development. Toxicol Sci
+118:485-500Muegge I, Mukherjee P. 2016. An overview of molecular
+fingerprint similarity search in virtual screening. Expert Opin Drug
+Discov 11:137-48Najibi A, Heidari R, Zarifi J, Jamshidzadeh A,
+Firoozabadi N, Niknahad H. 2016. Evaluating the Role of Drug Metabolism
+and Reactive Intermediates in Trazodone-Induced Cytotoxicity toward
+Freshly-Isolated Rat Hepatocytes. Drug Res (Stuttg) 66:592-6Nantasenamat
+C, Isarankura-Na-Ayudhya C, Naenna T, Prachayasittikul V. 2009. A
+Practical Overview of Quantitative Structure-Activity Relationship.
+EXCLI Journal 8:74-88National Cancer Institute. 2006. Common Terminology
+Criteria for Adverse Events v3.0 (CTCAE). ed. Program, CTENeumann MG,
+Cohen LB, Opris M, Nanau R, Jeong H. 2015. Hepatotoxicity of
+Pyrrolizidine Alkaloids. J Pharm Pharm Sci 18:825-43Newby D, Freitas AA,
+Ghafourian T. 2015. Decision trees to characterise the roles of
+permeability and solubility on the prediction of oral absorption. Eur J
+Med Chem 90:751-65Niederer C, Behra R, Harder A, Schwarzenbach RP,
+Escher BI. 2004. Mechanistic approaches for evaluating the toxicity of
+reactive organochlorines and epoxides in green algae. Environmental
+Toxicology and Chemistry 23:697-704NTP. 1978. Bioassay of lasiocarpine
+for possible carcinogenicity. pp. 1-82NTP. 2003. Toxicology and
+Carcinogenesis Studies of Riddelliine (CAS No. 23246-96-0) in F344/N
+Rats And B6c3F~1~ Mice (Gavage Studies). ed. Health, NIoO\'Boyle NM,
+Banck M, James CA, Morley C, Vandermeersch T, Hutchison GR. 2011. Open
+Babel: An open chemical toolbox. J Cheminform 3:33Open Babel community.
+2011. *Molecular fingerprints and similarity searching --- Open Babel
+v2.3.1 documentation. Openbabel.org*. , Dececmber 31, 2018Paech F,
+Bouitbir J, Krahenbuhl S. 2017. Hepatocellular Toxicity Associated with
+Tyrosine Kinase Inhibitors: Mitochondrial Damage and Inhibition of
+Glycolysis. Front Pharmacol 8:367Parkinson A, Mudra DR, Johnson C, Dwyer
+A, Carroll KM. 2004. The effects of gender, age, ethnicity, and liver
+cirrhosis on cytochrome P450 enzyme activity in human liver microsomes
+and inducibility in cultured human hepatocytes. Toxicol Appl Pharmacol
+199:193-209Pellinen P, Honkakoski P, Stenback F, Niemitz M, Alhava E, et
+al. 1994. Cocaine N-demethylation and the metabolism-related
+hepatotoxicity can be prevented by cytochrome P450 3A inhibitors. Eur J
+Pharmacol 270:35-43Regev A, Seeff LB, Merz M, Ormarsdottir S, Aithal GP,
+et al. 2014. Causality assessment for suspected DILI during clinical
+phases of drug development. Drug Saf 37 Suppl 1:S47-56Rendic S. 2002.
+Summary of information on human CYP enzymes: human P450 metabolism data.
+Drug Metab Rev 34:83-448Reuben A, Koch DG, Lee WM, Acute Liver Failure
+Study G. 2010. Drug-induced acute liver failure: results of a U.S.
+multicenter, prospective study. Hepatology 52:2065-76Rodrigues AC. 2010.
+Efflux and uptake transporters as determinants of statin response.
+Expert Opin Drug Metab Toxicol 6:621-32Roskoski R, Jr. 2015. A
+historical overview of protein kinases and their targeted small molecule
+inhibitors. Pharmacol Res 100:1-23Ruan J, Liao C, Ye Y, Lin G. 2014a.
+Lack of metabolic activation and predominant formation of an excreted
+metabolite of nontoxic platynecine-type pyrrolizidine alkaloids. Chem
+Res Toxicol 27:7-16Ruan J, Yang M, Fu P, Ye Y, Lin G. 2014b. Metabolic
+activation of pyrrolizidine alkaloids: insights into the structural and
+enzymatic basis. Chem Res Toxicol 27:1030-9Rubiolo P, Pieters L, Calomme
+M, Bicchi C, Vlietinck A, Vanden Berghe D. 1992. Mutagenicity of
+pyrrolizidine alkaloids in the Salmonella typhimurium/mammalian
+microsome system. Mutat Res 281:143-7Rücker C, Rücker G, Meringer M.
+2007. y-Randomization and Its Variants in QSPR/QSAR. J. Chem. Inf.
+Model. 47:2345-57Schoental R, Head MA. 1957. Progression of liver
+lesions produced in rats by temporary treatment with pyrrolizidine
+(senecio) alkaloids, and the effects of betaine and high casein diet. Br
+J Cancer 11:535-44Schöning V, Hammann F, Peinl M, Drewe J. 2017.
+Editor\'s Highlight: Identification of Any Structure-Specific
+Hepatotoxic Potential of Different Pyrrolizidine Alkaloids Using Random
+Forests and Artificial Neural Networks. Toxicol Sci 160:361-70Shah RR,
+Morganroth J, Shah DR. 2013. Hepatotoxicity of tyrosine kinase
+inhibitors: clinical and regulatory perspectives. Drug Saf
+36:491-503Spjuth O, Alvarsson J, Berg A, Eklund M, Kuhn S, et al. 2009.
+Bioclipse 2: A scriptable integration platform for the life sciences.
+BMC Bioinformatics 10:1-5Spjuth O, Helmus T, Willighagen EL, Kuhn S,
+Eklund M, et al. 2007. Bioclipse: an open source workbench for chemo-
+and bioinformatics. BMC Bioinformatics 8:1-10Srinivas N, Sandeep KS,
+Anusha Y, Devendra BN. 2014. In Vitro Cytotoxic Evaluation and
+Detoxification of Monocrotaline (Mct) Alkaloid: An In Silico Approach.
+International Invention Journal of Biochemistry and Bioinformatics
+2:20-9Stine JG, Chalasani NP. 2017. Drug Hepatotoxicity: Environmental
+Factors. Clin Liver Dis 21:103-13Stine JG, Lewis JH. 2011. Drug-induced
+liver injury: a summary of recent advances. Expert Opin Drug Metab
+Toxicol 7:875-90Takanashi H, Umeda M, Hirono I. 1980. Chromosomal
+aberrations and mutations in cultured mammalidan cells induced by
+pyrrolizidine alkaloids. Mutation Research 78:67-77Takeda M, Okamoto I,
+Nakagawa K. 2015. Pooled safety analysis of EGFR-TKI treatment for EGFR
+mutation-positive non-small cell lung cancer. Lung Cancer 88:74-9Tamta
+H, Pawar RS, Wamer WG, Grundel E, Krynitsky AJ, Rader JI. 2012.
+Comparison of metabolism-mediated effects of pyrrolizidine alkaloids in
+a HepG2/C3A cell-S9 co-incubation system and quantification of their
+glutathione conjugates. Xenobiotica 42:1038-48Teh LK, Bertilsson L.
+2012. Pharmacogenomics of CYP2D6: molecular genetics, interethnic
+differences and clinical importance. Drug Metab Pharmacokinet
+27:55-67Teo YL, Ho HK, Chan A. 2013. Risk of tyrosine kinase
+inhibitors-induced hepatotoxicity in cancer patients: a meta-analysis.
+Cancer Treat Rev 39:199-206Teo YL, Ho HK, Chan A. 2015. Formation of
+reactive metabolites and management of tyrosine kinase inhibitor-induced
+hepatotoxicity: a literature review. Expert Opin Drug Metab Toxicol
+11:231-42Thompson RA, Isin EM, Ogese MO, Mettetal JT, Williams DP. 2016.
+Reactive Metabolites: Current and Emerging Risk and Hazard Assessments.
+Chem Res Toxicol 29:505-33Walker K, Ginsberg G, Hattis D, Johns DO,
+Guyton KZ, Sonawane B. 2009. Genetic polymorphism in N-Acetyltransferase
+(NAT): Population distribution of NAT1 and NAT2 activity. Journal of
+toxicology and environmental health. Part B, Critical reviews
+12:440-72Wang YP, Yan J, Fu PP, Chou MW. 2005. Human liver microsomal
+reduction of pyrrolizidine alkaloid N-oxides to form the corresponding
+carcinogenic parent alkaloid. Toxicol Lett 155:411-20Weininger D. 1988.
+SMILES, a chemical language and information system. 1. Introduction to
+methodology and encoding rules. J Chem Inf Comput Sci 28:31-6Westerink
+WM, Schoonen WG. 2007. Phase II enzyme levels in HepG2 cells and
+cryopreserved primary human hepatocytes and their induction in HepG2
+cells. Toxicol In Vitro 21:1592-602Wu P, Nielsen TE, Clausen MH. 2015.
+FDA-approved small-molecule kinase inhibitors. Trends Pharmacol Sci
+36:422-39Xia Q, Ma L, He X, Cai L, Fu PP. 2015. 7-glutathione pyrrole
+adduct: a potential DNA reactive metabolite of pyrrolizidine alkaloids.
+Chem Res Toxicol 28:615-20Xia Q, Zhao Y, Von Tungeln LS, Doerge DR, Lin
+G, et al. 2013. Pyrrolizidine alkaloid-derived DNA adducts as a common
+biological biomarker of pyrrolizidine alkaloid-induced tumorigenicity.
+Chem Res Toxicol 26:1384-96Yan J, Xia Q, Chou MW, Fu P. 2008. Metabolic
+activation of retronecine and retronecine N-oxide -- formation of
+DHP-derived DNA adducts. Toxicology and Industrial Health 24Yang X, Li
+W, Sun Y, Guo X, Huang W, et al. 2017. Comparative Study of
+Hepatotoxicity of Pyrrolizidine Alkaloids Retrorsine and Monocrotaline.
+Chem Res Toxicol 30:532-9Yap CW. 2011. PaDEL-descriptor: an open source
+software to calculate molecular descriptors and fingerprints. Journal of
+computational chemistry 32:1466-74Yap CW. 2014. *Descriptors*. ,
+27.10.2016Yu K, Geng X, Chen M, Zhang J, Wang B, et al. 2014a. High
+daily dose and being a substrate of cytochrome P450 enzymes are two
+important predictors of drug-induced liver injury. Drug Metab Dispos
+42:744-50Yu K, Geng X, Chen M, Zhang J, Wang B, et al. 2014b. High daily
+dose and being a substrate of cytochrome P450 enzymes are two important
+predictors of drug-induced liver injury. Drug Metab. Dispos.
+42:744-50Zanger UM, Turpeinen M, Klein K, Schwab M. 2008. Functional
+pharmacogenetics/genomics of human cytochromes P450 involved in drug
+biotransformation. Anal Bioanal Chem 392:1093-108Zhang J, Sheng Y, Shi
+L, Zheng Z, Chen M, et al. 2017. Quercetin and baicalein suppress
+monocrotaline-induced hepatic sinusoidal obstruction syndrome in rats.
+Eur J Pharmacol 795:160-8Zhao Y, Xia Q, Gamboa da Costa G, Yu H, Cai L,
+Fu PP. 2012. Full structure assignments of pyrrolizidine alkaloid DNA
+adducts and mechanism of tumor initiation. Chem Res Toxicol
+25:1985-96Zheng Z, Shi L, Sheng Y, Zhang J, Lu B, Ji L. 2016.
+Chlorogenic acid suppresses monocrotaline-induced sinusoidal obstruction
+syndrome: The potential contribution of NFkappaB, Egr1, Nrf2, MAPKs and
+PI3K signals. Environ Toxicol Pharmacol 46:80-9Zhu XW, Xin YJ, Ge HL.
+2015. Recursive Random Forests Enable Better Predictive Performance and
+Model Interpretation than Variable Selection by LASSO. J Chem Inf Model
+55:736-46
diff --git a/paper/LICENSE b/paper/LICENSE
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/paper/LICENSE
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/paper/Makefile b/paper/Makefile
new file mode 100644
index 0000000..a5c9bbc
--- /dev/null
+++ b/paper/Makefile
@@ -0,0 +1,102 @@
+## The path to the directory in which this file resides. This allows users to
+## include this Makefile into theirs and to reuse all rules, given that they set
+## this variable to the correct value.
+PANDOC_SCHOLAR_PATH ?= $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+
+# include local makefile to allow easy overwriting of variables
+-include local.mk
+include $(PANDOC_SCHOLAR_PATH)/pandoc-options.inc.mk
+
+LUA_FILTERS_PATH ?= $(PANDOC_SCHOLAR_PATH)/lua-filters
+
+# Configuration (overwrite using Makefile.local.in if necessary)
+ARTICLE_FILE ?= mutagenicity.md
+OUTFILE_PREFIX ?= outfile
+DEFAULT_EXTENSIONS ?= latex pdf docx odt epub html
+JSON_FILE ?= $(OUTFILE_PREFIX).enriched.json
+FLATTENED_JSON_FILE ?= $(OUTFILE_PREFIX).flattened.json
+LUA_FILTERS ?= $(LUA_FILTERS_PATH)/cito/cito.lua \
+ $(LUA_FILTERS_PATH)/abstract-to-meta/abstract-to-meta.lua \
+ $(LUA_FILTERS_PATH)/scholarly-metadata/scholarly-metadata.lua
+
+
+all: $(addprefix $(OUTFILE_PREFIX).,$(DEFAULT_EXTENSIONS))
+
+$(JSON_FILE): $(ARTICLE_FILE) $(LUA_FILTERS)
+ pandoc $(PANDOC_READER_OPTIONS) \
+ $(foreach filter, $(LUA_FILTERS), --lua-filter=$(filter)) \
+ --to=json \
+ --output=$@ $<
+
+$(OUTFILE_PREFIX).pdf $(OUTFILE_PREFIX).latex: \
+ $(JSON_FILE) \
+ $(TEMPLATE_FILE_LATEX) \
+ $(PANDOC_SCHOLAR_PATH)/scholar-filters/template-helper.lua
+ pandoc $(PANDOC_WRITER_OPTIONS) \
+ $(PANDOC_LATEX_OPTIONS) \
+ --lua-filter=$(PANDOC_SCHOLAR_PATH)/scholar-filters/template-helper.lua \
+ --output $@ $<
+
+$(OUTFILE_PREFIX).docx: $(JSON_FILE) \
+ $(ODT_REFERENCE_FILE) \
+ $(LUA_FILTERS_PATH)/author-info-blocks/author-info-blocks.lua
+ pandoc $(PANDOC_WRITER_OPTIONS) \
+ $(PANDOC_DOCX_OPTIONS) \
+ --lua-filter=$(LUA_FILTERS_PATH)/author-info-blocks/author-info-blocks.lua \
+ --output $@ $<
+
+$(OUTFILE_PREFIX).odt: $(JSON_FILE) \
+ $(ODT_REFERENCE_FILE) \
+ $(LUA_FILTERS_PATH)/author-info-blocks/author-info-blocks.lua
+ pandoc $(PANDOC_WRITER_OPTIONS) \
+ $(PANDOC_ODT_OPTIONS) \
+ --lua-filter=$(LUA_FILTERS_PATH)/author-info-blocks/author-info-blocks.lua \
+ --output $@ $<
+
+$(OUTFILE_PREFIX).epub: $(JSON_FILE) \
+ $(TEMPLATE_FILE_EPUB) \
+ $(LUA_FILTERS_PATH)/author-info-blocks/author-info-blocks.lua
+ pandoc $(PANDOC_WRITER_OPTIONS) \
+ $(PANDOC_EPUB_OPTIONS) \
+ --lua-filter=$(LUA_FILTERS_PATH)/author-info-blocks/author-info-blocks.lua \
+ --output $@ $<
+
+$(OUTFILE_PREFIX).html: $(JSON_FILE) \
+ $(TEMPLATE_FILE_HTML) \
+ $(TEMPLATE_STYLE_HTML) \
+ $(PANDOC_SCHOLAR_PATH)/scholar-filters/template-helper.lua
+ pandoc $(PANDOC_WRITER_OPTIONS) \
+ $(PANDOC_HTML_OPTIONS) \
+ --lua-filter=$(PANDOC_SCHOLAR_PATH)/scholar-filters/template-helper.lua \
+ --css=$(TEMPLATE_STYLE_HTML) \
+ --self-contained \
+ --mathjax \
+ --output $@ $<
+
+$(OUTFILE_PREFIX).jsonld: $(JSON_FILE) \
+ $(BIBLIOGRAPHY_FILE) \
+ $(PANDOC_SCHOLAR_PATH)/scholar-filters/json-ld.lua \
+ $(PANDOC_SCHOLAR_PATH)/writers/jsonld.lua
+ pandoc --to $(PANDOC_SCHOLAR_PATH)/writers/jsonld.lua \
+ --metadata "bibliography:$(BIBLIOGRAPHY_FILE)" \
+ --lua-filter=$(PANDOC_SCHOLAR_PATH)/scholar-filters/json-ld.lua \
+ --output=$@ $<
+
+$(OUTFILE_PREFIX).txt: $(ARTICLE_FILE)
+ pandoc $(PANDOC_WRITER_OPTIONS) \
+ --output $@ $<
+
+## Advanced JATS support is temporarily disabled.
+$(OUTFILE_PREFIX).jats: $(JSON_FILE)
+ pandoc $(PANDOC_WRITER_OPTIONS) \
+ $(PANDOC_JATS_OPTIONS) \
+ --output $@ $<
+
+clean:
+ rm -f $(OUTFILE_PREFIX).*
+
+.PHONY: all clean
+
+# Include archive-generating targets. This makefile is not included in the
+# distributed archives
+-include archives.inc.mk
diff --git a/paper/README.md b/paper/README.md
new file mode 100644
index 0000000..abff1e0
--- /dev/null
+++ b/paper/README.md
@@ -0,0 +1,269 @@
+Pandoc Scholar
+==============
+
+[![release shield]](https://github.com/pandoc-scholar/pandoc-scholar/releases)
+[![DOI]](https://zenodo.org/badge/latestdoi/82204858)
+[![license shield]](./LICENSE)
+[![build status]](https://travis-ci.org/pandoc-scholar/pandoc-scholar)
+
+Create beautiful, semantically enriched articles with pandoc. This
+package provides utilities to make publishing of scientific articles as
+simple and pleasant as possible. It simplifies setting authors' metadata
+in YAML blocks, allows to add semantic annotation to citations, and only
+requires the programs pandoc and make.
+
+[release shield]: https://img.shields.io/github/release/pandoc-scholar/pandoc-scholar.svg
+[license shield]: https://img.shields.io/github/license/pandoc-scholar/pandoc-scholar.svg
+[build status]: https://img.shields.io/travis/pandoc-scholar/pandoc-scholar/master.svg
+[DOI]: https://zenodo.org/badge/82204858.svg
+[paper]: https://peerj.com/articles/cs-112/
+
+Overview
+--------
+
+Plain pandoc is already excellent at document conversion, but it lacks
+in metadata handling. Pandoc scholar offers simple ways to include
+metadata on authors, affiliations, contact details, and citations. The
+data is included into the final output as document headers. Additionally
+all entries can be exported as [JSON-LD], a standardized format for the
+semantic web.
+
+The background leading to the development of pandoc scholar is described
+in the [paper] published in PeerJ Computer Science.
+
+Note that since version 2.0, most of the functionality of pandoc Scholar
+is now provided via [pandoc Lua filters]. If you prefer to mix-and-match
+selected functionalities provided by pandoc scholar, you can now use the
+respective Lua filters directly. Integration with tools like RMarkdown
+is possible this way.
+
+[JSON-LD]: https://en.wikipedia.org/wiki/JSON-LD
+[pandoc Lua filters]: https://github.com/pandoc/lua-filters
+
+### Demo
+
+An example document plus bibliography is provided in the *example*
+folder. Running `make` in the project's root folder will process the
+example article, generating output like below:
+
+![example article screenshot](https://pandoc-scholar.github.io/example/header.png)
+
+Get the full output as [pdf], [docx], or [epub], or take a look at the
+metadata in [JSON-LD] format.
+
+[pdf]: https://pandoc-scholar.github.io/example/example.pdf
+[docx]: https://pandoc-scholar.github.io/example/example.docx
+[epub]: https://pandoc-scholar.github.io/example/example.epub
+[JSON-LD]: https://pandoc-scholar.github.io/example/example.jsonld
+
+
+Prerequisites
+-------------
+
+This package builds on [pandoc](http://pandoc.org/), the universal
+document converter, version 2.1 or later. See the pandoc website for
+[installation instructions](http://pandoc.org/installing.html) and
+suggestions for LaTeX packages, which we use for PDF generation.
+
+
+Installation
+------------
+
+Archives containing all required files are provided for each release.
+Use the *release* button above (or directly go to the [latest release])
+and download a `pandoc-scholar` archive; both archive files, `.zip` and
+`.tar.gz`, contain the same files. Choose the filetype that is the
+easiest to unpack on you system.
+
+A `pandoc-scholar` folder will be created on unpacking. The folder
+contains all required scripts and templates.
+
+[latest release]: https://github.com/pandoc-scholar/pandoc-scholar/releases/latest
+
+
+Usage
+-----
+
+### Quickstart
+
+Run `make` to convert the example article into all supported output formats. The
+markdown file used to create the output files can be configured via the
+`ARTICLE_FILE` variable, either directly in the Makefile or by specifying the
+value on the command line.
+
+ make ARTICLE_FILE=your-file.md
+
+### Includable Makefile
+
+The *Makefile*, which does most of the work, is written in a style that makes it
+simple to include it from within other Makefiles. This method allows to keep
+`pandoc-scholar` installed in a central location and to use the same instance
+for multiple projects. The `ARTICLE_FILE` and `PANDOC_SCHOLAR_PATH` variables
+must be defined in the including Makefile:
+
+``` Makefile
+ARTICLE_FILE = your-file.md
+PANDOC_SCHOLAR_PATH = ../path-to-pandoc-scholar-folder
+include $(PANDOC_SCHOLAR_PATH)/Makefile
+```
+
+Calling `make` as usual will create all configured output formats. Per default,
+this creates *pdf*, *latex*, *docx*, *odt*, *epub*, *html*, and *jats* output.
+The set of output files can be reduced by setting the `DEFAULT_EXTENSIONS`
+variable to a subset of the aforementioned formats.
+
+Alternative template files can be set using `TEMPLATE_FILE_<FORMAT>` variables,
+where `<FORMAT>` is one of *HTML*, *EPUB*, *JATS*, or *LATEX*. The reference
+files for ODT and DOCX output can be changed using `ODT_REFERENCE_FILE` and
+`DOCX_REFERENCE_FILE`, respectively.
+
+Additional pandoc options can be given on a per-format basis using
+`PANDOC_<FORMAT>_OPTIONS` variables. The following uses an actual Makefile as an
+example to demonstrate usage of those options.
+
+``` Makefile
+ARTICLE_FILE = open-science-formatting.md
+
+PANDOC_LATEX_OPTIONS = --latex-engine=xelatex
+PANDOC_LATEX_OPTIONS += --csl=peerj.csl
+PANDOC_LATEX_OPTIONS += --filter=pandoc-citeproc
+PANDOC_LATEX_OPTIONS += -M fontsize=10pt
+PANDOC_LATEX_OPTIONS += -M classoption=fleqn
+
+PANDOC_HTML_OPTIONS = --toc
+PANDOC_EPUB_OPTIONS = --toc
+
+DOCX_REFERENCE_FILE = pandoc-manuscript.docx
+ODT_REFERENCE_FILE = pandoc-manuscript.odt
+TEMPLATE_FILE_LATEX = pandoc-peerj.latex
+
+PANDOC_SCHOLAR_PATH = pandoc-scholar
+include $(PANDOC_SCHOLAR_PATH)/Makefile
+```
+
+
+Metadata Features
+-----------------
+
+Pandoc scholar supports additional functionality via metadata fields. Most
+notably, the augmentation of articles with author and affiliation data, which is
+essential for academic publishing, is greatly simplified when using pandoc
+scholar.
+
+### Authors and affiliations
+
+Most metadata should be specified in the YAML block at the top of the article.
+Author data and affiliations are taken from the *author* and *institute* field,
+respectively. Institutes can be given via user-defined abbreviations, saving
+unnecessary repetitions while preserving readability.
+
+Example:
+
+``` yaml
+author:
+ - James Dewey Watson:
+ institute: cavendish
+ - Francis Harry Compton Crick:
+ institute: cavendish
+institute:
+ - cavendish: Cavendish Laboratory, Cambridge
+```
+
+Authors are given in the order in which they are listed, while institute order
+follows from author order.
+
+The separate institute field may add unwanted complexity in some cases. It is
+hence possible to omit it and to give the affiliations name directly in the
+author entry:
+
+``` yaml
+author:
+ - John MacFarlane:
+ institute: University of California, Berkeley
+```
+
+### Institute address
+
+Often it is not enough to give just a name for institutes. It is hence possible
+to add arbitrary fields. The name must then explicitly be set via the *name*
+field of the institute entry:
+
+``` yaml
+author:
+ - Robert Winkler:
+ institute: cinvestav
+institute:
+ - cinvestav:
+ name: 'CINVESTAV Unidad Irapuato, Department of Biochemistry and Biotechnology'
+ address: 'Km. 9.6 Libramiento Norte Carr. Irapuato-León, 36821 Irapuato Gto. México'
+ phone: +52 (462) 623 9635
+```
+
+Currently only the institute's address is used in the default template, but
+future extensions will be based on this convention.
+
+### Semantic citations
+
+Understanding the reason a citations is included in scholarly articles usually
+requires natural language processing of the article. However, navigating the
+current literature landscape can be improved and by having that information
+accesible and in a machine-readable form. Pandoc scholar supports the CiTO
+ontology, allowing authors to specify important meta-information on the citation
+directly while writing the text. The property is simply prepended to the
+citation key, separated by a colon: `@<property>:citationKey`.
+
+The following table contains all supported keywords and the respective
+CiTO properties. Authors are free to use the short-form, the full-length
+property, or any of the alternatives listed below (i.e., all word in a
+row denote the property and have the same effect).
+
+CiTO property | Keyword | alternatives
+------------------------------ | ------------------- | ---------------------
+agrees\_with | agrees\_with | agree\_with
+citation | |
+cites | |
+cites\_as\_authority | authority | as\_authority
+cites\_as\_data\_source | data\_source | as\_data_source
+cites\_as\_evidence | evidence | as\_evidence
+cites\_as\_metadata\_document | metadata | as\_metadata_document
+cites\_as\_recommended_reading | recommended_reading | as\_recommended\_reading
+disputes | |
+documents | |
+extends | |
+includes\_excerpt\_from | excerpt | excerpt\_from
+includes\_quotation\_from | quotation | quotation\_from
+obtaines\_background\_from | background | background\_from
+refutes | |
+replies\_to | |
+updates | |
+uses\_data\_from | data\_from | data
+uses\_method\_in | method | method\_in
+
+Example:
+
+ DNA strands form a double-helix [@evidence:watson_crick_1953].
+
+
+License
+-------
+
+Copyright © 2016–2018 Albert Krewinkel and Robert Winkler except for the
+following components:
+
+- HTML template: © 2016 Andrew G. York and Diana Mounter
+- dkjson: © 2010-2013 David Heiko Kolf
+- lua-filters: © 2017-2018 John MacFarlane, Albert Krewinkel, Jesse Rosenthal,
+ and Greg Tucker-Kellogg
+
+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., 51 Franklin
+Street, Fifth Floor, Boston, MA 02110-1301 USA.
diff --git a/paper/bibliography.bib b/paper/bibliography.bib
new file mode 100644
index 0000000..7c660ea
--- /dev/null
+++ b/paper/bibliography.bib
@@ -0,0 +1,366 @@
+@Article{Kazius2005,
+ author = "Kazius, J. and McGuire, R. and Bursi, R.",
+ year = 2005,
+ title = "Derivation and validation of toxicophores for mutagenicity prediction",
+ journal = "J Med Chem",
+ number = 48,
+ pages = "312-20",
+}
+
+@article{Hansen2009,
+ author = {Hansen, Katja and Mika, Sebastian and Schroeter, Timon and Sutter, Andreas and ter Laak, Antonius and Steger-Hartmann, Thomas and Heinrich, Nikolaus and Müller, Klaus-Robert},
+ title = {Benchmark Data Set for in Silico Prediction of Ames Mutagenicity},
+ journal = {Journal of Chemical Information and Modeling},
+ volume = {49},
+ number = {9},
+ pages = {2077-2081},
+ year = {2009},
+ doi = {10.1021/ci900161g},
+ note ={PMID: 19702240},
+ URL = { https://doi.org/10.1021/ci900161g },
+ eprint = { https://doi.org/10.1021/ci900161g }
+}
+
+@article{Yap2011,
+ author = "Yap, CW.",
+ year = 2011,
+ title = "PaDEL-descriptor: an open source software to calculate molecular descriptors and fingerprints",
+ journal = "Journal of computational chemistry",
+ number = 32,
+ pages = "1466-74"
+}
+
+@Article{Bender2004,
+ author = "Andreas Bender and Hamse Y. Mussa and Robert C.
+ Glen and Stephan Reiling",
+ title = "Molecular Similarity Searching Using Atom
+ Environments, Information-Based Feature Selection, and
+ a Naïve Bayesian Classifier",
+ journal = "Journal of Chemical Information and Computer
+ Sciences",
+ volume = "44",
+ number = "1",
+ pages = "170--178",
+ year = "2004",
+ DOI = "10.1021/ci034207y",
+ note = "PMID: 14741025",
+ URL = "http://dx.doi.org/10.1021/ci034207y",
+ eprint = "http://dx.doi.org/10.1021/ci034207y",
+}
+
+@article{OBoyle2011a,
+ abstract = {{BACKGROUND: A frequent problem in computational modeling is the interconversion of chemical structures between different formats. While standard interchange formats exist (for example, Chemical Markup Language) and de facto standards have arisen (for example, SMILES format), the need to interconvert formats is a continuing problem due to the multitude of different application areas for chemistry data, differences in the data stored by different formats (0D versus 3D, for example), and competition between software along with a lack of vendor-neutral formats.RESULTS: We discuss, for the first time, Open Babel, an open-source chemical toolbox that speaks the many languages of chemical data. Open Babel version 2.3 interconverts over 110 formats. The need to represent such a wide variety of chemical and molecular data requires a library that implements a wide range of cheminformatics algorithms, from partial charge assignment and aromaticity detection, to bond order perception and canonicalization. We detail the implementation of Open Babel, describe key advances in the 2.3 release, and outline a variety of uses both in terms of software products and scientific research, including applications far beyond simple format interconversion.CONCLUSIONS: Open Babel presents a solution to the proliferation of multiple chemical file formats. In addition, it provides a variety of useful utilities from conformer searching and 2D depiction, to filtering, batch conversion, and substructure and similarity searching. For developers, it can be used as a programming library to handle chemical data in areas such as organic chemistry, drug design, materials science, and computational chemistry. It is freely available under an open-source license from http://openbabel.org.}},
+ added-at = {2019-03-11T21:00:05.000+0100},
+ author = {O'Boyle, Noel and Banck, Michael and James, Craig and Morley, Chris and Vandermeersch, Tim and Hutchison, Geoffrey},
+ biburl = {https://www.bibsonomy.org/bibtex/27ab2699fef73132efcfa6853c3031bf0/fairybasslet},
+ booktitle = {Journal of Cheminformatics},
+ citeulike-article-id = {9866193},
+ citeulike-linkout-0 = {http://dx.doi.org/doi:10.1186/1758-2946-3-33},
+ citeulike-linkout-1 = {http://www.jcheminf.com/content/3/1/33},
+ citeulike-linkout-2 = {http://dx.doi.org/10.1186/1758-2946-3-33},
+ citeulike-linkout-3 = {http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3198950/},
+ citeulike-linkout-4 = {http://view.ncbi.nlm.nih.gov/pubmed/21982300},
+ citeulike-linkout-5 = {http://www.hubmed.org/display.cgi?uids=21982300},
+ citeulike-linkout-6 = {http://link.springer.com/article/10.1186/1758-2946-3-33},
+ day = 07,
+ doi = {doi:10.1186/1758-2946-3-33},
+ interhash = {c20842ab14c8a3bbd2dcf3e8072b82d1},
+ intrahash = {7ab2699fef73132efcfa6853c3031bf0},
+ issn = {1758-2946},
+ journal = {J. Cheminf.},
+ keywords = {chemical-file-formats computer-program cpsst open-babel open-source software-library toolkit},
+ month = oct,
+ number = 1,
+ pages = 33,
+ pdf = {file:///H:/publications/OBoyle2011a.pdf},
+ pmcid = {PMC3198950},
+ pmid = {21982300},
+ posted-at = {2011-11-08 10:20:24},
+ priority = {2},
+ publisher = {Chemistry Central Ltd},
+ timestamp = {2019-03-11T21:06:37.000+0100},
+ title = {{Open Babel: An open chemical toolbox}},
+ url = {http://www.jcheminf.com/content/3/1/33},
+ volume = 3,
+ year = 2011
+}
+
+@article{Rücker2007,
+ author = "Rücker, C and Rücker, G and Meringer, M.",
+ year = 2007,
+ title = "y-Randomization and Its Variants in QSPR/QSAR",
+ journal = "J. Chem. Inf. Model.",
+ number = 47,
+ pages = "2345-57"
+}
+
+@Article{Maunz2013,
+ DOI = "10.3389/fphar.2013.00038",
+ URL = "http://dx.doi.org/10.3389/fphar.2013.00038",
+ year = "2013",
+ publisher = "Frontiers Media {SA}",
+ volume = "4",
+ author = "Andreas Maunz and Martin G{\"{u}}tlein and Micha
+ Rautenberg and David Vorgrimmler and Denis Gebele and
+ Christoph Helma",
+ title = "lazar: a modular predictive toxicology framework",
+ journal = "Frontiers in Pharmacology",
+}
+
+@Article{doi:10.1021/ci00057a005,
+ author = "David Weininger",
+ title = "SMILES, a chemical language and information system. 1.
+ Introduction to methodology and encoding rules",
+ journal = "Journal of Chemical Information and Computer
+ Sciences",
+ volume = "28",
+ number = "1",
+ pages = "31--36",
+ year = "1988",
+ DOI = "10.1021/ci00057a005",
+ URL = "http://dx.doi.org/10.1021/ci00057a005",
+ eprint = "http://dx.doi.org/10.1021/ci00057a005",
+}
+
+@Article{OBoyle2011,
+ DOI = "10.1186/1758-2946-3-33",
+ URL = "http://dx.doi.org/10.1186/1758-2946-3-33",
+ year = "2011",
+ publisher = "Springer Science and Business Media",
+ volume = "3",
+ number = "1",
+ pages = "33",
+ author = "Noel M OBoyle and Michael Banck and Craig A James and
+ Chris Morley and Tim Vandermeersch and Geoffrey R
+ Hutchison",
+ title = "Open Babel: An open chemical toolbox",
+ journal = "Journal of Cheminformatics",
+}
+
+@Article{mazzatorta08,
+ author = "Paolo Mazzatorta and Manuel Dominguez Estevez and
+ Myriam Coulet and Benoit Schilter",
+ title = "Modeling Oral Rat Chronic Toxicity",
+ journal = "Journal of Chemical Information and Modeling",
+ volume = "48",
+ number = "10",
+ pages = "1949--1954",
+ year = "2008",
+ DOI = "10.1021/ci8001974",
+ note = "PMID: 18803370",
+ URL = "http://dx.doi.org/10.1021/ci8001974",
+ eprint = "http://dx.doi.org/10.1021/ci8001974",
+}
+
+@Manual{pls,
+ title = "pls: Partial Least Squares and Principal Component
+ Regression",
+ author = "Bjørn-Helge Mevik and Ron Wehrens and Kristian Hovde
+ Liland",
+ year = "2015",
+ note = "R package version 2.5-0",
+ URL = "https://CRAN.R-project.org/package=pls",
+}
+
+@Article{Kuhn08,
+ author = "Max Kuhn",
+ title = "Building predictive models in R using the caret
+ package",
+ journal = "J. of Stat. Soft",
+ year = "2008",
+}
+
+@Article{Jeliazkova15,
+ author = "Nina Jeliazkova and Charalampos Chomenidis and Philip
+ Doganis and Bengt Fadeel and Roland Grafström and
+ Barry Hardy and Janna Hastings and Markus Hegi and
+ Vedrin Jeliazkov and Nikolay Kochev and Pekka Kohonen
+ and Cristian R. Munteanu and Haralambos Sarimveis and
+ Bart Smeets and Pantelis Sopasakis and Georgia Tsiliki
+ and David Vorgrimmler and Egon Willighagen",
+ title = "The eNanoMapper database for nanomaterial safety
+ information",
+ journal = "Beilstein J. Nanotechnol.",
+ pages = "1609–1634",
+ number = "6",
+ year = "2015",
+ DOI = "doi:10.3762/bjnano.6.165",
+}
+
+@TechReport{Fowler2011,
+ author = "B. Fowler and S. Savage and B. Mendez",
+ year = "2011",
+ title = "White paper: Protecting public health in the 21st
+ century: the case for computational toxicology",
+ institution = "ICF International, Inc.icfi.com.",
+}
+
+@Article{Cotterill2008,
+ author = "Cotterill, J.V. and Chaudry, M.Q. and Mattews, W. and R.
+ W. Watkins",
+ year = "2008",
+ title = "In silico assessment of toxicity of heat-generated
+ food contaminants",
+ journal = "Food Chemical Toxicology",
+ number = "46(6)",
+ pages = "1905--1918",
+}
+
+@Article{Grob2006,
+ author = "Grob, K. and Biedermann, M. and Scherbaum, E. and Roth, M.
+ and K. Rieger",
+ year = "2006",
+ title = "Food contamination with organic materials in
+ perspective: packaging materials as the largest and
+ least controlled source? A view focusing on the
+ European situation",
+ journal = "Crit. Rev. Food. Sci. Nutr.",
+ number = "46",
+ pages = "529--35",
+ DOI = "10.1080/10408390500295490",
+}
+
+@Article{LoPiparo2011,
+ author = "Lo Piparo, E. and Worth, A. and Manibusan, A. and Yang, C. and
+ Schilter, B. and Mazzatorta, P. and Jacobs, M.N. and
+ Steinkelner, H. and L. Mohimont",
+ year = "2011",
+ title = "Use of Computational tools in the field of food
+ safety",
+ journal = "Regulatory Toxicology and Pharmacology",
+ number = "60(3)",
+ pages = "354--362",
+}
+
+@Article{LoPiparo2014,
+ author = "Lo Piparo, E. and Maunz, A. and Helma, C. and Vorgrimmler, D. and Schilter, B.",
+ year = "2014",
+ title = "Automated and reproducible read-across like models for
+ predicting carcinogenic potency",
+ journal = "Regulatory Toxicology and Pharmacology",
+ number = "70",
+ pages = "370--378",
+}
+
+@Article{Schilter2014,
+ author = "Schilter, B. and Benigni, R. and Boobis, A. and Chiodini, A. and
+ Cockburn, A. and Cronin, M.T. and Lo Piparo, E. and Modi, S. and
+ Thiel A. and A. Worth",
+ title = "Establishing the level of safety concern for chemicals
+ in food without the need for toxicity testing",
+ year = "2014",
+ journal = "Regulatory Toxicology and Pharmacology",
+ number = "68",
+ pages = "275--298",
+}
+
+@Article{Stanton2016,
+ author = "Stanton, K. and F.H. Krusezewski",
+ year = "2016",
+ title = "Quantifying the benefits of using read-across and in
+ silico techniques to fullfill hazard data requirements
+ for chemical categories",
+ journal = "Regulatory Toxicology and Pharmacology",
+ number = "81",
+ pages = "250--259",
+ DOI = "10.1016/j-yrtph.2016.09.004.",
+}
+
+@Article{Zarn2011,
+ author = "Zarn, J.A. and B.E. Engeli and J.R. Schlatter",
+ year = "2011",
+ title = "Study parameters influencing {NOAEL} and {LOAEL} in
+ toxicity feeding studies for pesticides: exposure
+ duration versus dose decrement, dose spacing, group
+ size and chemical class",
+ journal = "Regul. Toxicol. Pharmacol.",
+ number = "61",
+ pages = "243--250",
+}
+
+@Article{Zarn2013,
+ author = "J.A. Zarn and B.E. Engeli and J.R. Schlatter",
+ year = "2013",
+ title = "Characterization of the dose decrement in regulatory
+ rat pesticide toxicity feeding studies",
+ journal = "Regul. Toxicol. Pharmacol.",
+ number = "67",
+ pages = "215--220",
+}
+
+@Article{EFSA2016,
+ author = {EFSA},
+ year = "2016",
+ title = "Guidance on the establishment of the residue
+ definition for dietary assessment: {EFSA} panel on Plant
+ Protect Products and their Residues ({PPR})",
+ journal = "EFSA Journal",
+ number = "14",
+ pages = "1--12",
+}
+
+@TechReport{ECHA2008,
+ author = "{ECHA}",
+ year = "2008",
+ title = "Guidance on information requirements and chemical
+ safety assessment, Chapter R.6: {QSARs} and grouping of
+ chemicals",
+ institution = "ECHA",
+}
+
+@Misc{EFSA2014,
+ author = "{EFSA}",
+ year = "2014",
+ title = "Rapporteur Member State assessment reports submitted
+ for the {EU} peer review of active substances used in
+ plant protection products",
+ URL = "http://dar.efsa.europa.eu/dar-web/provision",
+ note = "accessed 8.1.2015",
+}
+
+@Misc{HealthCanada2016,
+ author = "{Health Canada}",
+ year = "2016",
+ URL = "https://www.canada.ca/en/health-canada/services/chemical-substances/chemicals-management-plan.html",
+}
+
+@InCollection{OECD2015,
+ author = "{OECD}",
+ year = "2015",
+ title = "Fundamental and guiding principles for {(Q)SAR} analysis
+ of chemicals carcinogens with mechanistic
+ considerations Monograph 229 {ENV/JM/MONO(2015)46}",
+ chapter = "229",
+ booktitle = "Series on Testing and Assessment No 229",
+}
+
+@InCollection{Schilter2013,
+ author = "Schilter, B. and Constable, A. and Perrin, I.",
+ title = "Naturally occurring toxicants of plant origin: risk
+ assessment and management considerations",
+ year = "2013",
+ booktitle = "Food Safety Management: a practical guide for
+ industry",
+ chapter = "3",
+ editor = "Y. Motarjemi",
+ publisher = "Elsevier",
+ pages = "45--57",
+}
+
+@Misc{EPA2011,
+ title = "Fact Sheets on New Active Ingredients",
+ author = "{US EPA}",
+ year = "2011",
+ note = "this database was not further maintained by US EPA.
+ Only data used until 27.11.2014, accessed 27.4.11
+ A.D.",
+}
+
+@TechReport{WHO2011,
+ author = "WHO",
+ year = "2011",
+ title = "Joint {FAO/WHO} Meeting on Pesticide Residues ({JMPR})
+ publications",
+ URL = "http://www.who.int/foodsafety/publications/jmpr-monographs/en/",
+ note = "accessed 20.3.15 A.D.",
+}
diff --git a/paper/example/article.md b/paper/example/article.md
new file mode 100644
index 0000000..06061c3
--- /dev/null
+++ b/paper/example/article.md
@@ -0,0 +1,136 @@
+---
+title: Example article written in pandoc-flavored Markdown
+author:
+ - Jane Doe:
+ institute:
+ - fosg
+ - fop
+ email: jane.doe@example.com
+ orcid: 0000-0000-0000-0000
+ equal_contributor: "yes"
+ correspondence: "yes"
+ - John Q. Doe:
+ institute: fosg
+ equal_contributor: "yes"
+ - Peder Ås:
+ institute: fosg
+ - Juan Pérez:
+ institute: acme
+ email: juan.perez@example.edu
+ correspondence: "yes"
+institute:
+ - fosg:
+ name: Formatting Open Science Group
+ address: 23 Science Street, Eureka, Mississippi, USA
+ phone: +1 (555) 423 1338
+ email: '{firstname}.{lastname}\@fosg.example.com'
+ - fop: Federation of Planets
+ - acme:
+ name: Acme Corporation
+bibliography: example/bibliography.bib
+project:
+ title: Pandoc Scholar Example
+ zip-url: https://github.com/pandoc-scholar/pandoc-scholar/releases
+ github-url: https://github.com/pandoc-scholar/pandoc-scholar/
+...
+
+# Abstract
+
+This is an example article. There is not much to see but filler text.
+
+
+# Further reading
+
+See the [pandoc manual](http://pandoc.org/MANUAL.html) for more information on
+pandoc.
+
+Authors struggling to fill this document with content are referred to
+@Upper_writers_1974.
+
+
+# Lorem Ipsum
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
+nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
+fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in
+culpa qui officia deserunt mollit anim id est laborum.
+
+
+## Dolor sit amet
+
+Deserunt excepturi commodi sit qui velit quis. Delectus sit omnis culpa
+accusamus repellat iusto vel. Quod deserunt quasi nisi dolor. Quo eum id
+reiciendis dolor. Est qui illum et.
+
+Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum expedita
+ducimus quaerat est quam ut molestiae. Illum deleniti vel labore facilis et cum
+est. Est nemo est vel ad. Assumenda consequatur rerum officiis atque officia.
+Est nihil iste cumque ad qui.
+
+Eaque sed sit totam enim. Et explicabo illum rerum aut. Aspernatur sit dolor
+animi tempora cum. Maxime in soluta aut. Explicabo id maiores voluptates aut
+voluptas id. Dolore sed labore voluptatem omnis doloribus mollitia aliquid
+cupiditate.
+
+In rerum saepe placeat. Deleniti suscipit sed quam fugit assumenda sit et
+tempora. Veniam illum expedita quia error qui quibusdam rerum. Qui ut sunt est
+eos.
+
+Recusandae et sit ut. Impedit deserunt consequatur et dignissimos vel et.
+Eveniet voluptatem magni quis est dolore excepturi officia nihil. Debitis quae
+commodi error.
+
+Modi debitis et ut saepe saepe dolorem. Quis sed autem expedita est voluptate
+esse neque. Quod aspernatur quam velit placeat nihil omnis debitis. Corporis sit
+rerum consectetur possimus rerum consequuntur. Rerum quas ut repellendus
+tenetur. Consequuntur adipisci dolores eveniet qui est ipsum.
+
+Atque deserunt necessitatibus unde facere amet molestiae. Ipsam at quia placeat
+aliquam autem. Enim corporis accusamus consequatur.
+
+Et vitae unde perferendis tenetur cupiditate non exercitationem. Aut molestiae
+sed est. Deserunt repudiandae non quia esse ad vitae vel in. Et reprehenderit
+dolore et aut distinctio.
+
+Vel quia molestiae quod sint fuga omnis est fuga. Minus quaerat repellat quod.
+Rerum rerum enim repellendus rerum consequatur non perspiciatis. Illo sapiente
+sed natus ipsa quia temporibus. Est nostrum fugit odio non voluptatem odit
+rerum. Et consequatur aut nostrum accusamus earum.
+
+Sit explicabo iure eligendi consequatur. Consequatur atque praesentium
+consequatur dolores quam. Neque eius provident harum placeat. Quo aut pariatur
+illum laborum porro minima. Dolorem nobis esse laudantium. Perspiciatis
+voluptate deleniti voluptatem et.
+
+Quos assumenda magnam non inventore. Adipisci repellendus eligendi possimus
+voluptate numquam voluptatem natus. Deleniti cupiditate facilis commodi aliquid
+voluptatem laudantium autem similique. Vel sunt cupiditate consequatur. Dolorum
+voluptatem nihil culpa fugiat non itaque animi iusto. Unde incidunt numquam
+vitae.
+
+Eius provident voluptatem animi quidem quia. Velit omnis voluptas atque.
+Voluptatem accusamus atque blanditiis commodi aspernatur ullam ad. Nulla quidem
+fugiat explicabo quo dolor hic.
+
+Rerum dolore quo ratione sed aspernatur doloremque. Ut neque laudantium quae
+enim dolores et. Laudantium dolores id assumenda autem aspernatur. Accusamus
+doloribus nihil rerum et atque est aut delectus.
+
+Nulla itaque mollitia vitae accusamus. Eveniet soluta praesentium dolore harum
+culpa. Totam voluptatem non aspernatur.
+
+Eveniet in illo consequatur. Fugiat et totam unde nihil quis. Non et velit
+recusandae blanditiis unde. Eaque fugiat id pariatur. Non numquam minima aut.
+Iste eos et autem et exercitationem velit officiis vero.
+
+Ullam minima quisquam est ducimus iste. Commodi occaecati inventore provident
+voluptatem repudiandae. Quia est qui dolore sit nisi officia doloremque dolor.
+Perspiciatis tempore laudantium quia repellendus quia deleniti. Sed consequuntur
+autem quisquam aliquam.
+
+Ut dolores natus et sunt delectus nulla. Ipsum eum quia ex est ut quia. Ratione
+et eius consequatur veritatis hic expedita ea.
+
+# References
diff --git a/paper/example/bibliography.bib b/paper/example/bibliography.bib
new file mode 100644
index 0000000..876eea1
--- /dev/null
+++ b/paper/example/bibliography.bib
@@ -0,0 +1,13 @@
+@article {Upper_writers_1974,
+ author = {Upper, Dennis},
+ title = {The unsuccessful self-treatment of a case of “writer's block”},
+ journal = {Journal of Applied Behavior Analysis},
+ volume = {7},
+ number = {3},
+ publisher = {Blackwell Publishing Ltd},
+ issn = {1938-3703},
+ url = {http://dx.doi.org/10.1901/jaba.1974.7-497a},
+ doi = {10.1901/jaba.1974.7-497a},
+ pages = {497--497},
+ year = {1974},
+}
diff --git a/paper/lua-filters/.travis.yml b/paper/lua-filters/.travis.yml
new file mode 100644
index 0000000..196eb28
--- /dev/null
+++ b/paper/lua-filters/.travis.yml
@@ -0,0 +1,55 @@
+# Use new container infrastructure to enable caching
+sudo: false
+
+# Do not choose a language; we provide our own build tools.
+language: minimal
+
+addons:
+ apt:
+ packages:
+ - aspell
+ - aspell-fr
+ - aspell-en
+ - imagemagick
+ - default-jre
+ - graphviz
+ - inkscape
+ - python3
+ - python3-pip
+ - python3-tk
+ - python3-numpy
+ - python3-matplotlib
+ - latex-xcolor
+ - lmodern
+ - texlive-bibtex-extra
+ - texlive-fonts-recommended
+ - texlive-generic-recommended
+ - texlive-latex-recommended
+ - texlive-latex-extra
+ - pgf
+
+before_install:
+- unset CC
+# Download and unpack the pandoc binary
+- |
+ pushd $HOME
+ RELEASES_URL='https://github.com/jgm/pandoc/releases'
+ export PANDOCVERSION=$(curl -I "$RELEASES_URL/latest" | sed -ne 's#Location:.*tag/\(.*\)$#\1#p' | tr -d "\n\r")
+ echo $PANDOCVERSION
+ wget $RELEASES_URL/download/$PANDOCVERSION/pandoc-$PANDOCVERSION-linux.tar.gz
+ tar xvzf pandoc-$PANDOCVERSION-linux.tar.gz
+ popd
+# Download plantuml.jar for plantuml filter
+- |
+ pushd $HOME
+ wget http://sourceforge.net/projects/plantuml/files/plantuml.jar
+ popd
+- export PATH=$HOME/pandoc-$PANDOCVERSION/bin:$PATH
+- export PLANTUML=$HOME/plantuml.jar
+
+install: []
+
+script:
+- |
+ make test
+
diff --git a/paper/lua-filters/LICENSE b/paper/lua-filters/LICENSE
new file mode 100644
index 0000000..720865c
--- /dev/null
+++ b/paper/lua-filters/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2017-2019 John MacFarlane and contributors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/paper/lua-filters/Makefile b/paper/lua-filters/Makefile
new file mode 100644
index 0000000..0de553d
--- /dev/null
+++ b/paper/lua-filters/Makefile
@@ -0,0 +1,5 @@
+FILTERS=$(wildcard $(shell find * -type d | grep -v '[/\\]'))
+.PHONY: test
+
+test:
+ bash runtests.sh $(FILTERS)
diff --git a/paper/lua-filters/README.md b/paper/lua-filters/README.md
new file mode 100644
index 0000000..736ed8f
--- /dev/null
+++ b/paper/lua-filters/README.md
@@ -0,0 +1,21 @@
+[![travis build
+status](https://img.shields.io/travis/pandoc/lua-filters/master.svg?label=travis+build)](https://travis-ci.org/pandoc/lua-filters)
+
+# Lua Filters
+
+This repository collects Lua filters for pandoc.
+
+To learn about Lua filters, see the
+[documentation](http://pandoc.org/lua-filters.html).
+
+Each filter goes in its own subdirectory. Each subdirectory contains:
+
+- the filter itself (e.g. `wordcount.lua`)
+- a `README.md` describing the use of the filter
+- a `Makefile` with a `test` target to test the filter
+- some data files used for the tests, which may also serve
+ as examples
+
+PRs for new filters are welcome, provided they conform to
+these guidelines.
+
diff --git a/paper/lua-filters/abstract-to-meta/Makefile b/paper/lua-filters/abstract-to-meta/Makefile
new file mode 100644
index 0000000..1ea3124
--- /dev/null
+++ b/paper/lua-filters/abstract-to-meta/Makefile
@@ -0,0 +1,8 @@
+test: sample.md abstract-to-meta.lua
+ @pandoc --lua-filter=abstract-to-meta.lua --standalone --to=markdown $< \
+ | diff -u expected.md -
+
+expected.md: sample.md abstract-to-meta.lua
+ pandoc --lua-filter=abstract-to-meta.lua --standalone --output $@ $<
+
+.PHONY: test
diff --git a/paper/lua-filters/abstract-to-meta/README.md b/paper/lua-filters/abstract-to-meta/README.md
new file mode 100644
index 0000000..42c0d29
--- /dev/null
+++ b/paper/lua-filters/abstract-to-meta/README.md
@@ -0,0 +1,37 @@
+# abstract-to-meta
+
+This moves a document's abstract from the main text into the
+metadata. Metadata elements usually allow for finer placement
+control in the final output, but writing body text is easier and
+more natural.
+
+## Defining an Abstract
+
+A document abstract can either be put directly in the document
+metadata, for example by inserting an *abstract* attribute into a
+YAML block.
+
+ ---
+ abstract: |
+ Place abstract here.
+
+ Multiple paragraphs are possible.
+ ---
+
+The additional indentation and formatting requirements in YAML
+headers can be confusing or annoying for authors. It is hence
+preferable to allow abstracts be written as normal sections.
+
+ # Abstract
+
+ Place abstract here.
+
+ Multiple paragraphs are possible.
+
+This filter turns the latter into the former by looking for a
+top-level header whose ID is `abstract`. Pandoc auto-creates IDs
+based on header contents, so a header titled *Abstract* will
+satisfy this condition.^[1]
+
+[1]: This requires the `auto_identifier` extension. It is
+ enabled by default.
diff --git a/paper/lua-filters/abstract-to-meta/abstract-to-meta.lua b/paper/lua-filters/abstract-to-meta/abstract-to-meta.lua
new file mode 100644
index 0000000..dbf9b03
--- /dev/null
+++ b/paper/lua-filters/abstract-to-meta/abstract-to-meta.lua
@@ -0,0 +1,23 @@
+local looking_at_abstract = false
+local abstract = {}
+
+function Block (elem)
+ if looking_at_abstract then
+ abstract[#abstract + 1] = elem
+ return {}
+ end
+end
+
+function Header (elem)
+ if elem.level == 1 and elem.identifier == 'abstract' then
+ looking_at_abstract = true
+ return {}
+ else
+ looking_at_abstract = looking_at_abstract and elem.level ~= 1
+ end
+end
+
+function Meta (meta)
+ meta.abstract = meta.abstract or pandoc.MetaBlocks(abstract)
+ return meta
+end
diff --git a/paper/lua-filters/abstract-to-meta/expected.md b/paper/lua-filters/abstract-to-meta/expected.md
new file mode 100644
index 0000000..638e268
--- /dev/null
+++ b/paper/lua-filters/abstract-to-meta/expected.md
@@ -0,0 +1,19 @@
+---
+abstract: |
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+ tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
+ veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+ commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
+ velit esse cillum dolore eu fugiat nulla pariatur.
+
+ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui
+ officia deserunt mollit anim id est laborum.
+---
+
+Lorem Ipsum
+===========
+
+Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum
+expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel
+labore facilis et cum est. Est nemo est vel ad. Assumenda consequatur
+rerum officiis atque officia. Est nihil iste cumque ad qui.
diff --git a/paper/lua-filters/abstract-to-meta/sample.md b/paper/lua-filters/abstract-to-meta/sample.md
new file mode 100644
index 0000000..27aabcd
--- /dev/null
+++ b/paper/lua-filters/abstract-to-meta/sample.md
@@ -0,0 +1,17 @@
+# Abstract
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor
+incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
+nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
+fugiat nulla pariatur.
+
+Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
+deserunt mollit anim id est laborum.
+
+# Lorem Ipsum
+
+Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum expedita
+ducimus quaerat est quam ut molestiae. Illum deleniti vel labore facilis et cum
+est. Est nemo est vel ad. Assumenda consequatur rerum officiis atque officia.
+Est nihil iste cumque ad qui.
diff --git a/paper/lua-filters/author-info-blocks/Makefile b/paper/lua-filters/author-info-blocks/Makefile
new file mode 100644
index 0000000..341c44d
--- /dev/null
+++ b/paper/lua-filters/author-info-blocks/Makefile
@@ -0,0 +1,8 @@
+test: sample.md author-info-blocks.lua
+ @pandoc --lua-filter=author-info-blocks.lua --standalone --to=native $< \
+ | diff -u expected.native -
+
+expected.native: sample.md author-info-blocks.lua
+ pandoc --lua-filter=author-info-blocks.lua --standalone --output $@ $<
+
+.PHONY: test
diff --git a/paper/lua-filters/author-info-blocks/README.md b/paper/lua-filters/author-info-blocks/README.md
new file mode 100644
index 0000000..3386bac
--- /dev/null
+++ b/paper/lua-filters/author-info-blocks/README.md
@@ -0,0 +1,59 @@
+# author-info-blocks
+
+This filter adds author-related header blocks usually included in
+scholarly articles, such as a list of author affiliations,
+correspondence information, and on notes equal contributors.
+
+
+## Dependencies
+
+This filter assumes metadata in the canonical format generated by
+the [scholarly-metadata filter](../scholarly-metadata).
+
+## Usage
+
+The filter should be run after *scholarly-metadata.lua*:
+
+ pandoc --lua-filter=scholarly-metadata/scholarly-metadata.lua \
+ --lua-filter=author-info-blocks/author-inffo-blocks.lua \
+ --output=outfile.pdf --pdf-engine=xelatex \
+ article.md
+
+The ways in which affiliation data should be given is described
+in the docs for **scholarly-metadata.lua*. Additionally, authors
+who contributed equally to an article can be marked by adding
+`equal_contributor: yes` to the respective YAML objects.
+Similarly, corresponding authors should be marked with
+`correspondence: yes` and have an `email` listed.
+
+### Example
+
+Take the following example YAML block:
+
+``` yaml
+---
+title: Affiliation Blocks Example
+author:
+ - Jane Doe:
+ institute:
+ - federation
+ equal_contributor: "yes"
+ correspondence: "yes"
+ email: jane.doe@example.com
+ - John Q. Doe:
+ institute: [federation, acme]
+ equal_contributor: "yes"
+ - Juan Pérez:
+ institute: acme
+institute:
+ - federation: Federation of Planets
+ - acme:
+ name: Acme Corporation
+---
+```
+
+This will mark Jane Doe and John Q. Doe as equal contributors and
+Jane Doe as the sole corresponding author. Below is a screenshot
+of a document header created from this metadata.
+
+![example document screenshot](document-screenshot.jpg)
diff --git a/paper/lua-filters/author-info-blocks/author-info-blocks.lua b/paper/lua-filters/author-info-blocks/author-info-blocks.lua
new file mode 100644
index 0000000..27e32bc
--- /dev/null
+++ b/paper/lua-filters/author-info-blocks/author-info-blocks.lua
@@ -0,0 +1,176 @@
+--[[
+affiliation-blocks – generate title components
+
+Copyright © 2017–2019 Albert Krewinkel
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+]]
+local List = require 'pandoc.List'
+local utils = require 'pandoc.utils'
+local stringify = utils.stringify
+
+local default_marks
+local default_marks = {
+ corresponding_author = FORMAT == 'latex'
+ and {pandoc.RawInline('latex', '*')}
+ or {pandoc.Str '✉'},
+ equal_contributor = FORMAT == 'latex'
+ and {pandoc.RawInline('latex', '$\\dagger{}$')}
+ or {pandoc.Str '*'},
+}
+
+local function intercalate(lists, elem)
+ local result = List:new{}
+ for i = 1, (#lists - 1) do
+ result:extend(lists[i])
+ result:extend(elem)
+ end
+ if #lists > 0 then
+ result:extend(lists[#lists])
+ end
+ return result
+end
+
+--- Check whether the given author is a corresponding author
+local function is_corresponding_author(author)
+ return author.correspondence and author.email
+end
+
+--- Create inlines for a single author (includes all author notes)
+local function author_inline_generator (get_mark)
+ return function (author)
+ local author_marks = List:new{}
+ if author.equal_contributor then
+ author_marks[#author_marks + 1] = get_mark 'equal_contributor'
+ end
+ local idx_str
+ for _, idx in ipairs(author.institute) do
+ if type(idx) ~= 'table' then
+ idx_str = tostring(idx)
+ else
+ idx_str = stringify(idx)
+ end
+ author_marks[#author_marks + 1] = {pandoc.Str(idx_str)}
+ end
+ if is_corresponding_author(author) then
+ author_marks[#author_marks + 1] = get_mark 'corresponding_author'
+ end
+ local res = List.clone(author.name)
+ res[#res + 1] = pandoc.Superscript(intercalate(author_marks, {pandoc.Str ','}))
+ return res
+ end
+end
+
+local function is_equal_contributor (author)
+ return author.equal_contributor
+end
+
+--- Create equal contributors note.
+local function create_equal_contributors_block(authors, mark)
+ local has_equal_contribs = List:new(authors):find_if(is_equal_contributor)
+ if not has_equal_contribs then
+ return nil
+ end
+ local contributors = {
+ pandoc.Superscript(mark'equal_contributor'),
+ pandoc.Space(),
+ pandoc.Str 'These authors contributed equally to this work.'
+ }
+ return List:new{pandoc.Para(contributors)}
+end
+
+--- Generate a block list all affiliations, marked with arabic numbers.
+local function create_affiliations_blocks(affiliations)
+ local affil_lines = List:new(affiliations):map(
+ function (affil, i)
+ local num_inlines = List:new{
+ pandoc.Superscript{pandoc.Str(tostring(i))},
+ pandoc.Space()
+ }
+ return num_inlines .. affil.name
+ end
+ )
+ return {pandoc.Para(intercalate(affil_lines, {pandoc.LineBreak()}))}
+end
+
+--- Generate a block element containing the correspondence information
+local function create_correspondence_blocks(authors, mark)
+ local corresponding_authors = List:new{}
+ for _, author in ipairs(authors) do
+ if is_corresponding_author(author) then
+ local mailto = 'mailto:' .. pandoc.utils.stringify(author.email)
+ local author_with_mail = List:new(
+ author.name .. List:new{pandoc.Space(), pandoc.Str '<'} ..
+ author.email .. List:new{pandoc.Str '>'}
+ )
+ local link = pandoc.Link(author_with_mail, mailto)
+ table.insert(corresponding_authors, {link})
+ end
+ end
+ if #corresponding_authors == 0 then
+ return nil
+ end
+ local correspondence = List:new{
+ pandoc.Superscript(mark'corresponding_author'),
+ pandoc.Space(),
+ pandoc.Str'Correspondence:',
+ pandoc.Space()
+ }
+ local sep = List:new{pandoc.Str',', pandoc.Space()}
+ return {
+ pandoc.Para(correspondence .. intercalate(corresponding_authors, sep))
+ }
+end
+
+--- Generate a list of inlines containing all authors.
+local function create_authors_inlines(authors, mark)
+ local inlines_generator = author_inline_generator(mark)
+ local inlines = List:new(authors):map(inlines_generator)
+ local and_str = List:new{pandoc.Space(), pandoc.Str'and', pandoc.Space()}
+
+ local last_author = inlines[#inlines]
+ inlines[#inlines] = nil
+ local result = intercalate(inlines, {pandoc.Str ',', pandoc.Space()})
+ if #authors > 1 then
+ result:extend(List:new{pandoc.Str ","} .. and_str)
+ end
+ result:extend(last_author)
+ return result
+end
+
+return {
+ {
+ Pandoc = function (doc)
+ local meta = doc.meta
+ local body = List:new{}
+
+ local mark = function (mark_name) return default_marks[mark_name] end
+
+ body:extend(create_equal_contributors_block(doc.meta.author, mark) or {})
+ body:extend(create_affiliations_blocks(doc.meta.institute) or {})
+ body:extend(create_correspondence_blocks(doc.meta.author, mark) or {})
+ body:extend(doc.blocks)
+
+ -- Overwrite authors with formatted values. We use a single, formatted
+ -- string for most formats. LaTeX output, however, looks nicer if we
+ -- provide a authors as a list.
+ meta.author = FORMAT:match 'latex'
+ and pandoc.MetaList(doc.meta.author):map(author_inline_generator(mark))
+ or pandoc.MetaInlines(create_authors_inlines(doc.meta.author, mark))
+ -- Institute info is now baked into the affiliations block.
+ meta.institute = nil
+
+ return pandoc.Pandoc(body, meta)
+ end
+ }
+}
diff --git a/paper/lua-filters/author-info-blocks/document-screenshot.jpg b/paper/lua-filters/author-info-blocks/document-screenshot.jpg
new file mode 100644
index 0000000..9e30e9f
--- /dev/null
+++ b/paper/lua-filters/author-info-blocks/document-screenshot.jpg
Binary files differ
diff --git a/paper/lua-filters/author-info-blocks/expected.native b/paper/lua-filters/author-info-blocks/expected.native
new file mode 100644
index 0000000..6608de7
--- /dev/null
+++ b/paper/lua-filters/author-info-blocks/expected.native
@@ -0,0 +1,5 @@
+Pandoc (Meta {unMeta = fromList [("author",MetaInlines [Str "Jane",Space,Str "Doe",Superscript [Str "*",Str ",",Str "1",Str ",",Str "\9993"],Str ",",Space,Str "John",Space,Str "Q.",Space,Str "Doe",Superscript [Str "*",Str ",",Str "1",Str ",",Str "2"],Str ",",Space,Str "and",Space,Str "Juan",Space,Str "P\233rez",Superscript [Str "2"]]),("title",MetaInlines [Str "Affiliation",Space,Str "Blocks",Space,Str "Example"])]})
+[Para [Superscript [Str "*"],Space,Str "These authors contributed equally to this work."]
+,Para [Superscript [Str "1"],Space,Str "Federation",Space,Str "of",Space,Str "Planets",LineBreak,Superscript [Str "2"],Space,Str "Acme",Space,Str "Corporation"]
+,Para [Superscript [Str "\9993"],Space,Str "Correspondence:",Space,Link ("",[],[]) [Str "Jane",Space,Str "Doe",Space,Str "<",Str "jane.doe@example.com",Str ">"] ("mailto:jane.doe@example.com","")]
+,Para [Str "Lorem",Space,Str "ipsum",Space,Str "dolor",Space,Str "sit",Space,Str "amet."]]
diff --git a/paper/lua-filters/author-info-blocks/sample.md b/paper/lua-filters/author-info-blocks/sample.md
new file mode 100644
index 0000000..541aa26
--- /dev/null
+++ b/paper/lua-filters/author-info-blocks/sample.md
@@ -0,0 +1,28 @@
+---
+author:
+- correspondence: yes
+ email: 'jane.doe\@example.com'
+ equal_contributor: yes
+ id: Jane Doe
+ institute:
+ - 1
+ name: Jane Doe
+- equal_contributor: yes
+ id: 'John Q. Doe'
+ institute:
+ - 1
+ - 2
+ name: 'John Q. Doe'
+- id: Juan Pérez
+ institute:
+ - 2
+ name: Juan Pérez
+institute:
+- id: federation
+ name: Federation of Planets
+- id: acme
+ name: Acme Corporation
+title: Affiliation Blocks Example
+---
+
+Lorem ipsum dolor sit amet.
diff --git a/paper/lua-filters/bibexport/Makefile b/paper/lua-filters/bibexport/Makefile
new file mode 100644
index 0000000..67081b0
--- /dev/null
+++ b/paper/lua-filters/bibexport/Makefile
@@ -0,0 +1,5 @@
+test:
+ @pandoc --lua-filter=bibexport.lua sample.md > /dev/null
+ @diff --strip-trailing-cr -u bibexport.aux expected.bibexport.aux
+ @diff --strip-trailing-cr -u bibexport.bib expected.bibexport.bib
+ @rm -f bibexport.aux bibexport.bib
diff --git a/paper/lua-filters/bibexport/README.md b/paper/lua-filters/bibexport/README.md
new file mode 100644
index 0000000..ea1b54d
--- /dev/null
+++ b/paper/lua-filters/bibexport/README.md
@@ -0,0 +1,31 @@
+# bibexport
+
+Export all cited references into a single bibtex file. This is
+most useful when writing collaboratively while using a large,
+private bibtex collection. Using the bibexport filter allows to
+create a reduced bibtex file suitable for sharing with
+collaborators.
+
+## Prerequisites
+
+This filter expects the `bibexport` executable to be installed
+and in the user's PATH.
+
+## Usage
+
+The filter runs `bibexport` on a temporary *aux* file, creating
+the file *bibexport.bib* on success. The name of the temporary
+*.aux* file can be set via the `auxfile` meta value; if no value
+is specified, *bibexport.aux* will be used as filename.
+
+Please note that `bibexport` prints messages to stdout. Pandoc
+should be called with the `-o` or `--output` option instead of
+redirecting stdout to a file. E.g.
+
+ pandoc --lua-filter=bibexport.lua article.md -o article.html
+
+or, when the filter is called in a one-off fashion
+
+ pandoc --lua-filter=bibexport.lua article.md -o /dev/null
+
+
diff --git a/paper/lua-filters/bibexport/bibexport.lua b/paper/lua-filters/bibexport/bibexport.lua
new file mode 100644
index 0000000..9174e69
--- /dev/null
+++ b/paper/lua-filters/bibexport/bibexport.lua
@@ -0,0 +1,82 @@
+local utils = require 'pandoc.utils'
+local List = require 'pandoc.List'
+
+local citation_id_set = {}
+
+-- Collect all citation IDs.
+function Cite (c)
+ local cs = c.citations
+ for i = 1, #cs do
+ citation_id_set[cs[i].id or cs[i].citationId] = true
+ end
+end
+
+--- Return a list of citation IDs
+function citation_ids ()
+ local citations = {};
+ for cid, _ in pairs(citation_id_set) do
+ citations[#citations + 1] = cid
+ end
+ return citations
+end
+
+function bibdata (bibliography)
+ function bibname (bibitem)
+ if type(bibitem) == 'string' then
+ return bibitem:gsub('%.bib$', '')
+ else
+ -- bibitem is assumed to be a list of inlines
+ return utils.stringify(pandoc.Span(bibitem)):gsub('%.bib$', '')
+ end
+ end
+
+ local bibs = bibliography.t == 'MetaList'
+ and List.map(bibliography, bibname)
+ or {bibname(bibliography)}
+ return table.concat(bibs, ',')
+end
+
+function aux_content(bibliography)
+ local cites = citation_ids()
+ table.sort(cites)
+ local citations = table.concat(cites, ',')
+ return table.concat(
+ {
+ '\\bibstyle{alpha}',
+ '\\bibdata{' .. bibdata(bibliography) .. '}',
+ '\\citation{' .. citations .. '}',
+ '',
+ },
+ '\n'
+ )
+end
+
+function write_dummy_aux (bibliography, auxfile)
+ local filename
+ if type(auxfile) == 'string' then
+ filename = auxfile
+ elseif type(auxfile) == 'table' then
+ -- assume list of inlines
+ filename = utils.stringify(pandoc.Span(auxfile))
+ else
+ filename = 'bibexport.aux'
+ end
+ local fh = io.open(filename, 'w')
+ fh:write(aux_content(bibliography))
+ fh:close()
+ io.stdout:write('Aux written to ' .. filename .. '\n')
+ return filename
+end
+
+function Pandoc (doc)
+ local meta = doc.meta
+ if not meta.bibliography then
+ return nil
+ else
+ -- create a dummy .aux file
+ local auxfile_name = write_dummy_aux(meta.bibliography, meta.auxfile)
+ os.execute('bibexport ' .. auxfile_name)
+ io.stdout:write('Output written to bibexport.bib\n')
+ return nil
+ end
+end
diff --git a/paper/lua-filters/bibexport/coffee.bib b/paper/lua-filters/bibexport/coffee.bib
new file mode 100644
index 0000000..80b723c
--- /dev/null
+++ b/paper/lua-filters/bibexport/coffee.bib
@@ -0,0 +1,48 @@
+@article{BrSm02,
+ author = {C. F. Brice and A. P. Smith},
+ title = {Effects of caffeine on mood and performance: a study on
+ realistic consumption},
+ journal = {Psychopharmacology (Berlin)},
+ year = 2002,
+ volume = 164,
+ pages = {188--192}
+}
+
+@article{LoSnMuKo95,
+ author = {M. M. Lorist and J. Snel and G. Mulder and A. Kok},
+ title = {Aging, caffeine, and information processing: an
+ event-related potential analysis},
+ journal = {Electroencephalogr Clin Neurophysiol},
+ year = 1995,
+ volume = 96,
+ pages = {453--467}
+}
+
+@article{Li95,
+ author = {L. Linde},
+ title = {Mental effects of caffeine in fatigued and non-fatigued
+ female and male subjects},
+ journal = {Ergonomics},
+ year = 1995,
+ volume = 38,
+ pages = {864--885}
+}
+
+@article{KjOs07,
+ author = {Dannie Kjeldgaard and Jacob Ostberg},
+ title = {Coffee grounds and the global cup: glocal consumer culture
+ in scandinavia},
+ journal = {Consumption, Markets and Culture},
+ year = 2007,
+ pages = {175--187},
+ volume = 10,
+ issue = 2
+}
+
+@book{De92,
+ author = {G Debry},
+ title = {Coffee and Health: Composition, Consumption and Effect upon Health},
+ publisher = {John Libbey Eurotext},
+ year = 1992,
+ ISBN = {2-7420-0037-2}
+}
diff --git a/paper/lua-filters/bibexport/expected.bibexport.aux b/paper/lua-filters/bibexport/expected.bibexport.aux
new file mode 100644
index 0000000..d5f3144
--- /dev/null
+++ b/paper/lua-filters/bibexport/expected.bibexport.aux
@@ -0,0 +1,3 @@
+\bibstyle{alpha}
+\bibdata{sample,coffee}
+\citation{Li95,Upper_writers_1974}
diff --git a/paper/lua-filters/bibexport/expected.bibexport.bib b/paper/lua-filters/bibexport/expected.bibexport.bib
new file mode 100644
index 0000000..57448ed
--- /dev/null
+++ b/paper/lua-filters/bibexport/expected.bibexport.bib
@@ -0,0 +1,27 @@
+
+
+@article{Li95,
+ author = {L. Linde},
+ journal = {Ergonomics},
+ pages = {864--885},
+ title = {Mental effects of caffeine in fatigued and
+ non-fatigued female and male subjects},
+ volume = {38},
+ year = {1995},
+}
+
+@article{Upper_writers_1974,
+ author = {Upper, Dennis},
+ journal = {Journal of Applied Behavior Analysis},
+ number = {3},
+ pages = {497--497},
+ publisher = {Blackwell Publishing Ltd},
+ title = {The unsuccessful self-treatment of a case of
+ “writer's block”},
+ volume = {7},
+ year = {1974},
+ doi = {10.1901/jaba.1974.7-497a},
+ issn = {1938-3703},
+ url = {http://dx.doi.org/10.1901/jaba.1974.7-497a},
+}
+
diff --git a/paper/lua-filters/bibexport/sample.bib b/paper/lua-filters/bibexport/sample.bib
new file mode 100644
index 0000000..876eea1
--- /dev/null
+++ b/paper/lua-filters/bibexport/sample.bib
@@ -0,0 +1,13 @@
+@article {Upper_writers_1974,
+ author = {Upper, Dennis},
+ title = {The unsuccessful self-treatment of a case of “writer's block”},
+ journal = {Journal of Applied Behavior Analysis},
+ volume = {7},
+ number = {3},
+ publisher = {Blackwell Publishing Ltd},
+ issn = {1938-3703},
+ url = {http://dx.doi.org/10.1901/jaba.1974.7-497a},
+ doi = {10.1901/jaba.1974.7-497a},
+ pages = {497--497},
+ year = {1974},
+}
diff --git a/paper/lua-filters/bibexport/sample.md b/paper/lua-filters/bibexport/sample.md
new file mode 100644
index 0000000..d458b37
--- /dev/null
+++ b/paper/lua-filters/bibexport/sample.md
@@ -0,0 +1,18 @@
+---
+bibliography:
+- sample.bib
+- coffee.bib
+...
+
+# Abstract
+
+This is an example article. It was written under the influence of
+coffee, which acts to counter fatigue [@Li95].
+
+
+# Further reading
+
+Authors struggling to fill their document with content are referred to
+@Upper_writers_1974.
+
+# References
diff --git a/paper/lua-filters/cito/Makefile b/paper/lua-filters/cito/Makefile
new file mode 100644
index 0000000..1997818
--- /dev/null
+++ b/paper/lua-filters/cito/Makefile
@@ -0,0 +1,6 @@
+test:
+ @pandoc --lua-filter=cito.lua --output=output.md --standalone sample.md
+ @diff -u expected.md output.md
+ @rm -f output.md
+
+.PHONY: test
diff --git a/paper/lua-filters/cito/README.md b/paper/lua-filters/cito/README.md
new file mode 100644
index 0000000..b0e2cd3
--- /dev/null
+++ b/paper/lua-filters/cito/README.md
@@ -0,0 +1,76 @@
+# cito
+
+This filter extracts optional CiTO (Citation Typing Ontology)
+information from citations and stores the information in the
+document's metadata. The extracted info is intended to be used in
+combination with other filters, templates, or custom writers. It
+is mandatory to run pandoc-citeproc *after* this filter if CiTO
+data is embedded in the document; otherwise pandoc-citeproc will
+interpret CiTO properties as part of the citation ID.
+
+## Using the Citation Typing Ontology
+
+The [citation typing ontology] (CiTO) allows authors to specify the
+reason a citation is given. This is helpful for the authors and
+their co-authors, and furthermore adds data that can be used by
+readers to search and navigate relevant publications.
+
+A CiTO annotation must come before the citation key and be
+followed by a colon. E.g., `@method_in:towbin_1979` signifies
+that the citation with ID *towbin_1979* is cited because the
+method described in that paper has been used in the paper at
+hand.
+
+[citation typing ontology]: http://purl.org/spar/cito
+
+## Recognized CiTO properties
+
+Below is the list of CiTO properties recognized by the filter,
+together with the aliases that can be used as shorthands.
+
+- agrees_with
+ - agree_with
+- citation
+- cites
+- cites_as_authority
+ - as_authority
+ - authority
+- cites_as_data_source
+- cites_as_evidence
+ - as_evidence
+ - evidence
+- cites_as_metadata_document
+ - as_metadata_document
+ - metadata_document
+ - metadata
+- cites_as_recommended_reading
+ - as_recommended_reading
+ - recommended_reading
+- disagrees_with
+ - disagree
+ - disagrees
+- disputes
+- documents
+- extends
+- includes_excerpt_from
+ - excerpt
+ - excerpt_from
+- includes_quotation_from
+ - quotation
+ - quotation_from
+- obtains_background_from
+ - background
+ - background_from
+- refutes
+- replies_to
+- updates
+- uses_data_from
+ - data
+ - data_from
+- uses_method_in
+ - method
+ - method_in
+
+## References
+
+This approach was described in <https://doi.org/10.7717/peerj-cs.112>.
diff --git a/paper/lua-filters/cito/cito.lua b/paper/lua-filters/cito/cito.lua
new file mode 100644
index 0000000..a1a3421
--- /dev/null
+++ b/paper/lua-filters/cito/cito.lua
@@ -0,0 +1,138 @@
+-- Copyright © 2017–2019 Albert Krewinkel, Robert Winkler
+--
+-- This library is free software; you can redistribute it and/or modify it
+-- under the terms of the MIT license. See LICENSE for details.
+
+local _version = '1.0.0'
+local properties_and_aliases = {
+ agrees_with = {
+ 'agree_with'
+ },
+ citation = {
+ },
+ cites = {
+ },
+ cites_as_authority = {
+ 'as_authority',
+ 'authority'
+ },
+ cites_as_data_source = {
+ "as_data_source",
+ "data_source"
+ },
+ cites_as_evidence = {
+ 'as_evidence',
+ 'evidence'
+ },
+ cites_as_metadata_document = {
+ 'as_metadata_document',
+ 'metadata_document',
+ 'metadata'
+ },
+ cites_as_recommended_reading = {
+ 'as_recommended_reading',
+ 'recommended_reading'
+ },
+ disagrees_with = {
+ 'disagree',
+ 'disagrees'
+ },
+ disputes = {
+ },
+ documents = {
+ },
+ extends = {
+ },
+ includes_excerpt_from = {
+ 'excerpt',
+ 'excerpt_from'
+ },
+ includes_quotation_from = {
+ 'quotation',
+ 'quotation_from'
+ },
+ obtains_background_from = {
+ 'background',
+ 'background_from'
+ },
+ refutes = {
+ },
+ replies_to = {
+ },
+ updates = {
+ },
+ uses_data_from = {
+ 'data',
+ 'data_from'
+ },
+ uses_method_in = {
+ 'method',
+ 'method_in'
+ },
+}
+
+local default_cito_property = 'citation'
+
+--- Map from cito aliases to the actual cito property.
+local properties_by_alias = {}
+for property, aliases in pairs(properties_and_aliases) do
+ -- every property is an alias for itself
+ properties_by_alias[property] = property
+ for _, alias in pairs(aliases) do
+ properties_by_alias[alias] = property
+ end
+end
+
+--- Split citation ID into cito property and the actual citation ID. If
+--- the ID does not seem to contain a CiTO property, the
+--- `default_cito_property` will be returned, together with the
+--- unchanged input ID.
+local function split_cito_from_id (citation_id)
+ local pattern = '^(.+):(.+)$'
+ local prop_alias, split_citation_id = citation_id:match(pattern)
+
+ if properties_by_alias[prop_alias] then
+ return properties_by_alias[prop_alias], split_citation_id
+ end
+
+ return default_cito_property, citation_id
+end
+
+--- Citations by CiTO properties.
+local function store_cito (cito_cites, prop, cite_id)
+ if not prop then
+ return
+ end
+ if not cito_cites[prop] then
+ cito_cites[prop] = {}
+ end
+ table.insert(cito_cites[prop], cite_id)
+end
+
+--- Returns a Cite filter function which extracts CiTO information and
+--- add it to the given collection table.
+local function extract_cito (cito_cites)
+ return function (cite)
+ for k, citation in pairs(cite.citations) do
+ local cito_prop, cite_id = split_cito_from_id(citation.id)
+ store_cito(cito_cites, cito_prop, cite_id)
+ citation.id = cite_id
+ end
+ return cite
+ end
+end
+
+--- Lists of citation IDs, indexed by CiTO properties.
+local citations_by_property = {}
+
+return {
+ {
+ Cite = extract_cito(citations_by_property)
+ },
+ {
+ Meta = function (meta)
+ meta.cito_cites = citations_by_property
+ return meta
+ end
+ }
+}
diff --git a/paper/lua-filters/cito/expected.md b/paper/lua-filters/cito/expected.md
new file mode 100644
index 0000000..707ff74
--- /dev/null
+++ b/paper/lua-filters/cito/expected.md
@@ -0,0 +1,19 @@
+---
+cito_cites:
+ cites_as_evidence:
+ - Li95
+ cites_as_recommended_reading:
+ - 'Upper\_writers\_1974'
+---
+
+Abstract
+========
+
+This is an example article. It was written under the influence of
+coffee, which acts to counter fatigue [@Li95].
+
+Further reading
+===============
+
+Authors struggling to fill their document with content are referred to
+@Upper_writers_1974.
diff --git a/paper/lua-filters/cito/sample.bib b/paper/lua-filters/cito/sample.bib
new file mode 100644
index 0000000..4a4ff62
--- /dev/null
+++ b/paper/lua-filters/cito/sample.bib
@@ -0,0 +1,24 @@
+@article{Li95,
+ author = {L. Linde},
+ journal = {Ergonomics},
+ pages = {864--885},
+ title = {Mental effects of caffeine in fatigued and
+ non-fatigued female and male subjects},
+ volume = {38},
+ year = {1995},
+}
+
+@article{Upper_writers_1974,
+ author = {Upper, Dennis},
+ journal = {Journal of Applied Behavior Analysis},
+ number = {3},
+ pages = {497--497},
+ publisher = {Blackwell Publishing Ltd},
+ title = {The unsuccessful self-treatment of a case of
+ “writer's block”},
+ volume = {7},
+ year = {1974},
+ doi = {10.1901/jaba.1974.7-497a},
+ issn = {1938-3703},
+ url = {http://dx.doi.org/10.1901/jaba.1974.7-497a},
+}
diff --git a/paper/lua-filters/cito/sample.md b/paper/lua-filters/cito/sample.md
new file mode 100644
index 0000000..a9989cb
--- /dev/null
+++ b/paper/lua-filters/cito/sample.md
@@ -0,0 +1,10 @@
+# Abstract
+
+This is an example article. It was written under the influence of
+coffee, which acts to counter fatigue [@cites_as_evidence:Li95].
+
+
+# Further reading
+
+Authors struggling to fill their document with content are referred to
+@recommended_reading:Upper_writers_1974.
diff --git a/paper/lua-filters/diagram-generator/.gitignore b/paper/lua-filters/diagram-generator/.gitignore
new file mode 100644
index 0000000..01e67c0
--- /dev/null
+++ b/paper/lua-filters/diagram-generator/.gitignore
@@ -0,0 +1,2 @@
+sample.html
+tmp-latex
diff --git a/paper/lua-filters/diagram-generator/Makefile b/paper/lua-filters/diagram-generator/Makefile
new file mode 100644
index 0000000..ccd79c8
--- /dev/null
+++ b/paper/lua-filters/diagram-generator/Makefile
@@ -0,0 +1,13 @@
+.PHONY: test
+test: sample.html
+
+sample.html: sample.md
+ @pandoc --self-contained \
+ --lua-filter=diagram-generator.lua \
+ --metadata=pythonPath:"python3" \
+ --metadata=title:"README" \
+ --output=$@ $<
+
+clean:
+ rm -f sample.html
+ rm -rf tmp-latex
diff --git a/paper/lua-filters/diagram-generator/README.md b/paper/lua-filters/diagram-generator/README.md
new file mode 100644
index 0000000..d04e204
--- /dev/null
+++ b/paper/lua-filters/diagram-generator/README.md
@@ -0,0 +1,252 @@
+# Diagram Generator Lua Filter
+
+## Introduction
+This Lua filter is used to create images with or without captions from code
+blocks. Currently PlantUML, Graphviz, Ti*k*Z and Python can be processed.
+This document also serves as a test document, which is why the subsequent
+test diagrams are integrated in every supported language.
+
+## Prerequisites
+To be able to use this Lua filter, the respective external tools must be
+installed. However, it is sufficient if the tools to be used are installed.
+If you only want to use PlantUML, you don't need LaTeX or Python, etc.
+
+### PlantUML
+To use PlantUML, you must install PlantUML itself. See the
+[PlantUML website](http://plantuml.com/) for more details. It should be
+noted that PlantUML is a Java program and therefore Java must also
+be installed.
+
+By default, this filter expects the plantuml.jar file to be in the
+working directory. Alternatively, the environment variable
+`PLANTUML` can be set with a path. If, for example, a specific
+PlantUML version is to be used per pandoc document, the
+`plantumlPath` meta variable can be set.
+
+Furthermore, this filter assumes that Java is located in the
+system or user path. This means that from any place of the system
+the `java` command is understood. Alternatively, the `JAVA_HOME`
+environment variable gets used. To use a specific Java version per
+pandoc document, use the `javaPath` meta variable. Please notice
+that `JAVA_HOME` must be set to the java's home directory e.g.
+`c:\Program Files\Java\jre1.8.0_201\` whereas `javaPath` must be
+set to the absolute path of `java.exe` e.g.
+`c:\Program Files\Java\jre1.8.0_201\bin\java.exe`.
+
+Example usage:
+
+~~~~~~~~~~~~~~~~
+```{.plantuml caption="This is an image, created by **PlantUML**."}
+@startuml
+Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response
+Alice -> Bob: Another authentication Request Alice <-- Bob: another Response
+@enduml
+```
+~~~~~~~~~~~~~~~~
+
+### Graphviz
+To use Graphviz you only need to install Graphviz, as you can read
+on its [website](http://www.graphviz.org/). There are no other
+dependencies.
+
+This filter assumes that the `dot` command is located in the path
+and therefore can be used from any location. Alternatively, you can
+set the environment variable `DOT` or use the pandoc's meta variable
+`dotPath`.
+
+Example usage from [the Graphviz
+gallery](https://graphviz.gitlab.io/_pages/Gallery/directed/fsm.html):
+
+~~~~~~~~~~~~~~~~
+```{.graphviz caption="This is an image, created by **Graphviz**'s dot."}
+digraph finite_state_machine {
+ rankdir=LR;
+ size="8,5"
+ node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
+ node [shape = circle];
+ LR_0 -> LR_2 [ label = "SS(B)" ];
+ LR_0 -> LR_1 [ label = "SS(S)" ];
+ LR_1 -> LR_3 [ label = "S($end)" ];
+ LR_2 -> LR_6 [ label = "SS(b)" ];
+ LR_2 -> LR_5 [ label = "SS(a)" ];
+ LR_2 -> LR_4 [ label = "S(A)" ];
+ LR_5 -> LR_7 [ label = "S(b)" ];
+ LR_5 -> LR_5 [ label = "S(a)" ];
+ LR_6 -> LR_6 [ label = "S(b)" ];
+ LR_6 -> LR_5 [ label = "S(a)" ];
+ LR_7 -> LR_8 [ label = "S(b)" ];
+ LR_7 -> LR_5 [ label = "S(a)" ];
+ LR_8 -> LR_6 [ label = "S(b)" ];
+ LR_8 -> LR_5 [ label = "S(a)" ];
+}
+```
+~~~~~~~~~~~~~~~~
+
+### Ti*k*Z
+Ti*k*Z (cf. [Wikipedia](https://en.wikipedia.org/wiki/PGF/TikZ)) is a
+description language for graphics of any kind that can be used within
+LaTeX (cf. [Wikipedia](https://en.wikipedia.org/wiki/LaTeX)).
+
+Therefore a LaTeX system must be installed on the system. The Ti*k*Z code is
+embedded into a dynamic LaTeX document. This temporary document gets
+translated into a PDF document using LaTeX (`pdflatex`). Finally,
+Inkscape is used to convert the PDF file to the desired format.
+
+Note: We are using Inkscape here to use a stable solution for the
+convertion. Formerly ImageMagick was used instead. ImageMagick is
+not able to convert PDF files. Hence, it uses Ghostscript to do
+so, cf. [1](https://stackoverflow.com/a/6599718/2258393).
+Unfortunately, Ghostscript behaves unpredictable during Windows and
+Linux tests cases, cf. [2](https://stackoverflow.com/questions/21774561/some-pdfs-are-converted-improperly-using-imagemagick),
+[3](https://stackoverflow.com/questions/9064706/imagemagic-convert-command-pdf-convertion-with-bad-size-orientation), [4](https://stackoverflow.com/questions/18837093/imagemagic-renders-image-with-black-background),
+[5](https://stackoverflow.com/questions/37392798/pdf-to-svg-is-not-perfect),
+[6](https://stackoverflow.com/q/10288065/2258393), etc. By using Inkscape,
+we need one dependency less and get rid of unexpected Ghostscript issues.
+
+Due to this more complicated process, the use of Ti*k*Z is also more
+complicated overall. The process is error-prone: An insufficiently
+configured LaTeX installation or an insufficiently configured
+Inkscape installation can lead to errors. Overall, this results in
+the following dependencies:
+
+- Any LaTeX installation. This should be configured so that
+missing packages are installed automatically. This filter uses the
+`pdflatex` command which is available by the system's path. Alternatively,
+you can set the `PDFLATEX` environment variable. In case you have to use
+a specific LaTeX version on a pandoc document basis, you might set the
+`pdflatexPath` meta variable.
+
+- An installation of [Inkscape](https://inkscape.org/).
+It is assumed that the `inkscape` command is in the path and can be
+executed from any location. Alternatively, the environment
+variable `INKSCAPE` can be set with a path. If a specific
+version per pandoc document is to be used, the `inkscapePath`
+meta-variable can be set.
+
+In order to use additional LaTeX packages, use the optional
+`additionalPackages` attribute in your document, as in the
+example below.
+
+Example usage from [TikZ
+examples](http://www.texample.net/tikz/examples/parallelepiped/) by
+[Kjell Magne Fauske](http://www.texample.net/tikz/examples/nav1d/):
+
+~~~~~~~~~~~~~~~~
+```{.tikz caption="This is an image, created by **TikZ i.e. LaTeX**."
+ additionalPackages="\usepackage{adjustbox}"}
+\usetikzlibrary{arrows}
+\tikzstyle{int}=[draw, fill=blue!20, minimum size=2em]
+\tikzstyle{init} = [pin edge={to-,thin,black}]
+
+\resizebox{16cm}{!}{%
+ \trimbox{3.5cm 0cm 0cm 0cm}{
+ \begin{tikzpicture}[node distance=2.5cm,auto,>=latex']
+ \node [int, pin={[init]above:$v_0$}] (a) {$\frac{1}{s}$};
+ \node (b) [left of=a,node distance=2cm, coordinate] {a};
+ \node [int, pin={[init]above:$p_0$}] at (0,0) (c)
+ [right of=a] {$\frac{1}{s}$};
+ \node [coordinate] (end) [right of=c, node distance=2cm]{};
+ \path[->] (b) edge node {$a$} (a);
+ \path[->] (a) edge node {$v$} (c);
+ \draw[->] (c) edge node {$p$} (end) ;
+ \end{tikzpicture}
+ }
+}
+```
+~~~~~~~~~~~~~~~~
+
+### Python
+In order to use Python to generate a diagram, your Python code must store the
+final image data in a temporary file with the correct format. In case you use
+matplotlib for a diagram, add the following line to do so:
+
+```python
+plt.savefig("$DESTINATION$", dpi=300, fomat="$FORMAT$")
+```
+
+The placeholder `$FORMAT$` gets replace by the necessary format. Most of the
+time, this will be `png` or `svg`. The second placeholder, `$DESTINATION$`
+gets replaced by the path and file name of the destination. Both placeholders
+can be used as many times as you want. Example usage from the [Matplotlib
+examples](https://matplotlib.org/gallery/lines_bars_and_markers/cohere.html#sphx-glr-gallery-lines-bars-and-markers-cohere-py):
+
+~~~~~~~~~~~~~~~~
+```{.py2image caption="This is an image, created by **Python**."}
+import matplotlib
+matplotlib.use('Agg')
+
+import sys
+import numpy as np
+import matplotlib.pyplot as plt
+
+# Fixing random state for reproducibility
+np.random.seed(19680801)
+
+dt = 0.01
+t = np.arange(0, 30, dt)
+nse1 = np.random.randn(len(t)) # white noise 1
+nse2 = np.random.randn(len(t)) # white noise 2
+
+# Two signals with a coherent part at 10Hz and a random part
+s1 = np.sin(2 * np.pi * 10 * t) + nse1
+s2 = np.sin(2 * np.pi * 10 * t) + nse2
+
+fig, axs = plt.subplots(2, 1)
+axs[0].plot(t, s1, t, s2)
+axs[0].set_xlim(0, 2)
+axs[0].set_xlabel('time')
+axs[0].set_ylabel('s1 and s2')
+axs[0].grid(True)
+
+cxy, f = axs[1].cohere(s1, s2, 256, 1. / dt)
+axs[1].set_ylabel('coherence')
+
+fig.tight_layout()
+plt.savefig("$DESTINATION$", dpi=300, fomat="$FORMAT$")
+```
+~~~~~~~~~~~~~~~~
+
+Precondition to use Python is a Python environment which contains all
+necessary libraries you want to use. To use, for example, the standard
+[Anaconda Python](https://www.anaconda.com/distribution/) environment
+on a Microsoft Windows system ...
+
+- set the environment variable `PYTHON` or the meta key `pythonPath`
+to `c:\ProgramData\Anaconda3\python.exe`
+
+- set the environment variable `PYTHON_ACTIVATE` or the meta
+key `activatePythonPath` to `c:\ProgramData\Anaconda3\Scripts\activate.bat`.
+
+Pandoc will activate this Python environment and starts Python with your code.
+
+## How to run pandoc
+This section will show, how to call Pandoc in order to use this filter with
+meta keys. The following command assume, that the filters are stored in the
+subdirectory `filters`. Further, this is a example for a Microsoft Windows
+system.
+
+Command to use PlantUML (a single line):
+
+```
+pandoc.exe README.md -f markdown -t docx --self-contained --standalone --lua-filter=filters\diagram-generator.lua --metadata=plantumlPath:"c:\ProgramData\chocolatey\lib\plantuml\tools\plantuml.jar" --metadata=javaPath:"c:\Program Files\Java\jre1.8.0_201\bin\java.exe" -o README.docx
+```
+
+All available environment variables:
+
+- `PLANTUML` e.g. `c:\ProgramData\chocolatey\lib\plantuml\tools\plantuml.jar`; Default: `plantuml.jar`
+- `INKSCAPE` e.g. `c:\Program Files\Inkscape\inkscape.exe`; Default: `inkscape`
+- `PYTHON` e.g. `c:\ProgramData\Anaconda3\python.exe`; Default: n/a
+- `PYTHON_ACTIVATE` e.g. `c:\ProgramData\Anaconda3\Scripts\activate.bat`; Default: n/a
+- `JAVA_HOME` e.g. `c:\Program Files\Java\jre1.8.0_201`; Default: n/a
+- `DOT` e.g. `c:\ProgramData\chocolatey\bin\dot.exe`; Default: `dot`
+- `PDFLATEX` e.g. `c:\Program Files\MiKTeX 2.9\miktex\bin\x64\pdflatex.exe`; Default: `pdflatex`
+
+All available meta keys:
+
+- `plantumlPath`
+- `inkscapePath`
+- `pythonPath`
+- `activatePythonPath`
+- `javaPath`
+- `dotPath`
+- `pdflatexPath`
diff --git a/paper/lua-filters/diagram-generator/diagram-generator.lua b/paper/lua-filters/diagram-generator/diagram-generator.lua
new file mode 100644
index 0000000..aef2ea4
--- /dev/null
+++ b/paper/lua-filters/diagram-generator/diagram-generator.lua
@@ -0,0 +1,295 @@
+--[[
+ This Lua filter is used to create images with or without captions from
+ code blocks. Currently PlantUML, GraphViz, Tikz, and Python can be
+ processed. For further details, see README.md.
+
+ Thanks to @floriandd2ba and @jgm for the initial implementation of
+ the PlantUML filter, which I used as a template. Thanks also @muxueqz
+ for the code to generate a GraphViz image.
+]]
+
+-- The PlantUML path. If set, uses the environment variable PLANTUML or the
+-- value "plantuml.jar" (local PlantUML version). In order to define a
+-- PlantUML version per pandoc document, use the meta data to define the key
+-- "plantumlPath".
+local plantumlPath = os.getenv("PLANTUML") or "plantuml.jar"
+
+-- The Inkscape path. In order to define an Inkscape version per pandoc
+-- document, use the meta data to define the key "inkscapePath".
+local inkscapePath = os.getenv("INKSCAPE") or "inkscape"
+
+-- The Python path. In order to define a Python version per pandoc document,
+-- use the meta data to define the key "pythonPath".
+local pythonPath = os.getenv("PYTHON")
+
+-- The Python environment's activate script. Can be set on a per document
+-- basis by using the meta data key "activatePythonPath".
+local pythonActivatePath = os.getenv("PYTHON_ACTIVATE")
+
+-- The Java path. In order to define a Java version per pandoc document,
+-- use the meta data to define the key "javaPath".
+local javaPath = os.getenv("JAVA_HOME")
+if javaPath then
+ javaPath = javaPath .. package.config:sub(1,1) .. "bin"
+ .. package.config:sub(1,1) .. "java"
+else
+ javaPath = "java"
+end
+
+-- The dot (Graphviz) path. In order to define a dot version per pandoc
+-- document, use the meta data to define the key "dotPath".
+local dotPath = os.getenv("DOT") or "dot"
+
+-- The pdflatex path. In order to define a pdflatex version per pandoc
+-- document, use the meta data to define the key "pdflatexPath".
+local pdflatexPath = os.getenv("PDFLATEX") or "pdflatex"
+
+-- The default format is SVG i.e. vector graphics:
+local filetype = "svg"
+local mimetype = "image/svg+xml"
+
+-- Check for output formats that potentially cannot use SVG
+-- vector graphics. In these cases, we use a different format
+-- such as PNG:
+if FORMAT == "docx" then
+ filetype = "png"
+ mimetype = "image/png"
+elseif FORMAT == "pptx" then
+ filetype = "png"
+ mimetype = "image/png"
+elseif FORMAT == "rtf" then
+ filetype = "png"
+ mimetype = "image/png"
+end
+
+-- Execute the meta data table to determine the paths. This function
+-- must be called first to get the desired path. If one of these
+-- meta options was set, it gets used instead of the corresponding
+-- environment variable:
+function Meta(meta)
+ plantumlPath = meta.plantumlPath or plantumlPath
+ inkscapePath = meta.inkscapePath or inkscapePath
+ pythonPath = meta.pythonPath or pythonPath
+ pythonActivatePath = meta.activatePythonPath or pythonActivatePath
+ javaPath = meta.javaPath or javaPath
+ dotPath = meta.dotPath or dotPath
+ pdflatexPath = meta.pdflatexPath or pdflatexPath
+end
+
+-- Call plantuml.jar with some parameters (cf. PlantUML help):
+local function plantuml(puml, filetype)
+ local final = pandoc.pipe(javaPath, {"-jar", plantumlPath, "-t" .. filetype, "-pipe", "-charset", "UTF8"}, puml)
+ return final
+end
+
+-- Call dot (GraphViz) in order to generate the image
+-- (thanks @muxueqz for this code):
+local function graphviz(code, filetype)
+ local final = pandoc.pipe(dotPath, {"-T" .. filetype}, code)
+ return final
+end
+
+-- Compile LaTeX with Tikz code to an image:
+local function tikz2image(src, filetype, additionalPackages)
+
+ -- Define file names:
+ local outfile = string.format("./tmp-latex/file.%s", filetype)
+ local tmp = "./tmp-latex/file"
+ local tmpDir = "./tmp-latex/"
+
+ -- Ensure, that the tmp directory exists:
+ os.execute("mkdir -p tmp-latex")
+
+ -- Build and write the LaTeX document:
+ local f = io.open(tmp .. ".tex", 'w')
+ f:write("\\documentclass{standalone}\n\\usepackage{tikz}\n")
+
+ -- Any additional package(s) are desired?
+ if additionalPackages then
+ f:write(additionalPackages)
+ end
+
+ f:write("\\begin{document}\n")
+ f:write(src)
+ f:write("\n\\end{document}\n")
+ f:close()
+
+ -- Execute the LaTeX compiler:
+ pandoc.pipe(pdflatexPath, {'-output-directory', tmpDir, tmp}, '')
+
+ -- Build the basic Inkscape command for the conversion:
+ local baseCommand = " --without-gui --file=" .. tmp .. ".pdf"
+ local knownFormat = false
+
+ if filetype == "png" then
+
+ -- Append the subcommands to convert into a PNG file:
+ baseCommand = baseCommand .. " --export-png="
+ .. tmp .. ".png --export-dpi=300"
+ knownFormat = true
+
+ elseif filetype == "svg" then
+
+ -- Append the subcommands to convert into a SVG file:
+ baseCommand = baseCommand .. " --export-plain-svg=" .. tmp .. ".svg"
+ knownFormat = true
+
+ end
+
+ -- Unfortunately, continuation is only possible, if we know the actual
+ -- format:
+ local imgData = nil
+ if knownFormat then
+
+ -- We know the desired format. Thus, execute Inkscape:
+ os.execute("\"" .. inkscapePath .. "\"" .. baseCommand)
+
+ -- Try to open the image:
+ local r = io.open(tmp .. "." .. filetype, 'rb')
+
+ -- Read the image, if available:
+ if r then
+ imgData = r:read("*all")
+ r:close()
+ end
+
+ -- Delete the image tmp file:
+ os.remove(outfile)
+ end
+
+ -- Remove the temporary files:
+ os.remove(tmp .. ".tex")
+ os.remove(tmp .. ".pdf")
+ os.remove(tmp .. ".log")
+ os.remove(tmp .. ".aux")
+
+ return imgData
+end
+
+-- Run Python to generate an image:
+local function py2image(code, filetype)
+
+ -- Define the temp files:
+ local outfile = string.format('%s.%s', os.tmpname(), filetype)
+ local pyfile = os.tmpname()
+
+ -- Replace the desired destination's file type in the Python code:
+ local extendedCode = string.gsub(code, "%$FORMAT%$", filetype)
+
+ -- Replace the desired destination's path in the Python code:
+ extendedCode = string.gsub(extendedCode, "%$DESTINATION%$", outfile)
+
+ -- Write the Python code:
+ local f = io.open(pyfile, 'w')
+ f:write(extendedCode)
+ f:close()
+
+ -- Execute Python in the desired environment:
+ local pycmd = pythonPath .. ' ' .. pyfile
+ local command = pythonActivatePath
+ and pythonActivatePath .. ' && ' .. pycmd
+ or pycmd
+ os.execute(command)
+
+ -- Try to open the written image:
+ local r = io.open(outfile, 'rb')
+ local imgData = nil
+
+ -- When the image exist, read it:
+ if r then
+ imgData = r:read("*all")
+ r:close()
+ else
+ io.stderr:write(string.format("File '%s' could not be opened", outfile))
+ end
+
+ -- Delete the tmp files:
+ os.remove(pyfile)
+ os.remove(outfile)
+
+ return imgData
+end
+
+-- Executes each document's code block to find matching code blocks:
+function CodeBlock(block)
+
+ -- Predefine a potential image:
+ local fname = nil
+
+ -- Using a table with all known generators i.e. converters:
+ local converters = {
+ plantuml = plantuml,
+ graphviz = graphviz,
+ tikz = tikz2image,
+ py2image = py2image,
+ }
+
+ -- Check if a converter exists for this block. If not, return the block
+ -- unchanged.
+ local img_converter = converters[block.classes[1]]
+ if not img_converter then
+ return nil
+ end
+
+ -- Call the correct converter which belongs to the used class:
+ local success, img = pcall(img_converter, block.text,
+ filetype, block.attributes["additionalPackages"] or nil)
+
+ -- Was ok?
+ if success and img then
+ -- Hash the figure name and content:
+ fname = pandoc.sha1(img) .. "." .. filetype
+
+ -- Store the data in the media bag:
+ pandoc.mediabag.insert(fname, mimetype, img)
+
+ else
+
+ -- an error occured; img contains the error message
+ io.stderr:write(tostring(img))
+ io.stderr:write('\n')
+
+ end
+
+ -- Case: This code block was an image e.g. PlantUML or dot/Graphviz, etc.:
+ if fname then
+
+ -- Define the default caption:
+ local caption = {}
+ local enableCaption = nil
+
+ -- If the user defines a caption, use it:
+ if block.attributes["caption"] then
+ caption = pandoc.read(block.attributes.caption).blocks[1].content
+
+ -- This is pandoc's current hack to enforce a caption:
+ enableCaption = "fig:"
+ end
+
+ -- Create a new image for the document's structure. Attach the user's
+ -- caption. Also use a hack (fig:) to enforce pandoc to create a
+ -- figure i.e. attach a caption to the image.
+ local imgObj = pandoc.Image(caption, fname, enableCaption)
+
+ -- Now, transfer the attribute "name" from the code block to the new
+ -- image block. It might gets used by the figure numbering lua filter.
+ -- If the figure numbering gets not used, this additional attribute
+ -- gets ignored as well.
+ if block.attributes["name"] then
+ imgObj.attributes["name"] = block.attributes["name"]
+ end
+
+ -- Finally, put the image inside an empty paragraph. By returning the
+ -- resulting paragraph object, the source code block gets replaced by
+ -- the image:
+ return pandoc.Para{ imgObj }
+ end
+end
+
+-- Normally, pandoc will run the function in the built-in order Inlines ->
+-- Blocks -> Meta -> Pandoc. We instead want Meta -> Blocks. Thus, we must
+-- define our custom order:
+return {
+ {Meta = Meta},
+ {CodeBlock = CodeBlock},
+}
diff --git a/paper/lua-filters/diagram-generator/sample.md b/paper/lua-filters/diagram-generator/sample.md
new file mode 100644
index 0000000..231ccdc
--- /dev/null
+++ b/paper/lua-filters/diagram-generator/sample.md
@@ -0,0 +1,244 @@
+# Diagram Generator Lua Filter
+
+## Introduction
+This Lua filter is used to create images with or without captions from code
+blocks. Currently PlantUML, Graphviz, Ti*k*Z and Python can be processed.
+This document also serves as a test document, which is why the subsequent
+test diagrams are integrated in every supported language.
+
+## Prerequisites
+To be able to use this Lua filter, the respective external tools must be
+installed. However, it is sufficient if the tools to be used are installed.
+If you only want to use PlantUML, you don't need LaTeX or Python, etc.
+
+### PlantUML
+To use PlantUML, you must install PlantUML itself. See the
+[PlantUML website](http://plantuml.com/) for more details. It should be
+noted that PlantUML is a Java program and therefore Java must also
+be installed.
+
+By default, this filter expects the plantuml.jar file to be in the
+working directory. Alternatively, the environment variable
+`PLANTUML` can be set with a path. If, for example, a specific
+PlantUML version is to be used per pandoc document, the
+`plantumlPath` meta variable can be set.
+
+Furthermore, this filter assumes that Java is located in the
+system or user path. This means that from any place of the system
+the `java` command is understood. Alternatively, the `JAVA_HOME`
+environment variable gets used. To use a specific Java version per
+pandoc document, use the `javaPath` meta variable. Please notice
+that `JAVA_HOME` must be set to the java's home directory e.g.
+`c:\Program Files\Java\jre1.8.0_201\` whereas `javaPath` must be
+set to the absolute path of `java.exe` e.g.
+`c:\Program Files\Java\jre1.8.0_201\bin\java.exe`.
+
+Example usage:
+
+```{.plantuml caption="This is an image, created by **PlantUML**."}
+@startuml
+Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response
+Alice -> Bob: Another authentication Request Alice <-- Bob: another Response
+@enduml
+```
+
+### Graphviz
+To use Graphviz you only need to install Graphviz, as you can read
+on its [website](http://www.graphviz.org/). There are no other
+dependencies.
+
+This filter assumes that the `dot` command is located in the path
+and therefore can be used from any location. Alternatively, you can
+set the environment variable `DOT` or use the pandoc's meta variable
+`dotPath`.
+
+Example usage from [the Graphviz
+gallery](https://graphviz.gitlab.io/_pages/Gallery/directed/fsm.html):
+
+```{.graphviz caption="This is an image, created by **Graphviz**'s dot."}
+digraph finite_state_machine {
+ rankdir=LR;
+ size="8,5"
+ node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
+ node [shape = circle];
+ LR_0 -> LR_2 [ label = "SS(B)" ];
+ LR_0 -> LR_1 [ label = "SS(S)" ];
+ LR_1 -> LR_3 [ label = "S($end)" ];
+ LR_2 -> LR_6 [ label = "SS(b)" ];
+ LR_2 -> LR_5 [ label = "SS(a)" ];
+ LR_2 -> LR_4 [ label = "S(A)" ];
+ LR_5 -> LR_7 [ label = "S(b)" ];
+ LR_5 -> LR_5 [ label = "S(a)" ];
+ LR_6 -> LR_6 [ label = "S(b)" ];
+ LR_6 -> LR_5 [ label = "S(a)" ];
+ LR_7 -> LR_8 [ label = "S(b)" ];
+ LR_7 -> LR_5 [ label = "S(a)" ];
+ LR_8 -> LR_6 [ label = "S(b)" ];
+ LR_8 -> LR_5 [ label = "S(a)" ];
+}
+```
+
+### Ti*k*Z
+Ti*k*Z (cf. [Wikipedia](https://en.wikipedia.org/wiki/PGF/TikZ)) is a
+description language for graphics of any kind that can be used within
+LaTeX (cf. [Wikipedia](https://en.wikipedia.org/wiki/LaTeX)).
+
+Therefore a LaTeX system must be installed on the system. The Ti*k*Z code is
+embedded into a dynamic LaTeX document. This temporary document gets
+translated into a PDF document using LaTeX (`pdflatex`). Finally,
+Inkscape is used to convert the PDF file to the desired format.
+
+Note: We are using Inkscape here to use a stable solution for the
+convertion. Formerly ImageMagick was used instead. ImageMagick is
+not able to convert PDF files. Hence, it uses Ghostscript to do
+so, cf. [1](https://stackoverflow.com/a/6599718/2258393).
+Unfortunately, Ghostscript behaves unpredictable during Windows and
+Linux tests cases, cf. [2](https://stackoverflow.com/questions/21774561/some-pdfs-are-converted-improperly-using-imagemagick),
+[3](https://stackoverflow.com/questions/9064706/imagemagic-convert-command-pdf-convertion-with-bad-size-orientation), [4](https://stackoverflow.com/questions/18837093/imagemagic-renders-image-with-black-background),
+[5](https://stackoverflow.com/questions/37392798/pdf-to-svg-is-not-perfect),
+[6](https://stackoverflow.com/q/10288065/2258393), etc. By using Inkscape,
+we need one dependency less and get rid of unexpected Ghostscript issues.
+
+Due to this more complicated process, the use of Ti*k*Z is also more
+complicated overall. The process is error-prone: An insufficiently
+configured LaTeX installation or an insufficiently configured
+Inkscape installation can lead to errors. Overall, this results in
+the following dependencies:
+
+- Any LaTeX installation. This should be configured so that
+missing packages are installed automatically. This filter uses the
+`pdflatex` command which is available by the system's path. Alternatively,
+you can set the `PDFLATEX` environment variable. In case you have to use
+a specific LaTeX version on a pandoc document basis, you might set the
+`pdflatexPath` meta variable.
+
+- An installation of [Inkscape](https://inkscape.org/).
+It is assumed that the `inkscape` command is in the path and can be
+executed from any location. Alternatively, the environment
+variable `INKSCAPE` can be set with a path. If a specific
+version per pandoc document is to be used, the `inkscapePath`
+meta-variable can be set.
+
+In order to use additional LaTeX packages, use the optional
+`additionalPackages` attribute in your document, as in the
+example below.
+
+Example usage from [TikZ
+examples](http://www.texample.net/tikz/examples/parallelepiped/) by
+[Kjell Magne Fauske](http://www.texample.net/tikz/examples/nav1d/):
+
+```{.tikz caption="This is an image, created by **TikZ i.e. LaTeX**."
+ additionalPackages="\usepackage{adjustbox}"}
+\usetikzlibrary{arrows}
+\tikzstyle{int}=[draw, fill=blue!20, minimum size=2em]
+\tikzstyle{init} = [pin edge={to-,thin,black}]
+
+\resizebox{16cm}{!}{%
+ \trimbox{3.5cm 0cm 0cm 0cm}{
+ \begin{tikzpicture}[node distance=2.5cm,auto,>=latex']
+ \node [int, pin={[init]above:$v_0$}] (a) {$\frac{1}{s}$};
+ \node (b) [left of=a,node distance=2cm, coordinate] {a};
+ \node [int, pin={[init]above:$p_0$}] at (0,0) (c)
+ [right of=a] {$\frac{1}{s}$};
+ \node [coordinate] (end) [right of=c, node distance=2cm]{};
+ \path[->] (b) edge node {$a$} (a);
+ \path[->] (a) edge node {$v$} (c);
+ \draw[->] (c) edge node {$p$} (end) ;
+ \end{tikzpicture}
+ }
+}
+```
+
+### Python
+In order to use Python to generate an diagram, your Python code must store the
+final image data in a temporary file with the correct format. In case you use
+matplotlib for a diagram, add the following line to do so:
+
+```python
+plt.savefig("$DESTINATION$", dpi=300, fomat="$FORMAT$")
+```
+
+The placeholder `$FORMAT$` gets replace by the necessary format. Most of the
+time, this will be `png` or `svg`. The second placeholder, `$DESTINATION$`
+gets replaced by the path and file name of the destination. Both placeholders
+can be used as many times as you want. Example usage from the [Matplotlib
+examples](https://matplotlib.org/gallery/lines_bars_and_markers/cohere.html#sphx-glr-gallery-lines-bars-and-markers-cohere-py):
+
+```{.py2image caption="This is an image, created by **Python**."}
+import matplotlib
+matplotlib.use('Agg')
+
+import sys
+import numpy as np
+import matplotlib.pyplot as plt
+
+# Fixing random state for reproducibility
+np.random.seed(19680801)
+
+dt = 0.01
+t = np.arange(0, 30, dt)
+nse1 = np.random.randn(len(t)) # white noise 1
+nse2 = np.random.randn(len(t)) # white noise 2
+
+# Two signals with a coherent part at 10Hz and a random part
+s1 = np.sin(2 * np.pi * 10 * t) + nse1
+s2 = np.sin(2 * np.pi * 10 * t) + nse2
+
+fig, axs = plt.subplots(2, 1)
+axs[0].plot(t, s1, t, s2)
+axs[0].set_xlim(0, 2)
+axs[0].set_xlabel('time')
+axs[0].set_ylabel('s1 and s2')
+axs[0].grid(True)
+
+cxy, f = axs[1].cohere(s1, s2, 256, 1. / dt)
+axs[1].set_ylabel('coherence')
+
+fig.tight_layout()
+plt.savefig("$DESTINATION$", dpi=300, fomat="$FORMAT$")
+```
+
+Precondition to use Python is a Python environment which contains all
+necessary libraries you want to use. To use, for example, the standard
+[Anaconda Python](https://www.anaconda.com/distribution/) environment
+on a Microsoft Windows system ...
+
+- set the environment variable `PYTHON` or the meta key `pythonPath`
+to `c:\ProgramData\Anaconda3\python.exe`
+
+- set the environment variable `PYTHON_ACTIVATE` or the meta
+key `activatePythonPath` to `c:\ProgramData\Anaconda3\Scripts\activate.bat`.
+
+Pandoc will activate this Python environment and starts Python with your code.
+
+## How to run pandoc
+This section will show, how to call Pandoc in order to use this filter with
+meta keys. The following command assume, that the filters are stored in the
+subdirectory `filters`. Further, this is a example for a Microsoft Windows
+system.
+
+Command to use PlantUML (a single line):
+
+```
+pandoc.exe README.md -f markdown -t docx --self-contained --standalone --lua-filter=filters\diagram-generator.lua --metadata=plantumlPath:"c:\ProgramData\chocolatey\lib\plantuml\tools\plantuml.jar" --metadata=javaPath:"c:\Program Files\Java\jre1.8.0_201\bin\java.exe" -o README.docx
+```
+
+All available environment variables:
+
+- `PLANTUML` e.g. `c:\ProgramData\chocolatey\lib\plantuml\tools\plantuml.jar`; Default: `plantuml.jar`
+- `INKSCAPE` e.g. `c:\Program Files\Inkscape\inkscape.exe`; Default: `inkscape`
+- `PYTHON` e.g. `c:\ProgramData\Anaconda3\python.exe`; Default: n/a
+- `PYTHON_ACTIVATE` e.g. `c:\ProgramData\Anaconda3\Scripts\activate.bat`; Default: n/a
+- `JAVA_HOME` e.g. `c:\Program Files\Java\jre1.8.0_201`; Default: n/a
+- `DOT` e.g. `c:\ProgramData\chocolatey\bin\dot.exe`; Default: `dot`
+- `PDFLATEX` e.g. `c:\Program Files\MiKTeX 2.9\miktex\bin\x64\pdflatex.exe`; Default: `pdflatex`
+
+All available meta keys:
+
+- `plantumlPath`
+- `inkscapePath`
+- `pythonPath`
+- `activatePythonPath`
+- `javaPath`
+- `dotPath`
+- `pdflatexPath` \ No newline at end of file
diff --git a/paper/lua-filters/minted/Makefile b/paper/lua-filters/minted/Makefile
new file mode 100644
index 0000000..5d509f9
--- /dev/null
+++ b/paper/lua-filters/minted/Makefile
@@ -0,0 +1,65 @@
+.PHONY: all
+all: sample_beamer.pdf sample_latex.pdf sample.html
+
+# NOTE: `pandoc_inputs` can have multiple filenames if you want to send `pandoc`
+# more than one input file at once. In the commands for the targets that depend
+# on `pandoc_inputs` you will see a pattern `$^ > $@`. It's less magic than it
+# seems, but useful to point out if you have not seen these before. They are
+# called "Automatic Variables", and more documentation can be found here:
+#
+# https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html
+#
+# So by depending on $(pandoc_inputs) and using $^ as the input files to
+# `pandoc`, $^ will expand to all filenames in `pandoc_inputs` and the target
+# will re-run when the timestamp of _any_ file listed in `pandoc_inputs` is
+# updated. By redirecting the output to $@, it will send the `pandoc` output to
+# the target name. In the examples below, $@ expands to either
+# `sample_beamer.tex`, `sample_latex.tex`, or `sample.html` (depending on the
+# target name).
+#
+# TL;DR: You should be able to copy-paste the commands below and just rename the
+# target names to match whatever output filenames you want.
+pandoc_inputs := sample.md
+
+# Sample beamer presentation.
+sample_beamer.tex: $(pandoc_inputs)
+ pandoc -s -t beamer --no-highlight --lua-filter=minted.lua $^ > $@
+
+sample_beamer.pdf: sample_beamer.tex
+ latexmk -pdf -shell-escape -jobname=sample_beamer sample_beamer
+
+# Sample latex document.
+sample_latex.tex: $(pandoc_inputs)
+ pandoc -s -t latex --no-highlight --lua-filter=minted.lua $^ > $@
+
+sample_latex.pdf: sample_latex.tex
+ latexmk -pdf -shell-escape -jobname=sample_latex sample_latex
+
+# Sample html5 document.
+sample.html: $(pandoc_inputs)
+ pandoc -s -t html5 --lua-filter=minted.lua $^ > $@
+
+# ---
+
+.PHONY: clean realclean
+clean:
+ @# latexmk errors if no auxiliary files exist to cleanup. Using `|| true`
+ @# just makes it so that the subsequent commands will also execute.
+ latexmk -c sample_beamer >/dev/null 2>&1 || true
+ @# latexmk does not clean all beamer files
+ rm -f sample_beamer.{nav,snm,vrb}
+ rm -rf _minted-sample_beamer/
+ latexmk -c sample_latex >/dev/null 2>&1 || true
+ rm -rf _minted-sample_latex/
+
+realclean: clean
+ rm -f sample_beamer.{tex,pdf}
+ rm -f sample_latex.{tex,pdf}
+ rm -f sample.html
+
+.PHONY: test lint
+lint:
+ flake8 --max-line-length=80 run_minted_tests.py background_color.py
+
+test:
+ @./run_minted_tests.py
diff --git a/paper/lua-filters/minted/README.md b/paper/lua-filters/minted/README.md
new file mode 100644
index 0000000..b26491d
--- /dev/null
+++ b/paper/lua-filters/minted/README.md
@@ -0,0 +1,316 @@
+# minted
+
+This filter enables users to use the [`minted`][minted] package with the
+`beamer` and `latex` writers. Users may attach any desired `minted` specific
+styling / attributes to their code-blocks (or via document metadata). These
+`minted` specific attributes will be _removed_ for any writers that are not
+`beamer` or `latex`, since many of the `minted` options require using `latex`
+specific syntax that can cause problems in other output formats. For example,
+if the `fontsize=\footnotesize` attribute were applied to a code block, an
+`html` export would include `data-fontsize="\footnotesize"`, which may produce
+errors or more commonly be entirely meaningless for non-latex writers.
+
+The `minted` package will be used as a _replacement_ for the existing `pandoc`
+inline code and code block elements. Behind the scenes, `minted` builds on top
+of the `fancyvrb` latex package, using [pygments][pygments] to perform the
+highlighting. The `minted` package contains _many_ options for customizing
+output, users are encouraged to read / review section 5.3 of the
+[minted documentation][minted_docs]. **This filter does not make any attempts
+to validate arguments supplied to the `minted` package**. Invalid / conflicting
+arguments are a usage error.
+
+**Contents**
+
+- [Setup](#setup)
+ - [LaTeX Preamble Configuration](#latex-preamble-configuration)
+ - [PDF Compilation](#pdf-compilation)
+- [Minted Filter Settings](#minted-filter-settings)
+ - [Default Settings](#default-settings)
+ - [All Metadata Settings](#all-metadata-settings)
+ - [`no_default_autogobble`](#no_default_autogobble-boolean)
+ - [`no_mintinline`](#no_mintinline-boolean)
+ - [`default_block_language`](#default_block_language-string)
+ - [`default_inline_language`](#default_inline_language-string)
+ - [`block_attributes`](#block_attributes-list-of-strings)
+ - [`inline_attributes`](#inline_attributes-list-of-strings)
+- [Important Usage Notes](#important-usage-notes)
+- [Bonus](#bonus)
+
+# Setup
+
+## LaTeX Preamble Configuration
+
+Since this filter will emit `\mintline` commands for inline code, and
+`\begin{minted} ... \end{minted}` environments for code blocks, you must ensure
+that your document includes the `minted` package in the preamble of your
+`beamer` or `latex` document. The filter cannot accomplish this for you.
+
+**Option 1**
+
+Use the `header-includes` feature of `pandoc` (`-H` / `--include-in-header`).
+This will be injected into the preamble section of your `beamer` or `latex`
+document. The bare minimum you need in this file is
+
+```latex
+\usepackage{minted}
+```
+
+However, there are many other things you can set here (related or unrelated to
+this filter), and this is a good opportunity to perform some global setup on the
+`minted` package. Some examples:
+
+```latex
+\usepackage{minted}
+
+% Set the `style=tango` attribute for all minted blocks. Can still be overriden
+% per block (e.g., you want to change just one). Run `pygmentize -L` to see
+% all available options.
+\usemintedstyle{tango}
+
+% Depending on which pygments style you choose, comments and preprocessor
+% directives may be italic. The `tango` style is one of these. This disables
+% all italics in the `minted` environment.
+\AtBeginEnvironment{minted}{\let\itshape\relax}
+
+% This disables italics for the `\mintinline` commands.
+% Credit: https://tex.stackexchange.com/a/469702/113687
+\usepackage{xpatch}
+\xpatchcmd{\mintinline}{\begingroup}{\begingroup\let\itshape\relax}{}{}
+```
+
+The `minted` package has many options, see the
+[minted documentation][minted_docs] for more information. For example, see the
+`bgcolor` option for the `minted` package. In this "header-include" file would
+be an excellent location to `\definecolor`s that you want to use with `bgcolor`.
+
+**Option 1.5**
+
+You can also set `header-includes` in the metadata of your document. The above
+example could be set as (noting the escaped backslashes):
+
+```yaml
+colorlinks: true
+header-includes:
+ # Include the minted package, set global style, define colors, etc.
+ - "\\usepackage{minted}"
+ - "\\usemintedstyle{tango}"
+ # Prevent italics in the `minted` environment.
+ - "\\AtBeginEnvironment{minted}{\\let\\itshape\\relax}"
+ # Prevent italics in the `\mintinline` command.
+ - "\\usepackage{xpatch}"
+ - "`\\xpatchcmd{\\mintinline}{\\begingroup}{\\begingroup\\let\\itshape\\relax}{}{}`{=latex}"
+```
+
+Note on the last line calling `\xpatchcmd`, we escape the backslashes and
+additionally force `pandoc` to treat this as `latex` code by making it an inline
+`latex` code element. See [pandoc issue 2139 (comment)][pandoc_issue_2139] for
+more information.
+
+Formally, you may want to apply the ``-"`\\raw_tex`{=latex}"`` trick to all
+metadata to indicate it is `latex` specific code. However, since `pandoc`
+strips out any raw `latex` when converting to other writers, it isn't necessary.
+
+**Option 2**
+
+You can also create your own custom `beamer` or `latex` template to have much
+finer control over what is / is not included in your document. You may obtain
+a copy of the template that `pandoc` uses by default by running
+`pandoc -D beamer` or `pandoc -D latex` depending on your document type.
+
+After you have modified the template to suit your needs (including at the very
+least a `\usepackage{minted}`), specify your template file to `pandoc` using
+the `--template <path/to/template/file>` command line argument.
+
+## PDF Compilation
+
+To compile a PDF, there are two things that the `minted` package requires be
+available: an escaped shell to be able to run external commands (the
+`-shell-escape` command line flag), and the ability to create and later read
+auxiliary files (`minted` runs `pygmentize` for the highlighting).
+
+At the time of writing this, only one of these is accessible using `pandoc`
+directly. One may pass `--pdf-engine-opt=-shell-escape` to forward the
+`-shell-escape` flag to the latex engine being used. Unfortunately, though,
+the second component (related to temporary files being created) is not supported
+by `pandoc`. See [pandoc issue 4271][pandoc_issue_4271].
+
+**However**, in reality this is an minor issue that can easily be worked around.
+Instead of generating `md => pdf`, you just use `pandoc` to generate `md => tex`
+and then compile `tex => pdf` yourself. See the [sample Makefile](Makefile) for
+examples of how to execute both stages. **Furthermore**, you will notice a
+significant advantage of managing the `pdf` compilation yourself: the generated
+`minted` files are cached and unless you `make clean` (or remove them manually),
+unchanged code listings will be reused. That is, you will have faster
+compilation times :slightly_smiling_face:
+
+# Minted Filter Settings
+
+Direct control over the settings of this filter are performed by setting
+sub-keys of a `minted` metadata key for your document.
+
+## Default Settings
+
+By default, this filter
+
+1. Transforms all inline `Code` elements to `\mintinline`. This can be disabled
+ globally by setting `no_mintinline: true`.
+
+2. Transforms all `CodeBlock` elements to `\begin{minted} ... \end{minted}` raw
+ latex code. This cannot be disabled.
+
+3. Both (1) and (2) default to the `"text"` pygments lexer, meaning that inline
+ code or code blocks without a specific code class applied will receive no
+ syntax highlighting. This can be changed globally by setting
+ `default_block_language: "lexer"` or `default_inline_language: "lexer"`.
+
+4. All `CodeBlock` elements have the `autogobble` attribute applied to them,
+ which informs `minted` to trim all common preceding whitespace. This can be
+ disabled globally by setting `no_default_autogobble: true`. However, doing
+ this is **strongly discouraged**. Consider a code block nested underneath
+ a list item. Pandoc will (correctly) generate indented code, meaning you
+ will need to manually inform `minted` to `gobble=indent` where `indent` is
+ the number of spaces to trim. Note that `pandoc` may not reproduce the same
+ indentation level of the original document.
+
+## All Metadata Settings
+
+Each of the following are nested under the `minted` metadata key.
+
+### `no_default_autogobble` (boolean)
+
+By default this filter will always use `autogobble` with minted, which will
+automatically trim common preceding whitespace. This is important because
+code blocks nested under a list or other block elements _will_ have common
+preceding whitespace that you _will_ want trimmed.
+
+### `no_mintinline` (boolean)
+
+Globally prevent this filter from emitting `\mintinline` calls for inline
+Code elements, emitting `\texttt` instead. Possibly useful in saving
+compile time for large documents that do not seek to have syntax
+highlighting on inline code elements.
+
+### `default_block_language` (string)
+
+The default pygments lexer class to use for code blocks. By default this
+is `"text"`, meaning no syntax highlighting. This is a fallback value, code
+blocks that explicitly specify a lexer will not use it.
+
+### `default_inline_language` (string)
+
+Same as `default_block_language`, only for inline code (typed in single
+backticks). The default is also `"text"`, and changing is discouraged.
+
+### `block_attributes` (list of strings)
+
+Any default attributes to apply to _all_ code blocks. These may be
+overriden on a per-code-block basis. See section 5.3 of the
+[minted documentation][minted_docs] for available options.
+
+### `inline_attributes` (list of strings)
+
+Any default attributes to apply to _all_ inline code. These may be
+overriden on a per-code basis. See section 5.3 of the
+[minted documentation][minted_docs] for available options.
+
+[minted_docs]: http://mirrors.ctan.org/macros/latex/contrib/minted/minted.pdf
+[minted]: https://ctan.org/pkg/minted?lang=en
+[pygments]: http://pygments.org/
+[pandoc_issue_2139]: https://github.com/jgm/pandoc/issues/2139#issuecomment-310522113
+[pandoc_issue_4271]: https://github.com/jgm/pandoc/issues/4721
+
+# Important Usage Notes
+
+Refer to the [`sample.md`](sample.md) file for some live examples of how to use
+this filter. If you execute `make` in this directory, `sample_beamer.pdf`,
+`sample_latex.pdf`, and `sample.html` will all be generated to demonstrate the
+filter in action.
+
+`pandoc` allows you to specify additional attributes on either the closing
+backtick of an inline code element, or after the third backtick of a fenced
+code block. This is done using `{curly braces}`, an example:
+
+```md
+`#include <type_traits>`{.cpp .showspaces style=bw}
+```
+
+or
+
+ ```{.cpp .showspaces style=bw}
+ #include <type_traits>
+ ```
+
+In order, these are
+
+- `.cpp`: specify the language lexer class.
+- `.showspaces`: a `minted` boolean attribute.
+- `style=bw`: a `minted` attribute that takes an argument (`bw` is a pygments
+ style, black-white, just an example).
+
+There are two rules that must not be violated:
+
+1. Any time you want to supply extra arguments to `minted` to a specific inline
+ code or code block element, **the lexer class must always be first, and
+ always be present**.
+
+ This is a limitation of the implementation of this filter.
+
+2. Observe the difference between specifying boolean attributes vs attributes
+ that take an argument. Boolean `minted` attributes **must** have a leading
+ `.`, and `minted` attributes that take an argument **may not** have a leading
+ `.`.
+
+ - **Yes**: `{.cpp .showspaces}`, **No**: `{.cpp showspaces}`
+ - **Yes**: `{.cpp style=bw}`, **No**: `{.cpp .style=bw}`
+
+ If you violate this, then `pandoc` will likely not produce an actual inline
+ `Code` or `CodeBlock` element, but instead something else (undefined).
+
+Last, but not least, you will see that the `--no-highlight` flag is used in the
+`Makefile` for the latex targets. This is added in the spirit of the filter
+being a "full replacement" for `pandoc` highlighting with `minted`. This only
+affects inline code elements that meet the following criteria:
+
+1. The inline code element has a lexer, e.g., `{.cpp}`.
+2. The inline code element can actually be parsed for that language by `pandoc`.
+
+If these two conditions are met, and you do **not** specify `--no-highlight`,
+the `pandoc` highlighting engine will take over. Users are encouraged to build
+the samples (`make` in this directory) and look at the end of the
+`Special Characters are Supported` section. If you remove `--no-highlight`,
+`make realclean`, and then `make` again, you will see that the pandoc
+highlighting engine will colorize the `auto foo = [](){};`.
+
+Simply put: if you do not want any pandoc highlighting in your LaTeX, **make
+sure you add `--no-highlight`** and it will not happen.
+
+It is advantageous for this filter to rely on this behavior, because it means
+that the filter does not need to worry about escaping special characters for
+LaTeX -- `pandoc` will do that for us. Inspect the generated `sample_*.tex`
+files (near the end) to see the difference. `--no-highlight` will produce
+`\texttt` commands, but omitting this flag will result in some `\VERB` commands
+from `pandoc`.
+
+# Bonus
+
+Included here is a simple python script to help you get the right color
+definitions for `bgcolor` with minted. Just run
+[`background_color.py`](background_color.py) with a single argument that is the
+name of the pygments style you want the `latex` background color definition for:
+
+```console
+$ ./background_color.py monokai
+Options for monokai (choose *one*):
+
+ (*) \definecolor{monokai_bg}{HTML}{272822}
+ (*) \definecolor{monokai_bg}{RGB}{39,40,34}
+ (*) \definecolor{monokai_bg}{rgb}{0.1529,0.1569,0.1333}
+ |--------/
+ |
+ +--> You can rename this too :)
+```
+
+See the contents of [`sample.md`](sample.md) (click on "View Raw" to see the
+comments in the metadata section). Notably, in order to use `\definecolor` you
+should make sure that the `xcolor` package is actually included. Comments in
+the file explain the options.
diff --git a/paper/lua-filters/minted/background_color.py b/paper/lua-filters/minted/background_color.py
new file mode 100755
index 0000000..e830db4
--- /dev/null
+++ b/paper/lua-filters/minted/background_color.py
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+
+r"""
+A simple script to print out the RGB ``\definecolor`` command for the background
+color of a specified pygments style name.
+"""
+
+import sys
+try:
+ from pygments.styles import get_style_by_name
+except ImportError as ie:
+ sys.stderr.write("Please install the Pygments package:\n{0}\n".format(ie))
+ sys.exit(1)
+
+
+if __name__ == "__main__":
+ # Make sure we have a style name provided.
+ if len(sys.argv) != 2:
+ sys.stderr.write("Usage: {0} <style_name>\n\n".format(sys.argv[0]))
+ sys.stderr.write(" Tip: run `pygmentize -L` to see style names.\n")
+ sys.exit(1)
+
+ # Grab the style object, error out if invalid name.
+ style_name = sys.argv[1]
+ try:
+ style = get_style_by_name(style_name)
+ except Exception as e:
+ sys.stderr.write("Unable to find {0}:\n{1}\n".format(style_name, e))
+ sys.exit(1)
+
+ # Convert the hexadecimal string into rgb.
+ background_hex = style.background_color.replace("#", "")
+ if len(background_hex) != 6:
+ sys.stderr.write("Unknown hex color: {0}\n".format(background_hex))
+ sys.exit(1)
+
+ try:
+ r = int(background_hex[0:2], 16)
+ g = int(background_hex[2:4], 16)
+ b = int(background_hex[4:6], 16)
+ except Exception as e:
+ sys.stderr.write("Unable to convert to integers:\n{0}\n".format(e))
+ sys.exit(1)
+
+ # Build out the various options for \definecolor
+ # All should be equivalent, but users may have a preference of one format
+ # over another :p
+ tex_color_name = "{0}_bg".format(style_name)
+ def_HTML = r"\definecolor{{{0}}}{{HTML}}{{{1}}}".format(
+ tex_color_name, background_hex.upper()
+ )
+ def_RGB = r"\definecolor{{{0}}}{{RGB}}{{{1}}}".format(
+ tex_color_name, "{0},{1},{2}".format(r, g, b)
+ )
+ def_rgb = r"\definecolor{{{0}}}{{rgb}}{{{1}}}".format(
+ tex_color_name,
+ ",".join(["{0:.4}".format(float(c) / 255.0) for c in [r, g, b]])
+ )
+
+ # Enumerate the options
+ print("Options for {0} (choose *one*):\n".format(style_name))
+ print(" (*) {0}".format(def_HTML))
+ print(" (*) {0}".format(def_RGB))
+ print(" (*) {0}".format(def_rgb))
+
+ # Make sure they know that `{style_name}_bg` can be changed to whatever
+ # they want to be using in their document.
+ notice = "{0}|{1}/".format(
+ len(r" (*) \definecolor{") * " ",
+ (len(tex_color_name) - 2) * "-"
+ )
+ vline = notice[0:notice.find("|")+1]
+ can_change = vline.replace("|", "+--> You can rename this too :)")
+ print(notice)
+ print(vline)
+ print(can_change)
diff --git a/paper/lua-filters/minted/minted.lua b/paper/lua-filters/minted/minted.lua
new file mode 100644
index 0000000..19f608e
--- /dev/null
+++ b/paper/lua-filters/minted/minted.lua
@@ -0,0 +1,456 @@
+--[[
+minted -- enable the minted environment for code listings in beamer and latex.
+
+MIT License
+
+Copyright (c) 2019 Stephen McDowell
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+]]
+
+--------------------------------------------------------------------------------
+-- Quick documentation. See full documentation here: --
+-- https://github.com/pandoc/lua-filters/blob/master/minted --
+--------------------------------------------------------------------------------
+--[[
+Brief overview of metadata keys that you can use in your document:
+
+minted:
+ no_default_autogobble: <boolean>, *DISCOURAGED*
+ no_mintinline: <boolean>
+ default_block_language: <string>
+ default_inline_language: <string>
+ block_attributes: <list of strings>
+ - attr_1
+ - attr_2
+ - ...
+ inline_attributes: <list of strings>
+ - attr_1
+ - attr_2
+ - ...
+
+In words, underneath the `minted` metadata key, you have the following options:
+
+### `no_default_autogobble` (boolean)
+
+By default this filter will always use `autogobble` with minted, which will
+automatically trim common preceding whitespace. This is important because
+code blocks nested under a list or other block elements _will_ have common
+preceding whitespace that you _will_ want trimmed.
+
+### `no_mintinline` (boolean)
+
+Globally prevent this filter from emitting `\mintinline` calls for inline
+Code elements, emitting `\texttt` instead. Possibly useful in saving
+compile time for large documents that do not seek to have syntax
+highlighting on inline code elements.
+
+### `default_block_language` (string)
+
+The default pygments lexer class to use for code blocks. By default this
+is `"text"`, meaning no syntax highlighting. This is a fallback value, code
+blocks that explicitly specify a lexer will not use it.
+
+### `default_inline_language` (string)
+
+Same as `default_block_language`, only for inline code (typed in single
+backticks). The default is also `"text"`, and changing is discouraged.
+
+### `block_attributes` (list of strings)
+
+Any default attributes to apply to _all_ code blocks. These may be
+overriden on a per-code-block basis. See section 5.3 of the
+[minted documentation][minted_docs] for available options.
+
+### `inline_attributes` (list of strings)
+
+Any default attributes to apply to _all_ inline code. These may be
+overriden on a per-code basis. See section 5.3 of the
+[minted documentation][minted_docs] for available options.
+
+[minted_docs]: http://mirrors.ctan.org/macros/latex/contrib/minted/minted.pdf
+]]
+
+local List = require('pandoc.List')
+
+--------------------------------------------------------------------------------
+-- Potential metadata elements to override. --
+--------------------------------------------------------------------------------
+local minted_no_mintinline = false
+local minted_default_block_language = "text"
+local minted_default_inline_language = "text"
+local minted_block_attributes = {}
+local minted_inline_attributes = {}
+
+--------------------------------------------------------------------------------
+-- Constants used to differentiate Code and CodeBlock elements. --
+--------------------------------------------------------------------------------
+local MintedInline = 0
+local MintedBlock = 1
+
+--------------------------------------------------------------------------------
+-- Utility functions. --
+--------------------------------------------------------------------------------
+-- Return the string lexer class to be used with minted. `elem` should be
+-- either a Code or CodeBlock element (whose `classes` list will be inspected
+-- first). `kind` is assumed to be either `MintedInline` or `MintedBlock` in
+-- order to choose the appropriate fallback lexer when unspecified.
+local function minted_language(elem, kind)
+ -- If the code [block] attached classes, we assume the first one is the
+ -- lexer class to use.
+ if #elem.classes > 0 then
+ return elem.classes[1]
+ end
+ -- Allow user-level metadata to override the inline language.
+ if kind == MintedInline then
+ return minted_default_inline_language
+ end
+ -- Allow user-level metadata to override the block language.
+ if kind == MintedBlock then
+ return minted_default_block_language
+ end
+
+ -- Failsafe, should not hit here unless function called incorrectly.
+ return "text"
+end
+
+-- Returns a boolean specifying whether or not the specified string `cls` is an
+-- option that is supported by the minted package.
+local function is_minted_class(cls)
+ -- Section 5.3 Available Options of Minted documentation. Note that many of
+ -- these do not apply to \mintinline (inline Code). Users are responsible
+ -- for supplying valid arguments to minted. For example, specifying
+ -- `autogobble` and `gobble` at the same time is a usage error.
+ --
+ -- http://mirrors.ctan.org/macros/latex/contrib/minted/minted.pdf
+ local all_minted_options = List:new{
+ "autogobble", "baselinestretch", "beameroverlays", "breakafter",
+ "breakaftergroup", "breakaftersymbolpre", "breakaftersymbolpost",
+ "breakanywhere", "breakanywheresymbolpre", "breakanywheresymbolpost",
+ "breakautoindent", "breakbefore", "breakbeforegroup",
+ "breakbeforesymbolpre", "breakbeforesymbolpost", "breakbytoken",
+ "breakbytokenanywhere", "breakindent", "breakindentnchars", "breaklines",
+ "breaksymbol", "breaksymbolleft", "breaksymbolright", "breaksymbolindent",
+ "breaksymbolindentnchars", "breaksymbolindentleft",
+ "breaksymbolindentleftnchars", "breaksymbolindentright",
+ "breaksymbolindentrightnchars", "breaksymbolsep", "breaksymbolsepnchars",
+ "breaksymbolsepleft", "breaksymbolsepleftnchars", "breaksymbolsepright",
+ "breaksymbolseprightnchars", "bgcolor", "codetagify", "curlyquotes",
+ "encoding", "escapeinside", "firstline", "firstnumber", "fontfamily",
+ "fontseries", "fontsize", "fontshape", "formatcom", "frame", "framerule",
+ "framesep", "funcnamehighlighting", "gobble", "highlightcolor",
+ "highlightlines", "keywordcase", "label", "labelposition", "lastline",
+ "linenos", "numberfirstline", "numbers", "mathescape", "numberblanklines",
+ "numbersep", "obeytabs", "outencoding", "python3", "resetmargins",
+ "rulecolor", "samepage", "showspaces", "showtabs", "space", "spacecolor",
+ "startinline", "style", "stepnumber", "stepnumberfromfirst",
+ "stepnumberoffsetvalues", "stripall", "stripnl", "tab", "tabcolor",
+ "tabsize", "texcl", "texcomments", "xleftmargin", "xrightmargin"
+ }
+ return all_minted_options:includes(cls, 0)
+end
+
+-- Return a string for the minted attributes `\begin{minted}[attributes]` or
+-- `\mintinline[attributes]`. Attributes are acquired by inspecting the
+-- specified element's `classes` and `attr` fields. Any global attributes
+-- provided in the document metadata will be included _only_ if they do not
+-- override the element-level attributes.
+--
+-- `elem` should either be a Code or CodeBlock element, and `kind` is assumed to
+-- be either `MintedInline` or `MintedBlock`. The `kind` determines which
+-- global default attribute list to use.
+local function minted_attributes(elem, kind)
+ -- The full listing of attributes that will be joined and returned.
+ local minted_attributes = {}
+
+ -- Book-keeping, track xxx=yyy keys `xxx` that have been added to
+ -- `minted_attributes` to make checking optional global defaults via the
+ -- `block_attributes` or `inline_attributes` easier.
+ local minted_keys = {}
+
+ -- Boolean style options for minted (e.g., ```{.bash .autogobble}) will appear
+ -- in the list of classes.
+ for _, cls in ipairs(elem.classes) do
+ if is_minted_class(cls) then
+ table.insert(minted_attributes, cls)
+ table.insert(minted_keys, cls)
+ end
+ end
+
+ -- Value options using key=value (e.g., ```{.bash fontsize=\scriptsize}) show
+ -- up in the list of attributes.
+ for _, attr in ipairs(elem.attributes) do
+ cls, value = attr[1], attr[2]
+ if is_minted_class(cls) then
+ table.insert(minted_attributes, cls .. "=" .. value)
+ table.insert(minted_keys, cls)
+ end
+ end
+
+ -- Add any global defaults _only_ if they do not conflict. Note that conflict
+ -- is only in the literal sense. If a user has `autogobble` and `gobble=2`
+ -- specified, these do conflict in the minted sense, but this filter makes no
+ -- checks on validity ;)
+ local global_defaults = nil
+ if kind == MintedInline then
+ global_defaults = minted_inline_attributes
+ elseif kind == MintedBlock then
+ global_defaults = minted_block_attributes
+ end
+ for _, global_attr in ipairs(global_defaults) do
+ -- Either use the index of `=` minus one, or -1 if no `=` present. Fallback
+ -- on -1 means that the substring is the original string.
+ local end_idx = (string.find(global_attr, "=") or 0) - 1
+ local global_key = string.sub(global_attr, 1, end_idx)
+ local can_insert_global = true
+ for _, existing_key in ipairs(minted_keys) do
+ if existing_key == global_key then
+ can_insert_global = false
+ break
+ end
+ end
+
+ if can_insert_global then
+ table.insert(minted_attributes, global_attr)
+ end
+ end
+
+ -- Return a comma delimited string for specifying the attributes to minted.
+ return table.concat(minted_attributes, ",")
+end
+
+-- Return the specified `elem` with any minted data removed from the `classes`
+-- and `attr`. Otherwise writers such as the HTML writer might produce invalid
+-- code since latex makes heavy use of the \backslash.
+local function remove_minted_attibutes(elem)
+ -- Remove any minted items from the classes.
+ classes = {}
+ for _, cls in ipairs(elem.classes) do
+ if not is_minted_class(cls) and cls ~= "no_minted" then
+ table.insert(classes, cls)
+ end
+ end
+ elem.classes = classes
+
+ -- Remove any minted items from the attributes.
+ extra_attrs = {}
+ for _, attr in ipairs(elem.attributes) do
+ cls, value = attr[1], attr[2]
+ if not is_minted_class(cls) then
+ table.insert(extra_attrs, {cls, value})
+ end
+ end
+ elem.attributes = extra_attrs
+
+ -- Return the (potentially modified) element for pandoc to take over.
+ return elem
+end
+
+-- Return a `start_delim` and `end_delim` that can safely wrap around the
+-- specified `text` when used inline. If no special characters occur in `text`,
+-- then a pair of braces are returned. Otherwise, if any character of
+-- `possible_delims` are not in `text`, then it is returned. If no delimiter
+-- could be found, an error is raised.
+local function minted_inline_delims(text)
+ local start_delim, end_delim
+ if text:find('[{}]') then
+ -- Try some other delimiter (the alphanumeric digits are in Python's
+ -- string.digits + string.ascii_letters order)
+ possible_delims = ('|!@#^&*-=+' .. '0123456789' ..
+ 'abcdefghijklmnopqrstuvwxyz' ..
+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
+ for char in possible_delims:gmatch('.') do
+ if not text:find(char, 1, true) then
+ start_delim = char
+ end_delim = char
+ break
+ end
+ end
+ if not start_delim then
+ local msg = 'Unable to determine delimiter to use around inline code %q'
+ error(msg:format(text))
+ end
+ else
+ start_delim = '{'
+ end_delim = '}'
+ end
+
+ return start_delim, end_delim
+end
+
+--------------------------------------------------------------------------------
+-- Pandoc overrides. --
+--------------------------------------------------------------------------------
+-- Override the pandoc Meta function so that we can parse the metadata for the
+-- document and store the necessary variables locally to use in other functions
+-- such as Code and CodeBlock (helper methods).
+function Meta(m)
+ -- Grab the `minted` metadata, quit early if not present.
+ local minted = m["minted"]
+ local found_autogobble = false
+ local always_autogobble = true
+ if minted ~= nil then
+ -- Parse and set the global bypass to turn off all \mintinline calls.
+ local no_mintinline = minted["no_mintinline"]
+ if no_mintinline ~= nil then
+ minted_no_mintinline = no_mintinline
+ end
+
+ -- Parse and set the default block language.
+ local default_block_language = minted.default_block_language
+ and pandoc.utils.stringify(minted.default_block_language)
+ if default_block_language ~= nil then
+ minted_default_block_language = default_block_language
+ end
+
+ -- Parse and set the default inline language.
+ local default_inline_language = minted.default_inline_language
+ and pandoc.utils.stringify(minted.default_inline_language)
+ if default_inline_language ~= nil then
+ minted_default_inline_language = default_inline_language
+ end
+
+ -- Parse the global default minted attributes to use on every block.
+ local block_attributes = minted["block_attributes"]
+ if block_attributes ~= nil then
+ for _, attr in ipairs(block_attributes) do
+ if attr == "autogobble" then
+ found_autogobble = true
+ end
+ table.insert(minted_block_attributes, attr[1].text)
+ end
+ end
+
+ -- Allow users to turn off autogobble for blocks, but really they should not
+ -- ever seek to do this (indented code blocks under list for example).
+ local no_default_autogobble = minted["no_default_autogobble"]
+ if no_default_autogobble ~= nil then
+ always_autogobble = not no_default_autogobble
+ end
+
+ -- Parse the global default minted attributes to use on ever inline.
+ local inline_attributes = minted["inline_attributes"]
+ if inline_attributes ~= nil then
+ for _, attr in ipairs(inline_attributes) do
+ table.insert(minted_inline_attributes, attr[1].text)
+ end
+ end
+ end
+
+ -- Make sure autogobble is turned on by default if no `minted` meta key is
+ -- provided for the document.
+ if always_autogobble and not found_autogobble then
+ table.insert(minted_block_attributes, "autogobble")
+ end
+
+ -- Return the metadata to pandoc (unchanged).
+ return m
+end
+
+-- Override inline code elements to use \mintinline for beamer / latex writers.
+-- Other writers have all minted attributes removed.
+function Code(elem)
+ if FORMAT == "beamer" or FORMAT == "latex" then
+ -- Allow a bypass to turn off \mintinline via adding .no_minted class.
+ local found_no_minted_class = false
+ for _, cls in ipairs(elem.classes) do
+ if cls == "no_minted" then
+ found_no_minted_class = true
+ break
+ end
+ end
+
+ -- Check for local or global bypass to turn off \mintinline
+ if minted_no_mintinline or found_no_minted_class then
+ return nil -- Return `nil` signals to `pandoc` that elem is not changed.
+ end
+
+ local start_delim, end_delim = minted_inline_delims(elem.text)
+ local language = minted_language(elem, MintedInline)
+ local attributes = minted_attributes(elem, MintedInline)
+ local raw_minted = string.format(
+ "\\mintinline[%s]{%s}%s%s%s",
+ attributes,
+ language,
+ start_delim,
+ elem.text,
+ end_delim
+ )
+ -- NOTE: prior to pandoc commit 24a0d61, `beamer` cannot be used as the
+ -- RawBlock format. Using `latex` should not cause any problems.
+ return pandoc.RawInline("latex", raw_minted)
+ else
+ return remove_minted_attibutes(elem)
+ end
+end
+
+-- Override code blocks to use \begin{minted}...\end{minted} for beamer / latex
+-- writers. Other writers have all minted attributes removed.
+function CodeBlock(block)
+ if FORMAT == "beamer" or FORMAT == "latex" then
+ local language = minted_language(block, MintedBlock)
+ local attributes = minted_attributes(block, MintedBlock)
+ local raw_minted = string.format(
+ "\\begin{minted}[%s]{%s}\n%s\n\\end{minted}",
+ attributes,
+ language,
+ block.text
+ )
+ -- NOTE: prior to pandoc commit 24a0d61, `beamer` cannot be used as the
+ -- RawBlock format. Using `latex` should not cause any problems.
+ return pandoc.RawBlock("latex", raw_minted)
+ else
+ return remove_minted_attibutes(block)
+ end
+end
+
+-- Override headers to make all beamer frames fragile, since any minted
+-- environments or \mintinline invocations will halt compilation if the frame
+-- is not marked as fragile.
+function Header(elem)
+ if FORMAT == 'beamer' then
+ -- Check first that 'fragile' is not already present.
+ local has_fragile = false
+ for _, val in ipairs(elem.classes) do
+ if val == 'fragile' then
+ has_fragile = true
+ break
+ end
+ end
+
+ -- If not found, add fragile to the list of classes.
+ if not has_fragile then
+ table.insert(elem.classes, 'fragile')
+ end
+
+ -- NOTE: pass the remaining work to pandoc, noting that 2.5 and below
+ -- may duplicate the 'fragile' specifier. Duplicated fragile does *not*
+ -- cause compile errors.
+ return elem
+ end
+end
+
+-- NOTE: order of return matters, Meta needs to be first otherwise the metadata
+-- from the document will not be loaded _first_.
+return {
+ {Meta = Meta},
+ {Code = Code},
+ {CodeBlock = CodeBlock},
+ {Header = Header}
+}
diff --git a/paper/lua-filters/minted/run_minted_tests.py b/paper/lua-filters/minted/run_minted_tests.py
new file mode 100755
index 0000000..15803da
--- /dev/null
+++ b/paper/lua-filters/minted/run_minted_tests.py
@@ -0,0 +1,522 @@
+#!/usr/bin/env python
+
+"""
+Unit tests for the pandoc minted.lua filter.
+"""
+
+# Lint this file with: flake8 --max-line-length=80
+import os
+import string
+import subprocess
+import sys
+import textwrap
+
+code_block = textwrap.dedent('''
+ ## A Code Block
+
+ ```{.cpp}
+ auto mult = []<typename T, typename U>(T const & x, U const & y) {
+ return x * y;
+ };
+ ```
+''')
+"""
+The base CodeBlock code. {.cpp} is used as a replacement marker in most tests!
+"""
+
+inline_delims = '|!@#^&*-=+' + string.digits + string.ascii_letters
+inline_code = textwrap.dedent('''
+ ## Inline Code
+
+ `#include <type_traits>`{.cpp}
+ C and C++ use `{` and `}` to delimit scopes.
+ Some other special characters:
+ These check bypass: `~!@#$%^&*()-=_+[]\\{}|;\':",./<>?`
+ These check regular inline: ''' + ' '.join(
+ '`{' + inline_delims[:i] + '`' for i in range(len(inline_delims))
+))
+"""
+The base Code code. {.cpp} is used as a replacement marker in most tests!
+"""
+
+
+def run_pandoc(pandoc_args, stdin):
+ """Run pandoc with the specified arguments, returning the output."""
+ # The input / output should be small enough for these tests that buffer
+ # overflows should not happen.
+ pandoc_proc = subprocess.Popen(
+ ["pandoc"] + pandoc_args,
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=subprocess.PIPE
+ )
+
+ # Python 3.x and later require communicating with bytes.
+ if sys.version_info[0] >= 3:
+ stdin = bytes(stdin, "utf-8")
+
+ stdout, stderr = pandoc_proc.communicate(input=stdin)
+ if pandoc_proc.returncode != 0:
+ sys.stderr.write("Non-zero exit code of {ret} from pandoc!\n".format(
+ ret=pandoc_proc.returncode
+ ))
+ sys.stderr.write("pandoc stderr: {stderr}".format(
+ stderr=stderr.decode("utf-8")
+ ))
+ sys.exit(1)
+
+ return stdout.decode("utf-8")
+
+
+def fail_test(test_name, messages, ansi_color_code="31"):
+ """
+ Print failure message and ``sys.exit(1)``.
+
+ ``test_name`` (str)
+ The name of the test (to make finding in code easier).
+
+ ``messages`` (list of str -- or -- str)
+ A single string, or list of strings, to print out to ``stderr`` that
+ explain the reason for the test failure.
+
+ ``ansi_color_code`` (str)
+ A an ANSI color code to use to colorize the failure message :) Default
+ is ``"31"``, which is red.
+ """
+ sys.stderr.write(
+ "\033[0;{ansi_color_code}mTest {test_name} FAILED\033[0m\n".format(
+ ansi_color_code=ansi_color_code, test_name=test_name
+ )
+ )
+ if isinstance(messages, list):
+ for m in messages:
+ sys.stderr.write("--> {m}\n".format(m=m))
+ else:
+ sys.stderr.write("--> {messages}\n".format(messages=messages))
+ sys.exit(1)
+
+
+def ensure_fragile(test_name, pandoc_output):
+ r"""
+ Ensure that every \begin{frame} has (at least one) fragile.
+
+ ``test_name`` (str)
+ The name of the test (forwards to ``fail_test``).
+
+ ``pandoc_output`` (str)
+ The pandoc output for the test case.
+ """
+ for line in pandoc_output.splitlines():
+ if r"\begin{frame}" in line:
+ if "fragile" not in line:
+ fail_test(
+ test_name,
+ r"\begin{frame} without 'fragile': {line}".format(line=line)
+ )
+
+
+def ensure_present(test_name, string, pandoc_output):
+ """
+ Assert that ``string`` is found in ``pandoc_output``.
+
+ ``test_name`` (str)
+ The name of the test (forwards to ``fail_test``).
+
+ ``string`` (str)
+ The string to check verbatim ``string in pandoc_output``.
+
+ ``pandoc_output`` (str)
+ The pandoc output for the test case.
+ """
+ if string not in pandoc_output:
+ fail_test(
+ test_name,
+ "The requested string '{string}' was not found in:\n{pout}".format(
+ string=string, pout=pandoc_output
+ )
+ )
+
+
+def ensure_not_present(test_name, string, pandoc_output):
+ """
+ Assert that ``string`` is **not** found in ``pandoc_output``.
+
+ ``test_name`` (str)
+ The name of the test (forwards to ``fail_test``).
+
+ ``string`` (str)
+ The string to check verbatim ``string not in pandoc_output``.
+
+ ``pandoc_output`` (str)
+ The pandoc output for the test case.
+ """
+ if string in pandoc_output:
+ fail_test(
+ test_name,
+ "The forbidden string '{string}' was found in:\n{pout}".format(
+ string=string, pout=pandoc_output
+ )
+ )
+
+
+def run_tex_tests(pandoc_args, fmt):
+ """
+ Run same tests for latex writers.
+
+ ``pandoc_args`` (list of str)
+ The base list of arguments to forward to pandoc. Some tests may remove
+ the ``--no-highlight`` flag to validate whether or not pandoc
+ highlighting macros appear as expected (or not at all).
+
+ ``fmt`` (str)
+ The format is assumed to be either 'latex' or 'beamer'.
+ """
+ def verify(test_name, args, md, *strings):
+ """Run pandoc, ensure fragile, and string in output."""
+ output = run_pandoc(args + ["-t", fmt], md)
+ if fmt == "beamer":
+ ensure_fragile(test_name, output)
+ else: # latex writer
+ ensure_not_present(test_name, "fragile", output)
+ for s in strings:
+ ensure_present(test_name, s, output)
+ # Make sure the pandoc highlighting is not being used
+ if "--no-highlight" in args:
+ ensure_not_present(test_name, r"\VERB", output)
+ # if `nil` is present, that likely means a problem parsing the metadata
+ ensure_not_present(test_name, "nil", output)
+
+ ############################################################################
+ # CodeBlock tests. #
+ ############################################################################
+ begin_minted = r"\begin{{minted}}[{attrs}]{{{lang}}}"
+ verify(
+ "[code-block] default",
+ pandoc_args,
+ code_block,
+ begin_minted.format(attrs="autogobble", lang="cpp")
+ )
+ verify(
+ "[code-block] no_default_autogobble",
+ pandoc_args,
+ textwrap.dedent('''
+ ---
+ minted:
+ no_default_autogobble: true
+ ---
+ {code_block}
+ ''').format(code_block=code_block),
+ begin_minted.format(attrs="", lang="cpp")
+ )
+ verify(
+ "[code-block] default block language is 'text'",
+ pandoc_args,
+ code_block.replace("{.cpp}", ""),
+ begin_minted.format(attrs="autogobble", lang="text")
+ )
+ verify(
+ "[code-block] user provided default_block_language",
+ pandoc_args,
+ textwrap.dedent('''
+ ---
+ minted:
+ default_block_language: "haskell"
+ ---
+ {code_block}
+ ''').format(code_block=code_block.replace("{.cpp}", "")),
+ begin_minted.format(attrs="autogobble", lang="haskell")
+ )
+ verify(
+ "[code-block] user provided block_attributes",
+ pandoc_args,
+ textwrap.dedent('''
+ ---
+ minted:
+ block_attributes:
+ - "showspaces"
+ - "space=."
+ ---
+ {code_block}
+ ''').format(code_block=code_block),
+ begin_minted.format(
+ attrs=",".join(["showspaces", "space=.", "autogobble"]),
+ lang="cpp"
+ )
+ )
+ verify(
+ "[code-block] user provided block_attributes and no_default_autogobble",
+ pandoc_args,
+ textwrap.dedent('''
+ ---
+ minted:
+ no_default_autogobble: true
+ block_attributes:
+ - "style=monokai"
+ - "bgcolor=monokai_bg"
+ ---
+ {code_block}
+ ''').format(code_block=code_block),
+ begin_minted.format(
+ attrs=",".join(["style=monokai", "bgcolor=monokai_bg"]), lang="cpp"
+ )
+ )
+ verify(
+ "[code-block] attributes on code block",
+ pandoc_args,
+ code_block.replace(
+ "{.cpp}", "{.cpp .showspaces bgcolor=tango_bg style=tango}"
+ ),
+ begin_minted.format(
+ attrs=",".join([
+ "showspaces", "bgcolor=tango_bg", "style=tango", "autogobble"
+ ]),
+ lang="cpp"
+ )
+ )
+ verify(
+ "[code-block] attributes on code block + user block_attributes",
+ pandoc_args,
+ textwrap.dedent('''
+ ---
+ minted:
+ block_attributes:
+ - "showspaces"
+ - "space=."
+ ---
+ {code_block}
+ ''').format(
+ code_block=code_block.replace(
+ "{.cpp}", "{.cpp bgcolor=tango_bg style=tango}"
+ )
+ ),
+ begin_minted.format(
+ attrs=",".join([
+ "bgcolor=tango_bg",
+ "style=tango",
+ "showspaces",
+ "space=.",
+ "autogobble"
+ ]),
+ lang="cpp"
+ )
+ )
+ verify(
+ "[code-block] traditional fenced code block",
+ pandoc_args,
+ code_block.replace("{.cpp}", "cpp"),
+ begin_minted.format(attrs="autogobble", lang="cpp")
+ )
+ verify(
+ "[code-block] non-minted attributes not forwarded",
+ pandoc_args,
+ code_block.replace("{.cpp}", "{.cpp .showspaces .hello}"),
+ begin_minted.format(
+ attrs=",".join(["showspaces", "autogobble"]), lang="cpp"
+ )
+ )
+
+ ############################################################################
+ # Inline Code tests. #
+ ############################################################################
+ mintinline = r"\mintinline[{attrs}]{{{lang}}}"
+ verify(
+ "[inline-code] default",
+ pandoc_args,
+ inline_code,
+ mintinline.format(attrs="", lang="cpp"),
+ "|{|",
+ "|}|",
+ *[
+ delim + '{' + inline_delims[:i] + delim
+ for i, delim in enumerate(inline_delims)
+ ]
+ )
+ verify(
+ "[inline-code] default language is text",
+ pandoc_args,
+ inline_code,
+ mintinline.format(attrs="", lang="text"),
+ "|{|",
+ "|}|"
+ )
+ # begin: global no_mintinline shared testing with / without --no-highlight
+ inline_no_mintinline_globally_md = textwrap.dedent('''
+ ---
+ minted:
+ no_mintinline: true
+ ---
+ {inline_code}
+ ''').format(inline_code=inline_code)
+ inline_no_mintinline_globally_strings = [
+ r"\texttt{\{}",
+ r"\texttt{\}}",
+ (r"\texttt{" +
+ r"\textasciitilde{}!@\#\$\%\^{}\&*()-=\_+{[}{]}\textbackslash{}\{\}" +
+ r"""\textbar{};\textquotesingle{}:",./\textless{}\textgreater{}?}""")
+ ]
+ verify(
+ "[inline-code] no_mintinline off globally",
+ pandoc_args,
+ inline_no_mintinline_globally_md,
+ r"\texttt{\#include\ \textless{}type\_traits\textgreater{}}",
+ *inline_no_mintinline_globally_strings
+ )
+ verify(
+ "[inline-code] no_mintinline off globally, remove --no-highlight",
+ [arg for arg in pandoc_args if arg != "--no-highlight"],
+ inline_no_mintinline_globally_md,
+ r"\VERB|\PreprocessorTok{#include }\ImportTok{<type_traits>}|",
+ *inline_no_mintinline_globally_strings
+ )
+ # end: global no_mintinline shared testing with / without --no-highlight
+ # begin: no_minted shared testing with / without --no-highlight
+ inline_no_minted_md = inline_code.replace("{.cpp}", "{.cpp .no_minted}")
+ inline_no_minted_strings = ["|{|", "|}|"]
+ verify(
+ "[inline-code] .no_minted on single inline Code",
+ pandoc_args,
+ inline_no_minted_md,
+ r"texttt{\#include\ \textless{}type\_traits\textgreater{}}",
+ *inline_no_minted_strings
+ )
+ verify(
+ "[inline-code] .no_minted on single inline Code, remove --no-highlight",
+ [arg for arg in pandoc_args if arg != "--no-highlight"],
+ inline_no_minted_md,
+ r"\VERB|\PreprocessorTok{#include }\ImportTok{<type_traits>}|",
+ *inline_no_minted_strings
+ )
+ # end: no_minted shared testing with / without --no-highlight
+ verify(
+ "[inline-code] user provided default_inline_language",
+ pandoc_args,
+ textwrap.dedent('''
+ ---
+ minted:
+ default_inline_language: "haskell"
+ ---
+ {inline_code}
+ ''').format(inline_code=inline_code),
+ mintinline.format(attrs="", lang="haskell")
+ )
+ verify(
+ "[inline-code] user provided inline_attributes",
+ pandoc_args,
+ textwrap.dedent('''
+ ---
+ minted:
+ inline_attributes:
+ - "showspaces"
+ - "space=."
+ ---
+ {inline_code}
+ ''').format(inline_code=inline_code),
+ mintinline.format(
+ attrs=",".join(["showspaces", "space=."]), lang="cpp"
+ ),
+ mintinline.format(
+ attrs=",".join(["showspaces", "space=."]), lang="text"
+ )
+ )
+ verify(
+ "[inline-code] attributes on inline code",
+ pandoc_args,
+ inline_code.replace(
+ "{.cpp}", "{.cpp .showspaces bgcolor=tango_bg style=tango}"
+ ),
+ mintinline.format(
+ attrs=",".join(["showspaces", "bgcolor=tango_bg", "style=tango"]),
+ lang="cpp"
+ )
+ )
+ verify(
+ "[inline-code] attributes on inline code + user inline_attributes",
+ pandoc_args,
+ textwrap.dedent('''
+ ---
+ minted:
+ inline_attributes:
+ - "showspaces"
+ - "space=."
+ ---
+ {inline_code}
+ ''').format(
+ inline_code=inline_code.replace(
+ "{.cpp}", "{.cpp bgcolor=tango_bg style=tango}"
+ )
+ ),
+ mintinline.format(
+ attrs=",".join([
+ "bgcolor=tango_bg",
+ "style=tango",
+ "showspaces",
+ "space=."
+ ]),
+ lang="cpp"
+ )
+ )
+ verify(
+ "[inline-code] non-minted attributes not forwarded",
+ pandoc_args,
+ inline_code.replace("{.cpp}", "{.cpp .showspaces .hello}"),
+ mintinline.format(attrs="showspaces", lang="cpp")
+ )
+
+
+def run_html_tests(args):
+ """
+ Run tests with an html5 writer to make sure minted commands are not used.
+ Also make sure minted specific attributes are indeed stripped.
+
+ ``args`` (list of str)
+ The base list of arguments to forward to pandoc.
+ """
+ def verify(test_name, md, attrs=[]):
+ """Verify minted and any strings in attrs not produced"""
+ output = run_pandoc(args + ["-t", "html5"], md)
+ ensure_not_present(test_name, "mint", output)
+ ensure_not_present(test_name, "fragile", output)
+ if attrs:
+ for a in attrs:
+ ensure_not_present(test_name, a, output)
+ # if `nil` is present, that likely means a problem parsing the metadata
+ ensure_not_present(test_name, "nil", output)
+
+ verify(r"[html] no \begin{minted}", code_block)
+ verify(r"[html] no \mintinline", inline_code)
+ verify(
+ r"[html] no \begin{minted} or \mintinline",
+ "{code_block}\n\n{inline_code}".format(
+ code_block=code_block, inline_code=inline_code
+ )
+ )
+ verify(
+ "[html] code block minted specific attributes stripped",
+ code_block.replace(
+ "{.cpp}",
+ "{.cpp .showspaces space=. bgcolor=minted_bg style=minted}"
+ ),
+ ["showspaces", "space", "bgcolor", "style"]
+ )
+ verify(
+ "[html] inline code minted specific attributes stripped",
+ inline_code.replace(
+ "{.cpp}",
+ "{.cpp .showspaces space=. bgcolor=minted_bg style=minted}"
+ ),
+ ["showspaces", "space", "bgcolor", "style"]
+ )
+
+
+if __name__ == "__main__":
+ # Initial path setup for input tests and lua filter
+ this_file_dir = os.path.abspath(os.path.dirname(__file__))
+ minted_lua = os.path.join(this_file_dir, "minted.lua")
+ if not os.path.isfile(minted_lua):
+ sys.stderr.write("Cannot find '{minted_lua}'...".format(
+ minted_lua=minted_lua
+ ))
+ sys.exit(1)
+
+ args = ["--fail-if-warnings", "--no-highlight", "--lua-filter", minted_lua]
+ run_tex_tests(args, "beamer")
+ run_tex_tests(args, "latex")
+ run_html_tests(args)
diff --git a/paper/lua-filters/minted/sample.md b/paper/lua-filters/minted/sample.md
new file mode 100644
index 0000000..7197047
--- /dev/null
+++ b/paper/lua-filters/minted/sample.md
@@ -0,0 +1,135 @@
+---
+title: Pandoc Minted Sample
+# NOTE: If you want to use `\definecolor` commands in your `header-includes`
+# section, setting `colorlinks: true` will `\usepackage{xcolor}` which is needed
+# for `\definecolor`. You can alternatively `\usepackage{xcolor}` explicitly in
+# in the `header-includes` section if you do not want everything else that
+# `colorlinks: true` will bring in. See `pandoc -D latex` output to see
+# everything that `colorlinks: true` will do _in addition_ to including xcolor.
+colorlinks: true
+header-includes:
+ # Include the minted package, set global style, define colors, etc.
+ - "\\usepackage{minted}"
+ - "\\usemintedstyle{tango}"
+ - "\\definecolor{tango_bg}{rgb}{0.9725,0.9725,0.9725}"
+ - "\\definecolor{monokai_bg}{rgb}{0.1529,0.1569,0.1333}"
+ # NOTE: comment out these last three and recompile to see the italics used
+ # by default for the `tango` style.
+ # Prevent italics in the `minted` environment.
+ - "\\AtBeginEnvironment{minted}{\\let\\itshape\\relax}"
+ # Prevent italics in the `\mintinline` command.
+ - "\\usepackage{xpatch}"
+ - "`\\xpatchcmd{\\mintinline}{\\begingroup}{\\begingroup\\let\\itshape\\relax}{}{}`{=latex}"
+minted:
+ block_attributes:
+ - "bgcolor=tango_bg"
+---
+
+## Inline Code in Pandoc
+
+- Raw inline code:
+
+ ```md
+ `#include <type_traits>`
+ ```
+
+ \vspace*{-3ex} produces: `#include <type_traits>`
+
+- Apply just a lexer:
+
+ ```md
+ `#include <type_traits>`{.cpp}
+ ```
+
+ \vspace*{-3ex} produces: `#include <type_traits>`{.cpp}
+
+- Change the background color and highlighting style:
+
+ ```{.md fontsize=\scriptsize}
+ <!-- Note: we defined monokai_bg in the metadata! -->
+ `#include <type_traits>`{.cpp bgcolor=monokai_bg style=monokai}
+ ```
+
+ \vspace*{-3ex} produces:
+ `#include <type_traits>`{.cpp bgcolor=monokai_bg style=monokai}
+
+ - Must **always** include language (`.cpp` here) **first**, always!
+
+## Inline Code Bypasses
+
+- Want the regular teletype text? Specify **both** the lexer class name and one
+ additional class `.no_minted`.
+
+ ```{.md}
+ <!-- The "text lexer" -->
+ `no minted`{.text .no_minted}
+ ```
+
+ \vspace*{-3ex} produces: `no mintinline`{.text .no_minted} vs `with mintinline`
+
+ - Inspect generated code, the PDF output is indistinguishable.
+
+- Alternatively, you can set `no_mintinline: true`{.yaml style=paraiso-light} to prevent the filter
+ from emitting _any_ `\mintinline`{.latex} calls.
+ - If you don't need syntax highlighting on your inline code elements, this may
+ greatly improve compile times for large documents.
+
+
+## Code Blocks
+
+- Use the defaults, but still supply the lexer:
+
+ ```bash
+ echo "Hi there" # How are you?
+ ```
+
+ \vspace*{-3ex} produces
+
+ ```bash
+ echo "Hi there" # How are you?
+ ```
+
+ \vspace*{-3ex}
+
+- As with inline code, you can change whatever you want:
+
+ ```{.bash bgcolor=monokai_bg style=monokai}
+ echo "Hi there" # How are you?
+ ```
+
+ \vspace*{-3ex} produces
+
+ ```{.bash bgcolor=monokai_bg style=monokai}
+ echo "Hi there" # How are you?
+ ```
+
+ \vspace*{-3ex}
+
+ - Must **always** include language (`.bash` here) **first**, always!
+
+
+## Special Characters are Supported
+
+- Code blocks:
+
+ ```md
+ `~!@#$%^&*()-=_+[]}{|;':",.\/<>?
+ ```
+
+ \vspace*{-3ex}
+
+- Inline code
+
+ ``with mintinline `~!@#$%^&*()-=_+[]}{|;':",.\/<>?``
+
+ Note: If you use almost all special characters *and* all alphanumeric
+ characters in a single inline code fragment, minted may not be able to find a
+ suitable delimiter to place around the \LaTeX\ inline command.
+
+- Inline code with bypass
+
+ ``no mintinline `~!@#$%^&*()-=_+[]}{|;':",.\/<>?``{.text .no_minted}
+
+- Specific lexer with mintinline: `auto foo = [](){};`{.cpp}
+- Without mintinline: `auto foo = [](){};`{.cpp .no_minted}
+ - Output color depends on `--no-highlight` flag for `pandoc`.
diff --git a/paper/lua-filters/multiple-bibliographies/Makefile b/paper/lua-filters/multiple-bibliographies/Makefile
new file mode 100644
index 0000000..a42ce28
--- /dev/null
+++ b/paper/lua-filters/multiple-bibliographies/Makefile
@@ -0,0 +1,6 @@
+test: sample.md multiple-bibliographies.lua
+ @pandoc --lua-filter=multiple-bibliographies.lua \
+ --standalone --to=native $< 2>/dev/null \
+ | diff -u - expected.native
+
+.PHONY: test
diff --git a/paper/lua-filters/multiple-bibliographies/README.md b/paper/lua-filters/multiple-bibliographies/README.md
new file mode 100644
index 0000000..0111ee6
--- /dev/null
+++ b/paper/lua-filters/multiple-bibliographies/README.md
@@ -0,0 +1,33 @@
+# multiple-bibliographies
+
+This filter allows to create multiple bibliographies using
+`pandoc-citeproc`. The content of each bibliography is controlled
+via YAML values and the file in which a bibliographic entry is
+specified.
+
+## Usage
+
+Instead of using the usual *bibliography* metadata field, all
+bibliographies must be defined via a separate field of the scheme
+*bibliographyX*, e.g.
+
+ ---
+ bibliography_main: main-bibliography.bib
+ bibliography_software: software.bib
+ ---
+
+The placement of bibliographies is controlled via special divs.
+
+ # References
+
+ ::: {#refs_main}
+ :::
+
+ # Software
+
+ ::: {#refs_software}
+ :::
+
+Each refsX div should have a matching bibliographyX entry in the
+header. These divs are filled with citations from the respective
+bib-file.
diff --git a/paper/lua-filters/multiple-bibliographies/expected.native b/paper/lua-filters/multiple-bibliographies/expected.native
new file mode 100644
index 0000000..a7ead12
--- /dev/null
+++ b/paper/lua-filters/multiple-bibliographies/expected.native
@@ -0,0 +1,14 @@
+Pandoc (Meta {unMeta = fromList [("bibliography_recommended_reading",MetaInlines [Str "secondary.bib"]),("bibliography_sources",MetaInlines [Str "primary.bib"]),("nocite",MetaInlines [Cite [Citation {citationId = "Knu86", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@Knu86"],Str ",",Space,Cite [Citation {citationId = "Bae", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 0}] [Str "@Bae"]]),("title",MetaInlines [Str "Multiple",Space,Str "Bibliographies",Space,Str "Demo"])]})
+[Para [Cite [Citation {citationId = "Nie72", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 1}] [Str "Nietzsche",Space,Str "(1872)"],Str ",",Space,Cite [Citation {citationId = "Bel", citationPrefix = [], citationSuffix = [], citationMode = AuthorInText, citationNoteNum = 0, citationHash = 2}] [Str "Bellori",Space,Str "(1672)"]]
+,Header 1 ("references",[],[]) [Str "References"]
+,Div ("refs_sources",[],[])
+ [Div ("ref-Bel",[],[])
+ [Para [Str "Bellori.",Space,Str "1672.",Space,Emph [Str "Le",Space,Str "Vite",Space,Str "de\8217",Space,Str "Pittori,",Space,Str "Scultori",Space,Str "E",Space,Str "Architetti",Space,Str "Moderni"],Str "."]]
+ ,Div ("ref-Nie72",[],[])
+ [Para [Str "Nietzsche,",Space,Str "Friedrich.",Space,Str "1872.",Space,Emph [Str "Die",Space,Str "Geburt",Space,Str "Der",Space,Str "Trag\246die",Space,Str "Aus",Space,Str "Dem",Space,Str "Geiste",Space,Str "Der",Space,Str "Musik"],Str "."]]]
+,Header 1 ("recommended-reading",[],[]) [Str "Recommended",Space,Str "Reading"]
+,Div ("refs_recommended_reading",[],[])
+ [Div ("ref-Bae",[],[])
+ [Para [Str "B\228tschmann,",Space,Str "Oskar.",Space,Str "1985.",Space,Emph [Str "Pygmalion",Space,Str "Als",Space,Str "Betrachter"],Str "."]]
+ ,Div ("ref-Knu86",[],[])
+ [Para [Str "Knuth,",Space,Str "Donald",Space,Str "E.",Space,Str "1986.",Space,Emph [Str "The",Space,Str "Texbook"],Str "."]]]]
diff --git a/paper/lua-filters/multiple-bibliographies/multiple-bibliographies.lua b/paper/lua-filters/multiple-bibliographies/multiple-bibliographies.lua
new file mode 100644
index 0000000..934e6ea
--- /dev/null
+++ b/paper/lua-filters/multiple-bibliographies/multiple-bibliographies.lua
@@ -0,0 +1,110 @@
+--[[
+multiple-bibliographies – create multiple bibliographies
+
+Copyright © 2018-2019 Albert Krewinkel
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+]]
+local List = require 'pandoc.List'
+local utils = require 'pandoc.utils'
+local stringify = utils.stringify
+local run_json_filter = utils.run_json_filter
+
+--- Collection of all cites in the document
+local all_cites = {}
+--- Document meta value
+local doc_meta = pandoc.Meta{}
+
+--- Div used by pandoc-citeproc to insert the bibliography.
+local refs_div = pandoc.Div({}, pandoc.Attr('refs'))
+
+local supports_quiet_flag = (function ()
+ local version = pandoc.pipe('pandoc-citeproc', {'--version'}, '')
+ local major, minor, patch = version:match 'pandoc%-citeproc (%d+)%.(%d+)%.?(%d*)'
+ major, minor, patch = tonumber(major), tonumber(minor), tonumber(patch)
+ return major > 0
+ or minor > 14
+ or (minor == 14 and patch >= 5)
+end)()
+
+--- Resolve citations in the document by combining all bibliographies
+-- before running pandoc-citeproc on the full document.
+local function resolve_doc_citations (doc)
+ -- combine all bibliographies
+ local meta = doc.meta
+ local orig_bib = meta.bibliography
+ meta.bibliography = pandoc.MetaList{orig_bib}
+ for name, value in pairs(meta) do
+ if name:match('^bibliography_') then
+ table.insert(meta.bibliography, value)
+ end
+ end
+ -- add dummy div to catch the created bibliography
+ table.insert(doc.blocks, refs_div)
+ -- resolve all citations
+ doc = run_json_filter(doc, 'pandoc-citeproc')
+ -- remove catch-all bibliography
+ table.remove(doc.blocks)
+ -- restore bibliography to original value
+ doc.meta.bibliography = orig_bib
+ return doc
+end
+
+--- Explicitly create a new meta object with all fields relevant for
+--- pandoc-citeproc.
+local function meta_for_pandoc_citeproc (bibliography)
+ -- We could just indiscriminately copy all meta fields, but let's be
+ -- explicit about what's important.
+ local fields = {
+ 'bibliography', 'references', 'csl', 'citation-style',
+ 'link-citations', 'citation-abbreviations', 'lang',
+ 'suppress-bibliography', 'reference-section-title',
+ 'notes-after-punctuation', 'nocite'
+ }
+ local new_meta = pandoc.Meta{}
+ for _, field in ipairs(fields) do
+ new_meta[field] = doc_meta[field]
+ end
+ new_meta.bibliography = bibliography
+ return new_meta
+end
+
+--- Create a bibliography for a given topic. This acts on all divs whose
+-- ID starts with "refs", followed by nothing but underscores and
+-- alphanumeric characters.
+local function create_topic_bibliography (div)
+ local name = div.identifier:match('^refs([_%w]*)$')
+ local bibfile = name and doc_meta['bibliography' .. name]
+ if not bibfile then
+ return nil
+ end
+ local tmp_blocks = {pandoc.Para(all_cites), refs_div}
+ local tmp_meta = meta_for_pandoc_citeproc(bibfile)
+ local tmp_doc = pandoc.Pandoc(tmp_blocks, tmp_meta)
+ local filter_args = {FORMAT, supports_quiet_flag and '-q' or nil}
+ local res = run_json_filter(tmp_doc, 'pandoc-citeproc', filter_args)
+ -- First block of the result contains the dummy paragraph, second is
+ -- the refs Div filled by pandoc-citeproc.
+ div.content = res.blocks[2].content
+ return div
+end
+
+return {
+ {
+ -- Collect all citations and the doc's Meta value for other filters.
+ Cite = function (c) all_cites[#all_cites + 1] = c end,
+ Meta = function (m) doc_meta = m end,
+ },
+ { Pandoc = resolve_doc_citations },
+ { Div = create_topic_bibliography },
+}
diff --git a/paper/lua-filters/multiple-bibliographies/primary.bib b/paper/lua-filters/multiple-bibliographies/primary.bib
new file mode 100644
index 0000000..8c9decc
--- /dev/null
+++ b/paper/lua-filters/multiple-bibliographies/primary.bib
@@ -0,0 +1,10 @@
+@book{Bel,
+ author = {Bellori},
+ title = {Le vite de' pittori, scultori e architetti moderni},
+ year = {1672},
+}
+@book{Nie72,
+ author = {Nietzsche, Friedrich},
+ title = {Die Geburt der Tragödie aus dem Geiste der Musik},
+ year = {1872},
+}
diff --git a/paper/lua-filters/multiple-bibliographies/sample.md b/paper/lua-filters/multiple-bibliographies/sample.md
new file mode 100644
index 0000000..d4ab2eb
--- /dev/null
+++ b/paper/lua-filters/multiple-bibliographies/sample.md
@@ -0,0 +1,17 @@
+---
+title: Multiple Bibliographies Demo
+bibliography_sources: primary.bib
+bibliography_recommended_reading: secondary.bib
+nocite: '@Knu86, @Bae'
+---
+@Nie72, @Bel
+
+# References
+
+::: {#refs_sources}
+:::
+
+# Recommended Reading
+
+::: {#refs_recommended_reading}
+:::
diff --git a/paper/lua-filters/multiple-bibliographies/secondary.bib b/paper/lua-filters/multiple-bibliographies/secondary.bib
new file mode 100644
index 0000000..45e6306
--- /dev/null
+++ b/paper/lua-filters/multiple-bibliographies/secondary.bib
@@ -0,0 +1,10 @@
+@book{Bae,
+ author = {Bätschmann, Oskar},
+ title = {Pygmalion als Betrachter},
+ year = {1985}
+}
+@book{Knu86,
+ author = {Knuth, Donald E.},
+ year = {1986},
+ title = {The \TeX book},
+}
diff --git a/paper/lua-filters/pagebreak/Makefile b/paper/lua-filters/pagebreak/Makefile
new file mode 100644
index 0000000..c8786b0
--- /dev/null
+++ b/paper/lua-filters/pagebreak/Makefile
@@ -0,0 +1,4 @@
+test:
+ @pandoc --lua-filter=pagebreak.lua sample.md | diff -u expected.html -
+
+.PHONY: test
diff --git a/paper/lua-filters/pagebreak/README.md b/paper/lua-filters/pagebreak/README.md
new file mode 100644
index 0000000..b9a5e04
--- /dev/null
+++ b/paper/lua-filters/pagebreak/README.md
@@ -0,0 +1,68 @@
+pagebreak
+=========
+
+This filter converts paragraps containing only the LaTeX
+`\newpage` or `\pagebreak` command into appropriate pagebreak
+markup for other formats. The command must be the only contents
+of a raw TeX block in order to be recognized. I.e., for Markdown
+the following is sufficient:
+
+ Paragraph before page break
+
+ \newpage
+
+ Paragraph after page break
+
+
+Usage
+-----
+
+Fully supported output formats are:
+
+- Docx,
+- LaTeX,
+- HTML, and
+- EPUB.
+
+ODT is supported, but requires additional settings in the
+reference document (see below).
+
+In all other formats, the page break is represented using the
+form feed character.
+
+
+### Usage with HTML
+If you want to use an HTML class rather than an inline style set
+the value of the metadata key `newpage_html_class` or the
+environment variable `PANDOC_NEWPAGE_HTML_CLASS` (the metadata
+'wins' if both are defined) to the name of the class and use CSS
+like this:
+
+ @media all {
+ .page-break { display: none; }
+ }
+ @media print {
+ .page-break { display: block; page-break-after: always; }
+ }
+
+
+### Usage with ODT
+
+To use with ODT you must create a reference ODT with a named
+paragraph style called `Pagebreak` (or whatever you set the
+metadata field `newpage_odt_style` or the environment variable
+`PANDOC_NEWPAGE_ODT_STYLE` to) and define it as having no extra
+space before or after but set it to have a pagebreak after it
+<https://help.libreoffice.org/Writer/Text_Flow>.
+
+(There will be an empty dummy paragraph, which means some extra
+vertical space, and you probably want that space to go at the
+bottom of the page before the break rather than at the top of
+the page after the break!)
+
+
+Alternative syntax
+------------------
+
+The form feed character as the only element in a paragraph is
+supported as an alternative to the LaTeX syntax described above.
diff --git a/paper/lua-filters/pagebreak/expected.html b/paper/lua-filters/pagebreak/expected.html
new file mode 100644
index 0000000..7998826
--- /dev/null
+++ b/paper/lua-filters/pagebreak/expected.html
@@ -0,0 +1,6 @@
+<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec hendrerit tempor tellus. Donec pretium posuere tellus.</p>
+<div style="page-break-after: always;"></div>
+<p>Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nulla posuere. Donec vitae dolor.</p>
+<div style="page-break-after: always;"></div>
+<p>Pellentesque dapibus suscipit ligula. Donec posuere augue in quam. Suspendisse potenti.</p>
+<p>Final paragraph without a preceding pagebreak.</p>
diff --git a/paper/lua-filters/pagebreak/pagebreak.lua b/paper/lua-filters/pagebreak/pagebreak.lua
new file mode 100644
index 0000000..4c00698
--- /dev/null
+++ b/paper/lua-filters/pagebreak/pagebreak.lua
@@ -0,0 +1,97 @@
+--[[
+pagebreak – convert raw LaTeX page breaks to other formats
+
+Copyright © 2017-2019 Benct Philip Jonsson, Albert Krewinkel
+
+Permission to use, copy, modify, and/or distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+]]
+local stringify_orig = (require 'pandoc.utils').stringify
+
+local function stringify(x)
+ return type(x) == 'string' and x or stringify_orig(x)
+end
+
+--- configs – these are populated in the Meta filter.
+local pagebreak = {
+ epub = '<p style="page-break-after: always;"> </p>',
+ html = '<div style="page-break-after: always;"></div>',
+ latex = '\\newpage{}',
+ ooxml = '<w:p><w:r><w:br w:type="page"/></w:r></w:p>',
+}
+
+local function pagebreaks_from_config (meta)
+ local html_class =
+ (meta.newpage_html_class and stringify(meta.newpage_html_class))
+ or os.getenv 'PANDOC_NEWPAGE_HTML_CLASS'
+ if html_class and html_class ~= '' then
+ pagebreak.html = string.format('<div class="%s"></div>', html_class)
+ end
+
+ local odt_style =
+ (meta.newpage_odt_style and stringify(meta.newpage_odt_style))
+ or os.getenv 'PANDOC_NEWPAGE_ODT_STYLE'
+ if odt_style and odt_style ~= '' then
+ pagebreak.odt = string.format('<text:p text:style-name="%s"/>', odt_style)
+ end
+end
+
+--- Return a block element causing a page break in the given format.
+local function newpage(format)
+ if format == 'docx' then
+ return pandoc.RawBlock('openxml', pagebreak.ooxml)
+ elseif format:match 'latex' then
+ return pandoc.RawBlock('tex', pagebreak.latex)
+ elseif format:match 'html.*' then
+ return pandoc.RawBlock('html', pagebreak.html)
+ elseif format:match 'epub' then
+ return pandoc.RawBlock('html', pagebreak.epub)
+ else
+ -- fall back to insert a form feed character
+ return pandoc.Para{pandoc.Str '\f'}
+ end
+end
+
+local function is_newpage_command(command)
+ return command:match '^\\newpage%{?%}?$'
+ or command:match '^\\pagebreak%{?%}?$'
+end
+
+-- Filter function called on each RawBlock element.
+function RawBlock (el)
+ -- Don't do anything if the output is TeX
+ if FORMAT:match 'tex$' then
+ return nil
+ end
+ -- check that the block is TeX or LaTeX and contains only
+ -- \newpage or \pagebreak.
+ if el.format:match 'tex' and is_newpage_command(el.text) then
+ -- use format-specific pagebreak marker. FORMAT is set by pandoc to
+ -- the targeted output format.
+ return newpage(FORMAT)
+ end
+ -- otherwise, leave the block unchanged
+ return nil
+end
+
+-- Turning paragraphs which contain nothing but a form feed
+-- characters into line breaks.
+function Para (el)
+ if #el.content == 1 and el.content[1].text == '\f' then
+ return newpage(FORMAT)
+ end
+end
+
+return {
+ {Meta = pagebreaks_from_config},
+ {RawBlock = RawBlock, Para = Para}
+}
diff --git a/paper/lua-filters/pagebreak/sample.md b/paper/lua-filters/pagebreak/sample.md
new file mode 100644
index 0000000..dc49ce1
--- /dev/null
+++ b/paper/lua-filters/pagebreak/sample.md
@@ -0,0 +1,14 @@
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec
+hendrerit tempor tellus. Donec pretium posuere tellus.
+
+\newpage
+
+Cum sociis natoque penatibus et magnis dis parturient montes,
+nascetur ridiculus mus. Nulla posuere. Donec vitae dolor.
+
+
+
+Pellentesque dapibus suscipit ligula. Donec posuere augue in
+quam. Suspendisse potenti.
+
+Final paragraph without a preceding pagebreak.
diff --git a/paper/lua-filters/plantuml/Makefile b/paper/lua-filters/plantuml/Makefile
new file mode 100644
index 0000000..feff6f4
--- /dev/null
+++ b/paper/lua-filters/plantuml/Makefile
@@ -0,0 +1,3 @@
+test:
+ @pandoc --self-contained --lua-filter=plantuml.lua --metadata title=README readme.md -o output.html
+
diff --git a/paper/lua-filters/plantuml/output.html b/paper/lua-filters/plantuml/output.html
new file mode 100644
index 0000000..67c4b58
--- /dev/null
+++ b/paper/lua-filters/plantuml/output.html
@@ -0,0 +1,45 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang xml:lang>
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <title>readme</title>
+ <style type="text/css">
+ code{white-space: pre-wrap;}
+ span.smallcaps{font-variant: small-caps;}
+ span.underline{text-decoration: underline;}
+ div.column{display: inline-block; vertical-align: top; width: 50%;}
+ </style>
+ <!--[if lt IE 9]>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+ <![endif]-->
+</head>
+<body>
+<h1 id="plantuml-pandoc-filter">PlantUML Pandoc filter</h1>
+<p>PlantUML Pandoc filter to process code blocks with class “plantuml” containing PlantUML notation into images.</p>
+<ul>
+<li>For textual output formats, use –extract-media=DIR</li>
+<li>For HTML formats, you may alternatively use –self-contained</li>
+</ul>
+<h2 id="example-in-markdown-file">Example in markdown-file</h2>
+<p><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBjb250ZW50U2NyaXB0VHlwZT0iYXBwbGljYXRpb24vZWNtYXNjcmlwdCIgY29udGVudFN0eWxlVHlwZT0idGV4dC9jc3MiIGhlaWdodD0iMTYxcHgiIHByZXNlcnZlQXNwZWN0UmF0aW89Im5vbmUiIHN0eWxlPSJ3aWR0aDo1NDRweDtoZWlnaHQ6MTYxcHg7IiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA1NDQgMTYxIiB3aWR0aD0iNTQ0cHgiIHpvb21BbmRQYW49Im1hZ25pZnkiPjxkZWZzPjxmaWx0ZXIgaGVpZ2h0PSIzMDAlIiBpZD0iZnE3c29pNjk5dWp3ayIgd2lkdGg9IjMwMCUiIHg9Ii0xIiB5PSItMSI+PGZlR2F1c3NpYW5CbHVyIHJlc3VsdD0iYmx1ck91dCIgc3RkRGV2aWF0aW9uPSIyLjAiLz48ZmVDb2xvck1hdHJpeCBpbj0iYmx1ck91dCIgcmVzdWx0PSJibHVyT3V0MiIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIC40IDAiLz48ZmVPZmZzZXQgZHg9IjQuMCIgZHk9IjQuMCIgaW49ImJsdXJPdXQyIiByZXN1bHQ9ImJsdXJPdXQzIi8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iYmx1ck91dDMiIG1vZGU9Im5vcm1hbCIvPjwvZmlsdGVyPjwvZGVmcz48Zz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsgc3Ryb2tlLWRhc2hhcnJheTogNS4wLDUuMDsiIHgxPSIzMiIgeDI9IjMyIiB5MT0iMzkuNjA5NCIgeTI9IjEyMC4zMTI1Ii8+PGxpbmUgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjA7IHN0cm9rZS1kYXNoYXJyYXk6IDUuMCw1LjA7IiB4MT0iNTE1LjUiIHgyPSI1MTUuNSIgeTE9IjM5LjYwOTQiIHkyPSIxMjAuMzEyNSIvPjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmcTdzb2k2OTl1andrKSIgaGVpZ2h0PSIzMS42MDk0IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSI0NCIgeD0iOCIgeT0iMyIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjMwIiB4PSIxNSIgeT0iMjQuNTMzMiI+QWxpY2U8L3RleHQ+PHJlY3QgZmlsbD0iI0ZFRkVDRSIgZmlsdGVyPSJ1cmwoI2ZxN3NvaTY5OXVqd2spIiBoZWlnaHQ9IjMxLjYwOTQiIHN0eWxlPSJzdHJva2U6ICNBODAwMzY7IHN0cm9rZS13aWR0aDogMS41OyIgd2lkdGg9IjQ0IiB4PSI4IiB5PSIxMTkuMzEyNSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjMwIiB4PSIxNSIgeT0iMTQwLjg0NTciPkFsaWNlPC90ZXh0PjxyZWN0IGZpbGw9IiNGRUZFQ0UiIGZpbHRlcj0idXJsKCNmcTdzb2k2OTl1andrKSIgaGVpZ2h0PSIzMS42MDk0IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuNTsiIHdpZHRoPSIzOSIgeD0iNDk0LjUiIHk9IjMiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNCIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSIyNSIgeD0iNTAxLjUiIHk9IjI0LjUzMzIiPkJvYjwvdGV4dD48cmVjdCBmaWxsPSIjRkVGRUNFIiBmaWx0ZXI9InVybCgjZnE3c29pNjk5dWp3aykiIGhlaWdodD0iMzEuNjA5NCIgc3R5bGU9InN0cm9rZTogI0E4MDAzNjsgc3Ryb2tlLXdpZHRoOiAxLjU7IiB3aWR0aD0iMzkiIHg9IjQ5NC41IiB5PSIxMTkuMzEyNSIvPjx0ZXh0IGZpbGw9IiMwMDAwMDAiIGZvbnQtZmFtaWx5PSJzYW5zLXNlcmlmIiBmb250LXNpemU9IjE0IiBsZW5ndGhBZGp1c3Q9InNwYWNpbmdBbmRHbHlwaHMiIHRleHRMZW5ndGg9IjI1IiB4PSI1MDEuNSIgeT0iMTQwLjg0NTciPkJvYjwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjUwNCw2Ny45NjA5LDUxNCw3MS45NjA5LDUwNCw3NS45NjA5LDUwOCw3MS45NjA5IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSIzMiIgeDI9IjUxMCIgeTE9IjcxLjk2MDkiIHkyPSI3MS45NjA5Ii8+PHRleHQgZmlsbD0iIzAwMDAwMCIgZm9udC1mYW1pbHk9InNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTMiIGxlbmd0aEFkanVzdD0ic3BhY2luZ0FuZEdseXBocyIgdGV4dExlbmd0aD0iMzY4IiB4PSIzOSIgeT0iNjcuMTA0NSI+QXV0aGVudGljYXRpb24gUmVxdWVzdCBCb2IgLS0mZ3Q7IEFsaWNlOiBBdXRoZW50aWNhdGlvbiBSZXNwb25zZTwvdGV4dD48cG9seWdvbiBmaWxsPSIjQTgwMDM2IiBwb2ludHM9IjUwNCw5OC4zMTI1LDUxNCwxMDIuMzEyNSw1MDQsMTA2LjMxMjUsNTA4LDEwMi4zMTI1IiBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiLz48bGluZSBzdHlsZT0ic3Ryb2tlOiAjQTgwMDM2OyBzdHJva2Utd2lkdGg6IDEuMDsiIHgxPSIzMiIgeDI9IjUxMCIgeTE9IjEwMi4zMTI1IiB5Mj0iMTAyLjMxMjUiLz48dGV4dCBmaWxsPSIjMDAwMDAwIiBmb250LWZhbWlseT0ic2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMyIgbGVuZ3RoQWRqdXN0PSJzcGFjaW5nQW5kR2x5cGhzIiB0ZXh0TGVuZ3RoPSI0NjAiIHg9IjM5IiB5PSI5Ny40NTYxIj5Bbm90aGVyIGF1dGhlbnRpY2F0aW9uIFJlcXVlc3QgQWxpY2UgJmx0Oy0tIEJvYjogYW5vdGhlciBhdXRoZW50aWNhdGlvbiBSZXNwb25zZTwvdGV4dD48IS0tCkBzdGFydHVtbA0KQWxpY2UgLT4gQm9iOiBBdXRoZW50aWNhdGlvbiBSZXF1ZXN0IEJvYiAtIC0+IEFsaWNlOiBBdXRoZW50aWNhdGlvbiBSZXNwb25zZQ0KQWxpY2UgLT4gQm9iOiBBbm90aGVyIGF1dGhlbnRpY2F0aW9uIFJlcXVlc3QgQWxpY2UgPC0gLSBCb2I6IGFub3RoZXIgYXV0aGVudGljYXRpb24gUmVzcG9uc2UNCkBlbmR1bWwNCgpQbGFudFVNTCB2ZXJzaW9uIDEuMjAxOC4wOChTdW4gSnVuIDI0IDE0OjMxOjAwIENFU1QgMjAxOCkKKEdQTCBzb3VyY2UgZGlzdHJpYnV0aW9uKQpKYXZhIFJ1bnRpbWU6IEphdmEoVE0pIFNFIFJ1bnRpbWUgRW52aXJvbm1lbnQKSlZNOiBKYXZhIEhvdFNwb3QoVE0pIDY0LUJpdCBTZXJ2ZXIgVk0KSmF2YSBWZXJzaW9uOiAxLjguMF8xNzItYjExCk9wZXJhdGluZyBTeXN0ZW06IFdpbmRvd3MgMTAKT1MgVmVyc2lvbjogMTAuMApEZWZhdWx0IEVuY29kaW5nOiBDcDEyNTIKTGFuZ3VhZ2U6IGRlCkNvdW50cnk6IERFCi0tPjwvZz48L3N2Zz4=" alt="PlantUML Diagramm" /></p>
+<h2 id="run-pandoc">Run pandoc</h2>
+<pre><code>pandoc --self-contained --lua-filter=plantuml.lua readme.md -o output.htm</code></pre>
+<h2 id="prerequisites">Prerequisites</h2>
+<ul>
+<li>download PlantUML from http://plantuml.com (needs JAVA)</li>
+<li>3 ways to set the environment
+<ol type="1">
+<li>plantuml.lua and plantuml.jar in the same folder and start pandoc always from this folder</li>
+<li>set a Environment Variable PLANTUML with the path to plantuml.jar
+<ul>
+<li>Windows - with powershell: Set-Item env:PLANTUML “c:.jar”</li>
+</ul></li>
+<li>change path to plantuml.jar in plantuml.lua</li>
+</ol></li>
+</ul>
+<p>This script based on the example “Converting ABC code to music notation” from https://pandoc.org/lua-filters.html</p>
+<p>This script was only tested with markdown to html on a windows environment!</p>
+</body>
+</html>
diff --git a/paper/lua-filters/plantuml/plantuml.lua b/paper/lua-filters/plantuml/plantuml.lua
new file mode 100644
index 0000000..7903e6a
--- /dev/null
+++ b/paper/lua-filters/plantuml/plantuml.lua
@@ -0,0 +1,56 @@
+--[[
+# PlantUML Pandoc filter
+PlantUML Pandoc filter to process code blocks with class "plantuml" containing PlantUML notation into images.
+
+* For textual output formats, use --extract-media=DIR
+* For HTML formats, you may alternatively use --self-contained
+
+## Example in markdown-file
+```plantuml
+@startuml
+Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response
+Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response @enduml
+```
+## Run pandoc
+```
+pandoc --self-contained --lua-filter=plantuml.lua readme.md -o output.htm
+```
+
+## Prerequisites
+* download PlantUML from http://plantuml.com (needs JAVA)
+* 3 ways to set the environment
+ 1. plantuml.lua and plantuml.jar in the same folder and start pandoc always from this folder
+ 2. set a Environment Variable PLANTUML with the path to plantuml.jar
+ * Windows - with powershell: Set-Item env:PLANTUML "c:\bin\plantuml.jar"
+ 3. change path to plantuml.jar in plantuml.lua
+
+This script based on the example "Converting ABC code to music notation" from https://pandoc.org/lua-filters.html
+**This script was only tested with markdown to html on a windows environment!**
+]]
+
+-- Path to PlantUML.jar
+-- if you use opinion 3 change the path to plantuml.jar like this:
+-- local plantumlPath = os.getenv("PLANTUML") or "c:\\bin\\plantuml.jar"
+local plantumlPath = os.getenv("PLANTUML") or "plantuml.jar"
+
+-- SVG has a much better quality
+-- local filetype = "png"
+-- local mimetype = "image/png"
+local filetype = "svg"
+local mimetype = "image/svg+xml"
+
+-- call plantuml.jar wit some parameters (see plantuml help)
+local function plantuml(puml, filetype, plantumlPath)
+ local final = pandoc.pipe("java", {"-jar", plantumlPath, "-t" .. filetype, "-pipe", "-charset", "UTF8"}, puml)
+ return final
+end
+
+-- search for class "plantuml" and replace with image
+function CodeBlock(block)
+ if block.classes[1] == "plantuml" then
+ local img = plantuml(block.text, filetype, plantumlPath)
+ local fname = pandoc.sha1(img) .. "." .. filetype
+ pandoc.mediabag.insert(fname, mimetype, img)
+ return pandoc.Para{ pandoc.Image({pandoc.Str("PlantUML Diagramm")}, fname) }
+ end
+end
diff --git a/paper/lua-filters/plantuml/readme.md b/paper/lua-filters/plantuml/readme.md
new file mode 100644
index 0000000..de5ba74
--- /dev/null
+++ b/paper/lua-filters/plantuml/readme.md
@@ -0,0 +1,30 @@
+# PlantUML Pandoc filter
+PlantUML Pandoc filter to process code blocks with class "plantuml" containing PlantUML notation into images.
+
+* For textual output formats, use --extract-media=DIR
+* For HTML formats, you may alternatively use --self-contained
+
+## Example in markdown-file
+```plantuml
+@startuml
+Alice -> Bob: Authentication Request Bob --> Alice: Authentication Response
+Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response
+@enduml
+```
+## Run pandoc
+```
+pandoc --self-contained --lua-filter=plantuml.lua readme.md -o output.htm
+```
+
+## Prerequisites
+* download PlantUML from http://plantuml.com (needs JAVA)
+* 3 ways to set the environment
+ 1. plantuml.lua and plantuml.jar in the same folder and start pandoc always from this folder
+ 2. set a Environment Variable PLANTUML with the path to plantuml.jar
+ * Windows - with powershell: Set-Item env:PLANTUML "c:\bin\plantuml.jar"
+ 3. change path to plantuml.jar in plantuml.lua
+
+
+This script based on the example "Converting ABC code to music notation" from https://pandoc.org/lua-filters.html
+
+This script was only tested with markdown to html on a windows environment!
diff --git a/paper/lua-filters/runtests.sh b/paper/lua-filters/runtests.sh
new file mode 100755
index 0000000..bbcbbba
--- /dev/null
+++ b/paper/lua-filters/runtests.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+# argument is list of filters
+
+FILTERS=$*
+let err=0
+for d in $FILTERS ; do
+ make --no-print-directory -C $d test
+ if [ $? -eq 0 ]; then
+ echo "PASS $d"
+ else
+ echo "FAIL $d"
+ err=1
+ fi
+done
+exit $err
+
diff --git a/paper/lua-filters/scholarly-metadata/Makefile b/paper/lua-filters/scholarly-metadata/Makefile
new file mode 100644
index 0000000..fadf7dd
--- /dev/null
+++ b/paper/lua-filters/scholarly-metadata/Makefile
@@ -0,0 +1,8 @@
+test: sample.md scholarly-metadata.lua
+ @pandoc --lua-filter=scholarly-metadata.lua --standalone --to=markdown $< \
+ | diff -u expected.md -
+
+expected.md: sample.md scholarly-metadata.lua
+ pandoc --lua-filter=scholarly-metadata.lua --standalone --output $@ $<
+
+.PHONY: test
diff --git a/paper/lua-filters/scholarly-metadata/README.md b/paper/lua-filters/scholarly-metadata/README.md
new file mode 100644
index 0000000..7fb1d2a
--- /dev/null
+++ b/paper/lua-filters/scholarly-metadata/README.md
@@ -0,0 +1,91 @@
+# scholarly-metadata
+
+The filter turns metadata entries for authors and their
+affiliations into a canonical form. This allows users to
+conveniently declare document authors and their affiliations,
+while making it possible to rely on default object metadata
+structures when using the data in other filters or when accessing
+the data from custom templates.
+
+
+## Canonical format for authors and affiliations
+
+Authors and affiliations entries are treated as *named objects*.
+All named objects will have an ID and a name, i.e. they are
+metadata objects with *at least* those two keys:
+
+ - id: namedObjectExample
+ name: Example for a named object.
+
+The filter converts the *author* and *institute* metadata fields
+into lists of named objects.
+
+E.g., the following YAML data
+
+ author:
+ - Jane Doe:
+ email: 'jane.doe@example.edu'
+ - John Q. Doe
+
+
+will be transformed into
+
+ author:
+ - email: 'jane.doe\@example.edu'
+ id: Jane Doe
+ name: Jane Doe
+ - id: 'John Q. Doe'
+ name: 'John Q. Doe'
+
+Internally, `id` will be a simple string, while `name` is of type
+`MetaInlines`.
+
+
+## Referencing affiliations
+
+Author affiliations are a common feature of scholarly
+publications. It is possible to add institutes to each author
+object. Three methods of doing this are supported.
+
+1. **Referencing institutes by list index**: affiliations can be
+ listed in the *institute* metadata field and then referenced
+ by using the numerical index:
+
+ institute:
+ - Acme Corporation
+ - Federation of Planets
+ author:
+ - Jane Doe:
+ institute: [1, 2]
+ - John Q. Doe:
+ institute: [2]
+
+ This is also the canonical representation used to keep track
+ of author affiliations.
+
+2. **Referencing institutes by ID**: using numerical indices is
+ error prone and difficult to maintain when adding or removing
+ authors or affilications. It is hence possible to use IDs
+ instead:
+
+ institute:
+ - acme: Acme Corporation
+ - federation: Federation of Planets
+ author:
+ - Jane Doe:
+ institute: [acme, federation]
+ - John Q. Doe:
+ institute: [federation]
+
+3. **Adding institute as an attribute**: sometimes it might be
+ more convenient to give an affiliation directly in the
+ author's YAML object. Those objects can still be referenced
+ by ID from authors listed below such entry.
+
+ author:
+ - Jane Doe:
+ institute:
+ - Acme Cooproration
+ - federation: Federation of Planets
+ - John Q. Doe:
+ institute: [federation]
diff --git a/paper/lua-filters/scholarly-metadata/expected.md b/paper/lua-filters/scholarly-metadata/expected.md
new file mode 100644
index 0000000..353436f
--- /dev/null
+++ b/paper/lua-filters/scholarly-metadata/expected.md
@@ -0,0 +1,41 @@
+---
+author:
+- id: Jane Doe
+ institute:
+ - 1
+ - 2
+ name: Jane Doe
+- id: 'John Q. Doe'
+ institute:
+ - 1
+ name: 'John Q. Doe'
+- id: Peder Ås
+ institute:
+ - 1
+ name: Peder Ås
+- id: Juan Pérez
+ institute:
+ - 3
+ name: Juan Pérez
+- id: Max Mustermann
+ name: Max Mustermann
+institute:
+- address: '23 Science Street, Eureka, Mississippi, USA'
+ id: fosg
+ name: Formatting Open Science Group
+- id: fop
+ name: Federation of Planets
+- id: Acme Corporation
+ name: Acme Corporation
+---
+
+Abstract
+========
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod
+tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim
+veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
+commodo consequat. Duis aute irure dolor in reprehenderit in voluptate
+velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
+occaecat cupidatat non proident, sunt in culpa qui officia deserunt
+mollit anim id est laborum.
diff --git a/paper/lua-filters/scholarly-metadata/sample.md b/paper/lua-filters/scholarly-metadata/sample.md
new file mode 100644
index 0000000..855272e
--- /dev/null
+++ b/paper/lua-filters/scholarly-metadata/sample.md
@@ -0,0 +1,30 @@
+---
+author:
+ - Jane Doe:
+ institute:
+ - fosg
+ - fop
+ - John Q. Doe:
+ institute: fosg
+ - Peder Ås:
+ institute: fosg
+ - Juan Pérez:
+ institute:
+ - name: Acme Corporation
+ - Max Mustermann
+institute:
+ - fosg:
+ name: Formatting Open Science Group
+ address: 23 Science Street, Eureka, Mississippi, USA
+ - fop: Federation of Planets
+...
+
+# Abstract
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do
+eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
+enim ad minim veniam, quis nostrud exercitation ullamco laboris
+nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in
+reprehenderit in voluptate velit esse cillum dolore eu fugiat
+nulla pariatur. Excepteur sint occaecat cupidatat non proident,
+sunt in culpa qui officia deserunt mollit anim id est laborum.
diff --git a/paper/lua-filters/scholarly-metadata/scholarly-metadata.lua b/paper/lua-filters/scholarly-metadata/scholarly-metadata.lua
new file mode 100644
index 0000000..3ec529c
--- /dev/null
+++ b/paper/lua-filters/scholarly-metadata/scholarly-metadata.lua
@@ -0,0 +1,180 @@
+--[[
+ScholarlyMeta – normalize author/affiliation meta variables
+
+Copyright (c) 2017-2019 Albert Krewinkel, Robert Winkler
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+]]
+local List = require 'pandoc.List'
+
+-- Split a string at commas.
+local function comma_separated_values(str)
+ local acc = List:new{}
+ for substr in str:gmatch('([^,]*)') do
+ acc[#acc + 1] = substr:gsub('^%s*', ''):gsub('%s*$', '') -- trim
+ end
+ return acc
+end
+
+--- Ensure the return value is a list.
+local function ensure_list (val)
+ if type(val) ~= 'table' then
+ -- create singleton list (or empty list if val == nil).
+ return List:new{val}
+ elseif val.t == 'MetaInlines' then
+ -- check if this is really a comma-separated list
+ local csv = comma_separated_values(pandoc.utils.stringify(val))
+ if #csv >= 2 then
+ return csv
+ end
+ return List:new{val}
+ elseif val.t == 'MetaList' then
+ return List:new(val)
+ else
+ -- MetaBlocks or MetaMap, use as a singleton
+ return List:new{val}
+ end
+end
+
+--- Returns a function which checks whether an object has the given ID.
+local function has_id (id)
+ return function(x) return x.id == id end
+end
+
+--- Copy all key-value pairs of the first table into the second iff there is no
+-- such key yet in the second table.
+-- @returns the second argument
+function add_missing_entries(a, b)
+ for k, v in pairs(a) do
+ b[k] = b[k] or v
+ end
+ return b
+end
+
+--- Create an object with a name. The name is either taken directly from the
+-- `name` field, or from the *only* field name (i.e., key) if the object is a
+-- dictionary with just one entry. If neither exists, the name is left unset
+-- (`nil`).
+function to_named_object (obj)
+ local named = {}
+ if type(obj) ~= 'table' then
+ -- if the object isn't a table, just use its value as a name.
+ named.name = pandoc.MetaInlines{pandoc.Str(tostring(obj))}
+ named.id = tostring(obj)
+ elseif obj.t == 'MetaInlines' then
+ -- Treat inlines as the name
+ named.name = obj
+ named.id = pandoc.utils.stringify(obj)
+ elseif obj.name ~= nil then
+ -- object has name attribute → just create a copy of the object
+ add_missing_entries(obj, named)
+ named.id = pandoc.utils.stringify(named.id or named.name)
+ elseif next(obj) and next(obj, next(obj)) == nil then
+ -- the entry's key is taken as the name, the value contains the
+ -- attributes.
+ key, attribs = next(obj)
+ if type(attribs) == "string" or attribs.t == 'MetaInlines' then
+ named.name = attribs
+ else
+ add_missing_entries(attribs, named)
+ named.name = named.name or pandoc.MetaInlines{pandoc.Str(tostring(key))}
+ end
+ named.id = named.id and pandoc.utils.stringify(named.id) or key
+ else
+ -- this is not a named object adhering to the usual conventions.
+ error('not a named object: ' .. tostring(obj))
+ end
+ return named
+end
+
+--- Resolve institute placeholders to full named objects
+local function resolve_institutes (institute, known_institutes)
+ local unresolved_institutes
+ if institute == nil then
+ unresolved_institutes = {}
+ elseif type(institute) == "string" or type(institute) == "number" then
+ unresolved_institutes = {institute}
+ else
+ unresolved_institutes = institute
+ end
+
+ local result = List:new{}
+ for i, inst in ipairs(unresolved_institutes) do
+ result[i] =
+ known_institutes[tonumber(inst)] or
+ known_institutes:find_if(has_id(pandoc.utils.stringify(inst))) or
+ to_named_object(inst)
+ end
+ return result
+end
+
+--- Insert a named object into a list; if an object of the same name exists
+-- already, add all properties only present in the new object to the existing
+-- item.
+function merge_on_id (list, namedObj)
+ local elem, idx = list:find_if(has_id(namedObj.id))
+ local res = elem and add_missing_entries(namedObj, elem) or namedObj
+ local obj_idx = idx or (#list + 1)
+ -- return res, obj_idx
+ list[obj_idx] = res
+ return res, #list
+end
+
+--- Flatten a list of lists.
+local function flatten (lists)
+ local result = List:new{}
+ for _, lst in ipairs(lists) do
+ result:extend(lst)
+ end
+ return result
+end
+
+--- Canonicalize authors and institutes
+local function canonicalize(raw_author, raw_institute)
+ local institutes = ensure_list(raw_institute):map(to_named_object)
+ local authors = ensure_list(raw_author):map(to_named_object)
+
+ for _, author in ipairs(authors) do
+ author.institute = resolve_institutes(
+ ensure_list(author.institute),
+ institutes
+ )
+ end
+
+ -- Merge institutes defined in author objects with those defined in the
+ -- top-level list.
+ local author_insts = flatten(authors:map(function(x) return x.institute end))
+ for _, inst in ipairs(author_insts) do
+ merge_on_id(institutes, inst)
+ end
+
+ -- replace institutes with their indices
+ local to_index = function (inst)
+ return tostring(select(2, institutes:find_if(has_id(inst.id))))
+ end
+ for _, author in ipairs(authors) do
+ author.institute = pandoc.MetaList(author.institute:map(to_index))
+ end
+
+ return authors, institutes
+end
+
+
+return {
+ {
+ Meta = function(meta)
+ meta.author, meta.institute = canonicalize(meta.author, meta.institute)
+ return meta
+ end
+ }
+}
diff --git a/paper/lua-filters/scrlttr2/Makefile b/paper/lua-filters/scrlttr2/Makefile
new file mode 100644
index 0000000..acd4c7e
--- /dev/null
+++ b/paper/lua-filters/scrlttr2/Makefile
@@ -0,0 +1,9 @@
+test: sample.md scrlttr2.lua sample.pdf
+ @pandoc --to=latex --lua-filter=scrlttr2.lua -s sample.md | \
+ sh expected-strings.sh
+ @rm sample.pdf
+
+%.pdf: %.md scrlttr2.lua
+ @pandoc --lua-filter=scrlttr2.lua --output=$@ $<
+
+.PHONY: test
diff --git a/paper/lua-filters/scrlttr2/README.md b/paper/lua-filters/scrlttr2/README.md
new file mode 100644
index 0000000..2a4e440
--- /dev/null
+++ b/paper/lua-filters/scrlttr2/README.md
@@ -0,0 +1,60 @@
+# scrlttr2
+
+This filter allows to write DIN 5008 letter using the [scrlttr2]
+LaTeX document class from KOMA script. It converts metadata to
+the appropriate KOMA variables and allows using the default LaTeX
+template shipped with pandoc.
+
+[scrlttr2]: https://www.ctan.org/pkg/scrlttr2
+
+## Base variables
+
+ - `opening`: phrase used as an opening;
+ defaults to "Dear Sir/Madam,"
+ - `closing`: closing phrase; defaults to "Sincerely,"
+ - `address`: recipient's street address;
+ defaults to "no address given"
+ - `date`: the date of the letter; defaults to the current day.
+
+## KOMA Variables
+
+Currently, the following metadata fields are translated to KOMA
+variables:
+
+- `fromaddress` (alias: `return-address`): address of the sender
+- `fromfax` (alias: `fax`): sender's fax number
+- `fromemail` (alias: `email`): sender's email
+- `fromlogo` (alias: `logo`): image to be used as the sender's logo
+- `fromname` (alias: `author`): sender name
+- `fromphone` (alias: `phone`): sender's phone number
+- `fromurl` (alias: `url`): sender's URL
+- `customer`: customer number
+- `invoice`: invoice number
+- `myref`: sender's reference
+- `place`: sender's place used near date
+- `signature`: sender's signature
+- `subject`: letter's subject
+- `title`: letter title
+- `yourref`: addressee's reference
+
+The values of these variables are converted to MetaInlines. If a
+list is given, then each list item is used as a line, e.g.,
+
+ fromaddress:
+ - 35 Industry Way
+ - Springfield
+
+The `KOMAoptions` value is inferred from the given variables, but
+can be overwritten by specifying it explicitly.
+
+See the scrlttr2 documentation for details.
+
+## Intended Usage
+
+Many sender variables don't change, so it is sensible to provide
+default values for these. Authors using Markdown to draft letters
+can use a separate YAML file for this. E.g., if there is a file
+`default.yml` which contains the sender's details, then only the
+addressee's data must be specified.
+
+ pandoc --lua-filter=scrlttr2 letter.md default.yml -o out.pdf
diff --git a/paper/lua-filters/scrlttr2/expected-strings.sh b/paper/lua-filters/scrlttr2/expected-strings.sh
new file mode 100644
index 0000000..f2b54c2
--- /dev/null
+++ b/paper/lua-filters/scrlttr2/expected-strings.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+latex_result="$(cat -)"
+
+assert_contains ()
+{
+ printf '%s' "$latex_result" | grep -qF "$1" -
+ if [ $? -ne 0 ]; then
+ printf 'Output does not contain `%s`.\n' "$1" >&2
+ exit 1
+ fi
+}
+
+# whether we are using the scrlttr2 class
+assert_contains '{scrlttr2}'
+
+assert_contains '\setkomavar{fromname}{Jane Doe}'
+assert_contains '\setkomavar{fromaddress}{35 Industry Way\\ Springfield}'
+assert_contains '\setkomavar{subject}{Letter of Reference}'
+assert_contains '\setkomavar{date}{February 29, 2020}'
+
+# Custom opening and default closing
+assert_contains '\opening{To Whom It May Concern,}'
+assert_contains '\closing{Sincerely,}'
+
+# Author and date
+assert_contains '\author{Jane Doe}'
+assert_contains '\date{February 29, 2020}'
+
+# Recipient address
+assert_contains '\begin{letter}{Fireworks Inc.\\ 123 Fake St\\ 58008 Springfield}'
diff --git a/paper/lua-filters/scrlttr2/sample.md b/paper/lua-filters/scrlttr2/sample.md
new file mode 100644
index 0000000..5f13554
--- /dev/null
+++ b/paper/lua-filters/scrlttr2/sample.md
@@ -0,0 +1,16 @@
+---
+author: Jane Doe
+fromaddress:
+ - 35 Industry Way
+ - Springfield
+opening: To Whom It May Concern,
+subject: Letter of Reference
+date: February 29, 2020
+address:
+ - Fireworks Inc.
+ - 123 Fake St
+ - 58008 Springfield
+...
+
+I strongly recommend to embiggen your team by giving John Doe the position of a
+yak shaver. He has shown cromulent performance as a bike shedder.
diff --git a/paper/lua-filters/scrlttr2/scrlttr2.lua b/paper/lua-filters/scrlttr2/scrlttr2.lua
new file mode 100644
index 0000000..78f38fd
--- /dev/null
+++ b/paper/lua-filters/scrlttr2/scrlttr2.lua
@@ -0,0 +1,161 @@
+-- Ensure unpack also works if pandoc was compiled against Lua 5.1
+local unpack = unpack or table.unpack
+local List = require 'pandoc.List'
+local stringify = (require 'pandoc.utils')['stringify']
+
+--- Set some default options
+local default = {
+ opening = 'Dear Sir/Madam,',
+ closing = 'Sincerely,',
+ address = 'no address given'
+}
+
+--- Return a list of inlines representing a call to a latex command.
+local function latex_command (command, ...)
+ local entry = {
+ pandoc.RawInline('latex', '\\' .. command),
+ }
+ for _, arg in ipairs{...} do
+ entry[#entry + 1] = pandoc.RawInline('latex', '{')
+ if type(arg) ~= 'table' then
+ entry[#entry + 1] = pandoc.RawInline('latex', tostring(arg))
+ else
+ List.extend(entry, arg)
+ end
+ entry[#entry + 1] = pandoc.RawInline('latex', '}')
+ end
+ return entry
+end
+
+--- Convert the given meta-value to a list of inlines
+local function ensure_inlines (val)
+ if not val or type(val) == 'string' or type(val) == 'boolean' then
+ return pandoc.MetaInlines{pandoc.Str(tostring(val))}
+ elseif type(val) == 'table' and val.t == 'MetaInlines' then
+ return val
+ elseif type(val) == 'table' then
+ local res = List:new{}
+ for i = 1, #val do
+ res:extend(val[i])
+ res[#res + 1] = pandoc.RawInline('latex', '\\\\ ')
+ end
+ res[#res] = nil -- drop last linebreak
+ return pandoc.MetaInlines(res)
+ else
+ return pandoc.MetaInlines{pandoc.Str(pandoc.utils.stringify(val))}
+ end
+end
+
+--- Convert the given value to a MetaList
+local function ensure_meta_list (val)
+ if not val or val.t ~= 'MetaList' then
+ return pandoc.MetaList{}
+ else
+ return val
+ end
+end
+
+--- Set supported variables as KOMA variables.
+function setkomavar_commands (meta)
+ local set_vars = {}
+ local res = {}
+ local function set_koma_var (name, value, enable)
+ if value ~= nil then
+ res[#res + 1] = latex_command('setkomavar', name, ensure_inlines(value))
+ if enable then
+ set_vars[#set_vars + 1] = name
+ end
+ end
+ end
+
+ set_koma_var('fromname', meta.fromname or meta.author)
+ set_koma_var('fromaddress', meta.fromaddress or meta['return-address'])
+ set_koma_var('subject', meta.subject)
+ set_koma_var('title', meta.title)
+ set_koma_var('signature', meta.signature)
+ set_koma_var('customer', meta.customer)
+ set_koma_var('yourref', meta.yourref)
+ set_koma_var('myref', meta.myref)
+ set_koma_var('invoice', meta.invoice)
+ set_koma_var('place', meta.place)
+
+ set_koma_var('fromfax', meta.fromfax or meta.fax, true)
+ set_koma_var('fromurl', meta.fromurl or meta.url, true)
+ set_koma_var('fromlogo', meta.fromlogo or meta.logo, true)
+ set_koma_var('fromemail', meta.fromemail or meta.email, true)
+ set_koma_var('fromphone', meta.fromphone or meta.phone, true)
+
+ -- don't set date if date is set to `false`
+ if meta.date == nil or meta.date == true then
+ if meta['date-format'] then
+ set_koma_var('date', os.date(stringify(date_format)))
+ else
+ set_koma_var('date', pandoc.MetaInlines{pandoc.RawInline('latex', '\\today')})
+ end
+ elseif meta.date then
+ set_koma_var('date', meta.date)
+ end
+
+ if meta['KOMAoptions'] or #set_vars >= 1 then
+ res[#res + 1] = latex_command(
+ 'KOMAoptions',
+ meta['KOMAoptions']
+ or table.concat(set_vars, '=true,') .. '=true'
+ )
+ end
+
+ return res
+end
+
+--- Bring Metadata in a form suitable for the scrlttr KOMA class
+local function make_koma_metadata(meta)
+ local header_includes = ensure_meta_list(meta['header-includes'])
+ List.extend(header_includes, setkomavar_commands(meta))
+
+ local include_before = ensure_meta_list(meta['include-before'])
+ List.extend(
+ include_before,
+ {
+ pandoc.MetaInlines(
+ latex_command(
+ 'begin',
+ 'letter',
+ ensure_inlines(meta.address or default.address)
+ )
+ ),
+
+ pandoc.MetaInlines(
+ latex_command('opening', meta.opening or default.opening)
+ ),
+ }
+ )
+
+ local include_after = ensure_meta_list(meta['include-after'])
+ List.extend(
+ include_after,
+ {
+ pandoc.MetaInlines(
+ latex_command('closing', meta.closing or default.closing)
+ ),
+ pandoc.MetaInlines(latex_command('end', 'letter')),
+ }
+ )
+
+ -- unset or reset some unwanted vars
+ meta.data = nil -- set via komavar 'date'
+ meta.title = nil -- set via komavar 'subject'
+ meta.indent = true -- disable parskib
+ -- set documentclass to scrlttr2 if it's unset
+ meta.documentclass = meta.documentclass or pandoc.MetaString'scrlttr2'
+
+
+ meta['header-includes'] = header_includes
+ meta['include-before'] = include_before
+ meta['include-after'] = include_after
+
+ return meta
+end
+
+return {
+ {Meta = make_koma_metadata}
+}
diff --git a/paper/lua-filters/section-refs/Makefile b/paper/lua-filters/section-refs/Makefile
new file mode 100644
index 0000000..dcceb70
--- /dev/null
+++ b/paper/lua-filters/section-refs/Makefile
@@ -0,0 +1,26 @@
+OPTIONS_test_default := -t native \
+ -M bibliography=bibliography.bib \
+ -F pandoc-citeproc \
+ --lua-filter=section-refs.lua
+
+OPTIONS_test_no_citeproc := -t native \
+ --lua-filter=section-refs.lua
+
+OPTIONS_test_refs_name := -t native \
+ -M bibliography=bibliography.bib \
+ -M reference-section-title="Works Cited" \
+ -F pandoc-citeproc \
+ --lua-filter=section-refs.lua
+
+OPTIONS_test_section_level := -t native \
+ -M bibliography=bibliography.bib \
+ -M reference-section-title="Works Cited" \
+ -M section-refs-level=2\
+ -F pandoc-citeproc \
+ --lua-filter=section-refs.lua
+
+.PHONY: test
+test: test_default test_no_citeproc test_refs_name test_section_level
+
+test_%: expected_%.native sample.md bibliography.bib
+ @pandoc sample.md $(OPTIONS_$@) | diff --strip-trailing-cr -u $< -
diff --git a/paper/lua-filters/section-refs/README.md b/paper/lua-filters/section-refs/README.md
new file mode 100644
index 0000000..941bc36
--- /dev/null
+++ b/paper/lua-filters/section-refs/README.md
@@ -0,0 +1,19 @@
+# section-refs
+
+This filter allows the user to put bibliographies at the end of each
+section, containing only those references in the section. It works on
+the output of `pandoc-citeproc`, and so must be run after
+`pandoc-citeproc`. For example:
+
+~~~
+pandoc input.md -F pandoc-citerproc --lua-filter section-refs.lua
+~~~
+
+It allows curstomization through two metadata fields:
+`reference-section-title` and `section-refs-level` (default 1). The
+`section-refs-level` variable controls what level the biblography will
+occur at the end of. The header of the generated references section will
+be one level higher than `section-refs-level` (so if it occurs at the
+end of a level-1 section, it will receive a level-2 header, and so on).
+
+This filter requires pandoc version >= 2.1.
diff --git a/paper/lua-filters/section-refs/bibliography.bib b/paper/lua-filters/section-refs/bibliography.bib
new file mode 100644
index 0000000..7ce54d5
--- /dev/null
+++ b/paper/lua-filters/section-refs/bibliography.bib
@@ -0,0 +1,70 @@
+@BOOK{ainsworth:sheppard,
+ title = {Jack Sheppard: A Romance},
+ author = {William Harrison Ainsworth},
+ address = {London},
+ publisher = {George Routledge \& Sons},
+ year = {1900},
+ shorttitle = {Jack Sheppard},
+}
+
+@Article{altick:aldine,
+ author = {Richard D. Altick},
+ title = {From Aldine to Everyman: Cheap Reprint Series of the
+ English Classics 1830--1906},
+ journal = {Studies in Bibliography},
+ year = 1958,
+ volume = 11,
+ pages = {3--24}
+}
+
+@BOOK{cohen:jokes,
+ title = {Jokes: Philosophical Thoughts on Joking Matters},
+ publisher = {University of Chicago Press},
+ year = 1999,
+ author = {Ted Cohen},
+ address = {Chicago},
+ shorttitle = {Jokes}
+}
+
+@Book{dames:physiology,
+ author = {Nicholas Dames},
+ title = {The Physiology of the Novel: Reading, Neural
+ Science, and the Form of Victorian Fiction},
+ publisher = {Oxford University Press},
+ year = 2007,
+ address = {Oxford},
+ shorttitle = {Physiology}
+}
+
+@Book{kant:critique2,
+ author = {Immanuel Kant},
+ editor = {Mary Gregor},
+ translator = {Mary Gregor},
+ title = {Critique of Practical Reason},
+ publisher = {Cambridge University Press},
+ year = 2001,
+ address = {Cambridge, UK},
+ shorttitle = {Practical}
+}
+
+@Book{lukacs:european,
+ author = {Georg Luk{\'a}cs},
+ title = {Studies in European Realism: A Sociological Survey
+ of the Writings of Balzac, Stendhal, Zola, Tolstoy,
+ Gorki, and Others},
+ publisher = {The Merlin Press},
+ year = 1989,
+ translator = {Edith Bone},
+ address = {London},
+ shorttitle = {Studies}
+}
+
+@Book{trollope:autobiography,
+ author = {Anthony Trollope},
+ editor = {Michael Sadleir and Frederick Page},
+ title = {An Autobiography},
+ publisher = {Oxford University Press},
+ year = 1999,
+ address = {Oxford},
+ origdate = 1883
+}
diff --git a/paper/lua-filters/section-refs/expected_default.native b/paper/lua-filters/section-refs/expected_default.native
new file mode 100644
index 0000000..b1c6945
--- /dev/null
+++ b/paper/lua-filters/section-refs/expected_default.native
@@ -0,0 +1,25 @@
+[Header 1 ("here-is-one-section",[],[]) [Str "Here",Space,Str "is",Space,Str "one",Space,Str "section"]
+,Header 2 ("a-subsection",[],[]) [Str "A",Space,Str "subsection"]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "ainsworth:sheppard", citationPrefix = [], citationSuffix = [Space,Str "27"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Str "(Ainsworth",Space,Str "1900,",Space,Str "27)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "else",SoftBreak,Cite [Citation {citationId = "dames:physiology", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2}] [Str "(Dames",Space,Str "2007)"],Str ".",Space,Str "Finally,",Space,Str "we",Space,Str "want",Space,Str "to",Space,Str "make",Space,Str "sure",Space,Str "that",Space,Str "we",Space,Str "have",Space,Str "one",Space,Str "last",SoftBreak,Str "citation",Space,Str "here",Space,Cite [Citation {citationId = "kant:critique2", citationPrefix = [], citationSuffix = [Space,Str "29"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3}] [Str "(Kant",Space,Str "2001,",Space,Str "29)"],Str "."]
+,Header 2 ("another-subsection.",[],[]) [Str "Another",Space,Str "subsection."]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "altick:aldine", citationPrefix = [], citationSuffix = [Space,Str "20"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4}] [Str "(Altick",Space,Str "1958,",Space,Str "20)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "repeated",SoftBreak,Cite [Citation {citationId = "dames:physiology", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 5}] [Str "(Dames",Space,Str "2007)"],Str "."]
+,Div ("refs-1",["references"],[])
+ [Div ("ref-ainsworth:sheppard",[],[])
+ [Para [Str "Ainsworth,",Space,Str "William",Space,Str "Harrison.",Space,Str "1900.",Space,Emph [Str "Jack",Space,Str "Sheppard:",Space,Str "A",Space,Str "Romance"],Str ".",Space,Str "London:",Space,Str "George",Space,Str "Routledge",Space,Str "&",Space,Str "Sons."]]
+ ,Div ("ref-altick:aldine",[],[])
+ [Para [Str "Altick,",Space,Str "Richard",Space,Str "D.",Space,Str "1958.",Space,Str "\8220From",Space,Str "Aldine",Space,Str "to",Space,Str "Everyman:",Space,Str "Cheap",Space,Str "Reprint",Space,Str "Series",Space,Str "of",Space,Str "the",Space,Str "English",Space,Str "Classics",Space,Str "1830\8211\&1906.\8221",Space,Emph [Str "Studies",Space,Str "in",Space,Str "Bibliography"],Space,Str "11:",Space,Str "3\8211\&24."]]
+ ,Div ("ref-dames:physiology",[],[])
+ [Para [Str "Dames,",Space,Str "Nicholas.",Space,Str "2007.",Space,Emph [Str "The",Space,Str "Physiology",Space,Str "of",Space,Str "the",Space,Str "Novel:",Space,Str "Reading,",Space,Str "Neural",Space,Str "Science,",Space,Str "and",Space,Str "the",Space,Str "Form",Space,Str "of",Space,Str "Victorian",Space,Str "Fiction"],Str ".",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]
+ ,Div ("ref-dames:physiology",[],[])
+ [Para [Str "Dames,",Space,Str "Nicholas.",Space,Str "2007.",Space,Emph [Str "The",Space,Str "Physiology",Space,Str "of",Space,Str "the",Space,Str "Novel:",Space,Str "Reading,",Space,Str "Neural",Space,Str "Science,",Space,Str "and",Space,Str "the",Space,Str "Form",Space,Str "of",Space,Str "Victorian",Space,Str "Fiction"],Str ".",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]
+ ,Div ("ref-kant:critique2",[],[])
+ [Para [Str "Kant,",Space,Str "Immanuel.",Space,Str "2001.",Space,Emph [Str "Critique",Space,Str "of",Space,Str "Practical",Space,Str "Reason"],Str ".",Space,Str "Edited",Space,Str "and",Space,Str "translated",Space,Str "by",Space,Str "Mary",Space,Str "Gregor.",Space,Str "Cambridge,",Space,Str "UK:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press."]]]
+,Header 1 ("here-is-another-section",[],[]) [Str "Here",Space,Str "is",Space,Str "another",Space,Str "section"]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "lukacs:european", citationPrefix = [], citationSuffix = [Space,Str "125"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 6}] [Str "(Luk",Str "\225cs",Space,Str "1989,",Space,Str "125)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "else",SoftBreak,Cite [Citation {citationId = "cohen:jokes", citationPrefix = [], citationSuffix = [Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 7}] [Str "(Cohen",Space,Str "1999,",Space,Str "3)"],Str ".",Space,Str "Finally,",Space,Str "we",Space,Str "want",Space,Str "to",Space,Str "make",Space,Str "sure",Space,Str "that",Space,Str "we",Space,Str "have",Space,Str "one",Space,Str "last",SoftBreak,Str "citation",Space,Str "here",Space,Cite [Citation {citationId = "trollope:autobiography", citationPrefix = [], citationSuffix = [Space,Str "392"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 8}] [Str "(Trollope",Space,Str "[1883]",Space,Str "1999,",Space,Str "392)"],Str "."]
+,Div ("refs-2",["references"],[])
+ [Div ("ref-cohen:jokes",[],[])
+ [Para [Str "Cohen,",Space,Str "Ted.",Space,Str "1999.",Space,Emph [Str "Jokes:",Space,Str "Philosophical",Space,Str "Thoughts",Space,Str "on",Space,Str "Joking",Space,Str "Matters"],Str ".",Space,Str "Chicago:",Space,Str "University",Space,Str "of",Space,Str "Chicago",Space,Str "Press."]]
+ ,Div ("ref-lukacs:european",[],[])
+ [Para [Str "Luk",Str "\225cs,",Space,Str "Georg.",Space,Str "1989.",Space,Emph [Str "Studies",Space,Str "in",Space,Str "European",Space,Str "Realism:",Space,Str "A",Space,Str "Sociological",Space,Str "Survey",Space,Str "of",Space,Str "the",Space,Str "Writings",Space,Str "of",Space,Str "Balzac,",Space,Str "Stendhal,",Space,Str "Zola,",Space,Str "Tolstoy,",Space,Str "Gorki,",Space,Str "and",Space,Str "Others"],Str ".",Space,Str "Translated",Space,Str "by",Space,Str "Edith",Space,Str "Bone.",Space,Str "London:",Space,Str "The",Space,Str "Merlin",Space,Str "Press."]]
+ ,Div ("ref-trollope:autobiography",[],[])
+ [Para [Str "Trollope,",Space,Str "Anthony.",Space,Str "(1883)",Space,Str "1999.",Space,Emph [Str "An",Space,Str "Autobiography"],Str ".",Space,Str "Edited",Space,Str "by",Space,Str "Michael",Space,Str "Sadleir",Space,Str "and",Space,Str "Frederick",Space,Str "Page.",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]]]
diff --git a/paper/lua-filters/section-refs/expected_no_citeproc.native b/paper/lua-filters/section-refs/expected_no_citeproc.native
new file mode 100644
index 0000000..2219b6e
--- /dev/null
+++ b/paper/lua-filters/section-refs/expected_no_citeproc.native
@@ -0,0 +1,7 @@
+[Header 1 ("here-is-one-section",[],[]) [Str "Here",Space,Str "is",Space,Str "one",Space,Str "section"]
+,Header 2 ("a-subsection",[],[]) [Str "A",Space,Str "subsection"]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "ainsworth:sheppard", citationPrefix = [], citationSuffix = [Space,Str "27"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@ainsworth:sheppard",Space,Str "27]"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "else",SoftBreak,Cite [Citation {citationId = "dames:physiology", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@dames:physiology]"],Str ".",Space,Str "Finally,",Space,Str "we",Space,Str "want",Space,Str "to",Space,Str "make",Space,Str "sure",Space,Str "that",Space,Str "we",Space,Str "have",Space,Str "one",Space,Str "last",SoftBreak,Str "citation",Space,Str "here",Space,Cite [Citation {citationId = "kant:critique2", citationPrefix = [], citationSuffix = [Space,Str "29"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@kant:critique2",Space,Str "29]"],Str "."]
+,Header 2 ("another-subsection.",[],[]) [Str "Another",Space,Str "subsection."]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "altick:aldine", citationPrefix = [], citationSuffix = [Space,Str "20"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@altick:aldine",Space,Str "20]"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "repeated",SoftBreak,Cite [Citation {citationId = "dames:physiology", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@dames:physiology]"],Str "."]
+,Header 1 ("here-is-another-section",[],[]) [Str "Here",Space,Str "is",Space,Str "another",Space,Str "section"]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "lukacs:european", citationPrefix = [], citationSuffix = [Space,Str "125"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@lukacs:european",Space,Str "125]"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "else",SoftBreak,Cite [Citation {citationId = "cohen:jokes", citationPrefix = [], citationSuffix = [Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@cohen:jokes",Space,Str "3]"],Str ".",Space,Str "Finally,",Space,Str "we",Space,Str "want",Space,Str "to",Space,Str "make",Space,Str "sure",Space,Str "that",Space,Str "we",Space,Str "have",Space,Str "one",Space,Str "last",SoftBreak,Str "citation",Space,Str "here",Space,Cite [Citation {citationId = "trollope:autobiography", citationPrefix = [], citationSuffix = [Space,Str "392"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 0}] [Str "[@trollope:autobiography",Space,Str "392]"],Str "."]]
diff --git a/paper/lua-filters/section-refs/expected_refs_name.native b/paper/lua-filters/section-refs/expected_refs_name.native
new file mode 100644
index 0000000..0d026ed
--- /dev/null
+++ b/paper/lua-filters/section-refs/expected_refs_name.native
@@ -0,0 +1,27 @@
+[Header 1 ("here-is-one-section",[],[]) [Str "Here",Space,Str "is",Space,Str "one",Space,Str "section"]
+,Header 2 ("a-subsection",[],[]) [Str "A",Space,Str "subsection"]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "ainsworth:sheppard", citationPrefix = [], citationSuffix = [Space,Str "27"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Str "(Ainsworth",Space,Str "1900,",Space,Str "27)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "else",SoftBreak,Cite [Citation {citationId = "dames:physiology", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2}] [Str "(Dames",Space,Str "2007)"],Str ".",Space,Str "Finally,",Space,Str "we",Space,Str "want",Space,Str "to",Space,Str "make",Space,Str "sure",Space,Str "that",Space,Str "we",Space,Str "have",Space,Str "one",Space,Str "last",SoftBreak,Str "citation",Space,Str "here",Space,Cite [Citation {citationId = "kant:critique2", citationPrefix = [], citationSuffix = [Space,Str "29"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3}] [Str "(Kant",Space,Str "2001,",Space,Str "29)"],Str "."]
+,Header 2 ("another-subsection.",[],[]) [Str "Another",Space,Str "subsection."]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "altick:aldine", citationPrefix = [], citationSuffix = [Space,Str "20"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4}] [Str "(Altick",Space,Str "1958,",Space,Str "20)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "repeated",SoftBreak,Cite [Citation {citationId = "dames:physiology", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 5}] [Str "(Dames",Space,Str "2007)"],Str "."]
+,Div ("refs-1",["references"],[])
+ [Header 2 ("bibliography-1",["unnumbered"],[]) [Str "Works",Space,Str "Cited"]
+ ,Div ("ref-ainsworth:sheppard",[],[])
+ [Para [Str "Ainsworth,",Space,Str "William",Space,Str "Harrison.",Space,Str "1900.",Space,Emph [Str "Jack",Space,Str "Sheppard:",Space,Str "A",Space,Str "Romance"],Str ".",Space,Str "London:",Space,Str "George",Space,Str "Routledge",Space,Str "&",Space,Str "Sons."]]
+ ,Div ("ref-altick:aldine",[],[])
+ [Para [Str "Altick,",Space,Str "Richard",Space,Str "D.",Space,Str "1958.",Space,Str "\8220From",Space,Str "Aldine",Space,Str "to",Space,Str "Everyman:",Space,Str "Cheap",Space,Str "Reprint",Space,Str "Series",Space,Str "of",Space,Str "the",Space,Str "English",Space,Str "Classics",Space,Str "1830\8211\&1906.\8221",Space,Emph [Str "Studies",Space,Str "in",Space,Str "Bibliography"],Space,Str "11:",Space,Str "3\8211\&24."]]
+ ,Div ("ref-dames:physiology",[],[])
+ [Para [Str "Dames,",Space,Str "Nicholas.",Space,Str "2007.",Space,Emph [Str "The",Space,Str "Physiology",Space,Str "of",Space,Str "the",Space,Str "Novel:",Space,Str "Reading,",Space,Str "Neural",Space,Str "Science,",Space,Str "and",Space,Str "the",Space,Str "Form",Space,Str "of",Space,Str "Victorian",Space,Str "Fiction"],Str ".",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]
+ ,Div ("ref-dames:physiology",[],[])
+ [Para [Str "Dames,",Space,Str "Nicholas.",Space,Str "2007.",Space,Emph [Str "The",Space,Str "Physiology",Space,Str "of",Space,Str "the",Space,Str "Novel:",Space,Str "Reading,",Space,Str "Neural",Space,Str "Science,",Space,Str "and",Space,Str "the",Space,Str "Form",Space,Str "of",Space,Str "Victorian",Space,Str "Fiction"],Str ".",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]
+ ,Div ("ref-kant:critique2",[],[])
+ [Para [Str "Kant,",Space,Str "Immanuel.",Space,Str "2001.",Space,Emph [Str "Critique",Space,Str "of",Space,Str "Practical",Space,Str "Reason"],Str ".",Space,Str "Edited",Space,Str "and",Space,Str "translated",Space,Str "by",Space,Str "Mary",Space,Str "Gregor.",Space,Str "Cambridge,",Space,Str "UK:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press."]]]
+,Header 1 ("here-is-another-section",[],[]) [Str "Here",Space,Str "is",Space,Str "another",Space,Str "section"]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "lukacs:european", citationPrefix = [], citationSuffix = [Space,Str "125"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 6}] [Str "(Luk",Str "\225cs",Space,Str "1989,",Space,Str "125)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "else",SoftBreak,Cite [Citation {citationId = "cohen:jokes", citationPrefix = [], citationSuffix = [Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 7}] [Str "(Cohen",Space,Str "1999,",Space,Str "3)"],Str ".",Space,Str "Finally,",Space,Str "we",Space,Str "want",Space,Str "to",Space,Str "make",Space,Str "sure",Space,Str "that",Space,Str "we",Space,Str "have",Space,Str "one",Space,Str "last",SoftBreak,Str "citation",Space,Str "here",Space,Cite [Citation {citationId = "trollope:autobiography", citationPrefix = [], citationSuffix = [Space,Str "392"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 8}] [Str "(Trollope",Space,Str "[1883]",Space,Str "1999,",Space,Str "392)"],Str "."]
+,Div ("refs-2",["references"],[])
+ [Header 2 ("bibliography-2",["unnumbered"],[]) [Str "Works",Space,Str "Cited"]
+ ,Div ("ref-cohen:jokes",[],[])
+ [Para [Str "Cohen,",Space,Str "Ted.",Space,Str "1999.",Space,Emph [Str "Jokes:",Space,Str "Philosophical",Space,Str "Thoughts",Space,Str "on",Space,Str "Joking",Space,Str "Matters"],Str ".",Space,Str "Chicago:",Space,Str "University",Space,Str "of",Space,Str "Chicago",Space,Str "Press."]]
+ ,Div ("ref-lukacs:european",[],[])
+ [Para [Str "Luk",Str "\225cs,",Space,Str "Georg.",Space,Str "1989.",Space,Emph [Str "Studies",Space,Str "in",Space,Str "European",Space,Str "Realism:",Space,Str "A",Space,Str "Sociological",Space,Str "Survey",Space,Str "of",Space,Str "the",Space,Str "Writings",Space,Str "of",Space,Str "Balzac,",Space,Str "Stendhal,",Space,Str "Zola,",Space,Str "Tolstoy,",Space,Str "Gorki,",Space,Str "and",Space,Str "Others"],Str ".",Space,Str "Translated",Space,Str "by",Space,Str "Edith",Space,Str "Bone.",Space,Str "London:",Space,Str "The",Space,Str "Merlin",Space,Str "Press."]]
+ ,Div ("ref-trollope:autobiography",[],[])
+ [Para [Str "Trollope,",Space,Str "Anthony.",Space,Str "(1883)",Space,Str "1999.",Space,Emph [Str "An",Space,Str "Autobiography"],Str ".",Space,Str "Edited",Space,Str "by",Space,Str "Michael",Space,Str "Sadleir",Space,Str "and",Space,Str "Frederick",Space,Str "Page.",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]]]
diff --git a/paper/lua-filters/section-refs/expected_section_level.native b/paper/lua-filters/section-refs/expected_section_level.native
new file mode 100644
index 0000000..1d3c89e
--- /dev/null
+++ b/paper/lua-filters/section-refs/expected_section_level.native
@@ -0,0 +1,31 @@
+[Header 1 ("here-is-one-section",[],[]) [Str "Here",Space,Str "is",Space,Str "one",Space,Str "section"]
+,Div ("refs-1",["references"],[])
+ [Header 3 ("bibliography-1",["unnumbered"],[]) [Str "Works",Space,Str "Cited"]]
+,Header 2 ("a-subsection",[],[]) [Str "A",Space,Str "subsection"]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "ainsworth:sheppard", citationPrefix = [], citationSuffix = [Space,Str "27"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 1}] [Str "(Ainsworth",Space,Str "1900,",Space,Str "27)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "else",SoftBreak,Cite [Citation {citationId = "dames:physiology", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 2}] [Str "(Dames",Space,Str "2007)"],Str ".",Space,Str "Finally,",Space,Str "we",Space,Str "want",Space,Str "to",Space,Str "make",Space,Str "sure",Space,Str "that",Space,Str "we",Space,Str "have",Space,Str "one",Space,Str "last",SoftBreak,Str "citation",Space,Str "here",Space,Cite [Citation {citationId = "kant:critique2", citationPrefix = [], citationSuffix = [Space,Str "29"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 3}] [Str "(Kant",Space,Str "2001,",Space,Str "29)"],Str "."]
+,Div ("refs-2",["references"],[])
+ [Header 3 ("bibliography-2",["unnumbered"],[]) [Str "Works",Space,Str "Cited"]
+ ,Div ("ref-ainsworth:sheppard",[],[])
+ [Para [Str "Ainsworth,",Space,Str "William",Space,Str "Harrison.",Space,Str "1900.",Space,Emph [Str "Jack",Space,Str "Sheppard:",Space,Str "A",Space,Str "Romance"],Str ".",Space,Str "London:",Space,Str "George",Space,Str "Routledge",Space,Str "&",Space,Str "Sons."]]
+ ,Div ("ref-dames:physiology",[],[])
+ [Para [Str "Dames,",Space,Str "Nicholas.",Space,Str "2007.",Space,Emph [Str "The",Space,Str "Physiology",Space,Str "of",Space,Str "the",Space,Str "Novel:",Space,Str "Reading,",Space,Str "Neural",Space,Str "Science,",Space,Str "and",Space,Str "the",Space,Str "Form",Space,Str "of",Space,Str "Victorian",Space,Str "Fiction"],Str ".",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]
+ ,Div ("ref-kant:critique2",[],[])
+ [Para [Str "Kant,",Space,Str "Immanuel.",Space,Str "2001.",Space,Emph [Str "Critique",Space,Str "of",Space,Str "Practical",Space,Str "Reason"],Str ".",Space,Str "Edited",Space,Str "and",Space,Str "translated",Space,Str "by",Space,Str "Mary",Space,Str "Gregor.",Space,Str "Cambridge,",Space,Str "UK:",Space,Str "Cambridge",Space,Str "University",Space,Str "Press."]]]
+,Header 2 ("another-subsection.",[],[]) [Str "Another",Space,Str "subsection."]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "altick:aldine", citationPrefix = [], citationSuffix = [Space,Str "20"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 4}] [Str "(Altick",Space,Str "1958,",Space,Str "20)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "repeated",SoftBreak,Cite [Citation {citationId = "dames:physiology", citationPrefix = [], citationSuffix = [], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 5}] [Str "(Dames",Space,Str "2007)"],Str "."]
+,Div ("refs-3",["references"],[])
+ [Header 3 ("bibliography-3",["unnumbered"],[]) [Str "Works",Space,Str "Cited"]
+ ,Div ("ref-altick:aldine",[],[])
+ [Para [Str "Altick,",Space,Str "Richard",Space,Str "D.",Space,Str "1958.",Space,Str "\8220From",Space,Str "Aldine",Space,Str "to",Space,Str "Everyman:",Space,Str "Cheap",Space,Str "Reprint",Space,Str "Series",Space,Str "of",Space,Str "the",Space,Str "English",Space,Str "Classics",Space,Str "1830\8211\&1906.\8221",Space,Emph [Str "Studies",Space,Str "in",Space,Str "Bibliography"],Space,Str "11:",Space,Str "3\8211\&24."]]
+ ,Div ("ref-dames:physiology",[],[])
+ [Para [Str "Dames,",Space,Str "Nicholas.",Space,Str "2007.",Space,Emph [Str "The",Space,Str "Physiology",Space,Str "of",Space,Str "the",Space,Str "Novel:",Space,Str "Reading,",Space,Str "Neural",Space,Str "Science,",Space,Str "and",Space,Str "the",Space,Str "Form",Space,Str "of",Space,Str "Victorian",Space,Str "Fiction"],Str ".",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]]
+,Header 1 ("here-is-another-section",[],[]) [Str "Here",Space,Str "is",Space,Str "another",Space,Str "section"]
+,Para [Str "Here",Space,Str "is",Space,Str "something",Space,Cite [Citation {citationId = "lukacs:european", citationPrefix = [], citationSuffix = [Space,Str "125"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 6}] [Str "(Luk",Str "\225cs",Space,Str "1989,",Space,Str "125)"],Str ".",Space,Str "And",Space,Str "here",Space,Str "is",Space,Str "something",Space,Str "else",SoftBreak,Cite [Citation {citationId = "cohen:jokes", citationPrefix = [], citationSuffix = [Space,Str "3"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 7}] [Str "(Cohen",Space,Str "1999,",Space,Str "3)"],Str ".",Space,Str "Finally,",Space,Str "we",Space,Str "want",Space,Str "to",Space,Str "make",Space,Str "sure",Space,Str "that",Space,Str "we",Space,Str "have",Space,Str "one",Space,Str "last",SoftBreak,Str "citation",Space,Str "here",Space,Cite [Citation {citationId = "trollope:autobiography", citationPrefix = [], citationSuffix = [Space,Str "392"], citationMode = NormalCitation, citationNoteNum = 0, citationHash = 8}] [Str "(Trollope",Space,Str "[1883]",Space,Str "1999,",Space,Str "392)"],Str "."]
+,Div ("refs-4",["references"],[])
+ [Header 3 ("bibliography-4",["unnumbered"],[]) [Str "Works",Space,Str "Cited"]
+ ,Div ("ref-cohen:jokes",[],[])
+ [Para [Str "Cohen,",Space,Str "Ted.",Space,Str "1999.",Space,Emph [Str "Jokes:",Space,Str "Philosophical",Space,Str "Thoughts",Space,Str "on",Space,Str "Joking",Space,Str "Matters"],Str ".",Space,Str "Chicago:",Space,Str "University",Space,Str "of",Space,Str "Chicago",Space,Str "Press."]]
+ ,Div ("ref-lukacs:european",[],[])
+ [Para [Str "Luk",Str "\225cs,",Space,Str "Georg.",Space,Str "1989.",Space,Emph [Str "Studies",Space,Str "in",Space,Str "European",Space,Str "Realism:",Space,Str "A",Space,Str "Sociological",Space,Str "Survey",Space,Str "of",Space,Str "the",Space,Str "Writings",Space,Str "of",Space,Str "Balzac,",Space,Str "Stendhal,",Space,Str "Zola,",Space,Str "Tolstoy,",Space,Str "Gorki,",Space,Str "and",Space,Str "Others"],Str ".",Space,Str "Translated",Space,Str "by",Space,Str "Edith",Space,Str "Bone.",Space,Str "London:",Space,Str "The",Space,Str "Merlin",Space,Str "Press."]]
+ ,Div ("ref-trollope:autobiography",[],[])
+ [Para [Str "Trollope,",Space,Str "Anthony.",Space,Str "(1883)",Space,Str "1999.",Space,Emph [Str "An",Space,Str "Autobiography"],Str ".",Space,Str "Edited",Space,Str "by",Space,Str "Michael",Space,Str "Sadleir",Space,Str "and",Space,Str "Frederick",Space,Str "Page.",Space,Str "Oxford:",Space,Str "Oxford",Space,Str "University",Space,Str "Press."]]]]
diff --git a/paper/lua-filters/section-refs/sample.md b/paper/lua-filters/section-refs/sample.md
new file mode 100644
index 0000000..00ddb86
--- /dev/null
+++ b/paper/lua-filters/section-refs/sample.md
@@ -0,0 +1,18 @@
+# Here is one section
+
+## A subsection
+
+Here is something [@ainsworth:sheppard 27]. And here is something else
+[@dames:physiology]. Finally, we want to make sure that we have one last
+citation here [@kant:critique2 29].
+
+## Another subsection.
+
+Here is something [@altick:aldine 20]. And here is something repeated
+[@dames:physiology].
+
+# Here is another section
+
+Here is something [@lukacs:european 125]. And here is something else
+[@cohen:jokes 3]. Finally, we want to make sure that we have one last
+citation here [@trollope:autobiography 392].
diff --git a/paper/lua-filters/section-refs/section-refs.lua b/paper/lua-filters/section-refs/section-refs.lua
new file mode 100644
index 0000000..68e61d0
--- /dev/null
+++ b/paper/lua-filters/section-refs/section-refs.lua
@@ -0,0 +1,138 @@
+function is_ref_div (blk)
+ return (blk.t == "Div" and blk.identifier == "refs")
+end
+
+function is_ref_header (blk)
+ return (blk.t == "Header" and blk.identifier == "bibliography")
+end
+
+function get_all_refs (blks)
+ for _, b in pairs(blks) do
+ if is_ref_div(b) then
+ return b.content
+ end
+ end
+end
+
+function remove_all_refs (blks)
+ local out = {}
+ for _, b in pairs(blks) do
+ if not (is_ref_div(b) or is_ref_header(b)) then
+ table.insert(out, b)
+ end
+ end
+ return out
+end
+
+-- We return a {number, ref} pair so we can sort in the individual
+-- bibliographies.
+function citation_to_numbered_ref (citation, all_refs)
+ local div_id = "ref-" .. citation.id
+ for i, d in ipairs(all_refs) do
+ if d.t == "Div" and d.identifier == div_id then
+ return {i, d}
+ end
+ end
+end
+
+
+function get_partial_refs (blocks, all_refs)
+ local cites = {}
+ local citegetter = {
+ Cite = function (el)
+ for _, c in pairs(el.citations) do
+ table.insert(cites, c)
+ end
+ end
+ }
+
+ for _, b in pairs(blocks) do
+ pandoc.walk_block(b, citegetter)
+ end
+
+
+ -- first we make a list of the {number, ref} pairs so we can sort
+ -- them. Then after sorting, we're going to make a new list with
+ -- only the second element.
+ local numbered_refs = {}
+ for _, c in pairs(cites) do
+ local r = citation_to_numbered_ref(c, all_refs)
+ if r then
+ table.insert(numbered_refs, r)
+ end
+ end
+
+ table.sort(numbered_refs, function(x, y) return x[1] < y[1] end)
+
+ local refs = {}
+ for _, nr in pairs(numbered_refs) do
+ table.insert(refs, nr[2])
+ end
+
+ return refs
+end
+
+function add_section_refs (blks, lvl, refs_title, all_refs)
+ local output_blks = {}
+ local section = {}
+ local refs_num = 0
+
+ local go = function ()
+ refs_num = refs_num + 1
+ local section_refs = get_partial_refs(section, all_refs)
+ if refs_title then
+ local hdr = pandoc.Header(lvl + 1,
+ refs_title,
+ pandoc.Attr("bibliography-" .. tostring(refs_num),
+ {"unnumbered"}))
+ table.insert(section_refs, 1, hdr)
+ end
+ local refs_div = pandoc.Div(section_refs,
+ pandoc.Attr("refs-" .. tostring(refs_num),
+ {"references"}))
+ table.insert(section, refs_div)
+ for _, x in pairs(section) do
+ table.insert(output_blks, x)
+ end
+ end
+
+ -- to avoid putting a bib after an intro paragraph.
+ local seen_hdr_before = false
+ for _, b in pairs(blks) do
+ if b.t == "Header" and b.level <= lvl then
+ if seen_hdr_before then
+ go()
+ section = {b}
+ else
+ seen_hdr_before = true
+ table.insert(section, b)
+ end
+ else
+ table.insert(section, b)
+ end
+ end
+ go()
+ return output_blks
+end
+
+function Pandoc(doc)
+ if PANDOC_VERSION == nil then -- if pandoc_version < 2.1
+ io.stderr:write("WARNING: pandoc >= 2.1 required for section-refs filter\n")
+ return doc
+ end
+ local refs_title = doc.meta["reference-section-title"]
+ -- if we get it from a command-line field, read it in as md.
+ if type(refs_title) == "string" then
+ refs_title = pandoc.read(refs_title, "markdown").blocks[1].content
+ end
+ local lvl = tonumber(doc.meta["section-refs-level"]) or 1
+ local all_refs = get_all_refs(doc.blocks)
+ -- we only want to do something if there are refs to work
+ -- with. This way, if this is run without pandoc-citeproc, it will
+ -- just return the same document.
+ if all_refs then
+ local unreffed = remove_all_refs(doc.blocks)
+ local output = add_section_refs(unreffed, lvl, refs_title, all_refs)
+ return pandoc.Pandoc(output, doc.meta)
+ end
+end
diff --git a/paper/lua-filters/short-captions/Makefile b/paper/lua-filters/short-captions/Makefile
new file mode 100644
index 0000000..756cf2b
--- /dev/null
+++ b/paper/lua-filters/short-captions/Makefile
@@ -0,0 +1,18 @@
+LF = --lua-filter=short-captions.lua
+F = -F pandoc-crossref
+
+test:
+ @pandoc $(LF) README.md -w latex | diff --strip-trailing-cr expected-1.tex -
+
+crossref:
+ @echo testing short-captions.lua after pandoc-crossref
+ @pandoc $(F) $(LF) README.md -w latex | diff --strip-trailing-cr expected-2.tex -
+ @echo testing short-captions.lua before pandoc-crossref
+ @pandoc $(LF) $(F) README.md -w latex | diff --strip-trailing-cr expected-2.tex -
+
+readme:
+ @pandoc -s $(F) $(LF) README.md -o README.pdf
+
+latex:
+ @pandoc -s $(F) $(LF) README.md -o README.tex
+
diff --git a/paper/lua-filters/short-captions/README.md b/paper/lua-filters/short-captions/README.md
new file mode 100644
index 0000000..2721004
--- /dev/null
+++ b/paper/lua-filters/short-captions/README.md
@@ -0,0 +1,52 @@
+---
+title: "short-captions.lua"
+lof: true
+---
+
+# Short captions in \LaTeX\ output
+
+For latex output, this filter uses the attribute `short-caption` for
+figures so that the attribute value appears in the List of Figures, if
+one is desired.
+
+# Usage
+
+Where you would have a figure in, say, markdown as
+
+ ![The caption](foo.png )
+
+You can now specify the figure as
+
+ ![The long caption](foo.png){short-caption="a short caption"}
+
+If the document metadata includes `lof:true`, then the List of Figures
+will use the short caption. This is particularly useful for students
+writing dissertations, who often have to include a List of Figures in
+the front matter, but where figure captions themselves can be quite
+lengthy.
+
+ pandoc --lua-filter=short-captions.lua article.md -o article.tex
+
+ pandoc --lua-filter=short-captions.lua article.md -o article.pdf
+
+
+
+# Example
+
+@Fig:shortcap is an interesting figure with a long caption, but a short
+caption in the List of Figures.
+
+![This is an *extremely* interesting figure that has a lot of detail I
+will need to describe in a few sentences. This figure has a short
+caption that will appear in the list of figures. Other attributes are
+preserved](fig.pdf){#fig:shortcap short-caption="A short caption with
+math $x^n + y^n = z^n$" width="50%"}
+
+
+# Limitations
+
+- The filter will process the `short-caption` attribute value as pandoc
+ markdown, regardless of the input format.
+- It does not work for tables and listings yet.
+- But it works with pandoc-crossref, regardless of the order of
+ application.
diff --git a/paper/lua-filters/short-captions/expected-1.tex b/paper/lua-filters/short-captions/expected-1.tex
new file mode 100644
index 0000000..a28bb7e
--- /dev/null
+++ b/paper/lua-filters/short-captions/expected-1.tex
@@ -0,0 +1,67 @@
+\hypertarget{short-captions-in-output}{%
+\section{\texorpdfstring{Short captions in
+\LaTeX~output}{Short captions in ~output}}\label{short-captions-in-output}}
+
+For latex output, this filter uses the attribute \texttt{short-caption}
+for figures so that the attribute value appears in the List of Figures,
+if one is desired.
+
+\hypertarget{usage}{%
+\section{Usage}\label{usage}}
+
+Where you would have a figure in, say, markdown as
+
+\begin{verbatim}
+![The caption](foo.png )
+\end{verbatim}
+
+You can now specify the figure as
+
+\begin{verbatim}
+![The long caption](foo.png){short-caption="a short caption"}
+\end{verbatim}
+
+If the document metadata includes \texttt{lof:true}, then the List of
+Figures will use the short caption. This is particularly useful for
+students writing dissertations, who often have to include a List of
+Figures in the front matter, but where figure captions themselves can be
+quite lengthy.
+
+\begin{verbatim}
+pandoc --lua-filter=short-captions.lua article.md -o article.tex
+
+pandoc --lua-filter=short-captions.lua article.md -o article.pdf
+\end{verbatim}
+
+\hypertarget{example}{%
+\section{Example}\label{example}}
+
+@Fig:shortcap is an interesting figure with a long caption, but a short
+caption in the List of Figures.
+
+\hypertarget{fig:shortcap}{%
+\begin{figure}
+\centering
+\includegraphics[width=0.5\textwidth,height=\textheight]{fig.pdf}
+\caption[{A short caption with math \(x^n + y^n = z^n\)}]{This is an
+\emph{extremely} interesting figure that has a lot of detail I will need
+to describe in a few sentences. This figure has a short caption that
+will appear in the list of figures. Other attributes are preserved}
+\label{fig:shortcap}
+\end{figure}
+}
+
+\hypertarget{limitations}{%
+\section{Limitations}\label{limitations}}
+
+\begin{itemize}
+\tightlist
+\item
+ The filter will process the \texttt{short-caption} attribute value as
+ pandoc markdown, regardless of the input format.
+\item
+ It does not work for tables and listings yet.
+\item
+ But it works with pandoc-crossref, regardless of the order of
+ application.
+\end{itemize}
diff --git a/paper/lua-filters/short-captions/expected-2.tex b/paper/lua-filters/short-captions/expected-2.tex
new file mode 100644
index 0000000..95444b3
--- /dev/null
+++ b/paper/lua-filters/short-captions/expected-2.tex
@@ -0,0 +1,67 @@
+\hypertarget{short-captions-in-output}{%
+\section{\texorpdfstring{Short captions in
+\LaTeX~output}{Short captions in ~output}}\label{short-captions-in-output}}
+
+For latex output, this filter uses the attribute \texttt{short-caption}
+for figures so that the attribute value appears in the List of Figures,
+if one is desired.
+
+\hypertarget{usage}{%
+\section{Usage}\label{usage}}
+
+Where you would have a figure in, say, markdown as
+
+\begin{verbatim}
+![The caption](foo.png )
+\end{verbatim}
+
+You can now specify the figure as
+
+\begin{verbatim}
+![The long caption](foo.png){short-caption="a short caption"}
+\end{verbatim}
+
+If the document metadata includes \texttt{lof:true}, then the List of
+Figures will use the short caption. This is particularly useful for
+students writing dissertations, who often have to include a List of
+Figures in the front matter, but where figure captions themselves can be
+quite lengthy.
+
+\begin{verbatim}
+pandoc --lua-filter=short-captions.lua article.md -o article.tex
+
+pandoc --lua-filter=short-captions.lua article.md -o article.pdf
+\end{verbatim}
+
+\hypertarget{example}{%
+\section{Example}\label{example}}
+
+Fig.~\ref{fig:shortcap} is an interesting figure with a long caption,
+but a short caption in the List of Figures.
+
+\hypertarget{fig:shortcap}{%
+\begin{figure}
+\centering
+\includegraphics[width=0.5\textwidth,height=\textheight]{fig.pdf}
+\caption[{A short caption with math \(x^n + y^n = z^n\)}]{This is an
+\emph{extremely} interesting figure that has a lot of detail I will need
+to describe in a few sentences. This figure has a short caption that
+will appear in the list of figures. Other attributes are preserved}
+\label{fig:shortcap}
+\end{figure}
+}
+
+\hypertarget{limitations}{%
+\section{Limitations}\label{limitations}}
+
+\begin{itemize}
+\tightlist
+\item
+ The filter will process the \texttt{short-caption} attribute value as
+ pandoc markdown, regardless of the input format.
+\item
+ It does not work for tables and listings yet.
+\item
+ But it works with pandoc-crossref, regardless of the order of
+ application.
+\end{itemize}
diff --git a/paper/lua-filters/short-captions/fig.pdf b/paper/lua-filters/short-captions/fig.pdf
new file mode 100644
index 0000000..cac7f39
--- /dev/null
+++ b/paper/lua-filters/short-captions/fig.pdf
Binary files differ
diff --git a/paper/lua-filters/short-captions/short-captions.lua b/paper/lua-filters/short-captions/short-captions.lua
new file mode 100644
index 0000000..9aaf309
--- /dev/null
+++ b/paper/lua-filters/short-captions/short-captions.lua
@@ -0,0 +1,37 @@
+if FORMAT ~= "latex" then
+ return
+end
+
+local function latex(str)
+ return pandoc.RawInline('latex', str)
+end
+
+function figure_image (elem)
+ local image = elem.content and elem.content[1]
+ return (image.t == 'Image' and image.title == 'fig:')
+ and image
+ or nil
+end
+
+function Para (para)
+ local img = figure_image(para)
+ if not img or not img.caption or not img.attributes['short-caption'] then
+ return nil
+ end
+
+ local short_caption = pandoc.Span(
+ pandoc.read(img.attributes['short-caption']).blocks[1].c
+ )
+ local hypertarget = "{%%\n"
+ local label = "\n"
+ if img.identifier ~= img.title then
+ hypertarget = string.format("\\hypertarget{%s}{%%\n",img.identifier)
+ label = string.format("\n\\label{%s}",img.identifier)
+ end
+ return pandoc.Para {
+ latex(hypertarget .. "\\begin{figure}\n\\centering\n"),
+ img,
+ latex("\n\\caption["), short_caption, latex("]"), pandoc.Span(img.caption),
+ latex(label .."\n\\end{figure}\n}\n")
+ }
+end
diff --git a/paper/lua-filters/spellcheck/Makefile b/paper/lua-filters/spellcheck/Makefile
new file mode 100644
index 0000000..9d51bff
--- /dev/null
+++ b/paper/lua-filters/spellcheck/Makefile
@@ -0,0 +1,2 @@
+test:
+ @pandoc --lua-filter=spellcheck.lua sample.md | sort | diff --strip-trailing-cr -u expected.txt -
diff --git a/paper/lua-filters/spellcheck/README.md b/paper/lua-filters/spellcheck/README.md
new file mode 100644
index 0000000..5f5d6a3
--- /dev/null
+++ b/paper/lua-filters/spellcheck/README.md
@@ -0,0 +1,42 @@
+# spellcheck
+
+This filter checks the spelling of words in the body of the
+document (omitting metadata). The external program `aspell` is
+used for the checking, and must be present in the path.
+
+Why use this instead of just running `aspell` on the
+document's source? Because this filter is sensitive to
+the semantics of the document in ways that `aspell` is
+not:
+
+- Material in code spans, raw HTML, URLs in links,
+ and math is not spell-checked, eliminating a big
+ class of false positives.
+
+- The filter is sensitive to the `lang` specified in
+ the document's metadata; this will be treated as the
+ default language for the document.
+
+- It is also sensitive to `lang` attributes on native
+ divs and spans. Thus, for example, in an English
+ document, `[chevaux]{lang=fr}` will not be registered
+ as a spelling error.
+
+To run it,
+
+ pandoc --lua-filter spellcheck.lua sample.md
+
+A list of misspelled words (or at any rate, words not
+in the appropriate dictionary) will be printed to stdout.
+If the word is in a div or span with a non-default `lang`
+attribute, the relevant language will be indicated in
+brackets after the word, separated by a tab.
+
+To add words to the list for a language, you can add files
+with names `.aspell.LANG.pws` in your home directory. Example:
+
+```
+% cat ~/.aspell.en.pws
+personal_ws-1.1 en 0
+goopy
+```
diff --git a/paper/lua-filters/spellcheck/expected.txt b/paper/lua-filters/spellcheck/expected.txt
new file mode 100644
index 0000000..dd973c8
--- /dev/null
+++ b/paper/lua-filters/spellcheck/expected.txt
@@ -0,0 +1,2 @@
+missspeling [en]
+summer
diff --git a/paper/lua-filters/spellcheck/sample.md b/paper/lua-filters/spellcheck/sample.md
new file mode 100644
index 0000000..31f7834
--- /dev/null
+++ b/paper/lua-filters/spellcheck/sample.md
@@ -0,0 +1,15 @@
+---
+lang: fr-FR
+...
+
+Ces sont des mots français.
+Mais pas summer.
+
+[This is a sentence in English,
+with one missspeling.]{lang=en}
+
+::: {lang=en}
+Here's a div in English.
+Code is ignored: `baoeuthasoe`{.nolang}.
+So are [URLs](http://example.com/notaword).
+:::
diff --git a/paper/lua-filters/spellcheck/spellcheck.lua b/paper/lua-filters/spellcheck/spellcheck.lua
new file mode 100644
index 0000000..85ae281
--- /dev/null
+++ b/paper/lua-filters/spellcheck/spellcheck.lua
@@ -0,0 +1,70 @@
+-- lua filter for spell checking: requires 'aspell'.
+-- Copyright (C) 2017-2019 John MacFarlane, released under MIT license
+
+local text = require('text')
+local words = {}
+local deflang
+
+local function add_to_dict(lang, t)
+ if not words[lang] then
+ words[lang] = {}
+ end
+ if not words[lang][t] then
+ words[lang][t] = (words[lang][t] or 0) + 1
+ end
+end
+
+local function get_deflang(meta)
+ deflang = (meta.lang and meta.lang[1] and meta.lang[1].c) or 'en'
+ -- the following is better but won't work in pandoc 2.0.6.
+ -- it requires pandoc commit ecc46e229fde934f163d1f646383d24bfe2039e1:
+ -- deflang = (meta.lang and pandoc.utils.stringify(meta.lang)) or 'en'
+ return {} -- eliminate meta so it doesn't get spellchecked
+end
+
+local function run_spellcheck(lang)
+ local keys = {}
+ local wordlist = words[lang]
+ for k,_ in pairs(wordlist) do
+ keys[#keys + 1] = k
+ end
+ local inp = table.concat(keys, '\n')
+ local outp = pandoc.pipe('aspell', {'list','-l',lang}, inp)
+ for w in string.gmatch(outp, "(%a*)\n") do
+ io.write(w)
+ if lang ~= deflang then
+ io.write("\t[" .. lang .. "]")
+ end
+ io.write("\n")
+ end
+end
+
+local function results(el)
+ pandoc.walk_block(pandoc.Div(el.blocks), {Str = function(e) add_to_dict(deflang, e.text) end})
+ for lang,v in pairs(words) do
+ run_spellcheck(lang)
+ end
+ os.exit(0)
+end
+
+local function checkstr(el)
+ add_to_dict(deflang, el.text)
+end
+
+local function checkspan(el)
+ local lang = el.attributes.lang
+ if not lang then return nil end
+ pandoc.walk_inline(el, {Str = function(e) add_to_dict(lang, e.text) end})
+ return {} -- remove span, so it doesn't get checked again
+end
+
+local function checkdiv(el)
+ local lang = el.attributes.lang
+ if not lang then return nil end
+ pandoc.walk_block(el, {Str = function(e) add_to_dict(lang, e.text) end})
+ return {} -- remove div, so it doesn't get checked again
+end
+
+return {{Meta = get_deflang},
+ {Div = checkdiv, Span = checkspan},
+ {Str = function(e) add_to_dict(deflang, e.text) end, Pandoc = results}}
diff --git a/paper/lua-filters/table-short-captions/Makefile b/paper/lua-filters/table-short-captions/Makefile
new file mode 100644
index 0000000..3df47b1
--- /dev/null
+++ b/paper/lua-filters/table-short-captions/Makefile
@@ -0,0 +1,24 @@
+LF = --lua-filter=table-short-captions.lua
+F = -F pandoc-crossref
+
+test: sample.md
+ @pandoc -s $(LF) -t native $< | \
+ diff -u expected-sample.native -
+
+test-with-crossref: sample.md
+ @pandoc -s $(LF) $(F) -t latex $< | \
+ diff -u expected-sample.tex -
+
+README.pdf: README.md
+ @pandoc $(LF) $(F) $< -o $@
+
+sample.tex: sample.md
+ @pandoc -s $(LF) $(F) -t latex $< -o $@
+
+sample.pdf: sample.md
+ @pandoc -s $(LF) $(F) -t latex $< -o $@
+
+clean:
+ rm -v *.aux *.dvi *.fdb_latexmk *.fls *.log *.lot *.ps *.pdf sample.tex | true
+
+.PHONY: test test-with-crossref clean
diff --git a/paper/lua-filters/table-short-captions/README.md b/paper/lua-filters/table-short-captions/README.md
new file mode 100644
index 0000000..853b809
--- /dev/null
+++ b/paper/lua-filters/table-short-captions/README.md
@@ -0,0 +1,66 @@
+---
+title: "table-short-captions.lua"
+---
+
+# Short captions in \LaTeX\ tables output
+
+For LaTeX output, this filter enables use of the attribute
+`short-caption` for tables. The attribute value will appear in the List
+of Tables.
+
+This filter also enables the class `.unlisted` for tables. This will
+prevent the table caption from appearing in the List of Tables.
+
+# Usage
+
+In Pandoc Markdown, you can add a caption to a table with
+
+ Table: This is the *italicised long caption* of my table, which has
+ a very long caption.
+
+If the document metadata includes `lot:true`, then the List of Tables
+will be inserted at the beginning of the document.
+
+The [pandoc-crossref](http://lierdakil.github.io/pandoc-crossref/)
+filter extends this, and enables you to specify a custom label for the
+table.
+
+ Table: This is the *italicised long caption* of my table, which has
+ a very long caption. {#tbl:full-of-juicy-data}
+
+This filter, when run _before_ pandoc-crossref, allows you to add short
+captions to the table as a `short-caption` attribute. What is between
+the quotes will be parsed as Markdown.
+
+**Important!:** You _must_ use empty square brackets before the
+attributes tag.
+
+ Table: This is the *italicised long caption* of my table, which has
+ a very long caption.
+ []{#tbl:full-of-juicy-data short-caption="Short caption for *juicy* data table."}
+
+Alternatively, if you wish to create a table which is unlisted in the
+List of Tables, you can use the `.unlisted` class in the attributes tag.
+
+ Table: This is the *italicised long caption* of my table, which will
+ not appear in the List of Tables. []{#tbl:full-of-juicy-data .unlisted}
+
+This filter should prove useful for students writing dissertations, who
+often have to include a List of Tables in the front matter, but where
+table captions themselves can be quite lengthy.
+
+ pandoc --lua-filter=table-short-captions.lua \
+ --filter pandoc-crossref \
+ article.md -o article.tex
+
+ pandoc --lua-filter=table-short-captions.lua \
+ --filter pandoc-crossref \
+ article.md -o article.pdf
+
+
+# Limitations
+
+- The filter will process the `short-caption` attribute value as pandoc
+ markdown, regardless of the input format.
+- pandoc-crossref should be run after it.
+- I have only tested this from a Markdown source.
diff --git a/paper/lua-filters/table-short-captions/expected-sample.native b/paper/lua-filters/table-short-captions/expected-sample.native
new file mode 100644
index 0000000..c387ebe
--- /dev/null
+++ b/paper/lua-filters/table-short-captions/expected-sample.native
@@ -0,0 +1,68 @@
+Pandoc (Meta {unMeta = fromList [("lot",MetaBool True),("title",MetaInlines [Str "Tests",Space,Str "for",Space,Str "table-short-captions.lua"])]})
+[Para [Str "These",Space,Str "tests",Space,Str "are",Space,Str "written",Space,Str "so",Space,Str "that",Space,Str "if",Space,Strong [Str "bold",Space,Str "font"],Space,Str "appears",Space,Str "in",Space,Str "the",Space,Str "LOT,",Space,Str "something",Space,Str "is",Space,Str "wrong."]
+,Para [Str "The",Space,Str "tests",Space,Str "are",Space,Str "split",Space,Str "into",Space,Str "two:",Space,Str "expected",Space,Str "uses,",Space,Str "and",Space,Str "non-standard",Space,Str "uses/errors.",LineBreak,Str "The",Space,Str "non-standard",Space,Str "uses",Space,Str "are",Space,Str "presented",Space,Str "in",Space,Str "this",Space,Str "document",Space,Str "for",Space,Str "troubleshooting",Space,Str "purposes,",Space,Str "and",Space,Str "to",Space,Str "ensure",Space,Str "the",Space,Str "filter",Space,Str "doesn\8217t",Space,Str "crash",Space,Str "in",Space,Str "corner",Space,Str "cases."]
+,Header 1 ("standard-usage",[],[]) [Str "Standard",Space,Str "usage"]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl1,",Space,Str "which",Space,Str "does",Space,Str "not",Space,Str "have",Space,Str "a",Space,Str "label."] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl2,",Space,Str "in",Space,Str "standard",Space,Code ("",[],[]) "pandoc-crossref",Space,Str "form.",Space,Str "{#tbl:tbl-label2}"] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl3,",Space,Str "which",Space,Str "is",Space,Strong [Str "unlisted"],Str ".",Space,Span ("tbl:tbl-label3",["unlisted"],[]) []] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl4,",Space,Str "which",Space,Str "has",Space,Str "an",Space,Strong [Str "overriding"],Space,Str "short-caption.",Space,Str "This",Space,Str "is",Space,Str "the",Space,Str "expected",Space,Str "usage.",Space,Span ("tbl:tbl-label4",[],[("short-caption","Table 4 *short* capt.")]) []] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]
+,Header 1 ("non-standard-usageerrors",[],[]) [Str "Non-standard",Space,Str "usage/errors"]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl5,",Space,Str "which",Space,Str "does",Space,Str "not",Space,Str "have",Space,Str "a",Space,Str "label,",Space,Str "but",Space,Str "does",Space,Str "have",Space,Str "empty",Space,Str "braces",Space,Str "at",Space,Str "the",Space,Str "end.",Space,Str "{}"] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl6,",Space,Str "which",Space,Str "does",Space,Str "not",Space,Str "have",Space,Str "a",Space,Str "label,",Space,Str "but",Space,Str "does",Space,Str "have",Space,Str "an",Space,Str "empty",Space,Str "span",Space,Str "at",Space,Str "the",Space,Str "end.",Space,Span ("",[],[]) []] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl7,",Space,Str "which",Space,Str "is",Space,Str "improperly",Space,Str "formatted,",Space,Str "and",Space,Str "will",Space,Str "appear",Space,Str "in",Space,Str "the",Space,Str "list",Space,Str "of",Space,Str "tables.",Space,Str "This",Space,Str "filter",Space,Str "requires",Space,Str "that",Space,Code ("",[],[]) ".unlisted",Space,Str "is",Space,Str "placed",Space,Str "in",Space,Str "a",Space,Str "span.",Space,Str "{#tbl:tbl-label7",Space,Str ".unlisted}"] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl8,",Space,Str "which",Space,Str "has",Space,Str "an",Space,Str "empty",Space,Str "short-caption.",Space,Str "An",Space,Str "empty",Space,Str "short-caption",Space,Str "does",Space,Str "nothing.",Space,Str "The",Space,Str "long",Space,Str "caption",Space,Str "will",Space,Str "still",Space,Str "be",Space,Str "used.",Space,Span ("tbl:tbl-label8",[],[("short-caption","")]) []] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]
+,Table [Str "This",Space,Str "is",Space,Str "the",Space,Emph [Str "italicised",Space,Str "long",Space,Str "caption"],Space,Str "of",Space,Str "tbl9,",Space,Str "which",Space,Str "is",Space,Strong [Str "unlisted"],Str ",",Space,Str "yet",Space,Str "has",Space,Str "a",Space,Str "short-caption.",Space,Span ("tbl:tbl-label9",["unlisted"],[("short-caption","Table 9 **unlisted** *short* capt.")]) []] [AlignDefault,AlignDefault] [0.0,0.0]
+ [[Plain [Str "cola"]]
+ ,[Plain [Str "colb"]]]
+ [[[Plain [Str "a1"]]
+ ,[Plain [Str "b1"]]]
+ ,[[Plain [Str "a2"]]
+ ,[Plain [Str "b2"]]]]]
diff --git a/paper/lua-filters/table-short-captions/expected-sample.tex b/paper/lua-filters/table-short-captions/expected-sample.tex
new file mode 100644
index 0000000..65a2073
--- /dev/null
+++ b/paper/lua-filters/table-short-captions/expected-sample.tex
@@ -0,0 +1,291 @@
+% Options for packages loaded elsewhere
+\PassOptionsToPackage{unicode=true}{hyperref}
+\PassOptionsToPackage{hyphens}{url}
+%
+\documentclass[
+]{article}
+\usepackage{lmodern}
+\usepackage{amssymb,amsmath}
+\usepackage{ifxetex,ifluatex}
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \usepackage[T1]{fontenc}
+ \usepackage[utf8]{inputenc}
+ \usepackage{textcomp} % provides euro and other symbols
+\else % if luatex or xelatex
+ \usepackage{unicode-math}
+ \defaultfontfeatures{Scale=MatchLowercase}
+ \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
+\fi
+% Use upquote if available, for straight quotes in verbatim environments
+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
+\IfFileExists{microtype.sty}{% use microtype if available
+ \usepackage[]{microtype}
+ \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
+}{}
+\makeatletter
+\@ifundefined{KOMAClassName}{% if non-KOMA class
+ \IfFileExists{parskip.sty}{%
+ \usepackage{parskip}
+ }{% else
+ \setlength{\parindent}{0pt}
+ \setlength{\parskip}{6pt plus 2pt minus 1pt}}
+}{% if KOMA class
+ \KOMAoptions{parskip=half}}
+\makeatother
+\usepackage{xcolor}
+\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
+\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
+\hypersetup{
+ pdftitle={Tests for table-short-captions.lua},
+ hidelinks,
+}
+\urlstyle{same} % disable monospaced font for URLs
+\usepackage{longtable,booktabs}
+% Allow footnotes in longtable head/foot
+\IfFileExists{footnotehyper.sty}{\usepackage{footnotehyper}}{\usepackage{footnote}}
+\makesavenoteenv{longtable}
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+\providecommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+\setcounter{secnumdepth}{-\maxdimen} % remove section numbering
+% Redefines (sub)paragraphs to behave more like sections
+\ifx\paragraph\undefined\else
+ \let\oldparagraph\paragraph
+ \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
+\fi
+\ifx\subparagraph\undefined\else
+ \let\oldsubparagraph\subparagraph
+ \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
+\fi
+
+% Set default figure placement to htbp
+\makeatletter
+\def\fps@figure{htbp}
+\makeatother
+
+% -- begin:latex-table-short-captions --
+\makeatletter\AtBeginDocument{%
+\def\LT@c@ption#1[#2]#3{% % Overwrite the workhorse macro used in formatting a longtable caption.
+ \LT@makecaption#1\fnum@table{#3}%
+ \ifdefined\pandoctableshortcapt % If pandoctableshortcapt is defined (even if blank), we should override default behaviour.
+ \let\@tempa\pandoctableshortcapt% % (Use let, we don't want to expand pandoctableshortcapt!)
+ \else % If not, fall back to default behaviour
+ \def\@tempa{#2}% % (Use the argument in square brackets)
+ \fi
+ \ifx\@tempa\@empty\else % If @tempa is blank, no lot entry! Otherwise, @tempa becomes the lot title.
+ {\let\\\space
+ \addcontentsline{lot}{table}{\protect\numberline{\thetable}{\@tempa}}}%
+ \fi}
+}\makeatother
+% -- end:latex-table-short-captions --
+\makeatletter
+\@ifpackageloaded{subfig}{}{\usepackage{subfig}}
+\@ifpackageloaded{caption}{}{\usepackage{caption}}
+\captionsetup[subfloat]{margin=0.5em}
+\AtBeginDocument{%
+\renewcommand*\figurename{Figure}
+\renewcommand*\tablename{Table}
+}
+\AtBeginDocument{%
+\renewcommand*\listfigurename{List of Figures}
+\renewcommand*\listtablename{List of Tables}
+}
+\@ifpackageloaded{float}{}{\usepackage{float}}
+\floatstyle{ruled}
+\@ifundefined{c@chapter}{\newfloat{codelisting}{h}{lop}}{\newfloat{codelisting}{h}{lop}[chapter]}
+\floatname{codelisting}{Listing}
+\newcommand*\listoflistings{\listof{codelisting}{List of Listings}}
+\makeatother
+
+\title{Tests for table-short-captions.lua}
+\date{}
+
+\begin{document}
+\maketitle
+
+\listoftables
+These tests are written so that if \textbf{bold font} appears in the
+LOT, something is wrong.
+
+The tests are split into two: expected uses, and non-standard
+uses/errors.\\
+The non-standard uses are presented in this document for troubleshooting
+purposes, and to ensure the filter doesn't crash in corner cases.
+
+\hypertarget{standard-usage}{%
+\section{Standard usage}\label{standard-usage}}
+
+\begin{longtable}[]{@{}ll@{}}
+\caption{This is the \emph{italicised long caption} of tbl1, which does
+not have a label.}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\hypertarget{tbl:tbl-label2}{}
+\begin{longtable}[]{@{}ll@{}}
+\caption{\label{tbl:tbl-label2}This is the \emph{italicised long
+caption} of tbl2, in standard \texttt{pandoc-crossref}
+form.}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\def\pandoctableshortcapt{} % .unlisted
+
+\hypertarget{tbl:tbl-label3}{}
+\begin{longtable}[]{@{}ll@{}}
+\caption{\label{tbl:tbl-label3}This is the \emph{italicised long
+caption} of tbl3, which is \textbf{unlisted}.}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\undef\pandoctableshortcapt
+
+\def\pandoctableshortcapt{Table 4 \emph{short} capt.}
+
+\hypertarget{tbl:tbl-label4}{}
+\begin{longtable}[]{@{}ll@{}}
+\caption{\label{tbl:tbl-label4}This is the \emph{italicised long
+caption} of tbl4, which has an \textbf{overriding} short-caption. This
+is the expected usage.}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\undef\pandoctableshortcapt
+
+\hypertarget{non-standard-usageerrors}{%
+\section{Non-standard usage/errors}\label{non-standard-usageerrors}}
+
+\begin{longtable}[]{@{}ll@{}}
+\caption{This is the \emph{italicised long caption} of tbl5, which does
+not have a label, but does have empty braces at the end.
+\{\}}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\begin{longtable}[]{@{}ll@{}}
+\caption{This is the \emph{italicised long caption} of tbl6, which does
+not have a label, but does have an empty span at the end.
+}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\begin{longtable}[]{@{}ll@{}}
+\caption{This is the \emph{italicised long caption} of tbl7, which is
+improperly formatted, and will appear in the list of tables. This filter
+requires that \texttt{.unlisted} is placed in a span. \{\#tbl:tbl-label7
+.unlisted\}}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\hypertarget{tbl:tbl-label8}{}
+\begin{longtable}[]{@{}ll@{}}
+\caption{\label{tbl:tbl-label8}This is the \emph{italicised long
+caption} of tbl8, which has an empty short-caption. An empty
+short-caption does nothing. The long caption will still be
+used.}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\def\pandoctableshortcapt{} % .unlisted
+
+\hypertarget{tbl:tbl-label9}{}
+\begin{longtable}[]{@{}ll@{}}
+\caption{\label{tbl:tbl-label9}This is the \emph{italicised long
+caption} of tbl9, which is \textbf{unlisted}, yet has a
+short-caption.}\tabularnewline
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endfirsthead
+\toprule
+cola & colb\tabularnewline
+\midrule
+\endhead
+a1 & b1\tabularnewline
+a2 & b2\tabularnewline
+\bottomrule
+\end{longtable}
+
+\undef\pandoctableshortcapt
+
+\end{document}
diff --git a/paper/lua-filters/table-short-captions/sample.md b/paper/lua-filters/table-short-captions/sample.md
new file mode 100644
index 0000000..74c27fb
--- /dev/null
+++ b/paper/lua-filters/table-short-captions/sample.md
@@ -0,0 +1,84 @@
+---
+title: "Tests for table-short-captions.lua"
+lot: true
+---
+
+These tests are written so that if **bold font** appears in the LOT, something is wrong.
+
+The tests are split into two: expected uses, and non-standard uses/errors.
+The non-standard uses are presented in this document for troubleshooting purposes, and to ensure the filter doesn't crash in corner cases.
+
+# Standard usage
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl1, which does not have a label.
+
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl2, in standard `pandoc-crossref` form. {#tbl:tbl-label2}
+
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl3, which is **unlisted**. []{#tbl:tbl-label3 .unlisted}
+
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl4, which has an **overriding** short-caption. This is the expected usage. []{#tbl:tbl-label4 short-caption="Table 4 *short* capt."}
+
+
+# Non-standard usage/errors
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl5, which does not have a label, but does have empty braces at the end. {}
+
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl6, which does not have a label, but does have an empty span at the end. []{}
+
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl7, which is improperly formatted, and will appear in the list of tables. This filter requires that `.unlisted` is placed in a span. {#tbl:tbl-label7 .unlisted}
+
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl8, which has an empty short-caption. An empty short-caption does nothing. The long caption will still be used. []{#tbl:tbl-label8 short-caption=""}
+
+
+| cola | colb |
+| ---- | ---- |
+| a1 | b1 |
+| a2 | b2 |
+
+Table: This is the *italicised long caption* of tbl9, which is **unlisted**, yet has a short-caption. []{#tbl:tbl-label9 .unlisted short-caption="Table 9 **unlisted** *short* capt."}
diff --git a/paper/lua-filters/table-short-captions/table-short-captions.lua b/paper/lua-filters/table-short-captions/table-short-captions.lua
new file mode 100644
index 0000000..6f4970b
--- /dev/null
+++ b/paper/lua-filters/table-short-captions/table-short-captions.lua
@@ -0,0 +1,160 @@
+---LaTeXTableShortCapts – enable `.unlisted` and `short-caption=""` properties
+-- for Pandoc conversion to LaTeX
+
+--[[
+Copyright (c) 2019 Blake Riley
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+]]
+local List = require 'pandoc.List'
+
+-- don't do anything unless we target latex
+if FORMAT ~= "latex" then
+ return {}
+end
+
+--- Code for injection into the LaTeX header,
+-- to overwrite a macro in longtable captions.
+longtable_caption_mod = [[
+% -- begin:latex-table-short-captions --
+\makeatletter\AtBeginDocument{%
+\def\LT@c@ption#1[#2]#3{% % Overwrite the workhorse macro used in formatting a longtable caption.
+ \LT@makecaption#1\fnum@table{#3}%
+ \@ifundefined{pandoctableshortcapt}
+ {\def\@tempa{#2}} % Use default behaviour: argument in square brackets
+ {\let\@tempa\pandoctableshortcapt} % If defined (even if blank), use to override
+ \ifx\@tempa\@empty\else % If @tempa is blank, no lot entry! Otherwise, @tempa becomes the lot title.
+ {\let\\\space
+ \addcontentsline{lot}{table}{\protect\numberline{\thetable}{\@tempa}}}%
+ \fi}
+}\makeatother
+% -- end:latex-table-short-captions --
+]]
+
+--- Creates a def shortcaption block to be placed before the table
+-- @tparam ?string sc : The short-caption property value
+-- @treturn Plain : The def shortcaption block
+local function defshortcapt(sc)
+ local scblock = List:new{}
+ scblock:extend {pandoc.RawInline('tex', "\\def\\pandoctableshortcapt{")}
+ if sc then
+ scblock:extend (pandoc.read(sc).blocks[1].c)
+ end
+ scblock:extend {pandoc.RawInline('tex', "}")}
+ if not sc then
+ scblock:extend {pandoc.RawInline('tex', " % .unlisted")}
+ end
+ return pandoc.Plain(scblock)
+end
+
+--- The undef shortcaption block to be placed after the table
+local undefshortcapt = pandoc.RawBlock('tex', "\\let\\pandoctableshortcapt\\relax")
+
+--- Parses a mock "Table Attr".
+-- We use the Attr of an empty Span as if it were Table Attr.
+-- This function extracts what is needed to build a short-caption.
+-- @tparam Attr attr : The Attr of the property Span in the table caption
+-- @treturn ?string : The identifier
+-- @treturn ?string : The "short-caption" property, if present.
+-- @treturn bool : Whether ".unlisted" appeared in the classes
+local function parse_table_attrs(attr)
+ -- Find label
+ local label = nil
+ if attr.identifier and (#attr.identifier > 0) then
+ label = attr.identifier
+ end
+
+ -- Look for ".unlisted" in classes
+ local unlisted = false
+ if attr.classes:includes("unlisted") then
+ unlisted = true
+ end
+
+ -- If not unlisted, then find the property short-caption.
+ local short_caption = nil
+ if not unlisted then
+ if (attr.attributes["short-caption"]) and
+ (#attr.attributes["short-caption"] > 0) then
+ short_caption = attr.attributes['short-caption']
+ end
+ end
+
+ return label, short_caption, unlisted
+end
+
+--- Wraps a table with shortcaption code
+-- @tparam Table tbl : The table with {}-wrapped properties in the caption
+-- @treturn List[Blocks] : The table with {label} in the caption,
+-- optionally wrapped in shortcaption code
+function rewrite_longtable_caption(tbl)
+ -- Escape if there is no caption present.
+ if not tbl.caption then
+ return nil
+ end
+
+ -- Try find the properties block
+ local is_properties_span = function (inl)
+ return (inl.t) and (inl.t == "Span") -- is span
+ and (inl.content) and (#inl.content == 0) -- is empty span
+ end
+ local propspan, idx = tbl.caption:find_if(is_properties_span)
+
+ -- If we couldn't find properties, escape.
+ if not propspan then
+ return nil
+ end
+
+ -- Otherwise, parse it all
+ local label, short_caption, unlisted = parse_table_attrs(propspan.attr)
+
+ -- Excise the span from the caption
+ tbl.caption[idx] = nil
+
+ -- Put label back into caption for pandoc-crossref
+ if label then
+ tbl.caption:extend {pandoc.Str("{#"..label.."}")}
+ end
+
+ -- Place new table
+ local result = List:new{}
+ if short_caption or unlisted then
+ result:extend {defshortcapt(short_caption)}
+ end
+ result:extend {tbl}
+ if short_caption or unlisted then
+ result:extend {undefshortcapt}
+ end
+ return result
+end
+
+--- Inserts longtable_caption_mod into the header_includes
+-- @tparam Meta meta : The document metadata
+-- @treturn Meta : The document metadata, with replacement LaTeX macro
+-- in header_includes
+function add_longtable_caption_mod(meta)
+ local header_includes = -- test ? a : b
+ (meta['header-includes'] and meta['header-includes'].t == 'MetaList')
+ and meta['header-includes']
+ or pandoc.MetaList{meta['header-includes']}
+ header_includes[#header_includes + 1] =
+ pandoc.MetaBlocks{pandoc.RawBlock('tex', longtable_caption_mod)}
+ meta['header-includes'] = header_includes
+ return meta
+end
+
+return {
+ {
+ Meta = add_longtable_caption_mod,
+ Table = rewrite_longtable_caption,
+ }
+}
diff --git a/paper/lua-filters/track-changes/.gitignore b/paper/lua-filters/track-changes/.gitignore
new file mode 100644
index 0000000..5fdf006
--- /dev/null
+++ b/paper/lua-filters/track-changes/.gitignore
@@ -0,0 +1,2 @@
+/sample.docx
+/sample.pdf
diff --git a/paper/lua-filters/track-changes/Makefile b/paper/lua-filters/track-changes/Makefile
new file mode 100644
index 0000000..990450e
--- /dev/null
+++ b/paper/lua-filters/track-changes/Makefile
@@ -0,0 +1,26 @@
+.PHONY: test clean
+
+## PENDING: ensure that LaTeX output can be compiled to PDF.
+test: sample.md test-track-changes.sh sample.pdf
+ @pandoc -t markdown --wrap=preserve \
+ --lua-filter=track-changes.lua sample.md | \
+ diff --strip-trailing-cr -u - expected_accept.markdown
+ @pandoc -t markdown --wrap=preserve --track-changes=reject \
+ -M trackChanges:reject --lua-filter=track-changes.lua sample.md | \
+ diff --strip-trailing-cr -u - expected_reject.markdown
+ @pandoc -s -t html --wrap=preserve --track-changes=all \
+ -M trackChanges:all --lua-filter=track-changes.lua sample.md | \
+ diff --strip-trailing-cr -u - expected_draft.html
+ @pandoc -M trackChanges:all --track-changes=all --wrap=preserve \
+ --to=latex --lua-filter=track-changes.lua \
+ --standalone sample.md | \
+ sh test-track-changes.sh
+ @rm sample.pdf
+
+sample.pdf: sample.md track-changes.lua
+ @pandoc -M trackChanges:all --track-changes=all \
+ --lua-filter=track-changes.lua \
+ --output $@ $<
+
+clean:
+ rm sample.pdf || true
diff --git a/paper/lua-filters/track-changes/README.md b/paper/lua-filters/track-changes/README.md
new file mode 100644
index 0000000..379b4ff
--- /dev/null
+++ b/paper/lua-filters/track-changes/README.md
@@ -0,0 +1,18 @@
+# Tracks changes in LaTeX and HTML or removes them in other output formats
+
+The Pandoc Docx reader and writer supports track changes of MS Word
+(command line parameter `--track-changes=accept|reject|all`).
+
+If `--track-changes=all` was used to read a docx file, track changes
+and/or comments are included in the AST as spans and are written to any
+other output formats than docx and clutters the output.
+
+This Lua filter addresses this problem by interpreting the parameter
+`--track-changes` (pandoc version >= 2.1.1) or the metadata variable
+`trackChanges: accept|reject|all` (set either in a YAML block or with
+`-M`) and accepts/rejects changes and removes comments for all output
+formats including docx. In case of `--track-changes=all` and for html
+and latex, it converts track changings and comments to appropriate
+commands (for LaTex provided by the [changes
+package](https://ctan.org/pkg/changes)) and tries to mimic the
+visualization as in MS Word.
diff --git a/paper/lua-filters/track-changes/TODO.md b/paper/lua-filters/track-changes/TODO.md
new file mode 100644
index 0000000..86290ec
--- /dev/null
+++ b/paper/lua-filters/track-changes/TODO.md
@@ -0,0 +1,18 @@
+# Ideas and ToDos
+
+- [ ] nested comments
+- [x] comments across paragraphs
+- [ ] implement `paragraph-insertion`, `paragraph-deletion`
+- [/] implement multiple classes (see https://github.com/jgm/pandoc/issues/4270#issuecomment-358996343)
+- [x] treat comments with multiple paragraphs (see [#4270](https://github.com/jgm/pandoc/issues/4270))
+- [x] track changes in chapter titles
+- [ ] combine Strs after acceptions/rejections
+- [ ] remove track changes from automatic section identifiers
+- [ ] track changes in captions (figure, table, etc.)
+- [ ] color comments with authors color
+- [x] docx sample
+- [x] `PANDOC_READER_OPTIONS.trackChanges`
+- [x] HTML support with `<ins>`, `<del>` (requested with jgm/pandoc#1560) and `<mark>` with title attribute or spans with CSS
+- [ ] HTML track changes decorations like explaind at [Comparing and contrasting ins, del, and s](http://html5doctor.com/ins-del-s) or https://github.com/jgm/pandoc/issues/2884#issuecomment-240263921
+- [ ] auto identifiers, be careful on nested/overlapping comments
+- [ ] citations in comment text \ No newline at end of file
diff --git a/paper/lua-filters/track-changes/expected_accept.markdown b/paper/lua-filters/track-changes/expected_accept.markdown
new file mode 100644
index 0000000..9207571
--- /dev/null
+++ b/paper/lua-filters/track-changes/expected_accept.markdown
@@ -0,0 +1,29 @@
+Track changes in LaTeX and HTML
+===============================
+
+A **simple** comment from me.
+
+This is a text with an *exciting* insertion.
+
+This is/was a text with a deletion.
+
+Here is the text to be moved.
+
+Here is a comment with nested changes.
+
+Here is a multi-line paragraph containing some text and a long deletion wrapping over two lines.
+
+This is a new paragraph.
+
+And so is this.
+
+One more.
+
+A *header* with a comment {#a-header-width-a-notecomment}
+=========================
+
+Some unmodified text ...
+
+\newpage
+
+... continued from previous page just to test page headers in supporting formats (LaTeX, DOCX, etc.).
diff --git a/paper/lua-filters/track-changes/expected_draft.html b/paper/lua-filters/track-changes/expected_draft.html
new file mode 100644
index 0000000..d5c3cc5
--- /dev/null
+++ b/paper/lua-filters/track-changes/expected_draft.html
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
+<head>
+ <meta charset="utf-8" />
+ <meta name="generator" content="pandoc" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
+ <title>Track changes in LaTeX and HTML</title>
+ <style>
+ code{white-space: pre-wrap;}
+ span.smallcaps{font-variant: small-caps;}
+ span.underline{text-decoration: underline;}
+ div.column{display: inline-block; vertical-align: top; width: 50%;}
+ </style>
+ <!--[if lt IE 9]>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+ <![endif]-->
+</head>
+<body>
+<header id="title-block-header">
+<h1 class="title">Track changes in LaTeX and HTML</h1>
+</header>
+<nav id="TOC" role="doc-toc">
+
+</nav>
+<h1 id="track-changes-in-latex-and-html">Track changes in LaTeX and HTML</h1>
+<p>A <mark data-author="Mathias C. Walter" date="2016-05-21T22:14:00Z" data-id="1" title="I agree!"><strong>simple</strong></mark> comment from me.</p>
+<p>This is a text with <ins data-author="MCW" date="2014-06-25T10:40:00Z">an exciting</ins> insertion.</p>
+<p>This is/was a text with a <del data-author="SWS" date="2014-06-25T10:42:00Z">short</del> deletion.</p>
+<p><ins data-author="FKA" date="2016-04-16T08:20:00Z">Here is the text to be moved.</ins></p>
+<p><del data-author="John F. Kennedy" date="2016-04-16T08:20:00Z">Here is the text to be moved.</del></p>
+<p>Here is a <mark data-author="JFK" date="2016-07-29T16:50:00Z" data-id="2" title="Why?">com<ins data-author="SWS" date="2016-07-29T16:50:00Z">m</ins>ent with nest<del data-author="FKA" date="2016-04-16T08:20:00Z">t</del>ed changes</mark>.</p>
+<p>Here is a multi-line paragraph containing some text and a long deletion <del data-author="MCW" date="2016-04-16T08:20:00Z">short insertion</del> wrapping over two lines.</p>
+<p>This is <mark data-author="MCW" date="2016-05-09T16:13:00Z" data-id="4" title="A comment across paragraphs.">a new paragraph.</p>
+<p>And so</mark> is this.</p>
+<p>One <mark data-author="Jesse Rosenthal" date="2016-05-09T16:14:00Z" data-id="5" title="This one has multiple paragraphs. &#10; &#10; See?">more</mark>.</p>
+<h1 id="a-header-width-a-notecomment">A <em>header</em> wi<del data-author="FKA" date="2018-03-02T23:07:00Z">d</del>th <ins data-author="JFK" date="2018-03-02T23:07:00Z">a</ins> <mark data-author="FKA" date="2017-08-24T22:14:00Z" data-id="3" title="Note">comment</mark></h1>
+<p>Some unmodified text …</p>
+
+<p>… continued from previous page just to test page headers in supporting formats (LaTeX, DOCX, etc.).</p>
+</body>
+</html>
diff --git a/paper/lua-filters/track-changes/expected_draft.tex b/paper/lua-filters/track-changes/expected_draft.tex
new file mode 100644
index 0000000..87ea1ac
--- /dev/null
+++ b/paper/lua-filters/track-changes/expected_draft.tex
@@ -0,0 +1,159 @@
+\PassOptionsToPackage{unicode=true}{hyperref} % options for packages loaded elsewhere
+\PassOptionsToPackage{hyphens}{url}
+%
+\documentclass[
+]{article}
+\usepackage{lmodern}
+\usepackage{amssymb,amsmath}
+\usepackage{ifxetex,ifluatex}
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \usepackage[T1]{fontenc}
+ \usepackage[utf8]{inputenc}
+ \usepackage{textcomp} % provides euro and other symbols
+\else % if luatex or xelatex
+ \usepackage{unicode-math}
+ \defaultfontfeatures{Scale=MatchLowercase}
+ \defaultfontfeatures[\rmfamily]{Ligatures=TeX,Scale=1}
+\fi
+% use upquote if available, for straight quotes in verbatim environments
+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
+\IfFileExists{microtype.sty}{% use microtype if available
+ \usepackage[]{microtype}
+ \UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
+}{}
+\makeatletter
+\@ifundefined{KOMAClassName}{% if non-KOMA class
+ \IfFileExists{parskip.sty}{%
+ \usepackage{parskip}
+ }{% else
+ \setlength{\parindent}{0pt}
+ \setlength{\parskip}{6pt plus 2pt minus 1pt}}
+}{% if KOMA class
+ \KOMAoptions{parskip=half}}
+\makeatother
+\usepackage{xcolor}
+\IfFileExists{xurl.sty}{\usepackage{xurl}}{} % add URL line breaks if available
+\IfFileExists{bookmark.sty}{\usepackage{bookmark}}{\usepackage{hyperref}}
+\hypersetup{
+ pdftitle={Track changes in LaTeX and HTML},
+ pdfborder={0 0 0},
+ breaklinks=true}
+\urlstyle{same} % don't use monospace font for urls
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+\providecommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+\setcounter{secnumdepth}{-2}
+% Redefines (sub)paragraphs to behave more like sections
+\ifx\paragraph\undefined\else
+ \let\oldparagraph\paragraph
+ \renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
+\fi
+\ifx\subparagraph\undefined\else
+ \let\oldsubparagraph\subparagraph
+ \renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
+\fi
+
+% set default figure placement to htbp
+\makeatletter
+\def\fps@figure{htbp}
+\makeatother
+
+\RequirePackage[debrief]{silence}
+\ErrorsOff
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\fancyhf{}
+\fancyhead[C]{\leftmark}
+\usepackage[markup=underlined,authormarkup=none]{changes}
+\definecolor{auth1}{HTML}{4477AA}
+\definecolor{auth2}{HTML}{117733}
+\definecolor{auth3}{HTML}{999933}
+\definecolor{auth4}{HTML}{CC6677}
+\definecolor{auth5}{HTML}{AA4499}
+\definecolor{auth6}{HTML}{332288}
+\usepackage[textsize=scriptsize]{todonotes}
+\setlength{\marginparwidth}{3cm}
+\makeatletter
+\setremarkmarkup{\todo[color=Changes@Color#1!20]{\sffamily\textbf{#1:}~#2}}
+\makeatother
+\newcommand{\note}[2][]{\added[#1,remark={#2}]{}}
+\newcommand\hlnotesingle{%
+ \bgroup
+ \expandafter\def\csname sout\space\endcsname{\bgroup \ULdepth =-.8ex \ULset}%
+ \markoverwith{\textcolor{yellow}{\rule[-.5ex]{.1pt}{2.5ex}}}%
+ \ULon}
+\newcommand\hlnote[1]{\let\helpcmd\hlnotesingle\parhelp#1\par\relax\relax}
+\long\def\parhelp#1\par#2\relax{%
+ \helpcmd{#1}\ifx\relax#2\else\par\parhelp#2\relax\fi%
+}
+
+\makeatletter
+\newcommand\ifmoving{%
+ \ifx\protect\@unexpandable@protect
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+
+\newcommand{\gobbletwo}[2][]{\@bsphack\@esphack}
+\newcommand{\gobbleone}[1][]{\@bsphack\@esphack}
+
+\let\oldadded\added
+\let\olddeleted\deleted
+\let\oldhlnote\hlnote
+\let\oldnote\note
+\renewcommand{\added}{\ifmoving{\gobbleone}{\oldadded}}
+\renewcommand{\deleted}{\ifmoving{\gobbletwo}{\olddeleted}}
+\renewcommand{\hlnote}{\ifmoving{}{\oldhlnote}}
+\renewcommand{\note}{\ifmoving{\gobbletwo}{\oldnote}}
+\makeatother
+\definechangesauthor[name={FKA}, color=auth1]{FKA}
+\definechangesauthor[name={JFK}, color=auth2]{JFK}
+\definechangesauthor[name={Jesse Rosenthal}, color=auth3]{JR}
+\definechangesauthor[name={MCW}, color=auth4]{MCW}
+\definechangesauthor[name={SWS}, color=auth5]{SWS}
+
+\title{Track changes in LaTeX and HTML}
+\date{}
+
+\begin{document}
+\maketitle
+
+{
+\setcounter{tocdepth}{3}
+\tableofcontents
+}
+\hypertarget{track-changes-in-latex-and-html}{%
+\section{Track changes in LaTeX and HTML}\label{track-changes-in-latex-and-html}}
+
+A \note[id=MCW]{I agree!}\hlnote{\textbf{simple}} comment from me.
+
+This is a text with \added[id=MCW]{an exciting} insertion.
+
+This is/was a text with a \deleted[id=SWS]{short} deletion.
+
+\added[id=FKA]{Here is the text to be moved.}
+
+\deleted[id=JFK]{Here is the text to be moved.}
+
+Here is a \note[id=JFK]{Why?}\hlnote{com\added[id=SWS]{m}ent with nest\deleted[id=FKA]{t}ed changes}.
+
+Here is a multi-line paragraph containing some text and a long deletion \deleted[id=MCW]{short insertion} wrapping over two lines.
+
+This is \note[id=MCW]{A comment across paragraphs.}\hlnote{a new paragraph.
+
+And so} is this.
+
+One \note[id=JR]{This one has multiple paragraphs. \newline \newline See?}\hlnote{more}.
+
+\hypertarget{a-header-width-a-notecomment}{%
+\section{\texorpdfstring{A \emph{header} wi\deleted[id=FKA]{d}th \added[id=JFK]{a} \note[id=FKA]{Note}\hlnote{comment}}{A header with comment}}\label{a-header-width-a-notecomment}}
+
+Some unmodified text \ldots{}
+
+\newpage
+
+\ldots{} continued from previous page just to test page headers in supporting formats (LaTeX, DOCX, etc.).
+
+\end{document}
diff --git a/paper/lua-filters/track-changes/expected_reject.markdown b/paper/lua-filters/track-changes/expected_reject.markdown
new file mode 100644
index 0000000..5059f34
--- /dev/null
+++ b/paper/lua-filters/track-changes/expected_reject.markdown
@@ -0,0 +1,29 @@
+Track changes in LaTeX and HTML
+===============================
+
+A **simple** comment from me.
+
+This is a text with insertion.
+
+This is/was a text with a *short* deletion.
+
+Here is the text to be moved.
+
+Here is a coment with nestted changes.
+
+Here is a multi-line paragraph containing some text and a long deletion short insertion wrapping over two lines.
+
+This is a new paragraph.
+
+And so is this.
+
+One more.
+
+A *header* width comment {#a-header-width-a-notecomment}
+========================
+
+Some unmodified text ...
+
+\newpage
+
+... continued from previous page just to test page headers in supporting formats (LaTeX, DOCX, etc.).
diff --git a/paper/lua-filters/track-changes/sample.md b/paper/lua-filters/track-changes/sample.md
new file mode 100644
index 0000000..42493ed
--- /dev/null
+++ b/paper/lua-filters/track-changes/sample.md
@@ -0,0 +1,43 @@
+---
+title: Track changes in LaTeX and HTML
+toc: true
+header-includes: |
+ ```{=latex}
+ \RequirePackage[debrief]{silence}
+ \ErrorsOff
+ \usepackage{fancyhdr}
+ \pagestyle{fancy}
+ \fancyhf{}
+ \fancyhead[C]{\leftmark}
+ ```
+...
+
+# Track changes in LaTeX and HTML
+
+A [I agree!]{.comment-start id="1" author="Mathias C. Walter" date="2016-05-21T22:14:00Z"}**simple**[]{.comment-end id="1"} comment from me.
+
+This is a text with [an *exciting*]{.insertion author="MCW" date="2014-06-25T10:40:00Z"} insertion.
+
+This is/was a text with a [*short*]{.deletion author="SWS" date="2014-06-25T10:42:00Z"} deletion.
+
+[Here is the text to be moved.]{.insertion author="FKA" date="2016-04-16T08:20:00Z"}
+
+[Here is the text to be moved.]{.deletion author="John F. Kennedy" date="2016-04-16T08:20:00Z"}
+
+Here is a [Why?]{.comment-start id="2" author="JFK" date="2016-07-29T16:50:00Z"}com[m]{.insertion author="SWS" date="2016-07-29T16:50:00Z"}ent with nest[t]{.deletion author="FKA" date="2016-04-16T08:20:00Z"}ed changes[]{.comment-end id="2"}.
+
+Here is a multi-line paragraph containing some text and a long deletion [short insertion]{.deletion author="MCW" date="2016-04-16T08:20:00Z"} wrapping over two lines.
+
+This is [A comment across paragraphs.]{.comment-start id="4" author="MCW" date="2016-05-09T16:13:00Z"}a new paragraph.
+
+And so[]{.comment-end id="4"} is this.
+
+One [This one has multiple paragraphs. ¶ ¶ See?]{.comment-start id="5" author="Jesse Rosenthal" date="2016-05-09T16:14:00Z"}more[]{.comment-end id="5"}.
+
+# A *header* wi[d]{.deletion author="FKA" date="2018-03-02T23:07:00Z"}th [a]{.insertion author="JFK" date="2018-03-02T23:07:00Z"} [Note]{.comment-start id="3" author="FKA" date="2017-08-24T22:14:00Z"}comment[]{.comment-end id="3"}
+
+Some unmodified text ...
+
+\newpage
+
+... continued from previous page just to test page headers in supporting formats (LaTeX, DOCX, etc.).
diff --git a/paper/lua-filters/track-changes/test-track-changes.sh b/paper/lua-filters/track-changes/test-track-changes.sh
new file mode 100644
index 0000000..b7074ef
--- /dev/null
+++ b/paper/lua-filters/track-changes/test-track-changes.sh
@@ -0,0 +1,25 @@
+#!/bin/sh
+
+latex_result="$(cat -)"
+
+assert_contains ()
+{
+ printf '%s' "$latex_result" | grep -qF "$1" -
+ if [ $? -ne 0 ]; then
+ printf 'Output does not contain `%s`.\n' "$1" >&2
+ exit 1
+ fi
+}
+
+# whether we are using the change package
+assert_contains <<EOF
+\usepackage{changes}
+EOF
+
+# Author colors
+assert_contains '\definechangesauthor[name={JFK}, color=auth2]{JFK}'
+
+# Additions, notes, and deletions
+assert_contains <<EOF
+Here is a \note[id=JFK]{Why?}\hlnote{com\added[id=SWS]{m}ent with nest\deleted[id=FKA]{t}ed changes}.
+EOF
diff --git a/paper/lua-filters/track-changes/track-changes.lua b/paper/lua-filters/track-changes/track-changes.lua
new file mode 100644
index 0000000..4c447ea
--- /dev/null
+++ b/paper/lua-filters/track-changes/track-changes.lua
@@ -0,0 +1,247 @@
+local authors = {}
+
+local function is_tex(format)
+ return format == 'latex' or format == 'tex' or format == 'context'
+end
+
+local function is_html (format)
+ return format == 'html' or format == 'html4' or format == 'html5'
+end
+
+local function is_wordprocessing (format)
+ return format == 'docx' or format == 'odt'
+end
+
+header_track_changes = [[
+
+\makeatletter
+\PassOptionsToPackage{textsize=scriptsize}{todonotes}
+\PassOptionsToPackage{markup=underlined,authormarkup=none,commentmarkup=todo}{changes}
+\usepackage{changes}
+\@ifpackagelater{changes}{2018/11/03}{%
+}{%
+ \usepackage{todonotes}
+ \setremarkmarkup{\todo[color=Changes@Color#1!20]{\sffamily\textbf{#1:}~#2}}
+}%
+\makeatother
+\definecolor{auth1}{HTML}{4477AA}
+\definecolor{auth2}{HTML}{117733}
+\definecolor{auth3}{HTML}{999933}
+\definecolor{auth4}{HTML}{CC6677}
+\definecolor{auth5}{HTML}{AA4499}
+\definecolor{auth6}{HTML}{332288}
+\setlength{\marginparwidth}{3cm}
+\newcommand{\note}[2][]{\added[#1,remark={#2}]{}}
+\newcommand\hlnotesingle{%
+ \bgroup
+ \expandafter\def\csname sout\space\endcsname{\bgroup \ULdepth =-.8ex \ULset}%
+ \markoverwith{\textcolor{yellow}{\rule[-.5ex]{.1pt}{2.5ex}}}%
+ \ULon}
+\newcommand\hlnote[1]{\let\helpcmd\hlnotesingle\parhelp#1\par\relax\relax}
+\long\def\parhelp#1\par#2\relax{%
+ \helpcmd{#1}\ifx\relax#2\else\par\parhelp#2\relax\fi%
+}
+
+\makeatletter
+\newcommand\ifmoving{%
+ \ifx\protect\@unexpandable@protect
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+
+\newcommand{\gobbletwo}[2][]{\@bsphack\@esphack}
+\newcommand{\gobbleone}[1][]{\@bsphack\@esphack}
+
+\let\oldadded\added
+\let\olddeleted\deleted
+\let\oldhlnote\hlnote
+\let\oldnote\note
+\renewcommand{\added}{\ifmoving{\gobbleone}{\oldadded}}
+\renewcommand{\deleted}{\ifmoving{\gobbletwo}{\olddeleted}}
+\renewcommand{\hlnote}{\ifmoving{}{\oldhlnote}}
+\renewcommand{\note}{\ifmoving{\gobbletwo}{\oldnote}}
+\makeatother
+]]
+
+local function initials(s)
+ local ignore = { -- list of words to ignore
+ ['dr'] = true, ['mr'] = true, ['ms'] = true, ['mrs'] = true, ['prof'] = true,
+ ['mx'] = true, ['sir'] = true,
+ }
+
+ local ans = {}
+ for w in s:gmatch '[%w\']+' do
+ if not ignore[w:lower()] then ans[#ans+1] = w:sub(1,1):upper() end
+ end
+ return table.concat(ans)
+end
+
+relinerHtml = {
+ Str = function (s)
+ if s.text == "¶" then
+ return pandoc.Str('&#10;')
+ end
+ end
+}
+
+relinerTex = {
+ Str = function (s)
+ if s.text == "¶" then
+ return pandoc.Str('\\newline')
+ end
+ end
+}
+
+reliner = {
+ Str = function (s)
+ if s.text == "¶" then
+ return pandoc.LineBreak()
+ end
+ end
+}
+
+function SpanReliner(elem)
+ local classes = elem.classes or elem.attr.classes
+ if classes:includes("comment-start") then
+ return pandoc.walk_inline(elem, reliner)
+ end
+end
+
+local toTex = {["comment-start"] = "\\note", insertion = "\\added", deletion = "\\deleted"}
+
+local function TrackingSpanToTex(elem)
+ if toTex[elem.classes[1]] ~= nil then
+ local author = elem.attributes.author
+ local inits = author:find' ' and initials(author) or author
+ authors[inits] = author
+ local s = toTex[elem.classes[1]] .. '[id=' .. inits .. ']{'
+ if elem.classes:includes("comment-start") then
+ s = s .. pandoc.utils.stringify(pandoc.walk_inline(elem, relinerTex)) .. '}\\hlnote{'
+ else
+ s = s .. pandoc.utils.stringify(elem.content) .. '}'
+ end
+ return pandoc.RawInline('latex', s)
+ elseif elem.classes:includes("comment-end") then
+ return pandoc.RawInline('latex', '}')
+ end
+end
+
+local function pairsByKeys(t, f)
+ local a = {}
+ for n in pairs(t) do table.insert(a, n) end
+ table.sort(a, f)
+ local i = 0
+ local iter = function ()
+ i = i + 1
+ return a[i], t[a[i]]
+ end
+ return iter
+end
+
+--- Add packages to the header includes.
+local function add_track_changes(meta)
+ local header_includes
+ if meta['header-includes'] and meta['header-includes'].t == 'MetaList' then
+ header_includes = meta['header-includes']
+ else
+ header_includes = pandoc.MetaList{meta['header-includes']}
+ end
+ header_includes[#header_includes + 1] =
+ pandoc.MetaBlocks{pandoc.RawBlock('latex', header_track_changes)}
+ local a = 1
+ for key,value in pairsByKeys(authors) do -- sorted author list; otherwise make test may fail
+ header_includes[#header_includes + 1] =
+ pandoc.MetaBlocks{pandoc.RawBlock('latex', '\\definechangesauthor[name={' .. value .. '}, color=auth' .. a .. ']{' .. key .. '}')}
+ a = a + 1
+ end
+ meta['header-includes'] = header_includes
+ return meta
+end
+
+local toHtml = {["comment-start"] = "mark", insertion = "ins", deletion = "del"}
+
+local function TrackingSpanToHtml(elem)
+ if toHtml[elem.classes[1]] ~= nil then
+ local author = elem.attributes.author
+ local inits = author:find' ' and initials(author) or author
+ authors[inits] = author
+ local s = '<' .. toHtml[elem.classes[1]]
+ for k,v in pairs(elem.attributes) do
+ local hattr = k
+ if hattr ~= 'date' then hattr = 'data-' .. hattr end
+ s = s .. ' ' .. hattr .. '="' .. v .. '"'
+ end
+ if elem.classes:includes("comment-start") then
+ if elem.identifier then
+ s = s .. ' data-id="' .. elem.identifier .. '"'
+ end
+ s = s .. ' title="' .. pandoc.utils.stringify(pandoc.walk_inline(elem, relinerHtml)) .. '">'
+ else
+ s = s .. '>' .. pandoc.utils.stringify(elem.content) .. '</' .. toHtml[elem.classes[1]] .. '>'
+ end
+ return pandoc.RawInline('html', s)
+ elseif elem.classes:includes("comment-end") then
+ return pandoc.RawInline('html', '</mark>')
+ end
+end
+
+local function SpanAcceptChanges(elem)
+ if elem.classes:includes("comment-start") or elem.classes:includes("comment-end") then
+ return {}
+ elseif elem.classes:includes("insertion") then
+ return elem.content
+ elseif elem.classes:includes("deletion") then
+ return {}
+ end
+end
+
+local function SpanRejectChanges(elem)
+ if elem.classes:includes("comment-start") or elem.classes:includes("comment-end") then
+ return {}
+ elseif elem.classes:includes("insertion") then
+ return {}
+ elseif elem.classes:includes("deletion") then
+ return elem.content
+ end
+end
+
+function Pandoc(doc)
+ local meta = doc.meta
+ local trackChangesOptions = {all = 'AllChanges', accept = 'AcceptChanges', reject = 'RejectChanges' }
+ local tc = meta and meta['trackChanges']
+ tc = type(meta['trackChanges']) == 'table' and pandoc.utils.stringify(meta['trackChanges']) or meta['trackChanges'] or 'accept'
+ local trackChanges = PANDOC_READER_OPTIONS and PANDOC_READER_OPTIONS.trackChanges or trackChangesOptions[tc]
+ meta.trackChanges = nil -- remove it from the matadata
+
+ local M = {}
+ if trackChanges == 'AllChanges' then
+ if is_html(FORMAT) then
+ M[#M + 1] = {
+ Span = TrackingSpanToHtml
+ }
+ elseif is_tex(FORMAT) then
+ M[#M + 1] = {
+ Span = TrackingSpanToTex,
+ }
+ elseif is_wordprocessing(FORMAT) then
+ M[#M + 1] = { Span = SpanReliner }
+ end
+ elseif trackChanges == 'RejectChanges' then
+ M[#M + 1] = { Span = SpanRejectChanges }
+ else -- otherwise assumes AcceptChanges
+ M[#M + 1] = { Span = SpanAcceptChanges }
+ end
+
+ if #M then
+ local blocks = doc.blocks
+ for i = 1, #M do
+ blocks = pandoc.walk_block(pandoc.Div(blocks), M[i]).content
+ end
+ if trackChanges == 'AllChanges' and is_tex(FORMAT) then
+ meta = add_track_changes(meta)
+ end
+ return pandoc.Pandoc(blocks, meta)
+ end
+end
diff --git a/paper/lua-filters/wordcount/Makefile b/paper/lua-filters/wordcount/Makefile
new file mode 100644
index 0000000..7dfba48
--- /dev/null
+++ b/paper/lua-filters/wordcount/Makefile
@@ -0,0 +1,2 @@
+test:
+ @pandoc --lua-filter=wordcount.lua sample.md | diff --strip-trailing-cr -u expected.txt -
diff --git a/paper/lua-filters/wordcount/README.md b/paper/lua-filters/wordcount/README.md
new file mode 100644
index 0000000..45efc2f
--- /dev/null
+++ b/paper/lua-filters/wordcount/README.md
@@ -0,0 +1,11 @@
+# wordcount
+
+This filter counts the words in the body of a document (omitting
+metadata like titles and abstracts), including words in code.
+It should be more accurate than `wc -w` run directly on a
+Markdown document, since the latter will count markup
+characters, like the `#` in front of an ATX header, or
+tags in HTML documents, as words.
+
+To run it, `pandoc --lua-filter wordcount.lua myfile.md`.
+The word count will be printed to stdout.
diff --git a/paper/lua-filters/wordcount/expected.txt b/paper/lua-filters/wordcount/expected.txt
new file mode 100644
index 0000000..dc608fc
--- /dev/null
+++ b/paper/lua-filters/wordcount/expected.txt
@@ -0,0 +1 @@
+15 words in body
diff --git a/paper/lua-filters/wordcount/sample.md b/paper/lua-filters/wordcount/sample.md
new file mode 100644
index 0000000..240bee0
--- /dev/null
+++ b/paper/lua-filters/wordcount/sample.md
@@ -0,0 +1,12 @@
+---
+title: Metadata words don't count
+abstract: ignored!
+---
+
+# Word count
+
+This document has *a **lot** of [words](url "title")* (15).[^1]
+
+ code is counted
+
+[^1]: Footnotes count.
diff --git a/paper/lua-filters/wordcount/wordcount.lua b/paper/lua-filters/wordcount/wordcount.lua
new file mode 100644
index 0000000..19aec11
--- /dev/null
+++ b/paper/lua-filters/wordcount/wordcount.lua
@@ -0,0 +1,29 @@
+-- counts words in a document
+
+words = 0
+
+wordcount = {
+ Str = function(el)
+ -- we don't count a word if it's entirely punctuation:
+ if el.text:match("%P") then
+ words = words + 1
+ end
+ end,
+
+ Code = function(el)
+ _,n = el.text:gsub("%S+","")
+ words = words + n
+ end,
+
+ CodeBlock = function(el)
+ _,n = el.text:gsub("%S+","")
+ words = words + n
+ end
+}
+
+function Pandoc(el)
+ -- skip metadata, just count body:
+ pandoc.walk_block(pandoc.Div(el.blocks), wordcount)
+ print(words .. " words in body")
+ os.exit(0)
+end
diff --git a/paper/media/image1.png b/paper/media/image1.png
new file mode 100644
index 0000000..2a61d5b
--- /dev/null
+++ b/paper/media/image1.png
Binary files differ
diff --git a/paper/media/image2.png b/paper/media/image2.png
new file mode 100644
index 0000000..3902872
--- /dev/null
+++ b/paper/media/image2.png
Binary files differ
diff --git a/paper/media/image3.png b/paper/media/image3.png
new file mode 100644
index 0000000..1045b7d
--- /dev/null
+++ b/paper/media/image3.png
Binary files differ
diff --git a/paper/media/image4.png b/paper/media/image4.png
new file mode 100644
index 0000000..0306b17
--- /dev/null
+++ b/paper/media/image4.png
Binary files differ
diff --git a/paper/media/image5.png b/paper/media/image5.png
new file mode 100644
index 0000000..f16264c
--- /dev/null
+++ b/paper/media/image5.png
Binary files differ
diff --git a/paper/media/image6.png b/paper/media/image6.png
new file mode 100644
index 0000000..7c9cf31
--- /dev/null
+++ b/paper/media/image6.png
Binary files differ
diff --git a/paper/media/image7.png b/paper/media/image7.png
new file mode 100644
index 0000000..8abda7f
--- /dev/null
+++ b/paper/media/image7.png
Binary files differ
diff --git a/paper/media/image8.png b/paper/media/image8.png
new file mode 100644
index 0000000..8e34c5c
--- /dev/null
+++ b/paper/media/image8.png
Binary files differ
diff --git a/paper/mutagenicity.md b/paper/mutagenicity.md
new file mode 100644
index 0000000..c316543
--- /dev/null
+++ b/paper/mutagenicity.md
@@ -0,0 +1,532 @@
+---
+title: A comparison of random forest, support vector machine, deep learning and lazar algorithms for predicting mutagenicity
+#subtitle: Performance comparison with a new expanded dataset
+author:
+ - Christoph Helma:
+ institute: ist
+ email: helma@in-silico.ch
+ correspondence: "yes"
+ - Verena Schöning:
+ institute: zeller
+ - Philipp Boss:
+ institute: zeller
+ - Jürgen Drewe:
+ institute: zeller
+institute:
+ - ist:
+ name: in silico toxicology gmbh
+ address: "Rastatterstrasse 41, 4057 Basel, Switzerland"
+ - zeller:
+ name: Zeller AG
+ address: "Seeblickstrasse 4, 8590 Romanshorn, Switzerland"
+bibliography: bibliography.bib
+keywords: mutagenicity, (Q)SAR, lazar, random forest, support vector machine, deep learning
+documentclass: scrartcl
+...
+
+Abstract
+========
+
+k-nearest neighbor (`lazar`), random forest, support vector machine and deep
+learning algorithms were applied to a new *Salmonella* mutagenicity dataset
+with 8281 unique chemical structures. Algorithm performance was evaluated
+using 5-fold crossvalidation.
+TODO
+- results
+- conclusion
+
+Introduction
+============
+
+TODO: algo history
+
+TODO: dataset history
+
+TODO: open problems
+
+The main objective of this study was
+
+ - to generate a new training dataset, by combining the most comprehensive public mutagenicity datasets
+ - to compare the performance of global models (RF, SVM, Neural Nets) with local models (`lazar`)
+
+Materials and Methods
+=====================
+
+Data
+----
+
+For all methods, the same training dataset was used. The
+training dataset was compiled from the following sources:
+
+- Kazius/Bursi Dataset (4337 compounds, @Kazius2005): <http://cheminformatics.org/datasets/bursi/cas_4337.zip>
+
+- Hansen Dataset (6513 compounds, @Hansen2009): <http://doc.ml.tu-berlin.de/toxbenchmark/Mutagenicity_N6512.csv>
+
+- EFSA Dataset (695 compounds): <https://data.europa.eu/euodp/data/storage/f/2017-0719T142131/GENOTOX%20data%20and%20dictionary.xls>
+
+Mutagenicity classifications from Kazius and Hansen datasets were used
+without further processing. To achieve consistency with these
+datasets, EFSA compounds were classified as mutagenic, if at least one
+positive result was found for TA98 or T100 Salmonella strains.
+
+Dataset merges were based on unique SMILES (*Simplified Molecular Input
+Line Entry Specification*) strings of the compound structures.
+Duplicated experimental data with the same outcome was merged into a
+single value, because it is likely that it originated from the same
+experiment. Contradictory results were kept as multiple measurements in
+the database. The combined training dataset contains 8281 unique
+structures.
+
+Source code for all data download, extraction and merge operations is
+publicly available from the git repository
+<https://git.in-silico.ch/mutagenicity-paper> under a GPL3 License.
+
+TODO: check/fix git repo
+
+Algorithms
+----------
+
+### `lazar`
+
+`lazar` (*lazy structure activity relationships*) is a modular framework
+for read-across model development and validation. It follows the
+following basic workflow: For a given chemical structure `lazar`:
+
+- searches in a database for similar structures (neighbours) with
+ experimental data,
+
+- builds a local QSAR model with these neighbours and
+
+- uses this model to predict the unknown activity of the query
+ compound.
+
+This procedure resembles an automated version of read across predictions
+in toxicology, in machine learning terms it would be classified as a
+k-nearest-neighbour algorithm.
+
+Apart from this basic workflow, `lazar` is completely modular and allows
+the researcher to use any algorithm for similarity searches and local
+QSAR (*Quantitative structure--activity relationship*) modelling.
+Algorithms used within this study are described in the following
+sections.
+
+#### Neighbour identification
+
+Similarity calculations were based on MolPrint2D fingerprints (@Bender2004) from the OpenBabel cheminformatics library
+(@OBoyle2011a). The MolPrint2D fingerprint uses
+atom environments as molecular representation, which resembles basically
+the chemical concept of functional groups. For each atom in a molecule,
+it represents the chemical environment using the atom types of connected
+atoms.
+
+MolPrint2D fingerprints are generated dynamically from chemical
+structures and do not rely on predefined lists of fragments (such as
+OpenBabel FP3, FP4 or MACCs fingerprints or lists of
+toxicophores/toxicophobes). This has the advantage that they may capture
+substructures of toxicological relevance that are not included in other
+fingerprints.
+
+From MolPrint2D fingerprints a feature vector with all atom environments
+of a compound can be constructed that can be used to calculate chemical
+similarities.
+
+The chemical similarity between two compounds a and b is expressed as
+the proportion between atom environments common in both structures A ∩ B
+and the total number of atom environments A U B (Jaccard/Tanimoto
+index).
+
+$$sim = \frac{\left| A\ \cap B \right|}{\left| A\ \cup B \right|}$$
+
+Threshold selection is a trade-off between prediction accuracy (high
+threshold) and the number of predictable compounds (low threshold). As
+it is in many practical cases desirable to make predictions even in the
+absence of closely related neighbours, we follow a tiered approach:
+
+- First a similarity threshold of 0.5 is used to collect neighbours,
+ to create a local QSAR model and to make a prediction for the query
+ compound.
+
+- If any of these steps fails, the procedure is repeated with a
+ similarity threshold of 0.2 and the prediction is flagged with a
+ warning that it might be out of the applicability domain of the
+ training data.
+
+- Similarity thresholds of 0.5 and 0.2 are the default values chosen
+ > by the software developers and remained unchanged during the
+ > course of these experiments.
+
+Compounds with the same structure as the query structure are
+automatically eliminated from neighbours to obtain unbiased predictions
+in the presence of duplicates.
+
+#### Local QSAR models and predictions
+
+Only similar compounds (neighbours) above the threshold are used for
+local QSAR models. In this investigation, we are using a weighted
+majority vote from the neighbour's experimental data for mutagenicity
+classifications. Probabilities for both classes
+(mutagenic/non-mutagenic) are calculated according to the following
+formula and the class with the higher probability is used as prediction
+outcome.
+
+$$p_{c} = \ \frac{\sum_{}^{}\text{sim}_{n,c}}{\sum_{}^{}\text{sim}_{n}}$$
+
+$p_{c}$ Probability of class c (e.g. mutagenic or non-mutagenic)\
+$\sum_{}^{}\text{sim}_{n,c}$ Sum of similarities of neighbours with
+class c\
+$\sum_{}^{}\text{sim}_{n}$ Sum of all neighbours
+
+#### Applicability domain
+
+The applicability domain (AD) of `lazar` models is determined by the
+structural diversity of the training data. If no similar compounds are
+found in the training data no predictions will be generated. Warnings
+are issued if the similarity threshold had to be lowered from 0.5 to 0.2
+in order to enable predictions. Predictions without warnings can be
+considered as close to the applicability domain and predictions with
+warnings as more distant from the applicability domain. Quantitative
+applicability domain information can be obtained from the similarities
+of individual neighbours.
+
+#### Availability
+
+- `lazar` experiments for this manuscript:
+ <https://git.in-silico.ch/mutagenicity-paper>
+ (source code, GPL3)
+
+- `lazar` framework:
+ <https://git.in-silico.ch/lazar>
+ (source code, GPL3)
+
+- `lazar` GUI:
+ <https://git.in-silico.ch/lazar-gui>
+ (source code, GPL3)
+
+- Public web interface:
+ <https://lazar.in-silico.ch>
+
+### Random Forest, Support Vector Machines, and Deep Learning in R-project
+
+For the Random Forest (RF), Support Vector Machines (SVM), and Deep
+Learning (DL) models, molecular descriptors were calculated
+with the PaDEL-Descriptors program (<http://www.yapcwsoft.com> version 2.21, @Yap2011).
+
+TODO: sentence ??
+
+From these descriptors were
+chosen, which were actually used for the generation of the DL model.
+
+
+In comparison to `lazar`, three other models (Random Forest (RF), Support
+Vector Machines (SVM), and Deep Learning (DL)) were evaluated.
+
+For the generation of these models, molecular 1D and 2D descriptors of
+the training dataset were calculated using PaDEL-Descriptors (<http://www.yapcwsoft.com> version
+2.21, @Yap2011).
+
+As the training dataset contained over 8280 instances, it was decided to
+delete instances with missing values during data pre-processing.
+Furthermore, substances with equivocal outcome were removed. The final
+training dataset contained 8080 instances with known mutagenic
+potential. The RF, SVM, and DL models were generated using the R
+software (R-project for Statistical Computing,
+<https://www.r-project.org/>*;* version 3.3.1), specific R packages used
+are identified for each step in the description below. During feature
+selection, descriptor with near zero variance were removed using
+'*NearZeroVar*'-function (package 'caret'). If the percentage of the
+most common value was more than 90% or when the frequency ratio of the
+most common value to the second most common value was greater than 95:5
+(e.g. 95 instances of the most common value and only 5 or less instances
+of the second most common value), a descriptor was classified as having
+a near zero variance. After that, highly correlated descriptors were
+removed using the '*findCorrelation*'-function (package 'caret') with a
+cut-off of 0.9. This resulted in a training dataset with 516
+descriptors. These descriptors were scaled to be in the range between 0
+and 1 using the '*preProcess*'-function (package 'caret'). The scaling
+routine was saved in order to apply the same scaling on the testing
+dataset. As these three steps did not consider the outcome, it was
+decided that they do not need to be included in the cross-validation of
+the model. To further reduce the number of features, a LASSO (*least
+absolute shrinkage and selection operator*) regression was performed
+using the '*glmnet*'-function (package '*glmnet*'). The reduced dataset
+was used for the generation of the pre-trained models.
+
+For the RF model, the '*randomForest*'-function (package
+'*randomForest*') was used. A forest with 1000 trees with maximal
+terminal nodes of 200 was grown for the prediction.
+
+The '*svm*'-function (package 'e1071') with a *radial basis function
+kernel* was used for the SVM model.
+
+The DL model was generated using the '*h2o.deeplearning*'-function
+(package '*h2o*'). The DL contained four hidden layer with 70, 50, 50,
+and 10 neurons, respectively. Other hyperparameter were set as follows:
+l1=1.0E-7, l2=1.0E-11, epsilon = 1.0E-10, rho = 0.8, and quantile\_alpha
+= 0.5. For all other hyperparameter, the default values were used.
+Weights and biases were in a first step determined with an unsupervised
+DL model. These values were then used for the actual, supervised DL
+model.
+
+To validate these models, an internal cross-validation approach was
+chosen. The training dataset was randomly split in training data, which
+contained 95% of the data, and validation data, which contain 5% of the
+data. A feature selection with LASSO on the training data was performed,
+reducing the number of descriptors to approximately 100. This step was
+repeated five times. Based on each of the five different training data,
+the predictive models were trained and the performance tested with the
+validation data. This step was repeated 10 times. Furthermore, a
+y-randomisation using the RF model was performed. During
+y-randomisation, the outcome (y-variable) is randomly permuted. The
+theory is that after randomisation of the outcome, the model should not
+be able to correlate the outcome to the properties (descriptor values)
+of the substances. The performance of the model should therefore
+indicate a by change prediction with an accuracy of about 50%. If this
+is true, it can be concluded that correlation between actual outcome and
+properties of the substances is real and not by chance (@Rücker2007).
+
+![](media/image1.png){width="6.26875in" height="5.486111111111111in"}
+
+Figure 1: Flowchart of the generation and validation of the models
+generated in R-project
+
+#### Applicability domain
+
+The AD of the training dataset and the PA dataset was evaluated using
+the Jaccard distance. A Jaccard distance of '0' indicates that the
+substances are similar, whereas a value of '1' shows that the substances
+are different. The Jaccard distance was below 0.2 for all PAs relative
+to the training dataset. Therefore, PA dataset is within the AD of the
+training dataset and the models can be used to predict the genotoxic
+potential of the PA dataset.
+
+#### y-randomisation
+
+After y-randomisation of the outcome, the accuracy and CCR are around
+50%, indicating a chance in the distribution of the results. This shows,
+that the outcome is actually related to the predictors and not by
+chance.
+
+### Deep Learning in TensorFlow
+
+Alternatively, a DL model was established with Python-based TensorFlow
+program (<https://www.tensorflow.org/>) using the high-level API Keras
+(<https://www.tensorflow.org/guide/keras>) to build the models.
+
+Data pre-processing was done by rank transformation using the
+'*QuantileTransformer*' procedure. A sequential model has been used.
+Four layers have been used: input layer, two hidden layers (with 12, 8
+and 8 nodes, respectively) and one output layer. For the output layer, a
+sigmoidal activation function and for all other layers the ReLU
+('*Rectified Linear Unit*') activation function was used. Additionally,
+a L^2^-penalty of 0.001 was used for the input layer. For training of
+the model, the ADAM algorithm was used to minimise the cross-entropy
+loss using the default parameters of Keras. Training was performed for
+100 epochs with a batch size of 64. The model was implemented with
+Python 3.6 and Keras. For training of the model, a 6-fold
+cross-validation was used. Accuracy was estimated by ROC-AUC and
+confusion matrix.
+
+Validation
+----------
+
+Results
+=======
+
+`lazar`
+-----
+
+Random Forest
+-------------
+
+The validation showed that the RF model has an accuracy of 64%, a
+sensitivity of 66% and a specificity of 63%. The confusion matrix of the
+model, calculated for 8080 instances, is provided in Table 1.
+
+Table 1: Confusion matrix of the RF model
+
+ Predicted genotoxicity
+ ----------------------- ------------------------ ---------- ---------- -------------
+ Measured genotoxicity ***PP*** ***PN*** ***Total***
+ ***TP*** 2274 1163 3437
+ ***TN*** 1736 2907 4643
+ ***Total*** 4010 4070 8080
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+Support Vector Machines
+-----------------------
+
+The validation showed that the SVM model has an accuracy of 62%, a
+sensitivity of 65% and a specificity of 60%. The confusion matrix of SVM
+model, calculated for 8080 instances, is provided in Table 2.
+
+Table 2: Confusion matrix of the SVM model
+
+ Predicted genotoxicity
+ ----------------------- ------------------------ ---------- ---------- -------------
+ Measured genotoxicity ***PP*** ***PN*** ***Total***
+ ***TP*** 2057 1107 3164
+ ***TN*** 1953 2963 4916
+ ***Total*** 4010 4070 8080
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+Deep Learning (R-project)
+-------------------------
+
+The validation showed that the DL model generated in R has an accuracy
+of 59%, a sensitivity of 89% and a specificity of 30%. The confusion
+matrix of the model, normalised to 8080 instances, is provided in Table
+3.
+
+Table 3: Confusion matrix of the DL model (R-project)
+
+ Predicted genotoxicity
+ ----------------------- ------------------------ ---------- ---------- -------------
+ Measured genotoxicity ***PP*** ***PN*** ***Total***
+ ***TP*** 3575 435 4010
+ ***TN*** 2853 1217 4070
+ ***Total*** 6428 1652 8080
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+DL model (TensorFlow)
+---------------------
+
+The validation showed that the DL model generated in TensorFlow has an
+accuracy of 68%, a sensitivity of 70% and a specificity of 46%. The
+confusion matrix of the model, normalised to 8080 instances, is provided
+in Table 4.
+
+Table 4: Confusion matrix of the DL model (TensorFlow)
+
+ Predicted genotoxicity
+ ----------------------- ------------------------ ---------- ---------- -------------
+ Measured genotoxicity ***PP*** ***PN*** ***Total***
+ ***TP*** 2851 1227 4078
+ ***TN*** 1825 2177 4002
+ ***Total*** 4676 3404 8080
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+The ROC curves from the 6-fold validation are shown in Figure 7.
+
+![](media/image7.png){width="3.825in"
+height="2.7327045056867894in"}
+
+Figure 7: Six-fold cross-validation of TensorFlow DL model show an
+average area under the ROC-curve (ROC-AUC; measure of accuracy) of 68%.
+
+In summary, the validation results of the four methods are presented in
+the following table.
+
+Table 5 Results of the cross-validation of the four models and after
+y-randomisation
+
+ ----------------------------------------------------------------------
+ Accuracy CCR Sensitivity Specificity
+ ----------------------- ---------- ------- ------------- -------------
+ RF model 64.1% 64.4% 66.2% 62.6%
+
+ SVM model 62.1% 62.6% 65.0% 60.3%
+
+ DL model\ 59.3% 59.5% 89.2% 29.9%
+ (R-project)
+
+ DL model (TensorFlow) 68% 62.2% 69.9% 45.6%
+
+ y-randomisation 50.5% 50.4% 50.3% 50.6%
+ ----------------------------------------------------------------------
+
+CCR (correct classification rate)
+
+Discussion
+==========
+
+General model performance
+
+Based on the results of the cross-validation for all models, `lazar`, RF,
+SVM, DL (R-project) and DL (TensorFlow) it can be state that the
+prediction results are not optimal due to different reasons. The
+accuracy as measured during cross-validation of the four models (RF,
+SVM, DL (R-project and TensorFlow)) was partly low with CCR values
+between 59.3 and 68%, with the R-generated DL model and the
+TensorFlow-generated DL model showing the worst and the best
+performance, respectively. The validation of the R-generated DL model
+revealed a high sensitivity (89.2%) but an unacceptably low specificity
+of 29.9% indicating a high number of false positive estimates. The
+TensorFlow-generated DL model, however, showed an acceptable but not
+optimal accuracy of 68%, a sensitivity of 69.9% and a specificity of
+45.6%. The low specificity indicates that both DL models tends to
+predict too many instances as positive (genotoxic), and therefore have a
+high false positive rate. This allows at least with the TensorFlow
+generated DL model to make group statements, but the confidence for
+estimations of single PAs appears to be insufficiently low.
+
+Several factors have likely contributed to the low to moderate
+performance of the used methods as shown during the cross-validation:
+
+1. The outcome in the training dataset was based on the results of AMES
+ tests for genotoxicity [ICH 2011](#_ENREF_63)(), an *in vitro* test
+ in different strains of the bacteria *Salmonella typhimurium*. In
+ this test, mutagenicity is evaluated with and without prior
+ metabolic activation of the test substance. Metabolic activation
+ could result in the formation of genotoxic metabolites from
+ non-genotoxic parent compounds. However, no distinction was made in
+ the training dataset between substances that needed metabolic
+ activation before being mutagenic and those that were mutagenic
+ without metabolic activation. `lazar` is able to handle this
+ 'inaccuracy' in the training dataset well due to the way the
+ algorithm works: `lazar` predicts the genotoxic potential based on the
+ neighbours of substances with comparable structural features,
+ considering mutagenic and not mutagenic neighbours. Based on the
+ structural similarity, a probability for mutagenicity and no
+ mutagenicity is calculated independently from each other (meaning
+ that the sum of probabilities does not necessarily adds up to 100%).
+ The class with the higher outcome is then the overall outcome for
+ the substance.
+
+> In contrast, the other models need to be trained first to recognise
+> the structural features that are responsible for genotoxicity.
+> Therefore, the mixture of substances being mutagenic with and without
+> metabolic activation in the training dataset may have adversely
+> affected the ability to separate the dataset in two distinct classes
+> and thus explains the relatively low performance of these models.
+
+2. Machine learning algorithms try to find an optimized solution in a
+ high-dimensional (one dimension per each predictor) space. Sometimes
+ these methods do not find the global optimum of estimates but only
+ local (not optimal) solutions. Strategies to find the global
+ solutions are systematic variation (grid search) of the
+ hyperparameters of the methods, which may be very time consuming in
+ particular in large datasets.
+
+
+Conclusions
+===========
+
+In this study, an attempt was made to predict the genotoxic potential of
+PAs using five different machine learning techniques (`lazar`, RF, SVM, DL
+(R-project and TensorFlow). The results of all models fitted only partly
+to the findings in literature, with best results obtained with the
+TensorFlow DL model. Therefore, modelling allows statements on the
+relative risks of genotoxicity of the different PA groups. Individual
+predictions for selective PAs appear, however, not reliable on the
+current basis of the used training dataset.
+
+This study emphasises the importance of critical assessment of
+predictions by QSAR models. This includes not only extensive literature
+research to assess the plausibility of the predictions, but also a good
+knowledge of the metabolism of the test substances and understanding for
+possible mechanisms of toxicity.
+
+In further studies, additional machine learning techniques or a modified
+(extended) training dataset should be used for an additional attempt to
+predict the genotoxic potential of PAs.
+
+References
+==========
diff --git a/paper/outfile.docx b/paper/outfile.docx
new file mode 100644
index 0000000..dc3070c
--- /dev/null
+++ b/paper/outfile.docx
Binary files differ
diff --git a/paper/outfile.enriched.json b/paper/outfile.enriched.json
new file mode 100644
index 0000000..a547003
--- /dev/null
+++ b/paper/outfile.enriched.json
@@ -0,0 +1 @@
+{"blocks":[{"t":"Header","c":[1,["introduction",[],[]],[{"t":"Str","c":"Introduction"}]]},{"t":"Para","c":[{"t":"Str","c":"TODO:"},{"t":"Space"},{"t":"Str","c":"algo"},{"t":"Space"},{"t":"Str","c":"history"}]},{"t":"Para","c":[{"t":"Str","c":"TODO:"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"history"}]},{"t":"Para","c":[{"t":"Str","c":"TODO:"},{"t":"Space"},{"t":"Str","c":"open"},{"t":"Space"},{"t":"Str","c":"problems"}]},{"t":"Header","c":[1,["materials-and-methods",[],[]],[{"t":"Str","c":"Materials"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"Methods"}]]},{"t":"Header","c":[2,["mutagenicity-data",[],[]],[{"t":"Str","c":"Mutagenicity"},{"t":"Space"},{"t":"Str","c":"data"}]]},{"t":"Para","c":[{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"methods,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"same"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"used."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"SoftBreak"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"compiled"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"following"},{"t":"Space"},{"t":"Str","c":"sources:"}]},{"t":"BulletList","c":[[{"t":"Para","c":[{"t":"Str","c":"Kazius/Bursi"},{"t":"Space"},{"t":"Str","c":"Dataset"},{"t":"Space"},{"t":"Str","c":"(4337"},{"t":"Space"},{"t":"Str","c":"compounds,"},{"t":"Space"},{"t":"Cite","c":[[{"citationSuffix":[],"citationNoteNum":0,"citationMode":{"t":"AuthorInText"},"citationPrefix":[],"citationId":"Kazius2005","citationHash":0}],[{"t":"Str","c":"@Kazius2005"}]]},{"t":"Str","c":"):"},{"t":"Space"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"http://cheminformatics.org/datasets/bursi/cas_4337.zip"}],["http://cheminformatics.org/datasets/bursi/cas_4337.zip",""]]}]}],[{"t":"Para","c":[{"t":"Str","c":"Hansen"},{"t":"Space"},{"t":"Str","c":"Dataset"},{"t":"Space"},{"t":"Str","c":"(6513"},{"t":"Space"},{"t":"Str","c":"compounds,"},{"t":"Space"},{"t":"Cite","c":[[{"citationSuffix":[],"citationNoteNum":0,"citationMode":{"t":"AuthorInText"},"citationPrefix":[],"citationId":"Hansen2009","citationHash":0}],[{"t":"Str","c":"@Hansen2009"}]]},{"t":"Str","c":"):"},{"t":"Space"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"http://doc.ml.tu-berlin.de/toxbenchmark/Mutagenicity_N6512.csv"}],["http://doc.ml.tu-berlin.de/toxbenchmark/Mutagenicity_N6512.csv",""]]}]}],[{"t":"Para","c":[{"t":"Str","c":"EFSA"},{"t":"Space"},{"t":"Str","c":"Dataset"},{"t":"Space"},{"t":"Str","c":"(695"},{"t":"Space"},{"t":"Str","c":"compounds):"},{"t":"Space"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://data.europa.eu/euodp/data/storage/f/2017-0719T142131/GENOTOX%20data%20and%20dictionary.xls"}],["https://data.europa.eu/euodp/data/storage/f/2017-0719T142131/GENOTOX%20data%20and%20dictionary.xls",""]]}]}]]},{"t":"Para","c":[{"t":"Str","c":"Mutagenicity"},{"t":"Space"},{"t":"Str","c":"classifications"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"Kazius"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"Hansen"},{"t":"Space"},{"t":"Str","c":"datasets"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"SoftBreak"},{"t":"Str","c":"without"},{"t":"Space"},{"t":"Str","c":"further"},{"t":"Space"},{"t":"Str","c":"processing."},{"t":"Space"},{"t":"Str","c":"To"},{"t":"Space"},{"t":"Str","c":"achieve"},{"t":"Space"},{"t":"Str","c":"consistency"},{"t":"Space"},{"t":"Str","c":"between"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"SoftBreak"},{"t":"Str","c":"datasets,"},{"t":"Space"},{"t":"Str","c":"EFSA"},{"t":"Space"},{"t":"Str","c":"compounds"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"classified"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"mutagenic,"},{"t":"Space"},{"t":"Str","c":"if"},{"t":"Space"},{"t":"Str","c":"at"},{"t":"Space"},{"t":"Str","c":"least"},{"t":"Space"},{"t":"Str","c":"one"},{"t":"SoftBreak"},{"t":"Str","c":"positive"},{"t":"Space"},{"t":"Str","c":"result"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"found"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"TA98"},{"t":"Space"},{"t":"Str","c":"or"},{"t":"Space"},{"t":"Str","c":"T100"},{"t":"Space"},{"t":"Str","c":"Salmonella"},{"t":"Space"},{"t":"Str","c":"strains."}]},{"t":"Para","c":[{"t":"Str","c":"Dataset"},{"t":"Space"},{"t":"Str","c":"merges"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"based"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"unique"},{"t":"Space"},{"t":"Str","c":"SMILES"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Emph","c":[{"t":"Str","c":"Simplified"},{"t":"Space"},{"t":"Str","c":"Molecular"},{"t":"Space"},{"t":"Str","c":"Input"},{"t":"SoftBreak"},{"t":"Str","c":"Line"},{"t":"Space"},{"t":"Str","c":"Entry"},{"t":"Space"},{"t":"Str","c":"Specification"}]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"strings"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"compound"},{"t":"Space"},{"t":"Str","c":"structures."},{"t":"SoftBreak"},{"t":"Str","c":"Duplicated"},{"t":"Space"},{"t":"Str","c":"experimental"},{"t":"Space"},{"t":"Str","c":"data"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"same"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"merged"},{"t":"Space"},{"t":"Str","c":"into"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"single"},{"t":"Space"},{"t":"Str","c":"value,"},{"t":"Space"},{"t":"Str","c":"because"},{"t":"Space"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"likely"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"originated"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"same"},{"t":"SoftBreak"},{"t":"Str","c":"experiment."},{"t":"Space"},{"t":"Str","c":"Contradictory"},{"t":"Space"},{"t":"Str","c":"results"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"kept"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"multiple"},{"t":"Space"},{"t":"Str","c":"measurements"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"database."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"combined"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"contains"},{"t":"Space"},{"t":"Str","c":"8281"},{"t":"Space"},{"t":"Str","c":"unique"},{"t":"SoftBreak"},{"t":"Str","c":"structures."}]},{"t":"Para","c":[{"t":"Str","c":"Source"},{"t":"Space"},{"t":"Str","c":"code"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"data"},{"t":"Space"},{"t":"Str","c":"download,"},{"t":"Space"},{"t":"Str","c":"extraction"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"merge"},{"t":"Space"},{"t":"Str","c":"operations"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"SoftBreak"},{"t":"Str","c":"publicly"},{"t":"Space"},{"t":"Str","c":"available"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"git"},{"t":"Space"},{"t":"Str","c":"repository"},{"t":"SoftBreak"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://git.in-silico.ch/pyrrolizidine"}],["https://git.in-silico.ch/pyrrolizidine",""]]},{"t":"Space"},{"t":"Str","c":"under"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"GPL3"},{"t":"Space"},{"t":"Str","c":"License."}]},{"t":"Para","c":[{"t":"Str","c":"TODO:"},{"t":"Space"},{"t":"Str","c":"check/fix"},{"t":"Space"},{"t":"Str","c":"git"},{"t":"Space"},{"t":"Str","c":"repo"}]},{"t":"Para","c":[{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"Random"},{"t":"Space"},{"t":"Str","c":"Forest"},{"t":"Space"},{"t":"Str","c":"(RF),"},{"t":"Space"},{"t":"Str","c":"Support"},{"t":"Space"},{"t":"Str","c":"Vector"},{"t":"Space"},{"t":"Str","c":"Machines"},{"t":"Space"},{"t":"Str","c":"(SVM),"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"Deep"},{"t":"SoftBreak"},{"t":"Str","c":"Learning"},{"t":"Space"},{"t":"Str","c":"(DL)"},{"t":"Space"},{"t":"Str","c":"models,"},{"t":"Space"},{"t":"Str","c":"molecular"},{"t":"Space"},{"t":"Str","c":"descriptors"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"calculated"},{"t":"SoftBreak"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"PaDEL-Descriptors"},{"t":"Space"},{"t":"Str","c":"program"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"http://www.yapcwsoft.com"}],["http://www.yapcwsoft.com",""]]},{"t":"Space"},{"t":"Str","c":"version"},{"t":"Space"},{"t":"Str","c":"2.21,"},{"t":"Space"},{"t":"Cite","c":[[{"citationSuffix":[],"citationNoteNum":0,"citationMode":{"t":"AuthorInText"},"citationPrefix":[],"citationId":"Yap2011","citationHash":0}],[{"t":"Str","c":"@Yap2011"}]]},{"t":"Str","c":")."}]},{"t":"Para","c":[{"t":"Str","c":"TODO:"},{"t":"Space"},{"t":"Str","c":"sentence"},{"t":"Space"},{"t":"Str","c":"??"}]},{"t":"Para","c":[{"t":"Str","c":"From"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"descriptors"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"SoftBreak"},{"t":"Str","c":"chosen,"},{"t":"Space"},{"t":"Str","c":"which"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"actually"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"generation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model."}]},{"t":"Header","c":[2,["algorithms",[],[]],[{"t":"Str","c":"Algorithms"}]]},{"t":"Header","c":[3,["lazar",[],[]],[{"t":"Code","c":[["",[],[]],"lazar"]}]]},{"t":"Para","c":[{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Space"},{"t":"Str","c":"("},{"t":"Emph","c":[{"t":"Str","c":"lazy"},{"t":"Space"},{"t":"Str","c":"structure"},{"t":"Space"},{"t":"Str","c":"activity"},{"t":"Space"},{"t":"Str","c":"relationships"}]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"modular"},{"t":"Space"},{"t":"Str","c":"framework"},{"t":"SoftBreak"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"read-across"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"development"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"validation."},{"t":"Space"},{"t":"Str","c":"It"},{"t":"Space"},{"t":"Str","c":"follows"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"following"},{"t":"Space"},{"t":"Str","c":"basic"},{"t":"Space"},{"t":"Str","c":"workflow:"},{"t":"Space"},{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"given"},{"t":"Space"},{"t":"Str","c":"chemical"},{"t":"Space"},{"t":"Str","c":"structure"},{"t":"Space"},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Str","c":":"}]},{"t":"BulletList","c":[[{"t":"Para","c":[{"t":"Str","c":"searches"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"database"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"similar"},{"t":"Space"},{"t":"Str","c":"structures"},{"t":"Space"},{"t":"Str","c":"(neighbours)"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"SoftBreak"},{"t":"Str","c":"experimental"},{"t":"Space"},{"t":"Str","c":"data,"}]}],[{"t":"Para","c":[{"t":"Str","c":"builds"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"local"},{"t":"Space"},{"t":"Str","c":"QSAR"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"neighbours"},{"t":"Space"},{"t":"Str","c":"and"}]}],[{"t":"Para","c":[{"t":"Str","c":"uses"},{"t":"Space"},{"t":"Str","c":"this"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"predict"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"unknown"},{"t":"Space"},{"t":"Str","c":"activity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"query"},{"t":"SoftBreak"},{"t":"Str","c":"compound."}]}]]},{"t":"Para","c":[{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"procedure"},{"t":"Space"},{"t":"Str","c":"resembles"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"automated"},{"t":"Space"},{"t":"Str","c":"version"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"read"},{"t":"Space"},{"t":"Str","c":"across"},{"t":"Space"},{"t":"Str","c":"predictions"},{"t":"SoftBreak"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"toxicology,"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"machine"},{"t":"Space"},{"t":"Str","c":"learning"},{"t":"Space"},{"t":"Str","c":"terms"},{"t":"Space"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"would"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"classified"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"k-nearest-neighbour"},{"t":"Space"},{"t":"Str","c":"algorithm."}]},{"t":"Para","c":[{"t":"Str","c":"Apart"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"this"},{"t":"Space"},{"t":"Str","c":"basic"},{"t":"Space"},{"t":"Str","c":"workflow,"},{"t":"Space"},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"completely"},{"t":"Space"},{"t":"Str","c":"modular"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"allows"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"researcher"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"use"},{"t":"Space"},{"t":"Str","c":"any"},{"t":"Space"},{"t":"Str","c":"algorithm"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"similarity"},{"t":"Space"},{"t":"Str","c":"searches"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"local"},{"t":"SoftBreak"},{"t":"Str","c":"QSAR"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Emph","c":[{"t":"Str","c":"Quantitative"},{"t":"Space"},{"t":"Str","c":"structure–activity"},{"t":"Space"},{"t":"Str","c":"relationship"}]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"modelling."},{"t":"SoftBreak"},{"t":"Str","c":"Algorithms"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"within"},{"t":"Space"},{"t":"Str","c":"this"},{"t":"Space"},{"t":"Str","c":"study"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"described"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"following"},{"t":"SoftBreak"},{"t":"Str","c":"sections."}]},{"t":"Header","c":[4,["neighbour-identification",[],[]],[{"t":"Str","c":"Neighbour"},{"t":"Space"},{"t":"Str","c":"identification"}]]},{"t":"Para","c":[{"t":"Str","c":"Similarity"},{"t":"Space"},{"t":"Str","c":"calculations"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"based"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"MolPrint2D"},{"t":"Space"},{"t":"Str","c":"fingerprints"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Cite","c":[[{"citationSuffix":[],"citationNoteNum":0,"citationMode":{"t":"AuthorInText"},"citationPrefix":[],"citationId":"Bender2004","citationHash":0}],[{"t":"Str","c":"@Bender2004"}]]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"OpenBabel"},{"t":"Space"},{"t":"Str","c":"cheminformatics"},{"t":"Space"},{"t":"Str","c":"library"},{"t":"SoftBreak"},{"t":"Str","c":"("},{"t":"Cite","c":[[{"citationSuffix":[],"citationNoteNum":0,"citationMode":{"t":"AuthorInText"},"citationPrefix":[],"citationId":"OBoyle2011a","citationHash":0}],[{"t":"Str","c":"@OBoyle2011a"}]]},{"t":"Str","c":")."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"MolPrint2D"},{"t":"Space"},{"t":"Str","c":"fingerprint"},{"t":"Space"},{"t":"Str","c":"uses"},{"t":"SoftBreak"},{"t":"Str","c":"atom"},{"t":"Space"},{"t":"Str","c":"environments"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"molecular"},{"t":"Space"},{"t":"Str","c":"representation,"},{"t":"Space"},{"t":"Str","c":"which"},{"t":"Space"},{"t":"Str","c":"resembles"},{"t":"Space"},{"t":"Str","c":"basically"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"chemical"},{"t":"Space"},{"t":"Str","c":"concept"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"functional"},{"t":"Space"},{"t":"Str","c":"groups."},{"t":"Space"},{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"each"},{"t":"Space"},{"t":"Str","c":"atom"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"molecule,"},{"t":"SoftBreak"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"represents"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"chemical"},{"t":"Space"},{"t":"Str","c":"environment"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"atom"},{"t":"Space"},{"t":"Str","c":"types"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"connected"},{"t":"SoftBreak"},{"t":"Str","c":"atoms."}]},{"t":"Para","c":[{"t":"Str","c":"MolPrint2D"},{"t":"Space"},{"t":"Str","c":"fingerprints"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"generated"},{"t":"Space"},{"t":"Str","c":"dynamically"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"chemical"},{"t":"SoftBreak"},{"t":"Str","c":"structures"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"do"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"rely"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"predefined"},{"t":"Space"},{"t":"Str","c":"lists"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"fragments"},{"t":"Space"},{"t":"Str","c":"(such"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"SoftBreak"},{"t":"Str","c":"OpenBabel"},{"t":"Space"},{"t":"Str","c":"FP3,"},{"t":"Space"},{"t":"Str","c":"FP4"},{"t":"Space"},{"t":"Str","c":"or"},{"t":"Space"},{"t":"Str","c":"MACCs"},{"t":"Space"},{"t":"Str","c":"fingerprints"},{"t":"Space"},{"t":"Str","c":"or"},{"t":"Space"},{"t":"Str","c":"lists"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"SoftBreak"},{"t":"Str","c":"toxicophores/toxicophobes)."},{"t":"Space"},{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"has"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"advantage"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"they"},{"t":"Space"},{"t":"Str","c":"may"},{"t":"Space"},{"t":"Str","c":"capture"},{"t":"SoftBreak"},{"t":"Str","c":"substructures"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"toxicological"},{"t":"Space"},{"t":"Str","c":"relevance"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"included"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"other"},{"t":"SoftBreak"},{"t":"Str","c":"fingerprints."}]},{"t":"Para","c":[{"t":"Str","c":"From"},{"t":"Space"},{"t":"Str","c":"MolPrint2D"},{"t":"Space"},{"t":"Str","c":"fingerprints"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"feature"},{"t":"Space"},{"t":"Str","c":"vector"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"atom"},{"t":"Space"},{"t":"Str","c":"environments"},{"t":"SoftBreak"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"compound"},{"t":"Space"},{"t":"Str","c":"can"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"constructed"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"can"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"calculate"},{"t":"Space"},{"t":"Str","c":"chemical"},{"t":"SoftBreak"},{"t":"Str","c":"similarities."}]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"chemical"},{"t":"Space"},{"t":"Str","c":"similarity"},{"t":"Space"},{"t":"Str","c":"between"},{"t":"Space"},{"t":"Str","c":"two"},{"t":"Space"},{"t":"Str","c":"compounds"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"b"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"expressed"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"proportion"},{"t":"Space"},{"t":"Str","c":"between"},{"t":"Space"},{"t":"Str","c":"atom"},{"t":"Space"},{"t":"Str","c":"environments"},{"t":"Space"},{"t":"Str","c":"common"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"both"},{"t":"Space"},{"t":"Str","c":"structures"},{"t":"Space"},{"t":"Str","c":"A"},{"t":"Space"},{"t":"Str","c":"∩"},{"t":"Space"},{"t":"Str","c":"B"},{"t":"SoftBreak"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"total"},{"t":"Space"},{"t":"Str","c":"number"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"atom"},{"t":"Space"},{"t":"Str","c":"environments"},{"t":"Space"},{"t":"Str","c":"A"},{"t":"Space"},{"t":"Str","c":"U"},{"t":"Space"},{"t":"Str","c":"B"},{"t":"Space"},{"t":"Str","c":"(Jaccard/Tanimoto"},{"t":"SoftBreak"},{"t":"Str","c":"index)."}]},{"t":"Para","c":[{"t":"Math","c":[{"t":"DisplayMath"},"sim = \\frac{\\left| A\\ \\cap B \\right|}{\\left| A\\ \\cup B \\right|}"]}]},{"t":"Para","c":[{"t":"Str","c":"Threshold"},{"t":"Space"},{"t":"Str","c":"selection"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"trade-off"},{"t":"Space"},{"t":"Str","c":"between"},{"t":"Space"},{"t":"Str","c":"prediction"},{"t":"Space"},{"t":"Str","c":"accuracy"},{"t":"Space"},{"t":"Str","c":"(high"},{"t":"SoftBreak"},{"t":"Str","c":"threshold)"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"number"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"predictable"},{"t":"Space"},{"t":"Str","c":"compounds"},{"t":"Space"},{"t":"Str","c":"(low"},{"t":"Space"},{"t":"Str","c":"threshold)."},{"t":"Space"},{"t":"Str","c":"As"},{"t":"SoftBreak"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"many"},{"t":"Space"},{"t":"Str","c":"practical"},{"t":"Space"},{"t":"Str","c":"cases"},{"t":"Space"},{"t":"Str","c":"desirable"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"make"},{"t":"Space"},{"t":"Str","c":"predictions"},{"t":"Space"},{"t":"Str","c":"even"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"absence"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"closely"},{"t":"Space"},{"t":"Str","c":"related"},{"t":"Space"},{"t":"Str","c":"neighbours,"},{"t":"Space"},{"t":"Str","c":"we"},{"t":"Space"},{"t":"Str","c":"follow"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"tiered"},{"t":"Space"},{"t":"Str","c":"approach:"}]},{"t":"BulletList","c":[[{"t":"Para","c":[{"t":"Str","c":"First"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"similarity"},{"t":"Space"},{"t":"Str","c":"threshold"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"0.5"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"collect"},{"t":"Space"},{"t":"Str","c":"neighbours,"},{"t":"SoftBreak"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"create"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"local"},{"t":"Space"},{"t":"Str","c":"QSAR"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"make"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"prediction"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"query"},{"t":"SoftBreak"},{"t":"Str","c":"compound."}]}],[{"t":"Para","c":[{"t":"Str","c":"If"},{"t":"Space"},{"t":"Str","c":"any"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"steps"},{"t":"Space"},{"t":"Str","c":"fails,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"procedure"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"repeated"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"similarity"},{"t":"Space"},{"t":"Str","c":"threshold"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"0.2"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"prediction"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"flagged"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"warning"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"might"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"out"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"applicability"},{"t":"Space"},{"t":"Str","c":"domain"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"data."}]}],[{"t":"Para","c":[{"t":"Str","c":"Similarity"},{"t":"Space"},{"t":"Str","c":"thresholds"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"0.5"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"0.2"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"default"},{"t":"Space"},{"t":"Str","c":"values"},{"t":"Space"},{"t":"Str","c":"chosen"},{"t":"SoftBreak"},{"t":"Str","c":">"},{"t":"Space"},{"t":"Str","c":"by"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"software"},{"t":"Space"},{"t":"Str","c":"developers"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"remained"},{"t":"Space"},{"t":"Str","c":"unchanged"},{"t":"Space"},{"t":"Str","c":"during"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":">"},{"t":"Space"},{"t":"Str","c":"course"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"experiments."}]}]]},{"t":"Para","c":[{"t":"Str","c":"Compounds"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"same"},{"t":"Space"},{"t":"Str","c":"structure"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"query"},{"t":"Space"},{"t":"Str","c":"structure"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"SoftBreak"},{"t":"Str","c":"automatically"},{"t":"Space"},{"t":"Str","c":"eliminated"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"neighbours"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"obtain"},{"t":"Space"},{"t":"Str","c":"unbiased"},{"t":"Space"},{"t":"Str","c":"predictions"},{"t":"SoftBreak"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"presence"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"duplicates."}]},{"t":"Header","c":[4,["local-qsar-models-and-predictions",[],[]],[{"t":"Str","c":"Local"},{"t":"Space"},{"t":"Str","c":"QSAR"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"predictions"}]]},{"t":"Para","c":[{"t":"Str","c":"Only"},{"t":"Space"},{"t":"Str","c":"similar"},{"t":"Space"},{"t":"Str","c":"compounds"},{"t":"Space"},{"t":"Str","c":"(neighbours)"},{"t":"Space"},{"t":"Str","c":"above"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"threshold"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"SoftBreak"},{"t":"Str","c":"local"},{"t":"Space"},{"t":"Str","c":"QSAR"},{"t":"Space"},{"t":"Str","c":"models."},{"t":"Space"},{"t":"Str","c":"In"},{"t":"Space"},{"t":"Str","c":"this"},{"t":"Space"},{"t":"Str","c":"investigation,"},{"t":"Space"},{"t":"Str","c":"we"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"weighted"},{"t":"SoftBreak"},{"t":"Str","c":"majority"},{"t":"Space"},{"t":"Str","c":"vote"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"neighbour’s"},{"t":"Space"},{"t":"Str","c":"experimental"},{"t":"Space"},{"t":"Str","c":"data"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"mutagenicity"},{"t":"SoftBreak"},{"t":"Str","c":"classifications."},{"t":"Space"},{"t":"Str","c":"Probabilities"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"both"},{"t":"Space"},{"t":"Str","c":"classes"},{"t":"SoftBreak"},{"t":"Str","c":"(mutagenic/non-mutagenic)"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"calculated"},{"t":"Space"},{"t":"Str","c":"according"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"following"},{"t":"SoftBreak"},{"t":"Str","c":"formula"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"class"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"higher"},{"t":"Space"},{"t":"Str","c":"probability"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"prediction"},{"t":"SoftBreak"},{"t":"Str","c":"outcome."}]},{"t":"Para","c":[{"t":"Math","c":[{"t":"DisplayMath"},"p_{c} = \\ \\frac{\\sum_{}^{}\\text{sim}_{n,c}}{\\sum_{}^{}\\text{sim}_{n}}"]}]},{"t":"Para","c":[{"t":"Math","c":[{"t":"InlineMath"},"p_{c}"]},{"t":"Space"},{"t":"Str","c":"Probability"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"class"},{"t":"Space"},{"t":"Str","c":"c"},{"t":"Space"},{"t":"Str","c":"(e.g. mutagenic"},{"t":"Space"},{"t":"Str","c":"or"},{"t":"Space"},{"t":"Str","c":"non-mutagenic)"},{"t":"LineBreak"},{"t":"Math","c":[{"t":"InlineMath"},"\\sum_{}^{}\\text{sim}_{n,c}"]},{"t":"Space"},{"t":"Str","c":"Sum"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"similarities"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"neighbours"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"SoftBreak"},{"t":"Str","c":"class"},{"t":"Space"},{"t":"Str","c":"c"},{"t":"LineBreak"},{"t":"Math","c":[{"t":"InlineMath"},"\\sum_{}^{}\\text{sim}_{n}"]},{"t":"Space"},{"t":"Str","c":"Sum"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"neighbours"}]},{"t":"Header","c":[4,["applicability-domain",[],[]],[{"t":"Str","c":"Applicability"},{"t":"Space"},{"t":"Str","c":"domain"}]]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"applicability"},{"t":"Space"},{"t":"Str","c":"domain"},{"t":"Space"},{"t":"Str","c":"(AD)"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"determined"},{"t":"Space"},{"t":"Str","c":"by"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"structural"},{"t":"Space"},{"t":"Str","c":"diversity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"data."},{"t":"Space"},{"t":"Str","c":"If"},{"t":"Space"},{"t":"Str","c":"no"},{"t":"Space"},{"t":"Str","c":"similar"},{"t":"Space"},{"t":"Str","c":"compounds"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"SoftBreak"},{"t":"Str","c":"found"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"data"},{"t":"Space"},{"t":"Str","c":"no"},{"t":"Space"},{"t":"Str","c":"predictions"},{"t":"Space"},{"t":"Str","c":"will"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"generated."},{"t":"Space"},{"t":"Str","c":"Warnings"},{"t":"SoftBreak"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"issued"},{"t":"Space"},{"t":"Str","c":"if"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"similarity"},{"t":"Space"},{"t":"Str","c":"threshold"},{"t":"Space"},{"t":"Str","c":"had"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"lowered"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"0.5"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"0.2"},{"t":"SoftBreak"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"order"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"enable"},{"t":"Space"},{"t":"Str","c":"predictions."},{"t":"Space"},{"t":"Str","c":"Predictions"},{"t":"Space"},{"t":"Str","c":"without"},{"t":"Space"},{"t":"Str","c":"warnings"},{"t":"Space"},{"t":"Str","c":"can"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"SoftBreak"},{"t":"Str","c":"considered"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"close"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"applicability"},{"t":"Space"},{"t":"Str","c":"domain"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"predictions"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"SoftBreak"},{"t":"Str","c":"warnings"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"more"},{"t":"Space"},{"t":"Str","c":"distant"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"applicability"},{"t":"Space"},{"t":"Str","c":"domain."},{"t":"Space"},{"t":"Str","c":"Quantitative"},{"t":"SoftBreak"},{"t":"Str","c":"applicability"},{"t":"Space"},{"t":"Str","c":"domain"},{"t":"Space"},{"t":"Str","c":"information"},{"t":"Space"},{"t":"Str","c":"can"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"obtained"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"similarities"},{"t":"SoftBreak"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"individual"},{"t":"Space"},{"t":"Str","c":"neighbours."}]},{"t":"Header","c":[4,["availability",[],[]],[{"t":"Str","c":"Availability"}]]},{"t":"BulletList","c":[[{"t":"Para","c":[{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Space"},{"t":"Str","c":"experiments"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"this"},{"t":"Space"},{"t":"Str","c":"manuscript:"},{"t":"SoftBreak"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://git.in-silico.ch/pyrrolizidine"}],["https://git.in-silico.ch/pyrrolizidine",""]]},{"t":"SoftBreak"},{"t":"Str","c":"(source"},{"t":"Space"},{"t":"Str","c":"code,"},{"t":"Space"},{"t":"Str","c":"GPL3)"}]}],[{"t":"Para","c":[{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Space"},{"t":"Str","c":"framework:"},{"t":"SoftBreak"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://git.in-silico.ch/lazar"}],["https://git.in-silico.ch/lazar",""]]},{"t":"SoftBreak"},{"t":"Str","c":"(source"},{"t":"Space"},{"t":"Str","c":"code,"},{"t":"Space"},{"t":"Str","c":"GPL3)"}]}],[{"t":"Para","c":[{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Space"},{"t":"Str","c":"GUI:"},{"t":"SoftBreak"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://git.in-silico.ch/lazar-gui"}],["https://git.in-silico.ch/lazar-gui",""]]},{"t":"SoftBreak"},{"t":"Str","c":"(source"},{"t":"Space"},{"t":"Str","c":"code,"},{"t":"Space"},{"t":"Str","c":"GPL3)"}]}],[{"t":"Para","c":[{"t":"Str","c":"Public"},{"t":"Space"},{"t":"Str","c":"web"},{"t":"Space"},{"t":"Str","c":"interface:"},{"t":"SoftBreak"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://lazar.in-silico.ch"}],["https://lazar.in-silico.ch",""]]}]}]]},{"t":"Header","c":[3,["random-forest-support-vector-machines-and-deep-learning-in-r-project",[],[]],[{"t":"Str","c":"Random"},{"t":"Space"},{"t":"Str","c":"Forest,"},{"t":"Space"},{"t":"Str","c":"Support"},{"t":"Space"},{"t":"Str","c":"Vector"},{"t":"Space"},{"t":"Str","c":"Machines,"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"Deep"},{"t":"Space"},{"t":"Str","c":"Learning"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"R-project"}]]},{"t":"Para","c":[{"t":"Str","c":"In"},{"t":"Space"},{"t":"Str","c":"comparison"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Str","c":","},{"t":"Space"},{"t":"Str","c":"three"},{"t":"Space"},{"t":"Str","c":"other"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"(Random"},{"t":"Space"},{"t":"Str","c":"Forest"},{"t":"Space"},{"t":"Str","c":"(RF),"},{"t":"Space"},{"t":"Str","c":"Support"},{"t":"SoftBreak"},{"t":"Str","c":"Vector"},{"t":"Space"},{"t":"Str","c":"Machines"},{"t":"Space"},{"t":"Str","c":"(SVM),"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"Deep"},{"t":"Space"},{"t":"Str","c":"Learning"},{"t":"Space"},{"t":"Str","c":"(DL))"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"evaluated."}]},{"t":"Para","c":[{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"generation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"models,"},{"t":"Space"},{"t":"Str","c":"molecular"},{"t":"Space"},{"t":"Str","c":"1D"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"2D"},{"t":"Space"},{"t":"Str","c":"descriptors"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"calculated"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"PaDEL-Descriptors"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"http://www.yapcwsoft.com"}],["http://www.yapcwsoft.com",""]]},{"t":"Space"},{"t":"Str","c":"version"},{"t":"SoftBreak"},{"t":"Str","c":"2.21,"},{"t":"Space"},{"t":"Cite","c":[[{"citationSuffix":[],"citationNoteNum":0,"citationMode":{"t":"AuthorInText"},"citationPrefix":[],"citationId":"Yap2011","citationHash":0}],[{"t":"Str","c":"@Yap2011"}]]},{"t":"Str","c":")."}]},{"t":"Para","c":[{"t":"Str","c":"As"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"contained"},{"t":"Space"},{"t":"Str","c":"over"},{"t":"Space"},{"t":"Str","c":"8280"},{"t":"Space"},{"t":"Str","c":"instances,"},{"t":"Space"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"decided"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"SoftBreak"},{"t":"Str","c":"delete"},{"t":"Space"},{"t":"Str","c":"instances"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"missing"},{"t":"Space"},{"t":"Str","c":"values"},{"t":"Space"},{"t":"Str","c":"during"},{"t":"Space"},{"t":"Str","c":"data"},{"t":"Space"},{"t":"Str","c":"pre-processing."},{"t":"SoftBreak"},{"t":"Str","c":"Furthermore,"},{"t":"Space"},{"t":"Str","c":"substances"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"equivocal"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"removed."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"final"},{"t":"SoftBreak"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"contained"},{"t":"Space"},{"t":"Str","c":"8080"},{"t":"Space"},{"t":"Str","c":"instances"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"known"},{"t":"Space"},{"t":"Str","c":"mutagenic"},{"t":"SoftBreak"},{"t":"Str","c":"potential."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"RF,"},{"t":"Space"},{"t":"Str","c":"SVM,"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"generated"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"R"},{"t":"SoftBreak"},{"t":"Str","c":"software"},{"t":"Space"},{"t":"Str","c":"(R-project"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"Statistical"},{"t":"Space"},{"t":"Str","c":"Computing,"},{"t":"SoftBreak"},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://www.r-project.org/"}],["https://www.r-project.org/",""]]},{"t":"Emph","c":[{"t":"Str","c":";"}]},{"t":"Space"},{"t":"Str","c":"version"},{"t":"Space"},{"t":"Str","c":"3.3.1),"},{"t":"Space"},{"t":"Str","c":"specific"},{"t":"Space"},{"t":"Str","c":"R"},{"t":"Space"},{"t":"Str","c":"packages"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"SoftBreak"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"identified"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"each"},{"t":"Space"},{"t":"Str","c":"step"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"description"},{"t":"Space"},{"t":"Str","c":"below."},{"t":"Space"},{"t":"Str","c":"During"},{"t":"Space"},{"t":"Str","c":"feature"},{"t":"SoftBreak"},{"t":"Str","c":"selection,"},{"t":"Space"},{"t":"Str","c":"descriptor"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"near"},{"t":"Space"},{"t":"Str","c":"zero"},{"t":"Space"},{"t":"Str","c":"variance"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"removed"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"SoftBreak"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"NearZeroVar"}]}]]},{"t":"Str","c":"-function"},{"t":"Space"},{"t":"Str","c":"(package"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Str","c":"caret"}]]},{"t":"Str","c":")."},{"t":"Space"},{"t":"Str","c":"If"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"percentage"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"most"},{"t":"Space"},{"t":"Str","c":"common"},{"t":"Space"},{"t":"Str","c":"value"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"more"},{"t":"Space"},{"t":"Str","c":"than"},{"t":"Space"},{"t":"Str","c":"90%"},{"t":"Space"},{"t":"Str","c":"or"},{"t":"Space"},{"t":"Str","c":"when"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"frequency"},{"t":"Space"},{"t":"Str","c":"ratio"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"most"},{"t":"Space"},{"t":"Str","c":"common"},{"t":"Space"},{"t":"Str","c":"value"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"second"},{"t":"Space"},{"t":"Str","c":"most"},{"t":"Space"},{"t":"Str","c":"common"},{"t":"Space"},{"t":"Str","c":"value"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"greater"},{"t":"Space"},{"t":"Str","c":"than"},{"t":"Space"},{"t":"Str","c":"95:5"},{"t":"SoftBreak"},{"t":"Str","c":"(e.g. 95"},{"t":"Space"},{"t":"Str","c":"instances"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"most"},{"t":"Space"},{"t":"Str","c":"common"},{"t":"Space"},{"t":"Str","c":"value"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"only"},{"t":"Space"},{"t":"Str","c":"5"},{"t":"Space"},{"t":"Str","c":"or"},{"t":"Space"},{"t":"Str","c":"less"},{"t":"Space"},{"t":"Str","c":"instances"},{"t":"SoftBreak"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"second"},{"t":"Space"},{"t":"Str","c":"most"},{"t":"Space"},{"t":"Str","c":"common"},{"t":"Space"},{"t":"Str","c":"value),"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"descriptor"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"classified"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"having"},{"t":"SoftBreak"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"near"},{"t":"Space"},{"t":"Str","c":"zero"},{"t":"Space"},{"t":"Str","c":"variance."},{"t":"Space"},{"t":"Str","c":"After"},{"t":"Space"},{"t":"Str","c":"that,"},{"t":"Space"},{"t":"Str","c":"highly"},{"t":"Space"},{"t":"Str","c":"correlated"},{"t":"Space"},{"t":"Str","c":"descriptors"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"SoftBreak"},{"t":"Str","c":"removed"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"findCorrelation"}]}]]},{"t":"Str","c":"-function"},{"t":"Space"},{"t":"Str","c":"(package"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Str","c":"caret"}]]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"cut-off"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"0.9."},{"t":"Space"},{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"resulted"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"516"},{"t":"SoftBreak"},{"t":"Str","c":"descriptors."},{"t":"Space"},{"t":"Str","c":"These"},{"t":"Space"},{"t":"Str","c":"descriptors"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"scaled"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"range"},{"t":"Space"},{"t":"Str","c":"between"},{"t":"Space"},{"t":"Str","c":"0"},{"t":"SoftBreak"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"1"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"preProcess"}]}]]},{"t":"Str","c":"-function"},{"t":"Space"},{"t":"Str","c":"(package"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Str","c":"caret"}]]},{"t":"Str","c":")."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"scaling"},{"t":"SoftBreak"},{"t":"Str","c":"routine"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"saved"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"order"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"apply"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"same"},{"t":"Space"},{"t":"Str","c":"scaling"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"testing"},{"t":"SoftBreak"},{"t":"Str","c":"dataset."},{"t":"Space"},{"t":"Str","c":"As"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"three"},{"t":"Space"},{"t":"Str","c":"steps"},{"t":"Space"},{"t":"Str","c":"did"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"consider"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"outcome,"},{"t":"Space"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"SoftBreak"},{"t":"Str","c":"decided"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"they"},{"t":"Space"},{"t":"Str","c":"do"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"need"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"included"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"cross-validation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"model."},{"t":"Space"},{"t":"Str","c":"To"},{"t":"Space"},{"t":"Str","c":"further"},{"t":"Space"},{"t":"Str","c":"reduce"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"number"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"features,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"LASSO"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Emph","c":[{"t":"Str","c":"least"},{"t":"SoftBreak"},{"t":"Str","c":"absolute"},{"t":"Space"},{"t":"Str","c":"shrinkage"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"selection"},{"t":"Space"},{"t":"Str","c":"operator"}]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"regression"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"performed"},{"t":"SoftBreak"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"glmnet"}]}]]},{"t":"Str","c":"-function"},{"t":"Space"},{"t":"Str","c":"(package"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"glmnet"}]}]]},{"t":"Str","c":")."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"reduced"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"SoftBreak"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"generation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"pre-trained"},{"t":"Space"},{"t":"Str","c":"models."}]},{"t":"Para","c":[{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"RF"},{"t":"Space"},{"t":"Str","c":"model,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"randomForest"}]}]]},{"t":"Str","c":"-function"},{"t":"Space"},{"t":"Str","c":"(package"},{"t":"SoftBreak"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"randomForest"}]}]]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"used."},{"t":"Space"},{"t":"Str","c":"A"},{"t":"Space"},{"t":"Str","c":"forest"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"1000"},{"t":"Space"},{"t":"Str","c":"trees"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"maximal"},{"t":"SoftBreak"},{"t":"Str","c":"terminal"},{"t":"Space"},{"t":"Str","c":"nodes"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"200"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"grown"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"prediction."}]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"svm"}]}]]},{"t":"Str","c":"-function"},{"t":"Space"},{"t":"Str","c":"(package"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Str","c":"e1071"}]]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Emph","c":[{"t":"Str","c":"radial"},{"t":"Space"},{"t":"Str","c":"basis"},{"t":"Space"},{"t":"Str","c":"function"},{"t":"SoftBreak"},{"t":"Str","c":"kernel"}]},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"SVM"},{"t":"Space"},{"t":"Str","c":"model."}]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"generated"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"h2o.deeplearning"}]}]]},{"t":"Str","c":"-function"},{"t":"SoftBreak"},{"t":"Str","c":"(package"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"h2o"}]}]]},{"t":"Str","c":")."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"contained"},{"t":"Space"},{"t":"Str","c":"four"},{"t":"Space"},{"t":"Str","c":"hidden"},{"t":"Space"},{"t":"Str","c":"layer"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"70,"},{"t":"Space"},{"t":"Str","c":"50,"},{"t":"Space"},{"t":"Str","c":"50,"},{"t":"SoftBreak"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"10"},{"t":"Space"},{"t":"Str","c":"neurons,"},{"t":"Space"},{"t":"Str","c":"respectively."},{"t":"Space"},{"t":"Str","c":"Other"},{"t":"Space"},{"t":"Str","c":"hyperparameter"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"set"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"follows:"},{"t":"SoftBreak"},{"t":"Str","c":"l1=1.0E-7,"},{"t":"Space"},{"t":"Str","c":"l2=1.0E-11,"},{"t":"Space"},{"t":"Str","c":"epsilon"},{"t":"Space"},{"t":"Str","c":"="},{"t":"Space"},{"t":"Str","c":"1.0E-10,"},{"t":"Space"},{"t":"Str","c":"rho"},{"t":"Space"},{"t":"Str","c":"="},{"t":"Space"},{"t":"Str","c":"0.8,"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"quantile_alpha"},{"t":"SoftBreak"},{"t":"Str","c":"="},{"t":"Space"},{"t":"Str","c":"0.5."},{"t":"Space"},{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"other"},{"t":"Space"},{"t":"Str","c":"hyperparameter,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"default"},{"t":"Space"},{"t":"Str","c":"values"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"used."},{"t":"SoftBreak"},{"t":"Str","c":"Weights"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"biases"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"first"},{"t":"Space"},{"t":"Str","c":"step"},{"t":"Space"},{"t":"Str","c":"determined"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"unsupervised"},{"t":"SoftBreak"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model."},{"t":"Space"},{"t":"Str","c":"These"},{"t":"Space"},{"t":"Str","c":"values"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"then"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"actual,"},{"t":"Space"},{"t":"Str","c":"supervised"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"SoftBreak"},{"t":"Str","c":"model."}]},{"t":"Para","c":[{"t":"Str","c":"To"},{"t":"Space"},{"t":"Str","c":"validate"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"models,"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"internal"},{"t":"Space"},{"t":"Str","c":"cross-validation"},{"t":"Space"},{"t":"Str","c":"approach"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"SoftBreak"},{"t":"Str","c":"chosen."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"randomly"},{"t":"Space"},{"t":"Str","c":"split"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"data,"},{"t":"Space"},{"t":"Str","c":"which"},{"t":"SoftBreak"},{"t":"Str","c":"contained"},{"t":"Space"},{"t":"Str","c":"95%"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"data,"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"data,"},{"t":"Space"},{"t":"Str","c":"which"},{"t":"Space"},{"t":"Str","c":"contain"},{"t":"Space"},{"t":"Str","c":"5%"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"data."},{"t":"Space"},{"t":"Str","c":"A"},{"t":"Space"},{"t":"Str","c":"feature"},{"t":"Space"},{"t":"Str","c":"selection"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"LASSO"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"data"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"performed,"},{"t":"SoftBreak"},{"t":"Str","c":"reducing"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"number"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"descriptors"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"approximately"},{"t":"Space"},{"t":"Str","c":"100."},{"t":"Space"},{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"step"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"SoftBreak"},{"t":"Str","c":"repeated"},{"t":"Space"},{"t":"Str","c":"five"},{"t":"Space"},{"t":"Str","c":"times."},{"t":"Space"},{"t":"Str","c":"Based"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"each"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"five"},{"t":"Space"},{"t":"Str","c":"different"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"data,"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"predictive"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"trained"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"performance"},{"t":"Space"},{"t":"Str","c":"tested"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"data."},{"t":"Space"},{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"step"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"repeated"},{"t":"Space"},{"t":"Str","c":"10"},{"t":"Space"},{"t":"Str","c":"times."},{"t":"Space"},{"t":"Str","c":"Furthermore,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"y-randomisation"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"RF"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"performed."},{"t":"Space"},{"t":"Str","c":"During"},{"t":"SoftBreak"},{"t":"Str","c":"y-randomisation,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"(y-variable)"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"randomly"},{"t":"Space"},{"t":"Str","c":"permuted."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"SoftBreak"},{"t":"Str","c":"theory"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"after"},{"t":"Space"},{"t":"Str","c":"randomisation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"outcome,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"should"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"SoftBreak"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"able"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"correlate"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"properties"},{"t":"Space"},{"t":"Str","c":"(descriptor"},{"t":"Space"},{"t":"Str","c":"values)"},{"t":"SoftBreak"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"substances."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"performance"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"should"},{"t":"Space"},{"t":"Str","c":"therefore"},{"t":"SoftBreak"},{"t":"Str","c":"indicate"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"by"},{"t":"Space"},{"t":"Str","c":"change"},{"t":"Space"},{"t":"Str","c":"prediction"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"accuracy"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"about"},{"t":"Space"},{"t":"Str","c":"50%."},{"t":"Space"},{"t":"Str","c":"If"},{"t":"Space"},{"t":"Str","c":"this"},{"t":"SoftBreak"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"true,"},{"t":"Space"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"can"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"concluded"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"correlation"},{"t":"Space"},{"t":"Str","c":"between"},{"t":"Space"},{"t":"Str","c":"actual"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"SoftBreak"},{"t":"Str","c":"properties"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"substances"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"real"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"by"},{"t":"Space"},{"t":"Str","c":"chance"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Cite","c":[[{"citationSuffix":[],"citationNoteNum":0,"citationMode":{"t":"AuthorInText"},"citationPrefix":[],"citationId":"Rücker2007","citationHash":0}],[{"t":"Str","c":"@Rücker2007"}]]},{"t":"Str","c":")."}]},{"t":"Para","c":[{"t":"Image","c":[["",[],[["width","6.26875in"],["height","5.486111111111111in"]]],[],["media/image1.png",""]]}]},{"t":"Para","c":[{"t":"Str","c":"Figure"},{"t":"Space"},{"t":"Str","c":"1:"},{"t":"Space"},{"t":"Str","c":"Flowchart"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"generation"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"SoftBreak"},{"t":"Str","c":"generated"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"R-project"}]},{"t":"Header","c":[4,["applicability-domain-1",[],[]],[{"t":"Str","c":"Applicability"},{"t":"Space"},{"t":"Str","c":"domain"}]]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"AD"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"PA"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"evaluated"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"Jaccard"},{"t":"Space"},{"t":"Str","c":"distance."},{"t":"Space"},{"t":"Str","c":"A"},{"t":"Space"},{"t":"Str","c":"Jaccard"},{"t":"Space"},{"t":"Str","c":"distance"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Str","c":"0"}]]},{"t":"Space"},{"t":"Str","c":"indicates"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"substances"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"similar,"},{"t":"Space"},{"t":"Str","c":"whereas"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"value"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Str","c":"1"}]]},{"t":"Space"},{"t":"Str","c":"shows"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"substances"},{"t":"SoftBreak"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"different."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"Jaccard"},{"t":"Space"},{"t":"Str","c":"distance"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"below"},{"t":"Space"},{"t":"Str","c":"0.2"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"PAs"},{"t":"Space"},{"t":"Str","c":"relative"},{"t":"SoftBreak"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset."},{"t":"Space"},{"t":"Str","c":"Therefore,"},{"t":"Space"},{"t":"Str","c":"PA"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"within"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"AD"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"can"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"predict"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"genotoxic"},{"t":"SoftBreak"},{"t":"Str","c":"potential"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"PA"},{"t":"Space"},{"t":"Str","c":"dataset."}]},{"t":"Header","c":[4,["y-randomisation",[],[]],[{"t":"Str","c":"y-randomisation"}]]},{"t":"Para","c":[{"t":"Str","c":"After"},{"t":"Space"},{"t":"Str","c":"y-randomisation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"outcome,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"accuracy"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"CCR"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"around"},{"t":"SoftBreak"},{"t":"Str","c":"50%,"},{"t":"Space"},{"t":"Str","c":"indicating"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"chance"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"distribution"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"results."},{"t":"Space"},{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"shows,"},{"t":"SoftBreak"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"actually"},{"t":"Space"},{"t":"Str","c":"related"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"predictors"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"by"},{"t":"SoftBreak"},{"t":"Str","c":"chance."}]},{"t":"Header","c":[3,["deep-learning-in-tensorflow",[],[]],[{"t":"Str","c":"Deep"},{"t":"Space"},{"t":"Str","c":"Learning"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"TensorFlow"}]]},{"t":"Para","c":[{"t":"Str","c":"Alternatively,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"established"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"Python-based"},{"t":"Space"},{"t":"Str","c":"TensorFlow"},{"t":"SoftBreak"},{"t":"Str","c":"program"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://www.tensorflow.org/"}],["https://www.tensorflow.org/",""]]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"high-level"},{"t":"Space"},{"t":"Str","c":"API"},{"t":"Space"},{"t":"Str","c":"Keras"},{"t":"SoftBreak"},{"t":"Str","c":"("},{"t":"Link","c":[["",["uri"],[]],[{"t":"Str","c":"https://www.tensorflow.org/guide/keras"}],["https://www.tensorflow.org/guide/keras",""]]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"build"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"models."}]},{"t":"Para","c":[{"t":"Str","c":"Data"},{"t":"Space"},{"t":"Str","c":"pre-processing"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"done"},{"t":"Space"},{"t":"Str","c":"by"},{"t":"Space"},{"t":"Str","c":"rank"},{"t":"Space"},{"t":"Str","c":"transformation"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"QuantileTransformer"}]}]]},{"t":"Space"},{"t":"Str","c":"procedure."},{"t":"Space"},{"t":"Str","c":"A"},{"t":"Space"},{"t":"Str","c":"sequential"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"has"},{"t":"Space"},{"t":"Str","c":"been"},{"t":"Space"},{"t":"Str","c":"used."},{"t":"SoftBreak"},{"t":"Str","c":"Four"},{"t":"Space"},{"t":"Str","c":"layers"},{"t":"Space"},{"t":"Str","c":"have"},{"t":"Space"},{"t":"Str","c":"been"},{"t":"Space"},{"t":"Str","c":"used:"},{"t":"Space"},{"t":"Str","c":"input"},{"t":"Space"},{"t":"Str","c":"layer,"},{"t":"Space"},{"t":"Str","c":"two"},{"t":"Space"},{"t":"Str","c":"hidden"},{"t":"Space"},{"t":"Str","c":"layers"},{"t":"Space"},{"t":"Str","c":"(with"},{"t":"Space"},{"t":"Str","c":"12,"},{"t":"Space"},{"t":"Str","c":"8"},{"t":"SoftBreak"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"8"},{"t":"Space"},{"t":"Str","c":"nodes,"},{"t":"Space"},{"t":"Str","c":"respectively)"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"one"},{"t":"Space"},{"t":"Str","c":"output"},{"t":"Space"},{"t":"Str","c":"layer."},{"t":"Space"},{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"output"},{"t":"Space"},{"t":"Str","c":"layer,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"sigmoidal"},{"t":"Space"},{"t":"Str","c":"activation"},{"t":"Space"},{"t":"Str","c":"function"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"other"},{"t":"Space"},{"t":"Str","c":"layers"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"ReLU"},{"t":"SoftBreak"},{"t":"Str","c":"("},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Emph","c":[{"t":"Str","c":"Rectified"},{"t":"Space"},{"t":"Str","c":"Linear"},{"t":"Space"},{"t":"Str","c":"Unit"}]}]]},{"t":"Str","c":")"},{"t":"Space"},{"t":"Str","c":"activation"},{"t":"Space"},{"t":"Str","c":"function"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"used."},{"t":"Space"},{"t":"Str","c":"Additionally,"},{"t":"SoftBreak"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"L"},{"t":"Superscript","c":[{"t":"Str","c":"2"}]},{"t":"Str","c":"-penalty"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"0.001"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"input"},{"t":"Space"},{"t":"Str","c":"layer."},{"t":"Space"},{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"model,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"ADAM"},{"t":"Space"},{"t":"Str","c":"algorithm"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"minimise"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"cross-entropy"},{"t":"SoftBreak"},{"t":"Str","c":"loss"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"default"},{"t":"Space"},{"t":"Str","c":"parameters"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"Keras."},{"t":"Space"},{"t":"Str","c":"Training"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"performed"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"SoftBreak"},{"t":"Str","c":"100"},{"t":"Space"},{"t":"Str","c":"epochs"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"batch"},{"t":"Space"},{"t":"Str","c":"size"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"64."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"implemented"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"SoftBreak"},{"t":"Str","c":"Python"},{"t":"Space"},{"t":"Str","c":"3.6"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"Keras."},{"t":"Space"},{"t":"Str","c":"For"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"model,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"6-fold"},{"t":"SoftBreak"},{"t":"Str","c":"cross-validation"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"used."},{"t":"Space"},{"t":"Str","c":"Accuracy"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"estimated"},{"t":"Space"},{"t":"Str","c":"by"},{"t":"Space"},{"t":"Str","c":"ROC-AUC"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"SoftBreak"},{"t":"Str","c":"confusion"},{"t":"Space"},{"t":"Str","c":"matrix."}]},{"t":"Header","c":[2,["validation",[],[]],[{"t":"Str","c":"Validation"}]]},{"t":"Header","c":[1,["results",[],[]],[{"t":"Str","c":"Results"}]]},{"t":"Header","c":[2,["lazar-1",[],[]],[{"t":"Code","c":[["",[],[]],"lazar"]}]]},{"t":"Header","c":[2,["random-forest",[],[]],[{"t":"Str","c":"Random"},{"t":"Space"},{"t":"Str","c":"Forest"}]]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"showed"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"RF"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"has"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"accuracy"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"64%,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"sensitivity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"66%"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"specificity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"63%."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"confusion"},{"t":"Space"},{"t":"Str","c":"matrix"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"model,"},{"t":"Space"},{"t":"Str","c":"calculated"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"8080"},{"t":"Space"},{"t":"Str","c":"instances,"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"provided"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"Table"},{"t":"Space"},{"t":"Str","c":"1."}]},{"t":"Para","c":[{"t":"Str","c":"Table"},{"t":"Space"},{"t":"Str","c":"1:"},{"t":"Space"},{"t":"Str","c":"Confusion"},{"t":"Space"},{"t":"Str","c":"matrix"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"RF"},{"t":"Space"},{"t":"Str","c":"model"}]},{"t":"Table","c":[[],[{"t":"AlignDefault"},{"t":"AlignLeft"},{"t":"AlignDefault"},{"t":"AlignDefault"},{"t":"AlignDefault"}],[0,0,0,0,0],[[],[{"t":"Plain","c":[{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"genotoxicity"}]}],[],[],[]],[[[{"t":"Plain","c":[{"t":"Str","c":"Measured"},{"t":"Space"},{"t":"Str","c":"genotoxicity"}]}],[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"PP"}]}]}]}],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"PN"}]}]}]}],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"Total"}]}]}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"TP"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"2274"}]}],[{"t":"Plain","c":[{"t":"Str","c":"1163"}]}],[{"t":"Plain","c":[{"t":"Str","c":"3437"}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"TN"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"1736"}]}],[{"t":"Plain","c":[{"t":"Str","c":"2907"}]}],[{"t":"Plain","c":[{"t":"Str","c":"4643"}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"Total"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"4010"}]}],[{"t":"Plain","c":[{"t":"Str","c":"4070"}]}],[{"t":"Plain","c":[{"t":"Str","c":"8080"}]}]]]]},{"t":"Para","c":[{"t":"Str","c":"PP:"},{"t":"Space"},{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"positive;"},{"t":"Space"},{"t":"Str","c":"PN:"},{"t":"Space"},{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"negative,"},{"t":"Space"},{"t":"Str","c":"TP:"},{"t":"Space"},{"t":"Str","c":"True"},{"t":"Space"},{"t":"Str","c":"positive,"},{"t":"Space"},{"t":"Str","c":"TN:"},{"t":"SoftBreak"},{"t":"Str","c":"True"},{"t":"Space"},{"t":"Str","c":"negative"}]},{"t":"Header","c":[2,["support-vector-machines",[],[]],[{"t":"Str","c":"Support"},{"t":"Space"},{"t":"Str","c":"Vector"},{"t":"Space"},{"t":"Str","c":"Machines"}]]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"showed"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"SVM"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"has"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"accuracy"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"62%,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"sensitivity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"65%"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"specificity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"60%."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"confusion"},{"t":"Space"},{"t":"Str","c":"matrix"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"SVM"},{"t":"SoftBreak"},{"t":"Str","c":"model,"},{"t":"Space"},{"t":"Str","c":"calculated"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"8080"},{"t":"Space"},{"t":"Str","c":"instances,"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"provided"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"Table"},{"t":"Space"},{"t":"Str","c":"2."}]},{"t":"Para","c":[{"t":"Str","c":"Table"},{"t":"Space"},{"t":"Str","c":"2:"},{"t":"Space"},{"t":"Str","c":"Confusion"},{"t":"Space"},{"t":"Str","c":"matrix"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"SVM"},{"t":"Space"},{"t":"Str","c":"model"}]},{"t":"Table","c":[[],[{"t":"AlignDefault"},{"t":"AlignLeft"},{"t":"AlignDefault"},{"t":"AlignDefault"},{"t":"AlignDefault"}],[0,0,0,0,0],[[],[{"t":"Plain","c":[{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"genotoxicity"}]}],[],[],[]],[[[{"t":"Plain","c":[{"t":"Str","c":"Measured"},{"t":"Space"},{"t":"Str","c":"genotoxicity"}]}],[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"PP"}]}]}]}],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"PN"}]}]}]}],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"Total"}]}]}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"TP"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"2057"}]}],[{"t":"Plain","c":[{"t":"Str","c":"1107"}]}],[{"t":"Plain","c":[{"t":"Str","c":"3164"}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"TN"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"1953"}]}],[{"t":"Plain","c":[{"t":"Str","c":"2963"}]}],[{"t":"Plain","c":[{"t":"Str","c":"4916"}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"Total"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"4010"}]}],[{"t":"Plain","c":[{"t":"Str","c":"4070"}]}],[{"t":"Plain","c":[{"t":"Str","c":"8080"}]}]]]]},{"t":"Para","c":[{"t":"Str","c":"PP:"},{"t":"Space"},{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"positive;"},{"t":"Space"},{"t":"Str","c":"PN:"},{"t":"Space"},{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"negative,"},{"t":"Space"},{"t":"Str","c":"TP:"},{"t":"Space"},{"t":"Str","c":"True"},{"t":"Space"},{"t":"Str","c":"positive,"},{"t":"Space"},{"t":"Str","c":"TN:"},{"t":"SoftBreak"},{"t":"Str","c":"True"},{"t":"Space"},{"t":"Str","c":"negative"}]},{"t":"Header","c":[2,["deep-learning-r-project",[],[]],[{"t":"Str","c":"Deep"},{"t":"Space"},{"t":"Str","c":"Learning"},{"t":"Space"},{"t":"Str","c":"(R-project)"}]]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"showed"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"generated"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"R"},{"t":"Space"},{"t":"Str","c":"has"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"accuracy"},{"t":"SoftBreak"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"59%,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"sensitivity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"89%"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"specificity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"30%."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"confusion"},{"t":"SoftBreak"},{"t":"Str","c":"matrix"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"model,"},{"t":"Space"},{"t":"Str","c":"normalised"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"8080"},{"t":"Space"},{"t":"Str","c":"instances,"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"provided"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"Table"},{"t":"SoftBreak"},{"t":"Str","c":"3."}]},{"t":"Para","c":[{"t":"Str","c":"Table"},{"t":"Space"},{"t":"Str","c":"3:"},{"t":"Space"},{"t":"Str","c":"Confusion"},{"t":"Space"},{"t":"Str","c":"matrix"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"(R-project)"}]},{"t":"Table","c":[[],[{"t":"AlignDefault"},{"t":"AlignLeft"},{"t":"AlignDefault"},{"t":"AlignDefault"},{"t":"AlignDefault"}],[0,0,0,0,0],[[],[{"t":"Plain","c":[{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"genotoxicity"}]}],[],[],[]],[[[{"t":"Plain","c":[{"t":"Str","c":"Measured"},{"t":"Space"},{"t":"Str","c":"genotoxicity"}]}],[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"PP"}]}]}]}],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"PN"}]}]}]}],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"Total"}]}]}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"TP"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"3575"}]}],[{"t":"Plain","c":[{"t":"Str","c":"435"}]}],[{"t":"Plain","c":[{"t":"Str","c":"4010"}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"TN"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"2853"}]}],[{"t":"Plain","c":[{"t":"Str","c":"1217"}]}],[{"t":"Plain","c":[{"t":"Str","c":"4070"}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"Total"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"6428"}]}],[{"t":"Plain","c":[{"t":"Str","c":"1652"}]}],[{"t":"Plain","c":[{"t":"Str","c":"8080"}]}]]]]},{"t":"Para","c":[{"t":"Str","c":"PP:"},{"t":"Space"},{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"positive;"},{"t":"Space"},{"t":"Str","c":"PN:"},{"t":"Space"},{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"negative,"},{"t":"Space"},{"t":"Str","c":"TP:"},{"t":"Space"},{"t":"Str","c":"True"},{"t":"Space"},{"t":"Str","c":"positive,"},{"t":"Space"},{"t":"Str","c":"TN:"},{"t":"SoftBreak"},{"t":"Str","c":"True"},{"t":"Space"},{"t":"Str","c":"negative"}]},{"t":"Header","c":[2,["dl-model-tensorflow",[],[]],[{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"(TensorFlow)"}]]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"showed"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"generated"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"TensorFlow"},{"t":"Space"},{"t":"Str","c":"has"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"SoftBreak"},{"t":"Str","c":"accuracy"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"68%,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"sensitivity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"70%"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"specificity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"46%."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"SoftBreak"},{"t":"Str","c":"confusion"},{"t":"Space"},{"t":"Str","c":"matrix"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"model,"},{"t":"Space"},{"t":"Str","c":"normalised"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"8080"},{"t":"Space"},{"t":"Str","c":"instances,"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"provided"},{"t":"SoftBreak"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"Table"},{"t":"Space"},{"t":"Str","c":"4."}]},{"t":"Para","c":[{"t":"Str","c":"Table"},{"t":"Space"},{"t":"Str","c":"4:"},{"t":"Space"},{"t":"Str","c":"Confusion"},{"t":"Space"},{"t":"Str","c":"matrix"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"(TensorFlow)"}]},{"t":"Table","c":[[],[{"t":"AlignDefault"},{"t":"AlignLeft"},{"t":"AlignDefault"},{"t":"AlignDefault"},{"t":"AlignDefault"}],[0,0,0,0,0],[[],[{"t":"Plain","c":[{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"genotoxicity"}]}],[],[],[]],[[[{"t":"Plain","c":[{"t":"Str","c":"Measured"},{"t":"Space"},{"t":"Str","c":"genotoxicity"}]}],[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"PP"}]}]}]}],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"PN"}]}]}]}],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"Total"}]}]}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"TP"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"2851"}]}],[{"t":"Plain","c":[{"t":"Str","c":"1227"}]}],[{"t":"Plain","c":[{"t":"Str","c":"4078"}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"TN"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"1825"}]}],[{"t":"Plain","c":[{"t":"Str","c":"2177"}]}],[{"t":"Plain","c":[{"t":"Str","c":"4002"}]}]],[[],[{"t":"Plain","c":[{"t":"Strong","c":[{"t":"Emph","c":[{"t":"Str","c":"Total"}]}]}]}],[{"t":"Plain","c":[{"t":"Str","c":"4676"}]}],[{"t":"Plain","c":[{"t":"Str","c":"3404"}]}],[{"t":"Plain","c":[{"t":"Str","c":"8080"}]}]]]]},{"t":"Para","c":[{"t":"Str","c":"PP:"},{"t":"Space"},{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"positive;"},{"t":"Space"},{"t":"Str","c":"PN:"},{"t":"Space"},{"t":"Str","c":"Predicted"},{"t":"Space"},{"t":"Str","c":"negative,"},{"t":"Space"},{"t":"Str","c":"TP:"},{"t":"Space"},{"t":"Str","c":"True"},{"t":"Space"},{"t":"Str","c":"positive,"},{"t":"Space"},{"t":"Str","c":"TN:"},{"t":"SoftBreak"},{"t":"Str","c":"True"},{"t":"Space"},{"t":"Str","c":"negative"}]},{"t":"Para","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"ROC"},{"t":"Space"},{"t":"Str","c":"curves"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"6-fold"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"shown"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"Figure"},{"t":"Space"},{"t":"Str","c":"7."}]},{"t":"Para","c":[{"t":"Image","c":[["",[],[["width","3.825in"],["height","2.7327045056867894in"]]],[],["media/image7.png",""]]}]},{"t":"Para","c":[{"t":"Str","c":"Figure"},{"t":"Space"},{"t":"Str","c":"7:"},{"t":"Space"},{"t":"Str","c":"Six-fold"},{"t":"Space"},{"t":"Str","c":"cross-validation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"TensorFlow"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"show"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"SoftBreak"},{"t":"Str","c":"average"},{"t":"Space"},{"t":"Str","c":"area"},{"t":"Space"},{"t":"Str","c":"under"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"ROC-curve"},{"t":"Space"},{"t":"Str","c":"(ROC-AUC;"},{"t":"Space"},{"t":"Str","c":"measure"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"accuracy)"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"68%."}]},{"t":"Para","c":[{"t":"Str","c":"In"},{"t":"Space"},{"t":"Str","c":"summary,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"results"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"four"},{"t":"Space"},{"t":"Str","c":"methods"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"presented"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"following"},{"t":"Space"},{"t":"Str","c":"table."}]},{"t":"Para","c":[{"t":"Str","c":"Table"},{"t":"Space"},{"t":"Str","c":"5"},{"t":"Space"},{"t":"Str","c":"Results"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"cross-validation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"four"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"after"},{"t":"SoftBreak"},{"t":"Str","c":"y-randomisation"}]},{"t":"Table","c":[[],[{"t":"AlignDefault"},{"t":"AlignLeft"},{"t":"AlignLeft"},{"t":"AlignLeft"},{"t":"AlignLeft"}],[0.3287671232876712,0.1506849315068493,0.1095890410958904,0.1917808219178082,0.1917808219178082],[[],[{"t":"Plain","c":[{"t":"Str","c":"Accuracy"}]}],[{"t":"Plain","c":[{"t":"Str","c":"CCR"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Sensitivity"}]}],[{"t":"Plain","c":[{"t":"Str","c":"Specificity"}]}]],[[[{"t":"Plain","c":[{"t":"Str","c":"RF"},{"t":"Space"},{"t":"Str","c":"model"}]}],[{"t":"Plain","c":[{"t":"Str","c":"64.1%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"64.4%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"66.2%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"62.6%"}]}]],[[{"t":"Plain","c":[{"t":"Str","c":"SVM"},{"t":"Space"},{"t":"Str","c":"model"}]}],[{"t":"Plain","c":[{"t":"Str","c":"62.1%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"62.6%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"65.0%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"60.3%"}]}]],[[{"t":"Plain","c":[{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"LineBreak"},{"t":"Str","c":"(R-project)"}]}],[{"t":"Plain","c":[{"t":"Str","c":"59.3%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"59.5%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"89.2%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"29.9%"}]}]],[[{"t":"Plain","c":[{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"(TensorFlow)"}]}],[{"t":"Plain","c":[{"t":"Str","c":"68%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"62.2%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"69.9%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"45.6%"}]}]],[[{"t":"Plain","c":[{"t":"Str","c":"y-randomisation"}]}],[{"t":"Plain","c":[{"t":"Str","c":"50.5%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"50.4%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"50.3%"}]}],[{"t":"Plain","c":[{"t":"Str","c":"50.6%"}]}]]]]},{"t":"Para","c":[{"t":"Str","c":"CCR"},{"t":"Space"},{"t":"Str","c":"(correct"},{"t":"Space"},{"t":"Str","c":"classification"},{"t":"Space"},{"t":"Str","c":"rate)"}]},{"t":"Header","c":[1,["discussion",[],[]],[{"t":"Str","c":"Discussion"}]]},{"t":"Para","c":[{"t":"Str","c":"General"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"performance"}]},{"t":"Para","c":[{"t":"Str","c":"Based"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"results"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"cross-validation"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"models,"},{"t":"Space"},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Str","c":","},{"t":"Space"},{"t":"Str","c":"RF,"},{"t":"SoftBreak"},{"t":"Str","c":"SVM,"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"(R-project)"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"(TensorFlow)"},{"t":"Space"},{"t":"Str","c":"it"},{"t":"Space"},{"t":"Str","c":"can"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"state"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"prediction"},{"t":"Space"},{"t":"Str","c":"results"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"optimal"},{"t":"Space"},{"t":"Str","c":"due"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"different"},{"t":"Space"},{"t":"Str","c":"reasons."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"SoftBreak"},{"t":"Str","c":"accuracy"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"measured"},{"t":"Space"},{"t":"Str","c":"during"},{"t":"Space"},{"t":"Str","c":"cross-validation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"four"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"(RF,"},{"t":"SoftBreak"},{"t":"Str","c":"SVM,"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"(R-project"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"TensorFlow))"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"partly"},{"t":"Space"},{"t":"Str","c":"low"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"CCR"},{"t":"Space"},{"t":"Str","c":"values"},{"t":"SoftBreak"},{"t":"Str","c":"between"},{"t":"Space"},{"t":"Str","c":"59.3"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"68%,"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"R-generated"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"TensorFlow-generated"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"showing"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"worst"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"best"},{"t":"SoftBreak"},{"t":"Str","c":"performance,"},{"t":"Space"},{"t":"Str","c":"respectively."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"validation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"R-generated"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"SoftBreak"},{"t":"Str","c":"revealed"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"high"},{"t":"Space"},{"t":"Str","c":"sensitivity"},{"t":"Space"},{"t":"Str","c":"(89.2%)"},{"t":"Space"},{"t":"Str","c":"but"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"unacceptably"},{"t":"Space"},{"t":"Str","c":"low"},{"t":"Space"},{"t":"Str","c":"specificity"},{"t":"SoftBreak"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"29.9%"},{"t":"Space"},{"t":"Str","c":"indicating"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"high"},{"t":"Space"},{"t":"Str","c":"number"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"false"},{"t":"Space"},{"t":"Str","c":"positive"},{"t":"Space"},{"t":"Str","c":"estimates."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"SoftBreak"},{"t":"Str","c":"TensorFlow-generated"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model,"},{"t":"Space"},{"t":"Str","c":"however,"},{"t":"Space"},{"t":"Str","c":"showed"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"acceptable"},{"t":"Space"},{"t":"Str","c":"but"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"SoftBreak"},{"t":"Str","c":"optimal"},{"t":"Space"},{"t":"Str","c":"accuracy"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"68%,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"sensitivity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"69.9%"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"specificity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"SoftBreak"},{"t":"Str","c":"45.6%."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"low"},{"t":"Space"},{"t":"Str","c":"specificity"},{"t":"Space"},{"t":"Str","c":"indicates"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"both"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"tends"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"SoftBreak"},{"t":"Str","c":"predict"},{"t":"Space"},{"t":"Str","c":"too"},{"t":"Space"},{"t":"Str","c":"many"},{"t":"Space"},{"t":"Str","c":"instances"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"positive"},{"t":"Space"},{"t":"Str","c":"(genotoxic),"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"therefore"},{"t":"Space"},{"t":"Str","c":"have"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"high"},{"t":"Space"},{"t":"Str","c":"false"},{"t":"Space"},{"t":"Str","c":"positive"},{"t":"Space"},{"t":"Str","c":"rate."},{"t":"Space"},{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"allows"},{"t":"Space"},{"t":"Str","c":"at"},{"t":"Space"},{"t":"Str","c":"least"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"TensorFlow"},{"t":"SoftBreak"},{"t":"Str","c":"generated"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"make"},{"t":"Space"},{"t":"Str","c":"group"},{"t":"Space"},{"t":"Str","c":"statements,"},{"t":"Space"},{"t":"Str","c":"but"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"confidence"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"SoftBreak"},{"t":"Str","c":"estimations"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"single"},{"t":"Space"},{"t":"Str","c":"PAs"},{"t":"Space"},{"t":"Str","c":"appears"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"insufficiently"},{"t":"Space"},{"t":"Str","c":"low."}]},{"t":"Para","c":[{"t":"Str","c":"Several"},{"t":"Space"},{"t":"Str","c":"factors"},{"t":"Space"},{"t":"Str","c":"have"},{"t":"Space"},{"t":"Str","c":"likely"},{"t":"Space"},{"t":"Str","c":"contributed"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"low"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"moderate"},{"t":"SoftBreak"},{"t":"Str","c":"performance"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"methods"},{"t":"Space"},{"t":"Str","c":"as"},{"t":"Space"},{"t":"Str","c":"shown"},{"t":"Space"},{"t":"Str","c":"during"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"cross-validation:"}]},{"t":"OrderedList","c":[[1,{"t":"Decimal"},{"t":"Period"}],[[{"t":"Plain","c":[{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"based"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"results"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"AMES"},{"t":"SoftBreak"},{"t":"Str","c":"tests"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"genotoxicity"},{"t":"Space"},{"t":"Link","c":[["",[],[]],[{"t":"Str","c":"ICH"},{"t":"Space"},{"t":"Str","c":"2011"}],["#_ENREF_63",""]]},{"t":"Str","c":"(),"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Emph","c":[{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"vitro"}]},{"t":"Space"},{"t":"Str","c":"test"},{"t":"SoftBreak"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"different"},{"t":"Space"},{"t":"Str","c":"strains"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"bacteria"},{"t":"Space"},{"t":"Emph","c":[{"t":"Str","c":"Salmonella"},{"t":"Space"},{"t":"Str","c":"typhimurium"}]},{"t":"Str","c":"."},{"t":"Space"},{"t":"Str","c":"In"},{"t":"SoftBreak"},{"t":"Str","c":"this"},{"t":"Space"},{"t":"Str","c":"test,"},{"t":"Space"},{"t":"Str","c":"mutagenicity"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"evaluated"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"without"},{"t":"Space"},{"t":"Str","c":"prior"},{"t":"SoftBreak"},{"t":"Str","c":"metabolic"},{"t":"Space"},{"t":"Str","c":"activation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"test"},{"t":"Space"},{"t":"Str","c":"substance."},{"t":"Space"},{"t":"Str","c":"Metabolic"},{"t":"Space"},{"t":"Str","c":"activation"},{"t":"SoftBreak"},{"t":"Str","c":"could"},{"t":"Space"},{"t":"Str","c":"result"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"formation"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"genotoxic"},{"t":"Space"},{"t":"Str","c":"metabolites"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"SoftBreak"},{"t":"Str","c":"non-genotoxic"},{"t":"Space"},{"t":"Str","c":"parent"},{"t":"Space"},{"t":"Str","c":"compounds."},{"t":"Space"},{"t":"Str","c":"However,"},{"t":"Space"},{"t":"Str","c":"no"},{"t":"Space"},{"t":"Str","c":"distinction"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"made"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"between"},{"t":"Space"},{"t":"Str","c":"substances"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"needed"},{"t":"Space"},{"t":"Str","c":"metabolic"},{"t":"SoftBreak"},{"t":"Str","c":"activation"},{"t":"Space"},{"t":"Str","c":"before"},{"t":"Space"},{"t":"Str","c":"being"},{"t":"Space"},{"t":"Str","c":"mutagenic"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"those"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"mutagenic"},{"t":"SoftBreak"},{"t":"Str","c":"without"},{"t":"Space"},{"t":"Str","c":"metabolic"},{"t":"Space"},{"t":"Str","c":"activation."},{"t":"Space"},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"able"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"handle"},{"t":"Space"},{"t":"Str","c":"this"},{"t":"SoftBreak"},{"t":"Quoted","c":[{"t":"SingleQuote"},[{"t":"Str","c":"inaccuracy"}]]},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"well"},{"t":"Space"},{"t":"Str","c":"due"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"way"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"algorithm"},{"t":"Space"},{"t":"Str","c":"works:"},{"t":"Space"},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Space"},{"t":"Str","c":"predicts"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"genotoxic"},{"t":"Space"},{"t":"Str","c":"potential"},{"t":"Space"},{"t":"Str","c":"based"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"neighbours"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"substances"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"comparable"},{"t":"Space"},{"t":"Str","c":"structural"},{"t":"Space"},{"t":"Str","c":"features,"},{"t":"SoftBreak"},{"t":"Str","c":"considering"},{"t":"Space"},{"t":"Str","c":"mutagenic"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"mutagenic"},{"t":"Space"},{"t":"Str","c":"neighbours."},{"t":"Space"},{"t":"Str","c":"Based"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"structural"},{"t":"Space"},{"t":"Str","c":"similarity,"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"probability"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"mutagenicity"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"no"},{"t":"SoftBreak"},{"t":"Str","c":"mutagenicity"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"calculated"},{"t":"Space"},{"t":"Str","c":"independently"},{"t":"Space"},{"t":"Str","c":"from"},{"t":"Space"},{"t":"Str","c":"each"},{"t":"Space"},{"t":"Str","c":"other"},{"t":"Space"},{"t":"Str","c":"(meaning"},{"t":"SoftBreak"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"sum"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"probabilities"},{"t":"Space"},{"t":"Str","c":"does"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"necessarily"},{"t":"Space"},{"t":"Str","c":"adds"},{"t":"Space"},{"t":"Str","c":"up"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"100%)."},{"t":"SoftBreak"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"class"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"higher"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"is"},{"t":"Space"},{"t":"Str","c":"then"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"overall"},{"t":"Space"},{"t":"Str","c":"outcome"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"substance."}]}]]]},{"t":"BlockQuote","c":[{"t":"Para","c":[{"t":"Str","c":"In"},{"t":"Space"},{"t":"Str","c":"contrast,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"other"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"need"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"trained"},{"t":"Space"},{"t":"Str","c":"first"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"recognise"},{"t":"SoftBreak"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"structural"},{"t":"Space"},{"t":"Str","c":"features"},{"t":"Space"},{"t":"Str","c":"that"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"responsible"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"genotoxicity."},{"t":"SoftBreak"},{"t":"Str","c":"Therefore,"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"mixture"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"substances"},{"t":"Space"},{"t":"Str","c":"being"},{"t":"Space"},{"t":"Str","c":"mutagenic"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"without"},{"t":"SoftBreak"},{"t":"Str","c":"metabolic"},{"t":"Space"},{"t":"Str","c":"activation"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"may"},{"t":"Space"},{"t":"Str","c":"have"},{"t":"Space"},{"t":"Str","c":"adversely"},{"t":"SoftBreak"},{"t":"Str","c":"affected"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"ability"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"separate"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"two"},{"t":"Space"},{"t":"Str","c":"distinct"},{"t":"Space"},{"t":"Str","c":"classes"},{"t":"SoftBreak"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"thus"},{"t":"Space"},{"t":"Str","c":"explains"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"relatively"},{"t":"Space"},{"t":"Str","c":"low"},{"t":"Space"},{"t":"Str","c":"performance"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"models."}]}]},{"t":"OrderedList","c":[[2,{"t":"Decimal"},{"t":"Period"}],[[{"t":"Plain","c":[{"t":"Str","c":"Machine"},{"t":"Space"},{"t":"Str","c":"learning"},{"t":"Space"},{"t":"Str","c":"algorithms"},{"t":"Space"},{"t":"Str","c":"try"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"find"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"optimized"},{"t":"Space"},{"t":"Str","c":"solution"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"SoftBreak"},{"t":"Str","c":"high-dimensional"},{"t":"Space"},{"t":"Str","c":"(one"},{"t":"Space"},{"t":"Str","c":"dimension"},{"t":"Space"},{"t":"Str","c":"per"},{"t":"Space"},{"t":"Str","c":"each"},{"t":"Space"},{"t":"Str","c":"predictor)"},{"t":"Space"},{"t":"Str","c":"space."},{"t":"Space"},{"t":"Str","c":"Sometimes"},{"t":"SoftBreak"},{"t":"Str","c":"these"},{"t":"Space"},{"t":"Str","c":"methods"},{"t":"Space"},{"t":"Str","c":"do"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"find"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"global"},{"t":"Space"},{"t":"Str","c":"optimum"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"estimates"},{"t":"Space"},{"t":"Str","c":"but"},{"t":"Space"},{"t":"Str","c":"only"},{"t":"SoftBreak"},{"t":"Str","c":"local"},{"t":"Space"},{"t":"Str","c":"(not"},{"t":"Space"},{"t":"Str","c":"optimal)"},{"t":"Space"},{"t":"Str","c":"solutions."},{"t":"Space"},{"t":"Str","c":"Strategies"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"find"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"global"},{"t":"SoftBreak"},{"t":"Str","c":"solutions"},{"t":"Space"},{"t":"Str","c":"are"},{"t":"Space"},{"t":"Str","c":"systematic"},{"t":"Space"},{"t":"Str","c":"variation"},{"t":"Space"},{"t":"Str","c":"(grid"},{"t":"Space"},{"t":"Str","c":"search)"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"hyperparameters"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"methods,"},{"t":"Space"},{"t":"Str","c":"which"},{"t":"Space"},{"t":"Str","c":"may"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"very"},{"t":"Space"},{"t":"Str","c":"time"},{"t":"Space"},{"t":"Str","c":"consuming"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"SoftBreak"},{"t":"Str","c":"particular"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"large"},{"t":"Space"},{"t":"Str","c":"datasets."}]}]]]},{"t":"Header","c":[1,["conclusions",[],[]],[{"t":"Str","c":"Conclusions"}]]},{"t":"Para","c":[{"t":"Str","c":"In"},{"t":"Space"},{"t":"Str","c":"this"},{"t":"Space"},{"t":"Str","c":"study,"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"attempt"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"made"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"predict"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"genotoxic"},{"t":"Space"},{"t":"Str","c":"potential"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"SoftBreak"},{"t":"Str","c":"PAs"},{"t":"Space"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"five"},{"t":"Space"},{"t":"Str","c":"different"},{"t":"Space"},{"t":"Str","c":"machine"},{"t":"Space"},{"t":"Str","c":"learning"},{"t":"Space"},{"t":"Str","c":"techniques"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Str","c":","},{"t":"Space"},{"t":"Str","c":"RF,"},{"t":"Space"},{"t":"Str","c":"SVM,"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"SoftBreak"},{"t":"Str","c":"(R-project"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"TensorFlow)."},{"t":"Space"},{"t":"Str","c":"The"},{"t":"Space"},{"t":"Str","c":"results"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"all"},{"t":"Space"},{"t":"Str","c":"models"},{"t":"Space"},{"t":"Str","c":"fitted"},{"t":"Space"},{"t":"Str","c":"only"},{"t":"Space"},{"t":"Str","c":"partly"},{"t":"SoftBreak"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"findings"},{"t":"Space"},{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"literature,"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"best"},{"t":"Space"},{"t":"Str","c":"results"},{"t":"Space"},{"t":"Str","c":"obtained"},{"t":"Space"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"TensorFlow"},{"t":"Space"},{"t":"Str","c":"DL"},{"t":"Space"},{"t":"Str","c":"model."},{"t":"Space"},{"t":"Str","c":"Therefore,"},{"t":"Space"},{"t":"Str","c":"modelling"},{"t":"Space"},{"t":"Str","c":"allows"},{"t":"Space"},{"t":"Str","c":"statements"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"relative"},{"t":"Space"},{"t":"Str","c":"risks"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"genotoxicity"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"different"},{"t":"Space"},{"t":"Str","c":"PA"},{"t":"Space"},{"t":"Str","c":"groups."},{"t":"Space"},{"t":"Str","c":"Individual"},{"t":"SoftBreak"},{"t":"Str","c":"predictions"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"selective"},{"t":"Space"},{"t":"Str","c":"PAs"},{"t":"Space"},{"t":"Str","c":"appear,"},{"t":"Space"},{"t":"Str","c":"however,"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"reliable"},{"t":"Space"},{"t":"Str","c":"on"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"SoftBreak"},{"t":"Str","c":"current"},{"t":"Space"},{"t":"Str","c":"basis"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset."}]},{"t":"Para","c":[{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"study"},{"t":"Space"},{"t":"Str","c":"emphasises"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"importance"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"critical"},{"t":"Space"},{"t":"Str","c":"assessment"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"SoftBreak"},{"t":"Str","c":"predictions"},{"t":"Space"},{"t":"Str","c":"by"},{"t":"Space"},{"t":"Str","c":"QSAR"},{"t":"Space"},{"t":"Str","c":"models."},{"t":"Space"},{"t":"Str","c":"This"},{"t":"Space"},{"t":"Str","c":"includes"},{"t":"Space"},{"t":"Str","c":"not"},{"t":"Space"},{"t":"Str","c":"only"},{"t":"Space"},{"t":"Str","c":"extensive"},{"t":"Space"},{"t":"Str","c":"literature"},{"t":"SoftBreak"},{"t":"Str","c":"research"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"assess"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"plausibility"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"predictions,"},{"t":"Space"},{"t":"Str","c":"but"},{"t":"Space"},{"t":"Str","c":"also"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"good"},{"t":"SoftBreak"},{"t":"Str","c":"knowledge"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"metabolism"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"test"},{"t":"Space"},{"t":"Str","c":"substances"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"understanding"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"SoftBreak"},{"t":"Str","c":"possible"},{"t":"Space"},{"t":"Str","c":"mechanisms"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"toxicity."}]},{"t":"Para","c":[{"t":"Str","c":"In"},{"t":"Space"},{"t":"Str","c":"further"},{"t":"Space"},{"t":"Str","c":"studies,"},{"t":"Space"},{"t":"Str","c":"additional"},{"t":"Space"},{"t":"Str","c":"machine"},{"t":"Space"},{"t":"Str","c":"learning"},{"t":"Space"},{"t":"Str","c":"techniques"},{"t":"Space"},{"t":"Str","c":"or"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"modified"},{"t":"SoftBreak"},{"t":"Str","c":"(extended)"},{"t":"Space"},{"t":"Str","c":"training"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"Space"},{"t":"Str","c":"should"},{"t":"Space"},{"t":"Str","c":"be"},{"t":"Space"},{"t":"Str","c":"used"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"an"},{"t":"Space"},{"t":"Str","c":"additional"},{"t":"Space"},{"t":"Str","c":"attempt"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"SoftBreak"},{"t":"Str","c":"predict"},{"t":"Space"},{"t":"Str","c":"the"},{"t":"Space"},{"t":"Str","c":"genotoxic"},{"t":"Space"},{"t":"Str","c":"potential"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"PAs."}]},{"t":"Header","c":[1,["references",[],[]],[{"t":"Str","c":"References"}]]}],"pandoc-api-version":[1,17,5,4],"meta":{"bibliography":{"t":"MetaInlines","c":[{"t":"Str","c":"bibliography.bib"}]},"documentclass":{"t":"MetaInlines","c":[{"t":"Str","c":"scrartcl"}]},"keywords":{"t":"MetaInlines","c":[{"t":"Str","c":"mutagenicity,"},{"t":"Space"},{"t":"Str","c":"(Q)SAR,"},{"t":"Space"},{"t":"Str","c":"lazar,"},{"t":"Space"},{"t":"Str","c":"random"},{"t":"Space"},{"t":"Str","c":"forest,"},{"t":"Space"},{"t":"Str","c":"support"},{"t":"Space"},{"t":"Str","c":"vector"},{"t":"Space"},{"t":"Str","c":"machine,"},{"t":"Space"},{"t":"Str","c":"deep"},{"t":"Space"},{"t":"Str","c":"learning"}]},"author":{"t":"MetaList","c":[{"t":"MetaMap","c":{"email":{"t":"MetaInlines","c":[{"t":"Str","c":"helma@in-silico.ch"}]},"name":{"t":"MetaInlines","c":[{"t":"Str","c":"Christoph Helma"}]},"correspondence":{"t":"MetaInlines","c":[{"t":"Str","c":"yes"}]},"id":{"t":"MetaString","c":"Christoph Helma"},"institute":{"t":"MetaList","c":[{"t":"MetaString","c":"1"}]}}},{"t":"MetaMap","c":{"name":{"t":"MetaInlines","c":[{"t":"Str","c":"Verena Schöning"}]},"id":{"t":"MetaString","c":"Verena Schöning"},"institute":{"t":"MetaList","c":[{"t":"MetaString","c":"2"}]}}},{"t":"MetaMap","c":{"name":{"t":"MetaInlines","c":[{"t":"Str","c":"Philipp Boss"}]},"id":{"t":"MetaString","c":"Philipp Boss"},"institute":{"t":"MetaList","c":[{"t":"MetaString","c":"2"}]}}},{"t":"MetaMap","c":{"name":{"t":"MetaInlines","c":[{"t":"Str","c":"Jürgen Drewe"}]},"id":{"t":"MetaString","c":"Jürgen Drewe"},"institute":{"t":"MetaList","c":[{"t":"MetaString","c":"2"}]}}}]},"abstract":{"t":"MetaBlocks","c":[{"t":"Para","c":[{"t":"Str","c":"k-nearest"},{"t":"Space"},{"t":"Str","c":"neighbor"},{"t":"Space"},{"t":"Str","c":"("},{"t":"Code","c":[["",[],[]],"lazar"]},{"t":"Str","c":"),"},{"t":"Space"},{"t":"Str","c":"random"},{"t":"Space"},{"t":"Str","c":"forest,"},{"t":"Space"},{"t":"Str","c":"support"},{"t":"Space"},{"t":"Str","c":"vector"},{"t":"Space"},{"t":"Str","c":"machine"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"deep"},{"t":"SoftBreak"},{"t":"Str","c":"learning"},{"t":"Space"},{"t":"Str","c":"algorithms"},{"t":"Space"},{"t":"Str","c":"were"},{"t":"Space"},{"t":"Str","c":"applied"},{"t":"Space"},{"t":"Str","c":"to"},{"t":"Space"},{"t":"Str","c":"a"},{"t":"Space"},{"t":"Str","c":"new"},{"t":"Space"},{"t":"Emph","c":[{"t":"Str","c":"Salmonella"}]},{"t":"Space"},{"t":"Str","c":"mutagenicity"},{"t":"Space"},{"t":"Str","c":"dataset"},{"t":"SoftBreak"},{"t":"Str","c":"with"},{"t":"Space"},{"t":"Str","c":"8281"},{"t":"Space"},{"t":"Str","c":"unique"},{"t":"Space"},{"t":"Str","c":"chemical"},{"t":"Space"},{"t":"Str","c":"structures."},{"t":"Space"},{"t":"Str","c":"Algorithm"},{"t":"Space"},{"t":"Str","c":"performance"},{"t":"Space"},{"t":"Str","c":"was"},{"t":"Space"},{"t":"Str","c":"evaluated"},{"t":"SoftBreak"},{"t":"Str","c":"using"},{"t":"Space"},{"t":"Str","c":"5-fold"},{"t":"Space"},{"t":"Str","c":"crossvalidation."},{"t":"SoftBreak"},{"t":"Str","c":"TODO"},{"t":"SoftBreak"},{"t":"Str","c":"-"},{"t":"Space"},{"t":"Str","c":"results"},{"t":"SoftBreak"},{"t":"Str","c":"-"},{"t":"Space"},{"t":"Str","c":"conclusion"}]}]},"title":{"t":"MetaInlines","c":[{"t":"Str","c":"A"},{"t":"Space"},{"t":"Str","c":"comparison"},{"t":"Space"},{"t":"Str","c":"of"},{"t":"Space"},{"t":"Str","c":"random"},{"t":"Space"},{"t":"Str","c":"forest,"},{"t":"Space"},{"t":"Str","c":"support"},{"t":"Space"},{"t":"Str","c":"vector"},{"t":"Space"},{"t":"Str","c":"machine,"},{"t":"Space"},{"t":"Str","c":"deep"},{"t":"Space"},{"t":"Str","c":"learning"},{"t":"Space"},{"t":"Str","c":"and"},{"t":"Space"},{"t":"Str","c":"lazar"},{"t":"Space"},{"t":"Str","c":"algorithms"},{"t":"Space"},{"t":"Str","c":"for"},{"t":"Space"},{"t":"Str","c":"predicting"},{"t":"Space"},{"t":"Str","c":"mutagenicity"}]},"cito_cites":{"t":"MetaMap","c":{"citation":{"t":"MetaList","c":[{"t":"MetaString","c":"Kazius2005"},{"t":"MetaString","c":"Hansen2009"},{"t":"MetaString","c":"Yap2011"},{"t":"MetaString","c":"Bender2004"},{"t":"MetaString","c":"OBoyle2011a"},{"t":"MetaString","c":"Yap2011"},{"t":"MetaString","c":"Rücker2007"}]}}},"institute":{"t":"MetaList","c":[{"t":"MetaMap","c":{"address":{"t":"MetaInlines","c":[{"t":"Str","c":"Rastatterstrasse"},{"t":"Space"},{"t":"Str","c":"41,"},{"t":"Space"},{"t":"Str","c":"4057"},{"t":"Space"},{"t":"Str","c":"Basel,"},{"t":"Space"},{"t":"Str","c":"Switzerland"}]},"name":{"t":"MetaInlines","c":[{"t":"Str","c":"in"},{"t":"Space"},{"t":"Str","c":"silico"},{"t":"Space"},{"t":"Str","c":"toxicology"},{"t":"Space"},{"t":"Str","c":"gmbh"}]},"id":{"t":"MetaString","c":"ist"}}},{"t":"MetaMap","c":{"address":{"t":"MetaInlines","c":[{"t":"Str","c":"Seeblickstrasse"},{"t":"Space"},{"t":"Str","c":"4,"},{"t":"Space"},{"t":"Str","c":"8590"},{"t":"Space"},{"t":"Str","c":"Romanshorn,"},{"t":"Space"},{"t":"Str","c":"Switzerland"}]},"name":{"t":"MetaInlines","c":[{"t":"Str","c":"Zeller"},{"t":"Space"},{"t":"Str","c":"AG"}]},"id":{"t":"MetaString","c":"zeller"}}}]}}}
diff --git a/paper/outfile.epub b/paper/outfile.epub
new file mode 100644
index 0000000..b64e7d8
--- /dev/null
+++ b/paper/outfile.epub
Binary files differ
diff --git a/paper/outfile.html b/paper/outfile.html
new file mode 100644
index 0000000..d2a84a9
--- /dev/null
+++ b/paper/outfile.html
@@ -0,0 +1,822 @@
+<!doctype html>
+<!--
+Template created by Andrew G. York, based on this theme by Diana Mounter:
+https://github.com/broccolini/dinky, which mentioned that
+attribution is appreciated. Thanks, broccolini! -->
+<html lang="en">
+<head>
+ <base target="_blank"></base>
+ <meta charset="utf-8" />
+ <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" />
+ <meta name="keywords" content="mutagenicity, (Q)SAR, lazar, random forest, support vector machine, deep learning" />
+ <title>A comparison of random forest, support vector machine, deep learning and lazar algorithms for predicting mutagenicity</title>
+ <style type="text/css">code{white-space: pre;}</style>
+ <style type="text/css">@font-face {
+font-family: 'Arvo';
+font-style: italic;
+font-weight: 400;
+src: local('Arvo Italic'), local('Arvo-Italic'), url(data:font/ttf;base64,AAEAAAAPAIAAAwBwT1MvMndWZuoAAI1kAAAAYGNtYXD0B9CrAACNxAAAAdpjdnQgMkcp7AAAmLAAAAFsZnBnbXa9RMQAAI+gAAAGI2dhc3AATgAwAACf3AAAABhnbHlmv3UvLAAAAPwAAIbqaGVhZPoSAUsAAIm0AAAANmhoZWEQ9AaIAACNQAAAACRobXR42vc6dgAAiewAAANUa2VybgBCAD8AAJocAAACHGxvY2Eg0EKgAACICAAAAaxtYXhwA3QHFAAAh+gAAAAgbmFtZR65PXAAAJw4AAABpHBvc3RcxMQxAACd3AAAAgBwcmVwYHgNnwAAlcQAAALqAAIAjwAABZMF7AADAAcAAjAxASEBITchASEB7gOl/qL8Wn8C1QEx/SsF7PoUZgUfAAL/agAABYMF7AAPABIAkrkACv/gQEoMAU0LDAESCxIMpgESFAESDAEQAwQSBBECARIBNRIBEgQJChIKBKYJChQJCgQJCgkBAwJIERAQCg8BAQ1QDwgKAgkJBVAHCBUUWCsAP+0yLz8/7TIvERI5LzPtMgEvLy8QAMGHBSsQAMGHBX0QxAFdEIfExBCHxMQQAMGHBRgrEADBhwV9EMQwMQErJTMDIQMzByE3MwEhEzMHIQEhAwOXfyX9wr+IJv4UJ4MC+AFDnpYn/hT+owHLS6wBVv6qrKwFQPrArAKuArAAAwBLAAAFpQXsABYAIwAwAKVAVRsgDABNOgwBGRUeRjQVARUQEAErRjAKATAKQAqgCgMKMiUXGCQkGAECJAIYpgECFAECGAEBAU8BATABAQGpMQINFyNICgIQJSUCAVAWCAJQBAIVFFgrAD/tP+0ROS85EjntMjkBLxDsXXEARrYxKAIQAQEKKzwBLys8KxBIEADBhwUrEADBhwV9EMSHxMQBGBDWXXHtEjkvOV3tETMwMQBdASs3MwEjNyEyHgIVFAYHFhYVFA4CIyEBAyEyPgI1NC4CIwMDITI+AjU0LgIjcoYBDpQpAqZVhVsvkIRCR1WTxnH9UAHxcwFPQ25OKhovQyi4cQFKPGhNLRYtRC2sBJOtNmGGUI/MMzCUXGmsekICov4KK0plOzNTOyACnf4RJ0hkPS9RPCMAAAEAS//nBkkGCAApAEVAJjsOARcXFEYWHBERFgUKKUcAADAWARYrIUYKKhxKEQMmSgUJFRRYKwA/7T/tARDW7RDGXTIQ7RI5ETkRMxDtMi8wMV0BDgMjIi4CNTQ+BDMyBBczByEuAyMiDgIVFB4CMzI2NwVyOo6qxnKJ6aphO2yav997qgEJVZwp/uwWSWF4RYTgpFxIeJ5Wl+VXAUJSgVkvZ7b5kn3mxaFyPol5rDNWPSJruPWKc7mBRX19AAACAEsAAAYSBewAEgAhAJW5ABr/8LMMAE0LuP/gswwATQm4/+CzDABNCLj/4LUMAE0VDQ24/8BALwwATQ0QHEYwBgEGIxMUEBETERSmEBEUEBEUEBAQMBABEKkiERBQDggRUAACFRRYKwA/7T/tAS8Q7F0ARrYiKBEQEBAKKzwBLys8KxBIEADBhwUrEADBhwV9EMQBGBDWXe0SOSsRMzAxKysrKwEhMh4CFRQOBCMhNzMBIyEBMzI+BDU0LgIjAakCJYXXl1E/c6TI6H/9vieEAQ6DAVL+9NxTopN9WzQ3ZY9YBexlr+qEg+fDmWs5rAST+20sVHiYtmhhr4ZPAAEASwAABecF7AATAPxAbA0OCwwNDA6mCwwUCwsMCwt/BwEHDAIRBAMDpgIBFAIBAwICAn8CAQIVBgkKBQUKERIFEgqmERIUERIKERERMBEBEakUEjALcAsCCwEJSAcGB78HAQIHDAwHAgMSCxFQDg8IAQIEElAAAhUUWCsAP+0yPz8z7TIRFzkvLy9dETMQ7QEvL10vEOxdAEa2FCgSEBERCis8AS8rPCsQSBAAwYcFKxAAwYcFfRDEh8TEARDKXQBGtxQoARACAhQKKxA8ARgvKzwrEEgQAMGHBSt9EMQREgE5OV0ARrcUKAwQCwsUCisQPAEYLys8KxBIhwUQKxAAwYcFfRDEMDEBIQMjEyEDIQchAyETMwMhNzMBIwGbBExkzz395G8Bviv+RnYCFj3RZPvCJ4YBDpQF7P5PAQT+G6z9/gEG/k6sBJMAAQBLAAAF5QXsABEApEBEAwQBAgMCBKYBAhQBAQICAjACAQITBQoPEAUQCqYPEBQPEAoPDw8wDwEPqRIQAQlIBwIHAgcQD1ANCAECBBBQAAIVFFgrAD/tMj8/7RE5OS8vEO0BLy8Q7F0ARrYSKBAQDw8KKzwBLys8KxBIEADBhwUrEADBhwV9EMQBGBDGXQBGtxIoARACAhIKKxA8AS8rPCsQSIcFECsQAMGHBX0QxDAxASEDIxMhAyEHIQMzByE3MwEjAZcETmLFOf3abwIKJ/31dZkn/hQnggEOlAXs/lMBAP4ZrP4ArKwEkwABAEv/5wZJBggAMgBrQDs6LQE5DQEALi6mMTIUMTEyMRAyMjQdEBAXJEYJMxgYFUYXFzEyCAEuAC4vSDExKR1KEAMpSgQJABUUWCsALz/tP+0ROS/tMhESOT8BLzMv7TIvENbtEjkRMxDGLys8hxArfRDEMDEBXV0hNwYGIyIuAjU0PgQzMh4CFzMHIS4DIyIOBBUUHgIzMj4CNyE3IQMEgzJc/ZSJ6qpgOmyZv+B8X6KEYyCcKf7sFklheEVaoIhtTClFdp9aW6GFaCL+WSkCg6TefnlpuPiPfOTGoXM/LEhdMawzVj0iMFl7lqxcbbeESjNhi1iw/SsAAQBLAAAHsAXsABsA/EB5BbQGAUAGAQYGsQkBrgCxAxkKCQMECRoDGgSmCRoUCRoECQkJoAkBCR0PrhETSxQBFLEVrhcYCwwXFwwREhcSDKYREhQREgwREREODrFPEQEwEfARAhGpHBoSCwpIGUAYARgSFlAUAhENUA8ICQVQBwgaAlAAAhUUWCsAP+0yP+0yP+0yP+0yL10z7TIBLy8Q+F1x6S8ARrccKBIQEREcCisQPAEvKzwrEEgQAMGHBSsQAMGHBX0QxIfExAEYEO3pXTIQ6RDIXQBGtxwoGhAJCRwKKxA8AS8rPCsQSBAAwYcFKxAAwYcFfRDEEMTEARDp6RDpGC9dXTIwMQEhByMBMwchNzMTIQMzByE3MwEjNyEHIwMhEyMFxAHsKYn+9JUn/hQnhn78p32VJ/4UJ4YBDpQpAewpiWkDWmmUBeyt+22srAIh/d+srASTra3+NgHKAAEASwAAA5UF7AALAG1AMAeuCQ0BrgCxAwQJCgMKBKYJChQJCgQJCQkGBrEwCQEJqQwKCQVQBwgKAlAAAhUUWCsAP+0yP+0yAS8Q+F3pLwBGtwwoChAJCQwKKxA8AS8rPCsQSBAAwYcFKxAAwYcFfRDUAenpGM4Q6TAxASEHIwEzByE3MwEjAakB7CmN/vSLJ/4UJ5ABDo8F7K37baysBJMAAAH/tf8SA3EF7AAPAExAHQMEDA4DDgSmDA4UDA4EDAwMDBAODAkOUAACFRRYKwA/7S8vAS8QxgBGthAoDhAMDAorPAEvKzwrEEgQAMGHBSsQAMGHBX0QxDAxASEHIwEOAgcnPgI3ASMBhgHrKY3+8Q5ejFeoUHhjDAEHlgXsrfttKnuhVA9anY8mBHIAAgBLAAAHHAXsAAsAFwC5QFoFBQQKCwqmBgUUBgUKBgUEAAsFCwSmAAsUAAsEAAsLFQAAMAYBBhkPEBUWDxYQphUWFBUWEBUVFTAVARWpGBYECQsWFVATCBZQDAIGBgdQCQgAAANQAQIVFFgrAD/tMi8/7TIvP+0/7RE5Ky8BLxDsXQBGthgoFhAVFQorPAEvKzwrEEgQAMGHBSsQAMGHBX0QxAEYEMxdMi8SOS8QAMGHBSsQAcGHBH0QxBAAwYcFGCuHCH3EMDEBNyEHIwEBMwchNwEDIQcjATMHITczASMFbikBhSle/LsB1J4n/mkn/iu7Aewpif70lSf+FCeGAQ6UBT+trf2z/bqsrAJaAuat+22srASTAAEASwAABRwF7AAQAIBAOAkHCwoJCgemCwoUCwoHChALChIDBA4PAw8Epg4PFA4PBA4ODg4RDwsOUAwICgoACwgPUAACFRRYKwA/7T8SOS8/7QEvLxDEAEa2ESgPEA4OCis8AS8rPCsQSBAAwYcFKxAAwYcFfRDEARgQxi8rPADBhwUrEADBhwV9EMQwMQEhByMBITI2NzczAyE3MwEjAZsB7CmJ/vQB+SsvCC/JaPuXJ4YBDpQF7K37bS4ixf4/rASTAAABAEsAAAkUBewAGADiQGc1EgERIAwATRIRBwYSBgemERIUERESBgUUEwYTBU0UExQUFBMTAhAKCwumEBEUEBELEBAQEBoVFAIBFQEUpgIBFAIBFAIBAQIwAQEBqRkRAVAYCBMIERBQDggKCVAHAgUCUAQCFRRYKwA/7TM/7TI/7S8/P+0BLxDsXcYARrYZKAIQAQEKKzwBLys8KxBIEADBhwUrEADBhwV9EMQBGBDEAEa3GSgREBAQGQorEDwBLys8KxBIEADBhwUrfRDEERIBOYcYECsQAMGHBX0QxIcYECsQAMGHBX0QxDAxACsBXTczASM3IRMBIQcjATMHITczAQEjAwEzByFyiAEOlikBy8UDEAHZKYn+8p8n/hUnhAEK/ODnyv72oyf+FKwEk6366wUVrfttrKwEgvrSBSv7gawAAQBLAAAHRQXsABMAzEANAwQEphESFBEREhERELj/4EAyDABNERAQpgYFFAYGBQUFEgwPsQYHDA0GDQemDA0UDA0HDAwMCbEwDPAMAgypFBINCRG4/+BAGQwATRENUA8CDFAECggFCAMDElAQAAIVFFgrAD8y7TIvPz8z7T/tLysrLwEvEPxd7QBGtxQoDRAMDBQKKxA8AS8rPCsQSBAAwYcFKxAAwYcFfRDUARjtERI5L4cQK30QxAErAEa3FCgSEBERFAorEDwBGC8rPCsQSIcFECt9EMQwMQEhByMBIQEDMwchNzMBIzchARMjBVoB6yeI/sz++v5j+Zgn/hQnhQEPlikBoAGY9pQF7K36wQTn+8WsrASTrfsiBDEAAAIAS//hBiIGCAAXAC0AQ7kAFP/gQCkMAE0IIAwATR5GMBFAEWARoBEEES8pRmAFoAUCBS4kSgwDGEoACRUUWCsAP+0/7QEQ1l3tENZd7TAxKysFIi4CNTQ+BDMyHgIVFA4EJzI+BDU0LgIjIg4CFRQeAgLIgOevZz5wnb/adoDnr2c8bZu/3mJWnohvTitBdKBffN6oYkF0oB9is/2cg+nGnm47War3nYbwyqJxPcswWX2asmJtsH1DZLP1kWu3hkwAAgBLAAAFgQXsABQAIQB6QDgcRgYAsRUWDA0VFQ0SExUTDaYSExQSEw0SEhIQrk8SATASARKpIhMWDEgXFxMSUBAIE1AAAhUUWCsAP+0/7RE5L+0zAS8Q+F1x6QBGtyIoExASEiIKKxA8AS8rPCsQSBAAwYcFKxAAwYcFfRDEh8TEARgQ7dztMDEBITIeAhUUDgIjIwMzByE3MwEjIQMzMj4CNTQuAiMBmQJgV5BoOU6X35D3b5cn/hQnhAEOlAFjdeVRhmA0HDpaPgXsPGeKTmewgEn+G6ysBJP9/idLbkcqTz0lAAACAEv+ugYiBggALwBFAF6zNBkBFrj/2LMMAE0VuP/QQC4MAE0IIAwATSEmGDAEBUc3RjARARFHQUYFRiFHHUomDjxKDAMwSi1KGAAJFRRYKwA/Mu3tP+0/7RI5ARDW6RDUXe0REhc5MDErKytdBS4DNTQ+BDMyHgIVFA4EBx4DMzI2NxcOAyMiLgQHBgcTMj4ENTQuAiMiDgIVFB4CAlluv49SPnCdv9p2gOevZzZkja/McCpDQkoyOWcchxlUZWowMlFHQD9BJh8UsFaeiG9OK0F0oF983qhiQXSgFRNwr+eLg+nGnm47War3nYDkxaB1RgkNKSYbOTtFOFU5HBciJh0PBgMHAXcwWX2asmJtsH1DZLP1kWu3hkwAAAIASwAABYMF7AAfACwA2UAKixUBcAwBdAsBCLj/4EBpDABNhAsBDQ8SFA0UD6YSFBQSFD8SARISOxQBgAsBNAsBFAsdJ0YwBgEGLgCxICEXGCAgGBimHR4UHR4YHR0dTx0BMB0BHaktHgshIkhAFwEXFBcUHh0dGVAbCA8QUBIIICAeUAACFRRYKwA/7TIvP+0yP+0yLxE5OS8vce0yOQEvEOxdcQBGti0oHhAdHQorPAEvKzwrEEgQAMGHBSt9EMSHxMQBGBDtENZd7RI5OV1dXTMvXYcrEADBhwV9EMQwMQBdAStdXV0BITIeAhUUDgIHFhYXEzMHIQMmJiMjAzMHITczASMhAzMyPgI1NC4CIwGZAmlXjmU3N117RCc2AgaBJ/7bBgJub6N5lSf+FCeGAQ6WAWVs7Ut/XDQcO1s+Bew0XoNOUYlrTRYccE3+pKwBzX10/e6srAST/iciRmpHKkczHAABAA//4QVfBgIAQQBoQDomIytGFUA+RjkFBQoAAKAVARVDIR9GIyMKRjA0oDQCNEI+UEAfUCEPMCFAIUAhGgVKOQMmShoJFRRYKwA/7T/tEjk5Ly8SOTkQ7RDtARDUXe0zL/3NEMZdMi8SOREz/c0Q7RE5MDEBNi4CIyIOAhUUHgIXFx4DFRQOAiMiLgInIzchBwYWMzI+AjU0LgInJyYmNTQ+AjMyHgIXMwchBDgMIUhmOVODWjAmOkchu0hsSCRWm9qEd6VqNQdfJwEQEg6akkt+WzQiO08troiMTpXVh1WObUsRZSf+/ARxNVI5HSxMZTgyPigYDEQYQldvRm+4g0gzV3A+n0psaipLaT4wRjMlDzgrqoVmr4FJJkRgOqAAAAEAhwAABisF7AAPAOpAXwIBAaYMCxQMDAsMDAwMBQgJCgcICQgKpgcIFAcHCAgIpggBNAgBCBEJAwQEpgUGFAUGBAUFBdQFATAFAQIFEAsHBgwMAQ1QDwgIBw8FBQYPCAcCCwsDAgIKSAYCFRRYKwA/7TIvMjIvPz8SOS8REjkvEO0yMi8BLy8vEMZfXXEARrYQKAYQBQUKKzwBLys8KxBIEADBhwUrfRDEKxgQxgFdXQBGtxAoBxAICBAKKxA8AS8rPCsQSIcFECsQAMGHBX0QxBESATkZLwBGtxAoCxAMDBAKKxA8ARgvKzwrEEiHBRArfRDEMDElMwEhByMTIQMjNyEBMwchAVyMARD+kTXNXAVIXcw1/pD+8o4n/hWsBJzsAZD+cOz7ZKwAAAEAyP/nBrgF7AAnAOS5ACP/8LMMAU0guP/wswwBTQq4//CzDAFNCLj/4LMMAU0IuP/gtwwATSEfCSAguP/AQEcMAE0gHSMRFxgREhcSGKYREhQREhgREREwEQERKQFOALEGAyYjBiMDpiYjFCYmIyMjIygmEiMMSh0JElAUAhEDJlAAAhUUWCsAP+EyLz/hP+0vAS8vEMYARrYoKCYQIyMKKzwBLys8KxBIhwUQKxAAwYcFfRDEARjt7RDEXQBGtygoEhARESgKKxA8AS8rPCsQSBAAwYcFKxAAwYcFfRDEERIBOTkrETMzMzAxKysrKysBIQcjAwYGFQYeAjMyPgI3EyM3IQcjAw4DIyIuAjc0NjcTIwEaAewnjKEIDQEkTHZSU41yVx6imCcB7CeFpieBrNR8bbuHSwIMC6KQBeyt/UAjTzI3a1U0L22xggLAra39Lqv1nUlBe7JyLVkyAsAAAAEArwAABoIF7AAOAHZAQAQDDQwEDA2mAwQUAwMEDAsGBQwFC6YGBRQGBQsGNAUBBQUGMAMBAxAwBgEGDwYGClAIAgUIDQ0DAwJQAAIVFFgrAD/tMi8yLz8/7TIvARDGXRDGXRE5L10QAMGHBSsQAMGHBX0QxIcYECsQAMGHBX0QxDAxASEHIwEhAyM3IQcjEwEjBJYB7CeF/Rb+z4GLJwHrJ4xjAoWHBeyt+sEFP62t+28EkQAAAQCvAAAJywXsABQAskBiOhABExIEAxMDBKYSExQSExIRBgUSBRGmBgUUBgYFCA4PDqYJCBQJCA4JDxAGBw8HBqYQDxQQDwYQNAUBBxAFBRAHAwkDFgkVEAIJCQ1QCwIICAcIBgUIBAgDAlARAAIVFFgrAD8y7TI/Py8/Pz/tMi8/ARDGEMYRFzkvLy9dEMGHBCsQAcGHBH0QxBAAwYcFGCuHfcSHGBArEADBhwV9ENSHGCsQAMGHBX0QxDAxAV0BIQcjASEDASEDIzchByMTATMTASMH4AHrJ4r9Qf7jNf22/uNZmicB6yeERQKT1TECXZgF7K36wQST+20FP62t+4QFKfrXBHwAAf+/AAAGRgXsABsAjkBYFq4YGREaBRgSChMRGgsKEwwDBAwDBRgKGAUYphMKFBMTCgUdAa4MGhEapgMMFAMDDAAAsTADAQMdExMwEQERHBgTUBUCEVAPCAwFBQpQCAgDGlAAAhUUWCsAP+0yP+0yLy4/7T/tLgEQxV0yLxDSXekvhxArh33EAekQwIcYECuHfcQPDw8PARDpMDEBIQcjAQEzByE3MwMBMwchNzMBASM3IQcjEwEjBFsB6ylo/dkBHJYn/hUmidr+WHYn/hUneQJO/vSSKQHrKYLBAX6FBeyt/b39sKysAb7+QqysAm0CJq2t/m4BkgABAK8AAAYDBewAFADNQGkSEAwATXsLAQ9OEQ5ODAsSEQwRC6YSERQSCwoSERERCwoFBAsEBaYKCxQKCgsSEwMEEgQDphMSFBMSAxNwEQEyEQFyBAERBBMwCgEKFjATARMVBAkRDVAPCAoKBQlQBwITEwJQAAIVFFgrAD/tMi8/7TIyLz/tMhE5ARDGXRDGXRE5OV1dXRAAwYcFKxAAwYcFfRDEhxgQKxAAwYcFfRDEAEa3FSgSEBERFQorEDwBGC8rPCsQSIcIECsQAMGHBX0Q1AEY7RDtMDFdKxMhByMTASM3IQcjAQMzByE3MxMBI9YB6yd6rwGbeicB7Cd7/bZ4jSf+FCeNeP79kwXsrf4nAdmtrf1w/f2srAIHAowAAf/nAAAFnQXsAA0Ar0BRAgMDpgQFFAQFAwQEEAUEBA0HCAABBwEArwgHFAgHAAgBCAEICw0PCgkMCwoLCaYMCxQMDAsLCwsODAUECwgBAQJIDg0CCQhIDAIGCAUIFRRYKwA/Pz/tMj8Q7TIvETk5AS8vEMQARrYOKAwQCwsKKzwBLys8KxBIhwUQKxAAwYcFfRDEARgQxhE5OS8vEMGHBCsQAcGHBH0QxBEBMxgvLys8EADBhwUrfRDEMDEBASE3MwMhNwEhAyMTIQVu+4ACqTnPYvuqMwRv/Ww7z2QETgUS+6D8/lLnBFT+/gGzAAH/i/8AA6P/ZgADAAuzAnMABAAQ3u0wMQchByFdBAAY/ACaZgAAAgBp/+4EuQQnABYAKQCQQE05GgE9GQE/AQEQHRsRERsTEhESG1kTEhQTEhsTExMVTjATATATYBNwE6ATwBMFEyslUzAIYAigCAMIKhITUBYKEgYgVw0HF1cDCxcWWCsAP+0/7T8/7QEvENZd7RDUXXHtAEa3KigSEBMTKgorEDwBLys8KxBIEADBhwUrEADBhwV9EMSHDsTEMDEAXV1dJQYGIyIuAjU0PgIzMhYXNzMDMwchJzI+AjcTJiYjIg4CFRQeAgMQQ4dIVZRtP2av6YNLhCoNycihJ/6V0yVNRj4YgRpuWU2WdkokQFtGLStCcptZkfKuYC0kNvygrJoSHCUUAiohLz93rW5AZUYlAAACAFX/7gSoBhQAFwAoAHdASnQdARYQDABNORYBOwEBJFMwCaAJAgkqALQCGxwBHAEBWRYVFBYWFRYQFTAVQBVgFaAVBBUpFgkVChwfVxALGFcEBxZQAQAAFRRYKwA/Mu0/7T/tMj8rLxDOAV0vKzyHECt9EMSHDsTEAekYENZd7TAxXV0rXRMhAzYzMh4CFRQOBCMiJicHIwEjASIGBwMWFjMyPgI1NC4C/AGIh4aQVZRtPy5Udo6jWE2EKg/IAT7AAhFHjzx/Gm9aTZZ3SiRBWwYU/bdcQnKbWWGsknVRLC4kQAVo/hM5Mv3bITA/d6xuQGVGJgABAF//5wSGBCsALABOQC10AQE4FQErADApASkuFCoKU6AfATAfAR8tMCoBKilQKysaBVckBw9XGgsXFlgrAD/tP+0ROS/tAS9dENZdce0SORDUXczNMDEAXQFdAS4DIyIOAhUUHgIzMj4CNxcOAyMiLgI1ND4CMzIeAhczByMDmRA1RFArN31rRixKYjcoRj88HZEnYmxzOGatfUdmptFrMmRcUCB9HNEC2yg8KBQ5bqBnS3NOJw0fMiVtN00wFUmArWSI46RbEyk+KqwAAAIAS//sBREGFAAYACkAqUARFyAMAE07FwEBIAwATTsBARa4/+BARwwATQUcFh0THQ4AThwXF1kBAhQBAQICAgQETqACAXQCATACAQIrJVOgDgEOKgEcIFcTBxlXCQsCAgNQBQoXGFABAAAAFRRYKwA/P+0yP+0yLz/tP+0vAS8Q1l3tENhdXV3pLwBGtyooARACAioKKxA8AS8rPCsQSIcFECt9EMQB6RI5OREzETMwMQArAV0rXSsBIQEzByE3BgYjIi4CNTQ+AjMyFhcTIwEyNjcTJiYjIg4CFRQeAgObAXb+wawn/osPOX1IWZpzQmKp4YBQijNdr/6wP4c3fCV2VUuRcEUnRmEGFPqYrEMnMER4o1+K6qxhLigBk/syODYCGSsvP3SmZkNrSykAAgBz/+EEbQQrACMALgBhQD6/I88jAg4gDABNvwDPAAILRwwMFipTMCNwIwIjMCkAUyAWATAWoBYCFi8ATyMBI1UpKQgkVxsHCFcRCxcWWCsAP+0/7RE5L+1xMgEQ1l1x7TIQ1l3tEjkQ7TAxAHErcQEGBhUUHgIzMjY3Fw4DIyIuAjU0PgIzMh4CFRQGBwEiDgIHITYuAgE+AQIpSWU8UJExlCJecoFDYKd9R1uh3IBjm2w4Cwj+VjxpVkIVAk4BI0NeAeMOFAk/bE8tQT5sLUgzG0B6sXCB46liQ26QTDNfKQGeJkRcNj5fPyAAAAEAI/4pBFkGKQAbAF9AKhgSAxkYGRJZAxkUAxkSAxkZ/xkBGRz/AwEDGQ4QVwcAAxsWVRUABhUUWCsAPzLtMi8/7T8BL10Qxl0ARrYcKAMQGRkKKzwBLys8KxBIEADBhwUrEADBhwV9EMQwMRMzNz4DMzIeAhcHJiYjIgYHByEHIQEjASOo1CoWUG2ITzBRQjQSZxpbNVBwGSgBGin+6P7OywEx1QQMt2CIVigMEhUKmhEaWWysrPrJBTcAAv/b/ikEuwQnACcAOACPQEMRLBgDCCsAJiwsJhQSLBImWRQSFBQSJhQUFKsUAXAUARQ6gC8NDRI0Ux0wCAEIORIUDSNXGA4SBi9XDQcoVwMLFxZYKwA/7T/tPz/tEjkBLxDWXTLtEjkRMxoQyl1xAEa3OSgSEBQUOQorEDwBLys8KxBIEADBhwUrEADBhwV9EMSHDsTEEgE5OREzMDElBgYjIi4CNTQ+AjMyFhc3MwMOAyMiLgInNx4DMzI+AicyNjcTJiYjIg4CFRQeAgMPP4VNVZRtP2av6YNLhCoNy+4eZJC/eTd2cWQmgRhEUlsvSHZdRcdOiDmAGm5ZTZZ2SiRAW0AsJkJym1mR8q5gLSQ2/ACCt3Q2EiU4JpIaKyASH02D0jgwAighMD93rW5AZUYlAAABAGkAAASYBhQAGQDQuQAV//CzDABNE7j/4LYMAE05CQEHuP/gQGkMAE0OIDEBTTQOAQ1AMQFNNAUBGE4UFhkAFAAWWRkAFBkAABAZNBkBGRsDGwcLtA0GBwwHDAkIBwgMWQkIFAkJCAkQCIAIAaAIAYgIATQIAQgaCQAAAxYXUBkKA1cQBwwJUAsACAoVFFgrAD8/7TM/7T/tMhE5AS8vEMZdXV1yLys8hxArEADBhwV9EMSHDsTEAekREjkYEMxdLys8hysQAMGHBX0QxAEY7TAxAF0rXSsBK10rKwE2JiMiBgcDIwEjNyEDNjYzMh4CBwMzByEDqBxdbUOQQrLKAT7IKQGSkUmmWFCBURsWcpMn/qICgXZ4OjD8+wVorP2OOUQwYpJh/hKsAAACAJEAAAKPBfwABwAbAF9ANXQEAQROAQICWQUGFAUGBhAFBRwZUg0PUhcNFxJuCHsIAQgGFxcADQACA1AFCgZQAQAGFxZYKwA/Mu0/7TI/EjkvAS8zXRDtOTkQ7RDtEMYvKzyHK30QxAEY7TAxXRMhAzMHIRMjEzQ+AjMyHgIVFA4CIyIuAsgBg8imJ/6PyLroFSQwHBswIxUVIzAbHDAkFQQM/KCsA2ACGRswIxUVIzAbGzElFhYlMQAC/5L+KQKUBfwADQAhAHJAMhVvEx9vHRMdGG4ODgwDAQwKAwoBWQwKFAwMCgoKDCIKCiIHHR0AEwAHDgxQAQAGFxZYKwA/Mu0/PxI5LxESOQEvEMYARrYiKAwQCgoKKzwBLys8KxBIhwUQKxAAwYcFfRDEEQEzGBDtOTkQ7RDtMDETIQEOAwc3NjY3EyMTND4CMzIeAhUUDgIjIi4CuQGV/v4VUHKPVBBacBrWzPwVJDAcGzAjFRUjMBscMCQVBAz7qFuRZTgCkQ2MdAOZAhkbMCMVFSMwGxsxJRYWJTEAAAEAaQAABPQGFAATAM1AdqQNATkNAaAIAasFAa8DAQwKCAkDBAgEA1kJCBQJCAMJCgpZDQ4UDQ0OpA4BoAQBNAQBBA0OAxEVALQCDxABAg8QARIREBEBWRIRFBISERIQETARoBECERQSB6AGAQYIEQoOCgtQDQoJBFAGBgUGElABAAAVFFgrAD8y7T8/7S4/7TIvPwEvzV0yLxDOXS8rPIcQKxAAwYcFfRDEADk5hwXExAHpERIXOV1dXYcYECt9ENQAwYcFGCsQAMGHBX0QxAEYEM0wMV1dXV1dASEDMwE3IQcjARMzByMBIwMjASMBFwGD33ABVCUBUClr/nv6fSfb/sl6bMoBPrkGFPw8ASCcrP63/pOqAdX+KwVoAAABAGkAAAKaBhQABwBPQC5vCQEJAgC0AgEBWQYFFAYGBQYQBdAFATAFYAWgBQMFCAYCA1AFCgZQAQAAFRRYKwA/Mu0/7TIBLxDGXXEvKzyHECt9EMQB6RgQzF0wMQEhATMHIQEjAQgBkv7ArCf+igE+yAYU+pisBWgAAAEAkQAAB2wEHwAqAOVAgDoiAXQVAXUPAXICAXIBAR0eHyEdIR5ZHyEUHyEeIRAfHx8oFhWwERMWFxEXE1kWFxQWFxcQFqAWAY8WAXAWARYsASYnKCkmKSdZKCkUKCknKRAoKCspIRclAzQDAQMFKAohHAo1CgEKDR8KFxMUUBYKGlcNByNXBQcpUAAGFxZYKwA/7T/tP+0/7TIvPxI5XREzLz8SOV0RMwEvLy8Qxi8rPADBhwUrEADBhwV9EMQBMhgQxF1dXS8rPIcrEADBhwV9EMQBGO0REjkvLys8AMGHBSsQAMGHBX0QxDAxAV1dXV1dEyEHNjYzMhYXPgMzMh4CBwMzByETNiYjIgYHAyMTNiYjIgYHAyMTI8ABgxlHqV5qmiAlWGNtOVCBUhoWcpUn/qCVHFxuTow/rcuVHFxuTow/rcvIwgQMajtCVlcmPy4aMGKSYf4SrAKBdnhDO/0PAoF2eEM8/RADYAABAJEAAATABB8AGQCmQF91BwFzAgFyAQENsHcLAQkLDg8JDwtZDg8UDg8PEA7gDgGgDgEOG3AbAQEAtBUWFxgVGBZZFxgUFxgWGBAX4BcBFxoYDxQDNAMBAwUXCg8SCwxQDgoSVwUHGFAABhcWWCsAP+0/7T/tMhE5PxI5XREzAS8vEMZxLys8AMGHBSsQAMGHBX0Q1AHpM10YEMxdcS8rPIcrEADBhwV9EMQBXekwMV1dXRMhBzY2MzIeAgcDMwchEzYmIyIGBwMjEyO8AYcZR6leUIFSGhZykyf+opUcXG5OjD+ty8jGBAxqO0IwYpJh/hKsAoF2eEM8/RADYAAAAgBL/+cEhQQrABcAKwBeQDp0DwEPHQwdE3sDAQMnJwcTBwAiUzQMAeQMAbAM0AwCYAwBDC0YU2AAgACgAAMALB1XEwsnVwcHFRRYKwA/7T/tARDWXe0Q3l1xcXLtEjk5ETMROV0RMxESOV0wMRM0PgQzMh4CFRQOBCMiLgI3FB4CMzI+AjU0LgIjIg4CSytPb4aZUmewgEksT26HmlNoroBH0SlKaD5Ji2pBK0xnPUqJakABwVaeinBQLEl/q2JXoIpyUCxJgK1yRnNRLUByoGBGcFArP3GeAAACACP+KQToBCcAGAApAH1APyUWASUTASVTIAowCgIwCgEKKwIcHRITAQETE1kWFxQWFhcWFv8WARYqFxMUUBYOIFcPCxlXBQcXUAEABhUUWCsAPzLtP+0/7T/tMgEvEMZdAEa2KigXEBYWCis8AS8rPCsQSIcFECt9EMSHDsTExMQBGBDWXXHtMDFdXRMhBzY2MzIeAhUUDgIjIiYnAzMHIQEjJSIGBwMWFjMyPgI1NC4CvQGJDkWKS1WVbT9mr+mDTIUrU6sn/ocBN8YCj0aPPH8abVtNlndKJEFaBAxEMC9CcptZkfKuYC0k/pasBTcbOTH92yExP3esbkBlRiYAAgBL/ikEmQQnABYAJwCys0UWARO4/+hAXQwATUYTARsgEABNBBsBSxsBABobERYAGosRAQ8WAREWFlkTEhQTExITEzMVARVOQBMBcBPwEwITKSNToAgBTwgBCCiAKAESExRQFg4SBhsDEQYeVw0HF1cDCxUUWCsAP+0/7T8SOT8/7TIBL10Q1l1d7RDeXXHpXQBGtygoEhATEygKKxA8AS8rPCsQSIcFECt9EMQBcV0AOTmHBcTExAFdcSswMV0rXSUGBiMiLgI1ND4CMzIWFzczATMHIQMyNjcTJiYjIg4CFRQeAgLyQ4dIVZRtP2av6YNLgysPxf7Ltif+g2dFjjt/Gm1YTZZ2SiRAW0YtK0Jym1mR8q5gLSM1+smsAnE3MAIrIC8/d61uQGVGJQABAJEAAAQABBQAFwCsQFZxDwEDdw4Bdw0BdhABcQ8BAnAEAQECFwABAAJZFwAUFxcAAAB/AAE7AAEAGQUGDg4GCQoOCgZZCQoUCQoKEAkKGBcJAAAHAlcXBgpQDAYGB1AJChcWWCsAP+0yP+0/7RI5LwEvLxDGLys8hysQAMGHBX0QxIcOxAEQyl1dAEa3GCgXEAAAGAorEDwBGC8rPCsQSIcFECsQAMGHBX0QxDAxAF1fXV0BXV1fXQEjNyIGBwMzByETIzchBz4DMzIWFhcDvssdYYgseKwn/onIxikBhyEcQEdNJyQ0OzQC7npjUf34rANgrI4gNygXAgUHAAH/8f/hA+UEKwA8AKxAajsuAaktATMQAacuAS0rDg0tDQ5ZKy0UKy0OKysfKFOwEQERETkNDQpPAX8B7wEDAVM7LzkBezkBOT4KUy8vQB9wH+AfAx9THUAbAaAbwBsCoBuwGwIbPQ0rHTsdOx0WBVc0ByNXFgsXFlgrAD/tP+0SOTkvLxI5OQEQ1l1xcs3tcjMv7RDUXXLN7XIROS8RMy9d7RE5L8GHBCsQAcGHBH0QxDAxAF0BXV1dAS4DIyIOAhUUFhcXFhYVFA4CIyIuAicjNzMGHgIzMj4CNTQmJycmJjU0PgIzMh4CFzMHIwLtAR0zRSgoSDYfMzfBWFw/cJtcOGZXQRJqKdMFHjhNKytLOCE2ObhZYDRmmmY7ZE44EXApzwLsJzwpFRMmNiIoNRZFIIdgVoJYLBIlNySsJzwpFBYqPigmPxRDI4dUSnpYMBcoNR+sAAEAkf/nAwIFWgAbAE9AIAMLC1kYAhQYAgsYGBgYHAIYDlcUCwMCGwZVBQAGFxZYKwA/Mu0yLy8/7S8BLxDGAEa2HCgCEBgYCis8AS8rPCsQSBAAwYcFK30QxDAxEzM3NwMzByMDBgYVFBYzMjcXBgYjIi4CNxMjuq0900/aKdqEBQkxNTlQETViPD9oRBYTkKsEDPhW/rKs/dEUKRctJSGPGR0fR3NUAkwAAQCH/+4EmwQMACEBJ0CkdBoBNhoBehMBbRMBeRMBeRMBeRIBaxF7EQJ7EQF5EQE7HQE6DwE7CAEFBnoGAQYbCwMRHyF0AAEAsQEDBLABAgJZHyAUHx8gHx+PHwFPH38fAv8fAaAfAW8ffx8CHyMTERl0FgEWsRkXFBEZERdZFBEUFBQRERGAEQFPEQFgEaARwBEDESIgFBELFxRQFgYbV38LAQsLHwACUAQKIFABAAYXFlgrAD8y7T/tEjk/cu0/7TMSOQEvLxDCXXFyAEa2IigUEBERCis8AS8rPCsQSIcFECsQAMGHBX0QxAEY7V0REjkQxF1dXXFyAEa3IiggEB8fIgorEDwBLys8KxBIhwUQK30QxAHpMhDpXTIREhc5XREzMDEAXV1dAV1xcnFdcXJyXV0BIQMzByE3DgMjIiYnLgI2NxMjNyEDBhYzMjY2NxMjA0sBUMibJ/6kGCBKTUsgRHkpGSsYAhNfjCkBVHssUYM6WUkZhIgEDPygrGkhLx0OJyYZQ158UgGdrP3yuq4nRicCNgAAAQBf//AErgQMAA4Ah0BLNQQB+wABALQD+QcBB04FCwUEBVkKCxQKCwUKBAMNDAQMA1kNDBQNDAMNNwwBDA0ITgoQ/w0BDQ8MCwsLCgoJUAcGDQ0CUAAGFxZYKwA/7TIvP+0yLz8/ARDGXRDe6RI5XRAAwYcFKxAAwYcFfRDEEADBhwUYK4d9xAEYEO1dEOldMDEAXRMhByMTASM3IQcjASMDI4cBeylPPgGXVCkBeilP/a6wdGEEDKz9gQJ/rKz8kANwAAEAX//wBsYEDAAVAPa5ABH/4ECTDABNIw4BJAcBRgcBJAYBpAYBSQUBOAUBALQDDggHCFkNDhQNDggNEgUEBVkQEhQQEhAPBwYQBgdZDxAUDw8QBAMDWRQTFBQTAxQyDwEPDSATAaATARMTFAq0DRcgFAGgFAFrFAEUFgQGAWQGAUIGAQYHMAQBBAQCEwsSCw8LDgsNDQxQCgYGBgUGFBQCUAAGFxZYKwA/7TIvPz8/7TIvPz8/PxI5L10zAS9dXXEQxl1dcRDW6RI5L11xEjldEADBhwUrfRDEhxgQKxAAwYcFfRDUhxgrh33EEADBhwUYK4d9xAEQ6TAxXV1dcV1xcSsTIQcjEwEzEwEjNyEHIwEjAyMBIwMjiAF7KVAhAaDAKQFOYCkBeyla/h7EJQT+YsVKaAQMrP2QAxz85AJwrKz8kAMa/OYDcAAAAf/dAAAEjQQMABsBWUDaMB0BJBoBJRkBrxEBdhABKwwBcwkBA6QDAakXAaYQAasCARk2GgEasBgSqxMBKxM7EwITERcYDwMWEBgPCBF3CQEJAQoIEQIBCgMWAxYRCAMIEVkWAxQWAxEWEQoJC6kMAQy0Da4PG04Bdw8BDxgBCg8KAVkYDxQYGA/7CgEpCjkKqQoDCgoJCKQYAaYYAXQYASYYNhgCGB0JBwZOpAgB9AgBCBwJFE77FgF2FgEWBKYFAfQFASAFMAUCAgWwAxgYAQEZUBsKFhVQEwYKCg5QDAYICARQBgoXFlgrAD/tMi8/7TIvP+0yP+0yLzIvAS/pX11dcTIvXV3tKxDVAV1x7TIrEMQBXV1dcRErOS8BXV2HECsQAMGHBX0QxAFdGBDtEO3pcTIrEMwQAMGHBSsQAMGHBX0QxA8PAF0PDwEYEMVdcTIQ6V0yMDEAcXFxAXFfXV1dcV1dXSUzJwczByE3MwEDIzchByMXNyM3IQcjARMzByECckuS7UAm/oUnVQGF42wpAXspQonhSSkBeylK/orqXyf+hazu7qysAW0BR6ys3t6srP6r/qGsAAH/9v4pBLsEDAATAIW5AAT/4EBDDABNNAQBALEDCgsQBQoFC1kQBRQQBQsQBAMQBQNZEhEUEhEDEgQREAUQEBIUBREKEFAODgUFCVAHBhISAlAABhcWWCsAP+0yLz/tMi8/7T8BLxDGMi99h8QOxBAAwYcFGCsIfRDEEADBhwUYKxAAwYcFfRDEARgQ7TAxAF0rEyEHIxMBIzchByMBMwchNzMTAyOUAXspTz0BmFUpAXspV/0bZSv+ZitluXJiBAys/YECf6ys+3WsrAEiA2kAAAH/8QAAA/0EDAANAFtAMToHATsGAQsPCAcBAAgAB1kBABQBAAcBAA5vAY8BAgEECwQLAQAJVQ4NCgFVBQYXFlgrAD/tPxDtMhE5OS8vAS9dEMUQAMGHBSsQAMGHBX0QxAEYEMYwMV1dNwEhByMTIQcBITczAyEKAs7+ryPFSAMWGv02AW4pxE78y3UC+JQBM3n9DbL+rgAAAf/9/qwBqAEbAAMAQkAiPwUBBQIBAAMCAwFZAAMUAAMBAAMENAB0AAIAAwR/AAEAEQA/XRDOAS9dEM4QAMGHBSsQAMGHBX0QxAEYzl0wMRMXASfN2/8AqwEbVv3nQwAAAQCJAfAC7AKcAAMAC7MCcwAEABDe7TAxEzchB4koAjsoAfCsrAABADL/8AE6APoAEwAsQBYHDW8PEQNvBQ8FABUKbmAAAQAUBQ8LAD/NARDWcf3GEjk5EOkyEOkyMDE3ND4CMzIeAhUUDgIjIi4CMhUkMBwbMCMVFSMwGxwwJBV3GzAjFRUjMBsbMSUWFiUxAAACAI//7gVYBgQAFwAvAE1ALQgJGAAkDBMUOwkBNBQBFAwACQQFH0YwEQERMStGMAUBBTAkSgwDGEoACRkYWCsAP+0/7QEQ1l3tENZd7RIXOV1dETMRMxEzETMwMQUiLgI1ND4EMzIeAhUUDgQnMj4ENTQuAiMiDgQVFB4CAlJ2q240L1uFrNJ6eKttMjBdhqzQYU6NeWFFJRs9ZUtNjXhiRSYbPmUSTom7bG7y6dKfXlONu2lz8+jOm1u4T4Wtu7xSR4FhOVOLsr+8T0Z7XDUAAQCPAAADTAYXAAoAj0BFPwwBPwsBKwI7AgIrAgEHBgIBBwEGpgIBFAICAQEBPQIBAwIFBAMEAmoFBBQFBQQEBAIBCwUCNAQBBAUBUAoIBgUCGRhYKwA/Mz/tEjldAS8vEMQSOS+HBBArEAHBhwR9EMQAXUa3CygCEAEBCworEDwBGC8rPCsQSIcFECsQAMGHBX0QxDAxAF0BXV1dNzMTBTclMwEzByG2k/7+qS8B3VD+wJYn/hSsBFWn0ez6lawAAf/sAAAEdwYGACQAZ0A2NCABOh8BIiUbISABACEAIGoBABQBACABAQZGGyYQRhEAABElEREWIyIiAEgjCAtKFgMBGRhYKwAvP+0/7TIvERI5LwEQxDIvEO0Q1O0yL8GHBCsQAMGHBX0QxBESATkwMQBdAV03AT4DNTQuAiMiDgIHIz4DMzIeAhUUDgIHASEHIQ4CqCdYSjEeN08xM19PPBDPGGmQrlxVjGU3FTdiTv2nAm0n/ISaAn8lUlxjNilHNR4hP109Z6RxPDlig0o7ZGZzSf3PrAAAAQAV/+EEeQYKAEgAULkAJv/4QCsMAE08RiQkAEYwGgEaSgpGPxABEDNGMDEBMUlCSEREBTdKKQQFShUDGRhYKwA/7T/tETkv7QEQ1F3t1l3tfC8Y1F3tMy/tMDErATQuAiMiDgIHDgMHJz4DMzIeAhUUDgIHHgMVFA4CIyIuAicmJjczHgMzMj4CNTQuAiMjNzMyPgIDqiE7UzI+YEcuDAIBAgMCyQ9ciK9iWJdvQB9Fbk4hOSoXVpnRfEeHb00NBgYCyAEhPlk5Sn1aMyI8UzJZI0pLfVoyBH8rUT4lIDZFJQUFBgoJAluTaDczX4ZUPXVnUxwQNUhWMXXHklMpS2tCGjgfMFM/JDhhgUkxUTkgnS5NZQABABQAAARYBewAEgCJQD0GCxAFBgULahAFFBAFCxAQEDAQARAQAAEDAgJqAQAUAQACARQAEwUJEUgHAwcAAAcHARBtDggFDAECGRhYKwA/Pz/tEjkvMy8RMxDtMgEvEMQQ1ADBhwUrfRDEERIBORgvXQBGtxMoBRAQEBMKKxA8AS8rPCsQSBAAwYcFKxAAwYcFfRDEMDETATMBITc3AzMHIwMzByE3MxMhOwLw5/0YAYg6yD3hKeA+kSf+FCeWPv2KAlQDmPx2+g7++Kz+9qysAQoAAAEAFP/hBNEF7AAsAHlAODYAARRHGg8PCBYWKB9TCCouLAAAaigpFCgoKSgoKC0pLCtIOSgBKA8pAhYkGkoPACRKJwMHGRhYKwA/M+05L+0ROT8SOV3tMgEvEMQARrYtKCkQKCgKKzwBLys8KxBIhwUQK30QxAEYEMbW7RI5LxI5ETPtMDFdATY2MzIeAhUUDgQjIi4CJzceAzMyPgI1NC4CIyIGBycTIQchAZ84c0lbnnRCMVV1h5RLXZx3Tg+3Cy9KZEFGim5FJkZiPFGSOJq5A2Ap/VwDjh8gPG+cX2CggmFCITJYeEZOLVI/JjRjkl84YEcpOC8dAxOtAAIAfP/2BKAF7AAZAC0AT0ApAQAZGAEYAGoZGBQZGAAZGAQTKUYJLx9GEy4ZGA4ZAiRKDhpKBAYZGFgrAD/tL+0/EjkBLxDW7RDW7RI5ORAAwYcFKxAAwYcFfRDEMDEBATY2MzIeAhUUDgIjIi4CNTQ+AjcBAyIOAhUUHgIzMj4CNTQuAgQv/kMmOBZgonZCZafadWmpd0AYNVU+Ad98ZKJcGSZIZ0JKiWpALk5mBez95QsGQnOcWoPVl1JEdZpXN3F7h00CVf1bX4p2PjliSCk5aZZcQGdIJgAAAQA9AAAFDgXsABQAR0AkCxYHRAkVEQwGAREBDGoGARQGAQwGAQESUBQICFAGSAoCGRhYKwA//e4/7TIBLy8AwYcFKxAAwYcFfRDEARgQ1u0QxjAxNzM2GgI3IQcjEyEHBgoCBzMHIWSKXNHQw0/9wyDDSAPpImHT1cxZkif+FKyeAUQBMgESbYkBNpaC/t3+zv7GmawAAwBm//AEtgYIACMANwBLAJe5AEn/8EAYDABNKyAMAE0dKAwATRkQDABNOyAMAE0xuP/gQAkMAE0dMAwATQu4/8BAMwwATSkSEhcuRg1NRwAAH0JGBk1LRj8fAR8fJEYwFwEXTAocHDJIPT1HKUoSR0oAAxkYWCsAP+0v7RE5L+05GS85ARgQ1l3tMy9d7RDW7RI5ETMQ1u0SOREzMDEAKysrKwErKysrATIeAhUUDgIHFhYVFA4CIyIuAjU0PgI3JiY1ND4CARQeAjMyPgI1NC4CIyIOAhMUHgIzMj4CNTQuAiMiDgIDTE6FYTYmRF03RlJYnNd/YpprOTJZekkyOFSNu/5DIT9bOVWJYDQjQFg2S4hmPNcdNUsuOW5XNRwzSi4+cFYzBgg1Xn9KPnJjUh43nlpsv41SQG6QUU2NeF8fMH9GXaV7R/uHNVc9Ijddd0EwVT4kNVp3AnkpRzUeLExlOCtINB0uTGUAAAIAuAAABNwF+gAZAC4AT0AoGBkAARgBGaYAARQAARkAAAkgRhMwKkYJLwEaSgEBACVKDgMACBkYWCsAPz/tEjkv7QEvENbtfS8Y3u0SOS8AwYcFKxAAwYcFfRDEMDEhAQYGIyIuAjU0PgIzMh4CFRQOAgcBEzI2NzY2NTQuAiMiDgIVFB4CAScBvyY5FWCidkJlp9p1aal3QBg1Vj3+H355rjsOCyZIZ0JKiWpALk5mAh8MBUJznFqD1ZdSRHWaVzdxe4dN/acCqXiAKFIrOWJIKTlpllxBZkgmAAACAMb/8AMGBikAAwAXAFlAIw5uBAQYAwIBAAMCAwGmAAMUAAMBAAMDAxgAAwkTCQAQFRRYKwA/P93OAS8QxgBGthgoABADAworPAEvKzwrEEgQAMGHBSsQAMGHBX0QxBESATkYL+0wMQEhASMDND4CMzIeAhUUDgIjIi4CAgIBBP7IslYVJDAcGzAjFRUjMBscMCQVBin7cf7dGzAjFRUjMBsbMSUWFiUxAAUAFP/nBm4GBAATACcAKwBBAFMAakA5RnAtInAJLQkTTnA4VRlwE1QpKisoKSgqpisoFCsoKygdqg5TqjIOMg4yBEmqPQsrCCoIKAAmqgQAAD/tPz8/P+0SOTkvLxDtEO0BLy+HKxAAwYcFfRDEARgQ1u0Q1u0SOTkQ7RDtMDESPgIzMh4CFRQOAiMiLgI1JA4CFRQeAjMyPgI1NC4CIyUzASMlND4EMzIeAhUUDgIjIi4CAA4CFRQWMzI+AjU0LgIjoEFxl1Y+aU0rP2+ZWUBpSyoBXk49JRMkMiAoTjwlFCMyHgNm4fqI4gM4HjZMXGo5PmlNKz9vmFpAaUsqAV5NPCVIPyhOPCUUIzIeBKOOaz8uTWM2TI1sQC1MYzbjHzZIKR80JhUhOEspHTIkFM357P9BY1ZINBwtTWM2TI1tQS5NYgEZHzZIKj5PIThKKh0xJBUAAAMAS//hBO8GCAAwAEQAWgCmQFw5UAE6KgE2IgE8GAE7FwE6FgE/DgE7DQFXUkhGIFJGFScoLzBVVTAAElUSMKYAEhQAEjBBQAEAEgASFRULIAYLjwABNAABAFw2RgtbEEFXElc7TUoaAztKBgsACAA/P+0/7RE5ORDNOQEQ1u0Qxl1dEjnEETkvORB9hw7ExAXEAMGHBRgrEADBhwV9EMSHDsTExAEYEO0Q7RE5MDFdXV1dXV1dXQUnDgMjIi4CNTQ+AjcuAzU0PgIzMh4CFRQOAgcGBgcTNjY3MwYGBxcBDgMVFB4CMzI+AjcBBgYHATY2NTQuAiMiDgIVFB4CFzY2NwQzmjFsdoFFUYhkOEBph0cTLCYaR3mkXUd8XDUgPVs6JU0p4jBHF7QmbEbC/PErTDkhIDtTMjNfWFEk/usXLBYBfSY6HDBCJjdgRikRIC4cPXExFNUyUjshPGmNUVORdlodGj1LWzhYl29ANFlzP0VrV0klGSoU/uBLkTtl1WP3AjESPU5bLzBTPCIcMUQoAXIJEQkBayJcNiVCMh0mQlgzIjs6PSQaPSoAAQCWBCMBlAYtAAMAFLcDAQQBAQQCAAA/EjkvARDWzTAxASMTNwETfUe3BCMB/gwAAgCjBCMCvwYtAAMABwAgQA4HBQMBCAUBBgABAQgCAAA/EjkvPxEzARDW3d7NMDEBIxM3EyMTNwEgfUe3nXxHtgQjAf4M/fYB/gwAAAEA7/6PA+wGtQAVAC9AGAAFFwoWCxBRMAUBBRYNBQgICgAADhUUWCsAPz85LzkzARDWXe3METkREjkwMQEuAzU0GgI3FwYGAgIVFB4CFwGwLUgyGlis45p8i8aTThMmOib+j062xM5oywFxAU8BHYB8gPP+zv62tFy1qZtDAAH/k/6PAqMGsAAVABdACgoWBVEQFgoOAAAAPz8BENbtETkwMQEeAxUUCgIHJzYaAjU0LgInAeIuSDEaYLH4mG+F2JdSEyc6JgawTrXFzmjB/qL+vP7RkW+CARgBKwE+qVy0qptDAAEAZQN9AygGCgAOAEi5AAb/8EAjDABNDRA0CgEKDwcADAkKCgMJAgIJBQUJDX8HzwcCBwcPDQAAPxI5L10SOTMvETMvETMzLxDJMgEvEMJdETkwMSsBJRcFFwcnByc3JzcXNzMCGAEEDP7/ZX1iuG2+4ULhN5IFFE6JTMpGysJSx056T/MAAQBlALoEjgS6AAsAgEA6MgkBNQgBCAMCCQgJA1kCCRQCCQMCCQkJCQkAAgIABQ00AAEADAcyCgEKCwZIBT8JAQAJAAkMAhUUWCsALxI5OS8vXTPtMgEvXTMQxF0QzhE5LxErOS8ARrcMKAIQCQkMCisQPAEvKzwrEEgQAMGHBSsQAMGHBX0QxDAxAV1dEyETMwMhByEDIxMhjAGgYsNiAZ8n/mBiwmL+YAMSAaj+WKz+VAGsAAAB/54AAAUHBhQAAwA+QBUFBAECAwABAAKmAwAUAwACPQMBAwC4/+C3DABNAAMIAAAAPz8BLysvXQDBhwUrEADBhwV9EMQBGBDMMDEBMwEjBA/4+4/4BhT57AACAGL+Bgh6BdMAVABnAM+5AFr/8LMMAE0UuP/wswwATQG4//BADgwATUAgDABNMhAMAE0ZuP/oQFAMAE0NGAwATQACWlQAVAJZWlQUWlQCWlpaWj4pN0RQFgpGMDcBN2ljU0kWRjApASloVFoSBVc+PlVXRApbXldQUClUVCIPSjACG0oiDhUUWCsAP+0/7RI5LzkzL+0yP+0zL+0/AS8Q1l393u0Q3l3tETk5ERI5OQBGt2goVBBaWmgKKxA8AS8rPCsQSBAAwYcFKxAAwYcFfRDEMDEAKysrKwErKysBAwYWFjMyPgI1NC4CIyIOBBUUHgIzMjY3FwYEIyIuBDU0EhI2JCQzMh4EFRQOBCMiJicGBiMiLgI1ND4EMzIWFzcBMj4CNxMmJiMiDgIVFB4CBpGaChEoIVSHYDRerfOUgvzjwIxPXKnvknPkaTmA/v6Od9a2k2c4XqfnAREBMZ+A4byTZjUmR2eCm1hhcBdIqlxZkmc5LVFvhJNMTYQzFf5HL1dMQRlAFXpaSIVmPSA8WAO8/WkzPCBblLxhiuipXkN8r9f5iYvysmc9OJ1FSzxumbnUcqcBLwEC0ZNPOmmUssttWq+dhWE2Sj41O0FukVBNjXhiRSUsKVv9BRgqOiMBEEJQOmB9QzBVPiQAAAEAFv8rA3oGuAAHAFNAIQZOAwQHAAMABKYHABQHAAQHBwcHCAAFSAcSAkgAEBUUWCsAP+0/7QEvEM4ARrYIKAAQBwcKKzwBLys8KxBIEADBhwUrEADBhwV9EMQBGO0wMQEhByMBMwchAdIBqCLc/orbI/5YBriX+aKYAAABAGX/5wJVBi0AAwArQBQBAgMAAQACWQMAFAMAAgMAAwgAAAA/PwEvLwDBhwUrEADBhwV9EMQwMRMzASNlogFOogYt+boAAf+1/ysDGQa4AAcATkAfAwQHAAMABKYHABQHAAQHBwcACAcHSAUSAEgCEBUUWCsAP+0/7QEvEMYARrYIKAAQBwcKKzwBLys8KxBIEADBhwUrEADBhwV9EMQwMQEjNyEBITczAircIwGo/kT+WCPbBiGX+HOYAAEA2wEfAuEDIwATABK3CqEAFA+iBQYAP+0BENbtMDETND4CMzIeAhUUDgIjIi4C2yhGXjY2XkcpKUdeNjZeRigCITZeRigoRV82N15FKChFXgABALL+jwV2BewAEwCUQDkLTg0ODxANEA6mDxAUDxAODw8PEAYREhKmEwAUEwASExMTMBMBExQPAAAAChQTEg8SERBQCgAVFFgrAD/tMj8/ERI5LwEvLxDGXQBGthQoABATEworPAEvKzwrEEgQAMGHBSt9ENQBGM3OAEa3FCgQEA8PFAorEDwBLys8KxBIEADBhwUrEADBhwV9ENQBGO0wMQEuAzU0PgIzIQcjASMBIwEjAgdPflkvWJ/dhgJqKV7+dbsBi9/+dboCvgY1VXJEcrV+Q635UAaw+VAAAf/Q//gFAAYpAEAAhbkABf/wQDoMAE0uARY0UwwMJ1MWQj0/AQI9Aj9ZAQIUAQI/AQEBAUECESxKLgIuAjkBUEFACCJKGwk5SgcDFRRYKwA/7T/tPxDpETk5Ly/tOQEvEMUARrZBKAIQAQEKKzwBLys8KxBIEADBhwUrEADBhwV9EMQBGBDW7TMv7RESOTAxACsnMxM+AzMyHgIVFA4CBx4DFRQOAiMiJic3FhYzMj4CNTQuAiMjNzMyPgI1NC4CIyIOAgcBIQnD6RVVe6FiVIliNiM3RCEiPC0ZYqjifxQ2FCsUIhRLjm9DKERaMlAsSy1VQigbM0kuMFZGMgz+9v5yrAPwXJNnNzdhhEw/ZE88GBtFU2A1gNOWUgMDuAUDN2OHUDlfQyW6HzpRMyhEMRwjPlYz+3sABABm/+cHGQaWABsALwBPAFgApkBnSkh6SAI7SAF7KQF8JAFGREN0QwFDVUQ/OgE6JkYfLSMpdC0BMi0BPikBKQctAwAOWk9aAVEwTgFOp0xEMzCnTzIBMhxGAFk/S0hSUk41RE1NMF1GTiFKFQkzoFABUHA1gDUCNStKBwAv/d5dzV0yP/3eMu0yETMREjkv7TkBENb93l3uMv3tXTNdEN4RFzldXV0RMxEz/d5d7TNdEO0wMV1dXV0TND4EMzIeBBUUDgQjIi4ENxQeAjMyPgI1NAImJiMiBgYCATMRIzUhMh4CFRQOAgcWFhcXMxchJyYmIyMVMxUhAREzMjY1NCYjZj1vnL7bd3bcv51wPT1wnb/cdnfbvpxvPbVpt/aNjfW5aWm59Y2N9rdpARBiZgHjSXZSLRQpPCcfMQwpUgL/ADMOZE9DXP6FAR+PSlhTVwM/dtu+nG89PW+cvtt2d9u+nG89PW+cvtt3jve3aWm3945eATGsaWms/v3+OwKenipKZToxTDssERFHNKie/lRK/p4DPP78PUQ+RQAAAwBm/+cHGQaWABsALwBVAHRARjU7ATU1ATBVAXVTAXpDAX1BAT5BAUYzUFAcJkYfLSMpMi1yLQJ9KQE+KQEpBy0DAA5XOEZLHEYAVj1KRiFKFQkzSlArSgcAL/3e7T/93u0BEN793u0Q3hEXOV1dXREzETPtETkRMzMwMQBdXV1dXQFdXRM0PgQzMh4EFRQOBCMiLgQ3FB4CMzI+AjU0AiYmIyIGBgIlJiYjIg4CFRQeAjMyNjcXDgMjIi4CNTQ+AjMyHgIXZj1vnL7bd3bcv51wPT1wnb/cdnfbvpxvPbVpt/aNjfW5aWm59Y2N9rdpA4swaTpAcFMwMFNwQDhpH4YXSFZhMGm3iE5OiLdpOmdZSR0DP3bbvpxvPT1vnL7bdnfbvpxvPT1vnL7bd473t2lpt/eOjAEDrGlprP79WC4qMVZyQEBwVDAtI4EeNScXToi3aWi3iU8ZKTUcAAACADcArAPjA74ABQALAMBAZDQLATQFATYAAQ2AAAEABQFZAgMUAgMBAgcFAAMEBQQAWQMEFAMEAAMECwMLBgkKCwoGWQkKFAkGBwkKBgcICQYJB1kICRQICQcICQx/CgE7CgEKCAkICQgKDAMCAwIEDAoGBAYAPz8REjk5Ly8REjk5Ly8BLy9dXRDGEADBhwUrEADBhwV9EMSHCBgQKxAAwYcFfRDEARjGEMYQAMGHBSsQAMGHBX0QxAEYENYAwYcFKwh9EMQBGhjOMDFdXV0BEyMDATMBEyMDATMCoYO6iwE/xf0Wg7qLAT/FAiH+iwGLAYf+Y/6LAYsBhwACAA4ArAO6A74ABQALALJAWggJBgcIBwlZBgcUBgkKBgcHBQoJBgsKCwlZBgsUBgsJBgsEBgQDAAUEBQNZAAUUAAMCAAUFDAIDAAECAQNZAAEUAAEDAAF/AAEABgsGCwcMAAUABQEMBwYBBgA/PxESOTkvLxESOTkvLwEvXS8QAMGHBSsQAMGHBX0QxAEYEMaHCBArEADBhwV9EMQBGMYQxhAAwYcFKxAAwYcFfRDEEgE5hwgYECsQAMGHBX0QxDAxAQMzEwEjAQMzEwEjAU+Du4v+wMQC6YO7i/7AxAJKAXT+df55AZ4BdP51/nkAAwD2//AG8AD6ABMAJwA7AGRANTkrby0vNW83LTcoPTJuKB4lF28ZGyFvIxkjHm4UChEDbwUHDW8PBQ8KbgA8NwstIwsZDwsFAC8/Lz8vPwEQ1u05ORDpMhDpMhDe7Tk5EOkyEOkyEN79zhI5ORDpMhDpMjAxNzQ+AjMyHgIVFA4CIyIuAiU0PgIzMh4CFRQOAiMiLgIlND4CMzIeAhUUDgIjIi4C9hUkMBwbMCMVFSMwGxwwJBUCeRUkMBwbMCMVFSMwGxwwJBUCeRUkMBwbMCMVFSMwGxwwJBV3GzAjFRUjMBsbMSUWFiUxGxswIxUVIzAbGzElFhYlMRsbMCMVFSMwGxsxJRYWJTEAAAEAAAHlBCgChwADABtACwEBAgUAAAMEAnMAAC/tARDEMi8QxDIvMDETIQchKAQAKPwAAoeiAAEAAAHlCCgChwADABK2AgUDBAJzAAAv7QEQxBDEMDETIQchKAgAKPgAAoeiAAACALID0wQeBhsAAwAHADS5AAX/4LMMAE0BuP/oQBMMAE0BoQMDBaEHCAMHBwgEAAAAAD8/EjkvMwEQ1u0yEO0wMSsrARcBJwMXAScDn3/++LZtgf70tgYZQP36UAH4Qv38TgAAAgCdA9MECgYbAAMABwAkQBEHoQUFA6EBCAUBAQgCBgACAAA/PxESOS8zARDW7TIv7TAxAScBFxMnARcBGn0BCLlofQEIuQPTQQIHUP4IQQIFTgAAAQCyA9MCcAYZAAMAJbECAbj/4EAPDABNAaF0AwEDBQMDBAAAAD8ROS8BENZd7Ss5MDEBFwEnAfF//vi2BhlA/fpQAAABAK8D0wJwBhsAAwAYQAoFAaEDBAMDBAAAAD8ROS8BENbtxjAxARcBJwG3uf68fQYbUP4IQQABAEYArAJKA74ABQBfQDEAAQAFAVkCAxQCAwECAgYHBQADBAUEAFkDBBQDBAB0AwEDBn8EATsEAQQDAgMCBgQGAD8SOTkvLwEvXV0Q1l0AwYcFKxAAwYcFfRDUARjGEjkvAMGHBSsIfRDEMDEBEyMDATMBCIO6iwE/xQIh/osBiwGHAAABAB0ArAIhA74ABQBiQDMEAwAFBAUDWQAFFAADAgAFdAUBBQYCAwABAgEDWQABFAABAwB0AQEBfwABAAAFAAUGAQYAPxI5OS8vAS9dL10QAMGHBSsQAMGHBX0QxAEYEMZdhwgQKxAAwYcFfRDEMDEBAzMTASMBXoO7i/7AxAJKAXT+df55AAL/oAAABFYEWwALAA8AcUAxNAkBNAgBNAcBCAMCCQgJA1kCCRQCCQMCCQkACQkCEAkMSA4FAEgGBgoKAg4IAhUUWCsALz8SOS8zL+0yEP3OARDMK9wBzABGtxAoAhAJCRAKKxA8AS8rPCsQSBAAwYcFKxAAwYcFfRDEMDEBXV1dEyETMwMhByEDIxMhAyEHIVYBo063TgGmK/5bWLZX/lxkBAAn/AADAwFY/qi2/p4BYv5frAAAAQB7AmYD8AMSAAMAFLcABAUCAnMABAAQ3u0BL8YQxjAxEzchB3snA04nAmasrAAAAgAiAAAGQQXZABsAHwC4QF0EHxwTFAMDFBUCAwIUphUCFBUCFAEaGRYVAhUICwwPEAcHEBEGBwYQphEGFBEGEAUeHRIRBhEGAh8aCx5IBAgFAQAEFhIPE0gdHBkMHT8dAQQdBB0CFQgRCAYAAgAAPz8/PxI5OS8vXREzMzMQ7TIyMhEzMzMzEO0yMjIBLi4vfYfExMTEAMGHBRgrEADBhwV9EMSHxMTExAEYL32HxMTExADBhwUYKxAAwYcFfRDEh8TExMQwMQEzEzMDIRMzAzMHIwMzByMDIxMhAyMTIzczEyEBIRMhAXbwh8mGAWaGyYbiWtHA81jkpcum/pulz6fvXN3B/wABCwFlwf6aBKABOf7HATn+x6z+Paz+ewGF/nsBhawBw/49AcMAAf/5AMsDbAO0AAYAWUArBgUEAwYDBFkFBhQFBgQFAwIBAAMAAlkBABQBAQAABwUICAIBAAEFBQcBBgA/EjkvEjkBLy7CLy8QxIcEECsQAcGHBH0QxBABwYcEGCsQAcGHBH0QxDAxEwEHBQUHARoDUi39nQIJJf05Ao0BJ7rAy6QBMQAAAgCCAVAD6wNtAAMABwAStwBzAgIIBnMEAC/tEjkv7TAxEyEHIRMhByGpAu4n/RJ7Au4n/RIB/KwCHawAAf+8AMsDLwO0AAYAU0AoAAECAwADAlkBABQBAAIBAwQFBgMGBFkFBhQFBgQFBwYBBgUBAQcFBgA/EjkvEjkBLy8Q1MGHBCsQAcGHBH0QxBABwYcEGCsQAcGHBH0QxDAxAQE3JSU3AQMO/K4tAmP99yUCxwHy/tm6wMuk/s8AAgDG//YETQYhAC0AQQA9QCA3bkEtRgBBAEEAFwxGIUMVRqAXARdCADIyHDwJEUocAwA/7T8SOS/OARDWXe0Q3u0SOTkvLxDtEO0wMQE+BTc+AzU0LgIjIg4CFSc+AzMyHgIVFA4CBw4FBwA+AjMyHgIVFA4CIyIuAjUBKw4dJCw7TDFGa0ckHDVLMDhjUyvPF16Ep2BfkmMzJkhrRTFMPS4mIBD++hUkMBwbMCMVFSMwGxwwJBUBnkVrVEI7OCAtRkVPNiQ/MBskUl4dEl6ZbDs7YHo/SHRjVyodLC0yRl9C/vowIxUVIzAbGzElFhYlMRsAAAEAe/9LBMYGFwBPANxAcH9PAT1PAX9OATtOAX8BAT8AfwACBD8GAQYHCy80CzQLNAozM0lOTykpTwAoKShPagAoFAAoTwAAACcBACgAKAAoIRZTSVEKP1MhUDtXJyonL1AzBlAKThJXAUUbMwpwAQEnMwoBAQozJwQoAAAVFFgrAC8/FzkvLy8vXRESOTkQ7TMQ7RDtETMQ7QEQ1O0zENbtEjk5Ly99h8TEAEa3UCgoEAAAUAorEDwBGC8rPCsQSBAAwYcFKxAAwYcFfRDEh8QRATMREjk5GC8vEM0Qzc1dMjAxXV1dXV1dBRMuAycjNjY3Mw4CHgIzMj4CNTQmJicnLgM1NDY2NzY3EzMDHgMXMwYGByM+Ai4CIyIOAhUUHgIXFxYWFRQOAgcDAYBNHFlXMAZQCREJ6QQIBxs3VDY5XkUmOjInnjVROR1Belc1PUrESwdCWTsLUgkRCeECAQoXNk4sPWFEJR0uNxqZcHBHf4k1TbUBTwQXOk8tI0MjEB4xMyMRGi9BJys3HQgrDi4/UC9NfVkYDgYBPf68Ag8xQygjQyMFCSo3JhQZKz0kICkaEAgxI3pgUYRdJwb+sgABACL/FwMUBqQAWQA9QB4eN00MHgw3pk0MFE0MN01aDE0MTQwRQEhJEhdIERAAP+0/7RI5OS8vAS8Q1gDBhwUrEADBhwV9EMQwMRM2NjcyPgQ3Ejc+AzMyMjMGBgciIiMiDgIHBgYHDgMHBhQHHgMXFgYHBgYHBgYXHgMzMjIzBgYHIiIjIiIjIi4CNxM2JicuBSMiCA8IHDMuKCAYCEsLDzpLUygjQyMIDQgRIxEbKiIaCxQnFA4xP0gmAQETIhsUBggDCxQoFAsHBQMKDxUOESMRBw4HESMRESMRJ0QtDg9WDgQWBQsOEBIUCwKeID8gFSUyO0IhAUYvP2JEIyA/IBszSi9YrFg+YEgwDQECAQgYHykYIVAyWKxYMEgaDRMNByA/ICNEYj8BdDxyJggPDAoHAwAAAf+8/vICOQa+AAMAUEAfBQECAwABAAKmAwAUAwACAwMDMAMBAwQAAw4AEBUUWCsAPz8BLxDFXQBGtgQoABADAworPAEvKzwrEEgQAMGHBSsQAMGHBX0Q1AEYxjAxATMBIwGJsP4zsAa++DQAAf+6/xcCrAakAFgAWEAsOxoBPD0+S0xPUFE3N1EKIjciUaYKIhQKIlEKWSJDCiIKIgoyA0hVEilIMhAAP+0/7BI5OS8vEjkBLxDWAMGHBSsQAcGHBH0QxIcOxMTExMTExDAxAV0HNjY3MjIzMj4CNzY2Nz4DNzY0Ny4DJyY2NzY2NzY2JiYjIiIjNjY3MjIzMjIzMh4CFRQGBgcDBgYeAzMGBgciDgQHBgIHDgMjIiIjRggNCBEjERsqIhoLFCgUDjE9SSYBARQhGxQGCAIMFScUCggLHhsRIxEHDgcRIxERIxEhOisZBhICRAgFBREdKRwIDwgcNC0oIBgICz8MDzpLVCcjQyPpID8gGzNJL1isWD1hSDANAQIBCBgfKRghUDJYrFgvSjMbID8gGzNKLwknUgn+1SFCOzIlFSA/IBUlMztCIS/+6S4/YkQjAAEAjQFxBD8CnAAZACRAEzUNATkBAQwbMAABABoISg8WSgMAL+3d7QEQzl0QzjAxXV0TNjYzMh4CMzI2NxcGBiMiLgQjIgYHjS16WTp7dGYmK1cySS15WidQUU1HPxkrVzIB41RcLTUtRVNzVFwVICUgFURTAAAB/7wAAAPuBa4AMwAxQBkRRhAoNSNGMDQAIEgfAQEWKyhIKggWSgoDAD/tP+0yETkvM+0yARDU7RDG1u0wMRM3MyYmNTQ+AzMyHgIHBzYuAiMiDgIXFhYXIQcjFhYVFAYHIQchNzM+AyYnIzkhxwYHMFl/eDhLd0kXFaYIBRw0JkJaNhYCAQUFARYg6wMEcWcB4yf84SduRWA5EwMJ/QKRkitXLGCfeE4YNl6CTAomSDgiMVFqOSZpM5IqTSBjsT6oqCNhc4M/MAAAAQBq/w4EkQUfADAAkUBUMywBNSIBOhUBLzAwWQABFAABMAAMDQoLDAsNWQoLFAoKCzoBAQEKBTASARIyH1MwBQEFMTQLAQs0AAEAEhIBGFcNBjspASkACwoQLyNXAQgwAAEAAC9dP+0zPy8SOV0/7RI5LwEvXS9dENZd7RDGXRE5OV2HECsQAMGHBX0QxBAAwYcFGCt9EMQwMQFdXV0FNy4CNTQ+Ajc3MwMWFhczByMuAyMiDgQVFB4CMzI+AjcXDgMHBwFgOWSFRmamvlk5xT5NWiB9HdEQNURQKyRRT0g3ISxKYjYoRj88HZInYm1nLjLy9SaHrWSI46RTBvb+9BpIKqwoPCgUGjJJYHVES3NOJw0fMiVtN00wEwLZAAEAFABkBNkE7gALAKW5AAj/8LMMAE0HuP/gswwATQm4/+izDABNBrj/4EBLDABNCQgBCgUGBwIKBQMHAgsEAAgBCwQFCgsEBQQLWQoFFAoFCwoBCAcCAQIHWQgBFAgBBwQzCAECCA0CDTAKAQoMCAo0CgEKDQQCAC8zEjldETMBEMZdETkQ1l9dMgDBhwUrEADBhwV9EMQQAcGHBBgrEAHBhwR9EMQPDw8PMDEAKysBKysBATcTARcBAQcBAScB/v8AoPQBwoX+IAERpP7//jWGAr4BqnX+awGmjP48/j1xAan+UY4AAgAs//ABzgQMABMAJwBJQCUbIW8jJRdvGSMZHm4UFAAoBw1vDxEDbwUPBQApCm4AKBkjCw8FAC/NP80BENb9xhI5ORDpMhDpMhESOS/tOTkQ6TIQ7TIwMRM0PgIzMh4CFRQOAiMiLgIDND4CMzIeAhUUDgIjIi4CxhUkMBwbMCMVFSMwGxwwJBWaFSQwHBswIxUVIzAbHDAkFQOJGzAjFRUjMBsbMSUWFiUx/QkbMCMVFSMwGxsxJRYWJTEAAAL/i/6qAccEDAATABcAYUAzeRUBGRYVFBcWFxVZFBcUFBcVFBcYEQNvBQcNbw8FDwpuABh7FAE0FAEUFxh/FAEUEQ8FAC/NP10QzQEvXV0Q1O05ORDpMhDpMhDFEADBhwUrEADBhwV9EMQBGM4wMV0TND4CMzIeAhUUDgIjIi4CAxcBJ78VJDAcGzAjFRUjMBscMCQVYt/+/K0DiRswIxUVIzAbGzElFhYlMf2tVv3lSQABAKwEkwLbBaQABgA/QCUFAAREPwMBAwgwCAEGRHAAoAACAAcETwABAAAHPAUBBWABAQEIAD9dxV0SOS9dMwEQ3l3tXRDWXe0SOTAxEwEzEyMnB6wBKW+XqkB3BJMBEf7vfX0AAQCWBJoDZwWHABsAMEAZNQoBNAIBCR0yFwEXHD8IAQgWDAURPwABAAAvXc3czcwvXQEQxl0QxjAxAF0BXQEyHgIzMjY3FwYGIyIuAiMiDgIHJz4DAXcyST8+Jxw1CXcUdFE4TkA4IQ8fHhkHbQ0wPEUFhyEnICYqI1VdHyQfBA8fHDUvPyYQAAEAJwTNAx0FQgADABK2AAUCBABzAgAv7QEQxhDEMDEBITUhAx39CgL2BM11AAABALb+UAJS/7IACwAKsgUMCwAvEjkwMRM+AzcXDgMjtjdZQysIlhJMaYJI/tEBJTxRLi1Jc08qAAIAZgTsAkQGyQATACcALLkAEv/wQBQMAE0IGAwATRQPKB4/BQEFGQojAAAvzS/NAS9dxRDWxTAxACsrATIeAhUUDgIjIi4CNTQ+AgcUHgIzMj4CNTQuAiMiDgIBVDFXQiYmQlcxMVdAJiZAV1YVJTEcHDEmFhYmMRwcMSUVBskmQlcxMVZBJSVBVjExV0Im8BwxJRUVJTEcHDEmFhYmMQABAGQEmgIUBcUABAAWQAkEoQIFAAAFAggAPxI5LwEQ1u0wMQEBNTMTAYP+4fi4BJoBGhH+1QABAFQEmgIZBcUABAAYQAoAAaEEBQQEBQAIAD8SOS8BENbtOTAxATMVASMBKfD+1ZoFxRH+5gACAPkEywPCBdEAEwAnAFJAKxshbyMlF28ZIxkebk8UARQKBw1vDxEDbwUPBQpuACgPDxkpIyMFKBkCBQIAPz8REjkvERI5LwEQ3u05ORDpMhDpMhDeXe05ORDpMhDpMjAxEzQ+AjMyHgIVFA4CIyIuAiU0PgIzMh4CFRQOAiMiLgL5FSMvGhkuIhQUIi4ZGi8jFQHLFSMvGhktIxQUIy0ZGi8jFQVQGi8jFRUjLxobMCUVFSUwGxovIxUVIy8aGzAlFRUlMAACAJYEPgKWBj4AEwAnAEtACyUgDABNIRgMAE0buP/oswwATRe4/+hAGwwATQqt7xkBGSkAreAj8CMCIygFqh4eKA+qFAAv6RI5L+kBENZd6RDWcekwMSsrKysBFB4CMzI+AjU0LgIjIg4CNzIeAhUUDgIjIi4CNTQ+AgEuER0lFRUmHRERHSYVFSUdEWg0XkUpKUVeNDRdRikpRl0FPhUlHRERHSUVFSYdEREdJuspRV40NF1GKSlGXTQ0XkUpAAABAK4E9gGyBfwAEwApQBYRAwcNpAMBqw0BDQ8FAwQKbgAUDwUIAD/FARDW7Rc5XV0RMxEzMDETND4CMzIeAhUUDgIjIi4CrhUjMBsaLyMVFSMvGhswIxUFexovIxUVIy8aGzAlFRUlMAAAAQCRAAACSwQMAAcAMkAaNwEBCQECAlkFBhQFBgUIBgIDUAUKBlABAAYAPzLtP+0yAS8Q1ocrfRDEARjEMDFdEyEDMwchEyPIAYPIpif+j8i6BAz8oKwDYAAAAv9WAAAIJgXsABkAHADYQHM1HAE0AQEGBQWmBAMUBAMFrwQBBB4aFBMHDAymExsUExsMEw8QDQ4PDhCmDQ4UDQ0ODqQNAQ0DHBUWGxwWGwIBFgEbpgIBFAIBGwIBAQEXUBkIFBVIGhoCEQtICQQJDg4JBAMGExMNSBEIEAgDAgcGSAICAD/tMj8/P+0yLxEXOS8vLxDtERI5L+0yP+0yLwEvLwDBhwUrEADBhwV9EMQAOYcFxMQBGC8vXS+HECsQAMGHBX0QxAEYLwDBhwUrfRDEEMTEARgQ3l0AwYcFK30QxDAxAV1dJzMBIQMjEyEDIQchAyETMwMhNzMTIQMzByEBEwGEfwPeBE1kzz79428Bvyv+RXYCFj7RZfvDJ4VP/mT8eif+FQRYlP4nrAVA/k8BBP4brP3+AQb+TqwBVv6qrAKuAoL9fgAAA//5/+EGuAQrAEkAWgBlAIW1QRgMAE07uP/gQEYMAE00FgExGAwATSVTUFADBVNgF2A/YAEDYANgWGFTL0M/HwEfZ1hTQ2YAVVNTIlVgYAlKVz4LFxQrVzQLW1caBw8JVxQHAD/tOT/tP+0SOT/tETkv7TIQ7QEQ1O0Q3l0ROe0ROTkvL10SORDtETMQ7TAxACsBXSsrATIWFzc2LgIjIg4CByc+AzMyFhc2NjMyHgIVFAYHIQYGFRQeAjMyNjcXDgMjIi4CJw4DIyIuAjU0PgQDMjY3JiY1NDcjIg4CFRQWASIOAgchNi4CAftEZyYXDQ4uTTIvWVFFGh4qYmdpMW2TIk7Hc2ObbDgLCPzkAQEpSGU8UZAykyJecoFDQHVmUx4nYW94P0h9XDUwUWlyc2ZovEgICAHmPWpPLV0D6DtpV0IVAk4BI0NeAl4LCl83UTUaDRUbD4EYKR0RQ0hFTkNukEwzXykOFAk/bE8tQT5sLUgzGx03UTQ1UDYcIERnSEpuUDUfDP4hXVUgRSYQERw0TTBKRwMCJkRcNj5fPyAAAAL/P/4pBJkGFAAZACoAU0AtGBAMAE0mUwksAh0eERIBARISWRcYFBcYEhcrGBdQFQ4hVw4LGlcEBxhQAQAAAD8y7T/tP+0/7QEvENQAwYcFK30QxIcOxMTExAEYEN7tMDErEyEDNjMyHgIVFA4CIyImJwMzByE3MwEjASIGBwMWFjMyPgI1NC4C6wGJh4aRVZRtP2av6YNNhSpUiSb+FCeaAYTCAhJGkDx+GW5bTZZ3SiRBWgYU/bdcQnKbWZHyrmAuJP6VrKwGk/4TOTL93CExP3esbkBlRiYAAgBLAAAFZgXsABgAIwCNQEUgRiAKMApACgMwCqAKAgolBBkaEBEDAxEWFwMXEaYWFxQWFxEWFhYWqSQXGUgFBAUaSA8QDwUPBQ8XFlAUCBdQAAIVFFgrAD/tP+0ROTkvLxEzEO0RMxDtAS8Q5ABGtiQoFxAWFgorPAEvKzwrEEgQAMGHBSsQAMGHBX0QxIfExMTEARgQ1F1x7TAxASEHIwchMh4CFRQOAiMhBzMHITczASMBAyEyPgI1NCYjAakB7CmNHwEQWJVsPU2Py37+wzGLJ/4UJ5ABDo8BGG0BI0V2VzJyfAXsrYcuWYBRaK9/R9esrAST/s3+IyVIbEhVZwAAAQBLA0gB0gYrAAoAZUA5NgYBPQQBMAMBMAIBOwSrBAKkAgEyAgEICQYHAQIGAgd3AQIUAQIHpAEBAQsCAgUBswoKCz8FAQUAAD9dEjkv7RE5AS8Q1F0AwYcFKxAAwYcFfRDEARjNMjAxAF1dXQFdXV1dEzMTBzc3MwMzByFkVGehI/Q9jlEa/tADvAG0S493/ZF0AAH/5QNKAk0GKwAeAIRAS6IbAQI0GwGkDwGkGwGtGgGvGQE1FQEbGQMAGwAZdwMAFAMAGRwXNAMBAwMNB3EXIAwNDTAeAR4fAAAcsx4NEgMeAx4fCao/EgESAAA/XekSOTkvLxI5EO0yAS8Qxl0yL80Q1u0SOS9dEjnBhwQrEADBhwV9EMQwMQBdXV1dAV1dX10DAT4DNTQmIyIGByM+AzMyHgIVFAYHBSEHIQUBUhssHxE0LjVMDXwMNElaMy5RPSMtPf7qARwd/hkDsAEVFSYkJxcgMDwwNFU8IB4zRSg2XzTheQAAAQAOA0ICVgYwACcAWUAxNBABNRoBIHESEhoAcQ4pGigQ/yEBISQFBjsGARoGAx2qFr8kASQWJBYoA6o/CgEKAAA/XekSOTkvL3EQ6RE5OV0RMxDNXTkBEMYQ1u0SOS/tMDEAXQFdATQmIyIHIz4CMzIWFhUUBxYVFAYGIyImJjUzFDMyNjU0IyM3MzI2AdM2L24biQlUekc/ZDmDS0iPVjpuO4VrP1hqOhk3QFIFYyMzYjRvNjNcNHU2KVc/ekcwXk5jRDdWaz4AAAEAhQNIAuYGQgAOAL1AYHQNAXQMAXUKAaADAaAEAaQDAQUMCwYFBgx3CwYUCwYMCwsLrwsBCxACAwABAgEDdwABFAABA3QBAQEGDsAAAaQAATAAcAACAA8GCAAEsw4JBg4BCw4LDg8/AQEBABUUWCsAP10SOTkvLxESOTIQ7TIyAS8Q1F1dXTIROV0AwYcFKxAAwYcFfRDEARgQxl0ARrcPKAYQCwsPCisQPAEvKzwrEEgQAMGHBSsQAMGHBX0QxDAxAF1dAV1dXV0TATMBMzczBzMHIwcjNyGcAYOT/oa3JocmcBlxLocu/rAEeQHJ/jmkpG7FxQAAAgBLA1ADOwYjABMAJwBIuQAN/+BADgwATQMgDABNDCAMAE0CuP/gQBcMAE0ecQopFHEAKBmqDw8oI6o/BQEFAAA/Xe0SOS/tARDW7RDU7TAxACsrASsrEzQ+AjMyHgIVFA4CIyIuAjcUHgIzMj4CNTQuAiMiDgJLRnecV0V1VTFBdJ5dRXZVMJwbLz8lNmFJLBwwQSU0YEkrBIFbmW8/LlFtP1yccT8xVG5IJkMxHChJZz8oQi0ZJkdlAAACAHQDRgMQBg4AJgAzAHxARasBARgIIyYSKiMhEiEqdyMhFCMhKnAjASM1MXEwCAEINK8hASEsDSMjJLMlJaQnASeqA3ANASENAwMNIQM0FKo/GwEbAAA/Xe0SFzkvLy9dEO1dMy/tMi8QzQEvXRDWXe0Q1F0AwYcFKxAAwYcFfRDEATMREjkwMQBdAQYGIyIuAjU0PgIzMhYXNzYmIyIGByc2NjMyHgIVFAYDMwcjJzI2NzcjIg4CFRQWAhwrXD8yUzwhPmN8PS9OHQwQSEVBbSkaPpBINlpAJA9CUR3jmjhlIh+cJEEwHTwDjCMjHTFBJUVdOBgJBjFDPhsUYSUoFi1HMA9O/uSDYiQfiBEfLh0mKgABAI0BsAT5A+cABQAsQBUAAQGmAgMUAgMBAgMCAgIHA0gABQYAPzPtEjkvAS8vEADBhwUrfRDEMDEBAyMTITcE+YO8XPx3JwPn/ckBi6wAAAH/p/4pBGYEDAAbAIpASDsUATsJAQ4NDBEOEQ1ZDBEUDBENDAsSEQwRDB0DBBobAgIbAAECARtZAAEUAAEbADEBAQEcEQAHVxcLEQoQCgwGAQYADhcUWCsAPz8/Pz8/7QEvLxDGXRAAwYcFKxAAwYcFfRDEhw7ExMQBGBDEEH2HDsTEEADBhwUYKxAAwYcFfRDEMDEAXV0DATMDBhYWFzI2NjcTMwMzByE3DgMjIiYnA1kBXciHFwplXC9kShmsycjKJ/51Fx9KTUwgOGUodP4pBeP9uVSKTwIqRCcC4fygrGkhLx4NGhn+CAAAAQCuAhQBsgMbABMALEAXEQMHDaMDAawNAQ0PBQMEABUKbgAUDwUALy8BENb9zhIXOV1dETMRMzAxEzQ+AjMyHgIVFA4CIyIuAq4VIzAbGi8jFRUjLxobMCMVApoaLyMVFSMvGhsxJBYWJDEAAgAi/fACYgQrAAMAFwBEQCIZAwABAgMCAKYBAhQBAgABGA5uBD8EAQQwAgECAhMJBgEOAD8/3cYBL10yXRDtENYAwYcFKxAAwYcFfRDUARjOMDEBIQEzAzQ+AjMyHgIVFA4CIyIuAgEm/vwBOLKyFSQwHBswIxUVIzAbHDAkFf3wBI8BKRswIxUVIzAbGzElFhYlMQAAAv+8/ewDQwQrAC0AQQBLQCg1O289PzFvMz0zLm44OCFDFkYXQwxGIUIARi0tLREvMwEzPQYRShwOAD/tP81xETkvAS/tENXtEN7tERI5L+05ORDtMhDtMjAxAQ4FBw4DFRQeAjMyPgI3Fw4DIyIuAjU0PgI3PgU3ARQOAiMiLgI1ND4CMzIeAgLfDh4kLDpMMUdrRyQcNUwwN1xGMg3PF16Ep2BfkmMzJklrRTFMPC8mIA8BEhUkMBwbMCMVFSMwGxwwJBUCb0ZrVEI7OB8tRkZPNiQ/MBskQFk1E1+YbDo7YHk/SHRjVyodLC0yRl9DATUbMCMVFSMwGxsxJRYWJTEAAQBRAtUD7gXsAAYAWkAtpgABAAECAwADAU0CAxQCAwECpgMBBAMGBQQFA00GBRQGBQN5BgEGBQIGAAUCAC8vPwEvLy9dAMGHBSsQAMGHBX0QxAFdEADBhwUYKxAAwYcFfRDEAV0wMQETIwMBIwEDDeGLp/4umQJNBez86QJz/Y0DFwAAAv/b/vQCWAbBAAMABwBrQDQJAgYFBAcGBwVZBAcUBAcFBAIBAAMCAwFZAAMUAAMBAwQHAAAAMAcBBwgwAwEEAwQDBwAQAD8vOTkvL10BEMZdMi99h8TEAMGHBRgrEADBhwV9EMQQAMGHBRgrEADBhwV9EMQBGBDGMDEBMwMjAzMDIwGnsa+wcrCssAbB/RL+Dv0TAAH/hf/DBsMGKQADADe5AAH/+EAYDABNAgEAAwIDAaYAAxQAAwEAAwADCAAAAD8/AS8vEADBhwUrEADBhwV9EMQwMQErATMBIwXn3Pmd2wYp+ZoA//8Anf/DB9sGKQAnAJABGAAAACcA0wRrAAAABwCDANn/z///AJ3/wwfbBikAJwCQARgAAAAnAIMBKf/PAAcA0gTIAAD//wCd/8MH2wYpACcAhQCa/88AJwCQARgAAAAHANMEawAAAAMAS//hBiIGCAAdACgANQDUQBU2NAE0MwE0KAEzHgE0HQEXIAwATQi4/+CzDABNA7j/4EBkDABNMwMBAzQCATY0ATYzATYyATYoATYeATYdATUDATQCAQwbFDBGNAUBBTclRhQ2HR4oERAAEAIzNA4PAQEPEAABAA+mEAAUEAAPMBABAhA/AAEAIEo/AAEAGwMpSjAQARAMCQA/M13tPzNd7QEvXS9fXQDBhwUrEADBhwV9EMSHDsTExMQQhw7ExMTEARgQ1u0Q1l3tEjk5MDEAXV1dXV1dXV0BXV9dKysrXV1dXV0BMwcWFhUUDgQjIicHIzcmJjU0PgQzMhcHJiMiDgIVFBYXBTI+BDU0JicBFgUA5HxUZjxtm7/eeZ6HLeR8XGc+cJ2/2naliIBkX3zeqGI8LgFKVp6Ib04rOij9QV4GAKtT9J2G8MqicT1IPatf/ZyD6caebjtHrytks/WRa6o8ozBZfZqyYm2bNfw7LAAD/8n/4gUtBG8AHgAoADIAyUAMfS0BFxgQAE17EgEHuP/oQA0QAE1xKgF9JwFyHQEcuP/gQF8MAE00HAF5EgF5EQENEAwATXsNATkNAXQCASZTMAQBBDQpUxQzHiwrERAAEAIoHw4PAQEPEAABAA9ZEAAUEAAPdBABMBABEHoAAQAuVzsAewACABsHIVcwEHAQAhALCwA/M13tPzNd7QEvXS9dXQDBhwUrEADBhwV9EMSHDsTExMQQhw7ExMTEARgQ1O0Q1l3tMDEAXV1dK11dXStdXV0BK10rXQEzARYVFA4EIyImJwcjNyYmNTQ+BDMyFhcBFjMyPgI1NCcBFBcBJiMiDgIEUtv+/losT26HmlNoji1h29EaNStPb4aZUmeHKP3ST1lJi2pBHf2FFQICPlxKiWpABG/+/XWhV6CKclAsOyFh0SeDZFaeinBQLDgc/PU0QHKgYEZI/vdGPQIDLD9xngAAAgBLAAAGEgXsABYAKQBoQC0kRgsrFxwVAxcDHKYVAxQVAxwVFRUwFQEVKgMaAEgBGRkDFUgTCANIBQIVFFgrAD/tP+0ROS8z7TIBLxDEXQBGtiooAxAVFQorPAEvKzwrEEgQAMGHBSsQAMGHBX0QxAEYEN7tMDETNzMTIzchMh4CFRQOBCMhNzMTAQMzByMDMzI+BDU0LgIjuCe2b4MoAiWF15dRP3OkyOh//b4nhHcBZm7xJ/J23FOik31bNDdlj1gCsqwB4a1lr+qEg+fDmWs5rAIGAo3+H6z9+ixUeJi2aGGvhk8AAAIAS//nBH0F/AAhADUAn0BHIBwhHB0cIR4DBAUAHgMBBRwABQBZIRwUIRwAIQUTIlMJNyxTEzYhAx4fAgMCHlkfAhQfAh4fAiAMAE05AgECOx8BHyEaBQK4/+BAEQwATQICMSEAJ1ccGgcxVw4LAD/tPzPtPxI5Lys5ERI5XQEvXSsvwYcEKxABwYcEfRDEARgvENbtEN7tEjkQAMGHBSuHfcQQDsQPDxCHDsQwMQEXNxcHEx4CFRQOAiMiLgI1ND4EMzIXJwcnNycBNC4CIyIOAhUUHgIzMj4CAqVMnEKFsyQ5I1+85FRssX1FK05tgpRPIBtFqUKPfwIDHkV2QlCfZychRGpKQ4luRQX8gECfN/7WPHaXS1vtrktJgK1kVp6JcVAsA3BFnzvP/E5CY1oyWI+QNUBxVTE8cKEA////agAABYMHpQImAAIAAAEHAHkBVQHgAAq2AsgUFwcNUCs0////agAABYMHpQImAAIAAAAHAHoCvAHg////agAABYMHhAImAAIAAAEHAHQBoQHgAA25AAIBQLQTFgcNUCs0AP///2oAAAWDB2cCJgACAAAABwB1AWUB4P///2oAAAWDB7ECJgACAAAABwB7AWoB4P///2oAAAWDCB4CJgACAAAABwB8AhwB4P//AEsAAAXnB6UCJgAGAAAABwB5AhAB4P//AEsAAAXnB6UCJgAGAAAABwB6AlkB4P//AEsAAAXnB7ECJgAGAAAABwB7AWgB4P//AEsAAAXnB4QCJgAGAAAABwB0Ae4B4P//AEv+UAZJBggCJgAEAAAABwB3AXEAAP//AEsAAAOVB6UCJgAKAAAABwB5AJgB4P//AEsAAAOVB6UCJgAKAAAABwB6AU8B4P//AEsAAAOcB4QCJgAKAAAABwB0AMEB4P//AEsAAAPYB9wCJgAKAAAAJwB9AiYB4AAHAH0AyAHg//8ASwAAB0UHZwImAA8AAAAHAHUCJgHg//8AS//hBiIHpQImABAAAAAHAHkB0wHg//8AS//hBiIHpQImABAAAAAHAHoCXgHg//8AS//hBiIHhAImABAAAAAHAHQCIAHg//8AS//hBiIHZwImABAAAAAHAHUBqgHg//8AS//hBiIHsQImABAAAAAHAHsBbQHg//8AyP/nBrgHpQImABYAAAAHAHoCoAHg//8AyP/nBrgHhAImABYAAAAHAHQCBQHg//8AyP/nBrgH3AImABYAAAAnAH0D6AHgAAcAfQHCAeD//wCvAAAGAwelAiYAGgAAAAcAegIgAeD//wBp/+4EuQXFAiYAHgAAAAcAeQE+AAD//wBp/+4EuQXFAiYAHgAAAQcAegGkAAAACrYCyC4rCBJQKzT//wBp/+4EuQWkAiYAHgAAAAcAdAFmAAD//wBp/+4EuQWHAiYAHgAAAAcAdQDZAAD//wBp/+4EuQXRAiYAHgAAAAcAewCzAAD//wBp/+4EuQaSAiYAHgAAAAcAfAFeAFT//wBz/+EEbQXFAiYAIgAAAAcAeQDVAAD//wBz/+EEbQXFAiYAIgAAAAcAegGTAAD//wBz/+EEbQXRAiYAIgAAAAcAewCiAAD//wBz/+EEbQWkAiYAIgAAAAcAdADoAAD//wBf/lAEhgQrAiYAIAAAAAYAdzIA//8AzwAAAuEFxQAnAH4AlgAAAAYAeWsA//8BJwAAAzEFxQAnAH4AlgAAAAcAegEYAAD//wEEAAADMwWkACcAfgCWAAAABgB0WAD//wEnAAAD3AX8ACcAfgCWAAAAJwB9AioAAAAHAH0A6gAA//8AkQAABMAFhwImACsAAAAHAHUA2AAA//8AS//nBIUF5AImACwAAAAHAHkBEgAf//8AS//nBIUF5AImACwAAAAHAHoBcQAf//8AS//nBIUFwwImACwAAAAHAHQA4wAf//8AS//nBIUFpgImACwAAAAHAHUAvgAf//8AS//nBIUF8AImACwAAAAHAHsAgAAf//8Ah//uBJsFxQImADIAAAEHAHoBbAAAAAq2AZYmIxYBUCs0//8Ah//uBJsFpAImADIAAAEHAHQAtgAAAAq2AWQiJRYBUCs0//8Ah//uBJsF0QImADIAAAAGAHt7AP////b+KQS7BcUCJgA2AAAABwB6AU8AAP//AMj/5wa4B6UCJgAWAAABBwB5AYYB4AAKtgEAKiwAFVArNP//AIf/7gSbBcUCJgAyAAAABgB5ZgD////2/ikEuwXRAiYANgAAAAYAe14AAAEAsgAABgYF7AAiAP9AfDQfATAeATsMASAgIQsLCgwRDAoTDh0YExgOph0YFB0dGBgYCwoFBAsEBaYKCxQKCgsgIQMEIAQDpiEgFCEgAyEEGBghMAoBCiQwIQEhIx8dDh4dDRhQFh8MDQQEHkgMGhFIGxAbDBsMGwIWCAoKBQlQBwIhIQJQAAIVFFgrAD/tMi8/7TIyLz8SOTkvLxEzEO0yEO0yLzIRMxDtAS8vL30CDsTEARgvEMZdEMZdETkvORAAwYcFKxAAwYcFfRDEhxgQKxAAwYcFfRDEAEa3IygdEBgYIworEDwBGC8rPCsQSIcFECsQAMGHBX0QxBEBOTkQAgjECMQwMQFdXV0TIQcjEwEjNyEHIwEzByEHIQchBzMHITczNyE3ITchNzMDI9kB6yd6rwGbeicB7Cd7/kajIP7xIgEOIf7yOY0n/hQnjTn+8iEBDiH+9CGqxZMF7K3+JwHZra3+EY2UjfasrPaNlI0B7wAAAv9q/icEwAYMAEgAXACdQGI0PQE0NwE2IAEYIAwATTsSAXQ0AXAyAUdGAgIUCkY+PjgiRn8mASYmLzsXATQ8ARc8GVNGMDgBOF4vRn8ZARkZSUYUXXVOARA8TlgXNQYqBkpDMCRwJAIAJAAkHkMOKkoeAAA/7T8SOTkvL10Q7REXOV0BENbtMy9d7RDeXe0SOTldXRI5L13tETMv7RE5L+0wMQBdXQFdK11dXQchBwYWFjMyNjY1NC4CJycuAjU0NjcmNTQ+AjMyFhYXMwcjNzYmJiMiDgIVFB4CFxcWFhUUBgYHFhUUDgIjIiYmJyMBFBYWFxc+AzU0JiYnJw4DcQEEBw4lcENLg0YcLTcclUd3Mo2DV0F+unhcnG8NWSf6CAg2aTVBY0MiGyo2G554hkF2YlZOibtubbdSBF0BrilBSDpFbk0pIDRGMlF7UyoZJUVrNTp+QCk8KxwKNhlgikqDvDRijluXbTwxcUmmJDNgKCA3SyskNigdCz0vnHdao20mWohsqnY/TYxCAuUyRCYcFwIlQVg0KDopHBECJj1OAAEAAP/DBWQEUAADADNAGgECAwABAAJZAwAUAwACNAMBAwADCDYAAQAGAD9dPwEvL10AwYcFKxAAwYcFfRDEMDEBMwEjBInb+3fbBFD7cwAAAwDhAKgEugTEAAMAFwArAF9AMRUHbwkLEW8TCRMObgQpG28dHyVvJx0nIm4YBBgEGAAtAgAsJx0dLQNzAQEsE3AJAQkAL13NETkv7RE5L80BENbdzhE5OS8vEO05ORDpMhDpMhDtOTkQ6TIQ6TIwMRM3IQcBND4CMzIeAhUUDgIjIi4CAzQ+AjMyHgIVFA4CIyIuAuEnA7In/fcVJDAcGzAjFRUjMBscMCQVmhUkMBwbMCMVFSMwGxwwJBUCZqysAdsbMCMVFSMwGxsxJRYWJTH9CRswIxUVIzAbGzElFhYlMQAAAgBLALgFEgUtACMANwBLuQAU/+hAJwwATQIQDABNLlMwEgESOSRTADgzVwkpVxsfFwkbFxcbCQMFOQ0NBQAvMy8REhc5Ly8vETMQ7RDtARDU7RDeXe0wMSsrEzQ2Nyc3FzY2MzIWFzcXBxYWFRQGBxcHJwYGIyImJwcnNyYmNxQeAjMyPgI1NC4CIyIOAutUR36PhTh4Pj5tLr5xvBcYTkJ5k3s7f0I+bi7Occ0WF7AgOlIzQn9jPSA7UzJDfmM8Aqhns0Wxdb4bHiQgpoOmKl0zY6xEqXGsHiEkIbSFsypcQDBSPiM2W3lEMFI+IzZbegAB/+UAAAJNAuEAHgCDQEqiGwECNBsBpA8BpBsBrRoBrxkBNRUBGxkDABsAGXcDABQDABkcFzQDAQMDDQdxFyAMDQ0wHgEeHwAAHLMeDRIDHgMeHwmqPxIBEgAvXekSOTkvLxI5EO0yAS8QxV0yL80Q1u0SOS9dEjnBhwQrEADBhwV9EMQwMQBdXV1dAV1dX10nAT4DNTQmIyIGByM+AzMyHgIVFAYHBSEHIQUBUhssHxE0LjVMDXwMNElaMy5RPSMtPf7qARwd/hlmARUVJiQnFyAwPDA0VTwgHjNFKDZfNOF5AAABAIUAAALmAvkADgCvQGN0DQF0DAF1CgGgAwGgBAGkAwEFDAsGBQYMdwsGFAsGDAYQC68LAQsQAgMAAQIBA3cAARQAAQN0AQEBBg5wAKAAwAADNAABAA8IOwkBCQYIAASzDgkGDgELDgsODz8BAQEVFFgrAC9dEjk5Ly8REjkyEO0yMgEvL10zENZdXTIROV0AwYcFKxAAwYcFfRDEARgQxl0vKzwAwYcFKxAAwYcFfRDEMDEAXV0BXV1dXRMBMwEzNzMHMwcjByM3IZwBg5P+hrcmhyZwGXEthy3+sAEwAcn+OaSkbsTEAAAC/9D+wgM9AQoAAwAHACpAFwIQDABNA6EwAQEBCAkHoTQFAQUEBgACAC/NL80BL139zhDWXe0wMSsTJwEXEycBF019AQi5aH0BCLn+wkECB1D+CEECBU4AAAABAAAA1QBoAAUAVwAEAAIAEAAvAFkAAAIpBiMAAwABAAAAGAAYAIgBJgGFAgQCqgMgA50ETQSeBOQFcAXSBnMHAgdjB9YIZAkXCagKPgrvC0oLzgxKDNkNUA1QDWMN6w5mDs0PZA/bEDkQ0xFpEcYSNhLFEwITuBQ4FKUVJRW8FjsW5hc7GAcYaRkPGewaVRqhGtEa5BsaG4Ib4hxOHNkdQx3BHi4eeR8vH50f8iCdIXMhiyGxIfAiIyJmIsEi7iPlJCMkRiSBJKolGCW0JoMnMiewKCcorSjIKN8pESk7KV0peCm6Kf0qWCpwKwYrSCtmK6UsHyz/LZot0C53LrIvFy+mMBkweDDRMQMxRzFeMXoxyjHlMgAyYzLDMvgzJTPKNJs1CDWJNdM2RjarNyc3hTgPODc4rTjjOS45rznxOjs6ZTp2Ooc6mDtRPAQ8eD0XPSk9NT1JPVU9YT1tPXk9hT2RPZ09qT21PcE9zT3dPek99T4BPg0+GT4lPjE+PT5NPlk+ZT53PoM+jz6bPqc+sz6/Pss+1z7iPu4++z8HPxg/JD8wPzw/SD9UP2A/cj+EP48/mz+tP7g/w0B+QU9Bd0HpQmJC1ENJQ3UAAQAAAAEAACMsBcNfDzz1AAkIAAAAAADI4cglAAAAAMkG7h7/P/3sCcsIHgACAAkAAgAAAAAAAATHAI8AAAAABbL/agXcAEsFvABLBhkASwWHAEsFMwBLBlAASweNAEsDcwBLAvr/tQZqAEsFYABLCPIASwb6AEsGKQBLBSEASwYXAEsFngBLBP4ADwVSAIcGLQDIBb4ArwjfAK8Fz/+/BSsArwUS/+cB1wAABBn/iwUnAGkE+ABVBG8AXwUFAEsEkwBzAysAIwTh/9sFGwBpAtUAkQKc/5IE0wBpAo0AaQg0AJEFWACRBNMASwU1ACME3gBLBB0AkQP0//EDCgCRBQoAhwSDAF8GcQBfBHH/3QSN//YD4//xAjn//QNYAIkCAgAyBYEAjwNMAI8Ed//sBGQAFQSBABQEqAAUBOUAfAS8AD0E3wBmBQ4AuANKAMYGhwAUBWYASwGeAJYC6QCjAzkA7wO0/5MDKABlBPYAZQOE/54JLwBiAvoAFgK8AGUC+v+1A90A2wU/ALIFRP/QB38AZgd/AGYD1QA3A9UADgdrAPYEAAAACAAAAAOWALIDlgCdAecAsgH9AK8CLQBGAhsAHQRR/6AEfQB7Ba8AIgQr//kEHQCCBCv/vARoAMYE/gB7AskAIgIH/7wC3v+6BM0AjQPu/7wEbwBqBMUAFAIeACwCK/+LA1wArAPoAJYDHQAnA6wAtgKqAGYCTgBkAoUAVASwAPkDIACWAmQArgKOAJEHx/9WBuz/+QTn/z8FKABLAeYASwJh/+UCbgAOA2IAhQMEAEsDQgB0BWYAjQTT/6cCZACuA5wAIgRY/7wEzQBRAof/2wWk/4UICgCdB6QAnQilAJ0GKQBLBNP/yQYZAEsE0wBLBbL/agWy/2oFsv9qBbL/agWy/2oFsv9qBYcASwWHAEsFhwBLBYcASwW8AEsDcwBLA3MASwNzAEsDcwBLBvoASwYpAEsGKQBLBikASwYpAEsGKQBLBi0AyAYtAMgGLQDIBSsArwUnAGkFJwBpBScAaQUnAGkFJwBpBScAaQSTAHMEkwBzBJMAcwSTAHMEbwBfAroAzwK6AScCugEEAroBJwVYAJEE0wBLBNMASwTTAEsE0wBLBNMASwUKAIcFCgCHBQoAhwSN//YGLQDIBQoAhwSN//YFaACyBLL/agWPAAAFHgDhBRkASwJi/+UDXgCFA5j/0AABAAAHsP4GADcJL/8//n0JywABAAAAAAAAAAAAAAAAAAAA1QACBAEBkAAFAAAFmgUzAAABHwWaBTMAAAPRAGYCAAAAAgAAAAAAAAAAAIAAACcAAABBAAAAAAAAAABLT1JLAAEAICIVBhT+KQBuB7AB+iAAARFAAAAABAwF7AAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQBxgAAAC4AIAAEAA4ALwA5AEAAWgBgAHoAfgD/ATECxgLaAtwgFCAZIB4gIiAmIDogRCB0IhIiFf//AAAAIAAwADoAQQBbAGEAewChATECxgLaAtwgEyAYIBwgIiAmIDkgRCB0IhIiFf//AAAACwAA/8EAAP+9//AAAP9N/a79ov2Z4EjgRwAA4DHgNOAo4EzgEt5S3roAAQAuAAAASgAAAFQAAAAAAFoAAAAAAAAAAAAAAAABCgAAAAAAAAAAAAAAAAAAAAAAHABFAEkAZQBqAEYARwBIAEoASwBMAE0AOAA5ADoATgByAHMAZgBnAGgAaQBPAFAAUQBSAI4AHQB5AIwAcABvANEAzQCPAM4AewBXAIgAWACJADkAVgB2AHgAYwCEAIUAegCKAFQAiwB3AIMAhwBZAJEAkgCTAI0AmACZAJoAmwCcAJ0AfwCiAJ4AnwChAKAAowCkAKUApgCWAKcAqACpAKoAqwCsAHEAlADKAK0ArgCvALAAggBVALEAsgCzALQAtQC2AIAAuwC3ALgAugC5ALwAvQC+AL8AlwDAAMEAwgDDAMQAxQDQAJUAywDGAMcAyADJAIEAzABdAF4A1AAAQD9YVVRTUlFQT05NTEtKSUhHRkVEQ0JBQD8+PTw7Ojk4NzY1Ly4tLCgmJSQjIh8YFBEQDw0LCgkIBwYFBAMCAQAsRSNGYCCwJmCwBCYjSEgtLEUjRiNhILAmYbAEJiNISC0sRSNGYLAgYSCwRmCwBCYjSEgtLEUjRiNhsCBgILAmYbAgYbAEJiNISC0sRSNGYLBAYSCwZmCwBCYjSEgtLEUjRiNhsEBgILAmYbBAYbAEJiNISC0sARAgPAA8LSwgRSMgsM1EIyC4AVpRWCMgsI1EI1kgsO1RWCMgsE1EI1kgsAQmUVgjILANRCNZISEtLCAgRRhoRCCwAWAgRbBGdmiKRWBELSwBsQsKQyNDZQotLACxCgtDI0MLLSwAsCgjcLEBKD4BsCgjcLECKEU6sQIACA0tLCBFsAMlRWFksFBRWEVEGyEhWS0sIEWwAENgRC0sAbAGQ7AHQ2UKLSwgabBAYbAAiyCxLMCKjLgQAGJgKwxkI2RhXFiwA2FZLSyKA0WKioewESuwKSNEsCl65BgtLEVlsCwjREWwKyNELSxLUlhFRBshIVktLAGwBSUQIyCK9QCwAWAj7ewtLAGwBSUQIyCK9QCwAWEj7ewtLAGwBiUQ9QDt7C0sILABYAEQIDwAPC0sILABYQEQIDwAPC0sALAHQ7AGQwstLCEhDGQjZIu4QABiLSwhsIBRWAxkI2SLuCAAYhuyAEAvK1mwAmAtLCGwwFFYDGQjZIu4FVViG7IAgC8rWbACYC0sDGQjZIu4QABiYCMhLSxFI0VgI0VgI0VgI3ZoGLCAYiAtLLAEJrAEJrAEJbAEJUUjRSCwAyZgYmNoILADJmFliiNERC0sIEWwAFRYsEBEIEWwQGFEGyEhWS0sRbEwL0UjRWFgsAFgaUQtLEtRWLAvI3CwFCNCGyEhWS0sS1FYILADJUVpU1hEGyEhWRshIVktLEWwFEOwAGBjsAFgaUQtLLAvRUQtLEUjIEWKYEQtLEUjRWBELSxLI1FYuQAz/+CxNCAbszMANABZREQtLLAWQ1iwAyZFilhkZrAfYBtksCBgZiBYGyGwQFmwAWFZI1hlWbApI0QjELAp4BshISEhIVktLLAWQ1iwBCVFZLAgYGYgWBshsEBZsAFhI1hlWbApI0SwBCWwByUIIFgCGwNZsAUlELAEJSBGsAQlI0I8sAclELAGJSBGsAQlsAFgI0I8IFgBGwBZsAUlELAEJbAp4LAHJRCwBiWwKeCwBCWwByUIIFgCGwNZsAQlsAMlQ0iwBiWwAyWwAWBDSBshWSEhISEhISEtLLAWQ1iwBCVFZLAgYGYgWBshsEBZsAFhI1gbZVmwKSNEsAUlsAglCCBYAhsDWbAEJRCwBSUgRrAEJSNCPLAEJbAHJQiwByUQsAYlIEawBCWwAWAjQjwgWAEbAFmwBCUQsAUlsCngsCkgRWVEsAclELAGJbAp4LAFJbAIJQggWAIbA1mwBSWwAyVDSLAEJbAHJQiwBiWwAyWwAWBDSBshWSEhISEhISEtLAKwBCUgIEawBCUjQrAFJQiwAyVFSCEhISEtLAKwAyUgsAQlCLACJUNIISEhLSxFIyBFGCCwAFAgWCNlI1kjaCCwQFBYIbBAWSNYZVmKYEQtLEtTI0tRWlggRYpgRBshIVktLEtUWCBFimBEGyEhWS0sS1MjS1FaWDgbISFZLSxLVFg4GyEhWS0ssAJDVFiwRisbISEhIVktLLACQ1RYsEcrGyEhIVktLLACQ1RYsEgrGyEhISFZLSywAkNUWLBJKxshISFZLSwgiggjS1OKS1FaWCM4GyEhWS0sACCKSbAAUViwQCMgijgSNBshIVktLAFGI0ZgI0ZhIyAQIEaKYbj/gGKKsUBAinBFYGg6LSwgiiNJZIojU1g8GyFZLSxLUlh9G3pZLSywEgBLAUtUQi0ssQIAQrEjAYhRsUABiFNaWLkQAAAgiFRYsQIBQllZLSxFGGgjS1FYIyBFIGSwQFBYfFloimBZRC0ssAAWsAIlsAIlAbABIz4AsAIjPrEBAgYMsAojZUKwCyNCAbABIz8AsAIjP7EBAgYMsAYjZUKwByNCsAEWAS0AQMsJfCR4VXokeFV5QhIfd3YpHw92AXRyZB8gpAGkchUfo3IpHy+iAUCiGyRGoqAPHw+zAQuqG6oCGKooqgIJqgFzQhsfH60BrXASH0BxUHFgcQMPcQFxcBIfL6EBQKEbJEahoA8fEG8cJEaLbwELbwETbkIbH6CfCB9qQhsfaWEpH2dlZB9lQykfY2FkH2FCGx8gWTc7RgBZEFkCG1lCGx8wVwFPV29XAp9Xr1e/VwNXQxsfD1UBHUBVJilGAFMBQABTcFOAU5BTBPBTAbj/wEAsUy0wRlNCGx9RQhsfTBYBA0BQO0FGQFAxNUZAUCYpRhtQAVBBER90tAFEtAG4/8BAG7QiJUYWtDa0AsS01LQCNLREtAIGtBa0AvSxAbj/wEAksRgcRnSxAUSxVLECBrEBsqsbH0CrERVGQKsBAgurAQwLTgETuP/AQBGvKT9Ggq+Sr6KvA0GvASSvAbj/0EATrxYcRq9CEx8AphCmgKaQpqCmBbj/wEBZpi0wRqZCGx9NQhsfTEQpH0tDGx8wSkBKUEoDkEqgSgIAShBKAhtKQxsfSUMbH0BIO0BGQEgxOEZASCYrRg9IH0gvSAMdSEMbH0dCGx8ARgFAwEYBIEYwRgK4/8CzRiowRrj/wEAnRiElRkZCGx9EQhsffBQBQ0ERH0JBER8LMApVByoGVQkqCFUDKgJVuP/AswINEUa4AQCzFgEFAbgBkLFUUysrS7gH/1JLsARQW7ABiLAlU7ABiLBAUVqwBoiwAFVaW1ixAQGOWYWNjQBCHUuwHVNYsKAdWUuwgFNYsAAdsRYAQlkrKysrKwErACsBcysrKyt0dV5zKwArXnMrKysrK15zc3QrKysrK3MrK3NzcysBXnNec19zKytzc3MrdXNzc3QrdHUAK3QrKysBX3MrKytzdF5zACtecytzdHUrXnMrASsrACsrKysrAStec3MrKyt0K3NzK3MAK3NzdHMrK3QrK3MrcysBKysrGF4AAAYpAAAF7AAfAAAAAAQMAB4AAP/hAAD/4gAAAAD+KQAABuoAvv6HAAABZwXsAPUEDAFnBewAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApACzAKwAzQAAAN8AtACkASkAywC0AVcAtABuAAAArADKAFoA0QAAAKgB6gCxAAAAvgAAAAAAAACsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL8AAAAAAKwBBABKAK4AmwDIAKwAAAAAAJYAhwAyAJwAGgHqABoCiQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFKAZABlgGWAPoBDgAAAM8ACgDxAEsAjACRAGQAmAClARAAZAGGAJEAggGGABQAAAABAAACGAABAFcBgAAGAIoAAgAV/5wAAgAX/5wAAgAa/5wABwA4/2oABwA6/2oAEQA4/2oAEQA6/2oAFQAC/5wAFQAe/zgAFQAg/zgAFQAh/zgAFQAi/zgAFQAk/zgAFQAq/2oAFQAr/2oAFQAs/zgAFQAu/zgAFQAy/2AAFQAz/5IAFQA2/4gAFQA4/ugAFQA6/ugAFQB+/2oAFQB//5wAFQCY/5wAFQCZ/5wAFQCa/5wAFQCb/5wAFQCc/5wAFQCd/5wAFwAC/5wAFwAe/2AAFwAg/2AAFwAh/2AAFwAi/2AAFwAk/2AAFwAq/5wAFwAs/2AAFwAu/2AAFwAy/5wAFwA4/0wAFwA6/0wAFwB//5wAFwCY/5wAFwCZ/5wAFwCa/5wAFwCb/5wAFwCc/5wAFwCd/5wAGgAC/5wAGgAg/3QAGgA4/zgAGgA6/zgAGgB//5wAGgCY/5wAGgCZ/5wAGgCa/5wAGgCb/5wAGgCc/5wAGgCd/5wAIwA4/2AAIwA6/2AAKAAg/84AKAAi/84ANgA4/wYANgA6/wYAfwAV/5wAfwAX/5wAfwAa/5wAmAAV/5wAmAAX/5wAmAAa/5wAmQAV/5wAmQAX/5wAmQAa/5wAmgAV/5wAmgAX/5wAmgAa/5wAmwAV/5wAmwAX/5wAmwAa/5wAnAAV/5wAnAAX/5wAnAAa/5wAnQAV/5wAnQAX/5wAnQAa/5wAAAAIAGYAAwABBAkAAABWAAAAAwABBAkAAQAIAFYAAwABBAkAAgAMAF4AAwABBAkAAwA4AGoAAwABBAkABAAWAKIAAwABBAkABQA+ALgAAwABBAkABgAWAKIAAwABBAkADgBIAPYAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMQAwACAAQQBuAHQAbwBuACAASwBvAG8AdgBpAHQALAAgAFkAYQBzAHMAaQBuACAAQgBhAGcAZwBhAHIALgBBAHIAdgBvAEkAdABhAGwAaQBjAEEAcgB2AG8AIABJAHQAYQBsAGkAYwAgAGIAZQB0AGEAOgAgADEALgAwADAANAAgADIAMAAxADAAQQByAHYAbwAtAEkAdABhAGwAaQBjAFYAZQByAHMAaQBvAG4AIAAxAC4AMAAwADQAIAAyADAAMQAwACAAYgBlAHQAYQAgAHIAZQBsAGUAYQBzAGUAaAB0AHQAcAA6AC8ALwB3AHcAdwAuAGsAbwByAGsAbwByAGsALgBjAG8AbQAvAGwAaQBjAGUAbgBzAGUALwBhAHIAdgBvAC8AAgAAAAAAAP+1ADIAAAAAAAAAAAAAAAAAAAAAAAAAAADVAAAAAgAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0AAwBCAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQAPABAAEQATABQAFQAWABcAGAAZABoAGwAcAAQACAAJAAoABQALAAwADQAOABIAIwA+AD8AQACHAIgAiQCKAIsAqQCqAKsAsgCzALQAtQC2ALcAvgC/AJMA7wAGAB8AIAAhACIABwBeAF8AYABhAIUAhADwAB0AHgDYANkA2gDeAIMAQwCNAI4A3QDcANcAkACgAO4A7QDxAPIA8wECAJ4AnQCkAJcAwwCjAKIAQQDoALwA9QD0APYAkQChAOkA6gCtAMkAxwCuAGIAYwDLAGUAygDIAGQAzwDMAM0AzgBmANMA0ADRAK8AZwDUANUAaADrAGoAaQBrAG0AbABuAHEAcABzAHIAbwB1AHQAdgB3AHgAegB5AHsAfQB8AH4AgACBAOwA1gB/ALoAlgCGAQMAuAC9AQQBBQDFDGZvdXJzdXBlcmlvcg1kaXZpc2lvbnNsYXNoC3R3b2luZmVyaW9yDGZvdXJpbmZlcmlvcgABAAUACAAKAAwABQANAAcALQAL//8ACg==) format('truetype');
+}
+@font-face {
+font-family: 'Arvo';
+font-style: normal;
+font-weight: 400;
+src: local('Arvo'), url(data:font/ttf;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAUoBkAGWAZYAAAAeAAAAAABRAIcAggCMAAADUgNSAAAASgO2ADIAWQAKAAoAeAABAAAAAAABAAABWAABADcAwAAFAIoAAgAV/0gAAgAW/4MAAgAX/5oAAgAY/5wAAgAa/4MAAgAz/5oAAgA2/7QABwAC/7QABwAe/5oABwAg/5EABwAi/5EABwAs/5EABwA4/wAABwA6/wAADAAQ/7QADQAV/2YADQAX/5oADQAY/5wADQAa/yUAEAAZ/5oAEAAa/80AEQAC/4MAEQAe/7QAEQA4/nEAEQA6/mYAFQAC/0gAFQAe/zMAFQAg/woAFQAh/woAFQAi/woAFQAr/1YAFQAs/woAFQAu/wYAFQAy/0gAFQA4/tUAFQA6/tUAFgA4/7QAFgA6/7QAFwAC/5oAFwAs/4MAFwA6/0IAGQAQ/7QAGgAC/2YAGgAw/0gAGgA4/zcAGgA6/ykALAA6/88ALwA4/1YALwA6/2oAMwA4/xQAMwA6/0IANAA6/0IANgA4/ykANgA6/ykAOAAc/xQAAAAIAGYAAwABBAkAAABAAAAAAwABBAkAAQAIAEAAAwABBAkAAgAOAEgAAwABBAkAAwA0AFYAAwABBAkABAAIAEAAAwABBAkABQA+AIoAAwABBAkABgAIAEAAAwABBAkADgBIAMgAQwBvAHAAeQByAGkAZwBoAHQAIAAoAGMAKQAgADIAMAAxADAAIABBAG4AdABvAG4AIABLAG8AbwB2AGkAdAAuAEEAcgB2AG8AUgBlAGcAdQBsAGEAcgBBAHIAdgBvACAAYgBlAHQAYQA6ACAAMQAuADAAMAA0ACAAMgAwADEAMAA7AEsATwBSAEsAVgBlAHIAcwBpAG8AbgAgADEALgAwADAANAAgADIAMAAxADAAIABiAGUAdABhACAAcgBlAGwAZQBhAHMAZQBoAHQAdABwADoALwAvAHcAdwB3AC4AawBvAHIAawBvAHIAawAuAGMAbwBtAC8AbABpAGMAZQBuAHMAZQAvAGEAcgB2AG8ALwAAAAIAAAAAAAD/tQAyAAAAAAAAAAAAAAAAAAAAAAAAAAAA0wAAAAIAJAAlACYAJwAoACkAKgArACwALQAuAC8AMAAxADIAMwA0ADUANgA3ADgAOQA6ADsAPAA9AAMAQgBEAEUARgBHAEgASQBKAEsATABNAE4ATwBQAFEAUgBTAFQAVQBWAFcAWABZAFoAWwBcAF0ADwAQABEAEwAUABUAFgAXABgAGQAaABsAHAAEAAgACQAKAAUACwAMAA0ADgASACMAPgA/AEAAhwCIAIkAigCLAKkAqgCrALIAswC0ALUAtgC3AL4AvwCTAO8ABgAfACAAIQAiAAcAXgBfAGAAYQCFAIQA8AAdAB4A2ADZANoA3gCDAEMAjQCOAN0A3ADXAJAAoADuAO0A8QDyAPMAngCdAL0ApACXAMMAowCiAEEA6AC8APUA9AD2AJEAoQDpAOoAbAB9AHwAgQBiAGcArwBoAK0AyQDHAK4AYwBkAMsAZQDIAMoAzwDMAM0AzgDTAGYA0ADRANYA1ADVAOsAagBpAGsAbQBuAG8AcQBwAHIAcwB1AHQAdgB3AHoAeAB5AHsAfwB+AIAA7AECALgAlgDFAQMAhgC6DWRpdmlzaW9uc2xhc2gMZm91cnN1cGVyaW9yAAABAAUACAAKAAwABQANAAcAOAAH//8ACg==) format('truetype');
+}
+@font-face {
+font-family: 'Arvo';
+font-style: normal;
+font-weight: 700;
+src: local('Arvo Bold'), local('Arvo-Bold'), url(data:font/ttf;base64,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/7cB4P////UAAAM3B9ICJgAKAAAABwB7/8YB4P//AHEAAAZvB6cCJgAPAAAABwB1AZAB4P//AEL/5QX+B7ECJgAQAAAABwB5AXIB4P//AEL/5QX+B7ECJgAQAAAABwB6AegB4P//AEL/5QX+B70CJgAQAAAABwB0AUAB4P//AEL/5QX+B6cCJgAQAAAABwB1AV8B4P//AEL/5QX+B9ICJgAQAAAABwB7AU8B4P//ADP/7AXTB7ECJgAWAAAABwB6AdUB4P//ADP/7AXTB70CJgAWAAAABwB0AS0B4P//ADP/7AXTB9ICJgAWAAAABwB7ATwB4P//AC8AAAXTB7ECJgAaAAAABwB6AcgB4P//AEj/5wR9BdECJgAeAAAABwB5AMkAAP//AEj/5wR9BdECJgAeAAAABwB6AT4AAP//AEj/5wR9Bd0CJgAeAAAABwB0AJcAAP//AEj/5wR9BccCJgAeAAAABwB1ALUAAP//AEj/5wR9BfICJgAeAAABBwB7AKYAAAAKtgIANlQKJFArNP//AEj/5wR9BsUCJgAeAAAABwB8/+IAu///ADP/5QRaBdECJgAiAAAABwB5AKQAAP//ADP/5QRaBdECJgAiAAAABwB6ARkAAP//ADP/5QRaBfICJgAiAAAABwB7AIEAAP//ADP/5QRaBd0CJgAiAAAABgB0cgD//wBI/jkEfQQvAiYAIAAAAAcAdwCtAAD//wBQAAACsQXRACYAelMAAAYAfQAA//8ANwAAArEF0QImAH0AAAAGAHmPAP//AAMAAAMVBd0AJgB0rQAABgB9AAD////rAAADLQXyACYAe7wAAAYAfQAA//8AUAAABX0FxwImACsAAAAHAHUBGQAA//8ASP/nBJYF0QImACwAAAAHAHkAwQAA//8ASP/nBJYF0QImACwAAAAHAHoBNwAA//8ASP/nBJYF3QImACwAAAAHAHQAjwAA//8ASP/nBJYFxwImACwAAAAHAHUArgAA//8ASP/nBJYF8gImACwAAAAHAHsAngAA//8APP/0BToF0QImADIAAAAHAHoBiQAA//8APP/0BToF3QImADIAAAAHAHQA4gAA//8APP/0BToF8gImADIAAAAHAHsA8QAA//8AM/4pBLAF0QImADYAAAAHAHoBNQAAAAEALwAABdMF7AAjAV9A7ZsiAXYiAckaAasaAcYE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/5wAFQCc/5wAFwAC/5wAFwAe/5wAFwAg/2AAFwAh/2AAFwAi/2AAFwAk/2AAFwAq/5wAFwAs/2AAFwAu/2AAFwAy/5wAFwA4/0wAFwA6/0wAFwB+/zgAFwCX/5wAFwCY/5wAFwCZ/5wAFwCa/5wAFwCb/5wAFwCc/5wAGgAC/5wAGgAe/2oAGgAg/zgAGgAh/zgAGgAi/zgAGgAs/zgAGgAu/zgAGgA4/zgAGgA6/x8AGgB+/wYAGgCX/5wAGgCY/5wAGgCZ/5wAGgCa/5wAGgCb/5wAGgCc/5wAIwA4/6YAIwA6/84AKAAg/84AKAAi/84ANgA4/2oANgA6/zgAfgAV/5wAfgAX/5wAlwAV/5wAlwAX/5wAlwAa/2oAmAAV/5wAmAAX/5wAmAAa/2oAmQAV/5wAmQAX/5wAmQAa/2oAmgAV/5wAmgAX/5wAmgAa/2oAmwAV/5wAmwAX/5wAmwAa/2oAnAAV/5wAnAAX/5wAnAAa/2oAAAAAAAgAZgADAAEECQAAAEYAAAADAAEECQABAAgARgADAAEECQACAAgATgADAAEECQADADQAVgADAAEECQAEABIAigADAAEECQAFAD4AnAADAAEECQAGABIA2gADAAEECQAOAEgA7ABDAG8AcAB5AHIAaQBnAGgAdAAgACgAYwApACAAMgAwADEAMAAgAGIAeQAgAEEAbgB0AG8AbgAgAEsAbwBvAHYAaQB0AC4AQQByAHYAbwBCAG8AbABkAEEAcgB2AG8AIABiAGUAdABhADoAIAAxAC4AMAAwADUAIAAyADAAMQAwADsASwBPAFIASwBBAHIAdgBvACAAQgBvAGwAZABWAGUAcgBzAGkAbwBuACAAMQAuADAAMAA1ACAAMgAwADEAMAAgAGIAZQB0AGEAIAByAGUAbABlAGEAcwBlAEEAcgB2AG8ALQBCAG8AbABkAGgAdAB0AHAAOgAvAC8AdwB3AHcALgBrAG8AcgBrAG8AcgBrAC4AYwBvAG0ALwBsAGkAYwBlAG4AcwBlAC8AYQByAHYAbwAvAAAAAgAAAAAAAP9mAGYAAAAAAAAAAAAAAAAAAAAAAAAAAADSAAAAAgAkACUAJgAnACgAKQAqACsALAAtAC4ALwAwADEAMgAzADQANQA2ADcAOAA5ADoAOwA8AD0AAwBCAEQARQBGAEcASABJAEoASwBMAE0ATgBPAFAAUQBSAFMAVABVAFYAVwBYAFkAWgBbAFwAXQAPABAAEQATABQAFQAWABcAGAAZABoAGwAcAAQACAAJAAoABQALAAwADQAOABIAIwA+AD8AQACHAIgAiQCKAIsAqQCqAKsAsgCzALQAtQC2ALcAvgC/AJMA7wAGAB8AIAAhACIABwBeAF8AYABhAIUAhADwAB0AHgDYANkA2gDeAIMAQwCNAI4A3QDXAJAAoADuAO0A8QDyAPMAngCdAL0ApACXAMMAowCiAEEA6AC8APUA9AD2AJEAoQDpAOoArQDJAMcArgBiAGMAywBlAMoAyABkAM8AzADNAM4AZgDTANAA0QCvAGcA1ADVAGgA6wBqAGkAawBtAGwAbgBxAHAAcwByAG8AdAB1AHYAdwB4AHoAeQB7AH0AfAB+AIAAgQDsAJYAhgDWAH8AugC4AQIBAwDFC3R3b2luZmVyaW9yDGZvdXJpbmZlcmlvcgAAAQAFAAgACgAMAAUADQAHADgAB///AAo=) format('truetype');
+}
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+article, menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+margin: 0;
+padding: 0;
+border: 0;
+font: inherit;
+vertical-align: baseline;
+}
+
+body {
+padding: 10px 50px 0 0;
+font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+font-size: 15px;
+color: #030303;
+background-color: #FCFBF8;
+margin: 0;
+line-height: 1.8em;
+-webkit-font-smoothing: antialiased;
+}
+h1, h2, h3, h4, h5, h6 {
+color: #232323;
+margin: 36px 0 10px;
+}
+p, ul, ol, table, dl {
+margin: 0 0 22px;
+}
+sub, sup {
+font-size: 80%;
+}
+sub {
+vertical-align: sub;
+}
+sup {
+vertical-align: sup;
+}
+.author-list {
+margin:0 0 0px;
+font-weight: 700;
+}
+.author-affiliations {
+margin:0 0 0px;
+font-style: italic;
+}
+.contact_email {
+font-style: italic;
+}
+.abstract {
+margin: 0% 1% 2%;
+font-weight: 700;
+}
+h1, h2, h3 {
+border-bottom: 1px solid #ccc;
+font-family: Arvo, Monaco, serif;
+font-weight: normal;
+line-height: 1.3;
+padding-bottom: 5px;
+}
+h1 {
+font-size: 30px;
+}
+h2 {
+font-size: 24px;
+}
+h3 {
+font-size: 18px;
+}
+h4, h5 {
+font-family: Arvo, Monaco, serif;
+font-weight: 700;
+}
+h6 {
+font-family: Arvo, Monaco, serif;
+font-weight: 200;
+}
+a {
+font-weight:200;
+text-decoration:none;
+}
+a:hover {
+text-decoration: underline;
+}
+a small {
+font-size: 12px;
+}
+em {
+font-style: italic;
+}
+strong {
+font-weight:700;
+}
+sup {
+vertical-align: super;
+font-size: smaller;
+}
+ul {
+list-style-position: inside;
+list-style: disc;
+padding-left: 25px;
+}
+ol {
+list-style-position: inside;
+list-style: decimal;
+padding-left: 25px;
+}
+blockquote {
+margin: 0;
+padding: 0 0 0 20px;
+font-style: italic;
+}
+dl, dt, dd, dl p {
+font-color: #444;
+}
+dl dt {
+font-weight: bold;
+}
+dl dd {
+padding-left: 20px;
+font-style: italic;
+}
+dl p {
+padding-left: 20px;
+font-style: italic;
+}
+hr {
+border: 0;
+background: #ccc;
+height: 1px;
+margin: 0 0 24px;
+}
+
+img {
+position: relative;
+margin: 0 auto;
+height: auto;
+max-width: 100%;
+padding: 0px;
+margin: 0px 0 0px 0;
+border: 0px solid #ccc;
+}
+p img {
+display: inline;
+margin: 0;
+padding: 0;
+vertical-align: middle;
+text-align: center;
+border: none;
+}
+figure {
+border: 1px solid #ccc;
+background: #FFFFFF;
+}
+figcaption {
+font-size: 12px;
+background: #FFFFFF;
+line-height: 150%;
+margin-right: 1%;
+margin-left: 1%;
+}
+
+code, pre {
+font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
+color: #000;
+background: #e7e7e7;
+font-size: 12px;
+}
+pre {
+padding: 4px 12px;
+border-radius:4px;
+border:1px solid #D7D8C8;
+overflow: auto;
+overflow-y: hidden;
+margin-bottom: 32px;
+}
+
+table {
+width: 100%;
+border: 1px solid #ccc;
+margin-bottom: 32px;
+text-align: left;
+}
+table.figure_controls {
+font-size: 12px;
+line-height: 100%;
+margin-bottom: 0px;
+}
+th {
+background: #232323;
+color: #FDFEFB;
+font-family: 'Arvo', Helvetica, Arial, sans-serif;
+font-size: 18px;
+font-weight: normal;
+padding: 10px;
+}
+td {
+background: #eee;
+padding: 0px;
+}
+
+.wrapper {
+width:960px;
+}
+
+.page-header {
+background-color: #474747;
+border-bottom-right-radius: 4px;
+border-top-right-radius: 4px;
+border: 1px solid #000;
+color: #FDFDFB;
+float: left;
+margin: 30px 25px 0 0;
+padding: 34px 25px 22px 50px;
+position: fixed;
+width: 170px;
+-webkit-font-smoothing: antialiased;
+}
+.subtitle {
+font-size: 16px;
+}
+.page-header h1 {
+font-family: Arvo, sans-serif;
+font-size: 30px;
+font-weight: 300;
+line-height: 1.3em;
+border-bottom: none;
+margin-top: 0;
+}
+.page-header h1,
+.page-header a {
+color: #fff;
+}
+.page-header a {
+text-decoration: underline;
+}
+a.name {
+white-space: nowrap;
+}
+.page-header ul {
+list-style:none;
+padding:0;
+}
+.page-header li {
+list-style-type: none;
+width: 135px;
+height: 15px;
+margin-bottom: 12px;
+line-height: 1em;
+padding: 6px 6px 6px 7px;
+background: #1100AF;
+background: -moz-linear-gradient(top, #1100AF 0%, #110082 100%);
+background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%, #dddddd));
+background: -webkit-linear-gradient(top, #1100AF 0%,#110082 100%);
+background: -o-linear-gradient(top, #1100AF 0%,#110082 100%);
+background: -ms-linear-gradient(top, #1100AF 0%,#110082 100%);
+background: linear-gradient(top, #1100AF 0%,#110082 100%);
+border-radius:4px;
+border:1px solid #0D0D0D;
+-webkit-box-shadow: inset 0px 1px 1px 0 rgba(38,2,233, 1);
+box-shadow: inset 0px 1px 1px 0 rgba(38,2,233, 1);
+}
+.page-header li:hover {
+background: #1D00C3;
+background: -moz-linear-gradient(top, #1D00C3 0%, #190195 100%);
+background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
+background: -webkit-linear-gradient(top, #1D00C3 0%,#190195 100%);
+background: -o-linear-gradient(top, #1D00C3 0%,#190195 100%);
+background: -ms-linear-gradient(top, #1D00C3 0%,#190195 100%);
+background: linear-gradient(top, #1D00C3 0%,#190195 100%);
+}
+.buttons {
+-webkit-font-smoothing: antialiased;
+background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAATCAYAAACk9eypAAAAn0lEQVQokWNgQAUBQNyAhgMYcIH4uNgrdbU1/5ExSAynhlMnj73//ev7f2QMEhvVQBcNAkDsAMLHjh3+jK4BJAaTB6tVVFSstLe3+w/CZ8+c/I+uASQGkwepZQAKFqArwoMLwG4CMuYToXg+ike+f/t8CZdikBxGCAElBLBpgooJYA1WkMSP718+wRRD2dgVI2kyACmEKjbAqxhZEy7FAPYzsnpKYeUBAAAAAElFTkSuQmCC) no-repeat;
+font-weight: normal;
+height: 30px;
+padding: 2px 2px 2px 22px;
+text-shadow: rgba(0, 0, 0, 0.4) 0 -1px 0;
+}
+a.buttons {
+text-decoration: none;
+}
+.buttons.github {
+background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAASCAYAAABrXO8xAAABLElEQVQ4y2NggIACIP4AxA1ALAAVc4BiBSg/AIgvAPEBBhiYMWPajtevXvyvra35Lygo8BEo9N/ezg6M5eXl/4P4fn6+/8+cPvl//769v+Ealy9beuDXz+//QRhkAIyNDb998+oPXGNXZ8cLfIqR8elTJ/9Dnc3gAHICsRpBOC4u9gpDSkryAlI0gfCe3bv+o/iPFMywbeuWDWRpPH/uTAmpmt69ff2LAchQIFXjg/t3j4CjA8hpIFEzKEUxzAclNSAnHojvE9AAkg+A2Ta/rbXlPTS9MmRlZRbu3r0TRcP6dWt/AWl7BnTw8cO750WFBd9gaRLdJlAyZMAGQG7+8f3rR7zBjwtAQ9d+757dk0nSCAOXL13wIUsjUJEAEPcD8Xkgfg/E64E4H10dAALmsqg9r5JTAAAAAElFTkSuQmCC) no-repeat 1px;
+}
+.buttons.pdf {
+background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAQCAMAAAD6fQULAAADAFBMVEVOAAD///+pqqr8//8ODg7BwcH4///3+PjcAACtAADkCgrl5eXSAADGAAD8/PxiAADx8fH9eHj71NT/KyvKysonJyf9W1u1tbX9R0f9kpL9qamjo6OdqamcnJz9IyP7rKyHh4d0dXWEAAD5wsL78/P83d3+YmLU1NTP4ODd3d16ioq73d3d5OQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACP6ku1AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfhAggVDQ+RRBtPAAAAfklEQVQI10XPSw6DMAxF0RgXe2AJJSnfUAiopZXY/wKJTAp3dvQGlo0pzoxWAgASlTJKVuoFMsmlHUDGe1vXZboEVuoly21krf11pgZm6j2x5apLW1KMxMxQJFVM7UxEeAo/vX++g1chfrcQB9eqvAuoqeYhn1TdpUeax7/GHO/uBuOoa/RSAAAAAElFTkSuQmCC) no-repeat 1px;
+}
+.buttons:hover {
+color: #fff;
+text-decoration: none;
+}
+
+article {
+width: 650px;
+float: right;
+padding-bottom: 50px;
+}
+
+footer {
+width: 170px;
+float: left;
+position: fixed;
+bottom: 10px;
+padding-left: 50px;
+}
+@media print, screen and (max-width: 960px) {
+div.wrapper {
+width: auto;
+margin: 0;
+}
+.page-header, article, footer {
+float: none;
+position: static;
+width: auto;
+}
+footer {
+border-top: 1px solid #ccc;
+margin: 0 84px 0 50px;
+padding: 0;
+}
+.page-header {
+padding-right: 320px;
+}
+article {
+padding: 20px 84px 20px 50px;
+margin: 0 0 20px;
+}
+.page-header a small {
+display: inline;
+}
+.page-header ul {
+position: absolute;
+right: 130px;
+top: 84px;
+}
+}
+@media print, screen and (max-width: 720px) {
+body {
+word-wrap:break-word;
+}
+.page-header {
+padding: 10px 20px 0;
+margin-right: 0;
+}
+article {
+margin: 0 0 30px;
+padding: 10px 0 10px 20px;
+}
+footer {
+margin: 0 0 0 30px;
+}
+.page-header ul, .page-header p.view {
+position: static;
+}
+}
+@media print, screen and (max-width: 480px) {
+.page-header ul li.download {
+display: none;
+}
+footer {
+margin: 0 0 0 20px;
+}
+footer a {
+display:block;
+}
+}
+@media print {
+body {
+padding:0.4in;
+font-size:12pt;
+color:#444;
+}
+}
+.onlyprint {display: none;}
+@media print {
+.onlyprint {display: block;}
+}
+</style>
+ <script data-external="1" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-AMS_CHTML-full"></script>
+ <!--[if lt IE 9]>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+ <![endif]-->
+</head>
+<body>
+<div class="wrapper">
+<article typeof="ScholarlyArticle" vocab="http://schema.org/">
+ <!-- <header class="article-header"> -->
+<h1 property="headline">A comparison of random forest, support vector machine, deep learning and lazar algorithms for predicting mutagenicity</h1>
+<!-- </header> -->
+<p class="author-list">
+ <span property="author" typeof="Person">
+ Christoph Helma</span><sup><a href="mailto:helma@in-silico.ch">✉</a> 1</sup>,
+ <span property="author" typeof="Person">
+ Verena Schöning</span><sup>2</sup>,
+ <span property="author" typeof="Person">
+ Philipp Boss</span><sup>2</sup>,
+ <span property="author" typeof="Person">
+ Jürgen Drewe</span><sup>2</sup></p>
+<div class="author_affiliations">
+ <div class="affiliation"><sup>1</sup>in silico toxicology gmbh, Rastatterstrasse 41, 4057 Basel, Switzerland
+ </div>
+ <div class="affiliation"><sup>2</sup>Zeller AG, Seeblickstrasse 4, 8590 Romanshorn, Switzerland
+ </div>
+</div>
+<div class="author-info">
+ <div class="author-correspondence">
+ Correspondence: Christoph Helma <a href="mailto:helma@in-silico.ch">&lt;helma@in-silico.ch&gt;</a>
+ </div>
+ </div>
+<p class="abstract" property="description"><p>k-nearest neighbor (<code>lazar</code>), random forest, support vector machine and deep learning algorithms were applied to a new <em>Salmonella</em> mutagenicity dataset with 8281 unique chemical structures. Algorithm performance was evaluated using 5-fold crossvalidation. TODO - results - conclusion</p></p>
+
+
+
+<div property="articleBody" class="article-body">
+<h1 id="introduction">Introduction</h1>
+<p>TODO: algo history</p>
+<p>TODO: dataset history</p>
+<p>TODO: open problems</p>
+<h1 id="materials-and-methods">Materials and Methods</h1>
+<h2 id="mutagenicity-data">Mutagenicity data</h2>
+<p>For all methods, the same training dataset was used. The training dataset was compiled from the following sources:</p>
+<ul>
+<li><p>Kazius/Bursi Dataset (4337 compounds, <span class="citation" data-cites="Kazius2005">Kazius, McGuire, and Bursi (2005)</span>): <a href="http://cheminformatics.org/datasets/bursi/cas_4337.zip" class="uri">http://cheminformatics.org/datasets/bursi/cas_4337.zip</a></p></li>
+<li><p>Hansen Dataset (6513 compounds, <span class="citation" data-cites="Hansen2009">Hansen et al. (2009)</span>): <a href="http://doc.ml.tu-berlin.de/toxbenchmark/Mutagenicity_N6512.csv" class="uri">http://doc.ml.tu-berlin.de/toxbenchmark/Mutagenicity_N6512.csv</a></p></li>
+<li><p>EFSA Dataset (695 compounds): <a href="https://data.europa.eu/euodp/data/storage/f/2017-0719T142131/GENOTOX%20data%20and%20dictionary.xls" class="uri">https://data.europa.eu/euodp/data/storage/f/2017-0719T142131/GENOTOX%20data%20and%20dictionary.xls</a></p></li>
+</ul>
+<p>Mutagenicity classifications from Kazius and Hansen datasets were used without further processing. To achieve consistency between these datasets, EFSA compounds were classified as mutagenic, if at least one positive result was found for TA98 or T100 Salmonella strains.</p>
+<p>Dataset merges were based on unique SMILES (<em>Simplified Molecular Input Line Entry Specification</em>) strings of the compound structures. Duplicated experimental data with the same outcome was merged into a single value, because it is likely that it originated from the same experiment. Contradictory results were kept as multiple measurements in the database. The combined training dataset contains 8281 unique structures.</p>
+<p>Source code for all data download, extraction and merge operations is publicly available from the git repository <a href="https://git.in-silico.ch/pyrrolizidine" class="uri">https://git.in-silico.ch/pyrrolizidine</a> under a GPL3 License.</p>
+<p>TODO: check/fix git repo</p>
+<p>For the Random Forest (RF), Support Vector Machines (SVM), and Deep Learning (DL) models, molecular descriptors were calculated with the PaDEL-Descriptors program (<a href="http://www.yapcwsoft.com" class="uri">http://www.yapcwsoft.com</a> version 2.21, <span class="citation" data-cites="Yap2011">Yap (2011)</span>).</p>
+<p>TODO: sentence ??</p>
+<p>From these descriptors were chosen, which were actually used for the generation of the DL model.</p>
+<h2 id="algorithms">Algorithms</h2>
+<h3 id="lazar"><code>lazar</code></h3>
+<p><code>lazar</code> (<em>lazy structure activity relationships</em>) is a modular framework for read-across model development and validation. It follows the following basic workflow: For a given chemical structure <code>lazar</code>:</p>
+<ul>
+<li><p>searches in a database for similar structures (neighbours) with experimental data,</p></li>
+<li><p>builds a local QSAR model with these neighbours and</p></li>
+<li><p>uses this model to predict the unknown activity of the query compound.</p></li>
+</ul>
+<p>This procedure resembles an automated version of read across predictions in toxicology, in machine learning terms it would be classified as a k-nearest-neighbour algorithm.</p>
+<p>Apart from this basic workflow, <code>lazar</code> is completely modular and allows the researcher to use any algorithm for similarity searches and local QSAR (<em>Quantitative structure–activity relationship</em>) modelling. Algorithms used within this study are described in the following sections.</p>
+<h4 id="neighbour-identification">Neighbour identification</h4>
+<p>Similarity calculations were based on MolPrint2D fingerprints (<span class="citation" data-cites="Bender2004">Bender et al. (2004)</span>) from the OpenBabel cheminformatics library (<span class="citation" data-cites="OBoyle2011a">O’Boyle et al. (2011)</span>). The MolPrint2D fingerprint uses atom environments as molecular representation, which resembles basically the chemical concept of functional groups. For each atom in a molecule, it represents the chemical environment using the atom types of connected atoms.</p>
+<p>MolPrint2D fingerprints are generated dynamically from chemical structures and do not rely on predefined lists of fragments (such as OpenBabel FP3, FP4 or MACCs fingerprints or lists of toxicophores/toxicophobes). This has the advantage that they may capture substructures of toxicological relevance that are not included in other fingerprints.</p>
+<p>From MolPrint2D fingerprints a feature vector with all atom environments of a compound can be constructed that can be used to calculate chemical similarities.</p>
+<p>The chemical similarity between two compounds a and b is expressed as the proportion between atom environments common in both structures A ∩ B and the total number of atom environments A U B (Jaccard/Tanimoto index).</p>
+<p><span class="math display">\[sim = \frac{\left| A\ \cap B \right|}{\left| A\ \cup B \right|}\]</span></p>
+<p>Threshold selection is a trade-off between prediction accuracy (high threshold) and the number of predictable compounds (low threshold). As it is in many practical cases desirable to make predictions even in the absence of closely related neighbours, we follow a tiered approach:</p>
+<ul>
+<li><p>First a similarity threshold of 0.5 is used to collect neighbours, to create a local QSAR model and to make a prediction for the query compound.</p></li>
+<li><p>If any of these steps fails, the procedure is repeated with a similarity threshold of 0.2 and the prediction is flagged with a warning that it might be out of the applicability domain of the training data.</p></li>
+<li><p>Similarity thresholds of 0.5 and 0.2 are the default values chosen &gt; by the software developers and remained unchanged during the &gt; course of these experiments.</p></li>
+</ul>
+<p>Compounds with the same structure as the query structure are automatically eliminated from neighbours to obtain unbiased predictions in the presence of duplicates.</p>
+<h4 id="local-qsar-models-and-predictions">Local QSAR models and predictions</h4>
+<p>Only similar compounds (neighbours) above the threshold are used for local QSAR models. In this investigation, we are using a weighted majority vote from the neighbour’s experimental data for mutagenicity classifications. Probabilities for both classes (mutagenic/non-mutagenic) are calculated according to the following formula and the class with the higher probability is used as prediction outcome.</p>
+<p><span class="math display">\[p_{c} = \ \frac{\sum_{}^{}\text{sim}_{n,c}}{\sum_{}^{}\text{sim}_{n}}\]</span></p>
+<p><span class="math inline">\(p_{c}\)</span> Probability of class c (e.g. mutagenic or non-mutagenic)<br />
+<span class="math inline">\(\sum_{}^{}\text{sim}_{n,c}\)</span> Sum of similarities of neighbours with class c<br />
+<span class="math inline">\(\sum_{}^{}\text{sim}_{n}\)</span> Sum of all neighbours</p>
+<h4 id="applicability-domain">Applicability domain</h4>
+<p>The applicability domain (AD) of <code>lazar</code> models is determined by the structural diversity of the training data. If no similar compounds are found in the training data no predictions will be generated. Warnings are issued if the similarity threshold had to be lowered from 0.5 to 0.2 in order to enable predictions. Predictions without warnings can be considered as close to the applicability domain and predictions with warnings as more distant from the applicability domain. Quantitative applicability domain information can be obtained from the similarities of individual neighbours.</p>
+<h4 id="availability">Availability</h4>
+<ul>
+<li><p><code>lazar</code> experiments for this manuscript: <a href="https://git.in-silico.ch/pyrrolizidine" class="uri">https://git.in-silico.ch/pyrrolizidine</a> (source code, GPL3)</p></li>
+<li><p><code>lazar</code> framework: <a href="https://git.in-silico.ch/lazar" class="uri">https://git.in-silico.ch/lazar</a> (source code, GPL3)</p></li>
+<li><p><code>lazar</code> GUI: <a href="https://git.in-silico.ch/lazar-gui" class="uri">https://git.in-silico.ch/lazar-gui</a> (source code, GPL3)</p></li>
+<li><p>Public web interface: <a href="https://lazar.in-silico.ch" class="uri">https://lazar.in-silico.ch</a></p></li>
+</ul>
+<h3 id="random-forest-support-vector-machines-and-deep-learning-in-r-project">Random Forest, Support Vector Machines, and Deep Learning in R-project</h3>
+<p>In comparison to <code>lazar</code>, three other models (Random Forest (RF), Support Vector Machines (SVM), and Deep Learning (DL)) were evaluated.</p>
+<p>For the generation of these models, molecular 1D and 2D descriptors of the training dataset were calculated using PaDEL-Descriptors (<a href="http://www.yapcwsoft.com" class="uri">http://www.yapcwsoft.com</a> version 2.21, <span class="citation" data-cites="Yap2011">Yap (2011)</span>).</p>
+<p>As the training dataset contained over 8280 instances, it was decided to delete instances with missing values during data pre-processing. Furthermore, substances with equivocal outcome were removed. The final training dataset contained 8080 instances with known mutagenic potential. The RF, SVM, and DL models were generated using the R software (R-project for Statistical Computing, <a href="https://www.r-project.org/" class="uri">https://www.r-project.org/</a><em>;</em> version 3.3.1), specific R packages used are identified for each step in the description below. During feature selection, descriptor with near zero variance were removed using ‘<em>NearZeroVar</em>’-function (package ‘caret’). If the percentage of the most common value was more than 90% or when the frequency ratio of the most common value to the second most common value was greater than 95:5 (e.g. 95 instances of the most common value and only 5 or less instances of the second most common value), a descriptor was classified as having a near zero variance. After that, highly correlated descriptors were removed using the ‘<em>findCorrelation</em>’-function (package ‘caret’) with a cut-off of 0.9. This resulted in a training dataset with 516 descriptors. These descriptors were scaled to be in the range between 0 and 1 using the ‘<em>preProcess</em>’-function (package ‘caret’). The scaling routine was saved in order to apply the same scaling on the testing dataset. As these three steps did not consider the outcome, it was decided that they do not need to be included in the cross-validation of the model. To further reduce the number of features, a LASSO (<em>least absolute shrinkage and selection operator</em>) regression was performed using the ‘<em>glmnet</em>’-function (package ‘<em>glmnet</em>’). The reduced dataset was used for the generation of the pre-trained models.</p>
+<p>For the RF model, the ‘<em>randomForest</em>’-function (package ‘<em>randomForest</em>’) was used. A forest with 1000 trees with maximal terminal nodes of 200 was grown for the prediction.</p>
+<p>The ‘<em>svm</em>’-function (package ‘e1071’) with a <em>radial basis function kernel</em> was used for the SVM model.</p>
+<p>The DL model was generated using the ‘<em>h2o.deeplearning</em>’-function (package ‘<em>h2o</em>’). The DL contained four hidden layer with 70, 50, 50, and 10 neurons, respectively. Other hyperparameter were set as follows: l1=1.0E-7, l2=1.0E-11, epsilon = 1.0E-10, rho = 0.8, and quantile_alpha = 0.5. For all other hyperparameter, the default values were used. Weights and biases were in a first step determined with an unsupervised DL model. These values were then used for the actual, supervised DL model.</p>
+<p>To validate these models, an internal cross-validation approach was chosen. The training dataset was randomly split in training data, which contained 95% of the data, and validation data, which contain 5% of the data. A feature selection with LASSO on the training data was performed, reducing the number of descriptors to approximately 100. This step was repeated five times. Based on each of the five different training data, the predictive models were trained and the performance tested with the validation data. This step was repeated 10 times. Furthermore, a y-randomisation using the RF model was performed. During y-randomisation, the outcome (y-variable) is randomly permuted. The theory is that after randomisation of the outcome, the model should not be able to correlate the outcome to the properties (descriptor values) of the substances. The performance of the model should therefore indicate a by change prediction with an accuracy of about 50%. If this is true, it can be concluded that correlation between actual outcome and properties of the substances is real and not by chance (<span class="citation" data-cites="Rücker2007">Rücker, Rücker, and Meringer (2007)</span>).</p>
+<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABAkAAAOICAIAAAA7Lj8lAAAAAXNSR0IArs4c6QAA/8pJREFUeF7snQV8VEfXhxslhBAIECAQEiAkuLu7FXcr0hYopUqBlgoUaKG01IVCS1vc3d3d3d3dXb8H5n332zehZEk2yW7yv/Db32bv3Jkzz8y995yZc2ZcHj9+/JIOERABERABERABERABERCBBE/ANcETEAAREAEREAEREAEREAEREIEnBGQbqB+IgAiIgAiIgAiIgAiIgAjINlAfEAEREAEREAEREAEREAER+C8BzRuoL4iACIiACIiACIiACIiACDwh4BIuFvnhw4d37ty5d++e8IiACIiACIiACIhADBE4d/58Ik9Pb+8kHh7uMVSEshUBEXgOAV9fXzc3t4gJwtsG165dO3DgwIkTJ0RTBERABERABERABGKIwLz5C/z9/bOEhCRN6hNDRShbERCBfyPg6upapkwZzIPIbYPdu3f/PnDgxImTRFMEREAEREAEREAEYojArVu3GbP08PBwdXWJoSKUrQiIwL8R8PDwnDN7ZrZs2SK3DbZv3z5s2PCjx441bdJEQEVABOKEwNZt29atW3/n9u32b7RL5JkoTmRQoSIgAiIQowS6ffxJ9uzZKleulC4gXYwWpMxFQASsCVy6dGnd+vXDh49Yv25Nrly5bLINmDR49OhR7969hFIERCBOCMyfv2DK1KnXr10fOHCAt7d3nMigQkVABEQgRgkULVaidKmS7du3CwsLi9GClLkIiIA1gZMnT06dOq1zl67/ZhtonSJ1GBEQAREQAREQAREQAREQgScEZBuoH4iACIiACIiACIiACIiACMg2UB8QAREQAREQAREQAREQARH4LwHNG6gviIAIiIAIiIAIiIAIiIAIaN5AfUAEREAEREAEREAEREAEREDzBuoDIuCwBNw93FmeKEmSJC4uWvbbYVtJgomACESLQI7s2TJkCPTy8opWLrpYBETA3gTkU2RvospPBKJNwC95cvYKDcsaxraF0c5MGYiACIiAIxLo1On9OnXqsDWyIwonmUQgAROQ5pGAG19Vd1QCOXLkaNas6WuvtvH09HRUGSWXCIiACESLABuyBgZq3iBaDHWxCMQEAdkGMUFVeYpAtAhgEvj6+iZLlkw+RdHiqItFQAQcmAAPOnd3dz3lHLiJJFoCJSDbIIE2vKotAiIgAiIgAiIgAiIgAuEIyDZQlxABERCB2CDw8OHDS5cu3bx588GDB7FRXsyXce/evSNHjty9ezfmi/pPCffv379+/frVq1djrUQVJAIi4AgELly4cPHiRUeQJCHIINvAzq386NEj3pRoAHRi64Nfbty4wYvNzuU5SXYwuXbtGgScRN4ELebjx4/pqFeuXAnXh/nz8uXLqLZ0cvsCojj6BiVStH1zNrmR7Z07dxA+Yo0o9NatWzFRaLg8gYZGu3z58gMHDthyIyDz7du3LTLzAOFyfsHAiAVpbSkCSc6cOTNs2LBz586FS2/u92dq8HCg+pzCrrCllHBpKHH79u07duyIZic0YpgujbThOh6c6Rimt0dBSC4hf7oc+fMZUVQ6PHw4HKc1o1ZNXRX/CHA7cHtGuedHBMJQCLlxL0RnTIQceHiuW7fO8nriua3bJ+a6n2wDO7PlFT5r1qwyZcoU+t+DXz799NO1a9fauTwnyW7evHnt27f/+OOPnUTeBC0m2syGDRuaNWsWrg/zZ82aNfv37x/Np3xEuOvXr6dvNGzYEJ0sJtCj540YMaJ27doRa1SvXr0//vgjFox2Br24C9555501a9bYYhuEk7lEiRItWrT4888/MS1iAlEU8kSSf/7559dffz19+nS4y6np22+//frrr0c0AM6fP//555+/9tprCxYsiIJ+T2P17t370KFD0TQjEaNHjx70h1q1aiFtODNmyJAhjRs3rlatWp8+faKmf5D/pEmTihQpMnbs2LNnz4bjs2rVqo5PD2ZdokBel4hADBHgtpo+fXqrVq2++uorexWxd+/eb775hnth3759UcuTB0Xfvn15hnO/8PDkEVq3bt0ffvhBt0/UeNpylWwDWyi9QBo6MQbusWPHSpUq9eGHH6JImePll1/mxhg+fPiePXui9rJ5ASEcL2m+fPnefPPNV155xfFEk0ThCZhR9lOnToWFhb377ruWPvzBBx+EhobOnTuXZ3REdSc6HCkOXerkyZPRVPj+TQbuSsZoT5w4gS7YvXt3S4348tFHH1WpUsXNzS068ttyLXc9TwaG2LF/Iq3m8ePHJ06cyJB8/vz5u3Xrhpw8TJImTYqiOWPGDM7aUmJMp8GgQqVmcD3icCCLzyRPnpzRfd7iuABZS7J161aehCxpnydPnigEoWIyYWVF35ZDZvJBt0BxWbhwYTjbYOXKlZs2baLDYAZH2ljP5Exzo8QcPXr0mZMDrM/zxtMjderUMd1Myl8EXogA/RZr347eO+nTp2cIBvMgXbp0LySJdWLk4VbixufRwYuJpyJWvW6fKPOM9EL3SFMoQdQI5M6du3r16hkzZjSX05u5NzZv3syrkV7O29H4ZvAKIWXBggV5g27ZsmXnzp0kZvUGlDDenZbLrWXYvXs3+fBi8/Pz4x4mB+4QMsEuJ9no0aPJn8UfeGfzZ4MGDfjOJbwCGcPjPRccHJw3b96cOXOaPDFjLOX6+PjwO1mlSpWKiUVGc7nQ5JYyZcqiRYsiDxtyMZfHuBdGDjKjVKGycAkH6+ow48/cCGUhlYeHhxGMg5S8aLkWLRCXgI0bN3KWA3UQGdKmTYvSxvuSX/iTFzMcKJc/eZqgTvGJkgSTqLWFrooagcyZM1euXDlXrlzmcrocCt/+/funTJlSvnx5nvjYD0zy0pmNuZs4cWJ+ZISbBcuZ/921a1eKFCloeg60QNOIWbNmZdMGptfoP3RjTtHrsDTI3CIkGhWdhGxNj6XXYVtmz56dBCNHjuTVRUEmW64lQ/4kN3IgMckohU7+zCrTx5j6eOYbha6LLkvt0D65NiAgoHDhwty29HbGlfk08+ysH1WuXDmqefjw4W3btkGAxNwd3K0UjTxIxS3AmDpvMm4cbqUCBQrQw+nSzCiikqKJkoxMsmTJ8m/tgs46Z84cng8MXcMT7ORGVhg23JXcv1SZMXsK5TuZc1tx061evZomQ2ZExYSjmgjMhdxHSMjUJSo7fyI280Jp0qQxZxMlSpQpUybOkgbgtAX5cGOSJ6VwiWlQ6sWzizuXZDQfqElJ6yMkQx40CtVEQlMjxEA2+gBVpvl4RFhqumjRIr7zxKNvcDkZIi2PEZ5m/Ehr8pQgAYItWbKE+QFMKfYBzJAhA8RARxvRUvPnz0fsqlWr0q9oMnqLUeKRje5KPpwlDSktwQlly5algSjFmjkV5OCBw0ApNUUMnnvApwfSS3mgmcRkQhG0oKWXwpyCqCMFcRZDgrPGwKC+PCot+3nRjem0UDKtULx48aCgIMibRx+rFdOReAJTKBdSLvUFFwC5xcicO4sfaS8SUEFEon25HQxqbjFuIp7hfCexwc5n1O53XRVXBOhC3AjcwjxzeF2a9yA3I08e+kPJkiWttWq6KO99bnDz1OXRRGdAUeZHOpJl4ICuwt1EV6HX8azgyYNeQUHcqnzhSUhB3FbkwEOMDnzw4EFK5NHEDWWZ2KTL8TTgpuP+4o6gj3Fz0WnJk+KGDh3KcxIxyJZr6be8x3lf01e5F7g3eXSgUVA0P/JIZMAUaflCpzVPToTkMYgk5GOeMHRpi1nCj/Rnbkz6P094bhkmG7mzeCtRBLXgOUzpPCtQSLiPyIEfoUG55llHhlSNOwt1iAc78nMJTxLSxMJ4UFx1J7uUK9vALhgjz4QuziuBtzJ9mmPUqFHcJLxguDcwhVE4uCVmz57NKb7TxenBvPmY1464kCWZ4FrAq4i7jtuPfLhpuRl4fHD8/fffJOALr1geIrwOeZ+RM+8PNAzuOt6O3BucRR5uYF7AjFByu3IJY7fIiWtHhQoVyH/cuHHckNzYqDhmMgSvDN5MPDsGDRqEZkC5vPN4eCHJ+++/z4MGrWjgwIFkyxsXwbgVixUrhqLGMwuZqS9F8yb+7bffzJvMqFxkQqE8lbifKQU4vIn5kfucT6pDJqSXbRB5P4vJFDxPaQJ6Jn2G/oCCSFP+9ddfPIJpbjqbUdbpMJUqVUIp5M1Bb0EF5Bd6C12O2bP33nuPhzLP62nTpqEa0ttpYroBbxqjTpEtKiCj4xiT9Fh6LzlUrFjRKIi4lHCP0HO4kBcYaVDR6Ff8SCl0Yzo83lAISae1EYaZJ1m8eLG5Ael11I6+TeYMd1EjKoJ+hpxISBflZYaQ6Li8kLiQnon8vDKNzxJdnfS8xswLnu7NjczUBG9H3v2Uxe3DwevwObYBV3Ej8GqkRLP/HfUlf+4vHhdIAk9cYl599VUahepzD/L6/Pbbb7ElmG1HWqwINAOEN2Pz1Ig0jFbwZebMmb/88osx5oFGw1EKrcNdxusTdQRdnyJoJt67tCyPhRo1atC4mCtcCGHzUII/YlAjWpNWoDiLbUAClA8O3uX169fn2UJzUBbPH1QNehGl84RhYoRPMzBPiagguCHRZ9AzUJV+/PFH8FIQVUbtQB6uNeo+Dc1bn9EQFAJcIBDAjFmQCSYKxDhFF1qxYgW1poGoIDB54oWzDVBxQkJCeMJAmy+ITaWWLl1K29HQxkrhIAEzNrQsv1MR1BrypJPTP2lESmcmjTSUQsNxFZDNSA0H7UIdjRrHWWCy2xdic+PwC6qbeeJhyfBsNDcRMlM6ph2oIcwp6ohgFEoCFB2aic6AukMdjfpIQ3OnwJnW51M7Ddt47ztIMrou6jKvzpYtW2K08/hCMNMxuDt4KVvLSR/gAfLdd99xm9BPeDLQD7mn6Lc8lLhl6IH0NDoMoyQ8IjAycfyjt9D/6SdcxfMB/b5p06Y837gruUl5XPPI4mY3ir6JICIrZOBphnKCGHR+eiPGbZMmTXhWYITgCMqNb+5u+iQPTB4UlEsn55ObFDnbtm3LhTztqR1PQuN0zSPI3ErcKfRnOjOqDgTGjBnDQ4BT3OzcZcjDJTy1eHKSJ1UgQ566XMKzznR1bnYe3Tyy6P/mUcntwLWMAUGVcgcMGAAB7ghEojieJ2SLucW97yCt75hiyKcoltqF24x7kr5rNAa6Lxozc8o4ttL1eX+giJPg559/RkFhvox+zGgTb53nhO/wEOGWoOvzXOD2RsU33r3cErxUyPn777/nct4rPAveeustXiRff/01b1nuQC5EJPKfMGECN3nXrl05iznOncl9yy8//fQTrzReYwhGYl6cvMi5q7lLScDRvHlz8uGGZ8SRtxc3La9zficHXAMZWv7iiy9Q5tAnuFEjuh3zrCldujSyoQGAhTcc9zxPtMGDB6NxkidDHZgQaIRRm9OPpXZNSMXQl0wUKdozTUb3oNV4W9DNpk6dyiuE3mJMSp7jRh+lj+GVhF5F9+NP+iTaIS8h+iqtTHp6XZcuXdDYeK8YlvQizpIG13y6E32JxzqzYbwmzb3A2wU9D3dYui49nw7GUDrvORK3bt2azkZvpKxndhvr6F4k4X3GL6ievAIxd5klY54NkbBAULipCPeg0eqQB/ObqT/kwQygvuidvHoRjAE8uitvZW4QbjQqi0WNPKRB/2PEHXm4nPdTp06duP07dOiALz5Dy8/pOwDh3sEhh1uM2plAZCqFp36/fv2wNGzpdzQWr09uKFjxRqQuPGesHRp5bSMzTYPWO378eNqO1zNqBMURHEVF8CLD8DOBUsY1iHxofR4O4OKhgd7PWxzHXzIJN1eDIgIxngaM/ZtrkQerD+zoJagvPFVARBAFLctjhDFF8jSD/QDk9qf6eOTzBTnpZnQwHpho5DQ6DopUCkkQm0cfijiPJlJCFQ0JtcmEF9MPUbNost9//53HbMT9d82MJboC2o9xk+PhicmKVcMTz6Jh0yUYraCVeazR3ADhFHVhYoTOA2FEZV6CihALwS/IAFLTRlQHSrQjUnEKK8JyyroRkRbDBrDUgucwwLkEFY3ioIR5zL2DGLhlGr2QqlEKtUbbQwDuAljRQ3iK0ny2dA+lcRwCvJR5PtCfefpZugdDMNw4mNwczxQV3ZpHKPcp9wUdmPQ8NOg/9BlenQyg0C15RJtrUZ0xJOifnEXhpiD6DF2F0RASUxAPajowxgkquHE6oPuhXdDHuDfJlmcFF/InD17uUJMtz1skZ8iA+5GnPV2RpzQOkHRXfufepDr8bpGfm2vZsmU833jIo+pgnPDsJU/6P/2cWjAMxBeERAvi2cJdxoQGI0poCzxvufG5Ryy5cRWPXCpFGqb+uGWwGdAZkMfUzqTkzuLZy7OaJwnyTJ48mYeS47S+Y0oi2yCW2oV+yaAXQ0EYrMY8YMCJIS5uEu58HujGfwAPAe4H3g2M3JOGG/vfVvNg4A1Xad52jNmTHjuB0DezmCCPAM7yqmaCknuGtx0vaZQeHj2Uzt3I+5KceVFhG/DqwpAwZ7kbuS155TOshS2ODkR6XktY2Cgl2OikR6WzjqSkFgwe8COvXuplHUvKtdyoaP8MBDLiFQ40Z6kvr1hK4SlG9c1STqQHCA8jxgZ40nXu3PmZjlWx1GwqxooA6pFRkhj+Z4QYpYpITQZmGPvkcYwuyBgSHZJGNAoo3QaljYM3H/ocZ3lt8C6ht6PfkB5Fhz6DykWGFic39Fe6MW8C9Fpefpylx9K9ec0Y24COzUuCjscoL3nSPbiWxNw4KJ0MoZl582c2Hco6ijX3hTno9micaFT0dgQzM3X0VXog+hzy8wo0Ya9UkLK4jxCbKQ6qgFpJeu5o1GXUfWjgPcILCbvacs9yo1Eib0Fm/F+oK6GbYudQlokLRCFu167dl19+yY1mXtu2HNySDEWj41IdXvkoB4xtW+KGkZmHDM8K7kTooYyiW2AdYYRwyjgWcgqNgZsaJcP4KqDTcxWQaYXn+67wuOAuJn8G+M215IxuDUaaCWOJ4sBCGhoXIRs1asTvqA48slAXkAfheR7i74ShhfaAmhKuRKwmOhKtbyaj6Ak8UsifWtBwiM3jhUuMNxHVeeYu4/QiFCwKNdapMWBoOKSyQMZ8RafHUjIzCfQc44xBR6UgiqOlGEnlEjQbnsM89+gq5nJqwXOe+4KDe4FWeGYLIh72FTmY/sxTF0TUDvJ0e3ojJJEfUYFGX0W/QWDrtwMAMbdQ0eSEbcvd4VBpsE7potz13J5G7eaZg61Or+DHfxPVXEKfpF8xlo86ztifeV1yF/Da5allWW6I+4hk5jGLCU0P5xTdnt6ODsBtSEdFG6Gn8YQ0Exd0VG5YnsA86MiWEZlPPvmEJwPquBGSR5/xrON2oOuSP32P2417AZOVP6kFT2Nr24DhGOO0aQ6UdRR64qkYbEKRYPyCISHENkJGGp+AhEjCg5cnGA8rSudZx1uJNw6PHSMkOfMA4dnCWV4cVA1NI3bWpnOoPvaiwsg2eFFitqbnXcJADs9rczAGycOdHsxbxDi6oVuYkTZemdycmLO4A/EKRztp06YNNwwvAAaHnrmUBy8JbkVuA1QrVBm+84bjsWLUMv6kFE7xauQ25gbmucDdwhfuOgqlaEpknIxJAO5b7hlzFmWIm5wMzVAfA7HcrtxXOGmgo3MHkpgc0ObJgScRtnivXr3Qh9DhEInHB08K8uFHVAoGt3h589RDkohBh9yivLb5HSG5lrcsA4qIhGA8EDm4ypTFnKmt0JXOrgQwINGHLH2YPoDqxmgQw1Q8tWlZGsgsp4PDGE9kugR/0mPNmD19EpOANDydaWLjPG28ZVB36KX0IkufNMoWB32PG4Reaumx9F70KtNjUYa4iu5t5i5QUjnoISYxPxpPmH9bAAclGyuX4X9zML5Fdcwi/cYVlYJMPhg8SEifRB5yMz4eVNk4BfFOYswYZZ1bAz70dgbD6MNci0ZOLQDCEBcDWpg05Myb8oVaBnTM3SMhQ/LGJ4dbjzFyPIUwZmxcqgjlgNc5daF0qsMNxfPE+A2jT9A05i6DHqo5jw50XHQFAHLTIQBf0FDRP2DChUwgUAXuVu5x2pQLn6lqW6rJMwFiKOsYkyZsAAsBm4oMyZam5EcmW1C7YcjsAYPxPKx4iJmHAMXxPEFyIyEtTrubURXLwROSpgEODQd5zlJl6sKzy9gGSM5ZpKUJqM4zQ585ix5P0RTKQCkzJ+hMRoewFMSDkTwxZmhWJjfw5qIinKVRKAhRqRG9hSoDlq7Cd6PfcMDZnEIA6NE5n7kWhXnWcbl5bpv3Ag1t1mxlcpV5Wl4NmG10A7PJA3ohFjLPcBgyE4UVCmGutd2b7oX6pBLHHAHzzEELp5NwG/KEpBNiydPxTJzVMw+6KAe3M88l7hF6Dr0RLYIuyt3EzcVNbZk+5UYwL3eyIj2dhOcVliq3IX2Ps/RhEz2IXsF3tGdzJ3LKPChM9BS3v1mpwojES5y7zDwNOIsYHORv3uwksLwOTHoMCe5QBoBwduLlgjWLDWysWS6nzzNMY+4yE1v1fOY8h5GfBziUyAT5eWIgoYleMHELSIJFRObIb+4OsERtAeWY6wAOmLNsg5hqFPoi7zZeDOZAKeHhjkVueWcYH19uXZ4C3KV859a1pEfDwELAmmeklhcDo0EczKZxt9DpjbZBVuZtx23JwQuDHs+tyJ1p0UW4DUhjcZw1zwXjHU65xtc/nHOqWX4EwXgf865FJD65uzDxeTkxPsp4ANEF3OHce3hWcCfjVcIXHhBUk2SUzpgWNgOuAszm826LaKYjg7VUvC8RiWRUgdoZJcAof+EUgphqMOUbgQAKohke5unPW4d2pGnw4+T5TtuhTjGqzWgu6i82A+o12pi1XkKfDBctQ6eid5HMmASWluW7pTPQY43yahHHusea7m05a4xS26PKTCwywS3mYDyMF6FZW4x8rPUqhtCQit6I5ofYvDLNa5WOiv1jbBuuNTcsg1KM27EuJ2NX3OOM8VMQt4CJx8BREFXyhUaqqBfMsVuYM+Elihc+JjpFcO/zyo/0lWnQoVgYUPCkOuRJdbjL+JP3t1G7zVmSAYG7nsoCk5vOtKNRdjm40CwNZH020jvGDMkjM+oOzkV0IdoOtRvBzAQjr3B6l2HI79ic1BHd2mzjQLnPb1mSGcXI0pFoJqrGtWb1JOt+9W/SksbEBqCQmbFGswiEtTmH9w4mGa4UTJxygMLwsXQG+kbEqVFToqXnPB9XOLB0OdP3aC8TvGEooQPxamBsFdMROXkg8ydiIDbDT/iD8cmsb6RNowSORoBHIk8PEzrFQANPVJ4Y9EPUdLqcUQA4eNUyD2mEp+ta1AkezngE4fZDXyU9Vi793/r2sU5sLueWN2qACcixJOYO4mHI5eZ1HM7aRB46p+VpRmLT841xHunTGEWCe5xnL08bJkaYZOMNwugSNyzvEUaXqB3yY6LTqyN9sJv4HEq3iMEDgTuXw9TOcg9aD2RQtQS4VuSLdnjZBi9KzNb0DJgxKomrqzkYc+U1GTH60ETGcFMxOIqHgyU9XzD9uYRBStRuhqw4+MLIkOnx3J+WUAQTnmhe9uHGxoy/vrVewuXY/dwqxoTgXrLcQqZuvPZMCCOqCZa9tUiYKwxAoi8yUMqBTwivKPLHBsCGYRCCoS8GsTjFS4vJR4YEsA2YtbTFEYIHgUHB88hUjUpx5z8n4sLWxlC6KBFgVhdvDSYEGCjFsmU8xnQMdDKaxjipo6qizKG74E2BKWut0/9bmbxLTPivpWX5bvFGo8eaAHfL5Zyli9JjzRRElKryvIuMfmlMa8s7A7WMcumNlnBek4UZWuMTRxEmBq3vDsZuGYFGgQMajnkQw/mEbDGeMaJsX/WVchkM4x1vXHEoCAuB3GgI/HkwyM1qZhwANDMk5mkQLsTC8gokjVlJk9YxKq9Jb641tCGASWCMBMuym1zCKQ4zavii5Gkvng+oO2irzEHxysfZwExEoHDwOudPQFkzxK+GJ4yJwDbd7DmF0pFIYN2ReNCh69A6ZB6pYmFypl8xzEGrMTeCTsZQPS6aoDBnDSg8QvGNJmeMQA4e1MYF3HQGyJjO86J8Ik1PcxjxsA+tKTGdiwcI9x2GLpO32FREczKUgy2KdogruWK0ImXrgAl4itKv6Ga8TBlZY04AhYEb0zjgmYPpSsyAcMLT3ATq8DRGW6C30EVxPOMz0pB07jIzAsID1vLoY3TGWL/mdWx9inLNAkSR5vxveBndp9P27NmTGTCGZngU4GvN6CeRBsQq8JTgdjZ3GfOx3JXPbybuDvPGsUwF8EDgIWAWaHn+xKYDdgCHEsn+L1qHqp7jC8PbhQFIbhiUYAZiuUu5z7lLzfKC9Htm1hivIjSHg5sfBwNmJEjM5LvxOCIx6gI3MI8VRpjCvcIZeCBDY1GY9xyzgagpZMKgHZdw/6DTm7N8UqjxQeK9y2gfF5o5Qe5YEw2JhHwydMorHNuAN5YJuER4cjaPFYwKZg8YxMK8oYLc9v/m/23dQDyJUCMQDHdAbAlj9zPcaMu1jt/QzishPYp2YaiSSSG6BGNXuDGgt6Hw0VIMkxN0jkHIE9/4sEZaU+NKxGy1WXXU9EmzpCMHfY8ubbGBOcsphsHMgjwx8bjn/ceUHa8TRDLLUNL3eAHzJ8PtxvPNUikE4K5BI2SY2bJ4qxniNQv5mf1uebcx2I//Ek5BiM3dwTSCyYcqP19143bGpZCbiyhDyBgLyky5cDujtsKHrLizzJo2SMupiBvS4SAEYfOy5D5CNqx6ciBDqsZhFvYhB8QzK8yiWJAVdTfeCFQEK4WUDBZar0MaUTV5Zo3MGB4GAEUY24Ang/EBM143JrzB+IBxs5s9qvmd5yGPPvqAkTDiRgqmOMDyaelIpKTKHOSAmsXzJNKuaEmAOwffzdLMTI1aJg3MnBKSg47pIEY9sF5gZZqSh6Rx+OZGMJ3ZWFZmvN/20v8tJY1FtydnJjSAYPqAWQ/AzL9REF0UwwBzFF9tbEiIoSDKNog+/NjPgX7LXBAvcWxU5gYZi+GJatYnNQoAB3EmKNYRZWOkhn6Iex5+jPRS4rXow9aO/s+sDh2Yjs1jxHjxmQ7GHcT7F2G4SZniQ1vgxjQ3KV2OgQmegSgPUeNjOi05MHrIuAArK+BojSZDXA2WLc8f9kg1d5kJ5bKU8kyHQDo/7wuehPR5s4oxVUZ+tCPkD7coWdQETrBXyTZwiKZHwcIQZ2iKm5+bk/cTLvuMFVmWHoooJe9v3JG500jMmAETkcxIRhzbY9CRdyR3ncnKJEbZwmRHJTIrr/OGNmcJPGJmgIhkHhnMAHC7MiqMTsOzg5Ez7mEcrBHSrJRCYu5GXopM//Hs4ClG5lzLPc/AFS9UXu38QrZY/7YMJ1NHkvEcRPVkhgQheQXid+ggOz05REeJOyF41GKXMmJKczBNROsYl3TGWY0vCi8tpoatPVz/TVj0MF57tLJZho/ux7sQ5dWkN4vT0wHoYGixnKXH8n5iNDcKQ9e2ADPxtSh83H2o49yAaOQE5dO3GeTGNrCerDDqIOojtgHDeyYagZsCY5hpBL5wB6HWE6JtJkPwrOX24QVsVhRFHjNT/xzBeCWjInBDwRnvYQiQ2GRFiUhrECEG72leishpNp0It10RwjAmx/1rdl1kXJk70TLgx4QejwX0TlDTdrxiqZRZn5RT+DrTlDxksPxpevR7S0BIRMmpkfE4euZBbCLtiO5Cb+EZgplBMgZEYc44KJyNDQMxjE+iEnlogIs5KzyP0YlRU+geuFSRnlEG4+FgTFCmZcgHCIw7orugYfC8oiNRC44Xsg2w5dAnqLWJGLbYBjS98VOCLQlM8DFj82bsFmFoBcqiM/C0RFTuC5QbHt0M6NjS956fBtsAg42qMSpENzBB4SxBwXwyX1g6Bvvzs88+w0pHK4IDNh4dg6Z8piIVfXmUQ0wTMAtk0ZPxKTK2gY0loknzEObhbExT7gjumkhtA7RnszYJE5s8BLitWAOAm8iM1HCWG5aZCh6MKBjcAnjWmdvzORHSzxeY5wmPR0Y8zeQkz096L/cX9z7PPZ4DWCmIzZ2OfxGfltx47pE+XI0YaODu49GK8DzN0EN4dKOf8OxiGYMoC2kj8/id7IWnieM3jriqHXoPCgRrceA2wBPfDN7z5uOV/G/6EG8p7hwWM+F+IA3rCvPCiDiqivaPtk3OvO8xAFDjeNPj8MeEHW8RznIVb2W0NF5mjM4yToBfBPcVNj1zfLgA8rAgJaewIviddxV3MmoK6zyiC0KM+5DhQATgTUZi3s1MF/ByRUJ0AkpnRJnfbWGLXoLTNtU3DpdmTWL5FNmCLqbToCTRvjzBMQZwEuOJjK6JNslLhfFUzpqJZrN/0/PfSWiHmBkIjPKHqwz9BKXKsrgKedJnmFI3ztNmwXhUQ1xUY8g2wEhGbPQ5jBDuAvo8SphZHIauGy7cxUQNct/xO3cBfkTojrzS+OTGQafn5jKLcpq1yblx+B39GBuDdxufvMaoFLovf+Juy/IDfLfsDAAWqsm9j5lN9RluR7/nJW0G7Xh94l/OKACoMUV4VfO4wGBA7eYFj5Jt3Q3IH5OeGvGFBgI197uZGOGAOWsXmlkFRhkx6XEFJhNaEwMJHZ0HBRo/13I7I2HEeAnUaJ4G3Ok8tbD08KJ85o4NGCS8pLHucDmzuPqgABF/bBY752YHKXoJteOJZ/QhVmfCqsEdiyoYJ0NUCkqk42Fm8ORBDcIeo424lvF+egi9DoGxPPkRw+CF3M9oFzQe5MfusnZdo7nJB+Y8JHmEYm7xdKK3ICpSoUJROtYgbY0PGI8+5AQsD0PIRH+dRPoYS3hREKXjlUof4zVBW9McUIUG5gqmHYOsnKJchOHewY+LXkcLck/xZkGSmH44RDl/EwhL9/63aI0o5+ykF3Jf8JLl0UrHo5vZuA4HiXkyc0fwuDCDLPxC63N/WeZjnwmEDsaYCA8xTHSzSK5xpDTlkgOePzx2MA94HXNP8TrmUYbBwG3IiEMUIPNkQ04y5AanILQXHmVMd3ADMvDE8ic89hGGfo6JiwC8HagC1cFPgek7xjjoM4xsGm9D7gVuW6xlHlk8E3i0kpKnMTYzw5cx4eYXhSo76SVu4eaneKYwPsErDW3PSasUt2KDzqzvweuWO/yZY1e8bHi1mG2GjbToxGapUB7xaAm8HTnLOBkjBxHfcIwPoZSQMy9XXgbc2ygfPBq4XUnM2xFHf3QUs5i3efLynZwxssmZN7QlsTlLibzgzc5WFIrkjBGSkgcEZ7nKLA3GDYlUVIrczHIEnKUiXMW7kFNcxS/UhWyNzxL3M69Vs0YKFUQqUyNTfcuC6LxQCXdGceHdTObogiZ/ykVfoUOa9JF6H8Zt09ux9MOHj5hNqc2EqR1ztjErnrB0CbNPrWUMlUakF2Ei0pS0IwofLch3WtxsgI1ihyJCU9IhaUS6N4q+2Z6G+4JfePNxisTmIDcyp9sYM5ji+DT9yrrHou3RY5EEqejevDvNCpvUBc2VbsYvFMqfvDAQxvR/tA3r0VNkICW9CBnCmdBG3UceCjU+99SR2wS9insK/hyMK9ONLQYMKam46e1m/yz8v7lxeMPhBU7/53eDBUqod2AhvVlCACAk45OXLuomiLg8nMcOyciHOpIJnxRBicY2Q/Mzmw3xCStOkcBsowsEzlJNVEbesshP6dSFC3mj8yeX8OJkoo83Pao26akvnyiUkDHh12bFEso1/lRwwEAyJSI/tz9FUCh/Gh2ClJzl3vw3VcbE6dJ8Ru83jYJCQCbc16YKfEEMnjBm0WQeblTK4OUTPsjPQ8Y8HEjPQVY8Meg8VJA0ZEgmdCGqSV2QjacKtw994982yaZZEdt0UbP+AX+aRxxC0pfIkL5kdlM2z0nzcCa0xrhE0814ZNHK5jlJXRCGboAMZuFm0pvAAMTjFgAaIpltbknMTUTHMIvMwIeiDRyKJkMEM8slkYnx6TJ9AIxmkwdzj4CI3gIQSqFouoFxDMMtDU3OrG9h410f+8kGDhyEkHC2jvyOfTEcp0T6DCYxlja9i/vOTLJFPIy3HhNcljl5cyeahxIdkpuU/kPv5QXKbUJ/4JP+Rj8xfZvuyq3BQXo6rem9fNI/6UXmUczlZGUeZRwkIzeGAMiKfOjPSGv2d6cf8id3EH2PcmlQo7gbSbihyJyui3ZBh+Ra/jQ3Mj9yO3BD0c8tdxkdmz/N44sSEYNsSU8pZEg/pwhE5X6haL6QJ59IaDQcSuRZwSnE4+aiRtwU5gFrZOZ1Y1ZEcJx2j31JsL7oZvPmzW/frq3lvWYthks4x0SmSidOnETX6d27V+yLqxJtIYCJzKgk9w/Dirakd6I0aEv4I/FMMasp8ycqMr7svJ4ZJX3+dlFOVM1IRZ0/f8EUxk6uXR84cIBlJYpIr1ICJyLAeBgPW8a38A9G8bUEv0a/ChgGDMZzv+BzyAh6OF8ghhXxU2JvIPx5eCtHvzjl4GgETAwPbhsoRlgRjtzKRYuVKF2qZPv27Yxtr4Nhe6b3GQJn+hGLPYHrr+oPMUeA2ZipU6d17tJ1/bo1GI3PsD9jrmzlLAIvSgDHA9bc4DDe3oygmO2iGT94/kZLL1qQ0otA3BJgMh0XXobiGBKzo2EQt5VS6Y5AwMRP47nB8K1crh2hRWyUAbc9PDaJscGz3zLUbeO1SiYC9iWgWGT78lRu0SLAMAlObswGsiQ884Y4YzCNgJ80Iyj/NrsarfJ0sQjEEQEcRZidJ1pAI6Zx1ALxtlizhCsL4fPklNnpLM3MbA+zeYyLGX8/fGO0sY+ztF28lFM+Rc7XrAwIEY6D2xwegc4n/XMlxn2c6QJqx0INzK6a5cOZMWB4NUG51sinKJ517NisDjcObkUEFeANb3YFti6dUFoWBiFqGUcmeSzEZruorIgE5FNkzQQnQ6bKebMzl/hvQTLqRSJgFwKR+hTJNrALZ2UiAvYkINvAnjSVlwiIgEMSkG3gkM0ioeI/gUhtA/kUxf9OoBqKgAiIgAiIgAiIgAiIgC0EZBvYQklpREAEREAEREAEREAERCD+E5BtEP/bWDUUAREQAREQAREQAREQAVsIyDawhZLSiIAIiIDdCLAFKXt5Llq0iOD7cJn26NGDLYqtD/ZAYONhEputQGPnYBFhNuJl4+TYKS5iKcRMsxkwuzSwQ3ZcyaByRUAERCBhEpBtkDDbXbUWARGIMwJbtmxZsGAB6wWF23oSgRYvXswSQ/zOWiXm4EeWNRw6dOiqVavYzDJ2hH66ZeY8dh6MneIilsIaZay/yWotbHcaVzKoXBEQARFImAS0TlHCbHfV2qEJaJ0iB2weVtc9deoUq+uy6Szisfo4yiu7d7Ph/JkzZ1h8kK2OWTCUZGj2SZIkYeHdoKAgd3d3EnMhCa5evcp3dur44Ycfdu/ezaB469atTQLLUbp0aT8/P5Y5r1GjhvkRU4EdABk+L1KkCGP57P7BKqXsEkiefGEywcfHh7VKKcvFxYX0N27c4NSxY8cQAw0b3TowMBAhsSuwRpDBy8uLUXnO8oXtsbiQL+GAs6fy8OHDCxYsyBRHxLaAAFWmFFMjKsty7BTBRrz8yZ5uLKKKGOZCy1m+79mz5/79++x3zoaGFBoaGsqCxa5Pj3BZITmZUAu2SAcIq2qwdjNfqDJbRJl6gYI1jrmWH/fv38+OUWTOEpCmgtQaLKz074B9SSIZAlqnSD1BBOKEQKTrFL3EG8L62LZt2+ef9+zevUe43/WnCIhArBGYN29+x7febtmyNfubxlqhKug5BFA6Z86cyWZSaPwo91gF6J3szTds2DBOjRgxomTJkijZ1atXZ1Mz9NEcOXJ89tln586dQ3dHcx04cCC7kaDOot1WrFgRpbZAgQKDBw/m2nCFlipVip3+ZsyYYf37zp07u3XrRs6zZ89G52Yd9O7du7PRPZo9eebPn79v375ow3gooXMz2P/2229TEAf6euXKldHvUceZfKhbty7yFy9eHPm5kEmJd955Z9++fQgZToyvv/6a/DFdnsmEev34448lSpQgH2iQ8ssvv9y1axcCUFCvXr0QiVMIgO7O1rz4RFEKZgDbvbGnIYYEv4No1KhRWbNmzZs3rxGJgx/JChOCIvr37w9SNoTirfT+++9jD7BZLJs2kIx6lSlTZunSpdCAIekbNmyYIUMGTsG2aNGiGAyYXuycqF7tyASKFC3euXMXJqkcWUjJJgLxjwBjVb/9NsArcRLeJs+snXyK4sRmU6EiIALORIBh/vHjx7NlWKdOndasWYOOjgaPSjpy5EgzjcDBF3TWFStWYDBkypRp/vz5eO2jLk+cOBHXeWYYRo8ejSsR2rllTN1GBFgFOXPmNFbB1q1b8fYZM2YMEwuTJ0+eMGECGjNFUCj6tPE+wjz47rvvcE9ic1wMFXYZR2bjj8SgOzMef/31F5dUqlSJlH/++aelCjbKQxELFy7Mly8f9hIlotlPmTLl77//5n3DbAMiYTZQ92XLlv3++++o6Ux6rFy50mR+9OhR5kZ++ukn7BkzZ8KMAZYSOXCg32MXcTxTEoR/7733gE8rmOkUmoCmoei1a9d+8MEHcMaKMBa1jXVRMhEQAREQgXAEZBuoS4iACIhAJARwUGnXrh1D2o0aNWJkmqFuNGP2Fca1xqKG4v3CwDxnGdJmOJwhfHx4GJInjBjlmwkBNGaG2MmB0fEXIo6fDCPiFHTlyhWiDjZt2oQ8LVq0QAbGyMuVK4dKjZVibAN0ZX6sUqUKpaD9YzkgA0o8zk4UyoVMbqCd46FUoUIFDBWMGUb0mdywRSRTKQwDvKeYAGF+gMmHV199FQFQ1rFbqGa/fv3at2+PPxIzBsxaUCKTCZcvXzb5M/wPPWRgAsF4BDE5wHdz5M6dmyKY736mMFQHO4RaIz/zHiQDCC5My5cvp8r8SKHUt379+pRiS3WURgREQAREICIB2QbqFSIgAiIQCQHcY1Cm8Y/H/2Hu3LkM2OOvgraNQ4vlSmYG0FxRdkmMKo/3PwlQXg8cOIAmHRYWhjrr6emJhcCswgsRR9NlsJ9LsDFwzsF758KFC4yRM/rOUkJMUOD6j+MNQQho+SRgfoOhfaYO/vnnH2YGmDHAYEBBJweMAdRorBr08uzZsxPsi1s/6j7BEraIRDKG6hn7pwhsHgTAEmAew6jpGCdUE+8psKCvM8APKH7kT8vUBH5QGBKIYWhACdsAsIQlcDBDggn0b/MqNIGJjiAZiakXJgd158BgIE84Y6FhJJjQCx0iIAIiIAJRICDbIArQdIkIiEDCIoA3C4sLoekSWsAn/kUbNmywjIUbFiimKL4WrRRtGOcW0vDJwD+6rEnm7+9P9PAL4WPg3+jWGAkoxATdEl2AyxDaOQfKOno2JgcJOIuOjq5vOYvezAQChwkUNpHBRkgTEoDXUzgj5zmyoeWTIUP7GCfMEhgB8BdCAEwOqobZgO009ukxadIkQJHe2meJNBYUpiCuRRJLoWRubXFZCxPuWgwV/JE4yJ+KGA8lWgHPLtkGL9TBlFgEREAErAnINlB/EAEREIFICKBtf/vtt0Toopczbs3QeNWqVYmLjRQc0wjoqSbYyyRGF3/RnQpQgtH4uZbgAVR8LJA6deowKs+AvfWBQw7F4dRknPItp5hhYN0hBtTJAQUaQ8VIghgciMekhI3KNMmMu06DBg0IcbYunRkMpk0wCQjCJqwCfZ2BfKK3ca9CX48UVNQSmDWOTF1MDnCOuGtE1DLXVTFNwN3NzdVNSkhMY1b+IvDCBHRbvjAyXSACIpDQCDBLgG8M/u5E8aL74k/POkXGg/85Bzo3yRjSZtrBMsnAyHqkF4bLk6U8mQdguB3tH2d9XHHwIIpoYDCsjrMQ4+54Fv1bMC6j7JazZiFUjI3ChQvjYmRLm2JXEEWAro+XP/mEuwRfIKYRcBBirVVMKSKGCXsAAiLZknkU0jDnwCwBUpnZDHIw0yaKRY4CzNi/JFu2rIHpAyMuoRv7kqhEERABawKyDdQfRMDhCOTJk7vt66+9/fZbliFehxMx4QmEo4vZTwBnd5z4CeFFP34+BkbZGacnVhilmSF2s1ooYcEEDNjOj8AGViViHR5WRsqcObOJ8UUvZwlUIqFxIlqyZMknn3zyxRdfoB8THEzsL78wco+WzC9c++677+Lew4wHhSIzAhBjgGGALxBqNBliVJh4hkgPYxsQUY2FQxEsTIQWTmgB9hILlRJZgaWB+WF2XcAiwpSiiJizDZjEIAIBk4mgC1Z6xdWKjQ5Y7+hFZ2YirbgSxASBt97qWKPGy6n8/WMic+UpAiIQZQKyDaKMTheKQEwRwGkEJa9IkcJabiWmEL9gvoTtopez/RarguJZhOcMDvd4yeM5g5L9fN2XNXnwPiJ4lz0BuJaVPbn2OeWjYeOmT4yvOXDdQd9FgJYtWzILgWrO+kJ8soInGbIJAGHHxEKgteNdQ7Quzk4o+n/88Qcj90jLWqWIzfi6ccfHSmHOgQuJVGZ/AHoaOwMwcPtMnyKWTLWIwReTGzMMOBRBg7kUQ4NVUPmOJcCsBbIhBuYHXkwsYIphg7WApm62NouJg2kKlociZ6wgaLBeE7g0bxATqO2eJ2vXss6V99NIGB0iIAKOQ0D7ItutLXjpMpZ25sxZu+WojJyfAN60vkmTsniLjT4bzl/j+FkDFF9Go3HiZ6ieGjI2z3A1QcYYBuxKxtA4g+isU/TRRx+Z+hOyzGg67c6YPZo6A/ms2U/wLqf4Ef8ilPXatWvjchPO/MMPZ8eOHdYQGdTHZR+l35KY0XoyRB6eOfjWs/sYY/949uNdg7sRmjEBBkxTmLFzREVfb9asGfYDQ/sMrhMVwLwB2jOn8JKqV69exHgAjB9qFG5iBC2fGYPevXtjC82aNYtdC3jiUYTxSkI8DFrcn9htgFIghhMUvxAsQXFogSzeyk4LCEywBJHTrJtEFDVRCiwxxJQIKyaRlSkXRHhtUQXq2LhxYywryuI7+0mb5V+xdj7//HMYkidZ4e7FLAp2CPMGZvkjDCf2PnvttdfIPH72SNVKBERABKJKINJ9kWUbRBVthOsYjevf/9tx4yckTuxlt0yVkTMTIOjUw8M9d67cP/30g3QUZ27J+CA7Q/vYBtgzKPdYGiaENx4cGCqYGcx7YIpgaOFJheHUpEmTrl27sgUE8y3xoI6qggiIgAjYkYBsAzvCjCQrYxscOHjwvXffib1SVZIDEzh+/MTqNWuuXrn63Xf9ZRs4cEMlCNHiq23AJAk2D85ROBQxwUI1Bw4cSHwFHk3svMakSoJoXVVSBERABGwmINvAZlTRTmhsg2vXrw/+849oZ6YM4gMBXCYmTJhE4Gn//l/LNogPLerMdYivtgGeWsQYMFfAkqkETuDCxBwCLkw4WeGnZGOMtTM3rGQXAREQgRcjINvgxXhFJ7WxDe7euzdu7Jjo5KNr4w2BHTt2jhgxEjdo2Qbxpk2dtyJEKbAQKh44jKazM7GNGxo4fn2JMSDOe9WqVSYonNgJQkEIQjA7KDu+/JJQBERABGKZQKS2QTxxOY1lrCpOBERABJyLAJHHrHT0+uuvozTHG8OAJmA/OCKe33rrLeIoWEypR48ebdq0IZpZhoFz9U9JKwIi4DgEZBs4TltIEhEQAREQAREQAREQARGISwKyDeKSvsoWAREQAREQAREQAREQAcchINvAcdpCkoiACIiACIiACIiACIhAXBKQbRCX9FW2CIiACIiACIiACIiACDgOAdkGjtMWkkQEREAEREAEREAEREAE4pKAbIO4pK+yRUAEREAEREAEREAERMBxCMg2cJy2kCQiIAIiIAIiIAIiIAIiEJcEZBvEJX2VLQIiIAIiIAIiIAIiIAKOQ0C2geO0xYtJcunSpS1btj548ODFLou71JcvXz516tS1a9cfP34cC1LcuXNnw4aN7Jkac2UdO3bswIGDMZe/chYBERABERABERCBWCYg2yBWgV+8eHHlypULFy3asWMHurJ12Wixe/bsWbhwEf/R+58vFkr2ihUr582bd//+/VitwNPCMEiOHz++atXqo0ePPqf0k6dObd68eeeuXQ8fPrx+/fq6desWL1589uzZR48eRU1m8gEa+ezes+fGjRvPyeTmzZu7d+8ZOmzYqVOno1ZWpFft33+Allq/fn2kKaOQ4Pbt2xcuXDh//nzs2FFRkFCXiIAIiEA0CfDKO3HiBOM40cxHl4uACNiXgGwD+/KMJLf16ze80rJVtWov9+r9xebNW6xT79q1+/vvf6hStRr/N23a/PyMZs+Z++tvA4zaHasVeFoYmvfMmbPefe+9qVOnPaf0hQsWffFln19/HcCj/8CBA0OGDP3r73/Onz8XZX333r1727Zte7PjWz/++NORI0eeU/SxY8fHjBnz99//nD4dU7bBH3/+OXrM2CNHnmcdRblpeF+uXLlq8eIlTjQvFOXK6kIREIGESeD773+cMnXaufPnE2b1VWsRcFgCsg3ipmmYPdi3b5912cdPHN/vJA4qSZMmbdas6aSJE1u1avkcfHXr1vnt11969eyROHHiuKHstKWeOHlyxcqVsg2ctgEluAiIQOQE9uzdc/LEibuaN4gclVKIQKwScAk3iLt9+/aJEyfh9dG7d69YFcT5C2NIu3//b+/euzdu7Jh/q82cOXPfeffdlx6/dP7ChbZtX3/3nbeDgoJIzMh6/2+/GzZsmIeHJ0Pss2bOcHVzxWnHL7nfa6+1QbfGhYaB5PHjJ1StWuXW7VsM2+NT5OXlVaBA/s97dHdzc1+2bNm6devxRXn80mMfH5/QLFlKly5VpEgRd3f3Xbt2LVq0GF2TggLSpnVzcyPz4KCMr7/+Kr+sXr160eIl+/fvN2fLli1TokSJ5MmTI8bw4SMePnqYKJFXuLNJkiShuDlz51WsUKF27VoM55N4+vQZe/ftu3XrFqVXq1q1bNmy27ZvW716ja+vb726db/p33/69Ol37tzNnStXihQpEnsnrl+vHnVJlCiRqf6YsWOPHT3WtGmTkJAQJDQAmRXBvWrChIlbt269cvWqh7tHuvTpxo0bX6VK5Xfefgt0k6dMWbNmrfHO4mz69Olq1qrplchr6dKlf/39N8EApUqVbNa0afHixXBqAj7zCbfv3CYx5k21qlUQEobbt++YPWcOVaDbI1vePHnKly+XJUsWV1dXfqQV1q5bhxjcKTlz5qhQoUKuXLmmTJ4y6I8/mbvw9/cn8Vd9+zzT/tmxY+eIESM3btzYv//X+fLls72Pz5+/YMrUqdevXR84cIC3t7ftFyqlCIiACDgLgaLFSpQuVbJ9+3ZhYWHOIrPkFIF4QODkyZP4fXTu0nX9ujWoNBFrpHmD2G5lFN80adIEBwejraJ6muIPHz7M8EnixN4opmjzT385smzZ8nXr1xmvkif698GDU6dNQ9F3d3NH4Uap9fFJEhwUTKDC/AXzp8+YgYqcIUMg2iphAJMmT54wYdLdu3ePHz8xe/Yc/t+5fSdDhgxnzpydv2DB5MlTTc5r1qyZNWv2rp27UqZImTE4mCImTJyE0o+Kj7P7/AULp02dzllMFP5v3Lhp0qTJq1atIshh37795Lln716+M8g9dOiwJUuX8t0nSZI9e/b+/c8/mzdvIlSaKuBGhfwpU6bEokBm/9T+GAb8jhgHD/4nkHfv3r3Lly3HRQpTwcXFxdIkIBo/fuLs2bNRzcnh0eNHy5evuHLliSVA5AbfhwwZxqnUT48bN29gNmCinDp9Cj7JkiUjq7Rp0yZLnuzgwUPDhg1fu3addxLvTBkz0gRcO3jw3+juW7dumztvHrZEqpQpg4OCzp07Rw7o5ffu3b90+fICCEyfThFBGTKg/ePrNXXKtB3bd5An8KmOn59fYGAgVkRsdyOVJwIiIAIiIAIiIAIxQEA6TQxAfW6WKKxeiRMXKliQUWpiDEzabdu2M3aeNWtYxozBkSqaJUuWKF68OAPb+fPn79XrcyyNmzdupk+f/vXXX/vyyy969fy8UqVKaNVEPKOsEw28dNmyBw8fvPfeu337fNmoUUPUZaYXHj16fP36DXw9idktWLDA55/36Nu3T42Xaxw9eoxBcT5NxDAzDLlz5+rRozv/s2bLun3HTuYrrOvHukNbt2wdMXIUI+4I8OmnnzRs2MDlJZerV69ijTzJwdUVBbpO7Vp5cufOnDnTG+3bfdzto5CQzHv37N20aZPJCvvhxs2bVB+TyVL9+w8enDp9GjPj/v0HDRs27Pl5jw4d3nBzdUVyLiHmgYBsb+/ELVu+QpX5/9qrr968dQsD4PGjx6VKlSpTujRWVru2bevUro1ZwrRDseLFunbp/NVXfd95++2sWbMuXrJk1+5d64gmXr8ea+HDD7v26fNli+bNmXy4cP7C48ePdu7cuWTpsqtXrr7SogVgP/m4W1hY6MZNmxYsWMDESN68eWmCqlWqdOn8gZn90CECIiACIiACIiACzk5AtkHctGD+/PmeLLK5cSNuMzirsPBOYm/v3LlzR0EaNNSPP+424LdfK1Ss8ODhQ09PT2YP0qYNuHXzJjlv2bIFHR1TpHz5ch4eHvXr10NvRle+f//evv37mDfABQjXI09PD+Yfataqgc/PocOHlyxZYlZACskcUqhQwYCAtPzPmTMnY+eXL1+xFpLYYrySrly5gjNS9uzZM2XK9P57786cOb1Ro0Zp0qSOWB1kwGsoZ44cGA9YGv+t/t4kSXxy5fqf6l9/unAT7kwYQuBiPgTZmjRpnDZNGrLFoahdu7bTpk6pVLFiIi8vap05c+a0adOQIXMs1uWiuFeqVHHUyBHYJNhRTIlQ/Ty5c2EP3L51GzHw12IKhepj5+Dm9Msvv3zzzdfUdOGChefOns2bNw/GGKYIAhQqVMjXN+mMmbPiZHmoKPQNXSICIiACIiACIiACL0RAtsEL4bJbYsatAwICGN3ff+AAivWG9RtQmhmhj1oB+A4xP/DVV/34/+abb339dX8W+jRZHTt+nLF/ZhUsOaf290+XLh0+M/v37b958xau9q+93rZIkWL8L1euPH7/1jKkTu1vfS0FMedgneDW7dtnzp7FCEmVMlVSHx8b5S9ZsmSy5Mn37N7zpPpXr+7cuQMXndy5clpfjqqOLxC6flBQhhQpUnIKA4CRe/yCTDJsAOK5/xz8F7Xu0vXD9u3bE2CAhM+UgdxGjx7z3fc/fN6zV/cenw8c9IdJWahggcKFCjGDUbNW7aZNm336aXdWhv0PumPHsNn+GTLUwOH/++9/wLqlN2/ciPJSSzbyUTIREAEREAEREAERiBMCsg3iBPtLyZL5ZsuaFWebZUuXEe36kstL+NuYuOQXPU6fOTN48F+sFoqCy+4BuMLnyJ49S5YQkw8j3HgxuXt4WLJ1c+cvD7RblGMch4jW/eipOw3/v+rbd9DA37/5uh8D7aThEtxyzBdz4GmD07+1hDjwMOhObk9CnG12u2cuIiRz5rPnzhFLMH/efIKzs4SEhKs+st1/OgOAACY6mYowCWBKIZJm7NhxH37UDQ8f4itIQDxNqlQpPTyeRGtYH5gQzGyQ8p9/huDIhCWWPHmykiVKmLgOJjratGn96y+/lC1TFqtj7bq13/T/9qOPuhG1jIcSExEEWxs4/P/xh+//Gvznd99/q5WXXrSXKr0IiIAIiIAIiIBTEJBtEDfNhMrNygy4uCxavHjFihX47OC9QyCvtTSPHj68e/ee2UQY/fvf/FgIGCAOmCDamjVqsIBP3Tq18+XP5+OT1GSF+YGSffXKFUvOuNDgSIMyTfwuI/GM9xcuXIg4BMt/MsE/x0ZFH8XdN2lStHa8bv5tzD4iYiYusmXPhh7P2kEQIASCCARcfaxTEumbMlUqcibG+tatmwYC1TQuQwQbcC3bC+D3j/d/9WrVsGe4BAsiXHFsIkYQwrx580PDQsuWK1u9erUK5cuHZQ0zFcSlCqMCVyVWbSKuoErlytRo8pSpLNgFHGyAwPTpreHwnbKs7aW46UAqVQREQAREQAREQARigIBsgxiAaluWTBSkSxfAAperVq/OlJnlc4Ktr3uyYo+rK978165fQyfGb+fYsWOWBE+G6F1cng7Yv3T82DG0Z5z4W7Zq2aB+/Rw5cqA9nzlzxiR+shaniysLEJkNic+ePccoO2sQEWCArsy4ONtssQsbocCM/XOWpXj4j/Fgo9sM/vcUjbRPijh3DvOADFn2h1CBq9eu/b/AT2cVnk4yPNmsjfTZs2ULTB9IWSy9yiwHUcjhsLHMaFhoKMsT7dq9+9Chw/gyIRVrJREVQEoCqU+eOhkYmB5bqHHjRgULFgQFP4bbDI4gbAIkoPHw4YNaNWsSbkF8QkC6gFMnT5kKIi2R0GxyXLhw4QYN6rdo0ZwFTwnVYG0ipjJcXd1YdunQoUOgw05jOSnaC3kohdWimEeJk73nbOtfSiUCIiACIiACIiACL0xAtsELI7PXBYydZwzOiDrLqDaacTiPGrT2lClT4ECP4o7XEJsbLFmy1FI0y4CiXrOEztWrVxjbRk9F9WeoG412ypSpc+fOPX78OJovmmv+fPlwoWF/ALZEYAR9zpw5ZIgGz8g3ui9RyJevXCHkwFyLh0/Xrh9+8umnLCpqo9br75+a4AGMHGY/cGpiWVJcfRo0bDxgwMAD+/+zQitiP1nANHHie/fvYZYQDYyqjT2QPXs2KrBjx46QkCwZMoT3p8I2yJYtG3HAT3ZgWLRo7959O3fuYr1RVi99mqE38x4o6zj/oN+vWLmCjaLJjdkVlH7sECrInANVRoNnCVaqQwzGqZMnN2zYOHnSFFZQJeWjRw9ZsfSDDzp3794dA4CcCWA4dPAQsRAFChSoVq0qsxmsrMpWBuzcSVns6/xB566//PIrAJP6+uAKBX8iGcyaTjpEQAREQAREQAREwNkJyDaIyxbEPKhRowaL9mAZoApbi1Igf4GaNWvgrvPOO++UL1+BzQSsY4KzhGQJzhi8bPmycuUr4JlDzAAD4c2aNS9WvOSw4SNS+KVA6X+6EtF+FgZlD2OMkM8+616yVOlBg/64cvlyihR+pqy2r7/GkqMnTpw01/bp05edAZo3a5bnv9ssREoncWKvHDmy9/z8cyYievbsTUQvYb7siNy6dcucVrHFWD5MFFy8cLF79x4///Ir6jybLbAGKz/yH8soadJnxDFjHX3eoweLn44ZM7Ze/QbvvPMuuxaYBUMzZszIJABuP126dq1YqUq/fl8zw8DsAebBxUuXcNYqWaoU/lTdun38559/JfH2Zlrg73+G1Kpd9/1OnQ4dPlS5ciWMh6PHjgOqadOmEOBU8RKl3u/0AebE2291ZBoHb6UWzZsVL1YMa6d06bIv16iJF1PBAgU6vPEGMhQsUNArsRcxDAjGvITZhkKHCIiACIiACIiACDg1Ae2LbLfms2VfZJRIhu0Z6WdlTDRXFFm8ZRiwZ9Nc9GCWLWJwmqV7SpUsmSpVKvYpY0wdnyJccdgyzNPDk0H30NAsqMVoomyOxiA30jOyTggBA/Y3bjxxysfGSOqb9OGDh4xnFy1ahFKIvmVQnC0LzNkZM2Zs2LiJq77o3Qsd9/CRI4yUIwln3T3c06ROQ/7MWiAVm5ex51loaCgaOWfZ74ydgMmBSGJKZ+M2whKyZctqdi/G9+bCxQv379338PTAQQpfJmID2HkNBRp9msBfViPFVsHfyZzF0X/x4iXo9EwgsPfCM/fFZAaAmjLpcerUaZZ8dXN3YxcFZkvYbgxzglPsC0HdEYDNgzF42Anh+o3rWcOyZsqUET8rJmS4CiMEtmxEffLESQb4PRN5Uh1qQV0wmbC47t27i/DgMhHVJMZLit+ZfLh48dLRo0dAd//BfWYJfJL6ZAgM5CwtiAnBVAZhD6ywVK5cOX6x3rXN9Crti2y3u0sZiYAIxDsC2hc53jWpKuQcBCLdF1m2gd0a0hbbwG6F2ZwRDjk40ydPnhz9lbF5bI8ffvhx0+bNr7zyyqttWj8N3o2b4/qNGzOmz/jl19/efeftihUr+vunihs5YrJU2QYxSVd5i4AIODcB2QbO3X6S3mkJRGobyKfIadvWNsFZxQiXmD8HD541axZr80+YOImJAsIbzFi+bXnYPxUyLF2ylD2JnzjnFCyII5P9y1COIiACIiACIiACIiACL0hAtsELAnO25DVqvFy9evUrV66+9fY7TZo2++3X34hGYLHOIkUKx6FtMGHChC++/HLjho1tWrdia7NEiTydjavkFQEREAEREAEREIF4SEC2QTxsVOsqpUyZ6pVXmo8aOXzt2tX8X7x40Tff9CtbtkzcVvv1118fP27syJHD69WrSzxx3Aqj0kVABERABERABERABAwB2QbxvCe4u7sRbEA8LiuW8p9NFdhoLNwuY7GPIIWfHysXIRXeRBFDeGNfHpUoAiIgAiIgAiIgAiIg20B9QAQckQBbUmDGsUIU6yY5onySSQREQASiTaBK5Uqs0Rdu/e5o56oMREAEoktA8wbRJajrRcDuBFiklR3lypcvJ9vA7myVoQiIgIMQaNWqZYUK5VmZ2kHkkRgiIAKGgGwD9QQRcDgCAQEB7E3BlnZxGC/ucFAkkAiIQPwiwNQoG4Ca7Sx1iIAIOA4B2QaO0xaSRAREQAREQAREQAREQATikoBsg7ikr7JFQAREQAREQAREQAREwHEIyDZwnLaQJCIgAiIgAiIgAiIgAiIQlwRkG8QlfZUtAiIgAiIgAiIgAiIgAo5DQLaB47SFJLEbgUePHt27d89u2SkjERABERABERABEUgYBGQbJIx2TmC1PHz48KRJk2QeJLBmV3VFQAREQAREQASiS0C2QXQJxv71V65cGTZsWK9evVatWvXgwYNwAty5c2fixIndu3cfM2bM3bt3w509ffr0gAEDPv7442dey49k+/XXX1+8ePHx48eRVm3RokV9+vT57bffKDTSxNFMsGvXLsriOHLkyPOzWrhw4R9//LF+/fqIcKIpgy4XAREQAREQAREQgfhNQLaBM7Xvw4cPz507N23atOHDh8+dO/fYsWP8Eq4CO3bsmDFjBmm2b98e8eySJUvGjh07f/78cNfihHP16tXZs2ePGjVq2bJlt27dssU2OHToEBmuW7cuFrRw1sD2f3p4eno+v80OHjy4adOmCxcu2FIFZ2p+ySoCIiACIiACIiACMUxAtkEMA7Zf9rdv32bIfMGCBajjKOURHWbQ72/cuIHNgGZM4nAlo74fP358zpw5e/bsiSgUMwybN29euXLliRMnniMyUxaM3zNdwLFmzRoytBbj8uXLlrNLly7lO7+Y3EiJCcFVixcvxvbYu3fvtWvX+B31nTmH3bt3r1ixgrNchUlz8+ZNLuTH5cuXr169mh+R7f79+0WeHr6+vqdOndq4cSMCMDlAblxI5vwIAQo6efLkpUuXzpw5w4Xkg52DIUQCijZi43FkjJkDBw6QD0WYGvH70aNHt2zZYv4kZ4TBxrBfGyonERABERABERABEXBoArINHLp5rIXDHWjy5Mk//vhj4cKFixYtGlFu1HR0WfRp1OLEiRNbJ0AFRxcfPXo0qj8KdLhr+QUnon/++ef69evhLrROiT6Nhv3FF1/UqlWrfv367dq1mzBhAlq4SYPuztkvv/yyTp06nG3cuDHfjecSgjEd0bFjx7p163KqUaNG33333bZt25CKq9DI+/bt+8orr3C2YcOGn3zyCdYL5g2uTfXq1WvTpg0/fvrppz///HPXpwcK/cyZM99++20ueeutt5o2bVq7du0OHTogDBbR1KlTmf0gcyyoZs2a8YX8R44c2b59+wYNGlDEa6+99ueff6LxU+tBgwa98847LVu2pEaIjafW0KFDu3TpYqpAuT169CCfiMScptNIUBEQAREQAREQARF4EQKyDV6EVlynTZUqVf/+/UuVKuXj4xNRFtR0ogWwHMqVKxdOxUdp3r9/Pyoyp4oXLx7uWgbaZ82axZB52bJlc+XK9W+1RF9HxScZTv+MtaNqe3h4WGwD5itQrLEu/vrrL8bm0eZxfxo8eDDmwZQpU4gMLlCgAIo77kzNmzdnggKdm2uxSXr27IkGjw2Aco+uz7VESuAZhVGBUo5IGC2ET+TOndtaMGrE5aGhoSj0qPghISFo/JSFlo/twfRCjRo1mIvImDEjPlTjx4/Pnj070wiIAT1koFATI4GQUP3222/JJ126dJg3bm5u48aN40unTp04iz129uxZmQdx3fdVvgiIgAiIgAiIQGwQkG0QG5TtUkbq1KnR7NGw/fz80F/D5YnbDGEG/I7uGxYW5ur6Py27b9++ESNGcG3+/PlRha2vxQ0JpZ/4BHR9LvTy8vo3aXHsYUYia9asjKnzyag8doi7u7tJP2/ePBx4SpQoUaFCBc4yQk9x/MLv+PnwBXMlODg4T548r7/+er9+/VDiuQqLBWMgU6ZMaPPFihVr0aLF77//zpxDYGAgswoIQ5ULFiyIYRAUFGQtGGYJuTEbwIWVK1cuX748uj4eU1gUyZIl8/b2Tpo0aebMmZlkwPCAGCkxD5hvqVSpEplTKGEJXAIockYYjBCuggalZMiQAWMDMTAh3njjDTJ0cXGxSyMqExEQAREQAREQARFwZAKyDRy5df5HNuYKGAVH5Y1oGKDRogEzco/imyNHDjzyra9ENUcVxjxgQB11OVwsL67/KP2oxVWqVAlnNoRDQ0qCm9H7UaZRqfmSLVs2LuFHHJZwBMJ7B6cmhvkZhme0nhKZFiBGAlWbZDt37hwyZAhzF/g15c2bl2vxNTJpsA0Ys0ds5gHw5MHkSJkyJaUTf4wxkyJFCuqeJEkSa3n4hcSYDVyF1YQwadKkoXQmLqyTIRIxEgjAbAncoEfRGAnnz5+nOgQ2JE+enLNYC5QC3oCAAOYKmENgxgOBOVWoUCHgyDZwmvtEgoqACIiACIiACESDgGyDaMBzmEsZHd+wYQOqds2aNVGUreXix7Vr16L9M2DP0Dgj6NZn0ZvxDkJZZyoAzRhd/Dl1wkcfkwAd2pKGAXX+xN8G9x70bBLgC8TgvTlQ01HZUcQZ2sfwYEQf/xz8f3755Rfch7Zu3cosBAfzA+j3z4xzYFICm+GZUmEqoNBbpke4nCWMqA4BDNZVwGghDXIyBWH0e5KlTZsWYYhdJgLbVMFcgrnCpAfmATMweCixNiuWDHxsXNHVYbqDBBEBERABERABERCBKBKQbRBFcI5zGbo1nvSo2kTuMgqOnwwHui+KL9o5Ecyst8NYOA792An8wicj/fjrc2BRsNQPA+rVq1fnKpb04UIOJiK4PJyTvVHErX/ku/mTU2jejPcT8MD2ApYDG4DAA6wOnHOYTMCbKGfOnJTYrVu3n376iYF5MwdCJi+63ihmg0XdJwcuJxN+DDfAb5HZkj915yCZkdm6HZmsIMAak+C9997DjiKygugOwpExD2JhkVZrSUx1FOTgOHeZJBEBEbA7AR7FUXj4210MZSgCIhCOgGwDp+8SjNazpClrm6KF4+6Pgs6SPnjXsAdCkyZN8O0xK5/iUo+3fbVq1YjHZXlQlgbiYHQf1xpCb7mK4/3330cPJlCYpXu4EMcbazq4EvEoJ3DZ8iMJ+NOM7jMjwbC99dlwZIlybt26NXHMRAyjeRPgi8WCWz86OlUI5wsUaaswIUDAgGUDB/6k6Hz58oXzp8KXiXcPBTGtYcwDPKy4kHAF5jRwFopYENMRcPvoo49Y7whTAXsJf62IO0VEKmF0ElCdY8eOHz5yROZBdDDqWhEQAUcmgCcqs9YR9+h0ZJklmwgkBAKyDZy+lfG8R5XHB+aHH35ggdHevXvjwIOjPEHJLNCJMdC5c2fOYglw6sMPP8SBHlWedT9ZqRMlmJF+wn85xcGqoDjxE5HMkqBEBofTs3ENwl+fUX+mBXDdQcVnsoIZBkbfMQ9Kly7NJ6sPmXVLcfQnWwbdWaSItVNZexSbhKtw4GHigikLvIAQEjceQiDwRMJEYfM1jBYWJ8V+YELj+Q2D9ozKzmKm2BVspMDKrVgmVBkTBR8kpiMoAmOAIGZCljEG/v77b95AhEQjHhdik1B0uBgG9jQAAi5PGCom9IJMMF34HsvxBvsPHJg6bdr4cePDuUg5fWdVBURABETgvwQG/D5w1qzZ2kNGPUIEHI2AG84e1jIxwop+hlLFwi+OJquDy8NAOHonA8yNGjWMUVFRx3Eiwl2eWQK8+XGtQddnVN5yMI3AskXMA7CWP6PguPRYTqVPn54pBVRk4pIrVqzIVECWLFksZ9Ha0bMxCZhAID44XNQymjTqO5mjWzMXwQwDTkEo3CjfLBhq5g2IfEDL5xP7ASsCDoQLM0iP2k3OrErEXmMsIYpmX6ZMGQQwrv8YEvg+EZeMik/VsE8wQpgH4GB9IbN0EiVyli9YPtQd44EgB1Rn9H6cpiiRirA6KuEWvGn40+yhhg2AqWDsB4ogBxZlwppiGaWSJUtiyRDwAB+EIWc6P7EZHMiD2cNkC5MMECYxcoZb+smWJj537vy2bdspt0qVyuRgyyUmzc6du1auWnXyxMkaNV6Gnu0XKqUIiIAIOAuB3r2/TOrjQyycWXxChwiIQOwQYAAUVW3evPnt27UNF6RqBNC8Qew0hD1LQdnFH4bhf1r0mQorGj8auXHXCVcw6v5zruUBjVsOK/k8M/wXuwIbANUc0wK9Gf0eo4LgXbRnxum5kCWGGLlHFUb7RzVHDKYmSEAwA19Q99k0AJsBG4CVSckKGwA7pFWrVkxuYJawHQE6PUstkQ/LCrHgEnMXljVSsT0ogsPs7cC0A9o2ZgNGAuYBlcUQwp5BcrLFamLZIgwSgigQgOkRzCf+xF2KElmtFSsCnRtzggyxDQwlfK7wvOJyQrdZ9IkqMIWCEQWQiGtD2bNFlZcIiIAIiIAIiIAIOAYBl3AxoOhDEydOwsu5d+9ejiGh00jBaHr//t/evXdv3NgxTiO0cwqKixQxEqj7AwYMCOcX5FAV2rFj54gRI5kq6d//a4wQ22WbP3/BlKlTr1+7PnDggGcGRdielVKKgAiIgGMSKFqsROlSJdu3b8cojGNKKKlEIF4SwClj6tRpnbt0Xb9uzTN3vNW8Qbxsd1VKBERABERABERABERABF6YgGyDF0amC0RABERABERABERABEQgXhKQbRAvmzWeV4rYNcIAXn5ZcbrxvKFVPREQAREQAREQgVgmINsgloGrODsQIGiY9YuIMA63kpIdslYWIiACIiACIiACIpCACcg2SMCNr6qLgAiIgAiIgAiIgAiIgBUB2QbqDiIgAiIgAiIgAiIgAiIgAk8IyDZQPxABERABERABERABERABEZBtoD4gAiIgAiIgAiIgAiIgAiLwXwKaN1BfEAEREAEREAEREAEREAEReEJA+yLbrR+YfZFv3Lw1dMjfdstUGTkzgV27d48bN377tu3aF9mZm1Gyi4AIxAgB7YscI1iVqQhERiDSfZFlG0SG0ObzxjaYNn1GQNq0Nl+khPGZwN179+7fv58lJOTHH7/Ply+f7VWdP3/BlKlTr1+7PnDgAG9vb9svVEoREAERcBYCsg2cpaUkZzwjINsg9hr0zJkzK1eu3LZte+wV6cAlbdu+3c/PL0NgoAPLGBuieXh4BKQLeLn6ywEBL2AxyjaIjbZRGSIgAnFKQLZBnOJX4QmXgGyD2Gv7e/fuXbly5caNG7FXpAOXNGnylOCgoIIFCziwjLEhmouLi2eiRKlSpkyUKJHt5ck2sJ2VUoqACDgpAdkGTtpwEtvZCcg2cPYWdFb5hw0fERKSuWSJEs5agTiVe/HiJbNmzbp+48YP33+XOHHiOJVFhYuACIhAjBCoVLlK8WLFWrdulSVLlhgpQJmKgAg8i0CktoHWKVLHEQGHI5A8ebJMmTOHhmZxddUd6nCtI4FEQATsQiBP7tzBGYM1/GEXmMpEBOxIQJqHHWEqKxGwD4Hs2bM3a9r01TZtPD097ZOjchEBERABByPQrdtHDRs0TJMmjYPJJXFEIKETkG2Q0HuA6u+ABLy8vPz8kqdIkYJwBQcUTyKJgAiIQPQJpE6dmjlSd3f36GelHERABOxIQLaBHWEqKxEQAREQAREQAREQARFwYgKyDZy48SS6CIiACIiACIiACIiACNiRgGwDO8JUViIgAiIgAiIgAiIgAiLgxARkGzhx40l0ERABERABERABERABEbAjAdkGdoSprERABERABERABERABETAiQnINnDixpPoIiACIiACIiACIiACImBHArIN7AhTWYmACIiACIiACIiACIiAExOQbeDEjSfRRUAEREAEREAEREAERMCOBGQb2BGmshIBERABERABERABERABJybg8vjxY2vxt2/fPnHipEePHvXu3cuJqyXRY53Avn371q/fcPjwYVPylq1b2dY3KEMG82fNmjXDwsK8vRPHulwqUAREQAREQAREQARE4D8ETp48OXXqtM5duq5ftyZXrlwRuWjeQH3FPgRcXFy2bds2avSYYcOG83/lypWzZ8/hy6hRoxcsWHj16lVXVxf7lKRcREAEREAEREAEREAEYoaAbIOY4Zrwcg0MDEzl73/nzp2Dhw7x/9y586dOneLL6TNnQkJC0qZN4+XllfCoqMYiIAIiIAIiIAIi4EwEZBs4U2s5sqyJEycuVbJkpYoVmECwyOnq6uqfKlWnTu8HBwc7svCSTQREQAREQAREQAREAAKyDdQN7EYgX768FStWTJ3aH5PAZBoQEFCpcqUMGQITJUpkt2KUkQiIgAiIgAiIgAiIQMwQkG0QM1wTZK5MHeTKlbNhw4aenp4A8PDwyJEjR8uWryRJksR6MiFBslGlRUAEREAEREAERMAJCMg2cIJGciIRAwMz1K5VK2NwMBMFQUFBxYoVzZ8vn5ubmxNVwRFEPXv27KZNm9auW/fw4UNHkEcyiIAIiIDdCbBMxdatW69fv273nJWhCIhAdAjINogOPV0bnkCyZL558uQpX75c2jRpChYsWKZMaUKQNWnwoh2FpWDnzp0/ffqM+/fvv+i1Si8CIiACTkFg6NBhCxcuunTpklNIKyFFIOEQkG1gz7Zmswi2hmCsNyEfSZJ4N2vWNG++vCVKFCtcqFBCRmGpO70i3EYiz+9216/fOHHyxLGjx7jQnh1UeYmACIiAwxDYt38/y9ndvXvXYSSSICIgAk8IaO8ze/aDa9eusXbnpUsX7Zmps+WFEsyznid+0qRJU6VKpUkDGjBVKn9CtH18fGxszPnzF0yZOvX6tesDBw7w9va28SolEwEREAEnIlC0WInSpUq2b9+OnTGdSGyJKgLOTiDSvc9kG9iziTdv3jJz1qxlS5fZM1PnzIshc6wCy4JFzlkJu0lduUrlGi9XJzLbxhxlG9gISslEQAScl4BsA+dtO0nu1ARkG8Rq8y1ctGjEiJFr166rXKmiWatHRwIncP3GjQULFlSqVKlVq5Ylihe3kYZsAxtBKZkIiIDzEpBt4LxtJ8mdmoBsg1htPmyDyZOnXLp4adCg3/GoidWyVZhDEjhx4kSHDh1Dw0IbNWoo28Ahm0hCiYAIxA0B2QZxw12lJngCkdoGikVO8H1EAERABERABERABERABETgKQHZBuoIIiACIiACIiACIiACIiACsg3UB0RABERABERABERABERABP5LQPMG8a0vLF++YvBff3//w4/W/3/59beRI0eyjNKNGzfiW4VVHxEQAREQAREQAREQATsRkG1gJ5AOk82MmbN++OHH334bMMPqGDNm7M+//Dp02LCjR48+ePDAYYSVICIgAiIgAiIgAiIgAg5EQLaBAzWGvURJnz79q23aLFq4wPL/m6/7+fgkHThw0IYNG69du872ZOw/cPv27Zs3bzKTwOedO3fMxr38znfzizl769Yt9jK7d+8eX8IlZtfe+/fvm99NSpKRDweZk4O1HcIpfiQ9pfA7381VlMKpiBsA8wu/GxmsD7JFyKdnnxRtEdLkzMEXMrdIdefOXYqzzopTlsT2Yq58REAEREAEREAERCAeEJBtEA8aMfIqZMuWteObHby8vDZv3szUwfXr11evXtO+fYdy5SsUKVKsWrWXu/foefbsWXTojRs39ejxeZmy5bt0/bBqtZc5W7deg2/6fztkyND6DRryZ8VKlT/4oItJzAKdo0aNatasRbHiJTlVv0GjgYP+IHOONzq8+d77nZYt+/9t4P74c3Cr1m2GDR+BpTFv3nwScEmxYiUqVKzMnMb+/fvDVePIkSM///xLyVJlSGb9v9MHndesWcMKXMOGDWvcpGmp0k8SNG7cdPjTnMlk8pSpb7zxpkWqz3v2nD59xq+//lb95RrFS5R6krhJ0+EjRmItRA5OKURABERABERABEQgIRGQbZAgWtvd3d07SRI2Kr5168lo/bZt2wYOGnTy1KkmjRt3+qBT0WJFt2ze/Ntvvx87fpwB99OnTx88ePDKlSvNmjZp2LChm5srLkkTJk4sUrjwq6+9mi1btiVLlixYsPDQocMzZ80eO24C0w1du3Ru165t8uTJZs2a9fvvA2Hq6+t79MiRzZu3Gr579uzZtHHTxYsXU6ZMgWEwavRol5dc2rzaulOn9/Pkzj171uwZM2YeP37cujFSpUpVqVLFTz7u1r37Z/xv3aZ1YIYMZ86ezZQxo2eiRMtXrBw+YkTaNGnacbRvlzYg7fgJE7ABLly4cPXq1d17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HPZEY0Q/4h5bqMgkoAjUaK5icU9MAiYT2DQAAwBbBUXfyMBZficfNHsyxxQhc0wUPkljVjg1Dj+kJFsyRGzMDFYKMkujYg+g1pMza5giCQP5ZMt4P8YGOj22AT5U5I8HETmwwhLfMYQogpF+cuN3CuJ3EKH3m2AJiiBnoo2Jk0YquCEPa6pSWRJzwJA0JhNTQRZsJRNbQr1t7DeyDWwEpWQiIAIiIAIiIAKxQCBS28AlnJ83gaoTJ07CGaN3716xIF88K2LhokWTJ0+5dPHSoEG/Gz94HdEnwJwA2w4QpdCnTx+G/J+5xlH0S4mhHPCA6tChY2hYaKNGDUsULx5DpShbERABERABERABEbCFAE4ZU6dO69yl6/p1a8y+VeEOxRvYglFpREAEREAEREAEREAERCD+E5BtEP/bWDUUAREQAREQAREQAREQAVsIyDawhZLSxCUBoinefvttVmVlGSI7RgLEZZVUtgiIgAiIgAiIgAg4JAHFG9izWYg3GDVq9Nat2xo3apjIy8ueWSsv5yTAyk7jx08oU6b0K6+0ULyBc7ahpBYBERABERCB+EMg0ngD2Qb2bOy1a9cRyT1v/nx7ZuqcebHwaKJEnt7eSZxTfDtLXatWzYZP1lHNY+d8lZ0IiIAIiIAIiIAIvAgB2QYvQivaaRkkPn36zIUL56Odk9NnMHfuvHTp0+V+Vvy709ftxSuQJk0aVlY166jqEAEREAEREAEREIG4IiDbIFbJs60YC/PzGaulOmRh+FZlypypeLFiDildbAvl5ubu4eEecQeJ2JZD5YmACIiACIiACCRsArINEnb7x13thw0fERKSuWSJEnEnghOXzL7OGzdtunP7zquvtmG/NieuiUQXAREQgX8hMGTIUDa7zJc/X8oUKQRJBEQg1ghEahtonaJYawsVJAK2EsAzbd269StXrmIaytZrlE4EREAEnIrA9Bkz1q1ff+3qVaeSWsKKQPwnINsg/rexaigCIiACIiACjkbgxImTFy9cuH//vqMJJnlEIIETkG2QwDuAqi8CIiACIiACIiACIiAC/yEg20BdQQREQAREQAREQAREQARE4AkB2QbqByIgAiIgAiIgAiIgAiIgArIN1AdEQAREQAREQAREQAREQAT+S0DzBuoLIiACIiACIiACIiACIiACmjdQHxABERABERABERABERABEdC8gfqACIiACIiACIiACIiACIiANQH5FKk/iIAIiIAIiIAIiIAIiIAIPCEg20D9QAREQAREQAREQAREQAREQLaB+oD9CFy5cmXXrl0r/3vs379/+7btlj/Pnz//8OFD+5WmnERABERABERABERABOxPQPMG9meaMHPcsGFjt26flC1XoUzZ8vzv2/ert95+hy/8UqFi5YULF928eTNhklGtRUAEREAEREAERMBZCMg2cJaWcnQ5ixUrmi9/3uTJk4cT1McnSf369XLkyO7j4+PodZB8IiACIiACIiACIpCwCcg2SNjtb7/ao/qXL1euSpXK1lm6ubn5+6du+corQUFBrq7qbPbDrZxEQAREQAREQAREIAYISF2LAagJNcs8efJUqFA+bZo0FjMgRYoURYoU5r+vr29CpaJ6i4AIiIAIiIAIiIDTEJBt4DRN5fiCpkyZMm+evCVLlnR3d0daPrNkyVKvXl0MA00aOH7zSUIREAEREAEREAERkG2gPmBPAqFhoW1ebe3t7e3i4pIsmW/BggUaNmjg6elpzzISQF6YUh7uHhxgTADVVRVFQAQSIgEPD3f8TvWUS4htrzo7NgHZBo7dPs4mXVIfn5w5clavXo05hKJFilaqWNHZauAQ8hYtWvSjj7r27t0zUaJEDiGQhBABERABexP4uNtHDRs2SJMmjb0zVn4iIALRIiDbIFr4dHE4AgwCpUqVsnnz5mXKlK5QsQKRBkIUBQIs7hQQEJA+fXr5YkWBni4RARFwCgLFixfPli0b88xOIa2EFIGEQ0C2QcJp61iqaeLEiYsXK8baRBUrVtCAUCxBVzEiIAIi4GwEWKwiadKkJj5NhwiIgOMQcHn8+LG1NNu3b584cdKjR4969+7lOFI6iyQ3bty8fPnS1avXnEVgyRk7BPz8kvv5+Wl4LHZoqxQREAEREAEREIF/I3Dy5MmpU6d17tJ1/bo1uXLliphMtoE9O8/GjZtmzJixZMlSXGvsma/ycmYCDx8+rFq1Ss1aNXPlzOnM9ZDsIiACIiACIiACTk9AtkGsNiFWwegxY9avW1+2XFkWmYnVslWYQxK4efPm0qVLK1So0KJ586JFizikjBJKBERABERABEQgoRCQbRCrLb1w0aLx4yccO3bss88+TZIkSayWrcIcksDZs2f7fNk3b768TZs2KVG8uEPKKKFEQAREQAREQAQSCgHZBrHa0tgGkydPuXTx0qBBvxNiFatlqzCHJHDixIkOHTqy7UOjRg1lGzhkE0koERABERABEUhABCK1DbROUQLqDaqqCIiACIiACIiACIiACDyHgGwDJ+4erDF1//79u3fv3vnfg1/u3btHCKwT1Y26PHjwAMlZIyvc2lnUgh9NTSOtEZlQdz4jpiQTTpFPxPwjzVYJREAEREAEREAERCAhEJBt4MStfOHixa5dP6pUqUrhIsWs//PL+50+mDdvPqqws1Tv+PHjAwcOerlGTSJ3r10LvwgsC0B1796jfoOGN27ceH6Nfvr5l7fefvfvf4aES4b1tGnTphavtPzqq34HDhxwFiySUwREQAREQAREQARik4Bsg9ikbeeyHtx/cOz48dt37rAJcdcunS3/8+TJs2XL1sGD/zp58pSzmAfIee7cuX379l+/fj3ijEeGDBlq1KjRtu3rnokSPR8isb9Hjx69cOFCuGRMGrBk0KFDh06dOmXL/IOdm0rZiYAIiIAIiIAIiIAzEHDr2bOntZzoZ7t378bponz58s4gv2PJePjw4T179ty+fbtWrZqJItNioy86g+izZs1mL4V6deu0aNE8738Plkg6dPjwipUr8+fPFxCQ7tGjh/v371+wYOGyZcvXrlu3b+8+JEydOjUX8vvSpcvWrF134viJhQsX8uXY0WNs33b8+ImZs2auWbN2185dN2/eSJs2LYnPnz+/efMW1mldtnzFunXrjxw+wo++vkkvX748cuQodnxjby8fHx9Tr5kzZ4HiJReXpD4+O3bsnDd/wbLlyzdu2Lhnz96XXnpMoLanp6c1gUuXLm3duo1sQ7Nk4cJ169dv27qNcJmkvr6QpKbo9JcvXWaLAArl9zVr1syaPYf0+/ft3759x86dO8+cPROUIcOiRYuPHDn68MFD6mjqe+rkKTc3V19fX3KYO29emtRp+L569ZoHDx7yxTQTswobN22iRAROmSJF9JvGkgNzIDNmzEyZMmXOnDmwcOyYs7ISAREQAREQAREQgRclwCDs3r178S5p364t2mDEy2UbvCjS56WPE9uAEfcC+fPnyvX/+2qhoF+5fHnR4sUZg4OzZg07eeoUG+CNGjV61+5dWzbzb8vFixfTB6b3T5UKTfr33wdOnTr14qVLa9euQ+/fum3rwYOH9u3bN2/uvI0bN65cuYox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" style="width:6.26875in;height:5.48611in" /></p>
+<p>Figure 1: Flowchart of the generation and validation of the models generated in R-project</p>
+<h4 id="applicability-domain-1">Applicability domain</h4>
+<p>The AD of the training dataset and the PA dataset was evaluated using the Jaccard distance. A Jaccard distance of ‘0’ indicates that the substances are similar, whereas a value of ‘1’ shows that the substances are different. The Jaccard distance was below 0.2 for all PAs relative to the training dataset. Therefore, PA dataset is within the AD of the training dataset and the models can be used to predict the genotoxic potential of the PA dataset.</p>
+<h4 id="y-randomisation">y-randomisation</h4>
+<p>After y-randomisation of the outcome, the accuracy and CCR are around 50%, indicating a chance in the distribution of the results. This shows, that the outcome is actually related to the predictors and not by chance.</p>
+<h3 id="deep-learning-in-tensorflow">Deep Learning in TensorFlow</h3>
+<p>Alternatively, a DL model was established with Python-based TensorFlow program (<a href="https://www.tensorflow.org/" class="uri">https://www.tensorflow.org/</a>) using the high-level API Keras (<a href="https://www.tensorflow.org/guide/keras" class="uri">https://www.tensorflow.org/guide/keras</a>) to build the models.</p>
+<p>Data pre-processing was done by rank transformation using the ‘<em>QuantileTransformer</em>’ procedure. A sequential model has been used. Four layers have been used: input layer, two hidden layers (with 12, 8 and 8 nodes, respectively) and one output layer. For the output layer, a sigmoidal activation function and for all other layers the ReLU (‘<em>Rectified Linear Unit</em>’) activation function was used. Additionally, a L<sup>2</sup>-penalty of 0.001 was used for the input layer. For training of the model, the ADAM algorithm was used to minimise the cross-entropy loss using the default parameters of Keras. Training was performed for 100 epochs with a batch size of 64. The model was implemented with Python 3.6 and Keras. For training of the model, a 6-fold cross-validation was used. Accuracy was estimated by ROC-AUC and confusion matrix.</p>
+<h2 id="validation">Validation</h2>
+<h1 id="results">Results</h1>
+<h2 id="lazar-1"><code>lazar</code></h2>
+<h2 id="random-forest">Random Forest</h2>
+<p>The validation showed that the RF model has an accuracy of 64%, a sensitivity of 66% and a specificity of 63%. The confusion matrix of the model, calculated for 8080 instances, is provided in Table 1.</p>
+<p>Table 1: Confusion matrix of the RF model</p>
+<table>
+<thead>
+<tr class="header">
+<th></th>
+<th style="text-align: left;">Predicted genotoxicity</th>
+<th></th>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Measured genotoxicity</td>
+<td style="text-align: left;"></td>
+<td><strong><em>PP</em></strong></td>
+<td><strong><em>PN</em></strong></td>
+<td><strong><em>Total</em></strong></td>
+</tr>
+<tr class="even">
+<td></td>
+<td style="text-align: left;"><strong><em>TP</em></strong></td>
+<td>2274</td>
+<td>1163</td>
+<td>3437</td>
+</tr>
+<tr class="odd">
+<td></td>
+<td style="text-align: left;"><strong><em>TN</em></strong></td>
+<td>1736</td>
+<td>2907</td>
+<td>4643</td>
+</tr>
+<tr class="even">
+<td></td>
+<td style="text-align: left;"><strong><em>Total</em></strong></td>
+<td>4010</td>
+<td>4070</td>
+<td>8080</td>
+</tr>
+</tbody>
+</table>
+<p>PP: Predicted positive; PN: Predicted negative, TP: True positive, TN: True negative</p>
+<h2 id="support-vector-machines">Support Vector Machines</h2>
+<p>The validation showed that the SVM model has an accuracy of 62%, a sensitivity of 65% and a specificity of 60%. The confusion matrix of SVM model, calculated for 8080 instances, is provided in Table 2.</p>
+<p>Table 2: Confusion matrix of the SVM model</p>
+<table>
+<thead>
+<tr class="header">
+<th></th>
+<th style="text-align: left;">Predicted genotoxicity</th>
+<th></th>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Measured genotoxicity</td>
+<td style="text-align: left;"></td>
+<td><strong><em>PP</em></strong></td>
+<td><strong><em>PN</em></strong></td>
+<td><strong><em>Total</em></strong></td>
+</tr>
+<tr class="even">
+<td></td>
+<td style="text-align: left;"><strong><em>TP</em></strong></td>
+<td>2057</td>
+<td>1107</td>
+<td>3164</td>
+</tr>
+<tr class="odd">
+<td></td>
+<td style="text-align: left;"><strong><em>TN</em></strong></td>
+<td>1953</td>
+<td>2963</td>
+<td>4916</td>
+</tr>
+<tr class="even">
+<td></td>
+<td style="text-align: left;"><strong><em>Total</em></strong></td>
+<td>4010</td>
+<td>4070</td>
+<td>8080</td>
+</tr>
+</tbody>
+</table>
+<p>PP: Predicted positive; PN: Predicted negative, TP: True positive, TN: True negative</p>
+<h2 id="deep-learning-r-project">Deep Learning (R-project)</h2>
+<p>The validation showed that the DL model generated in R has an accuracy of 59%, a sensitivity of 89% and a specificity of 30%. The confusion matrix of the model, normalised to 8080 instances, is provided in Table 3.</p>
+<p>Table 3: Confusion matrix of the DL model (R-project)</p>
+<table>
+<thead>
+<tr class="header">
+<th></th>
+<th style="text-align: left;">Predicted genotoxicity</th>
+<th></th>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Measured genotoxicity</td>
+<td style="text-align: left;"></td>
+<td><strong><em>PP</em></strong></td>
+<td><strong><em>PN</em></strong></td>
+<td><strong><em>Total</em></strong></td>
+</tr>
+<tr class="even">
+<td></td>
+<td style="text-align: left;"><strong><em>TP</em></strong></td>
+<td>3575</td>
+<td>435</td>
+<td>4010</td>
+</tr>
+<tr class="odd">
+<td></td>
+<td style="text-align: left;"><strong><em>TN</em></strong></td>
+<td>2853</td>
+<td>1217</td>
+<td>4070</td>
+</tr>
+<tr class="even">
+<td></td>
+<td style="text-align: left;"><strong><em>Total</em></strong></td>
+<td>6428</td>
+<td>1652</td>
+<td>8080</td>
+</tr>
+</tbody>
+</table>
+<p>PP: Predicted positive; PN: Predicted negative, TP: True positive, TN: True negative</p>
+<h2 id="dl-model-tensorflow">DL model (TensorFlow)</h2>
+<p>The validation showed that the DL model generated in TensorFlow has an accuracy of 68%, a sensitivity of 70% and a specificity of 46%. The confusion matrix of the model, normalised to 8080 instances, is provided in Table 4.</p>
+<p>Table 4: Confusion matrix of the DL model (TensorFlow)</p>
+<table>
+<thead>
+<tr class="header">
+<th></th>
+<th style="text-align: left;">Predicted genotoxicity</th>
+<th></th>
+<th></th>
+<th></th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>Measured genotoxicity</td>
+<td style="text-align: left;"></td>
+<td><strong><em>PP</em></strong></td>
+<td><strong><em>PN</em></strong></td>
+<td><strong><em>Total</em></strong></td>
+</tr>
+<tr class="even">
+<td></td>
+<td style="text-align: left;"><strong><em>TP</em></strong></td>
+<td>2851</td>
+<td>1227</td>
+<td>4078</td>
+</tr>
+<tr class="odd">
+<td></td>
+<td style="text-align: left;"><strong><em>TN</em></strong></td>
+<td>1825</td>
+<td>2177</td>
+<td>4002</td>
+</tr>
+<tr class="even">
+<td></td>
+<td style="text-align: left;"><strong><em>Total</em></strong></td>
+<td>4676</td>
+<td>3404</td>
+<td>8080</td>
+</tr>
+</tbody>
+</table>
+<p>PP: Predicted positive; PN: Predicted negative, TP: True positive, TN: True negative</p>
+<p>The ROC curves from the 6-fold validation are shown in Figure 7.</p>
+<p><img src="data:image/png;base64,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" style="width:3.825in;height:2.7327in" /></p>
+<p>Figure 7: Six-fold cross-validation of TensorFlow DL model show an average area under the ROC-curve (ROC-AUC; measure of accuracy) of 68%.</p>
+<p>In summary, the validation results of the four methods are presented in the following table.</p>
+<p>Table 5 Results of the cross-validation of the four models and after y-randomisation</p>
+<table style="width:97%;">
+<colgroup>
+<col style="width: 32%"></col>
+<col style="width: 15%"></col>
+<col style="width: 10%"></col>
+<col style="width: 19%"></col>
+<col style="width: 19%"></col>
+</colgroup>
+<thead>
+<tr class="header">
+<th></th>
+<th style="text-align: left;">Accuracy</th>
+<th style="text-align: left;">CCR</th>
+<th style="text-align: left;">Sensitivity</th>
+<th style="text-align: left;">Specificity</th>
+</tr>
+</thead>
+<tbody>
+<tr class="odd">
+<td>RF model</td>
+<td style="text-align: left;">64.1%</td>
+<td style="text-align: left;">64.4%</td>
+<td style="text-align: left;">66.2%</td>
+<td style="text-align: left;">62.6%</td>
+</tr>
+<tr class="even">
+<td>SVM model</td>
+<td style="text-align: left;">62.1%</td>
+<td style="text-align: left;">62.6%</td>
+<td style="text-align: left;">65.0%</td>
+<td style="text-align: left;">60.3%</td>
+</tr>
+<tr class="odd">
+<td>DL model<br />
+(R-project)</td>
+<td style="text-align: left;">59.3%</td>
+<td style="text-align: left;">59.5%</td>
+<td style="text-align: left;">89.2%</td>
+<td style="text-align: left;">29.9%</td>
+</tr>
+<tr class="even">
+<td>DL model (TensorFlow)</td>
+<td style="text-align: left;">68%</td>
+<td style="text-align: left;">62.2%</td>
+<td style="text-align: left;">69.9%</td>
+<td style="text-align: left;">45.6%</td>
+</tr>
+<tr class="odd">
+<td>y-randomisation</td>
+<td style="text-align: left;">50.5%</td>
+<td style="text-align: left;">50.4%</td>
+<td style="text-align: left;">50.3%</td>
+<td style="text-align: left;">50.6%</td>
+</tr>
+</tbody>
+</table>
+<p>CCR (correct classification rate)</p>
+<h1 id="discussion">Discussion</h1>
+<p>General model performance</p>
+<p>Based on the results of the cross-validation for all models, <code>lazar</code>, RF, SVM, DL (R-project) and DL (TensorFlow) it can be state that the prediction results are not optimal due to different reasons. The accuracy as measured during cross-validation of the four models (RF, SVM, DL (R-project and TensorFlow)) was partly low with CCR values between 59.3 and 68%, with the R-generated DL model and the TensorFlow-generated DL model showing the worst and the best performance, respectively. The validation of the R-generated DL model revealed a high sensitivity (89.2%) but an unacceptably low specificity of 29.9% indicating a high number of false positive estimates. The TensorFlow-generated DL model, however, showed an acceptable but not optimal accuracy of 68%, a sensitivity of 69.9% and a specificity of 45.6%. The low specificity indicates that both DL models tends to predict too many instances as positive (genotoxic), and therefore have a high false positive rate. This allows at least with the TensorFlow generated DL model to make group statements, but the confidence for estimations of single PAs appears to be insufficiently low.</p>
+<p>Several factors have likely contributed to the low to moderate performance of the used methods as shown during the cross-validation:</p>
+<ol type="1">
+<li>The outcome in the training dataset was based on the results of AMES tests for genotoxicity <a href="#_ENREF_63">ICH 2011</a>(), an <em>in vitro</em> test in different strains of the bacteria <em>Salmonella typhimurium</em>. In this test, mutagenicity is evaluated with and without prior metabolic activation of the test substance. Metabolic activation could result in the formation of genotoxic metabolites from non-genotoxic parent compounds. However, no distinction was made in the training dataset between substances that needed metabolic activation before being mutagenic and those that were mutagenic without metabolic activation. <code>lazar</code> is able to handle this ‘inaccuracy’ in the training dataset well due to the way the algorithm works: <code>lazar</code> predicts the genotoxic potential based on the neighbours of substances with comparable structural features, considering mutagenic and not mutagenic neighbours. Based on the structural similarity, a probability for mutagenicity and no mutagenicity is calculated independently from each other (meaning that the sum of probabilities does not necessarily adds up to 100%). The class with the higher outcome is then the overall outcome for the substance.</li>
+</ol>
+<blockquote>
+<p>In contrast, the other models need to be trained first to recognise the structural features that are responsible for genotoxicity. Therefore, the mixture of substances being mutagenic with and without metabolic activation in the training dataset may have adversely affected the ability to separate the dataset in two distinct classes and thus explains the relatively low performance of these models.</p>
+</blockquote>
+<ol start="2" type="1">
+<li>Machine learning algorithms try to find an optimized solution in a high-dimensional (one dimension per each predictor) space. Sometimes these methods do not find the global optimum of estimates but only local (not optimal) solutions. Strategies to find the global solutions are systematic variation (grid search) of the hyperparameters of the methods, which may be very time consuming in particular in large datasets.</li>
+</ol>
+<h1 id="conclusions">Conclusions</h1>
+<p>In this study, an attempt was made to predict the genotoxic potential of PAs using five different machine learning techniques (<code>lazar</code>, RF, SVM, DL (R-project and TensorFlow). The results of all models fitted only partly to the findings in literature, with best results obtained with the TensorFlow DL model. Therefore, modelling allows statements on the relative risks of genotoxicity of the different PA groups. Individual predictions for selective PAs appear, however, not reliable on the current basis of the used training dataset.</p>
+<p>This study emphasises the importance of critical assessment of predictions by QSAR models. This includes not only extensive literature research to assess the plausibility of the predictions, but also a good knowledge of the metabolism of the test substances and understanding for possible mechanisms of toxicity.</p>
+<p>In further studies, additional machine learning techniques or a modified (extended) training dataset should be used for an additional attempt to predict the genotoxic potential of PAs.</p>
+<h1 id="references" class="unnumbered">References</h1>
+<div id="refs" class="references" role="doc-bibliography">
+<div id="ref-Bender2004">
+<p>Bender, Andreas, Hamse Y. Mussa, Robert C. Glen, and Stephan Reiling. 2004. “Molecular Similarity Searching Using Atom Environments, Information-Based Feature Selection, and a Naïve Bayesian Classifier.” <em>Journal of Chemical Information and Computer Sciences</em> 44 (1): 170–78. <a href="https://doi.org/10.1021/ci034207y">https://doi.org/10.1021/ci034207y</a>.</p>
+</div>
+<div id="ref-Hansen2009">
+<p>Hansen, Katja, Sebastian Mika, Timon Schroeter, Andreas Sutter, Antonius ter Laak, Thomas Steger-Hartmann, Nikolaus Heinrich, and Klaus-Robert Müller. 2009. “Benchmark Data Set for in Silico Prediction of Ames Mutagenicity.” <em>Journal of Chemical Information and Modeling</em> 49 (9): 2077–81. <a href="https://doi.org/10.1021/ci900161g">https://doi.org/10.1021/ci900161g</a>.</p>
+</div>
+<div id="ref-Kazius2005">
+<p>Kazius, J., R. McGuire, and R. Bursi. 2005. “Derivation and Validation of Toxicophores for Mutagenicity Prediction.” <em>J Med Chem</em>, no. 48: 312–20.</p>
+</div>
+<div id="ref-OBoyle2011a">
+<p>O’Boyle, Noel, Michael Banck, Craig James, Chris Morley, Tim Vandermeersch, and Geoffrey Hutchison. 2011. “Open Babel: An open chemical toolbox.” <em>J. Cheminf.</em> 3 (1): 33. <a href="https://doi.org/doi:10.1186/1758-2946-3-33">https://doi.org/doi:10.1186/1758-2946-3-33</a>.</p>
+</div>
+<div id="ref-Rücker2007">
+<p>Rücker, C, G Rücker, and M. Meringer. 2007. “Y-Randomization and Its Variants in Qspr/Qsar.” <em>J. Chem. Inf. Model.</em>, no. 47: 2345–57.</p>
+</div>
+<div id="ref-Yap2011">
+<p>Yap, CW. 2011. “PaDEL-Descriptor: An Open Source Software to Calculate Molecular Descriptors and Fingerprints.” <em>Journal of Computational Chemistry</em>, no. 32: 1466–74.</p>
+</div>
+</div>
+</div>
+</article>
+<footer>
+ <p><small>Generated using <a href="https://github.com/pandoc-scholar/pandoc-scholar">pandoc scholar</a></small></p>
+</footer>
+</div>
+ <!--[if !IE]><script>fixScale(document);</script><![endif]-->
+</body>
+</html>
diff --git a/paper/outfile.latex b/paper/outfile.latex
new file mode 100644
index 0000000..9af84b1
--- /dev/null
+++ b/paper/outfile.latex
@@ -0,0 +1,779 @@
+\documentclass[]{scrartcl}
+\usepackage{lmodern}
+\usepackage{amssymb,amsmath}
+\usepackage{ifxetex,ifluatex}
+\usepackage{fixltx2e} % provides \textsubscript
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \usepackage[T1]{fontenc}
+ \usepackage[utf8]{inputenc}
+\else % if luatex or xelatex
+ \ifxetex
+ \usepackage{mathspec}
+ \else
+ \usepackage{fontspec}
+ \fi
+ \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
+\fi
+% use upquote if available, for straight quotes in verbatim environments
+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
+% use microtype if available
+\IfFileExists{microtype.sty}{%
+\usepackage{microtype}
+\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
+}{}
+\usepackage[unicode=true]{hyperref}
+\hypersetup{
+ pdftitle={A comparison of random forest, support vector machine, deep learning and lazar algorithms for predicting mutagenicity},
+ pdfkeywords={mutagenicity, (Q)SAR, lazar, random forest, support vector machine, deep
+learning},
+ pdfborder={0 0 0},
+ breaklinks=true}
+\urlstyle{same} % don't use monospace font for urls
+\usepackage{longtable,booktabs}
+\usepackage{graphicx,grffile}
+\makeatletter
+\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
+\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
+\makeatother
+% Scale images if necessary, so that they will not overflow the page
+% margins by default, and it is still possible to overwrite the defaults
+% using explicit options in \includegraphics[width, height, ...]{}
+\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
+\IfFileExists{parskip.sty}{%
+\usepackage{parskip}
+}{% else
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{6pt plus 2pt minus 1pt}
+}
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+\providecommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+\setcounter{secnumdepth}{0}
+% Redefines (sub)paragraphs to behave more like sections
+\ifx\paragraph\undefined\else
+\let\oldparagraph\paragraph
+\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
+\fi
+\ifx\subparagraph\undefined\else
+\let\oldsubparagraph\subparagraph
+\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
+\fi
+
+\title{A comparison of random forest, support vector machine, deep learning and
+lazar algorithms for predicting mutagenicity}
+\usepackage{authblk}
+\author[%
+ 1%
+ ]{%
+ Christoph Helma%
+ %
+ \textsuperscript{*\,}%
+ %%
+ %
+}
+\author[%
+ 2%
+ ]{%
+ Verena Schöning%
+ %
+ %
+}
+\author[%
+ 2%
+ ]{%
+ Philipp Boss%
+ %
+ %
+}
+\author[%
+ 2%
+ ]{%
+ Jürgen Drewe%
+ %
+ %
+}
+\affil[1]{\normalsize in silico toxicology gmbh, \footnotesize Rastatterstrasse 41, 4057 Basel, Switzerland}
+\affil[2]{\normalsize Zeller AG, \footnotesize Seeblickstrasse 4, 8590 Romanshorn, Switzerland}
+\date{}
+
+\makeatletter
+\def\@maketitle{%
+ \newpage \null \vskip 2em
+ \begin {center}%
+ \let \footnote \thanks
+ {\LARGE \@title \par}%
+ \vskip 1.5em%
+ {\large \lineskip .5em%
+ \begin {tabular}[t]{c}%
+ \@author
+ \end {tabular}\par}%
+ \vskip 0.2em{\textsuperscript{*}\,Correspondence:
+ Christoph Helma <helma@in-silico.ch>\\
+ }%
+ % \vskip 1em{\large \@date}%
+ \end {center}%
+ \par
+ \vskip 1.5em}
+\makeatother
+
+\begin{document}
+
+\maketitle
+
+\begin{abstract}
+k-nearest neighbor (\texttt{lazar}), random forest, support vector
+machine and deep learning algorithms were applied to a new
+\emph{Salmonella} mutagenicity dataset with 8281 unique chemical
+structures. Algorithm performance was evaluated using 5-fold
+crossvalidation. TODO - results - conclusion
+\end{abstract}
+
+\hypertarget{introduction}{%
+\section{Introduction}\label{introduction}}
+
+TODO: algo history
+
+TODO: dataset history
+
+TODO: open problems
+
+\hypertarget{materials-and-methods}{%
+\section{Materials and Methods}\label{materials-and-methods}}
+
+\hypertarget{mutagenicity-data}{%
+\subsection{Mutagenicity data}\label{mutagenicity-data}}
+
+For all methods, the same training dataset was used. The training
+dataset was compiled from the following sources:
+
+\begin{itemize}
+\item
+ Kazius/Bursi Dataset (4337 compounds, Kazius, McGuire, and Bursi
+ (2005)): \url{http://cheminformatics.org/datasets/bursi/cas_4337.zip}
+\item
+ Hansen Dataset (6513 compounds, Hansen et al. (2009)):
+ \url{http://doc.ml.tu-berlin.de/toxbenchmark/Mutagenicity_N6512.csv}
+\item
+ EFSA Dataset (695 compounds):
+ \url{https://data.europa.eu/euodp/data/storage/f/2017-0719T142131/GENOTOX\%20data\%20and\%20dictionary.xls}
+\end{itemize}
+
+Mutagenicity classifications from Kazius and Hansen datasets were used
+without further processing. To achieve consistency between these
+datasets, EFSA compounds were classified as mutagenic, if at least one
+positive result was found for TA98 or T100 Salmonella strains.
+
+Dataset merges were based on unique SMILES (\emph{Simplified Molecular
+Input Line Entry Specification}) strings of the compound structures.
+Duplicated experimental data with the same outcome was merged into a
+single value, because it is likely that it originated from the same
+experiment. Contradictory results were kept as multiple measurements in
+the database. The combined training dataset contains 8281 unique
+structures.
+
+Source code for all data download, extraction and merge operations is
+publicly available from the git repository
+\url{https://git.in-silico.ch/pyrrolizidine} under a GPL3 License.
+
+TODO: check/fix git repo
+
+For the Random Forest (RF), Support Vector Machines (SVM), and Deep
+Learning (DL) models, molecular descriptors were calculated with the
+PaDEL-Descriptors program (\url{http://www.yapcwsoft.com} version 2.21,
+Yap (2011)).
+
+TODO: sentence ??
+
+From these descriptors were chosen, which were actually used for the
+generation of the DL model.
+
+\hypertarget{algorithms}{%
+\subsection{Algorithms}\label{algorithms}}
+
+\hypertarget{lazar}{%
+\subsubsection{\texorpdfstring{\texttt{lazar}}{lazar}}\label{lazar}}
+
+\texttt{lazar} (\emph{lazy structure activity relationships}) is a
+modular framework for read-across model development and validation. It
+follows the following basic workflow: For a given chemical structure
+\texttt{lazar}:
+
+\begin{itemize}
+\item
+ searches in a database for similar structures (neighbours) with
+ experimental data,
+\item
+ builds a local QSAR model with these neighbours and
+\item
+ uses this model to predict the unknown activity of the query compound.
+\end{itemize}
+
+This procedure resembles an automated version of read across predictions
+in toxicology, in machine learning terms it would be classified as a
+k-nearest-neighbour algorithm.
+
+Apart from this basic workflow, \texttt{lazar} is completely modular and
+allows the researcher to use any algorithm for similarity searches and
+local QSAR (\emph{Quantitative structure--activity relationship})
+modelling. Algorithms used within this study are described in the
+following sections.
+
+\hypertarget{neighbour-identification}{%
+\paragraph{Neighbour identification}\label{neighbour-identification}}
+
+Similarity calculations were based on MolPrint2D fingerprints (Bender et
+al. (2004)) from the OpenBabel cheminformatics library (O'Boyle et al.
+(2011)). The MolPrint2D fingerprint uses atom environments as molecular
+representation, which resembles basically the chemical concept of
+functional groups. For each atom in a molecule, it represents the
+chemical environment using the atom types of connected atoms.
+
+MolPrint2D fingerprints are generated dynamically from chemical
+structures and do not rely on predefined lists of fragments (such as
+OpenBabel FP3, FP4 or MACCs fingerprints or lists of
+toxicophores/toxicophobes). This has the advantage that they may capture
+substructures of toxicological relevance that are not included in other
+fingerprints.
+
+From MolPrint2D fingerprints a feature vector with all atom environments
+of a compound can be constructed that can be used to calculate chemical
+similarities.
+
+The chemical similarity between two compounds a and b is expressed as
+the proportion between atom environments common in both structures A ∩ B
+and the total number of atom environments A U B (Jaccard/Tanimoto
+index).
+
+\[sim = \frac{\left| A\ \cap B \right|}{\left| A\ \cup B \right|}\]
+
+Threshold selection is a trade-off between prediction accuracy (high
+threshold) and the number of predictable compounds (low threshold). As
+it is in many practical cases desirable to make predictions even in the
+absence of closely related neighbours, we follow a tiered approach:
+
+\begin{itemize}
+\item
+ First a similarity threshold of 0.5 is used to collect neighbours, to
+ create a local QSAR model and to make a prediction for the query
+ compound.
+\item
+ If any of these steps fails, the procedure is repeated with a
+ similarity threshold of 0.2 and the prediction is flagged with a
+ warning that it might be out of the applicability domain of the
+ training data.
+\item
+ Similarity thresholds of 0.5 and 0.2 are the default values chosen
+ \textgreater{} by the software developers and remained unchanged
+ during the \textgreater{} course of these experiments.
+\end{itemize}
+
+Compounds with the same structure as the query structure are
+automatically eliminated from neighbours to obtain unbiased predictions
+in the presence of duplicates.
+
+\hypertarget{local-qsar-models-and-predictions}{%
+\paragraph{Local QSAR models and
+predictions}\label{local-qsar-models-and-predictions}}
+
+Only similar compounds (neighbours) above the threshold are used for
+local QSAR models. In this investigation, we are using a weighted
+majority vote from the neighbour's experimental data for mutagenicity
+classifications. Probabilities for both classes
+(mutagenic/non-mutagenic) are calculated according to the following
+formula and the class with the higher probability is used as prediction
+outcome.
+
+\[p_{c} = \ \frac{\sum_{}^{}\text{sim}_{n,c}}{\sum_{}^{}\text{sim}_{n}}\]
+
+\(p_{c}\) Probability of class c (e.g.~mutagenic or non-mutagenic)\\
+\(\sum_{}^{}\text{sim}_{n,c}\) Sum of similarities of neighbours with
+class c\\
+\(\sum_{}^{}\text{sim}_{n}\) Sum of all neighbours
+
+\hypertarget{applicability-domain}{%
+\paragraph{Applicability domain}\label{applicability-domain}}
+
+The applicability domain (AD) of \texttt{lazar} models is determined by
+the structural diversity of the training data. If no similar compounds
+are found in the training data no predictions will be generated.
+Warnings are issued if the similarity threshold had to be lowered from
+0.5 to 0.2 in order to enable predictions. Predictions without warnings
+can be considered as close to the applicability domain and predictions
+with warnings as more distant from the applicability domain.
+Quantitative applicability domain information can be obtained from the
+similarities of individual neighbours.
+
+\hypertarget{availability}{%
+\paragraph{Availability}\label{availability}}
+
+\begin{itemize}
+\item
+ \texttt{lazar} experiments for this manuscript:
+ \url{https://git.in-silico.ch/pyrrolizidine} (source code, GPL3)
+\item
+ \texttt{lazar} framework: \url{https://git.in-silico.ch/lazar} (source
+ code, GPL3)
+\item
+ \texttt{lazar} GUI: \url{https://git.in-silico.ch/lazar-gui} (source
+ code, GPL3)
+\item
+ Public web interface: \url{https://lazar.in-silico.ch}
+\end{itemize}
+
+\hypertarget{random-forest-support-vector-machines-and-deep-learning-in-r-project}{%
+\subsubsection{Random Forest, Support Vector Machines, and Deep Learning
+in
+R-project}\label{random-forest-support-vector-machines-and-deep-learning-in-r-project}}
+
+In comparison to \texttt{lazar}, three other models (Random Forest (RF),
+Support Vector Machines (SVM), and Deep Learning (DL)) were evaluated.
+
+For the generation of these models, molecular 1D and 2D descriptors of
+the training dataset were calculated using PaDEL-Descriptors
+(\url{http://www.yapcwsoft.com} version 2.21, Yap (2011)).
+
+As the training dataset contained over 8280 instances, it was decided to
+delete instances with missing values during data pre-processing.
+Furthermore, substances with equivocal outcome were removed. The final
+training dataset contained 8080 instances with known mutagenic
+potential. The RF, SVM, and DL models were generated using the R
+software (R-project for Statistical Computing,
+\url{https://www.r-project.org/}\emph{;} version 3.3.1), specific R
+packages used are identified for each step in the description below.
+During feature selection, descriptor with near zero variance were
+removed using `\emph{NearZeroVar}'-function (package `caret'). If the
+percentage of the most common value was more than 90\% or when the
+frequency ratio of the most common value to the second most common value
+was greater than 95:5 (e.g.~95 instances of the most common value and
+only 5 or less instances of the second most common value), a descriptor
+was classified as having a near zero variance. After that, highly
+correlated descriptors were removed using the
+`\emph{findCorrelation}'-function (package `caret') with a cut-off of
+0.9. This resulted in a training dataset with 516 descriptors. These
+descriptors were scaled to be in the range between 0 and 1 using the
+`\emph{preProcess}'-function (package `caret'). The scaling routine was
+saved in order to apply the same scaling on the testing dataset. As
+these three steps did not consider the outcome, it was decided that they
+do not need to be included in the cross-validation of the model. To
+further reduce the number of features, a LASSO (\emph{least absolute
+shrinkage and selection operator}) regression was performed using the
+`\emph{glmnet}'-function (package `\emph{glmnet}'). The reduced dataset
+was used for the generation of the pre-trained models.
+
+For the RF model, the `\emph{randomForest}'-function (package
+`\emph{randomForest}') was used. A forest with 1000 trees with maximal
+terminal nodes of 200 was grown for the prediction.
+
+The `\emph{svm}'-function (package `e1071') with a \emph{radial basis
+function kernel} was used for the SVM model.
+
+The DL model was generated using the `\emph{h2o.deeplearning}'-function
+(package `\emph{h2o}'). The DL contained four hidden layer with 70, 50,
+50, and 10 neurons, respectively. Other hyperparameter were set as
+follows: l1=1.0E-7, l2=1.0E-11, epsilon = 1.0E-10, rho = 0.8, and
+quantile\_alpha = 0.5. For all other hyperparameter, the default values
+were used. Weights and biases were in a first step determined with an
+unsupervised DL model. These values were then used for the actual,
+supervised DL model.
+
+To validate these models, an internal cross-validation approach was
+chosen. The training dataset was randomly split in training data, which
+contained 95\% of the data, and validation data, which contain 5\% of
+the data. A feature selection with LASSO on the training data was
+performed, reducing the number of descriptors to approximately 100. This
+step was repeated five times. Based on each of the five different
+training data, the predictive models were trained and the performance
+tested with the validation data. This step was repeated 10 times.
+Furthermore, a y-randomisation using the RF model was performed. During
+y-randomisation, the outcome (y-variable) is randomly permuted. The
+theory is that after randomisation of the outcome, the model should not
+be able to correlate the outcome to the properties (descriptor values)
+of the substances. The performance of the model should therefore
+indicate a by change prediction with an accuracy of about 50\%. If this
+is true, it can be concluded that correlation between actual outcome and
+properties of the substances is real and not by chance (Rücker, Rücker,
+and Meringer (2007)).
+
+\includegraphics[width=6.26875in,height=5.48611in]{media/image1.png}
+
+Figure 1: Flowchart of the generation and validation of the models
+generated in R-project
+
+\hypertarget{applicability-domain-1}{%
+\paragraph{Applicability domain}\label{applicability-domain-1}}
+
+The AD of the training dataset and the PA dataset was evaluated using
+the Jaccard distance. A Jaccard distance of `0' indicates that the
+substances are similar, whereas a value of `1' shows that the substances
+are different. The Jaccard distance was below 0.2 for all PAs relative
+to the training dataset. Therefore, PA dataset is within the AD of the
+training dataset and the models can be used to predict the genotoxic
+potential of the PA dataset.
+
+\hypertarget{y-randomisation}{%
+\paragraph{y-randomisation}\label{y-randomisation}}
+
+After y-randomisation of the outcome, the accuracy and CCR are around
+50\%, indicating a chance in the distribution of the results. This
+shows, that the outcome is actually related to the predictors and not by
+chance.
+
+\hypertarget{deep-learning-in-tensorflow}{%
+\subsubsection{Deep Learning in
+TensorFlow}\label{deep-learning-in-tensorflow}}
+
+Alternatively, a DL model was established with Python-based TensorFlow
+program (\url{https://www.tensorflow.org/}) using the high-level API
+Keras (\url{https://www.tensorflow.org/guide/keras}) to build the
+models.
+
+Data pre-processing was done by rank transformation using the
+`\emph{QuantileTransformer}' procedure. A sequential model has been
+used. Four layers have been used: input layer, two hidden layers (with
+12, 8 and 8 nodes, respectively) and one output layer. For the output
+layer, a sigmoidal activation function and for all other layers the ReLU
+(`\emph{Rectified Linear Unit}') activation function was used.
+Additionally, a L\textsuperscript{2}-penalty of 0.001 was used for the
+input layer. For training of the model, the ADAM algorithm was used to
+minimise the cross-entropy loss using the default parameters of Keras.
+Training was performed for 100 epochs with a batch size of 64. The model
+was implemented with Python 3.6 and Keras. For training of the model, a
+6-fold cross-validation was used. Accuracy was estimated by ROC-AUC and
+confusion matrix.
+
+\hypertarget{validation}{%
+\subsection{Validation}\label{validation}}
+
+\hypertarget{results}{%
+\section{Results}\label{results}}
+
+\hypertarget{lazar-1}{%
+\subsection{\texorpdfstring{\texttt{lazar}}{lazar}}\label{lazar-1}}
+
+\hypertarget{random-forest}{%
+\subsection{Random Forest}\label{random-forest}}
+
+The validation showed that the RF model has an accuracy of 64\%, a
+sensitivity of 66\% and a specificity of 63\%. The confusion matrix of
+the model, calculated for 8080 instances, is provided in Table 1.
+
+Table 1: Confusion matrix of the RF model
+
+\begin{longtable}[]{@{}lllll@{}}
+\toprule
+& Predicted genotoxicity & & &\tabularnewline
+\midrule
+\endhead
+Measured genotoxicity & & \textbf{\emph{PP}} & \textbf{\emph{PN}} &
+\textbf{\emph{Total}}\tabularnewline
+& \textbf{\emph{TP}} & 2274 & 1163 & 3437\tabularnewline
+& \textbf{\emph{TN}} & 1736 & 2907 & 4643\tabularnewline
+& \textbf{\emph{Total}} & 4010 & 4070 & 8080\tabularnewline
+\bottomrule
+\end{longtable}
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+\hypertarget{support-vector-machines}{%
+\subsection{Support Vector Machines}\label{support-vector-machines}}
+
+The validation showed that the SVM model has an accuracy of 62\%, a
+sensitivity of 65\% and a specificity of 60\%. The confusion matrix of
+SVM model, calculated for 8080 instances, is provided in Table 2.
+
+Table 2: Confusion matrix of the SVM model
+
+\begin{longtable}[]{@{}lllll@{}}
+\toprule
+& Predicted genotoxicity & & &\tabularnewline
+\midrule
+\endhead
+Measured genotoxicity & & \textbf{\emph{PP}} & \textbf{\emph{PN}} &
+\textbf{\emph{Total}}\tabularnewline
+& \textbf{\emph{TP}} & 2057 & 1107 & 3164\tabularnewline
+& \textbf{\emph{TN}} & 1953 & 2963 & 4916\tabularnewline
+& \textbf{\emph{Total}} & 4010 & 4070 & 8080\tabularnewline
+\bottomrule
+\end{longtable}
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+\hypertarget{deep-learning-r-project}{%
+\subsection{Deep Learning (R-project)}\label{deep-learning-r-project}}
+
+The validation showed that the DL model generated in R has an accuracy
+of 59\%, a sensitivity of 89\% and a specificity of 30\%. The confusion
+matrix of the model, normalised to 8080 instances, is provided in Table
+3.
+
+Table 3: Confusion matrix of the DL model (R-project)
+
+\begin{longtable}[]{@{}lllll@{}}
+\toprule
+& Predicted genotoxicity & & &\tabularnewline
+\midrule
+\endhead
+Measured genotoxicity & & \textbf{\emph{PP}} & \textbf{\emph{PN}} &
+\textbf{\emph{Total}}\tabularnewline
+& \textbf{\emph{TP}} & 3575 & 435 & 4010\tabularnewline
+& \textbf{\emph{TN}} & 2853 & 1217 & 4070\tabularnewline
+& \textbf{\emph{Total}} & 6428 & 1652 & 8080\tabularnewline
+\bottomrule
+\end{longtable}
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+\hypertarget{dl-model-tensorflow}{%
+\subsection{DL model (TensorFlow)}\label{dl-model-tensorflow}}
+
+The validation showed that the DL model generated in TensorFlow has an
+accuracy of 68\%, a sensitivity of 70\% and a specificity of 46\%. The
+confusion matrix of the model, normalised to 8080 instances, is provided
+in Table 4.
+
+Table 4: Confusion matrix of the DL model (TensorFlow)
+
+\begin{longtable}[]{@{}lllll@{}}
+\toprule
+& Predicted genotoxicity & & &\tabularnewline
+\midrule
+\endhead
+Measured genotoxicity & & \textbf{\emph{PP}} & \textbf{\emph{PN}} &
+\textbf{\emph{Total}}\tabularnewline
+& \textbf{\emph{TP}} & 2851 & 1227 & 4078\tabularnewline
+& \textbf{\emph{TN}} & 1825 & 2177 & 4002\tabularnewline
+& \textbf{\emph{Total}} & 4676 & 3404 & 8080\tabularnewline
+\bottomrule
+\end{longtable}
+
+PP: Predicted positive; PN: Predicted negative, TP: True positive, TN:
+True negative
+
+The ROC curves from the 6-fold validation are shown in Figure 7.
+
+\includegraphics[width=3.825in,height=2.7327in]{media/image7.png}
+
+Figure 7: Six-fold cross-validation of TensorFlow DL model show an
+average area under the ROC-curve (ROC-AUC; measure of accuracy) of 68\%.
+
+In summary, the validation results of the four methods are presented in
+the following table.
+
+Table 5 Results of the cross-validation of the four models and after
+y-randomisation
+
+\begin{longtable}[]{@{}lllll@{}}
+\toprule
+\begin{minipage}[b]{0.28\columnwidth}\raggedright
+\strut
+\end{minipage} & \begin{minipage}[b]{0.13\columnwidth}\raggedright
+Accuracy\strut
+\end{minipage} & \begin{minipage}[b]{0.09\columnwidth}\raggedright
+CCR\strut
+\end{minipage} & \begin{minipage}[b]{0.16\columnwidth}\raggedright
+Sensitivity\strut
+\end{minipage} & \begin{minipage}[b]{0.16\columnwidth}\raggedright
+Specificity\strut
+\end{minipage}\tabularnewline
+\midrule
+\endhead
+\begin{minipage}[t]{0.28\columnwidth}\raggedright
+RF model\strut
+\end{minipage} & \begin{minipage}[t]{0.13\columnwidth}\raggedright
+64.1\%\strut
+\end{minipage} & \begin{minipage}[t]{0.09\columnwidth}\raggedright
+64.4\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+66.2\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+62.6\%\strut
+\end{minipage}\tabularnewline
+\begin{minipage}[t]{0.28\columnwidth}\raggedright
+SVM model\strut
+\end{minipage} & \begin{minipage}[t]{0.13\columnwidth}\raggedright
+62.1\%\strut
+\end{minipage} & \begin{minipage}[t]{0.09\columnwidth}\raggedright
+62.6\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+65.0\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+60.3\%\strut
+\end{minipage}\tabularnewline
+\begin{minipage}[t]{0.28\columnwidth}\raggedright
+DL model\\
+(R-project)\strut
+\end{minipage} & \begin{minipage}[t]{0.13\columnwidth}\raggedright
+59.3\%\strut
+\end{minipage} & \begin{minipage}[t]{0.09\columnwidth}\raggedright
+59.5\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+89.2\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+29.9\%\strut
+\end{minipage}\tabularnewline
+\begin{minipage}[t]{0.28\columnwidth}\raggedright
+DL model (TensorFlow)\strut
+\end{minipage} & \begin{minipage}[t]{0.13\columnwidth}\raggedright
+68\%\strut
+\end{minipage} & \begin{minipage}[t]{0.09\columnwidth}\raggedright
+62.2\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+69.9\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+45.6\%\strut
+\end{minipage}\tabularnewline
+\begin{minipage}[t]{0.28\columnwidth}\raggedright
+y-randomisation\strut
+\end{minipage} & \begin{minipage}[t]{0.13\columnwidth}\raggedright
+50.5\%\strut
+\end{minipage} & \begin{minipage}[t]{0.09\columnwidth}\raggedright
+50.4\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+50.3\%\strut
+\end{minipage} & \begin{minipage}[t]{0.16\columnwidth}\raggedright
+50.6\%\strut
+\end{minipage}\tabularnewline
+\bottomrule
+\end{longtable}
+
+CCR (correct classification rate)
+
+\hypertarget{discussion}{%
+\section{Discussion}\label{discussion}}
+
+General model performance
+
+Based on the results of the cross-validation for all models,
+\texttt{lazar}, RF, SVM, DL (R-project) and DL (TensorFlow) it can be
+state that the prediction results are not optimal due to different
+reasons. The accuracy as measured during cross-validation of the four
+models (RF, SVM, DL (R-project and TensorFlow)) was partly low with CCR
+values between 59.3 and 68\%, with the R-generated DL model and the
+TensorFlow-generated DL model showing the worst and the best
+performance, respectively. The validation of the R-generated DL model
+revealed a high sensitivity (89.2\%) but an unacceptably low specificity
+of 29.9\% indicating a high number of false positive estimates. The
+TensorFlow-generated DL model, however, showed an acceptable but not
+optimal accuracy of 68\%, a sensitivity of 69.9\% and a specificity of
+45.6\%. The low specificity indicates that both DL models tends to
+predict too many instances as positive (genotoxic), and therefore have a
+high false positive rate. This allows at least with the TensorFlow
+generated DL model to make group statements, but the confidence for
+estimations of single PAs appears to be insufficiently low.
+
+Several factors have likely contributed to the low to moderate
+performance of the used methods as shown during the cross-validation:
+
+\begin{enumerate}
+\def\labelenumi{\arabic{enumi}.}
+\tightlist
+\item
+ The outcome in the training dataset was based on the results of AMES
+ tests for genotoxicity \protect\hyperlink{_ENREF_63}{ICH 2011}(), an
+ \emph{in vitro} test in different strains of the bacteria
+ \emph{Salmonella typhimurium}. In this test, mutagenicity is evaluated
+ with and without prior metabolic activation of the test substance.
+ Metabolic activation could result in the formation of genotoxic
+ metabolites from non-genotoxic parent compounds. However, no
+ distinction was made in the training dataset between substances that
+ needed metabolic activation before being mutagenic and those that were
+ mutagenic without metabolic activation. \texttt{lazar} is able to
+ handle this `inaccuracy' in the training dataset well due to the way
+ the algorithm works: \texttt{lazar} predicts the genotoxic potential
+ based on the neighbours of substances with comparable structural
+ features, considering mutagenic and not mutagenic neighbours. Based on
+ the structural similarity, a probability for mutagenicity and no
+ mutagenicity is calculated independently from each other (meaning that
+ the sum of probabilities does not necessarily adds up to 100\%). The
+ class with the higher outcome is then the overall outcome for the
+ substance.
+\end{enumerate}
+
+\begin{quote}
+In contrast, the other models need to be trained first to recognise the
+structural features that are responsible for genotoxicity. Therefore,
+the mixture of substances being mutagenic with and without metabolic
+activation in the training dataset may have adversely affected the
+ability to separate the dataset in two distinct classes and thus
+explains the relatively low performance of these models.
+\end{quote}
+
+\begin{enumerate}
+\def\labelenumi{\arabic{enumi}.}
+\setcounter{enumi}{1}
+\tightlist
+\item
+ Machine learning algorithms try to find an optimized solution in a
+ high-dimensional (one dimension per each predictor) space. Sometimes
+ these methods do not find the global optimum of estimates but only
+ local (not optimal) solutions. Strategies to find the global solutions
+ are systematic variation (grid search) of the hyperparameters of the
+ methods, which may be very time consuming in particular in large
+ datasets.
+\end{enumerate}
+
+\hypertarget{conclusions}{%
+\section{Conclusions}\label{conclusions}}
+
+In this study, an attempt was made to predict the genotoxic potential of
+PAs using five different machine learning techniques (\texttt{lazar},
+RF, SVM, DL (R-project and TensorFlow). The results of all models fitted
+only partly to the findings in literature, with best results obtained
+with the TensorFlow DL model. Therefore, modelling allows statements on
+the relative risks of genotoxicity of the different PA groups.
+Individual predictions for selective PAs appear, however, not reliable
+on the current basis of the used training dataset.
+
+This study emphasises the importance of critical assessment of
+predictions by QSAR models. This includes not only extensive literature
+research to assess the plausibility of the predictions, but also a good
+knowledge of the metabolism of the test substances and understanding for
+possible mechanisms of toxicity.
+
+In further studies, additional machine learning techniques or a modified
+(extended) training dataset should be used for an additional attempt to
+predict the genotoxic potential of PAs.
+
+\hypertarget{references}{%
+\section*{References}\label{references}}
+\addcontentsline{toc}{section}{References}
+
+\hypertarget{refs}{}
+\leavevmode\hypertarget{ref-Bender2004}{}%
+Bender, Andreas, Hamse Y. Mussa, Robert C. Glen, and Stephan Reiling.
+2004. ``Molecular Similarity Searching Using Atom Environments,
+Information-Based Feature Selection, and a Naïve Bayesian Classifier.''
+\emph{Journal of Chemical Information and Computer Sciences} 44 (1):
+170--78. \url{https://doi.org/10.1021/ci034207y}.
+
+\leavevmode\hypertarget{ref-Hansen2009}{}%
+Hansen, Katja, Sebastian Mika, Timon Schroeter, Andreas Sutter, Antonius
+ter Laak, Thomas Steger-Hartmann, Nikolaus Heinrich, and Klaus-Robert
+Müller. 2009. ``Benchmark Data Set for in Silico Prediction of Ames
+Mutagenicity.'' \emph{Journal of Chemical Information and Modeling} 49
+(9): 2077--81. \url{https://doi.org/10.1021/ci900161g}.
+
+\leavevmode\hypertarget{ref-Kazius2005}{}%
+Kazius, J., R. McGuire, and R. Bursi. 2005. ``Derivation and Validation
+of Toxicophores for Mutagenicity Prediction.'' \emph{J Med Chem}, no.
+48: 312--20.
+
+\leavevmode\hypertarget{ref-OBoyle2011a}{}%
+O'Boyle, Noel, Michael Banck, Craig James, Chris Morley, Tim
+Vandermeersch, and Geoffrey Hutchison. 2011. ``Open Babel: An open
+chemical toolbox.'' \emph{J. Cheminf.} 3 (1): 33.
+\url{https://doi.org/doi:10.1186/1758-2946-3-33}.
+
+\leavevmode\hypertarget{ref-Ruxfccker2007}{}%
+Rücker, C, G Rücker, and M. Meringer. 2007. ``Y-Randomization and Its
+Variants in Qspr/Qsar.'' \emph{J. Chem. Inf. Model.}, no. 47: 2345--57.
+
+\leavevmode\hypertarget{ref-Yap2011}{}%
+Yap, CW. 2011. ``PaDEL-Descriptor: An Open Source Software to Calculate
+Molecular Descriptors and Fingerprints.'' \emph{Journal of Computational
+Chemistry}, no. 32: 1466--74.
+
+\end{document}
diff --git a/paper/outfile.odt b/paper/outfile.odt
new file mode 100644
index 0000000..eace967
--- /dev/null
+++ b/paper/outfile.odt
Binary files differ
diff --git a/paper/outfile.pdf b/paper/outfile.pdf
new file mode 100644
index 0000000..71422d6
--- /dev/null
+++ b/paper/outfile.pdf
Binary files differ
diff --git a/paper/pandoc-options.inc.mk b/paper/pandoc-options.inc.mk
new file mode 100644
index 0000000..32ec745
--- /dev/null
+++ b/paper/pandoc-options.inc.mk
@@ -0,0 +1,47 @@
+# Settings for Pandoc
+# ===================
+
+TEMPLATE_FILE_LATEX ?= $(PANDOC_SCHOLAR_PATH)/templates/pandoc-scholar.latex
+TEMPLATE_FILE_HTML ?= $(PANDOC_SCHOLAR_PATH)/templates/pandoc-scholar.html
+TEMPLATE_FILE_JATS ?= $(PANDOC_SCHOLAR_PATH)/templates/pandoc-scholar.jats
+
+TEMPLATE_STYLE_HTML ?= $(PANDOC_SCHOLAR_PATH)/templates/styles/pandoc-scholar.css
+
+## Pandoc options
+PANDOC_READER_OPTIONS ?=
+
+ifndef PANDOC_WRITER_OPTIONS
+PANDOC_WRITER_OPTIONS = --standalone
+PANDOC_WRITER_OPTIONS += --filter=pandoc-citeproc
+ifdef BIBLIOGRAPHY_FILE
+PANDOC_WRITER_OPTIONS += --metadata "bibliography:$(BIBLIOGRAPHY_FILE)"
+PANDOC_WRITER_OPTIONS += --bibliography=$(BIBLIOGRAPHY_FILE)
+endif
+endif
+
+PANDOC_ODT_OPTIONS ?=
+PANDOC_DOCX_OPTIONS ?=
+PANDOC_HTML_OPTIONS ?=
+PANDOC_EPUB_OPTIONS ?=
+ifndef PANDOC_LATEX_OPTIONS
+PANDOC_LATEX_OPTIONS = --pdf-engine=xelatex
+endif
+
+ifdef ODT_REFERENCE_FILE
+PANDOC_ODT_OPTIONS += --reference-doc=$(ODT_REFERENCE_FILE)
+endif
+ifdef DOCX_REFERENCE_FILE
+PANDOC_DOCX_OPTIONS += --reference-doc=$(DOCX_REFERENCE_FILE)
+endif
+ifdef TEMPLATE_FILE_LATEX
+PANDOC_LATEX_OPTIONS += --template=$(TEMPLATE_FILE_LATEX)
+endif
+ifdef TEMPLATE_FILE_HTML
+PANDOC_HTML_OPTIONS += --template=$(TEMPLATE_FILE_HTML)
+endif
+ifdef TEMPLATE_FILE_EPUB
+PANDOC_EPUB_OPTIONS += --template=$(TEMPLATE_FILE_EPUB)
+endif
+ifdef TEMPLATE_FILE_JATS
+PANDOC_JATS_OPTIONS += --template=$(TEMPLATE_FILE_JATS)
+endif
diff --git a/paper/scholar-filters/dkjson.lua b/paper/scholar-filters/dkjson.lua
new file mode 100644
index 0000000..fa50b9f
--- /dev/null
+++ b/paper/scholar-filters/dkjson.lua
@@ -0,0 +1,714 @@
+-- Module options:
+local always_try_using_lpeg = true
+local register_global_module_table = false
+local global_module_name = 'json'
+
+--[==[
+
+David Kolf's JSON module for Lua 5.1/5.2
+
+Version 2.5
+
+
+For the documentation see the corresponding readme.txt or visit
+<http://dkolf.de/src/dkjson-lua.fsl/>.
+
+You can contact the author by sending an e-mail to 'david' at the
+domain 'dkolf.de'.
+
+
+Copyright (C) 2010-2013 David Heiko Kolf
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+--]==]
+
+-- global dependencies:
+local pairs, type, tostring, tonumber, getmetatable, setmetatable, rawset =
+ pairs, type, tostring, tonumber, getmetatable, setmetatable, rawset
+local error, require, pcall, select = error, require, pcall, select
+local floor, huge = math.floor, math.huge
+local strrep, gsub, strsub, strbyte, strchar, strfind, strlen, strformat =
+ string.rep, string.gsub, string.sub, string.byte, string.char,
+ string.find, string.len, string.format
+local strmatch = string.match
+local concat = table.concat
+
+local json = { version = "dkjson 2.5" }
+
+if register_global_module_table then
+ _G[global_module_name] = json
+end
+
+local _ENV = nil -- blocking globals in Lua 5.2
+
+pcall (function()
+ -- Enable access to blocked metatables.
+ -- Don't worry, this module doesn't change anything in them.
+ local debmeta = require "debug".getmetatable
+ if debmeta then getmetatable = debmeta end
+end)
+
+json.null = setmetatable ({}, {
+ __tojson = function () return "null" end
+})
+
+local function isarray (tbl)
+ local max, n, arraylen = 0, 0, 0
+ for k,v in pairs (tbl) do
+ if k == 'n' and type(v) == 'number' then
+ arraylen = v
+ if v > max then
+ max = v
+ end
+ else
+ if type(k) ~= 'number' or k < 1 or floor(k) ~= k then
+ return false
+ end
+ if k > max then
+ max = k
+ end
+ n = n + 1
+ end
+ end
+ if max > 10 and max > arraylen and max > n * 2 then
+ return false -- don't create an array with too many holes
+ end
+ return true, max
+end
+
+local escapecodes = {
+ ["\""] = "\\\"", ["\\"] = "\\\\", ["\b"] = "\\b", ["\f"] = "\\f",
+ ["\n"] = "\\n", ["\r"] = "\\r", ["\t"] = "\\t"
+}
+
+local function escapeutf8 (uchar)
+ local value = escapecodes[uchar]
+ if value then
+ return value
+ end
+ local a, b, c, d = strbyte (uchar, 1, 4)
+ a, b, c, d = a or 0, b or 0, c or 0, d or 0
+ if a <= 0x7f then
+ value = a
+ elseif 0xc0 <= a and a <= 0xdf and b >= 0x80 then
+ value = (a - 0xc0) * 0x40 + b - 0x80
+ elseif 0xe0 <= a and a <= 0xef and b >= 0x80 and c >= 0x80 then
+ value = ((a - 0xe0) * 0x40 + b - 0x80) * 0x40 + c - 0x80
+ elseif 0xf0 <= a and a <= 0xf7 and b >= 0x80 and c >= 0x80 and d >= 0x80 then
+ value = (((a - 0xf0) * 0x40 + b - 0x80) * 0x40 + c - 0x80) * 0x40 + d - 0x80
+ else
+ return ""
+ end
+ if value <= 0xffff then
+ return strformat ("\\u%.4x", value)
+ elseif value <= 0x10ffff then
+ -- encode as UTF-16 surrogate pair
+ value = value - 0x10000
+ local highsur, lowsur = 0xD800 + floor (value/0x400), 0xDC00 + (value % 0x400)
+ return strformat ("\\u%.4x\\u%.4x", highsur, lowsur)
+ else
+ return ""
+ end
+end
+
+local function fsub (str, pattern, repl)
+ -- gsub always builds a new string in a buffer, even when no match
+ -- exists. First using find should be more efficient when most strings
+ -- don't contain the pattern.
+ if strfind (str, pattern) then
+ return gsub (str, pattern, repl)
+ else
+ return str
+ end
+end
+
+local function quotestring (value)
+ -- based on the regexp "escapable" in https://github.com/douglascrockford/JSON-js
+ value = fsub (value, "[%z\1-\31\"\\\127]", escapeutf8)
+ if strfind (value, "[\194\216\220\225\226\239]") then
+ value = fsub (value, "\194[\128-\159\173]", escapeutf8)
+ value = fsub (value, "\216[\128-\132]", escapeutf8)
+ value = fsub (value, "\220\143", escapeutf8)
+ value = fsub (value, "\225\158[\180\181]", escapeutf8)
+ value = fsub (value, "\226\128[\140-\143\168-\175]", escapeutf8)
+ value = fsub (value, "\226\129[\160-\175]", escapeutf8)
+ value = fsub (value, "\239\187\191", escapeutf8)
+ value = fsub (value, "\239\191[\176-\191]", escapeutf8)
+ end
+ return "\"" .. value .. "\""
+end
+json.quotestring = quotestring
+
+local function replace(str, o, n)
+ local i, j = strfind (str, o, 1, true)
+ if i then
+ return strsub(str, 1, i-1) .. n .. strsub(str, j+1, -1)
+ else
+ return str
+ end
+end
+
+-- locale independent num2str and str2num functions
+local decpoint, numfilter
+
+local function updatedecpoint ()
+ decpoint = strmatch(tostring(0.5), "([^05+])")
+ -- build a filter that can be used to remove group separators
+ numfilter = "[^0-9%-%+eE" .. gsub(decpoint, "[%^%$%(%)%%%.%[%]%*%+%-%?]", "%%%0") .. "]+"
+end
+
+updatedecpoint()
+
+local function num2str (num)
+ return replace(fsub(tostring(num), numfilter, ""), decpoint, ".")
+end
+
+local function str2num (str)
+ local num = tonumber(replace(str, ".", decpoint))
+ if not num then
+ updatedecpoint()
+ num = tonumber(replace(str, ".", decpoint))
+ end
+ return num
+end
+
+local function addnewline2 (level, buffer, buflen)
+ buffer[buflen+1] = "\n"
+ buffer[buflen+2] = strrep (" ", level)
+ buflen = buflen + 2
+ return buflen
+end
+
+function json.addnewline (state)
+ if state.indent then
+ state.bufferlen = addnewline2 (state.level or 0,
+ state.buffer, state.bufferlen or #(state.buffer))
+ end
+end
+
+local encode2 -- forward declaration
+
+local function addpair (key, value, prev, indent, level, buffer, buflen, tables, globalorder, state)
+ local kt = type (key)
+ if kt ~= 'string' and kt ~= 'number' then
+ return nil, "type '" .. kt .. "' is not supported as a key by JSON."
+ end
+ if prev then
+ buflen = buflen + 1
+ buffer[buflen] = ","
+ end
+ if indent then
+ buflen = addnewline2 (level, buffer, buflen)
+ end
+ buffer[buflen+1] = quotestring (key)
+ buffer[buflen+2] = ":"
+ return encode2 (value, indent, level, buffer, buflen + 2, tables, globalorder, state)
+end
+
+local function appendcustom(res, buffer, state)
+ local buflen = state.bufferlen
+ if type (res) == 'string' then
+ buflen = buflen + 1
+ buffer[buflen] = res
+ end
+ return buflen
+end
+
+local function exception(reason, value, state, buffer, buflen, defaultmessage)
+ defaultmessage = defaultmessage or reason
+ local handler = state.exception
+ if not handler then
+ return nil, defaultmessage
+ else
+ state.bufferlen = buflen
+ local ret, msg = handler (reason, value, state, defaultmessage)
+ if not ret then return nil, msg or defaultmessage end
+ return appendcustom(ret, buffer, state)
+ end
+end
+
+function json.encodeexception(reason, value, state, defaultmessage)
+ return quotestring("<" .. defaultmessage .. ">")
+end
+
+encode2 = function (value, indent, level, buffer, buflen, tables, globalorder, state)
+ local valtype = type (value)
+ local valmeta = getmetatable (value)
+ valmeta = type (valmeta) == 'table' and valmeta -- only tables
+ local valtojson = valmeta and valmeta.__tojson
+ if valtojson then
+ if tables[value] then
+ return exception('reference cycle', value, state, buffer, buflen)
+ end
+ tables[value] = true
+ state.bufferlen = buflen
+ local ret, msg = valtojson (value, state)
+ if not ret then return exception('custom encoder failed', value, state, buffer, buflen, msg) end
+ tables[value] = nil
+ buflen = appendcustom(ret, buffer, state)
+ elseif value == nil then
+ buflen = buflen + 1
+ buffer[buflen] = "null"
+ elseif valtype == 'number' then
+ local s
+ if value ~= value or value >= huge or -value >= huge then
+ -- This is the behaviour of the original JSON implementation.
+ s = "null"
+ else
+ s = num2str (value)
+ end
+ buflen = buflen + 1
+ buffer[buflen] = s
+ elseif valtype == 'boolean' then
+ buflen = buflen + 1
+ buffer[buflen] = value and "true" or "false"
+ elseif valtype == 'string' then
+ buflen = buflen + 1
+ buffer[buflen] = quotestring (value)
+ elseif valtype == 'table' then
+ if tables[value] then
+ return exception('reference cycle', value, state, buffer, buflen)
+ end
+ tables[value] = true
+ level = level + 1
+ local isa, n = isarray (value)
+ if n == 0 and valmeta and valmeta.__jsontype == 'object' then
+ isa = false
+ end
+ local msg
+ if isa then -- JSON array
+ buflen = buflen + 1
+ buffer[buflen] = "["
+ for i = 1, n do
+ buflen, msg = encode2 (value[i], indent, level, buffer, buflen, tables, globalorder, state)
+ if not buflen then return nil, msg end
+ if i < n then
+ buflen = buflen + 1
+ buffer[buflen] = ","
+ end
+ end
+ buflen = buflen + 1
+ buffer[buflen] = "]"
+ else -- JSON object
+ local prev = false
+ buflen = buflen + 1
+ buffer[buflen] = "{"
+ local order = valmeta and valmeta.__jsonorder or globalorder
+ if order then
+ local used = {}
+ n = #order
+ for i = 1, n do
+ local k = order[i]
+ local v = value[k]
+ if v then
+ used[k] = true
+ buflen, msg = addpair (k, v, prev, indent, level, buffer, buflen, tables, globalorder, state)
+ prev = true -- add a seperator before the next element
+ end
+ end
+ for k,v in pairs (value) do
+ if not used[k] then
+ buflen, msg = addpair (k, v, prev, indent, level, buffer, buflen, tables, globalorder, state)
+ if not buflen then return nil, msg end
+ prev = true -- add a seperator before the next element
+ end
+ end
+ else -- unordered
+ for k,v in pairs (value) do
+ buflen, msg = addpair (k, v, prev, indent, level, buffer, buflen, tables, globalorder, state)
+ if not buflen then return nil, msg end
+ prev = true -- add a seperator before the next element
+ end
+ end
+ if indent then
+ buflen = addnewline2 (level - 1, buffer, buflen)
+ end
+ buflen = buflen + 1
+ buffer[buflen] = "}"
+ end
+ tables[value] = nil
+ else
+ return exception ('unsupported type', value, state, buffer, buflen,
+ "type '" .. valtype .. "' is not supported by JSON.")
+ end
+ return buflen
+end
+
+function json.encode (value, state)
+ state = state or {}
+ local oldbuffer = state.buffer
+ local buffer = oldbuffer or {}
+ state.buffer = buffer
+ updatedecpoint()
+ local ret, msg = encode2 (value, state.indent, state.level or 0,
+ buffer, state.bufferlen or 0, state.tables or {}, state.keyorder, state)
+ if not ret then
+ error (msg, 2)
+ elseif oldbuffer == buffer then
+ state.bufferlen = ret
+ return true
+ else
+ state.bufferlen = nil
+ state.buffer = nil
+ return concat (buffer)
+ end
+end
+
+local function loc (str, where)
+ local line, pos, linepos = 1, 1, 0
+ while true do
+ pos = strfind (str, "\n", pos, true)
+ if pos and pos < where then
+ line = line + 1
+ linepos = pos
+ pos = pos + 1
+ else
+ break
+ end
+ end
+ return "line " .. line .. ", column " .. (where - linepos)
+end
+
+local function unterminated (str, what, where)
+ return nil, strlen (str) + 1, "unterminated " .. what .. " at " .. loc (str, where)
+end
+
+local function scanwhite (str, pos)
+ while true do
+ pos = strfind (str, "%S", pos)
+ if not pos then return nil end
+ local sub2 = strsub (str, pos, pos + 1)
+ if sub2 == "\239\187" and strsub (str, pos + 2, pos + 2) == "\191" then
+ -- UTF-8 Byte Order Mark
+ pos = pos + 3
+ elseif sub2 == "//" then
+ pos = strfind (str, "[\n\r]", pos + 2)
+ if not pos then return nil end
+ elseif sub2 == "/*" then
+ pos = strfind (str, "*/", pos + 2)
+ if not pos then return nil end
+ pos = pos + 2
+ else
+ return pos
+ end
+ end
+end
+
+local escapechars = {
+ ["\""] = "\"", ["\\"] = "\\", ["/"] = "/", ["b"] = "\b", ["f"] = "\f",
+ ["n"] = "\n", ["r"] = "\r", ["t"] = "\t"
+}
+
+local function unichar (value)
+ if value < 0 then
+ return nil
+ elseif value <= 0x007f then
+ return strchar (value)
+ elseif value <= 0x07ff then
+ return strchar (0xc0 + floor(value/0x40),
+ 0x80 + (floor(value) % 0x40))
+ elseif value <= 0xffff then
+ return strchar (0xe0 + floor(value/0x1000),
+ 0x80 + (floor(value/0x40) % 0x40),
+ 0x80 + (floor(value) % 0x40))
+ elseif value <= 0x10ffff then
+ return strchar (0xf0 + floor(value/0x40000),
+ 0x80 + (floor(value/0x1000) % 0x40),
+ 0x80 + (floor(value/0x40) % 0x40),
+ 0x80 + (floor(value) % 0x40))
+ else
+ return nil
+ end
+end
+
+local function scanstring (str, pos)
+ local lastpos = pos + 1
+ local buffer, n = {}, 0
+ while true do
+ local nextpos = strfind (str, "[\"\\]", lastpos)
+ if not nextpos then
+ return unterminated (str, "string", pos)
+ end
+ if nextpos > lastpos then
+ n = n + 1
+ buffer[n] = strsub (str, lastpos, nextpos - 1)
+ end
+ if strsub (str, nextpos, nextpos) == "\"" then
+ lastpos = nextpos + 1
+ break
+ else
+ local escchar = strsub (str, nextpos + 1, nextpos + 1)
+ local value
+ if escchar == "u" then
+ value = tonumber (strsub (str, nextpos + 2, nextpos + 5), 16)
+ if value then
+ local value2
+ if 0xD800 <= value and value <= 0xDBff then
+ -- we have the high surrogate of UTF-16. Check if there is a
+ -- low surrogate escaped nearby to combine them.
+ if strsub (str, nextpos + 6, nextpos + 7) == "\\u" then
+ value2 = tonumber (strsub (str, nextpos + 8, nextpos + 11), 16)
+ if value2 and 0xDC00 <= value2 and value2 <= 0xDFFF then
+ value = (value - 0xD800) * 0x400 + (value2 - 0xDC00) + 0x10000
+ else
+ value2 = nil -- in case it was out of range for a low surrogate
+ end
+ end
+ end
+ value = value and unichar (value)
+ if value then
+ if value2 then
+ lastpos = nextpos + 12
+ else
+ lastpos = nextpos + 6
+ end
+ end
+ end
+ end
+ if not value then
+ value = escapechars[escchar] or escchar
+ lastpos = nextpos + 2
+ end
+ n = n + 1
+ buffer[n] = value
+ end
+ end
+ if n == 1 then
+ return buffer[1], lastpos
+ elseif n > 1 then
+ return concat (buffer), lastpos
+ else
+ return "", lastpos
+ end
+end
+
+local scanvalue -- forward declaration
+
+local function scantable (what, closechar, str, startpos, nullval, objectmeta, arraymeta)
+ local len = strlen (str)
+ local tbl, n = {}, 0
+ local pos = startpos + 1
+ if what == 'object' then
+ setmetatable (tbl, objectmeta)
+ else
+ setmetatable (tbl, arraymeta)
+ end
+ while true do
+ pos = scanwhite (str, pos)
+ if not pos then return unterminated (str, what, startpos) end
+ local char = strsub (str, pos, pos)
+ if char == closechar then
+ return tbl, pos + 1
+ end
+ local val1, err
+ val1, pos, err = scanvalue (str, pos, nullval, objectmeta, arraymeta)
+ if err then return nil, pos, err end
+ pos = scanwhite (str, pos)
+ if not pos then return unterminated (str, what, startpos) end
+ char = strsub (str, pos, pos)
+ if char == ":" then
+ if val1 == nil then
+ return nil, pos, "cannot use nil as table index (at " .. loc (str, pos) .. ")"
+ end
+ pos = scanwhite (str, pos + 1)
+ if not pos then return unterminated (str, what, startpos) end
+ local val2
+ val2, pos, err = scanvalue (str, pos, nullval, objectmeta, arraymeta)
+ if err then return nil, pos, err end
+ tbl[val1] = val2
+ pos = scanwhite (str, pos)
+ if not pos then return unterminated (str, what, startpos) end
+ char = strsub (str, pos, pos)
+ else
+ n = n + 1
+ tbl[n] = val1
+ end
+ if char == "," then
+ pos = pos + 1
+ end
+ end
+end
+
+scanvalue = function (str, pos, nullval, objectmeta, arraymeta)
+ pos = pos or 1
+ pos = scanwhite (str, pos)
+ if not pos then
+ return nil, strlen (str) + 1, "no valid JSON value (reached the end)"
+ end
+ local char = strsub (str, pos, pos)
+ if char == "{" then
+ return scantable ('object', "}", str, pos, nullval, objectmeta, arraymeta)
+ elseif char == "[" then
+ return scantable ('array', "]", str, pos, nullval, objectmeta, arraymeta)
+ elseif char == "\"" then
+ return scanstring (str, pos)
+ else
+ local pstart, pend = strfind (str, "^%-?[%d%.]+[eE]?[%+%-]?%d*", pos)
+ if pstart then
+ local number = str2num (strsub (str, pstart, pend))
+ if number then
+ return number, pend + 1
+ end
+ end
+ pstart, pend = strfind (str, "^%a%w*", pos)
+ if pstart then
+ local name = strsub (str, pstart, pend)
+ if name == "true" then
+ return true, pend + 1
+ elseif name == "false" then
+ return false, pend + 1
+ elseif name == "null" then
+ return nullval, pend + 1
+ end
+ end
+ return nil, pos, "no valid JSON value at " .. loc (str, pos)
+ end
+end
+
+local function optionalmetatables(...)
+ if select("#", ...) > 0 then
+ return ...
+ else
+ return {__jsontype = 'object'}, {__jsontype = 'array'}
+ end
+end
+
+function json.decode (str, pos, nullval, ...)
+ local objectmeta, arraymeta = optionalmetatables(...)
+ return scanvalue (str, pos, nullval, objectmeta, arraymeta)
+end
+
+function json.use_lpeg ()
+ local g = require ("lpeg")
+
+ if g.version() == "0.11" then
+ error "due to a bug in LPeg 0.11, it cannot be used for JSON matching"
+ end
+
+ local pegmatch = g.match
+ local P, S, R = g.P, g.S, g.R
+
+ local function ErrorCall (str, pos, msg, state)
+ if not state.msg then
+ state.msg = msg .. " at " .. loc (str, pos)
+ state.pos = pos
+ end
+ return false
+ end
+
+ local function Err (msg)
+ return g.Cmt (g.Cc (msg) * g.Carg (2), ErrorCall)
+ end
+
+ local SingleLineComment = P"//" * (1 - S"\n\r")^0
+ local MultiLineComment = P"/*" * (1 - P"*/")^0 * P"*/"
+ local Space = (S" \n\r\t" + P"\239\187\191" + SingleLineComment + MultiLineComment)^0
+
+ local PlainChar = 1 - S"\"\\\n\r"
+ local EscapeSequence = (P"\\" * g.C (S"\"\\/bfnrt" + Err "unsupported escape sequence")) / escapechars
+ local HexDigit = R("09", "af", "AF")
+ local function UTF16Surrogate (match, pos, high, low)
+ high, low = tonumber (high, 16), tonumber (low, 16)
+ if 0xD800 <= high and high <= 0xDBff and 0xDC00 <= low and low <= 0xDFFF then
+ return true, unichar ((high - 0xD800) * 0x400 + (low - 0xDC00) + 0x10000)
+ else
+ return false
+ end
+ end
+ local function UTF16BMP (hex)
+ return unichar (tonumber (hex, 16))
+ end
+ local U16Sequence = (P"\\u" * g.C (HexDigit * HexDigit * HexDigit * HexDigit))
+ local UnicodeEscape = g.Cmt (U16Sequence * U16Sequence, UTF16Surrogate) + U16Sequence/UTF16BMP
+ local Char = UnicodeEscape + EscapeSequence + PlainChar
+ local String = P"\"" * g.Cs (Char ^ 0) * (P"\"" + Err "unterminated string")
+ local Integer = P"-"^(-1) * (P"0" + (R"19" * R"09"^0))
+ local Fractal = P"." * R"09"^0
+ local Exponent = (S"eE") * (S"+-")^(-1) * R"09"^1
+ local Number = (Integer * Fractal^(-1) * Exponent^(-1))/str2num
+ local Constant = P"true" * g.Cc (true) + P"false" * g.Cc (false) + P"null" * g.Carg (1)
+ local SimpleValue = Number + String + Constant
+ local ArrayContent, ObjectContent
+
+ -- The functions parsearray and parseobject parse only a single value/pair
+ -- at a time and store them directly to avoid hitting the LPeg limits.
+ local function parsearray (str, pos, nullval, state)
+ local obj, cont
+ local npos
+ local t, nt = {}, 0
+ repeat
+ obj, cont, npos = pegmatch (ArrayContent, str, pos, nullval, state)
+ if not npos then break end
+ pos = npos
+ nt = nt + 1
+ t[nt] = obj
+ until cont == 'last'
+ return pos, setmetatable (t, state.arraymeta)
+ end
+
+ local function parseobject (str, pos, nullval, state)
+ local obj, key, cont
+ local npos
+ local t = {}
+ repeat
+ key, obj, cont, npos = pegmatch (ObjectContent, str, pos, nullval, state)
+ if not npos then break end
+ pos = npos
+ t[key] = obj
+ until cont == 'last'
+ return pos, setmetatable (t, state.objectmeta)
+ end
+
+ local Array = P"[" * g.Cmt (g.Carg(1) * g.Carg(2), parsearray) * Space * (P"]" + Err "']' expected")
+ local Object = P"{" * g.Cmt (g.Carg(1) * g.Carg(2), parseobject) * Space * (P"}" + Err "'}' expected")
+ local Value = Space * (Array + Object + SimpleValue)
+ local ExpectedValue = Value + Space * Err "value expected"
+ ArrayContent = Value * Space * (P"," * g.Cc'cont' + g.Cc'last') * g.Cp()
+ local Pair = g.Cg (Space * String * Space * (P":" + Err "colon expected") * ExpectedValue)
+ ObjectContent = Pair * Space * (P"," * g.Cc'cont' + g.Cc'last') * g.Cp()
+ local DecodeValue = ExpectedValue * g.Cp ()
+
+ function json.decode (str, pos, nullval, ...)
+ local state = {}
+ state.objectmeta, state.arraymeta = optionalmetatables(...)
+ local obj, retpos = pegmatch (DecodeValue, str, pos, nullval, state)
+ if state.msg then
+ return nil, state.pos, state.msg
+ else
+ return obj, retpos
+ end
+ end
+
+ -- use this function only once:
+ json.use_lpeg = function () return json end
+
+ json.using_lpeg = true
+
+ return json -- so you can get the module using json = require "dkjson".use_lpeg()
+end
+
+if always_try_using_lpeg then
+ pcall (json.use_lpeg)
+end
+
+return json
+
diff --git a/paper/scholar-filters/json-ld.lua b/paper/scholar-filters/json-ld.lua
new file mode 100644
index 0000000..b9cd101
--- /dev/null
+++ b/paper/scholar-filters/json-ld.lua
@@ -0,0 +1,233 @@
+-- json-ld.lua: add a JSON-LD metadata field describing the document.
+--
+-- Copyright (c) 2017-2018 Albert Krewinkel
+--
+-- This program is free software; you can redistribute it and/or modify it
+-- under the terms of the GNU public license version 2 or later.
+-- See the LICENSE file for details.
+local SCRIPT_DIR = PANDOC_SCRIPT_FILE:gsub('/[^/]*$', '')
+
+package.path = SCRIPT_DIR .. '/?.lua;' .. package.path
+
+local json = require "dkjson"
+local List = require 'pandoc.List'
+
+local function stringify(x)
+ if x == nil then
+ return nil
+ elseif type(x) == 'string' then
+ return x
+ end
+ return pandoc.utils.stringify(x)
+end
+
+local function Organizations(orgs)
+ local orgs_json = {}
+ for i, org in ipairs(orgs) do
+ orgs_json[i] = {
+ ["@type"] = "Organization",
+ ["name"] = org.name and stringify(org.name),
+ ['url'] = org.url and stringify(org.url),
+ }
+ end
+ return orgs_json
+end
+
+local function Authors(authors)
+ local authors_json = pandoc.MetaList{}
+ for i, author in ipairs(authors) do
+ authors_json[i] = {
+ ['@type'] = "Person",
+ ['@id'] = authors[i].orcid and
+ ("https://orcid.org/" .. stringify(authors[i].orcid)),
+ ["name"] = author.name and stringify(author.name),
+ ["affiliation"] = author.institute and Organizations(author.institute),
+ ['email'] = author.email and stringify(author.email),
+ ['url'] = author.url and stringify(author.url),
+ }
+ end
+ return authors_json
+end
+
+local function Cito (bibjson, cites_by_cito_property)
+ function find_citation(id)
+ -- sloooow
+ for i = 1, #bibjson do
+ if bibjson[i].id == id then
+ return bibjson[i]
+ end
+ end
+ end
+
+ local result = {}
+ local bibentry, citation_ld
+ for citation_type, typed_citation_ids in pairs(cites_by_cito_property) do
+ for i = 1, #typed_citation_ids do
+ bibentry = find_citation(typed_citation_ids[i])
+ if bibentry and bibentry.DOI then
+ citation_ld = {
+ ["@id"] = "http://dx.doi.org/" .. bibentry.DOI
+ }
+ cito_type_str = "cito:" .. citation_type
+ if not result[cito_type_str] then
+ result[cito_type_str] = {}
+ end
+ table.insert(result[cito_type_str], citation_ld)
+ end
+ end
+ end
+ return result
+end
+
+local function Citations (bibjson, citation_ids)
+ function find_citation(id)
+ -- sloooow
+ for i = 1, #bibjson do
+ if bibjson[i].id == id then
+ return bibjson[i]
+ end
+ end
+ end
+
+ function CitationSchema(record)
+ local type
+ if record.type == "report" then
+ type = "Report"
+ elseif record.type == "article-journal" then
+ type = "ScholarlyArticle"
+ else
+ type = "Article"
+ end
+
+ local authors = {}
+ if record.author then
+ for i = 1, #record.author do
+ local name = {
+ record.author[i].family,
+ record.author[i].given
+ }
+ authors[i] = {
+ name = table.concat(name, ", ")
+ }
+ end
+ end
+
+ return {
+ ["@context"] = {
+ ["@vocab"] = "http://schema.org/",
+ ["title"] = "headline",
+ ["page"] = "pagination",
+ ["date"] = "datePublished",
+ ["publisher"] = "publisher",
+ ["author"] = "author",
+ },
+ ["@type"] = type,
+ ["@id"] = record.DOI and ("http://dx.doi.org/" .. record.DOI),
+ ["title"] = record.title,
+ ["author"] = Authors(authors),
+ ["date"] = record.issued and
+ record.issued["date-parts"] and
+ table.concat(record.issued["date-parts"][1], "-"),
+ ["publisher"] = record.publisher and
+ { ["@type"] = "Organization", ["name"] = record.publisher },
+ ["page"] = record.page,
+ }
+ end
+
+ local res = {}
+ for cit_id, _ in pairs(citation_ids) do
+ local citation_record = find_citation(cit_id)
+ if citation_record then
+ res[#res + 1] = CitationSchema(citation_record)
+ end
+ end
+ return res
+end
+
+function json_ld (meta)
+ local default_image = "https://upload.wikimedia.org/wikipedia/commons/f/fa/Globe.svg"
+ local accessible_for_free
+ if meta.accessible_for_free ~= nil then
+ accessible_for_free = meta.accessible_for_free
+ else
+ accessible_for_free = true
+ end
+ local context = {
+ ["@vocab"] = "http://schema.org/",
+ ["cito"] = "http://purl.org/spar/cito/",
+ ["author"] = "author",
+ ["name"] = "name",
+ ["title"] = "headline",
+ ["subtitle"] = "alternativeTitle",
+ ["publisher"] = "publisher",
+ ["date"] = "datePublished",
+ ["isFree"] = accessible_for_free and "isAccessibleForFree" or nil,
+ ["image"] = "image",
+ ["citation"] = "citation",
+ }
+
+ local citation_ids = {}
+ for _, ids in pairs(meta.cito_cites) do
+ for _, id in ipairs(ids) do citation_ids[id] = true end
+ end
+ local result = {
+ ["@context"] = context,
+ ["@type"] = "ScholarlyArticle",
+ ["author"] = Authors(meta.author),
+ ["name"] = stringify(meta.title),
+ ["title"] = stringify(meta.title),
+ ["subtitle"] = meta.subtitle and stringify(meta.subtitle),
+ ["date"] = meta.date and stringify(meta.date) or os.date("%Y-%m-%d"),
+ -- -- ["image"] = meta.image or default_image,
+ ["isFree"] = accessible_for_free,
+ ["citation"] = Citations(meta.bibliography_records, citation_ids),
+ }
+ for k, v in pairs(Cito(meta.bibliography_records, meta.cito_cites)) do
+ result[k] = v
+ end
+ return result
+end
+
+local function bibliography(bibfilename)
+ if not bibfilename then
+ return {}
+ end
+ local bibfile = io.popen("pandoc-citeproc --bib2json " .. bibfilename, "r")
+ local jsonstr = bibfile:read("*a")
+ bibfile:close()
+ return json.decode(jsonstr)
+end
+
+local function institute_resolver (institutes)
+ return function (inst_idx)
+ return institutes[tonumber(stringify(inst_idx))]
+ end
+end
+
+function Meta (meta)
+ local function clone (obj)
+ local result = {}
+ for k, v in pairs(obj) do result[k] = v end
+ return result
+ end
+ local metadata = clone(meta)
+
+ local resolve_institute = function (idx)
+ return meta.institute[tonumber(idx)]
+ end
+ local tmp_authors = {}
+ for i, author_orig in ipairs(meta.author) do
+ local author = clone(author_orig)
+ if author.institute then
+ author.institute = List.map(author.institute, resolve_institute)
+ end
+ tmp_authors[i] = author
+ end
+ metadata.author = tmp_authors
+
+ metadata.bibliography_records = bibliography(meta.bibliography)
+ local jsonld_object = json_ld(metadata)
+ meta.jsonld = json.encode(jsonld_object)
+
+ return meta
+end
diff --git a/paper/scholar-filters/template-helper.lua b/paper/scholar-filters/template-helper.lua
new file mode 100644
index 0000000..86af339
--- /dev/null
+++ b/paper/scholar-filters/template-helper.lua
@@ -0,0 +1,43 @@
+--[[
+template-helper: generate meta fields to be used in templates.
+
+Copyright © 2017–2018 Albert Krewinkel
+
+Permission to use, copy, modify, and/or distribute this software for any purpose
+with or without fee is hereby granted, provided that the above copyright notice
+and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
+REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
+INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+THIS SOFTWARE.
+]]
+
+local List = require 'pandoc.List'
+
+function Meta (meta)
+ local function resolve_institute (idx)
+ return meta.institute[tonumber(idx)]
+ end
+
+ for i, author in ipairs(meta.author) do
+ local institute_indices = List:new(author.institute)
+ local institutes = institute_indices:map(resolve_institute)
+ author.institute_indices = institute_indices
+ author.institute = institutes
+ meta.has_equal_contributors = meta.has_equal_contributors
+ or author.equal_contributor
+ meta.has_correspondence = meta.has_correspondence
+ or author.correspondence and author.email
+ end
+
+ for i, institute in ipairs(meta.institute) do
+ institute.index = tostring(i)
+ end
+
+ return meta
+end
+
diff --git a/paper/templates/images/arrow-down.png b/paper/templates/images/arrow-down.png
new file mode 100644
index 0000000..5c55c6a
--- /dev/null
+++ b/paper/templates/images/arrow-down.png
Binary files differ
diff --git a/paper/templates/images/octocat-small.png b/paper/templates/images/octocat-small.png
new file mode 100644
index 0000000..57c1e44
--- /dev/null
+++ b/paper/templates/images/octocat-small.png
Binary files differ
diff --git a/paper/templates/images/pdf.png b/paper/templates/images/pdf.png
new file mode 100644
index 0000000..43270eb
--- /dev/null
+++ b/paper/templates/images/pdf.png
Binary files differ
diff --git a/paper/templates/pandoc-scholar.html b/paper/templates/pandoc-scholar.html
new file mode 100644
index 0000000..6b457c7
--- /dev/null
+++ b/paper/templates/pandoc-scholar.html
@@ -0,0 +1,119 @@
+<!doctype html>
+<!--
+Template created by Andrew G. York, based on this theme by Diana Mounter:
+https://github.com/broccolini/dinky, which mentioned that
+attribution is appreciated. Thanks, broccolini! -->
+<html lang="en">
+<head>
+ <base target="_blank"/>
+ <meta charset="utf-8"/>
+ <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
+ <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"/>
+$for(author-meta)$
+ <meta name="author" content="$author-meta$"/>
+$endfor$
+$if(date-meta)$
+ <meta name="dcterms.date" content="$date-meta$"/>
+$endif$
+$if(keywords)$
+ <meta name="keywords" content="$for(keywords)$$keywords$$sep$, $endfor$"/>
+$endif$
+ <title>$if(title-prefix)$$title-prefix$ – $endif$$pagetitle$</title>
+ <style type="text/css">code{white-space: pre;}</style>
+$if(quotes)$
+ <style type="text/css">q { quotes: "“" "”" "‘" "’"; }</style>
+$endif$
+$if(highlighting-css)$
+ <style type="text/css">
+$highlighting-css$
+ </style>
+$endif$
+$for(css)$
+ <link rel="stylesheet" href="$css$">
+$endfor$
+$if(math)$
+$if(mathjax)$
+$-- MathJax is handled specially. We need to add the data-external attribute
+$-- so it doesn't get inlined (and thus broken) by the --self-contained option.
+$-- (2.7.2 is the default MathJax version as of Pandoc 2.2.1.)
+ <script data-external="1" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/MathJax.js?config=TeX-AMS_CHTML-full"></script>
+$else$
+ $math$
+$endif$
+$endif$
+ <!--[if lt IE 9]>
+ <script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
+ <![endif]-->
+$for(header-includes)$
+ $header-includes$
+$endfor$
+</head>
+<body>
+<div class="wrapper">
+$if(project)$
+<header class="page-header">
+ <h1 class="header">$project.title$</h1>
+ <ul>
+$if(project.zip-url)$
+ <li class="download"><a class="buttons" href="$project.zip-url$">Download ZIP</a></li>
+$endif$
+$if(project.github-url)$
+ <li><a class="buttons github" href="$project.github-url$">View On GitHub</a></li>
+$endif$
+$if(project.pdf-url)$
+ <li><a class="buttons pdf" href="$project.pdf-url$">Download PDF</a></li>
+$endif$
+ </ul>
+ <p class="header">This project is maintained by $project.maintainer$</p>
+</header>
+$endif$
+<article typeof="ScholarlyArticle" vocab="http://schema.org/">
+ <!-- <header class="article-header"> -->
+<h1 property="headline">$title$</h1>
+$if(subtitle)$
+<p property="alternativeHeadline" class="subtitle">$subtitle$</p>
+$endif$
+<!-- </header> -->
+<p class="author-list">
+$for(author)$
+ $if(author.last)$and $endif$<span property="author" typeof="Person">
+ $author.name$</span><sup>$if(author.correspondence)$$if(author.email)$<a href="mailto:$author.email$">✉</a> $endif$$endif$$for(author.institute_indices)$$author.institute_indices$$sep$,$endfor$$if(author.equal_contributor)$,$if(equal_contributor_symbol)$$equal_contributor_symbol$$else$*$endif$$endif$</sup>$sep$,
+$endfor$
+</p>
+<div class="author_affiliations">
+$for(institute)$
+ <div class="affiliation"><sup>$institute.index$</sup>$institute.name$$if(institute.address)$, $institute.address$$endif$
+ </div>
+$endfor$
+</div>
+<div class="author-info">
+ $if(has_equal_contributors)$
+ <div class="author-contrib">
+ <sup>$if(equal_contributor_symbol)$$equal_contributor_symbol$$else$*$endif$</sup>These authors contributed equally to this work
+ </div>
+ $endif$
+ $if(has_correspondence)$
+ <div class="author-correspondence">
+ Correspondence: $for(author)$$if(author.correspondence)$$if(author.email)$$author.name$ <a href="mailto:$author.email$">&lt;$author.email$&gt;</a> $endif$$endif$$endfor$
+ </div>
+ $endif$
+</div>
+$if(abstract)$<p class="abstract" property="description">$abstract$</p>$endif$
+$if(doi)$<p><a href="https://doi.org/$doi$">doi: $doi$</a></p>$endif$
+
+$for(include-before)$
+$include-before$
+
+$endfor$
+
+<div property="articleBody" class="article-body">
+$body$
+</div>
+</article>
+<footer>
+ <p><small>Generated using <a href="https://github.com/pandoc-scholar/pandoc-scholar">pandoc scholar</a></small></p>
+</footer>
+</div>
+ <!--[if !IE]><script>fixScale(document);</script><![endif]-->
+</body>
+</html>
diff --git a/paper/templates/pandoc-scholar.latex b/paper/templates/pandoc-scholar.latex
new file mode 100644
index 0000000..11e10b9
--- /dev/null
+++ b/paper/templates/pandoc-scholar.latex
@@ -0,0 +1,309 @@
+\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$}
+$if(beamerarticle)$
+\usepackage{beamerarticle} % needs to be loaded first
+$endif$
+$if(fontfamily)$
+\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$}
+$else$
+\usepackage{lmodern}
+$endif$
+$if(linestretch)$
+\usepackage{setspace}
+\setstretch{$linestretch$}
+$endif$
+\usepackage{amssymb,amsmath}
+\usepackage{ifxetex,ifluatex}
+\usepackage{fixltx2e} % provides \textsubscript
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc}
+ \usepackage[utf8]{inputenc}
+$if(euro)$
+ \usepackage{eurosym}
+$endif$
+\else % if luatex or xelatex
+ \ifxetex
+ \usepackage{mathspec}
+ \else
+ \usepackage{fontspec}
+ \fi
+ \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
+$for(fontfamilies)$
+ \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$}
+$endfor$
+$if(euro)$
+ \newcommand{\euro}{€}
+$endif$
+$if(mainfont)$
+ \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$}
+$endif$
+$if(sansfont)$
+ \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$}
+$endif$
+$if(monofont)$
+ \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$}
+$endif$
+$if(mathfont)$
+ \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$}
+$endif$
+$if(CJKmainfont)$
+ \usepackage{xeCJK}
+ \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$}
+$endif$
+\fi
+% use upquote if available, for straight quotes in verbatim environments
+\IfFileExists{upquote.sty}{\usepackage{upquote}}{}
+% use microtype if available
+\IfFileExists{microtype.sty}{%
+\usepackage{microtype}
+\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts
+}{}
+$if(geometry)$
+\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry}
+$endif$
+\usepackage[unicode=true]{hyperref}
+$if(colorlinks)$
+\PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref
+$endif$
+\hypersetup{
+$if(title-meta)$
+ pdftitle={$title-meta$},
+$endif$
+$if(author-meta)$
+ pdfauthor={$author-meta$},
+$endif$
+$if(keywords)$
+ pdfkeywords={$for(keywords)$$keywords$$sep$; $endfor$},
+$endif$
+$if(colorlinks)$
+ colorlinks=true,
+ linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$,
+ citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$,
+ urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$,
+$else$
+ pdfborder={0 0 0},
+$endif$
+ breaklinks=true}
+\urlstyle{same} % don't use monospace font for urls
+$if(lang)$
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel}
+$if(babel-newcommands)$
+ $babel-newcommands$
+$endif$
+\else
+ \usepackage{polyglossia}
+ \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$}
+$for(polyglossia-otherlangs)$
+ \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$}
+$endfor$
+\fi
+$endif$
+$if(natbib)$
+\usepackage{natbib}
+\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$}
+$endif$
+$if(biblatex)$
+\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex}
+$for(bibliography)$
+\addbibresource{$bibliography$}
+$endfor$
+$endif$
+$if(listings)$
+\usepackage{listings}
+$endif$
+$if(lhs)$
+\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{}
+$endif$
+$if(highlighting-macros)$
+$highlighting-macros$
+$endif$
+$if(verbatim-in-note)$
+\usepackage{fancyvrb}
+\VerbatimFootnotes % allows verbatim text in footnotes
+$endif$
+$if(tables)$
+\usepackage{longtable,booktabs}
+$endif$
+$if(graphics)$
+\usepackage{graphicx,grffile}
+\makeatletter
+\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi}
+\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi}
+\makeatother
+% Scale images if necessary, so that they will not overflow the page
+% margins by default, and it is still possible to overwrite the defaults
+% using explicit options in \includegraphics[width, height, ...]{}
+\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio}
+$endif$
+$if(links-as-notes)$
+% Make links footnotes instead of hotlinks:
+\renewcommand{\href}[2]{#2\footnote{\url{#1}}}
+$endif$
+$if(strikeout)$
+\usepackage[normalem]{ulem}
+% avoid problems with \sout in headers with hyperref:
+\pdfstringdefDisableCommands{\renewcommand{\sout}{}}
+$endif$
+$if(indent)$
+$else$
+\IfFileExists{parskip.sty}{%
+\usepackage{parskip}
+}{% else
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{6pt plus 2pt minus 1pt}
+}
+$endif$
+\setlength{\emergencystretch}{3em} % prevent overfull lines
+\providecommand{\tightlist}{%
+ \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}}
+$if(numbersections)$
+\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$}
+$else$
+\setcounter{secnumdepth}{0}
+$endif$
+$if(subparagraph)$
+$else$
+% Redefines (sub)paragraphs to behave more like sections
+\ifx\paragraph\undefined\else
+\let\oldparagraph\paragraph
+\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}}
+\fi
+\ifx\subparagraph\undefined\else
+\let\oldsubparagraph\subparagraph
+\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}}
+\fi
+$endif$
+$if(dir)$
+\ifxetex
+ % load bidi as late as possible as it modifies e.g. graphicx
+ $if(latex-dir-rtl)$
+ \usepackage[RTLdocument]{bidi}
+ $else$
+ \usepackage{bidi}
+ $endif$
+\fi
+\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex
+ \TeXXeTstate=1
+ \newcommand{\RL}[1]{\beginR #1\endR}
+ \newcommand{\LR}[1]{\beginL #1\endL}
+ \newenvironment{RTL}{\beginR}{\endR}
+ \newenvironment{LTR}{\beginL}{\endL}
+\fi
+$endif$
+$for(header-includes)$
+$header-includes$
+$endfor$
+
+$if(title)$
+\title{$title$$if(thanks)$\thanks{$thanks$}$endif$}
+$endif$
+$if(subtitle)$
+\usepackage{etoolbox}
+\makeatletter
+\providecommand{\subtitle}[1]{% add subtitle to \maketitle
+ \apptocmd{\@title}{\par {\large #1}}{}{}
+}
+\makeatother
+\subtitle{$subtitle$}
+$endif$
+\usepackage{authblk}
+$for(author)$
+\author[$for(author.institute_indices)$%
+ $author.institute_indices$%
+ $sep$,$endfor$]{%
+ $author.name$%
+ $if(author.correspondence)$$if(author.email)$%
+ \textsuperscript{*\,}%
+ %$endif$$endif$%
+ $if(author.equal_contributor)$
+ \textsuperscript{$if(equal_contributor_symbol)$$equal_contributor_symbol$$else$\textdagger$endif$\,}%
+ $endif$%
+}
+$endfor$
+$for(institute)$
+\affil[$institute.index$]{\normalsize $institute.name$, \footnotesize $institute.address$}
+$endfor$
+\date{$date$}
+
+\makeatletter
+\def\@maketitle{%
+ \newpage \null \vskip 2em
+ \begin {center}%
+ \let \footnote \thanks
+ {\LARGE \@title \par}%
+ \vskip 1.5em%
+ {\large \lineskip .5em%
+ \begin {tabular}[t]{c}%
+ \@author
+ \end {tabular}\par}%
+ $if(has_equal_contributors)$
+ \vskip 0.5em{\textsuperscript{$if(equal_contributor_symbol)$$equal_contributor_symbol$$else$\textdagger$endif$}\,%
+ These authors contributed equally to this work.}
+ $endif$
+ $if(has_correspondence)$
+ \vskip 0.2em{\textsuperscript{*}\,Correspondence:
+ $for(author)$$if(author.correspondence)$$if(author.email)$
+ $author.name$ <$author.email$>\\
+ $endif$$endif$$endfor$}%
+ %$endif$
+ \vskip 1em{\large \@date}%
+ \end {center}%
+ \par
+ \vskip 1.5em}
+\makeatother
+
+\begin{document}
+
+$if(title)$
+\maketitle
+$endif$
+
+$if(abstract)$
+\begin{abstract}
+$abstract$
+\end{abstract}
+$endif$
+
+$for(include-before)$
+$include-before$
+
+$endfor$
+$if(toc)$
+{
+$if(colorlinks)$
+\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$}
+$endif$
+\setcounter{tocdepth}{$toc-depth$}
+\tableofcontents
+}
+$endif$
+$if(lot)$
+\listoftables
+$endif$
+$if(lof)$
+\listoffigures
+$endif$
+$body$
+
+$if(natbib)$
+$if(bibliography)$
+$if(biblio-title)$
+$if(book-class)$
+\renewcommand\bibname{$biblio-title$}
+$else$
+\renewcommand\refname{$biblio-title$}
+$endif$
+$endif$
+\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$}
+
+$endif$
+$endif$
+$if(biblatex)$
+\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$
+
+$endif$
+$for(include-after)$
+$include-after$
+
+$endfor$
+\end{document}
diff --git a/paper/templates/styles/pandoc-scholar.css b/paper/templates/styles/pandoc-scholar.css
new file mode 100644
index 0000000..7588b69
--- /dev/null
+++ b/paper/templates/styles/pandoc-scholar.css
@@ -0,0 +1,478 @@
+@import url(https://fonts.googleapis.com/css?family=Arvo:400,700,400italic);
+
+/* MeyerWeb Reset */
+
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+b, u, i, center,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, embed,
+figure, figcaption, footer, header, hgroup,
+article, menu, nav, output, ruby, section, summary,
+time, mark, audio, video {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ font: inherit;
+ vertical-align: baseline;
+}
+
+
+/* Base text styles */
+
+body {
+ padding: 10px 50px 0 0;
+ font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+ font-size: 15px;
+ color: #030303;
+ background-color: #FCFBF8;
+ margin: 0;
+ line-height: 1.8em;
+ -webkit-font-smoothing: antialiased;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ color: #232323;
+ margin: 36px 0 10px;
+}
+
+p, ul, ol, table, dl {
+ margin: 0 0 22px;
+}
+
+sub, sup {
+ font-size: 80%;
+}
+
+sub {
+ vertical-align: sub;
+}
+
+sup {
+ vertical-align: sup;
+}
+
+.author-list {
+ margin:0 0 0px;
+ font-weight: 700;
+}
+
+.author-affiliations {
+ margin:0 0 0px;
+ font-style: italic;
+}
+
+.contact_email {
+ font-style: italic;
+}
+
+.abstract {
+ margin: 0% 1% 2%;
+ font-weight: 700;
+}
+
+h1, h2, h3 {
+ border-bottom: 1px solid #ccc;
+ font-family: Arvo, Monaco, serif;
+ font-weight: normal;
+ line-height: 1.3;
+ padding-bottom: 5px;
+}
+
+h1 {
+ font-size: 30px;
+}
+
+h2 {
+ font-size: 24px;
+}
+
+h3 {
+ font-size: 18px;
+}
+
+h4, h5 {
+ font-family: Arvo, Monaco, serif;
+ font-weight: 700;
+}
+
+h6 {
+ font-family: Arvo, Monaco, serif;
+ font-weight: 200;
+}
+
+a {
+ font-weight:200;
+ text-decoration:none;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+a small {
+ font-size: 12px;
+}
+
+em {
+ font-style: italic;
+}
+
+strong {
+ font-weight:700;
+}
+
+sup {
+ vertical-align: super;
+ font-size: smaller;
+}
+
+ul {
+ list-style-position: inside;
+ list-style: disc;
+ padding-left: 25px;
+}
+
+ol {
+ list-style-position: inside;
+ list-style: decimal;
+ padding-left: 25px;
+}
+
+blockquote {
+ margin: 0;
+ padding: 0 0 0 20px;
+ font-style: italic;
+}
+
+dl, dt, dd, dl p {
+ font-color: #444;
+}
+
+dl dt {
+ font-weight: bold;
+}
+
+dl dd {
+ padding-left: 20px;
+ font-style: italic;
+}
+
+dl p {
+ padding-left: 20px;
+ font-style: italic;
+}
+
+hr {
+ border: 0;
+ background: #ccc;
+ height: 1px;
+ margin: 0 0 24px;
+}
+
+/* Images */
+
+img {
+ position: relative;
+ margin: 0 auto;
+ height: auto;
+ max-width: 100%;
+ padding: 0px;
+ margin: 0px 0 0px 0;
+ border: 0px solid #ccc;
+}
+
+p img {
+ display: inline;
+ margin: 0;
+ padding: 0;
+ vertical-align: middle;
+ text-align: center;
+ border: none;
+}
+
+figure {
+ border: 1px solid #ccc;
+ background: #FFFFFF;
+}
+
+figcaption {
+ font-size: 12px;
+ background: #FFFFFF;
+ line-height: 150%;
+ margin-right: 1%;
+ margin-left: 1%;
+}
+
+/* Code blocks */
+
+code, pre {
+ font-family: Monaco, "Bitstream Vera Sans Mono", "Lucida Console", Terminal, monospace;
+ color: #000;
+ background: #e7e7e7;
+ font-size: 12px;
+}
+
+pre {
+ padding: 4px 12px;
+ border-radius:4px;
+ border:1px solid #D7D8C8;
+ overflow: auto;
+ overflow-y: hidden;
+ margin-bottom: 32px;
+}
+
+
+/* Tables */
+
+table {
+ width: 100%;
+ border: 1px solid #ccc;
+ margin-bottom: 32px;
+ text-align: left;
+ }
+
+table.figure_controls {
+ font-size: 12px;
+ line-height: 100%;
+ margin-bottom: 0px;
+}
+
+th {
+ background: #232323;
+ color: #FDFEFB;
+ font-family: 'Arvo', Helvetica, Arial, sans-serif;
+ font-size: 18px;
+ font-weight: normal;
+ padding: 10px;
+}
+
+td {
+ background: #eee;
+ padding: 0px;
+}
+
+
+/* Wrapper */
+.wrapper {
+ width:960px;
+}
+
+
+/* Header */
+
+.page-header {
+ background-color: #474747;
+ border-bottom-right-radius: 4px;
+ border-top-right-radius: 4px;
+ border: 1px solid #000;
+ color: #FDFDFB;
+ float: left;
+ margin: 30px 25px 0 0;
+ padding: 34px 25px 22px 50px;
+ position: fixed;
+ width: 170px;
+ -webkit-font-smoothing: antialiased;
+}
+
+.subtitle {
+ font-size: 16px;
+}
+
+.page-header h1 {
+ font-family: Arvo, sans-serif;
+ font-size: 30px;
+ font-weight: 300;
+ line-height: 1.3em;
+ border-bottom: none;
+ margin-top: 0;
+}
+
+
+.page-header h1,
+.page-header a {
+ color: #fff;
+}
+
+.page-header a {
+ text-decoration: underline;
+}
+
+a.name {
+ white-space: nowrap;
+}
+
+.page-header ul {
+ list-style:none;
+ padding:0;
+}
+
+.page-header li {
+ list-style-type: none;
+ width: 135px;
+ height: 15px;
+ margin-bottom: 12px;
+ line-height: 1em;
+ padding: 6px 6px 6px 7px;
+ background: #1100AF;
+ background: -moz-linear-gradient(top, #1100AF 0%, #110082 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%, #dddddd));
+ background: -webkit-linear-gradient(top, #1100AF 0%,#110082 100%);
+ background: -o-linear-gradient(top, #1100AF 0%,#110082 100%);
+ background: -ms-linear-gradient(top, #1100AF 0%,#110082 100%);
+ background: linear-gradient(top, #1100AF 0%,#110082 100%);
+ border-radius:4px;
+ border:1px solid #0D0D0D;
+ -webkit-box-shadow: inset 0px 1px 1px 0 rgba(38,2,233, 1);
+ box-shadow: inset 0px 1px 1px 0 rgba(38,2,233, 1);
+}
+
+.page-header li:hover {
+ background: #1D00C3;
+ background: -moz-linear-gradient(top, #1D00C3 0%, #190195 100%);
+ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f8f8f8), color-stop(100%,#dddddd));
+ background: -webkit-linear-gradient(top, #1D00C3 0%,#190195 100%);
+ background: -o-linear-gradient(top, #1D00C3 0%,#190195 100%);
+ background: -ms-linear-gradient(top, #1D00C3 0%,#190195 100%);
+ background: linear-gradient(top, #1D00C3 0%,#190195 100%);
+}
+
+.buttons {
+ -webkit-font-smoothing: antialiased;
+ background: url(../images/arrow-down.png) no-repeat;
+ font-weight: normal;
+ height: 30px;
+ padding: 2px 2px 2px 22px;
+ text-shadow: rgba(0, 0, 0, 0.4) 0 -1px 0;
+}
+
+a.buttons {
+ text-decoration: none;
+}
+
+.buttons.github {
+ background: url(../images/octocat-small.png) no-repeat 1px;
+}
+
+.buttons.pdf {
+ background: url(../images/pdf.png) no-repeat 1px;
+}
+
+.buttons:hover {
+ color: #fff;
+ text-decoration: none;
+}
+
+
+/* Article - for main page content */
+
+article {
+ width: 650px;
+ float: right;
+ padding-bottom: 50px;
+}
+
+
+/* Footer */
+
+footer {
+ width: 170px;
+ float: left;
+ position: fixed;
+ bottom: 10px;
+ padding-left: 50px;
+}
+
+@media print, screen and (max-width: 960px) {
+ div.wrapper {
+ width: auto;
+ margin: 0;
+ }
+
+ .page-header, article, footer {
+ float: none;
+ position: static;
+ width: auto;
+ }
+
+ footer {
+ border-top: 1px solid #ccc;
+ margin: 0 84px 0 50px;
+ padding: 0;
+ }
+
+ .page-header {
+ padding-right: 320px;
+ }
+
+ article {
+ padding: 20px 84px 20px 50px;
+ margin: 0 0 20px;
+ }
+
+ .page-header a small {
+ display: inline;
+ }
+
+ .page-header ul {
+ position: absolute;
+ right: 130px;
+ top: 84px;
+ }
+}
+
+@media print, screen and (max-width: 720px) {
+ body {
+ word-wrap:break-word;
+ }
+
+ .page-header {
+ padding: 10px 20px 0;
+ margin-right: 0;
+ }
+
+ article {
+ margin: 0 0 30px;
+ padding: 10px 0 10px 20px;
+ }
+
+ footer {
+ margin: 0 0 0 30px;
+ }
+
+ .page-header ul, .page-header p.view {
+ position: static;
+ }
+}
+
+@media print, screen and (max-width: 480px) {
+ .page-header ul li.download {
+ display: none;
+ }
+
+ footer {
+ margin: 0 0 0 20px;
+ }
+
+ footer a {
+ display:block;
+ }
+}
+
+@media print {
+ body {
+ padding:0.4in;
+ font-size:12pt;
+ color:#444;
+ }
+}
+
+.onlyprint {display: none;}
+@media print {
+ .onlyprint {display: block;}
+}
diff --git a/paper/writers/jsonld.lua b/paper/writers/jsonld.lua
new file mode 100644
index 0000000..697dc9f
--- /dev/null
+++ b/paper/writers/jsonld.lua
@@ -0,0 +1,14 @@
+--
+-- jsonld.lua
+--
+-- Copyright (c) 2017 Albert Krewinkel, Robert Winkler
+--
+-- This program is free software; you can redistribute it and/or modify it
+-- under the terms of the GNU public license version 2 or later.
+-- See the LICENSE file for details.
+
+function Doc (body, meta, variables)
+ return meta.jsonld
+end
+
+setmetatable(_G, {__index = function () return function () return '' end end})