From f6f4b876d6e37c8a3d4283494ed410603358bef9 Mon Sep 17 00:00:00 2001
From: Koen Derks
+ +
+ ## Functions Below is a list of the available functions in the current version of `jfa`, sorted by their occurrence in the standard audit sampling workflow. @@ -213,7 +222,7 @@ The `report()` function takes an object of class `jfaEvaluation` as returned by `report(object = NULL, file = NULL, format = "html_document")` -For an example report, see the following [link](https://github.com/koenderks/jfa/tree/master/man/figures/readme/report/report.pdf). +For an example report, see the following [link](https://github.com/koenderks/jfa/raw/master/man/figures/readme/report/report.pdf). ## References @@ -244,8 +253,8 @@ xBreaks <- plotData[["date"]] yBreaks <- pretty(c(0, plotData[["count"]], max(plotData[["count"]]) + 200), n = 6) # Releases -releases <- c("2020-01-01", "2020-08-01", "2020-09-01", "2020-11-01") -releaseLabs <- c("v0.1.0", "v0.2.0", "v0.3.0", "v0.4.0") +releases <- c("2020-01-01", "2020-08-01", "2020-09-01", "2020-11-01", "2021-01-01") +releaseLabs <- c("v0.1.0", "v0.2.0", "v0.3.0", "v0.4.0", "v0.5.0") p <- ggplot2::ggplot(plotData, ggplot2::aes(x = date, y = count)) + ggplot2::geom_bar(stat = "identity", fill = rgb(65, 104, 195, maxColorValue = 255), diff --git a/README.md b/README.md index d653c4e40..23b743874 100644 --- a/README.md +++ b/README.md @@ -29,6 +29,7 @@ prior probability distribution for use in these functions. - [Getting started](#getting-started) - [Benchmarks](#benchmarks) - [Contributing](#contributing) + - [Cheatsheet](#cheatsheet) - [Functions](#functions) - [References](#references) - [Package statistics](#package-statistics) @@ -44,7 +45,7 @@ workflow. For complete documentation of the package, see the [package website](https://koenderks.github.io/jfa/) or the [package -manual](https://cran.r-project.org/web/packages/jfa/jfa.pdf). +manual](https://cran.r-project.org/package=jfa/jfa.pdf). ### Authors @@ -126,6 +127,18 @@ adding a new statistical method, please check the Wiki page on [how to contribute a new method to jfa](https://github.com/koenderks/jfa/wiki/Methods). +## Cheatsheet + +The cheatsheet can help you get started with the `jfa` package and its +workflow. You can download a pdf version +[here](https://github.com/koenderks/jfa/raw/master/man/figures/cheatsheet/cheatsheet.pdf). + ++ + + +
+ ## Functions Below is a list of the available functions in the current version of @@ -275,7 +288,7 @@ interpretation, and saves the report to your local computer. `report(object = NULL, file = NULL, format = "html_document")` For an example report, see the following -[link](https://github.com/koenderks/jfa/tree/master/man/figures/readme/report/report.pdf). +[link](https://github.com/koenderks/jfa/raw/master/man/figures/readme/report/report.pdf). ## References diff --git a/doc/jfa.R b/doc/jfa.R new file mode 100644 index 000000000..f8a161d4d --- /dev/null +++ b/doc/jfa.R @@ -0,0 +1,43 @@ +## ---- eval=FALSE-------------------------------------------------------------- +# install.packages("jfa") + +## ---- eval=FALSE-------------------------------------------------------------- +# devtools::install_github("koenderks/jfa") + +## ----------------------------------------------------------------------------- +library(jfa) + +data("BuildIt") +BuildIt <- BuildIt[, c("ID", "bookValue")] # Let's remove the auditValue column for this example +head(BuildIt, n = 10) + +## ----------------------------------------------------------------------------- +planning(confidence = 0.95, expectedError = 0, likelihood = "poisson", N = 3500, materiality = 0.05) + +## ----------------------------------------------------------------------------- +planning(confidence = 0.95, expectedError = 0, likelihood = "poisson", N = 3500, minPrecision = 0.02) + +## ----------------------------------------------------------------------------- +selection(population = BuildIt, sampleSize = 150, units = "records", algorithm = "random") + +## ----------------------------------------------------------------------------- +selection(population = BuildIt, sampleSize = 150, units = "mus", algorithm = "interval", + bookValues = "bookValue") + +## ----------------------------------------------------------------------------- +result <- selection(population = BuildIt, sampleSize = 150, units = "mus", algorithm = "interval", + bookValues = "bookValue") + +sample <- result$sample +head(sample, n = 10) + +## ----------------------------------------------------------------------------- +evaluation(confidence = 0.95, method = "binomial", N = 3500, nSumstats = 60, kSumstats = 1, materiality = 0.05) + +## ----------------------------------------------------------------------------- +sample$auditValue <- sample$bookValue + +## ----------------------------------------------------------------------------- +evaluation(confidence = 0.95, method = "stringer", N = 3500, materiality = 0.05, + sample = sample, bookValues = "bookValue", auditValues = "auditValue", counts = sample$count) + diff --git a/doc/jfa.Rmd b/doc/jfa.Rmd new file mode 100644 index 000000000..0d6f6d56e --- /dev/null +++ b/doc/jfa.Rmd @@ -0,0 +1,149 @@ +--- +title: "Get started" +author: Koen Derks +date: "last modified: 07-11-2020" +output: + rmarkdown::html_vignette: + toc: true +vignette: > + %\VignetteIndexEntry{Get started} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteDepends{jfa} + %\VignetteKeywords{audit, evaluation, jfa, planning, sampling} + %\VignettePackage{jfa} + %\VignetteEncoding{UTF-8} +--- + +## Overview + +The `jfa` package allows you to plan, select, and evaluate an audit sample using classical and Bayesian statistics. + +Below it is explained how to install and use the `jfa` package. + +## Installation + +Install `jfa` from CRAN + +```{r, eval=FALSE} +install.packages("jfa") +``` + +or from GitHub + +```{r, eval=FALSE} +devtools::install_github("koenderks/jfa") +``` + +## Load data + +We can try out some examples with the `BuildIt` data set that is included in the package. It includes a population of 3500 transactions from a fictional construction company BuildIt, which we can use to illustrate statistical audit sampling using the `jfa` package (for more info, see ?BuildIt). + +```{r} +library(jfa) + +data("BuildIt") +BuildIt <- BuildIt[, c("ID", "bookValue")] # Let's remove the auditValue column for this example +head(BuildIt, n = 10) +``` + +Because this data set contains the *Ist* values of the transactions, we need to consider each monetary unit in the population as a possible unit of inference. + +For an example of the `jfa`'s audit sampling workflow see [The audit sampling workflow](https://koenderks.github.io/jfa/articles/v1auditWorkflow.html). + +## Using `planning()`: The basics + +Planning a sample using the `planning()` function requires that you have knowledge of the goal of the analysis and the statistical distribution of your data (`poisson`, `binomial`, or `hypergeometric`). + +### Testing against a performance materiality + +Let's take the goal of testing against a performance materiality with the `poisson` distribution as an example. + +Analysis goal: *Plan a sample such that, when zero misstatements are found in the sample, you can be 95% confident that the total misstatement in the population is lower than 5% of its total value.* + +Planning a sample with this goal can be done using the code below (specifically using the `materiality` argument). As you can see, the required sample size for this goal is 60 monetary units. + +```{r} +planning(confidence = 0.95, expectedError = 0, likelihood = "poisson", N = 3500, materiality = 0.05) +``` + +### Obtaining a minimum required precision + +The goal of the analysis can also involve obtaining a minimum precision about the estimate of the misstatement. + +Analysis goal: *Plan a sample such that, when zero misstatements are found in the sample, you can be 95% confident that the inaccuracy of your estimate is at most 2%.* + +Planning a sample with this goal can be done using the code below (specifically using the `minPrecision` argument). As you can see, the required sample size for this goal is 150 monetary units. + +```{r} +planning(confidence = 0.95, expectedError = 0, likelihood = "poisson", N = 3500, minPrecision = 0.02) +``` + +## Using `selection()`: The basics + +Selecting a sample using the `selection()` function requires that you have knowledge of the sampling units. Transactions can be selected using *record sampling* (also called attribute sampling) with `units = "records"`, or using *monetary unit sampling* with `units = "mus"`. + +It also requires knowledge of the sampling algorithm. Transactions can be selected using *random sampling* with `algorithm = "random"`, using *cell sampling* with `algorithm = "cell"`, or using fixed interval sampling (also known as systematic sampling) with `algorithm = "interval"`. + +### Record sampling + +For example, the code below samples 60 monetary units from the `BuildIt` data set using a *random record sampling* scheme. + +```{r} +selection(population = BuildIt, sampleSize = 150, units = "records", algorithm = "random") +``` + +### Monetary unit sampling + +As another example, the code below samples 150 monetary units from the `BuildIt` data set using a *fixed interval monetary unit sampling* scheme. + +```{r} +selection(population = BuildIt, sampleSize = 150, units = "mus", algorithm = "interval", + bookValues = "bookValue") +``` + +### Extracting the sample + +The selected sample is saved in the object that is returned by the `selection()` function and can be extracted via `$sample`. + +```{r} +result <- selection(population = BuildIt, sampleSize = 150, units = "mus", algorithm = "interval", + bookValues = "bookValue") + +sample <- result$sample +head(sample, n = 10) +``` + +## Using `evaluation()`: The basics + +After executing the audit and annotating the transactions in the sample with their *Soll* values, you can evaluate whether you have achieved your analysis goal via the `evaluation()` function. The function can be used with summary statistics from the sample, or with an annotated sample as input. + +For more details on how to use this function see the package vignettes: [Estimating the misstatement](https://koenderks.github.io/jfa/articles/v3estimation.html) and [Testing the misstatement](https://koenderks.github.io/jfa/articles/v4testing.html) + +### Summary statistics from the sample + +Suppose that in 60 transactions, you have found 1 misstatement. Using `nSumstats = 60` and `kSumstats = 1` you can specify the outcomes of the sample in the `evaluation()` function. Do not forget to specify your analysis goal using the `materiality` or `minPrecision` arguments. + +```{r} +evaluation(confidence = 0.95, method = "binomial", N = 3500, nSumstats = 60, kSumstats = 1, materiality = 0.05) +``` + +### Annotated sample + +Suppose that you have audited the transactions in the sample and have found no deviations from the *ist* values. + +```{r} +sample$auditValue <- sample$bookValue +``` + +You can evaluate the annotated sample using the `sample`, `bookValues`, `auditValues`, and `counts` arguments. The code below evaluates the analysis goal using the popular Stringer bound. You can find more information about which methods are implemented on the [home page](https://koenderks.github.io/jfa/). + +```{r} +evaluation(confidence = 0.95, method = "stringer", N = 3500, materiality = 0.05, + sample = sample, bookValues = "bookValue", auditValues = "auditValue", counts = sample$count) +``` + +## Using `auditPrior()`: Prior probability distributions + +The `auditPrior()` function allows you to perform the workflow as discussed above in a Bayesian fashion. Using a prior distribution is fairly simple, you only have to insert the returned object from the `auditPrior()` function as an argument for the `prior` argument in the `planning()` and `evaluation()` functions. + +For more information about how to create a prior distribution, see the vignettes [Constructing a prior distribution](https://koenderks.github.io/jfa/articles/v2priorDistributions.html). \ No newline at end of file diff --git a/doc/jfa.html b/doc/jfa.html new file mode 100644 index 000000000..c087851eb --- /dev/null +++ b/doc/jfa.html @@ -0,0 +1,643 @@ + + + + + + + + + + + + + + + +The jfa
package allows you to plan, select, and evaluate an audit sample using classical and Bayesian statistics.
Below it is explained how to install and use the jfa
package.
Install jfa
from CRAN
or from GitHub
+ +We can try out some examples with the BuildIt
data set that is included in the package. It includes a population of 3500 transactions from a fictional construction company BuildIt, which we can use to illustrate statistical audit sampling using the jfa
package (for more info, see ?BuildIt).
library(jfa)
+
+data("BuildIt")
+BuildIt <- BuildIt[, c("ID", "bookValue")] # Let's remove the auditValue column for this example
+head(BuildIt, n = 10)
## ID bookValue
+## 1 82884 242.61
+## 2 25064 642.99
+## 3 81235 628.53
+## 4 71769 431.87
+## 5 55080 620.88
+## 6 93224 501.76
+## 7 24331 466.01
+## 8 81460 295.20
+## 9 14608 216.48
+## 10 79064 243.43
+Because this data set contains the Ist values of the transactions, we need to consider each monetary unit in the population as a possible unit of inference.
+For an example of the jfa
’s audit sampling workflow see The audit sampling workflow.
planning()
: The basicsPlanning a sample using the planning()
function requires that you have knowledge of the goal of the analysis and the statistical distribution of your data (poisson
, binomial
, or hypergeometric
).
Let’s take the goal of testing against a performance materiality with the poisson
distribution as an example.
Analysis goal: Plan a sample such that, when zero misstatements are found in the sample, you can be 95% confident that the total misstatement in the population is lower than 5% of its total value.
+Planning a sample with this goal can be done using the code below (specifically using the materiality
argument). As you can see, the required sample size for this goal is 60 monetary units.
planning(confidence = 0.95, expectedError = 0, likelihood = "poisson", N = 3500, materiality = 0.05)
## # ------------------------------------------------------------
+## # jfa Planning Summary (Frequentist)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Materiality: 5%
+## # Minimum precision: Not specified
+## # Likelihood: poisson
+## # Expected sample errors: 0
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Sample size: 60
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Expected upper bound: 4.99%
+## # Expected precision: 4.99%
+## # ------------------------------------------------------------
+The goal of the analysis can also involve obtaining a minimum precision about the estimate of the misstatement.
+Analysis goal: Plan a sample such that, when zero misstatements are found in the sample, you can be 95% confident that the inaccuracy of your estimate is at most 2%.
+Planning a sample with this goal can be done using the code below (specifically using the minPrecision
argument). As you can see, the required sample size for this goal is 150 monetary units.
planning(confidence = 0.95, expectedError = 0, likelihood = "poisson", N = 3500, minPrecision = 0.02)
## # ------------------------------------------------------------
+## # jfa Planning Summary (Frequentist)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Materiality: Not specified
+## # Minimum precision: 2%
+## # Likelihood: poisson
+## # Expected sample errors: 0
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Sample size: 150
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Expected upper bound: 2%
+## # Expected precision: 2%
+## # ------------------------------------------------------------
+selection()
: The basicsSelecting a sample using the selection()
function requires that you have knowledge of the sampling units. Transactions can be selected using record sampling (also called attribute sampling) with units = "records"
, or using monetary unit sampling with units = "mus"
.
It also requires knowledge of the sampling algorithm. Transactions can be selected using random sampling with algorithm = "random"
, using cell sampling with algorithm = "cell"
, or using fixed interval sampling (also known as systematic sampling) with algorithm = "interval"
.
For example, the code below samples 60 monetary units from the BuildIt
data set using a random record sampling scheme.
## # ------------------------------------------------------------
+## # jfa Selection Summary
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Population size: 3500
+## # Requested sample size: 150
+## # Sampling units: Records
+## # Algorithm: Random sampling
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Obtained sample size: 150
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Proportion n/N: 0.04
+## # ------------------------------------------------------------
+As another example, the code below samples 150 monetary units from the BuildIt
data set using a fixed interval monetary unit sampling scheme.
selection(population = BuildIt, sampleSize = 150, units = "mus", algorithm = "interval",
+ bookValues = "bookValue")
## # ------------------------------------------------------------
+## # jfa Selection Summary
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Population size: 3500
+## # Requested sample size: 150
+## # Sampling units: Monetary units
+## # Algorithm: Fixed interval sampling
+## # Interval: 9354.81
+## # Starting point: 1
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Obtained sample size: 150
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Proportion n/N: 0.04
+## # Percentage of value: 4.25%
+## # ------------------------------------------------------------
+The selected sample is saved in the object that is returned by the selection()
function and can be extracted via $sample
.
result <- selection(population = BuildIt, sampleSize = 150, units = "mus", algorithm = "interval",
+ bookValues = "bookValue")
+
+sample <- result$sample
+head(sample, n = 10)
## rowNumber count ID bookValue
+## 1 1 1 30568 14.47
+## 2 24 1 1469 72.57
+## 3 50 1 58378 94.17
+## 4 73 1 64917 103.37
+## 5 96 1 50703 110.76
+## 6 123 1 91342 118.20
+## 7 146 1 63567 125.21
+## 8 167 1 10883 132.14
+## 9 195 1 94854 141.08
+## 10 218 1 66118 147.14
+evaluation()
: The basicsAfter executing the audit and annotating the transactions in the sample with their Soll values, you can evaluate whether you have achieved your analysis goal via the evaluation()
function. The function can be used with summary statistics from the sample, or with an annotated sample as input.
For more details on how to use this function see the package vignettes: Estimating the misstatement and Testing the misstatement
+Suppose that in 60 transactions, you have found 1 misstatement. Using nSumstats = 60
and kSumstats = 1
you can specify the outcomes of the sample in the evaluation()
function. Do not forget to specify your analysis goal using the materiality
or minPrecision
arguments.
evaluation(confidence = 0.95, method = "binomial", N = 3500, nSumstats = 60, kSumstats = 1, materiality = 0.05)
## # ------------------------------------------------------------
+## # jfa Evaluation Summary (Frequentist)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Materiality: 5%
+## # Minium precision: Not specified
+## # Sample size: 60
+## # Sample errors: 1
+## # Sum of taints: 1
+## # Method: binomial
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Most likely error: 1.67%
+## # Upper bound: 7.66%
+## # Precision: 6%
+## # Conclusion: Do not approve population
+## # ------------------------------------------------------------
+Suppose that you have audited the transactions in the sample and have found no deviations from the ist values.
+ +You can evaluate the annotated sample using the sample
, bookValues
, auditValues
, and counts
arguments. The code below evaluates the analysis goal using the popular Stringer bound. You can find more information about which methods are implemented on the home page.
evaluation(confidence = 0.95, method = "stringer", N = 3500, materiality = 0.05,
+ sample = sample, bookValues = "bookValue", auditValues = "auditValue", counts = sample$count)
## # ------------------------------------------------------------
+## # jfa Evaluation Summary (Frequentist)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Materiality: 5%
+## # Minium precision: Not specified
+## # Sample size: 150
+## # Sample errors: 0
+## # Sum of taints: 0
+## # Method: stringer
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Most likely error: 0%
+## # Upper bound: 1.98%
+## # Precision: 1.98%
+## # Conclusion: Approve population
+## # ------------------------------------------------------------
+auditPrior()
: Prior probability distributionsThe auditPrior()
function allows you to perform the workflow as discussed above in a Bayesian fashion. Using a prior distribution is fairly simple, you only have to insert the returned object from the auditPrior()
function as an argument for the prior
argument in the planning()
and evaluation()
functions.
For more information about how to create a prior distribution, see the vignettes Constructing a prior distribution.
+This vignette accompanies the jfa
R package and aims to show how it facilitates auditors in their standard audit sampling workflow (hereafter “audit workflow”). In this example of the audit workflow, we will consider the case of BuildIt. BuildIt is a fictional construction company in the United States that is being audited by Laura, an external auditor for a fictional audit firm. Throughout the year, BuildIt has recorded every transaction they have made in their financial statements. Laura’s job as an auditor is to make a judgment about the fairness of these financial statements. In other words, Laura needs to either approve or not approve BuildIt’s financial statements. To not approve the financial statements would mean that, as a whole, the financial statements contain errors that are considered material. This means that the errors in the financial statements are large enough that they might influence the decision of someone relying on the financial statements. Since BuildIt is a small company, their financial statements only consist of 3500 transactions that each have a corresponding recorded book value. Before assessing the details in the financial statements, Laura already tested BuildIt’s computer systems that processed these transactions and found that they were quite reliable.
In order to draw a conclusion about the fairness of BuildIt’s recorded transactions, Laura separates her audit workflow into four stages. First, she will plan the size of the subset she needs to inspect from the financial statements to make a well-substantiated inference about them as a whole. Second, she will select the required subset from the financial statements. Third, she will inspect the selected subset and determines the audit value (true value) of the transactions it contains. Fourth, she will use the information from her inspected subset to make an inference about the financial statements as a whole. To start off this workflow, Laura first loads BuildIt’s financial statements in R.
+ +In statistical terms, Laura wants to make a statement that, with 95% confidence, the maximum error in the financial statements is lower than what is considered material. She therefore determines that materiality, the maximum tolerable error in the financial statements, as 5%. Based on last year’s audit at BuildIt, where the maximum error turned out to be 2.5%, she expects at most 2.5% errors in the sample that she will inspect. Laura can therefore re-formulate her statistical statement as that she wants to conclude that, when 2.5% errors are found in her sample, she can conclude with 95% confidence, that the misstatement in the population is lower than the materiality of 5%. Below, Laura defines the materiality, confidence, and expected errors.
+# Specify the materiality, confidence, and expected errors.
+materiality <- 0.05 # 5%
+confidence <- 0.95 # 95%
+expectedError <- 0.025 # 2.5%
Many audits are performed according to the audit risk model (ARM), which determines that the uncertainty about Laura’s statement as a whole (1 - her confidence) is a factor of three terms: the inherent risk, the control risk, and the detection risk. Inherent risk is the risk posed by an error in BuildIt’s financial statement that could be material, before consideration of any related control systems (e.g., computer systems). Control risk is the risk that a material misstatement is not prevented or detected by BuildIt’s internal control systems. Detection risk is the risk that Laura will fail to find material misstatements that exist in an BuildIt’s financial statements. The ARM is practically useful because for a given level of audit risk, the tolerable detection risk bears an inverse relation to the other two risks. The ARM is useful for Laura because it enables her to incorporate prior knowledge on BuildIt’s organization to increase the required risk that she will fail to find material misstatements. According to the ARM, the audit risk will then be retained.
+\[ \text{Audit risk} = \text{Inherent risk} \,\times\, \text{Control risk} \,\times\, \text{Detection risk}\]
+Usually the auditor judges inherent risk and control risk on a three-point scale consisting of low, medium, and high. Different audit firms handle different standard percentages for these categories. Laura’s firm defines the probabilities of low, medium, and high respectively as 50%, 60%, and 100%. Because Laura performed testing of BuildIt’s computer systems, she assesses the control risk as medium (60%).
+ +Laura can choose to either perform a frequentist analysis, where she uses the increased detection risk as her level of uncertainty, or perform a Bayesian analysis, where she captures the information in the control risk in a prior distribution. For this example, we will show how Laura performs a Bayesian analysis. A frequentist analysis can easily be done through the following functions by setting prior = FALSE
. In a frequentist audit, Laura immediately starts at step 1 and uses the value adjustedConfidence
as her new value for confidence
.
# Adjust the required confidence for a frequentist analysis.
+adjustedConfidence <- 1 - ((1 - confidence) / (ir * cr))
In a Bayesian audit, Laura starts at step 0 by defining the prior distribution that corresponds to her assessment of the control risk. She assumes the likelihood for a sample of \(n\) observations, in which \(k\) were in error, to be \(\text{binomial}(n, k)\). Using the auditPrior()
function, she can create a prior distribution that incorporates the information in the risk assessments from the ARM. For more information on how this is done, see Derks et al. (2019).
# Step 0: Create a prior distribution according to the audit risk model.
+priorResult <- auditPrior(confidence = confidence, likelihood = "binomial", method = "arm", expectedError = expectedError, materiality = materiality, ir = ir, cr = cr)
Laura can inspect the resulting prior distribution with the print()
function.
## # ------------------------------------------------------------
+## # jfa Prior Distribution Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Expected sample errors: 2.5%
+## # Likelihood: binomial
+## # Specifics: Inherent risk = 1; Internal control risk = 0.6; Detection risk = 0.08
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Prior distribution: beta(a = 2.275, ß = 50.725)
+## # Implicit sample size: 51
+## # Implicit errors: 1.27
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Upper bound: 0.1
+## # Precision: 0.07
+## # Mode: 0.02
+## # Mean: 0.04
+## # Median: 0.04
+## # ------------------------------------------------------------
+The prior distribution can be shown by using the plot()
function.
Now that the prior distribution is specified, Laura can calculate the required sample size for her desired statement by using the planning()
function. She uses the priorResult
object as input for the planning()
function to use her prior distribution.
# Step 1: Calculate the required sample size.
+planningResult <- planning(confidence = confidence, expectedError = expectedError, materiality = materiality, prior = priorResult)
Laura can then inspect the result from her planning procedure by using the print()
function. Her result tells her that, given her prior distribution she needs to audit a sample of 169 transactions so that, when at most 4.23 errors are found, she can conclude with 95% confidence that the maximum error in BuildIt’s financial statements is lower the materiality of 5%.
## # ------------------------------------------------------------
+## # jfa Planning Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Materiality: 5%
+## # Minimum precision: Not specified
+## # Likelihood: binomial
+## # Prior distribution: beta(a = 2.275, ß = 50.725)
+## # Expected sample errors: 4.23
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Sample size: 169
+## # Posterior distribution: beta(a = 6.5, ß = 215.5)
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Expected upper bound: 4.99%
+## # Expected precision: 2.49%
+## # Expected Bayes factor-+: 9.32
+## # ------------------------------------------------------------
+Laura can inspect how the prior distribution compares to the expected posterior distribution by using the plot()
function. The expected posterior distribution is the posterior distribution that would occur if Laura actually observed a sample of 169 transactions, from which 4.223 were in error.
Laura is now ready to select the required 169 transactions from the financial statements. She can choose to do this according to one of two statistical methods. In record sampling (units = "records"
), inclusion probabilities are assigned on the transaction level, treating transactions with a high value and a low value the same, a transaction of $5,000 is equally likely to be selected as a transaction of $1,000. In monetary unit sampling (units = "mus"
), inclusion probabilities are assigned on the level of individual monetary units (e.g., a dollar). When a dollar is selected to be in the sample, the transaction that includes that dollar is selected. This favors higher transactions, as a transaction of $5,000 is five times more likely to be selected than a transaction of $1,000.
Laura chooses to use monetary unit sampling, as she wants to include more high-valued transactions. The selection()
function allows her to sample from the financial statements. She uses the planningResult
object as an input for the selection()
function.
# Step 2: Draw a sample from the financial statements.
+samplingResult <- selection(population = BuildIt, sampleSize = planningResult, units = "mus", bookValues = "bookValue", seed = 999)
Laura can inspect the outcomes of her sampling procedure by using the print()
function.
## # ------------------------------------------------------------
+## # jfa Selection Summary
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Population size: 3500
+## # Requested sample size: 169
+## # Sampling units: Monetary units
+## # Algorithm: Random sampling
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Obtained sample size: 169
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Proportion n/N: 0.05
+## # Percentage of value: 4.65%
+## # ------------------------------------------------------------
+The selected sample can be isolated by indexing the sample
object from the sampling result. Now Laura can execute her audit by annotating the sample with their audit value (for exampling by writing the sample to a .csv file using write.csv()
. She can then load her annotated sample back into R for further evaluation.
# Step 3: Isolate the sample for execution of the audit.
+sample <- samplingResult$sample
+
+# To write the sample to a .csv file:
+# write.csv(x = sample, file = "auditSample.csv", row.names = FALSE)
+
+# To load annotated sample back into R:
+# sample <- read.csv(file = "auditSample.csv")
For this example, the audit values of the sample are already included in the auditValue
column of the dataset .
Using her annotated sample, Laura can perform her inference with the evaluation()
function. By passing the priorResult
object to the function, she automatically sets method = "binomial"
to be consistent with her prior distribution.
# Step 4: Evaluate the sample.
+evaluationResult <- evaluation(sample = sample, materiality = materiality, prior = priorResult, bookValues = "bookValue", auditValues = "auditValue")
Laura can inspect the outcomes of her inference by using the print()
function. Her resulting upper bound is 3.518%, which is lower than the materiality of 5%. The output tells Laura the correct conclusion immediately.
## # ------------------------------------------------------------
+## # jfa Evaluation Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Materiality: 5%
+## # Minium precision: Not specified
+## # Sample size: 169
+## # Sample errors: 3
+## # Sum of taints: 1.8
+## # Method: binomial
+## # Prior distribution: beta(a = 2.275, ß = 50.725)
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Posterior distribution: beta(a = 4.075, ß = 217.925)
+## # Most likely error: 1.39%
+## # Upper bound: 3.52%
+## # Precision: 2.13%
+## # Bayes factor-+: 108.94
+## # Conclusion: Approve population
+## # ------------------------------------------------------------
+She can inspect the prior and posterior distribution by using the plot()
function. The shaded area quantifies the area under the posterior distribution that contains 95% of the probability, which ends at 3.518%. Therefore, Laura can state that there is a 95% probability that the misstatement in BuildIt’s statements is lower than 3.518%.
Since the 95% upper confidence bound on the misstatement in BuildIt’s financial statements is lower than the materiality, Laura can conclude that the financial statements as a whole do not contain material misstatement. Therefore, she can approve BuildIt’s financial statements.
+Bayesian statistics allows you to incorporate existing information into the statistical analysis and revise this information using the information from the sample, possibly increasing your efficiency in the sampling procedure. For example, when you have information that indicates a low-risk profile for your client, you may require less evidence from the audit sampling procedures. Be aware that all information that you incorporate into the statistical analysis should be justified.
+Bayesian statistics incorporates existing information into the sampling procedure using a prior probability distribution that reflects your current knowledge about the misstatement in the population. The prior distribution is created using existing information, and is therefore generally created before the planning stage in the procedure.
+An important question is how to incorporate various kinds of existing information into the prior distribution. jfa
offers six methods to create a prior distribution. These methods are explained below.
First, let’s set some default options for the confidence, performance materiality, the likelihood, and the expected errors.
+confidence <- 0.95 # 95% confidence
+likelihood <- "binomial" # Binomial likelihood
+materiality <- 0.05 # Performance materiality of 5%
+expectedError <- 0 # Zero errors expected in sample
method = "none"
)You can refrain from incorporating explicit information in the prior distribution, and still use Bayesian statistics, using method = none
. As an example, the code below incorporates no explicit information into a prior distribution
prior1 <- auditPrior(confidence = confidence, likelihood = likelihood, expectedError = expectedError,
+ materiality = materiality, method = "none")
+prior1
## # ------------------------------------------------------------
+## # jfa Prior Distribution Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Expected sample errors: 0%
+## # Likelihood: binomial
+## # Specifics: None
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Prior distribution: beta(a = 1, ß = 1)
+## # Implicit sample size: 0
+## # Implicit errors: 0
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Upper bound: 0.95
+## # Precision: NaN
+## # Mode: NaN
+## # Mean: 0.5
+## # Median: 0.5
+## # ------------------------------------------------------------
+You can visually inspect the prior distribution using the plot()
function.
method = "arm"
)You can incorporate the risk assessments from the Audit Risk Model (inherent risk and internal control risk) using method = "arm
in combination with the ir
and cr
arguments. As an example, the code below incorporates the information that the inherent risk is equal to 90% and that the internal control risk is equal to 60% into a prior distribution.
prior2 <- auditPrior(confidence = confidence, likelihood = likelihood, expectedError = expectedError,
+ materiality = materiality, method = "arm", ir = 0.9, cr = 0.6)
+prior2
## # ------------------------------------------------------------
+## # jfa Prior Distribution Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Expected sample errors: 0%
+## # Likelihood: binomial
+## # Specifics: Inherent risk = 0.9; Internal control risk = 0.6; Detection risk = 0.09
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Prior distribution: beta(a = 1, ß = 13)
+## # Implicit sample size: 12
+## # Implicit errors: 0
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Upper bound: 0.21
+## # Precision: 0.21
+## # Mode: 0
+## # Mean: 0.07
+## # Median: 0.05
+## # ------------------------------------------------------------
+You can visually inspect the prior distribution using the plot()
function.
method = "median"
)You can incorporate the assumption that tolerable misstatement is equally likely as intolerable misstatement using method = "median"
. As an example, the code below incorporates this assumption into a prior distribution.
Note: This method requires that you specify a value for the materiality
.
prior3 <- auditPrior(confidence = confidence, likelihood = likelihood, expectedError = expectedError,
+ materiality = materiality, method = "median")
+prior3
## # ------------------------------------------------------------
+## # jfa Prior Distribution Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Expected sample errors: 0%
+## # Likelihood: binomial
+## # Specifics: p(T < 0.05) = p(T > 0.05) = 0.5
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Prior distribution: beta(a = 1, ß = 13.513)
+## # Implicit sample size: 12.51
+## # Implicit errors: 0
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Upper bound: 0.2
+## # Precision: 0.2
+## # Mode: 0
+## # Mean: 0.07
+## # Median: 0.05
+## # ------------------------------------------------------------
+You can visually inspect the prior distribution using the plot()
function.
method = "hypotheses"
)You can assign custom probabilities to the hypothesis of tolerable misstatement (using pHmin
) and/or the hypotheses of intolerable misstatement (using pHplus
) in combination with method = "hypotheses
. As an example, the code below incorporates the information that the hypothesis of tolerable misstatement has a probability of 60% into a prior distribution.
Note: This method requires that you specify a value for the materiality
and that the expected errors are zero.
prior4 <- auditPrior(confidence = confidence, likelihood = likelihood, expectedError = expectedError,
+ materiality = materiality, method = "hypotheses", pHmin = 0.6)
+prior4
## # ------------------------------------------------------------
+## # jfa Prior Distribution Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Expected sample errors: 0%
+## # Likelihood: binomial
+## # Specifics: p(T < 0.05) = 0.6; p(T > 0.05) = 0.4
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Prior distribution: beta(a = 1, ß = 17.864)
+## # Implicit sample size: 16.86
+## # Implicit errors: 0
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Upper bound: 0.15
+## # Precision: 0.15
+## # Mode: 0
+## # Mean: 0.05
+## # Median: 0.04
+## # ------------------------------------------------------------
+You can visually inspect the prior distribution using the plot()
function.
method = "sample"
)You can incorporate information from an earlier sample into the prior distribution using method = "sample
in combination with sampleN
and sampleK
. As an example, the code below incorporates the information from an earlier sample of 30 transactions, in which 0 misstatements were found, into a prior distribution.
prior5 <- auditPrior(confidence = confidence, likelihood = likelihood, expectedError = expectedError,
+ materiality = materiality, method = "sample", sampleN = 30, sampleK = 0)
+prior5
## # ------------------------------------------------------------
+## # jfa Prior Distribution Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Expected sample errors: 0%
+## # Likelihood: binomial
+## # Specifics: Earlier sample of 30 transactions with 0 errors
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Prior distribution: beta(a = 1, ß = 31)
+## # Implicit sample size: 30
+## # Implicit errors: 0
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Upper bound: 0.09
+## # Precision: 0.09
+## # Mode: 0
+## # Mean: 0.03
+## # Median: 0.02
+## # ------------------------------------------------------------
+You can visually inspect the prior distribution using the plot()
function.
method = "factor"
)You can incorporate information from last years results, weighted by a factor, into the prior distribution using method = "factor
in combination with sampleN
and sampleK
. As an example, the code below incorporates the information from a last years results (a sample of 58 transactions in which 0 misstatements were found), weighted by a factor 0.7, into a prior distribution.
prior6 <- auditPrior(confidence = confidence, likelihood = likelihood, expectedError = expectedError,
+ materiality = materiality, method = "factor", sampleN = 58, sampleK = 0, factor = 0.7)
+prior6
## # ------------------------------------------------------------
+## # jfa Prior Distribution Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Expected sample errors: 0%
+## # Likelihood: binomial
+## # Specifics: Earlier sample of 58 transactions with 0 errors weighted by 0.7
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Prior distribution: beta(a = 1, ß = 41.6)
+## # Implicit sample size: 40.6
+## # Implicit errors: 0
+## # ------------------------------------------------------------
+## # Statistics:
+## #
+## # Upper bound: 0.07
+## # Precision: 0.07
+## # Mode: 0
+## # Mean: 0.02
+## # Median: 0.02
+## # ------------------------------------------------------------
+You can visually inspect the prior distribution using the plot()
function.
To illustrate how the prior distribution can facilitate a more efficient audit, the table below lists the required sample sizes for the created priors after calling planning(confidence = confidence, expectedError = expectedError, likelihood = likelihood, materiality = materiality, prior = X)
, where X
is the object returned by the auditPrior()
function.
+ | none | +arm | +median | +hypotheses | +sample | +factor | +
---|---|---|---|---|---|---|
Required sample size | +58 | +46 | +45 | +41 | +28 | +17 | +
In audit sampling estimation the auditor tries to determine the unknown quantity of the misstatement \(\theta\) in the population as best as possible.
+This will be featured in a future version of jfa
.
This will be featured in a future version of jfa
.
In an audit sampling test the auditor generally assigns performance materiality, \(\theta_{max}\), to the population which expresses the maximum tolerable misstatement (as a fraction or a monetary amount). The auditor then inspects a sample of the population to compare the following two hypotheses:
+\[H_-:\theta<\theta_{max}\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\, H_+:\theta\geq\theta_{max}\].
+The evaluation()
function allows you to make a statement about the credibility of these two hypotheses after inspecting a sample. The output for testing as discussed in this vignette is only displayed when you enter a value for materiality
argument.
This will be added in a future version of jfa
.
Bayesian hypothesis testing uses the Bayes factor, \(BF_{-+}\) or \(BF_{+-}\), to make a statement about the evidence provided by the sample in support for one of the two hypotheses \(H_-\) or \(H_+\). The subscript The Bayes factor denotes which hypothesis it favors. By default, the evaluation()
function returns the value for \(BF_{-+}\).
As an example of how to interpret the Bayes factor, the value of \(BF_{-+} = 10\) (provided by the evluation()
function) can be interpreted as: the data are 10 times more likely to have occurred under the hypothesis \(H_-:\theta<\theta_{max}\) than under the hypothesis \(H_+:\theta\geq\theta_{max}\). \(BF_{-+} > 1\) indicates evidence for \(H_-\), while \(BF_{-+} < 1\) indicates evidence for \(H_+\).
\(BF_{-+}\) | +Strength of evidence | +
---|---|
\(< 0.01\) | +Extreme evidence for \(H_+\) | +
\(0.01 - 0.033\) | +Very strong evidence for \(H_+\) | +
\(0.033 - 0.10\) | +Strong evidence for \(H_+\) | +
\(0.10 - 0.33\) | +Moderate evidence for \(H_+\) | +
\(0.33 - 1\) | +Anecdotal evidence for \(H_+\) | +
\(1\) | +No evidence for \(H_-\) or \(H_+\) | +
\(1 - 3\) | +Anecdotal evidence for \(H_-\) | +
\(3 - 10\) | +Moderate evidence for \(H_-\) | +
\(10 - 30\) | +Strong evidence for \(H_-\) | +
\(30 - 100\) | +Very strong evidence for \(H_-\) | +
\(> 100\) | +Extreme evidence for \(H_-\) | +
As an example, consider that an auditor wants to verify whether the population contains less than 5 percent misstatement, implying the hypotheses \(H_-:\theta<0.05\) and \(H_+:\theta\geq0.05\). They have taken a sample of 40 transactions, of which 1 contained an error. The prior distribution is assumed to be a non-informative \(beta(1,1)\) prior.
+The output below shows that \(BF_{-+}=30.28\), implying that there is very strong evidence for \(H_-\), the hypothesis that the population contains misstatements lower than 5 percent of the population.
+prior <- auditPrior(confidence = 0.95, likelihood = "binomial", method = "none", materiality = 0.05)
+evaluation(confidence = 0.95, materiality = 0.05, nSumstats = 40, kSumstats = 1, prior = prior)
## # ------------------------------------------------------------
+## # jfa Evaluation Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Materiality: 5%
+## # Minium precision: Not specified
+## # Sample size: 40
+## # Sample errors: 1
+## # Sum of taints: 1
+## # Method: binomial
+## # Prior distribution: beta(a = 1, ß = 1)
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Posterior distribution: beta(a = 2, ß = 40)
+## # Most likely error: 2.38%
+## # Upper bound: 11.06%
+## # Precision: 8.67%
+## # Bayes factor-+: 30.28
+## # Conclusion: Do not approve population
+## # ------------------------------------------------------------
+In audit sampling, the Bayes factor is dependent on the prior distribution for \(\theta\). As a rule of thumb, when the prior distribution is very uninformative with respect to the misstatement parameter \(\theta\), the Bayes factor overestimates the evidence in favor of \(H_-\). You can mitigate this dependency using method = "median"
in the auditPrior()
function, which constructs a prior distribution that is impartial with respect to the hypotheses \(H_-\) and \(H_+\).
The output below shows that \(BF_{-+}=3.08\), implying that there is anecdotal evidence for \(H_-\), the hypothesis that the population contains misstatements lower than 5 percent of the population.
+prior <- auditPrior(confidence = 0.95, likelihood = "binomial", method = "median", materiality = 0.05)
+evaluation(confidence = 0.95, materiality = 0.05, nSumstats = 40, kSumstats = 1, prior = prior)
## # ------------------------------------------------------------
+## # jfa Evaluation Summary (Bayesian)
+## # ------------------------------------------------------------
+## # Input:
+## #
+## # Confidence: 95%
+## # Materiality: 5%
+## # Minium precision: Not specified
+## # Sample size: 40
+## # Sample errors: 1
+## # Sum of taints: 1
+## # Method: binomial
+## # Prior distribution: beta(a = 1, ß = 13.513)
+## # ------------------------------------------------------------
+## # Output:
+## #
+## # Posterior distribution: beta(a = 2, ß = 52.513)
+## # Most likely error: 1.83%
+## # Upper bound: 8.56%
+## # Precision: 6.73%
+## # Bayes factor-+: 3.08
+## # Conclusion: Do not approve population
+## # ------------------------------------------------------------
+&3<9>PwvAB2MoqRHxQ!u5PdyO`RD4624!O*z(c*yd$%bXY6! z;mKcxzg5>(HW+xt(TBk5WBLf$*1&vd_V36E9*)ARDtkX6YUG~7ULYRlj_>gIAvPA zSjZh0OQm)*JzC}B_Q|Qu#YSeIIVu0wgyM8NYg8124fkQj(7a8Yl~r`)WQ2Iel2lYw z%t{-#`b`&Ysr 2D94(vcYyut$YIS^}>+rYGGf&1_L7i}=Y@FLASN3^d uc` zq-W#v&2vPbbC4K=P+N>-d8g-wFtHMYDtA>^7&`oUAMQ3Da9VWEo_`HOn9P*fjFT2_ z!b%Axj*3f74SL1)Y9GuOhGl~o-LWo_@_~sdE4d{#7HX&qN%nS~Xe5rTVLS`Lf~XBT zjg#pZ>&@#X9XqLHc+My09^aHInhE?3yt>H#dRQUeX=&obXMrBg2A?u&l(Tp3A5&^_ zWk1x7he-1GyQN!T#hGO@4Bko>>Q^z-r*M8Q4s|2`{$)WvyB211?iD)MKzoJ!s*;a( zyMR3Zz@heq>b-2)H)#5PLA7-@q&Lu=U?RNGh+fV!D8#jxUIQmFaGdK`M?@JP`mm6e z7Ul4B;KYP+z=%T>za+o-<9Er_9W2%FD3Kd@AoN#g!|67TyxL(ZL#Vgebame|y&l^f zQ}+WCYGE}$-+YmkXLsyy3=mZwoy3-H^K7TXcwFA~B%rISLo(b1c}klYp>k4&RC=AW zu%H_PZaao+T85G02P|Y7JJdo6iPSs`@qJZW&2fHxd_N6mR#gi ! gPno)e_fe7>unTBJUgu|533O#1D0PW!gUkAvv)w{E=+ky>n< zB!y42yn|`u&HFJnzUQJ_?{tQwa78EUb*IKVqO5$@rQcX72dZ){>8v;paka;HPjXsL z0m8$g8#yBw>L~H1aKDm_GB6VECR;BOGqvc}FcssL@9D}`GTI!ZTB$4Ye!XglA-I62 z9V3VqdQ~*Do@gI&g{3ew7rpOGjo)PPJ@9fn%iT1$dA{}IxXJjJ!-$DdeaHd+BP-vH zC7IwY>g|;s0L#NZQVUq~+S?3>%5?6ej4qTRf{XZYTJdz&*ZQrLGY?3#Z!1mb*73pm zcm^2} 5V1d58A~(zpdLD^TjoAltLS5{>wYTG?3@n+(&*!CBAOg zIq*s~{g0kH&%2|8{mM4u_c+XRbKL23@hfgy 6 zKJ=l`^AjKRlwtb!EI7) O>oo=nmZ-bz2mv&LKbTwk|w z3dyCyfsRUZV7+cYc&%%`w?GkP9CC&2nSwK-mK_Oy3?Fk WyLuGpe}v|5PRaiwSWeEr9f-cXyxiQ}oSdBO z?Ckvf`EzY;ZE 5 zR+g5QrlzJQCML$l#)gK51_lOtdV0FLx;i>K+S=Oc>gsB0YO1QL%F4=0N=mY_vNAG| z+c45nQc@BU65`_GqN1V@2W??tVF3XFetv#FK0aPvULGDEZf SysHv%`sHh QaB#4(v9YkQFflPPFfh>3(b3S*P*G7)P*9MOk&%#)5D^g(5D?(u;o;!mU}0fl zU|^u3p`oCl{t^AZIUoKTeRl5uw!*)o4}t#w0KKuX@h{x}Li~S#J1{Wte@5Kg9CEeC z^nXD7FSr#I73JjQ{tv{(#Kisr{r` nI{|ooOgZ_8K|9^!0 z|C?(P2RkSCznt(PR}A=h`TjN{5ZBL4WG#GIf+%Ng<4R*OEo#6;Tl_~%9PWYvVBBNe ztE8ADS8+IOPa#0U%6eET_6NQwKoO4gU`*U2$tv%cewr@>z$C>1cuFDea~l;8oVRk5 zftcnATk;R@4Yiw_st&3vPcYG-R;ke8q|k`)$T%*ROJFJ(fbp@43Cb!yc56^Q0x&)S zl)R2{<~p~UP}hcP{`IvZTR1;!I=r?q3q{g~fJ&6{A7;FuxbDb$=!qyP1;2FumU6p2{bb_fG89S>%^H_Nrd|3xpjTr*%YvsosLz`*8ehG0hrrD7e0yGXk#gohg_f zQ2?Z<%qbL!b#fbYM;Bn#7a@I_!&9hSQ$Rw<&ty#Nb!4Hak7t}huxY*=sFxN3nx9^w zf^+o
)DxeSgaHmHJ+phhFRQR5v=1FO>(%15^O+!HNH&cr6Ow@aq~6K z9JQ}g(~*mQQu(nZf6 `3}QM928=1IS#Uc&Af%JMm@NKbSo zMP^s#b0(5vF}MsI0h~;A<}bEyi$3}Mc*xV)N>On;hq&+Rmnx$ABKNwgdOn{B9X)<} zY|j~u>j!5P@vDRsnTpy4KHC6CBW? zIkJpG4(%j^N|bLhjq;A#D|1fQ &E~?wLQ*HT*|YaNrp4s zD~ZpmdPTXX)EQqdmN2NVf$f82M}{{s!d9a0l!WC-6vxyVJ!w8Dsy}T5peHw4h2F@0 z25Pk5iv-0`0yTh7%-!S8C;*M?$Tv0;#bGg8k9HcGM#VF+TBUl-^RZve-_jFU2TP*V z(DHoAB#M)C FX$-0OL~gH1V*EJna8rvk~ze^ ^*~Y zahNtzie0q;PPqu9zOs5bqjI30vK?&7vP7|0d8b`>eEI^a2DTJqWwurz_1qqOIlJ;x z%r_^)l;fIXzLbaea&wimKauJXJbe(fi>F|Fgv7mueT}o@zt+z2TJP#sYq*<~ke1+n zrKzjnnpR?au}ku9^x~0?yPUwe8FF!j?w69E<3poGbtCCY{K}4%Q-IHXnQ}kXfv)D8 z>EQp9M}eVF+o@vJ)G7;g{C)><$H<-Ot6==6y*HqT_S4ix+7B(h&0llt1bI)5?mM5G zVS-pzCYQRKhL&YlEM6ab`uBoLF2tddE|c7U{$fydo!6SGV7$>ea{K1d!fz*N$8V>h zNRH?|1=d#AKS%%C-q+Q!X*uY6@uJ0E(b2JL5|n7gNW;V+YSdLE^jWBcxza&Rzq*bB zY& ?}C0L?kXk}^LQOTvC`A}CJLnQpT)GiV_YFBz^7S Pf3Q~5}J_)Y{d0guk#3*6Bo1PC4cdeVeF@YUzaE8-_#&3EarUA zxCOPJpr=9NTFkNe6UY;rF4LrGU*mWL7<^Il!5}Zhd0_XBv2^YM%ws+Gb(pbThEa_p zM%8{{i@TRZtCwKjA4L8HpJ0hVQ)ikrY#@PS4?n^TS6bJU+$Ye(Jpax-P*={n(~R{H z+5LIQ$5&R`6XY5&`qNt)Nn;>tuL>2Xq#mypirQ2h3m&|XP2|s&NfZl0s4>--t{u?3 zaKrKUAF*RDn2dp!R{k_S;N-ww3-qO}u5dnSJMT!ld>*Fs_71vi7ZmK~znuu^S|ol> z@-IYd?@>C6`)-D@(_=Iai@4J#bOepB2c 75 oB=0g7Hf)i>SQlbl@i?w9jU%K=SGa&krggHah|4?ZfW+V^ z=QGJ+>DNSWbQVK{!={PgPYcQ2YAB9|-nqc-ZtVIH-I{TqynW}3g=vO9zo{-1HH3T~ z;}ME#7nS{ypklD?q_otOs*Kj|ok5jVg Qvg5WoK>& z%f4UK56MZ$sj;9&!R@qTTdwT64db?% F&6++T(yW2WM)X&Xl_bo9{7# zhrI78)^-t})G9yT+XZEJ6BKYyk=P~r 6-rMlKRLEW()#$z_F{vmvJyAf=fRc!e)z zq5oXO-LU}ah1}O*`S(*F!N%8OWo|*~Q3==pF~V5*C>U#ryeyE9dNuBtR3c&dP%$ 8?W1w31^5EX~OG z67r_t4<&T3!kqTd!`b0X`qhZSSj_07df5Vqqb!(+LO+|)MD=SaMcXbS%kr#eXm* z@4`5A<#Om@ufbjmQRX9fe@EajC|`pfzs?yz+O%ca0(dy04uaEl;WirNc0ph0^E5(S z+w^M*H(aN1ihOKAr&zbXBL80E?~zY2CFv(6I>TJp(#rK_)K-M00L4$KdrEXK{|fZL z%R LQK&8P1#Sw$-d0B=xA8xxr_KRrRtuTx%qKtLe8MVJawrd8M2lnO&PztBLM> zZ~a{;ZnsT5^128(I>iY0ag0luR&yR}av$A9PbOh~0LC8 Geb4mhLUKez{C;C-G6 z5y2NRQ6-i7fOl?LxFNT(VdKQgNc-NR%plA6P1$?Kpy-chaID)fO|F6zGzZp# JLKu0v3bKNC?tuMKyseN@saJ*4YS-J21E6ll5xR6R#NJ(DI@i|+TEgju(w!BA zreuU*(`xPvqtSIyqsC#$+SlumnT@)++30|B2A$lp$c&@;l=Mrnt1(>d3agx#hz@FG zbKWOAlQQJP^VD;GrMT)Nvuke7;LFCAbsuzH1oqK;N2pgJ;jG85Zeyo7y19)B8LH;g zbG;gVmuZH{k)!->;y@^;Uf|WRL-UyNfpqD`uajY!llPt@`i%r1CNAmkd8`eRagQ*D zE;9y?m_7Nz$lNe)+i)s^cg5~HUwu7JRv^OW=c>n1yfiW_A#hLLsL5in8kx FnSzpCzlezilAggXQcP@h~8hb_q5;qN^hkdV( zrv{i>`;N@4vcb|d#e5@;uqJbZ3rmj`;{NCbG-gIWgP`4$Sw11xg%HkEPAK@Xt!?C> zi=NiB8;;bQhkVUDVhqtOJg4Y48)xifGNVE3KLw(k8(e+1h}u>NaY+jd`-|AdH^a$H z(Q6{~ueQG0XFuiyH2Rgs>mr&oeiTv|td)$SNt9QixNHDv3lZxcQo9nU!J?$B!W1w> zNNiA+ojW0=kh=hJaU8Yy;9$Voz>NN($-`AVIc6*-J?0Oo^DS0*daw6Gzp~YIVd^iE zyv@Q|;~@JL#Q8vxFy?HXl<2g^Lem+nab5}k-OVjZWly*!cmuBD%z24Qs7Y4%D--Xl zQbna#?^k(P`FBRPzFlFAutG)MS-)Y35rL`~D-- AtdG!IcV&Yu zjeO2vnP@+y_C`Vxl~TU-9W!nk$phd oa{KDBMzwr$&X zyC?f&v&mlUBy%yzT+U?lKF^@Jl*J>u6rmHvJqI|c2U9L_f1YICk#&S)v;F2B88OcJ z`S`i{`L>sI;mj!L!u686Zqyss``mU8kDkd|)%)T7tZG>Cdkl d6C>x z!}zFkY|6RvE9(8#8H)LPAKi?sifmdHZi3 4@vIx6kLx1reC8W95$$k2rb-_0k5 f%_o#6_e}vz(_1icwV2fp$RomO z1#rW1^kVG6EkQsU$){tlwgA*9Lf@zf1JsV8WVf8O4o$EHD;9esa|np8`LG;@I1var zj}yI*A#Key8oHV%711ShTPr4gRSAvyqKgHcvQ;aw<4chN|2fo5qs`ExEUoU?n@Wy1 zCl{)0QhwcAr2t-5!lAHMk`KL1Kf3(i{B tN$_V@s;*I#+?BT;*)vAyOLx|VL+ z20FI7Ou5~nWaTbUOdR(oRVrnlYnCNv&8_Sxr*WBl3AQuGy6~$Gq8_W?+0vZ{uYn z*oa{3JE18rkOapaOtr6)ZiL`nuc0u^q`C^WhVzPu!jhCKN^oef*&N%QwO6or;(Csm zTrXx2J||`_T {+m||5aciLM;d(+p;9!gIC~l}f&y>b|kBltY>4nY5w43LH%2DS7 zaN-sN0*JqZG9zN0rfh#tHatA3QmB|c%lCl=cA!TrD_N9sg&gEl% zL3Gy4WcfaSsMVlLXT=eZAB_i3iB0F)c`cQ5x2PiCH!r;(vol1|WQTdLX8-^t4;@%k znkghR8l6OPl44BL=)0egmzgQyEGzAtSD1f&eo=&Sa1OgtI*`y>q@=BD_&e;ZJ*gO^ z0t1;-1dY(}8mZJX_ft#%GCr@!9LM0r1&_>d4q9S#m4v_b5S22eGul0;Q`?p_Q>Oro zPmVd2B0fX~Q6!B^7n&s&@p@l8JtP# jmfgKw+1SnH+?$ZKWg>QJX{r?mmv&kzqd%LSJfBAp%eD;) z`cfrpWkO0`Cy*X^nGkjJC?aqamZ~Gbz>hK`=IP}QTrfr1;y;PnUPjhZGe;GvBOn9} zps)>A7;3zYj^`)-rXUn6l|u(lT?xMUx)F)3V4+Yhvl?s#>r7ns8MmS2#Y=#8ys5uB zvrg{vVm;h>f9tw;VQeF%$;w4c)sW5Vk?kU=9$?6WU)9ax7bmMl!J9X1t49q>0loU8 zS}H;N)(x$cmJ(jRe~x)*gi9jWKj=n>ov|Tlx=j8VcD2cvrL9H-L{)!BV^S&i(cqXP zr@NY!wN+6Ozs4fgG1FdmuvfB4geoxSVr@EJg4nsZx+DC1#!cxoq$yUILBB@}zjH4S zbij2M&IqR`u-allItr08?sE(|42TFPh@OZM^K; C_=V)OCT<700eA*>#>E)rZfrjg>)0Wrp%zgpq+!>NJv^ r1oA7vB?!Y zAK207yX~}tX|d}{;0z`4w+{Xj6}?j8eRQfep63}f1E@1h-5jSqLG-cvzrDs=mZgHM z({xPq6n9Z-r94IF+h!Wl+8M^m&nQisWGgLZC>vE~9nMzt-5@~gP?oJ5bJ@x`e~B5_ z0VZ!glQ{({S3NVYu2-dq84VMLi)ZH$L@8yTBUOhg_AgPUMc>4Y6he+UJhX+tO?wrW zv=SHJ61yZ7#F_K+<9tzru(~uax<>+DjC~XA`IxYC5nFcT%%C82&FEUFJCA+d;k*v- zvM2tFF39vN)`zk|*a1+FPb)BSR)Y9xdmj6fEjV*d*bRG&7L?Lou~!Lq9^YqCNklR! zRN=yzmz}khQBU~U>2aSKkI*_q^YDn@>fLsX+w4e%)g1k1{g>Ebgv6p(ovMuzL(7#o zBgCWkc#&mRj7JNVE;ln2(>RO1DvkW^dHf*!S}ju}9}LVt-L6sRFY!wF4yiGk5z*J{8y?t7DF^n(D6rcl z(N)NJZ`;|-3x)$vi|ez_JaKq7leMt8xvVQ4%?ACV%OewP5}j#!`qt5beYVl&GH@>L znp5&oCD6LrHSXCf46;2KKs6a_Z-X9G+?x^2mj*o8;2TO3jH@xLF>KynlEQqeG4Hsa z6oV(gIb5DmT&sBKB3}46Ij(`#;p@nUk~!7GMoSB4*K9gbZCiCl8a>Z=Qa<)}ZuUZ& zgMr*lNeC`mP Ak4S@O!JIvS!t%3%85c?8gTXnh(0a}(+<`=P$AK?gAEOITvFZ~v zxOS1wzE(rDf}k7njQt@Hk=s_U(y3M2{mqGz;ra?L8x&<}5yPBQuOSCIYIXYt0V)U- z1Jsg=94!@*?<
whQ!R$mYn^NVHkJe!QmGHz4~;nGwTO{XhaHB>O0dqAaGlzeEU9 zi^Hj2zEM|AVGSoEmwW 9o=Q59ew1!cd~G{sbaBjM5iWTS-$Bl||pr{zM&L%&SIL z U7p81djq#$B8^dd{+<-g z!jM>uDZa{^s)_N#9`q;h6r0~h^9)g{O|mSdZ^guEb#rmYcM8S8!tI8UGGu-xy!+5z zndlXSv7uzS>Y|kGgDP<^ZMc7lYBH6Dhk^th!u_qoyP%n}jJks;ay=ZPaQVHf{D);r z4P1X$u?@Hu%JC&v+?4f__B&TWXp3NiE}nPS$c>X!P=x;dR`6~b9#+-aV{txc!mHV_ zzFGfxZtAl3CU9H6ko#PJz2bC3&IC;ijj+ULB}0RgQc+Tg5CyhOW=D(HQdyiYRZUil zhwLGYD8+69T_=_nA}fW0R6!NS&h< AGl zEycuUnxhG+iJ668kgMhR&Ug155wHYz8^zs_Z`J1dX`RpIT3$mkOSoJ_9U2&2nSv(3 zAXo!9OmMz)s&)}ZT1p_NJ}n)R=KF({Mj356lB3nZG?U#zSi@_7U@H;Vu2YJ?_|#`* zD5Gj53AD@?;Yw5NLFuW+H6k_U5=5BX;(%{ZMC^Ju!AM>uNQ~H!fxTN>f8|9;yowl{ zzdIIq(SDEnRw=h}1>x6bN7z$uAk;mup2h7RTQwc><4v!(rG!sSV_kcr=*E;kPEUXM zV(D608S`%s6p<4ms#c`Rq`fT56lrFrA>|lY1l{;FL~pGWL)XHum- lF@e zU|ut+BFm~s)tNH+%P~BEuW-HI{Z)N;wK1Y==qD8}aOouWN#?Um5( +BTx3gdQ z`~5v76-&|9=J)fm)TI@kV}2N@QAAN7_s+%H!G3J__LdSn&-C1&F6&md$um78gbQ=> zLqo8Ec3v)feTG&u;(RHVlXW@dwWM(~v)Yr<&U}G(_b9fo?Cc!4p)+IIy`+~`&lO6* z(hxPo!}f5LjK`RW(<<4?y)LThaJw wc0jK7=-s4(@KNg(vwK z>NBVKdEK-J=Wc7A2m?N;QwePD4BT8=6dz@GR4M(2+dTT3dLI?L*V1c}Y7%>p{pe5b z%EB;oDOlDcJCiMqJiS70>?$U-GHL`LDw6eG%A-P_K!CA9a^2pCZtwaL)-=0EXD8%r z8` J{vQpK)P<3Hf zGR+=_-LfDxsl>}Bk)CA*Pcs8#3_<(enC4{z7cD&DcDjVto&LSU@s~WX|H{cLV?g&H z#PFO 9`usFJDbErz5P&VQ0;G=QR>w zoIU>_9238;hMpdl<#rRPi@7QLtF?z?^pV%IEFOi}hgU6Qv@R|#ehL=+ t?WTxJQkziH(#TTh*S;A`*me?zarbNZ|CD9;Q9f) zAJK2JtU&i!O!1MvCNIL640E0V^U2H#i7Dq0XJ<1r*scpS7UMbNBt_fkIHsjx5{#~X z;~1rmeakZplk 3GQD;Pji8}E zNZO91`75gINvpcVXLk6o!QdHNSenK)_7%$;*tjtv>|O0u+uL^>?yli0_3b@=)~be3 zW$u!btNCq*B)9X{7AULrtW$pv7Go2XlU)X3A)1 zW9^AFdf{Pcm7gobEG?GRVa)H|Cs8>zkTVR4lh-v^W0aKBZu;^ ?jQ|C)?N6n$&tIL`@|GHVb%AOp={OR( %(yG*e8*@az|LAVE=iI zF@32jt*B)i3R*hynb$klUc9!d ^j5uS?77StCz#{z$2=pEgJ1Ak6Q8=b8x_`K z;1AjidG}3f2xu9j@g|(f|3bZ`yyfg}DLg_Rbt+GRcN*(rC1 Bi*73{ =={zEJZ&U=fn-aPX_@aI!_C zJOp^&AJs`}mzfyBr|M+FOwP64g4!y6X2DIKF+>J71m29f-1?*;08;oNj@N!YzhE|v zLlD9^@VDBxg!N~fm7pnGgSTRErSb5g)CcAR%vls)zLpi4tv}d~WR8O#u})TVWJTcR zFfo$+(ipeF^}x3w$S1jtD&Ipi3Ub%QS-LH_cT?I$fyQ@Kj^v+}O)%Ao@cNA~FB_N@ zyRGppTD`|xws>)!eHOrv2`WC1!OKCp7mn~zM)THkrh(c}efF#c5J-~m`t-4OS4u?Q zUfzD~2%yX>IHK`9K6?5J@+B~~U@4@wprv^v9a}^vtlULUe3Xh4-U#PlYl3MSd}@nZ zB8lh(>3Zr0Mlk-|OLf!bFYQXkXhh!7AB2Tr<}fRmU>pO49gRuhPEB T5pQNILw znu6`@L;;z9QJ7^x+zT;ztWYS^ ! z`L?`b%c$JW9Mq~6ux6>}3Pq6r53FI%S*C=}pXq^8XMm|d`%aW{=0hoF7_S*~bFxxm z1cSHIac4<_FfLA#!Z#0_Q+42j%=nH`Hu|bt(Om#w>{Sr ~+DDIBW=b^Y z1!ooNO};(V@+Zlq2j)X-Us3QPIqm8|Xd^5oaEbU(&nR(re^#UMCSvjgwib}Q_@GSd z3YC?5r)Q|s(ZV88PC+VXgm3g|LtOhCPR)q*?WdI;j7zT$uUhm86Z!$3>b0274I{lV zLHhcHel*QJ>G_OEw*MwDL5J9zCX2v& ICv2 zbu1e~7%8H)T1{jSaYSuL?ndUUWqyka4I1G(#Zd0%d}d`^rMPli*K$Qc?l4|zrJ(cD zjhjqw_DUp5#f>z#>uJD8&I{Lzz|Y%^pVpm3)!fVM8dFuv!r{hfj&Qc%_g{8sv }RHo_FeZm`96Go{#TyvWCq+7zZqpL0^?Va;(p)7Vvv6YEFa zAxxThnm7{84B|x0+mO>xc_>rw(v9HFU;w(NNY}nLGX)Wm7xuPHE1oA#Jr _vHfetlg3s$TvFedo@B9v z?xL~Ok8Rn7Uj-KwH@zbV6j^x*hp^Gvj`gHN`0|^bG2BC>B2=tcJ(i!A9WyF7Bxnj7 z2^Kd4B{Vs0>GxR7b7e-CH3_~_^I5Pg%S-#ti Z7a*>A z#P!4XIU{Lp5QBWWITUfAlEe5*Wv77J*LS17R(T)c AdDeukz_6C| BxFvUiRCfwo7*ik)eioGP~yRx<<_0!1=55Q?0yPx=5anY^G%B0iRQgt2))_mGo+ zOlp&YE33QaWWkdyMb*DrzQ7#u&7>2}Kmm9X!{GZDlld uKl%1wYcz7ITS z%Jr}eXv`P8w23Xnv)P?(%H&%xqqG1=<2ENQCr_Pi$q!0yZ >HMaLfx{;5#j1?^-ib=`npfg0YhiIlbG#_ThUNewW(Z`Q24n7lSoD5A&&( zCU 5V-2d zE!9jPs2dfLdCzy_P`e-uRdno5M2%NEzsy-)6x#rrYs+tn&(HSCo })i%<}Hz(g&Q(3%;%xvcM9pHTSM7}C(w>6&Xc=1SA?0M^l8J<&K z>nAEFQd4iJ?l08Ws%#}*6!65pQU>@eekBj%wCVXF-T~upWg5ae)5G!Dhj~Si&q*h_OgfB7IpaU01Cy8(Z7z@!xVJJ=-M6ft~V&bMFMSM>Z((X^r z8Ak?YK9pwY7K54JwGao*?334F6(iVkq95#*Es1V~?q+Z&eoU{LN5VT#6RwR9o@O+i zItq%-(H1+!I~4o&RQka8-(7VKC--(|bj{$&vSWIZZ0~GNXYw~Ms)SI}R+|X?x^B^T zj8!4Q5i&8a=yC#|LsX|+9Wsfc4z%MBX{;Z*`GPnULS--QxB1X7`b7YPSC1>+(WL2V z&52#S>@m&!J7)mi |*VQ=E~e*#$|}6|mox?AM{}+a=snp1dp1;)%~V zzfHtl++fWsO~`Ei(w1Z-IV?+Oy3C8j4Gpp~Y09qAy&7=bERW1X3)sWmLnWI08E26w z&QqLVsVAwfBw4}a8jO?DNvJw_y esGrT+{==5VBwYh+p&q$@&(UYxg zP3 4<6p@DA^uQ?ae3YHc5htG3T9Sg0&8Ja<~h9Kp-*Is&a}ev2KG{ zJ0EF+v?ujP#_*?Q)JhfrVR fevOhQROcxEXzM}*GzZ^IZ zB1?5ETqjr0lZI1|Fo+GJS193T-B7=zImLrJEW{KhIxj#KuB5vlpGnAaYjzXQlq(@~ zC-PXpF $ z%ll@yPgV;(hVVh7i;g$YEx0Lu2g`F1q0~WxQv0a4CXNre3lRKA5%?xs{p}%C!5AHT zV*7W>103}Y8?=U-C5k*D?a-;Z3hm@j3s3aJ{PCO4;d~n&w@fD4v=LMFG1lZvQpeY6 zw2@MMmA=>%*0(LF8OMN9SB1DJ?~nA!3&!~Pv+ku|NPb#TS) Sqv9YCW~MeDQ@0h_gNsI;1@5qTH4c6*3DHNfN#{7~ctG%DbD# zDbb>^68y>fj5W`jDOopmfVK{ym@KQgjwZ ZFoJ%ch@_B)??+{0~euyHTxu^p2&LXGz<6IF8@s3+FT! gTErtARK8rDfu9ro#cZ zzMcK;#^r%|D5Fi=eV}j0{LT9ka5*rx`L%UACT S%vxJZ9W`hqfy$=rr?0@;sg-?F@6eG1DnRMEJpomQeBg0+&S7)ZG7vUz5$ zGF!(tO=_9YHK1#1$J5l3X*2TBanpU#{j-I=K~37%y`qoEhsytF#Sg_F`B(E|dnHoQ zOoBCq)J{omk)9#FL`Q+u>i=*Z|6#)DmN|BJlm#^=e#Cf%`2zdyZ$q36cAy7!Cd!2A z)1e$uX3CcK3+|cM->Z34f2H|C`~H7T7d1|rEVOB9^WX>MwR+0Ao?>loLm}T9UfQX~ zz{#0*`x>TVG6DMr&nn~Om%g9NK}SqE>Ae&mD8^r$uqTTD 0o7I zV*fA5=0A}RMHLC`k)G@C%M&1CY@lS%8gmCid>~SMrA`GMM>dNnaWQexXs~`SF#CEd z;%cHW% SaHhMk3Z`t%f!y#SHJ5|r+vkh`%mb~liuayw@Ai|I_8tMo zU$?=qh_gLA{$Zs^z8KBFr^tQ_8%2=Nz12C>{jx^bb?0y#Cmljxwu9N-$z0Efk;h3S z4n1tiyC*znag@DZoLl%aAOW=ag`6wiw@Nxfsh=Yf{HxDi`DfX ~qO5qpgJ^YjU0Uni<97R-x$WhTR z%)fuR9TVD06i|C_MY5k8p` +xY zg>!dtQTzpV7k{ZLq+IKM1OWd-I-36>9qyC*Ko6DJtGd}2Z*1=)77^u43`*fnn-HW0 zUxIKRw=T^k4c})24%pMf15Q=EQFxB%^h3O~N#>5w^u1%PxIBjDmw$BYaNI`lS5dqT zVY>s*?!7&Q^aim!;+BbjS+*dvmdewVLN)b {8g80)1%#GQ|LbFN;iXDh2Oa!YJLOzR{F68V1)=vaXoChY_S22sMwb$ba zc0BQ0%a7;uSIvN;1~ixhGJc TqVfGU`T!ZWFN97GR~0G zDsgivU7y0CRhy7+M1><$wP9K-g!`V}lsZh@3L!eXR7xi?!`MW< _`~<5U&cEfmpBAyfskGV0Pmm zPJG>=H`ZpL6gBON8Zav% zEt0AL^h&lx+H`{4nn*%)BpbMhQ++F#EXxqkbYt|4A?DT4#tGr(WV8mE$+7XZ*vp p5deOnI>{(m?0#&4Yb*$R6LZ?ya=C%0su#@(4UhdH-Z0EnFlgxi5nN`XFw2bxVP zKu}I8MUn+|dL(*&(J5hj1b#med8DP$UkyU^2pc8J?AuvZJ9rU77 zLy@Rnw^#C*UeWh vE?%|8!jA2CMQl`yR%S+Z6 ztQ~BOXr5u80%1#PK{l24`Z7hdGCkEQ6`mz2SM{zXfkhQIZPRkv b ztB!ZsD`kkPr^)~|( tffs=#9du8MPI)o#ol$jr27m8>r?&!~s2n9m5@4 z0Sf^uhB|_OroATwJPb7kTKY=fO?><>P#W2V$Ls^icejq&lncUjFumVgmHxIwzx5j~ zCZ~K2Ue-jOVG!;U&Sws~3KKl36;4<@!E DizR?Jp8Y0;!FNV}{RhVoL0TP7cS`{#rRO z Ilgu)vIt7hU8-MvNUQD zA4M@My7+a$!sfCptJoBkUgh6k;VN!uRDQ%uyHsULM17)G9X=^v{$G&s?+KDiWyDAD zEx|3`z{!QP2)(@0>o;xmQ)0)b ~7SytH}J2Zpc| z;6IEiIU||!3!QMq @|~(k!Prb~tue zPEv6!x3LO!{e0$j0MUyHqK*${6*xs4)myE%=3h0T-`VcjZoU^ToD$r4GcVLRKibo5 zzj}R!eb$#!=3Nxzu&T;!%-8-Y@>*g$iaSC&xSJN8oH=yWOwmkt7CI*~WhP>h@$&9> z#>HE8=u0k`r&L6#9q}CKoK0KjWg284lAbBA)Yi)yMX0`HiX2z2btXEzKF-f&MrKTN za3B@=Ffa?4E-}w==DCjVkO-ZIB#2|@dFy2UO~*kXM@d|yq3vd4hV_P5VceSW Tp zGKS)gOWGoVIJ+)~!VH&{jDi-APXN#F)RE!BWmE}oBii9TMsCdl2j1ejw{&485Bi~? z;8Zam-tlUcC5!SA9qvHSR@jF#RQv(tPEm?m^zGv1oC-8m9_6b9Ku9WVGRcwS*|K0o zS+Mn?YU8w46ne!|iH?pb!PQN6r#Sw2fjI$PGj;Ua*VUA(Pw`Bzbl2@!AvVbMu%5El70)9$THY(arE+LjAC< z(#tew=vHFl*8$VZ%XY@d*Y|dsx4;hkt^4M`C_hrMF~ueDzW|e&G16)+&19b)BY}4x zabqts01n+)9~V-=5d#n*Vu;fHPZIz~(bfz9iCFHydpQVIi&N5zp9#&T0q^aIjXS*N z0BP$0dolo}16tz1lsO#xkLL(zXho$zC~<(`==b^jx7v=h!uby3-GbPyun$ 1y#v0Gj|ZjZ zsI*U+0Gcw_Q{ptQ9{0Uyy68d?M{J>zigdvlpJ933d`Zc?NxJZYM~6yY*6+~rLinq{ z(yWQ*Pz+Ol`E~Zr2VvTNQ!mqXPr1L+?;O~_@eAyReufcLypQXHl?tL23ah3 0IH_ 6>0#HCUoS{`C)66CMm5pc98~4=O$0ZpnzEj z9DgvJ{)|-Mf?BYsK3UAjDg$u0kTi{7XsdX~MhK~)e1<^X&@gozDn qLk!TL6C;fC~7cGt;n?rK9eCvA@n@|D;Alm!9 z7J-mllC$Vo>v?~kPl4J>h49bgVzXy~x^hXpL?|jDvgRPb4QW4-4h$HF2M}fb^Hwpp z5e3*`6LUc`dQEH~lxz7ahmkb`2Mp=Dp)MRiD@R%kK)T^@?(k|4ylcTmdev}Y^mjQ| zLv9Ad?#xqeQCcG^cCo8NE?U9ucC}i=FaEI{ArP%#`1@)eLHe^T|Ci;6J%f0UH-j9S zD&|rVa<;^uDxr9U`3n4&`pNfGF1p xxf|3 z(pH3MWWBBc5kwfPNQYNs?2_4CaC27Hx_I*Vr)xC>$3cW>T!X!1RUl&nTDAE^hiC%u z9w9#~l{d5C5;8r{bv>BX7T4j#LBD^!8Aw07B3%4`U=EjL{iAK0qwdXE{ey2_|LO&} zcBz(A_N}}QmssEYoHn?gey)Ewhak*g#w0P0&)CiF#%HzSB`E!F%w{m#HC44~UF%;o z7rj?E*jSW%xI+VYq#9)D92kO{f~S3@;rkEa0jmCiGF&?PVyF_OXvPP6M=sS*qSzCq z%~0>U;D%O>%^7xX$ Q<{-_WJ^?h;b3DzS4_kv^0@g_-OiEwXjF%vh2Oqy`)fmI6z z8ALmbmrs3eXeaMU!9?uV<$dscbY%A}DMJ=Bb>fS`B9+U_PBBi|1v)3Il}`N*FHi%z z6r(^hCW#VG0e#bVVt=pEy*2HE_$XGe4Oy}8FWJP 9!z zN1NLzdb$1~9kx}#V6TPPyjhB 3(Rh?P^~aY9JT+x$Tszctvb15SSqQ zlVuk3EK|0#sKaScn7J5AyANy?D9EZt`O?g^;orHfm@p8t`Q{|=Xz 8lk*`qxrW&4FmD$TeB6#vKKUdA4 zxKBpQ76=D^EXqW{BA`Uu>htC)uEXUSpl&+L+`CHOe-T8tI}3;A?x0nX-nv5FBZlJ> z&uMqVx*`wg^aCyiy<||2B9gS-v{+(OUqKV?pcz9?<@1zKkuN2nrdZ~+Q;i TfQ9A!;u(oJliL;a5A{*= 9d<(c^lF~3FB1rpC5iTa%#EHhc0>fT6X1OQHF|aJV7$=eD zU>%3r*dZ~jgv_1& ^zcwhUzbnHy kE{zBnZbd(-jvL(@2Rx5ZGRLIhL>&emWL;SIvOYJMTmCnpH1%JMWj*hDG3? zOu+KxVo@3y<4Gn2Y26p=hL#^WegIFhZ+76M{kC?AGJ$JED?eczaa`DuiDzI{cjMwq zwo@40=w!q!<8E9vs*-dG9xpjDQD36h?4qCj(#YpUq=d)|i4k<&RJLTW rUdNd!b{ZXb;JSo^K zQ_MneaT-!y>(7I=cO<2vp^Xq|HE{Pd)tsFQU8l)c09YPk)>uLRZ54-SE*^=vZxIGH zHA1d)!sL+}3N(-MU?g7U^wPt w^+Q+Xs~;}bae($wRtKr zw}mObm1(1jP>d_g)bcFM*=FG`?#|9ws7S`e8}$0tv!yNe YD&wE~0)*S7@Ms5I8j$F!nQ(W+g+^)Y%f_wL?K2>JM! zXY{q|JuqHMoRaQgzHy&9qv=`^dPaE)Dy}e(!003Ogpv@F=*y|7o7x^W!Ax!C`5T$_ za*~^-OrVD)_-B0<0|0GOfWTzJ0~?>LH6uF_AQ~zIJPP_sjg`tt(_rzo*-_ZEm70_2 z{>FbmnSOrONMsz%E|Oys)1mbAc|u-)TO_W6{q`kIOUhwurrdLVNcAlb&J>RuuV-QN zy3M*l^ToT6!&s=I0rzlIax}Kh0p^SiCIb2Vel@hb+8^n4>zd26QL0HMO&I3{fz^>v z@Ct9>fb4%G*YzN`oGzr+Zi&=*CDYM8K>W*Vvz^E`PVCDi(XoN}D58|Q^4u<&Iq3oH zoD=OE&~1K!a52SYmPoe3?Yu#2t=Bwe)HK-L@wQ~qyk%6sN{htr(%s%sY?gP^nXt8V zA_2YqJcR&$^0B>a8&+jf z}T0+$uog+3xey7oSFAZ)(5DU$mt( zKEE@+P4E^}cX=|$!{S|FHTA0LOX?e#v7;orO>Q5?Rw*%Q?rH>6NU+++^4b&obW7Pf z1U+bM!4inG3wBHWo`Q2f5r=dPLUyW6NPORpZt7`7-Vm |k`Nywpv^(2LBC|R*Lt{5O z9B0T%)1lBICbfd+2d> =LC9z}CnfTv6b~Mc2@kbVnm8c*L;~e$={% Tu8lyTcc@on511?%)z-DD1T zVuDK(ykX}CcpJet7u-P(CiJ#vyTc+E`0vcz&TOcom+;(80c@q372Nt3?isDW{;|9U zizxTn7>=Q_3ABO&d_P#tJbmY{SZZYHgo*beb3?=tw2uYfVP=PuYNwg^EpL^H6nQf* znk0TY_$NDmqW36_c$Rr`0R>yXyvCfz3Cu8EuWNP*T=YigEN{2f9(mB-&TVQj=Klq~ z2wX~ykBC#1{(VkFal~dCYG@is`(51GXHPhjW2m;f3zLS`R;73O$44K$XV@Epkb#lI z54~Lg#&6CP%b*v?2+KAa>s2Mj9tZ6q(RjUZxag7}$SW#vO+1Rb4uc{iIJG+;aw1kK zW$TP57R^RtI`>`L( qcjM~ClKmmA6T7nSkj15B?WH{bx8q?CH_I cMtUe*k3 z%rl2RjLV5}1^%r+@ f$wl**oK z8`zndOcC1PL?jo7J^U>UkGL*|&Scw%xk^z1?Xy6n8#jd60AcKZA5E42X%3vEFNgdJ z@um;S?z?iET(BEP^aK2DEch~3v5WZ@)5mqBjv~}8QwX^E0psVfEVf#pT9si!(}j$% zUHyabCos&O gex7nfjZ>$O<6%+VM|d}tg+lSJAqelkZBKLCQ2 z_~u4}pl-~7Z +` ;GQg?GP`NvB)
A@VbwYFcLs2Ld&CuUPL`ALX`<}fO;r$TsQ>Xu2r *w3I zr+{wW)%AY hsjJ9%|C9CFr$HYnZ&dJx+ z2O#Grty^U>&)8)DnDF0GZ7)eCoMkSu=EqvzDu$X|J4$B+(@HOq6US!LE8sOh+wEzx zV!N^;(#!K%SzyL&zcfWIicKiTFW86VrZS=~;zfK&?buJs@H)#(0QC*CPX3saqOMJX zYd|^;Y{GzBHl)G;npKdb^r4jH$!twV^8;aR1bSakwMXnkVQ;&o!7sYAuIkiKRl(Ww zOQFeJGV!`aR7cl7WbxFC#iaYXC7a(I_4uytfz6lXMnrg8X5REky5$)4`xEs}zrbbB zx;@TzHhddAOZ=wMY#h+K%pJ%Zc$tuU90iJ}{^vk1#bAx(bz7RDYD7!n@|Iy5Q*^pT z^WxCVBET0?sOm4@Jy?a#GI7oFJ($tL!=UZS6Smn}#~XpG@G`QutFs^W *g5qI^EItH;NvG z56W4Pdrp;l_)XxbK%(ETZg7#LnK>pS5_k9DCnDc};>UA#O}nm81y3dFTQQW%l<>Zt z-EYQe^MEh%ZZZX)=Oq0J3k~gnXlB)#hx=33dZ$XKE(HRJ4~^ZA&k~FAu8HpLKfEv{ za lAaUqSBV z?>{Nr7w#VV4<{CT>Pvd%EtwtWUBNesAHA#3Pyo1>Xzy*SoBkZi4C0-%p^pik>(3-! zHnS?{d0VCrC?mkW _ L^Ka_ Fs<{NucPSBioWKz73_l zOL&HY{8u2qhGhGl$qA*-KN jXmRaA$tPsQ0WA5Zv$9y`2EJK@5|K=4_o@FHxWym%=+$aBH zfCBP6gil2a2a5)H#c<`T^CFs?9CF;=8Q~N#%q% %L*+PY8yyXla^z9*Qse&HU) z3kNrt$K=Xq@Srh`#Me|JRdQc}$T@G>o~dDu+I2j`gC{55;urMXl~tj`&yVrzV|20{ zx-a!W_|spcYPLf*^!yEtUTu*st5(T};V;l@LD23!uk3HnI`2W~t8QP12C*G9-2L*Q zol^1NDdJ`kyQyNUqWx5a`*_c{|DWR(x>i^MFZolR76PM0-m@CMZg4ELVE*u~b`)(D zH2X@Ng+dlC*Ju2M0%ws1<7MYM(3GK=Xi4T^KZEDprF4ud-YkKO~~ z!*HZF+XRw`9Q^%=xymiyU(k$ @%qaD&iQx+-b%mOztHnc JwFzhj^YiLt`h-#YXlfmbY#+R}O3LebEg|PQ)k@!c(q|h0Bz5SMF2e5PfSM z#%g&UHAb`SNY;`$>+twSuGqEgiQ@e_De+|S@PJhkv#{}8=- zsJ|1PHHd%sr*r5_{Z!%L2m9Y+07YhRO5F%rs6~d=SA3G*?acQ$OWW`)cb!3w Q5t@aI-A3YPgE6m8_kh*)(dhPCjE+# zoF!_U9x 8UY@e*1R+sI?!#t1B6AM%+^jn!@wfL))um>*Y=~s`Sug{c zv@_9+K$g-RxoC8l90kM?TkaEWO+EP_s|39NI7rw9hmdh)+mRe-G@@s9_w+C4Y57^! z5Pa nB&^v$m3!*ie z&ycA%@!Nbqjt^6FJs-742Ctk(YvZQlS+KY8q9iwxqR8P&VjqnQSrPG2x}jrkMd$ z)pzUrB=MklluIAM+|%AibG$3;?%F8a+5B0vogUFND0EFGQ?uU{&K!QP2x0&zbB)mX zSy`lxh=}{QpYwlnJBWdv`9A|Cc1EWE$DCDK{0WpgpO1NA@$(=`Hyl{e=n^sUr}nt_ zka7Zf9Z-cAH1WB?aADzjW(OkS874!*!;ZL*x%tp4ChSM(kx)8PB9bLF%s5bvy`BY) zc~!ESzD%xdWS=wNxjcM)bOClC((v)!XLe?8X3I#f z*`DFR!NlLz7IPR`2uM2Qq z|7r!;L!a&<%Bz;{sbBm9t$5Vt(8vwscn8596;Ryfhn!t|_~n#`>k7aAwgW=v$MzE? zJ!D4pfO+=9VG1FchU4v-YZBBLbR7YH=>p ^*<}Iu z`vV@J3=dnC2h%wCy+cVId-(8?l?&AYOQeT^+^6RH3vQR;14y>V5GF0?l_`s2DNUr7 zwh{~L=jlXt)M>;O*W_W;1` o~Rp8cp9-c7<_2=NSa$epXf(v|W!E zo6Lx`m*#)WSsd%petV>;VV6eFA9Hq)d!p~hoOSe-o53CG0Z#>KAiy#1lTa10Q3WvB zfqKb&oIm@)W_2cIEy`JzKAK3=Meczf9N`CGerW{2JkU86UYq rMa~{Gxrfdkynm7ZBG4ICxsQ2)?aIL0 z33+Ak_RrZper2&n!|jt~MwVbkqY 6463Z7@v3 zng>*a)kM`Hse_V*{uX Ev2!O0kd%RZ1E^b&^7-lFy?oi$Z5ny;Ag; ziiKj_o2r$f#sX`Tq*p#{IT0WXuqUvhFAF|7KC!M8zjM#O(Akt9bT+Oj><5vq6;(H= zg76EjnrUADU+AnQmlYS%0S+@qtDdcttx+fq@g9V7TJh=Du-?PvQ!X7_v?We8h=A63GXIF3gk^7GCAOpGepgvn}^OR=Y>?O35xTJ!133 zh@)WYzF>@nGUrF7V#*stNg340Stg>ZMBzpK1WLe%B_BV5Qr=G`<)oMurpT9+UtHms zRJK(?(3CB1MJms=h}*O+J$6h{W=fc(AvBgD&f+a$?wQLMw`R0%!DY!MQ^-psPq!Fr zAFL|G$>V1(e*&VLjgMoGlX9f*AUHX?`uJL~kg0Mg@JwOMSoW4}NSbbwp0LrWH95QI zUl9z {k!+3Ra+=ul`bmrRW-R)iFiT$13W8=Pn6756T z0UFd++cw(;x{z^lQC>h+sjfu7q@j7fUu{`!SS`c-jH4|9wj#Vd+{SDZ<;e)8gfd#; zqb0l!Hl+WmRf5V2AB78+OPQS!$Lz4}Fkt*W@tN{kd8;V%tLQGZzTIfNX1h&W(fu!R ziy=7wrKfJ>QLRED-EWeKLn8iz2)F@z%9Mys{cd)0*ocC?R`$~?uE%^A)SU2nmL~n% zQ>II@Q|fl{LzlvJy3AAJ&z bbY&oiXfYyRaYSAUlz_y0C7Tz7IV47$bD3hk)69nutxoNU6 zO`V$HqkeEOt%!yEM$_^^#hBTzt8$BjJWcnfxqS1nk?rd%^=XqK=(42 YFmn$upp!#3UeaBbO zo~V?&yyK)Hx1roaNcI?{9KOK^4Aj;s2m-wQhm5eX)1gEq2(q+90^0ftqh<$f9iZ!D zu<~CqzB+kKioF0w5DXVa=o6T|e5rKMdc5?Buf4WQ$V2r2p+?G~27dHu9S5ey{D@FN z6x7i1YE 2BlO( zdGr|8bSa*KNLH}G`fOUUcn9-pF}4GgUYZ4HYmtV9C}e!K*b$!g6kiZa1UOLpcr#(e zY+ Dd3YG zIC@X>12JZYmwNb CZASZ4 zxWTpgW)3^8|Gu2`mXJ0%+9|^39;a*k`NgAa8txT=?}$vDXHtmCEIU0#S;r!m<-kjw zh<4f2t@~>Z~Tmk40ZdW3i_qlS2?{4_PDsk2HHQ{{zkzfZVIm1Wudfd1^x?j3UuC zeC5ZgBJ0dmda6YnQK>`gEUw+K&?MJb*m(*?9A~I&5coNp`==L@RtT~va4dK>0o2bR z+1Dbh%%E-c(xV5>(t{f4Q4jS?{gb9qP4r*=L}@)h6TyU@KYlbF`4F~h@TYFuOD+mK zK(j7y;tnx+|7a~1lrEf%A22%->>hP#kJ~>n8qMiXp+vMXIC%q*b;ES!uT%SL-xjb@ zERdM^#1|SzE #f O1Ob8R&)^EjnGQ; z{!aW$!}tq?X8)os&T qp)^P2E+u;+_7-Lg zIXId3L(U$}1F4J4o~pc|eP( ^Tp18_7&T^Q&qMtK&h~Tsoe8JBdKVtCL8&Tc zsdS)mMq#ZPzY_GqZA|_Ta5jK qO>G4IQ#x@(v^&8472gI=)6O4v462@E@lNol%kpr*yBhy&<@>Q_e^A~0 zb;ppaIi9yP@7<@LxrTh7J1j-wEkjn06Dr(Mq8FaLm9UMZ`Bp5dDb(e9Va;)gzxbY9 z!F ZGD& #Z@Oz z8%`R@#!Z%CFVn3g5sHjG&|ASd0bb|ybvcgQcOZE2qhRm{Nr$m^RUpBOg*}{rB7gZx z=6519_mmj@8TTbjF!97_RTjHrjgc?aXgZT?I8#G%TNK_}lryxb7`23C7RwchX=)a8 z0Dj#n2z%ep9y>)}uE|P{%^iFw??_;(Zbb(}o!vuo6R`Lxr=PUy1aaZXJ#I4_$BsdB z _*8fU- 2hXkN&qe?;=EUB4VLlY;A9g!v6XReZa^y)~u znn(8P*c|O!DrIGur4gKY;B>WE-(i@Q`;C!YxMe3&5WMpKjG@6!?lUkWNGUTNEmKp{ zW?U>>EW$eQA!DVmuaoFJDkX`EQ%9E*{?#o6U)a5*Jshik>|>rHGJBv@P#q>L%Hw2y zMv*k+o4-PWpQ)dZG>W;Hh coB8I*)8ZX;jj8aP`pzCZJ~I0Jc)cg$#^}rSQoL~#XxdA>FL~nGp*!W-e|1l ziUI;MdAJ@rV Kh_77AO@LpHF kw>IF_jAa|| z%dsM=X`du_o=Vz9+U#o|f7BG&Ov`m}*w~ZhyzAc9YbddqK7?Pa(LHTCd<`Jm^$a|% z<`29AX!8{oc@9A&>T94kSz-J0A8k_^k2zk)i%eJ z?B6l7!bQY9g#;T7LQEeAH z!PX)!O>$dX@I^6wv^y$=ZGF{cC>-AIhso(wb0^VGjR*|N9Lu1ESFFt*uaD|d4*v=& zcl|IVUnM6=`m=-t^E$T}@cM 6H{cN!G}{L~x1tU{#Bc~Kh=t)_4nFR5>Vpn`Rp zeo=C_$g0Fv-)9UTE;%eb7N=0QL2=m!QrA>GX2sGw#$;e$qR2jGsDQK(uti$qeLv&} z1y XX0R#!)!hu9OB~6!mv6tWLqFp#KgF`1DcbZ&fAt zx>7|11T8Dg;SuF%U~{YrDk6h-62dW?vB~swgneX8@vE^($6VS`5PD9c9Swb#ONhnp zknhGiJm%nPC#p90LfFYe=uPcSl1C{jb>-gM7*s`|$Vj4q_+TVG9Pr>C0T=jl_i?qr zm*knhR9R2AV~eV)Tw*}{#!{ }`3kzW5cnk$OO>zBXHS3nyjdA5Q zKaD*6d6<_XFqpoKP_v+an0l`vwZ2hE1@dnK6;>fEko<-ONLZktF*0M4GN;O$3zBjl zIJ>05x(`jpMBWdI@@m?fdG&MzG* j7CTx7Z*U7aRNh}_ zHNN|5O#bko*lVbMa$N#V&|0$)sP&Zo?k~`s`C^p2Y(svEHomM2<-v2saxe?$;}H>; z#l#GLjXI-R-O*d9mntbK0rl$~THoPwI(=VecV<9d;ICEv*z6|nOWz7CXj8Su6v?0o z_Za;XX3Zv!aFiP9Wc@7)Z!O;JV{c95zQ^vaE3q;JtobdSqs=>g( z1ULPZYl6Zcrjj7wk9}_(6T vN?$ogPHVyN$qereQEciDhUq zl@L`5Re_|@(Z=Htuy`aiDyr0E=?ZkM4ZD^{2iqxd;0<=|D!(DpmwDaAC!3lA$K$ZF z6mHB72gnB6G&@II8j1g6C0C?LDM5z}Lhvdi^?#}m>Qg9>%tfydmq;5}SDt?z1G@fY zGQP@UU!1aPW4q|T%984rg~0+ga}tCEc4xfhhe|W{Bhep~pe|+^Irv-dSU#M*pkC2f zC=d5`O@U;>_TDXa*n}c|-Ywwy&G7O;;Dn})0N{P`tDzl{Fd*Ieq$3X3jiqWi{^i(- zrEf@|`lCS1%a0Sqs6S3THR|lz<85}n@DjFz4q(C*=90 G>1KQr2At`zc*sALXQi@QqRuv;l)8kiMzoUb1_yU*(jX}FUp}j6Z z^ylJm>rO8kw{dUic0UiW?5qkAd%;i_%vT@F#kppjQ_`E* be9AsR6*vz-M6|ZE^W8AvOj)2M2-OCj{8?VfEm7zYD3|kgtb~z{ z-v_GFCic)i>5k57!%nFTf-Us(Pblq!*JcS(LDifboiida(MP0b>B>G4e?Ba~VfJ+! z+~M_cKtMk7>tH`P6$nlOP~UFg-!8pEwN`VHoN|St#Eo}`ed(av2i|y%cf3LeCXA09 z+IzE-!$L{!k~wM69kS%hB4Re o0za24RZ5smPNXxcbv*N z#-xhHIAzvf8X=YFL4dIXzX uL8My1nxZ3^6dKMVq}hE9yc;f zjb aI5XNbjhSJ)MB3 zTnXKLvE&g+000SeD+hXve6chee5d2Bb;VN;jXX86IVtbF6pb1)5k`x|!?19un^KNJ zqQ%G_$_EwFQAdi%P0)XByp&Qj@VHm7>G7iRIUZ9a7Hyye$OLuN6MBu%L1s3x!hN zp0H#(6M3LmPDKyW*^2G pJ# z$2tT0JMQcANt^L4X{@V5&j5M`mp|&cNp8ra-wPjODSb#(=U|B{iHU@y2+MJ9A*_Ql zlJpZ^b(Ny|iM$TGcBQ^1wC4t}Chtw6hn*vxWM0COSuASl@8v#>z|~do<&*6X&yVz! z`?a)R4$|)wD=B=ElB*Z-fsMR3;Og_Do59b<&m2OTse{Tku2C=FVjiymVp^JZAD3UW zqla)Qnj?qtnuzweDS;mr_z)1U4jAGDjk;pLBBwHS(aV~%oM)QPg#U02DOXi3K^D(5 zk_SpyXqYz{V3^@FDVjntn&MFU%u!N6AVWY9=h}9AZ+|_dV5bfkQnS4td^-EQd%Qb8 zU#_=cyjNKcHRJ#bg1RZ1j_h&`kV%I#(&{EcWaqQ*AM;Un6Yvh6+7=JBC^qc~`jZ{s z&52p0kdTsbW-1`1^gZx=4Rv&gc9%xGk0FWp74z$Q =V1fSOdb&FIiZ z#kIP7*H-=A+D=o2594FiDFo*($(@Z@Gv*UNk-Gx=?zzC7C&i%ril>=^=+r9RIB(3d zec|AK&lWz8x@F|qo07dFB}rW+n^j-&p%KQLLNuFUt8toxXb(vVOM;Bf096qoY;(YW z)z{Gx)RuoSSGTc-n1fP+FN}2&S@LRdl@NC^Gi6#u6#EQ1&AvQv=RGu4T8ijL*)8_M z!yD)Idm`E~LN|CN^E#@MeCI1Y7R?#onz+wHRIPZW|LJf{BBXnFYRtZ!i7A1R`xFD? zG#h$J&bqp|YGxOAHt(8PLJaYo96YRig+H-4mg>)e?ObjjfBdoTK7k &9-AdrBqd5HqJU4ILqed*@H1@VWkNgY}_}yY)WZ z&9Q?w2V|Rvn|d7a5p@06n4ue}xW6L|$Cd$op J&2Z{jrHOTVyS+NziE`4S!Uq94M%@3nUtAknw!k?;`feOLh*fhODaBFA(2v zJ;VD%A%cuBZ_1za9;Jc1bY$J~gX@bjk|Va|;y+l7LQ6(TwDXB?kzW^FtAU1~?^Z?z z5Ad=ZsCGFT+XDQ#bH34Bd3a$em+7bRhc5%VAN6t`(oA~RbMZ8VH=UGmCP5?xAjZ6& zIM;PMQ*P3AqA}#|aO}x-YSrE;YI8iD%_G|+mZJO)BMf?ZIZ-bgC0?&hdrJ72;G$r! z6HHyZBf+kVWP7}o{cd@r2wqVtC%XZk)`@SW3$x+`9jt0?5-xeXNJ3%EbJj~gc{!>v zn!a9MMv(83hZD%-5mclGQb0#=YvD3Mgp||HDpvxy;`_KEF`5nJm_sEUPNB1@79C)Q zDL9Q_1^=Ehlh{tw%hg$Me}%b@)LHEzN6YCLYqEW{{B%LOURdOXIo+my*lGKx=%q~} zl{g?FH~}@7q35%uFTA*+pDO-!%M}eo(ly7p>cpU?X}q#4HVqf|;_s$i@m{XO(-jmt z+_FmgWGEw!<@rp;Ee{GPL|*~U>^`>2#r)rQdOqV~Iws_z6F)Z@t-gfC?-Ad_CW5Di zlWeG$duSbWSMXe`yg|B#&yBRP0k s%hZvBt- z8q%S{x`I}GU9xJc66S25hQedavZV&qSbs_F5OpIAq-hEb$`wXn-g6hCy@;LBTI|a) z@Lu2X@Cl5OF33#3yQ;n?r=J9F6>KI#RWEvYg+?p*hw5f>9wThlwjq1>9a9a@zE?Sf zJK#EfWi6Os4+UTImQ1CvCURV-g)>fpq9o`P+fO+iOq=?BFbpM#Dj4=$BxOu!$LT-a zwNd2=tcEbQTn{)jV=hbYNlU~+D3WOp{N;=0WNQkIF~!~ct=b_nKA?S)6@1Ls_XG=> zJ1w!23E^Qgu%;A_bF<5IlJa>(H}i;|%|@im7vjtzv8?Ys{Aq_*nd8*YHeE;irR)`B z^XFOTF;h=F@wApBO4FP=rcZWV&imJ$z)0+BLG673N~w 6|89x*aX_9_%XAEAT0b|1)j&_Ur{vjRV#VylTavOK*SrI)D2SEo268E*__Bt@fJV zog{gKCxSiJ(=uykiv|4g1^X+@fb_s`;1;QXS`%7)Rw)%Xhl+evg 6YgxudKug<^fMVqGCx*#~9jx)XB++nv}EVM?}Ig~Y? zG4F0Z2U}zIBBfowxgS=Zkkwery;qYpZeX3m1P&Nxg3vLTB^au6-B6Ep>M@rmO