diff options
-rw-r--r-- | README.html | 8 | ||||
-rw-r--r-- | build.log | 1 | ||||
-rw-r--r-- | test.log | 23 | ||||
-rw-r--r-- | vignettes/FOCUS_L.html | 64 | ||||
-rw-r--r-- | vignettes/FOCUS_Z.pdf | bin | 239558 -> 239558 bytes | |||
-rw-r--r-- | vignettes/compiled_models.html | 51 | ||||
-rw-r--r-- | vignettes/mkin.html | 10 |
7 files changed, 80 insertions, 77 deletions
diff --git a/README.html b/README.html index ef650bdc..7afc8e5a 100644 --- a/README.html +++ b/README.html @@ -121,11 +121,11 @@ $(document).ready(function () { <div id="mkin" class="section level1"> <h1>mkin</h1> -<p><a href="http://cran.r-project.org/package=mkin"><img src="data:image/svg+xml; charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4OSIgaGVpZ2h0PSIyMCI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4Mj0iMCIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYmJiIiBzdG9wLW9wYWNpdHk9Ii4xIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iLjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxtYXNrIGlkPSJhIj4KICAgIDxyZWN0IHdpZHRoPSI4OSIgaGVpZ2h0PSIyMCIgcng9IjMiIGZpbGw9IiNmZmYiLz4KICA8L21hc2s+CiAgPGcgbWFzaz0idXJsKCNhKSI+CiAgICA8cGF0aCBmaWxsPSIjNTU1IiBkPSJNMCAwaDQzdjIwSDB6Ii8+CiAgICA8cGF0aCBmaWxsPSIjNGMxIiBkPSJNNDMgMGg3MnYyMEg0M3oiLz4KICAgIDxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik0wIDBoODl2MjBIMHoiLz4KICA8L2c+CiAgPGcgZmlsbD0iI2ZmZiIgdGV4dC1hbmNob3I9Im1pZGRsZSIKICAgICBmb250LWZhbWlseT0iRGVqYVZ1IFNhbnMsVmVyZGFuYSxHZW5ldmEsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMSI+CiAgICA8dGV4dCB4PSIyMS41IiB5PSIxNSIgZmlsbD0iIzAxMDEwMSIgZmlsbC1vcGFjaXR5PSIuMyI+CiAgICAgIENSQU4KICAgIDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIxLjUiIHk9IjE0Ij4KICAgICAgQ1JBTgogICAgPC90ZXh0PgogICAgPHRleHQgeD0iNjUiIHk9IjE1IiBmaWxsPSIjMDEwMTAxIiBmaWxsLW9wYWNpdHk9Ii4zIj4KICAgICAgMC45LjQ0CiAgICA8L3RleHQ+CiAgICA8dGV4dCB4PSI2NSIgeT0iMTQiPgogICAgICAwLjkuNDQKICAgIDwvdGV4dD4KICA8L2c+Cjwvc3ZnPg==" /></a></p> +<p><a href="https://cran.r-project.org/package=mkin"><img src="data:image/svg+xml; charset=utf-8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI5MSIgaGVpZ2h0PSIyMCI+CiAgPGxpbmVhckdyYWRpZW50IGlkPSJiIiB4Mj0iMCIgeTI9IjEwMCUiPgogICAgPHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYmJiIiBzdG9wLW9wYWNpdHk9Ii4xIi8+CiAgICA8c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iLjEiLz4KICA8L2xpbmVhckdyYWRpZW50PgogIDxtYXNrIGlkPSJhIj4KICAgIDxyZWN0IHdpZHRoPSI5MSIgaGVpZ2h0PSIyMCIgcng9IjMiIGZpbGw9IiNmZmYiLz4KICA8L21hc2s+CiAgPGcgbWFzaz0idXJsKCNhKSI+CiAgICA8cGF0aCBmaWxsPSIjNTU1IiBkPSJNMCAwaDQzdjIwSDB6Ii8+CiAgICA8cGF0aCBmaWxsPSIjNGMxIiBkPSJNNDMgMGg2OXYyMEg0M3oiLz4KICAgIDxwYXRoIGZpbGw9InVybCgjYikiIGQ9Ik0wIDBoOTF2MjBIMHoiLz4KICA8L2c+CiAgPGcgZmlsbD0iI2ZmZiIgdGV4dC1hbmNob3I9Im1pZGRsZSIKICAgICBmb250LWZhbWlseT0iRGVqYVZ1IFNhbnMsVmVyZGFuYSxHZW5ldmEsc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxMSI+CiAgICA8dGV4dCB4PSIyMS41IiB5PSIxNSIgZmlsbD0iIzAxMDEwMSIgZmlsbC1vcGFjaXR5PSIuMyI+CiAgICAgIENSQU4KICAgIDwvdGV4dD4KICAgIDx0ZXh0IHg9IjIxLjUiIHk9IjE0Ij4KICAgICAgQ1JBTgogICAgPC90ZXh0PgogICAgPHRleHQgeD0iNjYiIHk9IjE1IiBmaWxsPSIjMDEwMTAxIiBmaWxsLW9wYWNpdHk9Ii4zIj4KICAgICAgMC45LjQ0CiAgICA8L3RleHQ+CiAgICA8dGV4dCB4PSI2NiIgeT0iMTQiPgogICAgICAwLjkuNDQKICAgIDwvdGV4dD4KICA8L2c+Cjwvc3ZnPg==" /></a></p> <p>The R package <strong>mkin</strong> provides calculation routines for the analysis of chemical degradation data, including <b>m</b>ulticompartment <b>kin</b>etics as needed for modelling the formation and decline of transformation products, or if several compartments are involved.</p> <div id="installation" class="section level2"> <h2>Installation</h2> -<p>You can install the latest released version from <a href="http://cran.r-project.org/package=mkin">CRAN</a> from within R:</p> +<p>You can install the latest released version from <a href="https://cran.r-project.org/package=mkin">CRAN</a> from within R:</p> <pre class="r"><code>install.packages("mkin")</code></pre> </div> <div id="background" class="section level2"> @@ -170,10 +170,10 @@ $(document).ready(function () { <p><code>mkin</code> would not be possible without the underlying software stack consisting of R and the packages <a href="http://cran.r-project.org/package=deSolve">deSolve</a> and <a href="http://cran.r-project.org/package=FME">FME</a>, to say the least.</p> <p>It could not have been written without me being introduced to regulatory fate modelling of pesticides by Adrian Gurney during my time at Harlan Laboratories Ltd (formerly RCC Ltd). <code>mkin</code> greatly profits from and largely follows the work done by the <a href="http://focus.jrc.ec.europa.eu/dk">FOCUS Degradation Kinetics Workgroup</a>, as detailed in their guidance document from 2006, slightly updated in 2011 and in 2014.</p> <p>Also, it was inspired by the first version of KinGUI developed by BayerCropScience, which is based on the MatLab runtime environment.</p> -<p>The companion package <a href="http://kinfit.r-forge.r-project.org/kinfit_static/index.html">kinfit</a> (now deprecated) was <a href="https://r-forge.r-project.org/scm/viewvc.php?view=rev&root=kinfit&revision=2">started in 2008</a> and <a href="http://cran.r-project.org/src/contrib/Archive/kinfit/">first published</a> on CRAN on 01 May 2010.</p> +<p>The companion package <a href="http://kinfit.r-forge.r-project.org/kinfit_static/index.html">kinfit</a> (now deprecated) was <a href="https://r-forge.r-project.org/scm/viewvc.php?view=rev&root=kinfit&revision=2">started in 2008</a> and <a href="https://cran.r-project.org/src/contrib/Archive/kinfit/">first published</a> on CRAN on 01 May 2010.</p> <p>The first <code>mkin</code> code was <a href="https://r-forge.r-project.org/scm/viewvc.php?view=rev&root=kinfit&revision=8">published on 11 May 2010</a> and the <a href="http://cran.r-project.org/src/contrib/Archive/mkin">first CRAN version</a> on 18 May 2010.</p> <p>In 2011, Bayer Crop Science started to distribute an R based successor to KinGUI named KinGUII whose R code is based on <code>mkin</code>, but which added, amongst other refinements, a closed source graphical user interface (GUI), iteratively reweighted least squares (IRLS) optimisation of the variance for each of the observed variables, and Markov Chain Monte Carlo (MCMC) simulation functionality, similar to what is available e.g. in the <code>FME</code> package.</p> -<p>Somewhat in parallel, Syngenta has sponsored the development of an <code>mkin</code> and KinGUII based GUI application called CAKE, which also adds IRLS and MCMC, is more limited in the model formulation, but puts more weight on usability. CAKE is available for download from the <a href="http://projects.tessella.com/cake">CAKE website</a>, where you can also find a zip archive of the R scripts derived from <code>mkin</code>, published under the GPL license.</p> +<p>Somewhat in parallel, Syngenta has sponsored the development of an <code>mkin</code> and KinGUII based GUI application called CAKE, which also adds IRLS and MCMC, is more limited in the model formulation, but puts more weight on usability. CAKE is available for download from the <a href="http://showcase.tessella.com/products/cake">CAKE website</a>, where you can also find a zip archive of the R scripts derived from <code>mkin</code>, published under the GPL license.</p> <p>Finally, there is <a href="http://github.com/zhenglei-gao/KineticEval">KineticEval</a>, which contains a further development of the scripts used for KinGUII, so the different tools will hopefully be able to learn from each other in the future as well.</p> </div> <div id="development" class="section level2"> @@ -5,7 +5,6 @@ * creating vignettes ... OK * checking for LF line-endings in source and make files * checking for empty or unneeded directories -Removed empty directory ‘mkin/docs/icons’ * looking to see if a ‘data/datalist’ file should be added * building ‘mkin_0.9.44.9000.tar.gz’ @@ -1,18 +1,21 @@ Loading mkin Loading required package: testthat -Loading required package: methods Loading required package: minpack.lm Loading required package: rootSolve Loading required package: inline +Loading required package: methods Loading required package: parallel Testing mkin -Calculation of FOCUS chi2 error levels : .. -Results for FOCUS D established in expertise for UBA (Ranke 2014) : ...... -The t-test for significant difference from zero : .. -Fitting the FOMC model with large parameter correlation : S -Model predictions with mkinpredict : ... -Fitting of parent only models : ..................... -Complex test case from Schaefer et al. (2007) Piacenza paper : .. -Results for synthetic data established in expertise for UBA (Ranke 2014) : .... +Calculation of FOCUS chi2 error levels: .. +Results for FOCUS D established in expertise for UBA (Ranke 2014): ...... +The t-test for significant difference from zero: .. +Fitting the FOMC model with large parameter correlation: S +Model predictions with mkinpredict: ... +Fitting of parent only models: ..................... +Complex test case from Schaefer et al. (2007) Piacenza paper: .. +Results for synthetic data established in expertise for UBA (Ranke 2014): .... + +Skipped ------------------------------------------------------------------------ +1. Fitting with large parameter correlation gives warnings (@test_FOMC_ill-defined.R#30) - Skip test for warnings triggered by large parameter correlation as it failed on r-forge -DONE +DONE =========================================================================== diff --git a/vignettes/FOCUS_L.html b/vignettes/FOCUS_L.html index bcdee8df..0d96fd5f 100644 --- a/vignettes/FOCUS_L.html +++ b/vignettes/FOCUS_L.html @@ -244,15 +244,15 @@ FOCUS_2006_L1_mkin <- mkin_wide_to_long(FOCUS_2006_L1)</code></pre> summary(m.L1.SFO)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:04 2016 -## Date of summary: Thu Nov 17 17:46:04 2016 +## Date of fit: Thu Nov 17 18:44:25 2016 +## Date of summary: Thu Nov 17 18:44:25 2016 ## ## Equations: -## d_parent = - k_parent_sink * parent +## d_parent/dt = - k_parent_sink * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 37 model solutions performed in 0.093 s +## Fitted with method Port using 37 model solutions performed in 0.088 s ## ## Weighting: none ## @@ -337,8 +337,8 @@ summary(m.L1.SFO)</code></pre> <pre class="r"><code>summary(m.L1.FOMC, data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:05 2016 -## Date of summary: Thu Nov 17 17:46:05 2016 +## Date of fit: Thu Nov 17 18:44:26 2016 +## Date of summary: Thu Nov 17 18:44:26 2016 ## ## ## Warning: Optimisation by method Port did not converge. @@ -346,11 +346,11 @@ summary(m.L1.SFO)</code></pre> ## ## ## Equations: -## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent +## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 188 model solutions performed in 0.456 s +## Fitted with method Port using 188 model solutions performed in 0.431 s ## ## Weighting: none ## @@ -434,15 +434,15 @@ plot(m.L2.FOMC, show_residuals = TRUE, <pre class="r"><code>summary(m.L2.FOMC, data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:06 2016 -## Date of summary: Thu Nov 17 17:46:06 2016 +## Date of fit: Thu Nov 17 18:44:26 2016 +## Date of summary: Thu Nov 17 18:44:26 2016 ## ## Equations: -## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent +## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 81 model solutions performed in 0.227 s +## Fitted with method Port using 81 model solutions performed in 0.18 s ## ## Weighting: none ## @@ -504,17 +504,17 @@ plot(m.L2.DFOP, show_residuals = TRUE, show_errmin = TRUE, <pre class="r"><code>summary(m.L2.DFOP, data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:07 2016 -## Date of summary: Thu Nov 17 17:46:07 2016 +## Date of fit: Thu Nov 17 18:44:27 2016 +## Date of summary: Thu Nov 17 18:44:27 2016 ## ## Equations: -## d_parent = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * -## time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * -## time))) * parent +## d_parent/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * +## exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * +## exp(-k2 * time))) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 336 model solutions performed in 0.935 s +## Fitted with method Port using 336 model solutions performed in 0.768 s ## ## Weighting: none ## @@ -593,17 +593,17 @@ plot(mm.L3)</code></pre> <pre class="r"><code>summary(mm.L3[["DFOP", 1]])</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:08 2016 -## Date of summary: Thu Nov 17 17:46:08 2016 +## Date of fit: Thu Nov 17 18:44:28 2016 +## Date of summary: Thu Nov 17 18:44:28 2016 ## ## Equations: -## d_parent = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * exp(-k2 * -## time)) / (g * exp(-k1 * time) + (1 - g) * exp(-k2 * -## time))) * parent +## d_parent/dt = - ((k1 * g * exp(-k1 * time) + k2 * (1 - g) * +## exp(-k2 * time)) / (g * exp(-k1 * time) + (1 - g) * +## exp(-k2 * time))) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 137 model solutions performed in 0.332 s +## Fitted with method Port using 137 model solutions performed in 0.313 s ## ## Weighting: none ## @@ -693,15 +693,15 @@ plot(mm.L4)</code></pre> <pre class="r"><code>summary(mm.L4[["SFO", 1]], data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:08 2016 -## Date of summary: Thu Nov 17 17:46:08 2016 +## Date of fit: Thu Nov 17 18:44:28 2016 +## Date of summary: Thu Nov 17 18:44:29 2016 ## ## Equations: -## d_parent = - k_parent_sink * parent +## d_parent/dt = - k_parent_sink * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 46 model solutions performed in 0.131 s +## Fitted with method Port using 46 model solutions performed in 0.1 s ## ## Weighting: none ## @@ -753,15 +753,15 @@ plot(mm.L4)</code></pre> <pre class="r"><code>summary(mm.L4[["FOMC", 1]], data = FALSE)</code></pre> <pre><code>## mkin version: 0.9.44.9000 ## R version: 3.3.2 -## Date of fit: Thu Nov 17 17:46:08 2016 -## Date of summary: Thu Nov 17 17:46:08 2016 +## Date of fit: Thu Nov 17 18:44:28 2016 +## Date of summary: Thu Nov 17 18:44:29 2016 ## ## Equations: -## d_parent = - (alpha/beta) * 1/((time/beta) + 1) * parent +## d_parent/dt = - (alpha/beta) * 1/((time/beta) + 1) * parent ## ## Model predictions using solution type analytical ## -## Fitted with method Port using 66 model solutions performed in 0.167 s +## Fitted with method Port using 66 model solutions performed in 0.152 s ## ## Weighting: none ## diff --git a/vignettes/FOCUS_Z.pdf b/vignettes/FOCUS_Z.pdf Binary files differindex 6f71d018..6f8929ea 100644 --- a/vignettes/FOCUS_Z.pdf +++ b/vignettes/FOCUS_Z.pdf diff --git a/vignettes/compiled_models.html b/vignettes/compiled_models.html index dc2b2ca7..2cb73ac7 100644 --- a/vignettes/compiled_models.html +++ b/vignettes/compiled_models.html @@ -11,7 +11,7 @@ <meta name="author" content="Johannes Ranke" /> -<meta name="date" content="2016-11-04" /> +<meta name="date" content="2016-11-17" /> <title>Performance benefit by using compiled model definitions in mkin</title> @@ -216,7 +216,7 @@ div.tocify { <h1 class="title toc-ignore">Performance benefit by using compiled model definitions in mkin</h1> <h4 class="author"><em>Johannes Ranke</em></h4> -<h4 class="date"><em>2016-11-04</em></h4> +<h4 class="date"><em>2016-11-17</em></h4> </div> @@ -232,6 +232,7 @@ div.tocify { <pre><code>## Loading required package: minpack.lm</code></pre> <pre><code>## Loading required package: rootSolve</code></pre> <pre><code>## Loading required package: inline</code></pre> +<pre><code>## Loading required package: methods</code></pre> <pre><code>## Loading required package: parallel</code></pre> <pre class="r"><code>SFO_SFO <- mkinmod( parent = mkinsub("SFO", "m1"), @@ -241,12 +242,12 @@ div.tocify { <pre class="r"><code>library("microbenchmark") library("ggplot2") mb.1 <- microbenchmark( - "deSolve, not compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, - solution_type = "deSolve", + "deSolve, not compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, + solution_type = "deSolve", use_compiled = FALSE, quiet = TRUE), - "Eigenvalue based" = mkinfit(SFO_SFO, FOCUS_2006_D, + "Eigenvalue based" = mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "eigen", quiet = TRUE), - "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, + "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, solution_type = "deSolve", quiet = TRUE), times = 3, control = list(warmup = 0))</code></pre> <pre><code>## Warning in microbenchmark(`deSolve, not compiled` = mkinfit(SFO_SFO, @@ -256,21 +257,21 @@ mb.1 <- microbenchmark( print(mb.1)</code></pre> <pre><code>## Unit: milliseconds ## expr min lq mean median uq -## deSolve, not compiled 4969.1274 5005.4703 5026.1990 5041.8132 5054.7348 -## Eigenvalue based 841.6273 843.3144 855.0880 845.0015 861.8183 -## deSolve, compiled 689.6154 698.2345 710.3162 706.8537 720.6666 +## deSolve, not compiled 4925.0009 4957.6694 4974.0652 4990.3379 4998.5974 +## Eigenvalue based 838.9741 839.6651 857.4679 840.3561 866.7149 +## deSolve, compiled 695.5858 709.3905 717.8062 723.1951 728.9163 ## max neval cld -## 5067.6564 3 c -## 878.6352 3 b -## 734.4795 3 a</code></pre> +## 5006.8569 3 c +## 893.0736 3 b +## 734.6375 3 a</code></pre> <pre class="r"><code>autoplot(mb.1)</code></pre> -<p><img src="data:image/png;base64,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" width="672" /></p> -<p>We see that using the compiled model is by a factor of 7.1 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:</p> +<p><img src="data:image/png;base64,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" width="672" /></p> +<p>We see that using the compiled model is by a factor of 6.9 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:</p> <pre class="r"><code>rownames(smb.1) <- smb.1$expr smb.1["median"]/smb.1["deSolve, compiled", "median"]</code></pre> <pre><code>## median -## deSolve, not compiled 7.132754 -## Eigenvalue based 1.195441 +## deSolve, not compiled 6.900403 +## Eigenvalue based 1.162005 ## deSolve, compiled 1.000000</code></pre> </div> <div id="model-that-can-not-be-solved-with-eigenvalues" class="section level2"> @@ -281,7 +282,7 @@ smb.1["median"]/smb.1["deSolve, compiled", "median" m1 = mkinsub( "SFO"))</code></pre> <pre><code>## Successfully compiled differential equation model from auto-generated C code.</code></pre> <pre class="r"><code>mb.2 <- microbenchmark( - "deSolve, not compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, + "deSolve, not compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, use_compiled = FALSE, quiet = TRUE), "deSolve, compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE), times = 3, control = list(warmup = 0))</code></pre> @@ -291,19 +292,19 @@ smb.1["median"]/smb.1["deSolve, compiled", "median" <pre class="r"><code>smb.2 <- summary(mb.2) print(mb.2)</code></pre> <pre><code>## Unit: seconds -## expr min lq mean median uq -## deSolve, not compiled 10.998190 11.039105 11.133751 11.080019 11.201531 -## deSolve, compiled 1.286159 1.286381 1.288394 1.286602 1.289511 -## max neval cld -## 11.32304 3 b -## 1.29242 3 a</code></pre> +## expr min lq mean median uq +## deSolve, not compiled 10.905262 11.007527 11.335389 11.109791 11.55045 +## deSolve, compiled 1.297428 1.304999 1.327356 1.312569 1.34232 +## max neval cld +## 11.991114 3 b +## 1.372071 3 a</code></pre> <pre class="r"><code>smb.2["median"]/smb.2["deSolve, compiled", "median"]</code></pre> <pre><code>## median ## 1 NA ## 2 NA</code></pre> <pre class="r"><code>autoplot(mb.2)</code></pre> -<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUAAAAJACAMAAAB7fzyHAAAC61BMVEUAAAABAQECAgIDAwMEBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQWFhYXFxcZGRkaGhobGxscHBwdHR0eHh4fHx8gICAiIiIjIyMkJCQlJSUmJiYnJycoKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6Ojo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVHR0dISEhJSUlKSkpMTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1eXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29wcHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGCgoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OUlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGjo6OkpKSlpaWmpqanp6eoqKipqamqqqqrq6utra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7///+m3mBqAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nO3dfbxUdYHH8WM+ppbaw+aWre7WttXaNrrV5taubW3tb7hyuaE8yvNVVCAjqcRkFXwoVFpAFlJQMUtN8CHyCR9AIdOCVIQLqCAiUoB6AYF75/y552Hm3vMwbPM7eq7fGT/vPzhzZn7nd8748/V5zdyZC44LAMjEeacvAADqFQEFgIwIKABkREABICMCCgAZEVAAyIiAAkBGBBQAMiKgAJARAQWAjAgoAGREQAEgIwIKABkRUADIiIDW7rWtAFS97ro78z9LIgoEtHYEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDF2QX0+ZU5rSCAKgioOKuArv9a4ed5rSGAFAIqziqg9xYK38lrDQGkEFBxVgG9s1BozWsNAaQQUHG2AR2W1xoCSCGg4mwDOjCvNQSQQkDF2Qa0X15rCCCFgIqzDWhLXmsIIIWAirMNaHNeawgghYCKsw1oU15rCCCFgIqzDajJaw0BpBBQcbYB/VZeawgghYCKsw3oN/JaQwApBFScbUC/ntcaAkghoOJsA3pqXmsIIIWAirMN6L/ltYYAUgioONuAfiWvNQSQQkDF2Qb0lLzWEEAKARVnG9Av5bWGAFIIqDjbgH4hrzUEkEJAxdkG9OS81hBACgEVZxvQQl5rCCCFgIqzDuiWvBYRQBIBFWcd0JfzWkQASQRUHAEFdBFQcdYB3ZjXIgJIIqDirAP6Yl6LCCCJgIqzDuj6vBYRQBIBFWcd0HV5LSKAJAIqzjqgbXktIoAkAirOOqCr81pEAEkEVJx1QFfltYgAkgioOOuAPpPXIgJIIqDirAP6dF6LCCCJgIqzDujKvBYRQBIBFWcd0D/ktYgAkgioOOuAPpXXIgJIIqDirAP6u7wWEUASARVnHdDf5rWIAJIIqDjrgC7PaxEBJBFQcdYBfSyvRQSQREDFWQd0SV6LCCCJgIqzDugjeS0igCQCKs46oA/ltYgAkgioOOuAPpjXIgJIIqDirAN6f16LCCCJgIqzDui9eS0igCQCKs46oIvyWkQASQRUnHVAf53XIgJIIqDirANaXJbXKgJIIKDirANa+GFeqwgggYCKsw/oBXmtIoAEAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CArkYO6MvGpO9cfeW5LQPHz9pS4/B87P9UqUcIKKDrXRbQ0gxjeg3rZ0zTLbUMz4ExLxNQoEG8ywJ6l2lZtNd1t80x5rEahueAgAKN410W0FFmcXhjhrm0huE5WLCgnYACDeLdFdCdxrSHt1aYIX95eG4IKNAQGjOgKyYPax53/6YwRhumntM8ZPJT/s12Y1aHIzrbw5Kuury1z3lTn/Nv+u2aaX4W3L3B9H0zfmjS+h+f3Xz27O1VJum4aUzLmDk7t13V2jzypj2u/659031jm4dNWeG68bfwselj19yNgAK6GjKgNxdNcUjRXB7E6K4m09LaYsx1/iNjzOAHdkdG3lI0TcO90YvcsGpPmyEl//6bzIzkoXH3NJneI5rMwG3pSSZNWDi3txk34AJ/M8v1m3mJuej6Sb2KP3djAY1NH7tmT+m20Po3LPzGD+gPbI4A8BZ4NdmT/1kS9ck5oKuMuX6323618WP0QlO/ZSW3tLy/WeI9tHagMc0Tb1tbCkeuNsVf7HV3X2v6/DmsWmlI8BK1NMLfxA+N2dBUvKPDfW2SuSI9yeRO111ozKXeZoEZ5PrNLPoTrOxj2qIBjU0fu2ZfZyG02OaZP+wfcdFb+o8HQFzOAb3Qz5pXwXF+jK4qf9y+1PzI3+y4/fyiF6n+1/svHd2J5ppg5AX+K8WgavOC14OrzehS6tCoKWa6v3m96fTO1CTrvJ31XRvXb+blwUHzzKRoQGPTx67ZR0ABVJVvQEtnmGeDG/f7MRpjRrT6hpsB5cfbH5811JgzN3o3+5d/JLrYjC9X7XkzzEvnbHOHW+3QLoPKB77Qti81yT43unH9ZoavYNeZgdGARqePX3PwLHgLD8hrwLfwO4x5PbjxnB+j001F7+4hpSeHmgu9F5DGvFEeOaBctdJos8btHNS0w93PoYGdlVO4VSdJbIxZWzlqVySg0enj1xzFh0iArgb8EKmrbmv8GI02kbNPnvRS+dYqU3yzu31rTN9K7W41c90/mCn+vbFDY7ze7azcrjZJMqDhS9TtxrwWCWh0+vg1RxFQQFcDBtQdUH47vNiP0SXm98HOm1u2u+5Qc295THtQrH7ltD1kzq/U7hXvPfw084R/b+zQGO8d97rgRtuT7dUmSQb0wWDACtMv+hY+Nn3smqMIKKCrEQN6cfihTWm8H6OF5V85mmnmu+50M7T81vtRM9z1P7qZFoycYGZ2RW+8WdV3cId/K3Zo3IVmtr/Z17+4s+okiYCODz71n2QmRgMamz52zVEEFNDViAH13gZft9vdNT34StCeoWbuHrfjnmLzK97LyxYzbNGrHaUdd/c1t7v+TxyLt+7zv4HU/GpX9O4255obgnlih7oLFnR0n+I503Rnh7t7mrmo+iSJgJrpu9xds4x5LhrQ2PSxa44ioICuRgyoO9eY4tCimR/E6Knepmnk6aa41H/kmRFeoXr19v6YFrwonGfMaSOKpvmB7ujt6GXMpnCe2KHG7Imc4hbvoFHNpv+r1SdJBHRKcD3Fm93YF+lj08euOYKAAroaMqClxyYPbx63vOsXJgedNvInG8OHOh6cNLrljLFT28pDl1/W2nzO1OCjpcqvoV9sJlQmih4aD6j77JSRzaNnv7afSRIB3fTAmN5DL10ZThP9Vc7u6ePX3I2AAroaMqC52Bd8szOLoJlZEVBAFwGt1eY+WY8koECDIqC1mjIt65EEFGhQBLRWD2d9B09AgUZFQPNHQIEGRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBx9gH9YV6rCCCBgIqzDmhxWV6rCCCBgIqzDuiv81pEAEkEVJx1QBfltYgAkgioOOuA3pvXIgJIIqDirAN6f16LCCCJgIqzDuiDeS0igCQCKs46oA/ltYgAkgioOOuAPpLXIgJIIqDirAO6JK9FBJBEQMVZB/SxvBYRQBIBFWcdUH4RCegxBFScdUB/m9ciAkgioOKsA/pETmsIIIWAirMO6FN5LSKAJAIqzjqgf8hrEQEkEVBx1gFdmdciAkgioOKsA/p0XosIIImAirMO6DN5LSKAJAIqzjqgq/JaRABJBFScdUBX57WIAJIIqDjrgLbltYgAkgioOOuArstrEQEkEVBx1gFdn9ciAkgioOKsA/piXosIIImAirMO6Ma8FhFAEgEVZx3Ql/NaRABJBFScdUA357WIAJIIqDjrgG7JaxEBJBFQcdYBzWsNAaQQUHG2AT05rzUEkEJAxdkG9At5rSGAFAIqzjagX8prDQGkEFBxtgE9Ja81BJBCQMXZBvQrea0hgBQCKs42oP+W1xoCSCGg4mwDempeawgghYCKsw3o1/NaQwApBFScbUC/kdcaAkghoOJsA/qtvNYQQAoBFWcbUJPXGgJIIaDibAPalNcaAkghoOJsA9qc1xoCSCGg4mwD2pLXGgJIIaDibAPaL681BJBCQMXZBnRgXmsIIIWAirMN6NC81hBACgEVZxvQ1rzWEEAKARVnFdB7C4Xv5LWGAFIIqDirgK7/WuHnea0hgBQCKs4qoFufX5nTCgKogoCKswsogJ5EQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAFwEVR0ABXQRUHAEFdBFQcQQU0EVAxRFQQBcBFUdAAV0EVBwBBXQRUHEEFNBFQMURUEAXARVHQAFdBFQcAQV0EVBxBBTQRUDFEVBAV+0BfemyXqN/l/EsiSgQ0NoRUEBXzQHdMrxQKHzliWxnSUSBgNaOgAK6ag7onQVf8yuZzpKIAgGtHQEFdNUc0JsKham9CoXrMp0lEQUCWjsCCuiyCegNywuFUzdkOUsiCgS0dgQU0GUVUPe8QuGqLGdJRIGA1o6AArrsArr65MKXn966te26H9t9Hp+IAgGtHQEFdNkF1P1RoTBk05xTCoVvWp0lEYW3GNCXjUnfufrKc1sGjp+1pcbh76z9X1LqEQIK6LIM6J9PLRS+5H8cf7LVWRKVePsDWpphTK9h/YxpuqWW4VkY8/LbNg0BBRqCZUDdJV8I8qkW0LtMy6K9rrttjjGP1TA8CwIKIME2oO7vhvz78CWnqQV0lFkc3phhLq1heBZvU0AXLGgnoECDsA5oQC2gO41pD2+tMEP+8vBM3qaABggo0BDqK6ArJg9rHnf/pjAyG6ae0zxk8lP+zXZjVocjOtvDkq66vLXPeVOfqzRppvlZcPcG0/fN+KGpfnXMP7O59ebdiVmmGl/kI6r1Pz67+ezZ26ucrOOmMS1j5uzcdlVr88ib9rh+ejfdN7Z52JQVrht/Cx+7jNhz60ZAAV11FdCbi6Y4pGguDyJzV5NpaW0x5jr/kTFm8AO7IyNvKZqm4d7oRWHT3KfNkJJ//01mRvLQGG/s9DG3z+9rrkzMct8MY66c8XrXwHuaTO8RTWbgtvTJJk1YOLe3GTfgAn8zy/WbeYm56PpJvYo/d2MBjV1G7Ln5Xgpt3QZAlfd6bVdNA29OBNTqLG9PQFcZc/1ut/1q40fmhaZ+y0puaXl/s8R7aO1AY5on3ra2FI5cbYq/2Ovuvtb0+XNYq9KQ4CVqaYS/iR+aDOhYL8SPm+KuxCzxt/Abmop3dLivTTJXpE82udN1FxpzqbdZYAYFRxb9E63sY9qiAY1dRuy5+ToLocXZ/lsBUHJHIqBvZa6MAb3Qz5VXwXF+ZK4qf9y+1PzI3+y4/fyiF5/+1wexnmiuCUZe4L8CDGo1L3idt9qMLqUOjfLG+q3bHWQuNks8oFPMdH/zetPpnamTrfN21ndtgiMvDw6aZyZFAxq7jNhz8xFQoIG88wEtnWGeDW7c70dmjBnR6htuBpQfb3981lBjztzo3exf/pHoYjO+XKvnzTAvnbPNHW61Q7t4Y4OfNwSZi80SD+ig8kMvtO1LnWyfG90ER4avdNeZgdGARi8j/tyCZ3tW6Mm9AFR1uG5HTQNvSwTU6iyJTGUL6A5jwp9BPudH5nRT0bt7SOnJoeZC74WhMW+URw4o16o02qxxOwc17XD3c2jIG9vpumHm4rPEArqzcilu1ZMlNsasrRy1KxLQ6GXEn1sUHyIBuuroQ6Suaq3xIzPaRGadPOml8q1Vpvhmd9PWmL6Vit1q5rp/MFP8e2OHxlW+RRQLaDBLLKBe73ZWblc7WTKg4UvU7ca8Fglo9DLizy2KgAK66iig7oDy29zFfmQuMb8Pdt7cst11h5p7y2PagxL1KyfrIXN+pWKveO/hp5kn/Htjh8ZFAxqfJRZQ7x33uuBG25Pt1U6WDOiDwYAVpl/0LXzsMmLPLYqAArrqKaAXhx/GlMb7kVlY/pWjmWa+6043Q8tvqR81w13/I5lpwcgJZmZXzMabVX0Hd/i3YofGxQIamyX+M9ALzWx/s69/cWfVkyUCOj74dsAkMzEa0NhlxJ5bFAEFdNkH9IUHN75DAfXe3l632901Pfiqz56hZu4et+OeYvMr3svLFjNs0asdpR139zW3u/5PEou37vO/WdT8alfM7jbnmvAZxA51Fyzo2E9AY7N4dz3XPe4503Rnh7t7mrmo+skSATXTd7m7ZgUzdAc0dhmx50ZAgfpgG9COS08qnDThP9+ZL9LPNaY4tGjmB5F5qrdpGnm6KS71H3lmhFeeXr29P6YFL/bmGXPaiKJpfqA7Zjt6GbMpnCd2qDF79hPQ2Czem+yBP+j+Qust3t2jmk3/V6ufLBHQKcF1F292Y1+kj11G7LkRUKAu2Ab0ivLXE9+RgJYemzy8edzyrl+EHHTayJ9sDB/qeHDS6JYzxk5tKw9dfllr8zlTX4pG8WIzoTJR9ND/J6DRWdxlracN+lP3yGenjGwePfu1/ZwsEdBND4zpPfTSlV0zV3kG8efWjYACuiwD+sRJhZMvOMUL6BeszpIIodTfSL8v+MZmnt7SX0NCQAFddgHt7FsoTNv6zLiTC+danSURBamAbu6T9xkIKNCg7AJ6Z6HQe7O3s37lq1ZnSURBKqBTpuV9BgIKNCirgO75r0LhzixnSURBKqAP5/0OnoACjcoqoHMKhYF2Lz3LElGQCmj+CCjQoGwCOvyLhZMeyXSWRBTeZQF9SwgooKvmgC492f/20sRsZ0lEgYDWjoACumoO6Na5XkGHb8p2lkQUCGjtCCigq/aAbl1+7a+2ZDxLIgoEtHYEFNBlEdC3IBEFAlo7AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuAiiOggC4CKo6AAroIqDgCCugioOIIKKCLgIojoIAuAiqOgAK6CKg4AgroIqDiCCigi4CKI6CALgIqjoACugioOAIK6CKg4ggooIuA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" width="672" /></p> -<p>Here we get a performance benefit of a factor of 8.6 using the version of the differential equation model compiled from C code!</p> +<p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABUAAAAJACAMAAAB7fzyHAAAC91BMVEUAAAABAQECAgIDAwMEBAQFBQUGBgYHBwcICAgJCQkKCgoLCwsMDAwNDQ0ODg4PDw8QEBARERESEhITExMUFBQWFhYXFxcZGRkaGhobGxscHBwdHR0eHh4fHx8gICAiIiIjIyMkJCQlJSUmJiYnJycoKCgpKSkqKiorKyssLCwtLS0uLi4vLy8wMDAxMTEyMjIzMzM0NDQ1NTU2NjY3Nzc4ODg5OTk6Ojo7Ozs8PDw9PT0+Pj4/Pz9AQEBBQUFCQkJDQ0NERERFRUVGRkZHR0dISEhJSUlKSkpLS0tMTExNTU1OTk5PT09QUFBRUVFSUlJTU1NUVFRVVVVWVlZXV1dYWFhZWVlaWlpbW1tcXFxdXV1eXl5fX19gYGBhYWFiYmJjY2NkZGRlZWVmZmZnZ2doaGhpaWlqampra2tsbGxtbW1ubm5vb29wcHBxcXFycnJzc3N0dHR1dXV2dnZ3d3d4eHh5eXl6enp7e3t8fHx9fX1+fn5/f3+AgICBgYGCgoKDg4OEhISFhYWGhoaHh4eIiIiJiYmKioqLi4uMjIyNjY2Ojo6Pj4+QkJCRkZGSkpKTk5OUlJSVlZWWlpaXl5eYmJiZmZmampqbm5ucnJydnZ2enp6fn5+goKChoaGioqKjo6OkpKSlpaWmpqanp6eoqKipqamqqqqrq6usrKytra2urq6vr6+wsLCxsbGysrKzs7O0tLS1tbW2tra3t7e4uLi5ubm6urq7u7u8vLy9vb2+vr6/v7/AwMDBwcHCwsLDw8PExMTFxcXGxsbHx8fIyMjJycnKysrLy8vMzMzNzc3Ozs7Pz8/Q0NDR0dHS0tLT09PU1NTV1dXW1tbX19fY2NjZ2dna2trb29vc3Nzd3d3e3t7f39/g4ODh4eHi4uLj4+Pk5OTl5eXm5ubn5+fo6Ojp6enq6urr6+vs7Ozt7e3u7u7v7+/w8PDx8fHy8vLz8/P09PT19fX29vb39/f4+Pj5+fn6+vr7+/v8/Pz9/f3+/v7////z8a3rAAAACXBIWXMAAB2HAAAdhwGP5fFlAAAgAElEQVR4nO3de5wU5Zno8TLGxJiLcbM5m7NJTnJO9uzJ7smePKC4GiNJjInxHQaGCXKXO4oKLOItGsMKeAsqKoRgFEzEGO9gvMT7DRWNRtSI3LyA3BME5SIwTP1xqqq7Z7pqhk31213M+0z9vn/YXdVvv29N3vD7dNMzjOcDAKx4HX0BAKAVAQUASwQUACwRUACwREABwBIBBQBLBBQALBFQALBEQAHAEgEFAEsEFAAsEVAAsERAAcASAQUASwQ0pQ82AXDBh76/ucMWT3SBgKZEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWIgAJuIKAKEVDADQRUIQIKuIGAKkRAATcQUIUIKOAGAqoQAQXcQEAVIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWo0oCuvP72DZlsIJBzBFShCgP69okiF2Szg0C+EVCFKgzopSLS5elsthDINQKqUGUBXdc9CKick9EeAnlGQBWqLKAPigw5Uo5dl9EmAjlGQBWqLKAXi9xxusjjGW0ikGMEVKHKAtpX5N15ItMz2kQgxwioQhUFdO0R8gP/dZFRWe0ikF8EVKGKArpMZITfdLQcuzGrbQRyi4AqVGlAR/r+MJFXs9pGILcIqEIWAb1c5O6sthHILQKqkEVA54tckdU2ArlFQBWyCOjrImdktY1AbhFQhSwCurOrmKy2EcgtAqqQRUD9eum6Jqt9BPKKgCpkE9DxIouy2kcgrwioQjYBnS5ye1b7COQVAVXIJqDzRa7Kah+BvCKgCtkE9GWRM7PaRyCvCKhCNgHdLNI3q30E8oqAKmQTUL+7HJPVPgJ5RUAVsgroIJEVWW0kkFMEVCGrgJ4v8mRWGwnkFAFVyCqgs0RuzmojgZwioApZBfRekWlZbSSQUwRUIauALhaZkNVGAjlFQBWyCuhfRfpltZFAThFQhawC6h8jx2a1kUBOEVCF7ALaT+TNrHYSyCcCqpBdQM8SWZjVTgL5REAVsgvoNfx7TECNEVCF7AJ6p8g1We0kkE8EVCG7gL4gcm5WOwnkEwFVyC6g60ROzmongXwioArZBXTvkfL9rHYSyCcCqpBdQP3e0mV1VlsJ5BIBVcgyoONFns9qK4FcIqAKWQb0CpG7stpKIJcIqEKWAb1dZEZWWwnkEgFVyDKgi0TOy2orgVwioApZBnS9yOCsthLIJQKqkGVAm4+S72a1lUAuEVCFLAPq9+XfYwJqioAqZBvQc0WeyGovgTwioArZBvSXIvNazr9609M131AgZwioQrYBfVDk4tLpu7pJVwoKVIeAKmQb0BUio4pnFx8p/JpjoFoEVCHbgO4+Qk4onj1DCChQNQKqkG1A/R9Ll7ejk3/sQkCB6hFQhawDer7II9HJC0W6E1CgWgRUIeuA/lpkdnju3W/JEZcTUKBaBFQh64A+L3JmeO4WkYlzCChQLQKqkHVAt3WVH4Xnhos8SUCBqhFQhawD6v9YZOmmTa93leOaCChQNQKqkH1Ap0a/G/4akWk+AQWqRkAVsg/oQyLnbNrwI5FlBBSoHgFVyD6gWw+X76z/vchAn4AC1SOgCtkH1D9V5K4BIvcQUKAGCKhCVQT0fpFjRX60m4ACNUBAFaoioHt6hj/D+YBPQIEaIKAKVRFQ/9VjRC4N7xBQoGoEVKFqAupvmP9idEtAgaoRUIWqCmgJAQWqRkAVIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWIgAJuIKAKEVDADQRUIQIKuIGAKkRAATcQUIUIKOAGAqoQAQXcQEAVIqCAGwioQgQUcAMBVYiAAm7IW0DXGtP25NLLTm8cOHHWhpTDs7Hvpdo8QkABNxBQv3mGMT2G9TOm/pY0wzNgzFoCCihEQP3fm8YHdgf/M1xnzDMphmeAgAI6EVB/lHmscGeGmZxieAbmz99GQAGFCOh2Y7YV7i02Q/728MwQUECd/AR08ZRhDeMfXlOI0apppzUMmfJSeHebMUsLI/ZuK5R0ySWje58x7Y3wbtiumeZX0elVps+H8acmvXn5qQ2nzn6vnUmabhrbOPa67ZuvGN0w8qZdfviufc1D4xqGTV3s+/G38LHpY9fcioACbshNQG+uM3VD6swlUYx+X28aRzcac334yFgz+JGdZSNvqTP1w4PRD/iFqr1mhjSH528yM5JPjbuv3vQaUW8Gbm47yaRzFszpZcYPODu8meWHzbzI/PSGST3qfuvHAhqbPnbNZQgo4Ia8BHSJMTfs9LddacIYvV3f77lmv3lRf/N08NCKgcY0XHDHiubCyKWm7ne7/Z2/ML3/Wqha85DoJWrziPAm/tSYVfV1dzf5WyeZS9tOMmWv7y8wZnJwM98M8sNm1oUTvNLbLC8PaGz62DVHZl8deXlHBd7dd0Bvr2QeAG00+f6HHbZ44o90lgE9P8xaUMHxYYyuKH7cvtBcGN5suXNCXRCp/jeELx39C8xV0cizw1eKUdXmRq8Hl5oxzW2eWm6quTa8eb/+pL1tJlkZHLzZcuOHzbwketJcM6k8oLHpY9cc6S6Ruyr5yv+y74AuqGQeAE7LMKDNfc3r0Z2HwxiNNSNGh4abAcXHtz07a6gxJ68O7vYv/pXoY2ZisWpvmWFBOmebu/32ntpiUPGJby/f02aSPX75jR82s/AKdqUZWB7Q8unj1xwhoAD2IcOAbjHm/ejOG2GMTjIlvVqHNL841JwfvIA05oPiyAHFqjWPMcv8vYPqt/j7eGpke2kJv91JEjfGrCg9a0dZQMunj19z5PGHIiver8Db+w7orZXMA6CN4DXRtg5bPPFHOsOAttRtWRijMabsr1+nTHq3eG+JqfuwtX3LTJ9S7W4zc/yXzdTwbOypMUHvtpfutzdJMqCFl6jvGbO1LKDl08evuRwfIgFuyMuHSAOKb4cfC2N0kflTdPDhhvd8f6h5sDhmW1SsfsW0PW4mlGq3PngPP928EJ6NPTUmeMe9Mrqz/MVt7U2SDOij0YDFpl/5W/jY9LFrLkdAATfkJaA/K3xo0zwxjNGC4o8czTTzfP9aM7T4UvgpM9wPP7qZHo08x8xsid5Es6TP4KbwXuypceeb2eHNnv5129udJBHQidGn/pPMBeUBjU0fu+ZyBBRwQ14CGrwNvn6nv+Pa6FuCdg01c3b5TffVNawPXl42mmEPbGxq3nJvH3OnH/6NY91te8LvQGrY2BK9e83p5sZonthT/fnzm1qXeMPU39Pk75xuftr+JImAmmt3+DtmGfNGeUBj08euuRwBBdyQl4D6c4ypG1pn5kUxeqmXqR95kqlbGD7y5xFBoXr0Cv4zPXpRONeYniPqTMMjfkv0tvQwZk1hnthTjdlVtsQtwZNGNZj+G9ufJBHQqdH11N3sx76RPjZ97JrLEFDADbkJaPMzU4Y3jF/U8gOTg3qO/PnqwkNNj04a09h33LTlxaGLLh7dcNq06KOl0o+h/8ycU5qo/KnxgPqvTx3ZMGb21n1MkgjomkfG9ho6+ZXCNOU/ytk6ffyaWxFQwA25CWgm9kTf2WkjaqYtAgq4gYBWY11v22cSUKATIKDVmDrd9pkEFOgECGg1nrB9B09Agc6AgHYMAgp0AgRUIQIKuIGAKkRAATcQUIUIKOAGAqoQAQXcQEAVIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWIgAJuIKAKEVDADQRUoaoC+syUuR+GtwQUqBoBVaiagN7bRWT4bp+AAjVAQBWqIqAfdJfAr3wCCtQAAVWoioDOE2noIt/aSkCBGiCgClUR0P4iT4wTmUNAgRogoArZB3SdyImbnhExewkoUD0CqpB9QO8SmbxpU/AydBEBBapHQBWyD+hPRO7ftOnXIucTUKB6BFQh+4CeKF3f2bTp7SPlqO0EFKgaAVXIOqCbRBrDcxNE5hNQoGoEVCHrgD4RvHcPz90vMpSAAlUjoApZB/SXIjeG5zb8ICgpAQWqRUAVsg5o8NZ9YXTySpFuBBSoFgFVyDqgddJ1bXRyebfwJzoJKFAdAqqQbUC3d5GexbOTCShQPQKqkG1AXxM5o3j2zeODgP42gz0F8oSAKmQb0HtEriidfuFHcuwrtd9SIFcIqEK2AZ0ucnvL+Q3Pr6r5hgI5Q0AVsg3oeJFFWe0lkEcEVCHbgPaSrmuy2ksgjwioQpYB3XOEnJDVVgK5REAVsgzoOyIjstpKIJcIqEKWAX1KZFJWWwnkEgFVyDKg80Suy2orgVwioApZBvSS6F9TBlAzBFQhy4COEXk5q60EcomAKmQZUCOHr8tqK4FcIqAK2QV0d1f5UUYbCeQUAVXILqDvBHey2kkgnwioQnYBXShyYVY7CeQTAVXILqC/E5mV1U4C+URAFbIL6DSRBVntJJBPBFQhu4COE3kho40EcoqAKmQX0N7S5d2sdhLIJwKqkFVA9x4p389qI4GcIqAKWQV0vcjgrDYSyCkCqpBVQF8QOTerjQRyioAqZBXQO0WuyWojgZwioApZBXS6yB1ZbSSQUwRUIauAThR5NquNBHKKgCpkFdCTRPg9xkBtEVCFbALafJR8N6t9BPKKgCpkE1C+iwmoPQKqkE1AF4mcl9U+AnlFQBWyCejvRGZmtY9AXhFQhWwCeqnIPVntI5BXBFQhm4Cewm+UA2qOgCpkE9AfSLf1We0jkFcEVCGLgG4V6Z3VNgK5RUAVsgjoSyJnZbWNQG4RUIUsAvo7kRlZbSOQWwRUIYuA/qfI/VltI5BbBFQhi4D2FVme1TYCuUVAFao0oMP8nYfL8VntIpBfBFShigK6/ij59t4/iozNaheB/CKgClUU0E3DRN74pch1GW0ikGMEVKHKAnq1yJzB/E54IAMEVKHKAvqMiOkiP9yY0SYCOUZAFaosoBuNBC7JaA+BPCOgClUW0E3XB/3s9lo2WwjkGgFVqMKArh8tXedms4NAvhFQhSoM6KaNC3n9CWSBgCpUaUABZIOAKkRAATcQUIUIKOAGAqoQAQXcQEAVIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWIgAJuIKAKEVDADQRUIQIKuIGAKkRAATcQUIUIKOAGAqoQAQXcQEAVIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWIgAJuIKAKEVDADQRUIQIKuIGAKkRAATcQUIUIKOAGAqoQAQXcQEAVIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABN6QN6HNT/uOaZbVePNEFApoSAQXckC6gGy/vKiLHLKjx4okuENCUCCjghnQBnSyRrvfUdvFEFwhoSgQUcEOqgN4p0uXqP50mcvQrNV080QUCmhIBBdyQJqAbvityve/vGSNy8sZaLp7oAgFNiYACbkgT0JUijc3Bn9vNx4ncXsvFE10goCkRUMANKQM6NPqDe6/ICWtruHiiCwQ0JQIKuKGigDYPFPl1DRdPdIGApkRAATdUFFB/ociJG2q3eKILBDQlAgq4obKA+gNE7q7d4okuENCUCCjghgoD+geRQbVbPNEFApoSAQXcUGFAm04QWVSzxRNdIKApEVDADRUG1L9e5IKaLZ7oAgFNiYACbqg0oH/tJkevqtXiiS4Q0JQIKOCGSgPqnytyY60WT3SBgKZEQAE3VBzQRSJ9a7V4ogsENCUCCrih4oA296jdx0iJLhDQlAgo4IaKAxp+jDSpRosnukBAUyKggBsqD+iGrnJsjX4gPtEFApoSAQXcUHlA/bE1+zeZEl0goCkRUMANFgF9RGR4bRZPdIGApkRAATdYBHTPcdL1tZosnugCAU2JgAJusAioP13k8posnugCAU2JgAJusAnoO13ke+tqsXiiCwQ0JQIKuMEmoP4pInfUYvFEFwhoSgQUcINVQB8WGVyLxRNdIKApEVDADVYBbfqhyLNtx619qcLPlhJdIKApEVDADVYB9W8QOTM56vkJ3UQmV7R4ogsENCUCCrjBLqBbj5bDX42NWX95VwnUVbR4ogsENCUCCrjBLqD+NJHzyoe8PTKo57e6END9goACbrAM6MYj5fA/tY5Y3ijSddoHXQnofkFAATdYBtS/QmRUy4ClPYOXn0/6PgHdPwgo4AbbgG7tLnJr8fEldSLf+bNPQPcXAgq4wTag/p0i3345evilE0SOWx6eI6D7BwEF3GAd0ObTRE5YHDx6xzEix6+MzhHQ/YOAAm6wDqi/2YgcfdE1g0SkfnXhFAHdPwgo4Ab7gPqrTpSCU7cUzxDQ/YOAAm6oIqD+5vPCb57/4R3NpRMEdP8goIAbqgmo76+7764Xm1oPCej+QUABN1QX0AQCun8QUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3dJaArjWm7cmll53eOHDirA0ph3esfV9Sm0cIKOCGThzQ5hnG9BjWz5j6W9IMt2HM2ppNQ0ABdTpxQH9vGh/YHXx51xnzTIrhNggokGudOKCjzGOFOzPM5BTDbdQooPPnbyOggEKdN6DbjdlWuLfYDPnbw63UKKARAgqooz+gi6cMaxj/8JpCZFZNO61hyJSXwrvbjFlaGLF3W6GkSy4Z3fuMaW+UmjTT/Co6vcr0+TD+1LhgbNO8kxtG37wzMcs0Eyr7iOrNy09tOHX2e+0s1nTT2Max123ffMXohpE37fLD9K55aFzDsKmLfT/+Fj52GbGvrRUBBdygPqA315m6IXXmkigyv683jaMbjbk+fGSsGfzIzrKRt9SZ+uHB6Af8Qq1eM0OiX0Zyk5mRfGpMMPbasXfO62MuS8zy0AxjLpvxfsvA++pNrxH1ZuDmtotNOmfBnF5m/ICzw5tZftjMi8xPb5jUo+63fiygscuIfW2h97dG3vsLABcEr4b+5h/HNysIaEWLJ55uE9Alxtyw0992pQkj83Z9v+ea/eZF/c3TwUMrBhrTcMEdK4q/smmpqfvdbn/nL0zvvxZq1TwkeonaPCK8iT81Jhg7Lgjxs6ZuR2KW+Fv4VfV1dzf5WyeZS9suNmWv7y8wZnJwM98Mip5ZFy70Sm+zvDygscuIfW2R7oXf4neXxf9QADrGlvQB7VnNOjYBPT/MVVDB8WFkrih+3L7QXBjebLlzQl0Qn/43hC8J/QvMVdHIs8NXgFGt5kav85aaMc1tnlouGBu2bmeUudgs8YBONdeGN+/Xn7S3zWIrg4M3W26iZ14SPWmumVQe0NhlxL62CAEF1HE4oM19zevRnYfDyIw1I0aHhpsBxce3PTtrqDEnh7+3vn/xr0QfMxOLtXrLDAvSOdvc7bf31BbB2OgvG6LMxWaJB3RQ8aG3l+9ps9gev/wmembhle5KM7A8oOWXEf/aIqMGRB7ZA8AFQUGa/taYv6QPaH1FiyeebhHQLcYU/g7yjTAyJ5mSXq1Dml8cas4PXhga80Fx5IBirZrHmGX+3kH14a+1b/epBcHYveFtmLn4LLGAbi9dit/uYokbY1aUnrWjLKDllxH/2srxIRLgBuUfIrVUa1kYmTGmbMopk94t3lti6j5sbdoy06dUsdvMHP9lMzU8G3tqXOm7iGIBjWaJBTTo3fbS/fYWSwa08BL1PWO2lgW0/DLiX1s5Agq4QXlA/QHFt7mPhZG5yPwpOvhww3u+P9Q8WByzLSpRv2KyHjcTShVbH7yHn25eCM/GnhpXHtD4LLGABu+4V0Z3lr+4rb3FkgF9NBqw2PQrfwsfu4zY11aOgAJu0B7QnxU+jGmeGEZmQfFHjmaaeb5/rRlafEv9lBnuhx/JTI9GnmNmtsRsolnSZ3BTeC/21LhYQGOzxP8O9HwzO7zZ079ue7uLJQI6MfrugEnmgvKAxi4j9rWVI6CAG7QHNHh7e/1Of8e10bf67Bpq5uzym+6ra1gfvLxsNMMe2NjUvOXePuZOP/ybxLrb9oTfWdSwsSVm95rTzY3RPLGn+vPnN7UuEQtobJbg1But494w9fc0+Tunm5+2v1gioObaHf6OWdEMrQGNXUbsaytHQAE3aA+oP8eYuqF1Zl4UmZd6mfqRJ5m6heEjfx4RlKdHr+A/06MXe3ON6TmizjQ80hqzLT2MWVOYJ/ZUY3a1rhALaGyW4E32wPM2twy8JTg9qsH039j+YomATo2uu+5mP/aN9LHLiH1tZQgo4Ab1AW1+ZsrwhvGLWn4QclDPkT9fXXio6dFJYxr7jpu2vDh00cWjG06b9m5rxcJ3yeeUJip/6n8R0PJZ/OdG9xxU9uMAr08d2TBm9tZ9LJYI6JpHxvYaOvmVlpnb+QriX1srAgq4QX1AM7HHJL/Fqtaq+mdICCjgBgLannW9s16BgAKdAAFtz9TpWa9AQIFOgIC254ms38ETUKAzIKAdg4ACnQABVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwQ1UB3X7buWOnv9Z6TED3DwIKuKGagD57fPRLdsdvKJ0goPsHAQXcUEVA/3B44beUy3eeL54hoPsHAQXcYB/Qxd1EBj74x5nHihzxQOEUAd0/CCjgBuuAbjtR5Iy1waNvDBLpend0joDuHwQUcIN1QC8RaVwTPbz2DJEut4fnCOj+QUABN9gGdFlX6fZC8fENZwUFDX+5JQHdPwgo4AbbgJ4ucknLgA3nisjUXQR0PyGggBssA7pYpPs7rSM2TgoK2vg4Ad0/CCjgBsuAjhOZGRszu2v0HU0EdH8goIAb7AK6sot0Xx0f9HiPMKANFS2e6AIBTYmAAm6wC+hFItOSo9bdOqau190VLZ7oAgFNiYACbrAK6NZ/l27La7B4ogsENCUCCrjBKqC/Fjm7FosnukBAUyKggBtsAtrcU+TpWiye6AIBTYmAAm6wCegikT41WTzRBQKaEgEF3GAT0HNFbqzJ4okuENCUCCjgBouAbjlSjl5Vk8UTXSCgKRFQwA0WAZ0ncm5tFk90gYCmREABN1gEtI/Ik7VZPNEFApoSAQXcUHlAXxPpWaPFE10goCkRUMANlQd0isgvarR4ogsENCUCCrih4oDuOEaOqMVPIYUSXSCgKRFQwA0VB3S+yNhaLZ7oAgFNiYACbqg4oCeL3F+rxRNdIKApEVDADZUGdKnICRtqtXiiCwQ0JQIKuKHSgE4WuaZmiye6QEBTIqCAGyoM6JajavMP2RUkukBAUyKggBsqDOj1ImfVbvFEFwhoSgQUcENlAf3wOJHnard4ogsENCUCCrihsoDeLDK8hosnukBAUyKggBsqCuj24AXoozVcPNEFApoSAQXcUFFAp9f2BSgBtURAATekDOj3twZ/bl89XLo+X8vFE10goCkRUMANaQK6oa/Iabv8NT8UmVzTxRNdIKApEVDADWkCuunFo0T6XfM9kYZ3a7p4ogsENCUCCrghVUA33dNNQj94rbaLJ7pAQFMioIAb0gV006MnBP0c/kaNF090gYCmREABN6QM6KYNj9z5x5ovnugCAU2JgAJuSBvQTCS6QEBTIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWIgAJuIKAKEVDADQRUIQIKuIGAKkRAATcQUIUIKOAGAqoQAQXcQEAVIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWIgAJuIKAKEVDADQRUIQIKuIGAKkRAATcQUIUIKOAGAqoQAQXcQEAVIqCAGwioQgQUcAMBVYiAAm4goAoRUMANBFQhAgq4gYAqREABNxBQhQgo4AYCqhABBdxAQBUioIAbCKhCBBRwAwFViIACbiCgChFQwA0EVCECCriBgCpEQAE3EFCFCCjgBgKqEAEF3EBAFSKggBsIqEIEFHADAVWIgAJuIKAKEVDADQRUIQIKuOGxW255u8MWT3SBgAJQ5SyRFR19DSUEFIAqBBQALBFQALBEQAHAEgEFAEsEFAAsXdi9+5sdfQ0lBBQALBFQALBEQAHAEgEFAEsEFAAsEVAAsERAAcASAQWgxV1mbfHe+qsG1w++cl2HXo1PQAGoseuUUkBX/NiYwcY0Lu/YCyKgAG0eX74AAAb+SURBVHRoWnKhKQa0abS54D1/8/lmVFPHXhMBBaDBjfXGlAK60AzYGdzs6G+e6diLIqAANHj46quvLgX0KjMjur3WTO/ISyKgAPQoBfQc81R0+6Q5ryMvh4AC0KMU0FHmleh2sTmlIy+HgALQoxTQRvNWdPuW6dOBV+MTUAB6tAb07ej2TdPQkZdDQAHo0fYt/MiOvBwCCkCP1g+Rno5unzLnduTlEFAAepQCeqWZFd3OMld15OUQUAB6lAL6tBm8O7jZM5hvpAeAdFp+lHOUuXyPv+cyM5of5QSAVEoB9Zc3msYJvU2flR17PQQUgBotAfXXXTmoftBVGzr0anwCCgDWCCgAWCKgAGCJgAKAJQIKAJYIKABYIqAAYImAAoAlAgoAlggoAFgioABgiYACgCUCCgCWCCgAWCKg6CS+68V92X6q6PlSu0trO/8/tTn3yXDNtqfhNgKKTqK9gFomiYAiJQKKTmLBLyKf97zCnZv8KgL6ldWr19f4+mLzt72sd1evJqD6EFB0Lv/klf1/2jqg2ZZsH/MTUH0IKDqXWEA/+GCbzRwEFCkRUHQusYBaIqBIiYCic4kFtHgQlumObx/6sS+dvNxfN+IfDvpy3XPFAUtP++dPfuZfT/lTfI6Wkq0689+/8PGvfm/u7n0MX3b6P3/q0C5nlH7R2bMnf+UTh3x1yHOtsywd+sWP/fejZ24vnHnox1846B/6LS7Nn5ydgOpDQNG5tB/Qr030/vHoQz3vkN984YD/978874DHw/PNVxxY/Mj+P/aUz1Eq2cyPFh/++pb2hjf/vHh8yPzwcM+ppW8AOGV3cZY/fPKj3/zmQZ73ja3B8e6TC49+fH5h/sTsBFQjAorOpf2AHvCJeb7/3reDWn1ukd98pucdFZ6/zvM+e/bNvxl3iOeNKp+jWLIHD/AOPnXegiv/t+f1a2/4DM87cOScW8Ye7B0a/nryCcHhqLk3jg66OKEwy2Gf6R2Uc8XXPe/M4Pj04DIGXTert/epaP7k7ARUIwKKzqX9gHqXhbfPBXeuD24/OND7dHCz+VPeNzaF51f/T897vGyOYsmCV4x3h7fv/Tfv03vbDl93sPfJ6FkLDwoD+brnffKJ8PCpIJBLCqt+qzk88YjnHe77r3jex+4LD68rfMNnYnafgGpEQNG57COgH4S32z3vIzvDO1+Kzk/3vKWFcc/GX4IWSyae95fo+LaLL36/7fBJnndW4biP18X3x3neuYXDswsvQYNVH/WLywbzneZ5ZxQePz46TszuE1CNCCg6l/YD+qXCcekHPAvne3j/Vhy39zDv/5TNUSxZX8/r9Wrr2eTwoz3vrcLxO4896fv/5nnvFA7f8sKghn9xsLNsvn/1vBWFwwXRcWJ2n4BqREDRuezrU3i//E7h/DfKf/Lz82VzFIctOzQ4/42Jt64qnE0O/3vvY3vLnvRZ7+PFw70HeZ+LZvnH8vk+0zJ8eXScmN0noBoRUHQuFQT0q+VF/HjZHKVha0/9u+ixf/nPD9oZfmDpdW3Bga3/fMmXvAPLVy3cax2+o/BIfHafgGpEQNG5VBDQb3o/bH+O1pI1PX9pwxeCyH1xXdvhh3qHNJcdlr0C/bj3Wb9NQA/zPtZUOFxZeqR8dp+AakRA0blUENAfe19sf454yZoX9vC84W2H/1/PK34H/arf/GZb2d+BvhO8NffbBLSL5y0vHN5fPn9p9jbLQgMCis6lgoDO9LwnCuef/fKXrymbozis/9eHFI7/Gv3jdsnh4zzvZ4Xjs7zD9vpjPe8nhcNzCp+3JwI6oeVT+B7RcWJ2n4BqREDRuVQQ0C2f8r62Ojzc/E3vI++UzVEcNsQ76PXo+FbPO77t8CUHeJ9+Njxe/lmvl++/5nmfWhgePnGI5/3ZbxPQ10vfB3pz4ftAE7P7BFQjAorOpYKA+rOD5k2cd+dFX/K8C8rnKA77jef9/U9uu3fu4I963h3tDD/P8z56ytw7fvp33iFhCseFhzfeOOrAwg8eJQPqjw9/EulX1/XzvhYdJ2cnoBoRUHQulQS0+eIDCp+pf2Ri+cdBpWFNfUufuX/04vaGN51ZfPjTt4aHu0eWho/ZE1u1eG/3kMKjn3slOk7OTkA1IqDoXCoJqO+/OuKrBx/WddSy+Bwt459q/JfDDv7KMZPX+e0Pf3H4Vz9xWLexpX+8/ulB/+PgT3zl5OcSs7Tce6jxCwd9fsDK0nFydgKqDwEFkjqoZARUHwIKJBFQpERAgSQCipQIKJBEQJESAQWSos/GM/y98O3h98KrRECBJAKKlAgoAFgioABgiYACgCUCCgCWCCgAWCKgAGCJgAKAJQIKAJYIKABYIqAAYImAAoAlAgoAlggoAFgioABgiYACgCUCCgCW/j9DiYUF7CHPkAAAAABJRU5ErkJggg==" width="672" /></p> +<p>Here we get a performance benefit of a factor of 8.5 using the version of the differential equation model compiled from C code!</p> <p>This vignette was built with mkin 0.9.44.9000 on</p> <pre><code>## R version 3.3.2 (2016-10-31) ## Platform: x86_64-pc-linux-gnu (64-bit) diff --git a/vignettes/mkin.html b/vignettes/mkin.html index 172712f5..a8f7f2ba 100644 --- a/vignettes/mkin.html +++ b/vignettes/mkin.html @@ -246,23 +246,23 @@ div.tocify { # Define the kinetic model m_SFO_SFO_SFO <- mkinmod(parent = mkinsub("SFO", "M1"), M1 = mkinsub("SFO", "M2"), - M2 = mkinsub("SFO"), + M2 = mkinsub("SFO"), use_of_ff = "max", quiet = TRUE) # Produce model predictions using some arbitrary parameters sampling_times = c(0, 1, 3, 7, 14, 28, 60, 90, 120) d_SFO_SFO_SFO <- mkinpredict(m_SFO_SFO_SFO, - c(k_parent = 0.03, - f_parent_to_M1 = 0.5, k_M1 = log(2)/100, + c(k_parent = 0.03, + f_parent_to_M1 = 0.5, k_M1 = log(2)/100, f_M1_to_M2 = 0.9, k_M2 = log(2)/50), c(parent = 100, M1 = 0, M2 = 0), sampling_times) -# Generate a dataset by adding normally distributed errors with +# Generate a dataset by adding normally distributed errors with # standard deviation 3, for two replicates at each sampling time d_SFO_SFO_SFO_err <- add_err(d_SFO_SFO_SFO, reps = 2, - sdfunc = function(x) 3, + sdfunc = function(x) 3, n = 1, seed = 123456789 ) # Fit the model to the dataset |