From 1346b27f804720df6b23f39e9836c5017d6cd4fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20S=C3=B8rensen-Boll?= Date: Mon, 15 Mar 2021 16:09:58 +0100 Subject: [PATCH 1/6] Added documentation in adoc format --- ...RASP_Library_DotNet-InstallationGuide.adoc | 104 ++ ...ary_DotNet-ReleaseNotes-CacheOverview.adoc | 22 + doc/OIORASP_Library_DotNet-ReleaseNotes.adoc | 504 ++++++++++ doc/OIORASP_Library_DotNet-Tutorials.adoc | 943 ++++++++++++++++++ doc/images/rasp_clientappconfig.png | Bin 0 -> 58798 bytes doc/images/rasp_dotnetproperties.png | Bin 0 -> 32038 bytes doc/images/rasp_extendedrequest.png | Bin 0 -> 42623 bytes doc/images/rasp_iis.png | Bin 0 -> 70143 bytes doc/images/rasp_interoptest2properties.png | Bin 0 -> 19228 bytes doc/images/rasp_interoptest2properties2.png | Bin 0 -> 35032 bytes doc/images/rasp_interoptest2properties3.png | Bin 0 -> 54000 bytes .../Howto Release Signed .Net RASP.txt | 36 +- ...I RASP Library for .Net Cache Overview.csv | 15 + ... RASP Library for .Net Cache Overview.xlsx | Bin ...P Library for .Net Installation Guide.docx | Bin ...SP Library for .Net Installation Guide.pdf | Bin ...I RASP Library for .Net Release Notes.docx | Bin ...SI RASP Library for .Net Release Notes.pdf | Bin ...OIOSI RASP Library for .Net Tutorials.docx | Bin .../OIOSI RASP Library for .Net Tutorials.pdf | Bin .../release-notes-1.3.0_HowToUpgrade.txt | 51 +- .../release-notes-2.0.0_HowToUpgrade.txt | 41 +- .../release-notes-2.1.0_HowToUpgrade.txt | 93 +- .../release-notes-2.2.0_HowToUpgrade.txt | 39 +- .../release-notes-CacheConfiguration.txt | 134 +-- 25 files changed, 1783 insertions(+), 199 deletions(-) create mode 100644 doc/OIORASP_Library_DotNet-InstallationGuide.adoc create mode 100644 doc/OIORASP_Library_DotNet-ReleaseNotes-CacheOverview.adoc create mode 100644 doc/OIORASP_Library_DotNet-ReleaseNotes.adoc create mode 100644 doc/OIORASP_Library_DotNet-Tutorials.adoc create mode 100644 doc/images/rasp_clientappconfig.png create mode 100644 doc/images/rasp_dotnetproperties.png create mode 100644 doc/images/rasp_extendedrequest.png create mode 100644 doc/images/rasp_iis.png create mode 100644 doc/images/rasp_interoptest2properties.png create mode 100644 doc/images/rasp_interoptest2properties2.png create mode 100644 doc/images/rasp_interoptest2properties3.png rename doc/{ => old}/Howto Release Signed .Net RASP.txt (98%) create mode 100644 doc/old/OIOSI RASP Library for .Net Cache Overview.csv rename doc/{ => old}/OIOSI RASP Library for .Net Cache Overview.xlsx (100%) rename doc/{ => old}/OIOSI RASP Library for .Net Installation Guide.docx (100%) rename doc/{ => old}/OIOSI RASP Library for .Net Installation Guide.pdf (100%) rename doc/{ => old}/OIOSI RASP Library for .Net Release Notes.docx (100%) rename doc/{ => old}/OIOSI RASP Library for .Net Release Notes.pdf (100%) rename doc/{ => old}/OIOSI RASP Library for .Net Tutorials.docx (100%) rename doc/{ => old}/OIOSI RASP Library for .Net Tutorials.pdf (100%) rename doc/{ => old}/release-notes-1.3.0_HowToUpgrade.txt (97%) rename doc/{ => old}/release-notes-2.0.0_HowToUpgrade.txt (97%) rename doc/{ => old}/release-notes-2.1.0_HowToUpgrade.txt (96%) rename doc/{ => old}/release-notes-2.2.0_HowToUpgrade.txt (96%) rename doc/{ => old}/release-notes-CacheConfiguration.txt (98%) diff --git a/doc/OIORASP_Library_DotNet-InstallationGuide.adoc b/doc/OIORASP_Library_DotNet-InstallationGuide.adoc new file mode 100644 index 00000000..73f1756a --- /dev/null +++ b/doc/OIORASP_Library_DotNet-InstallationGuide.adoc @@ -0,0 +1,104 @@ +:toc: +:toc: left +:toclevels: 6 +:sectnums: +:sectnumlevels: 5 +:xrefstyle: full + +== Installation guide + +=== Introduction +The OIOSI RASP Library for .NET is a Microsoft .NET-based toolkit for implementation of RASP (Reliable Asynchronous Secure Profile) compliant business applications. + +*The current stable version is: 2.1.1* + +This document describes the steps needed before the RASP Library can be built and used. + +The library can be downloaded from https://digitaliser.dk/group/405467/resources (Compiled Library) or at directly https://rep.erst.dk/git/openebusiness/library/dotnet (Open source Git repository) + +=== System requirements + +In all cases the following is needed + +* Microsoft Windows 7 or newer, including the latest service packs +* Microsoft Internet Information Services 5.0 or later +* Microsoft Visual Studio 2012 +* Microsoft .Net 3.5 Framework +* Port 80, 8080 and 8008 (HTTP) outgoing open +* Port 389 (LDAP) outgoing port + +To host your own RASP HTTP service you will also need + +* Port 80, 8080 and 8008 (HTTP) ingoing open + +=== Install Package +The OIOSI RASP Library is distributed as a zip file, which should simply be unzipped into +any folder. + +Note that projects within the release pack cannot be moved from their internal paths relative +to each other. If so, library references must be updated. + +The zip-package contains: + +|=== +| lib | External libraries used by the OIOSI RASP Library +| samples | Sample projects +| src | he OIOSI RASP library source code +| test | nit and integration tests +| dk.gov.oiosi.library.sln | Visual Studio 2012 solution file +|=== + + +==== Certificate +New feature in RASP 2.2 is that each .dll is signed by a Software Publisher Certificate (SPC). +Digst has purchased a productive certificate that is used in the release cycle. +If you want to compile the code yourself (using the NAnt script), you must install the selfsigned certificate located in ‘certificates\SelfSigned\DigstSelfSignedSPC.pfx’. Alternative, you +can add your SPC thumbprint to the System Enviroment Variable with the key +’DigstSPCThumbprint’. + +==== NUnit (for running the NUnit sample test) +To run the NUnit test dll located in the test folder, NUnit needs to be installed locally on the +machine. When installed the framework can be used to run NUnit tests and develop tests in +Visual Studio. Follow the two simple steps to install NUnit: + +1. Download the newest install version of NUnit for .Net from www.nunit.org. +2. Install the downloaded file. +Now NUnit tests can be executed from NUnit which is located under +“start/all programs/NUnit.Net-version/NUnit.Net-version”. + +==== Test endpoints +Test endpoints can be found at the following location: + +http://digitaliser.dk/resource/555072 + +=== How to release Signed RASP .NET +Work has gone into make a signed release og RASP .Net. +However, we have the problem that the virtual build server can't reach the code Signing certificate on physical USB eToken. +Therefore, the only option so far, is release a signed version from a workstation. +These steps explain howto setup the workstation to release a signed version of RASP.Net. + +. Add (if not already exist) to windows Enviroment, the password to the certificate (yes, the key start with '-'): + Name -DigstSignToolPassword + Password not added to SVN. + + +. Add (if not already exist) to windows Enviroment, the key and Hash to the certificate (yes, the key start with '-'): + Name -DigstSPCThumbprint + VAlue 98642f19b787ec0386db8b52ce9e8ed4e49c + +. Install (if not already done) SAFENET DRIVERS: https://www.trustzone.com/standard-code-signing (step 1). + +. Find the svn revision number, and update the file './../NAnt.build.Distribute.Signed.bat', and set the correct build number (line 27). + +. Run the file './../NAnt.build.Distribute.Signed.bat'. + + +=== Verifying installation +To verify that the setup of the library has been done correctly it is recommended that one +compiles the RaspClientTests solution and, tries running one of the test projects such as +dk.gov.oiosi.test.request, or that the dk.gov.oiosi.test.nunit.library project is compiled and +run in NUnit. + +=== Uninstalling +Uninstalling the RASP Library is done by simply deleting the folders into which the library +was unzipped. diff --git a/doc/OIORASP_Library_DotNet-ReleaseNotes-CacheOverview.adoc b/doc/OIORASP_Library_DotNet-ReleaseNotes-CacheOverview.adoc new file mode 100644 index 00000000..ce0c0b32 --- /dev/null +++ b/doc/OIORASP_Library_DotNet-ReleaseNotes-CacheOverview.adoc @@ -0,0 +1,22 @@ +:toc: +:toc: left +:toclevels: 6 +:sectnums: +:sectnumlevels: 5 +:xrefstyle: full + +== Cache Overview +[format="csv", options="header", separator=";"] +|=== +Cache name;OIORASP 1.2.3.HotFix1;OIORASP 1.3.0;OIORASP 2.0;Proposition to change +LdapCertificateLookup/CertificateCache;TimedCache - 14 days;TimedCache, 24 hours validity, each 1 hour check for expiration;TimedCache, 24 hours validity, each 1 hour check for expiration;Limit maximum number of entries by some big value to avoid OutOfMemory, use LFU cache together with timed cache +OcspLookup;TimedCache - 1 hour;TimedCache, 1 hour validity, each 10 mins check for expiration ;TimedCache, 1 hour validity, each 10 mins check for expiration ;-- // --- +UddiLookupClient.getServiceCache;TimedCache - 24 hours;TimedCache, 1 hours validity, each 10 minutes check for expiration;TimedCache, 1 hours validity, each 10 minutes check for expiration;Critical! If we do not decrease it, NO changes in public UDDI can be visible to clients during 24 hours. +UddiLookupClient.getTModelCache;TimedCache - 24 hours;TimedCache, 24 hours validity, each 1 hour check for expiration;TimedCache, 24 hours validity, each 1 hour check for expiration;Barelly used at all, at least none in TrueLink subsystem uses it. +SchematronStore;QuantityCache - 2 path entries;LFU cache (max size 20), no expiration;LFU cache (max size 20), no expiration; +CrlCache;Unlimited hashtable for each CRL url, checks for expiration each time it is accessed, updates in the same thread where it was found that it is expired;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server; +SchemaStoreCache;absent, Schema object is built each time when required;LFU cache (max size 20), no expiration;LFU cache (max size 20), no expiration; +MessageIdUnfinishedSignaturesCache;10 minutes;TimedCache, 1 hour validity, each 10 mins check for expiration ;TimedCache, 1 hour validity, each 10 mins check for expiration ; +SequenceIdUnfinishedSignaturesCache;10 minutes;TimedCache, 1 hour validity, each 10 mins check for expiration ;TimedCache, 1 hour validity, each 10 mins check for expiration ; +|=== +LFU: Least Frequently Used diff --git a/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc b/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc new file mode 100644 index 00000000..e3b48019 --- /dev/null +++ b/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc @@ -0,0 +1,504 @@ +:toc: +:toc: left +:toclevels: 6 +:sectnums: +:sectnumlevels: 5 +:xrefstyle: full + + +== Release notes +The OIOSI RASP Library for .Net is a .Net based toolkit for implementation of RASP business +applications. + +The distribution is part of the OIOSI work for exchanging business documents in a secure and +reliable way using the internet. See http://www.digst.dk/It-loesninger/NemHandel/Til-itudviklere for more information. + +The framework can be downloaded from https://digitaliser.dk/group/405467 + +=== Release content +This release comprises the following deliverables: + +* dk.gov.oiosi.library.sln – Main Visual Studio 2008 solution +Documentation: +* OIOSI RASP Library for .Net Release Notes.pdf (this document) +* OIOSI RASP Library for .Net Installation Guide.pdf +* OIOSI RASP Library for .Net Tutorials.pdf +* release-notes-2.1.0_HowToUpgrade.txt +* A number of detailed release-notes related to specific issues – named release-notes- +_.txt + +Samples + +* dk.gov.oiosi.samples.TestCertificate – Test certificates using RASP +* dk.gov.oiosi.samples.httpEndpointExample – Deployable test endpoint +* dk.gov.oiosi.samples.ClientExample – A client example that can send a document +* dk.gov.oiosi.samples.consolesClientExample – A console client, use to send a user +specific document + +For testing (as sub components of the RaspClientTests solution file): + +* dk.gov.oiosi.test.request – Sending test project +* dk.gov.oiosi.test.extendedRequest – Uddi, ldap and ocsp test project +* dk.gov.oiosi.test.nunit.library – Nunit test project +* dk.gov.oiosi.test.nunit.interop – Nunit interoperability test project +* dk.gov.oiosi.integration – Nunit integration tests + +Contributors to this release: + +* Jacob Lund Mogensen, mySupply ApS +* Peter Sone Koldkjær, mySupply ApS + +=== What is changed? +[NOTE] +In the following part of the document, some issue numbers are mentioned – these numbers are +internal numbers used by the Digitaliseringsstyrelsen (Danish Agency for Digitisation), so please ignore these as external +developer. + +[#rasp_2_1_1] +==== RASP version 2.1.1 +Main purposes of this release have been: + +* Make patch for NemHandel Referenceklient to avoid program stop on 2 Trust2408 root +certs in Windows cert. store. + +===== New features +_None_ + +===== Fixes +_None_ + +===== Changes +* Update CertificateLoader.GetCertificateFromStore to avoid +CertificateLoaderMultipleCertificatesFoundException() based on more than one found cert +(issue 1961). + +===== Removals +_None_ + +==== RASP version 2.1.0 +Main purposes of this release have been: +* Update code to enable PEPPOL BIS documents in Danish NemHandel. + +===== New features +* Support multiple schematron validations per document type. +* Send document, having a Sender part with other KeyType than the valid Danish receiver +KeyTypes. +* xPath parsing of values in RaspConfiguration has been updated, so it’s possible to set a +fixed value instead of an xpath – eg. string(‘EAN’). +* RaspConfiguration: It now possible to set an empty string as value for to +disable Schema validation for a single document type. +* Support schematron styling using XSLT version 2.0 (Peppol schematrons), by using IKWM +and Saxon. + +===== Fixes +* Minor memory improvement (release resource after use). + +===== Changes +* Minor restricting of internal functionality +* BouncyCastle.Crypto.dll has been updated from version 1.7 to version 1.8. +* dk.gov.oiosi.xml.dll has been removed, as it was not used. +* Add several new required libraries (IKWM and saxon) for the XSLT version 2.0 styling. + +===== Removals +* Functionality and classes that convert and KeyType to a specific Identifier implementation, +using the enum EndpointKeyTypeCode. +* Removed lesnikowskiMailProvider and some code around mail sending and receiving. +* Removed invalid and not used enum EndpointAddressTypeCode values. + +==== RASP version 2.0.2 +Main purposes of this patch release have been fixing smaller issues not related to functionality. + +===== New features +_None_ + +===== Fixes +* Spelling and divided text strings fixed. +* Minor exception error fixed in OcspConfig. +* Some invalid example files updated. + +===== Changes +* Unit tests depending on old UDDI Test setup, has been updated to depend on new NHR +Test setup. +* Schematron version 1.5 to project (2013.09.15) added to project +(http://digitaliser.dk/resource/2514884) +* Presentation style-sheets version 1.5 (2013.03.15) added to project +(http://digitaliser.dk/resource/2455502) +* dk.gov.oiosi.raspProfile.dll added to binary package. + +===== Removals +_None_ + +==== RASP version 2.0.1 +Main purposes of this patch release have been fixing a serious cache issue. + +The problem also persists in RASP version 1.3.0, but by intention, a patch is not released for RASP +1.3.0 because all NemHandel parties must upgrade to RASP 2.x.x latest June 2013. + +===== New features +_None_ + +===== Fixes +* Implementation of TimedCache had an error multiplying the cache time by 60. So a +CertificateCache with validityTimeInHours=24 cached the certificates for 60 days [1210]. + +===== Changes +_None_ + +===== Removals +_None_ + +==== RASP version 2.0.0 +Main purposes of this release have been: + +* Full support for Foces2 certificates. Foces1 is still supported in this version, BUT after +June 2013 DanID will no longer issue Foces1 certificates. Renewal of Foces1 certificates +will also not be possible after this date. + +The version number is changed to 2.0.0 to clearly indicate, that this version of RASP will not be +able to communicate with any RASP 1.x software where one of the parties communicating has +updated to Foces2. + +===== New features +_None_ +===== Fixes +* Error messages for invalid certificate (before activation or after expire) has been updated to +show certificate subject [1098]. + +===== Changes +* LDAP URL changed in RaspConfiguration.xml (/Host) to crtdir.certifikat.dk [1053]. +* RASP library identifies itself by platform and version number when making Uddi Inquiry +requests [1142]. +* Log4net library updated from version 1.2.10 to 1.2.11 [1168]. + +===== Removals +_None_ + +==== Cache Configuration (From version 1.3.0) +Possibility to configure caches (new functionality from RASP version 1.3.0) + +By default, after updating OIORASP library, cache configuration is changed. See "OIOSI RASP Library for Java Cache Overview 1.3.0.xlsx" for details. +The new cache configuration settings can be seen in the default RaspConfiguration file located in /dk.gov.oiosi/src/dk.gov.oiosi.resource/RaspConfiguration.xml. + +How to change cache configuration: + +1. The cache is configurated in the ConfigurationSection element (type =CacheConfig) as demostrated below: +[source, xml] + + + dk.gov.oiosi.common.cache.TimedCache + dk.gov.oiosi.RaspLibrary + + + validityTimeInHours + 1 + + + frequencyInMinutes + 10 + + + + ... + + + +2. Possible nested tags inside this section are: + - CertificateCache - The certificated downloaded from LDAP + - OcspLookupCache - A ocsp validation result (if the certificate has been revoked). + - UddiServiceCache - The registration downloaded from UDDI (NemHandelsRegisteret). + - UddiTModelCache - The special TModel key, that is used i UDDI. + - SchemaCache - The build xml schema + - SchematronCache - The build schematron + - CrlLookupCache - Cache crl lists (list over the certificates, that has been revoked). + - MessageIdUnfinishedSignaturesCache - Used in RASP communication + - SequenceIdUnfinishedSignaturesCache - Used in RASP communication + + +These tags should have sub-tags: + +ImplementationNamespaceClass - class name of the cache to use +ImplementationAssembly - not used in OIORASP java, optional +CacheConfigurationCollection - list of configuration parameters, which depend on cache implementation class. + + +Detailed description: + +In OIORASP 1.3.0 there are 4 configurable cache implementations: + +1) dk.gov.oiosi.common.cache.TimedCache - contains unlimited number of cached values, which are removed from cache with some expiration time. +Parameters: +validityTimeInHours or validityTimeInMinutes - integer with number of hours or minutes during which cache entry is considered as not expired +frequencyInHours or frequencyInMinutes - integer with number of hours or minutes to check expiration state of cached values. +Default values: +1 hour validity period and 10 minutes expiration check. +By default this cache is used for certificates, OCSP revocation and UDDI requests caching. + +2) dk.gov.oiosi.common.cache.LeastFrequentlyUsedQuantityCache - limited number of cached values, no expiration, least frequently used values are removed from cache if it is overloaded. +Parameters: +maxSize - integer with maximum number of cached entries. + +3) dk.gov.oiosi.common.cache.LeastRecentlyUsedQuantityCache - similar to LeastFrequentlyUsedQuantityCache, limited number of cached values, no expiration, but least recently used values are removed from cache if it is overloaded. +Parameters: +maxSize - integer with maximum number of cached entries. + +4) dk.gov.oiosi.common.cache.ZeroCache - cache nothing, no parameters. Primarily used in debugging and development + +==== RASP version 1.3.0 +Main purposes of this release have been: + +* Support for oces2 certificates. This release has prepared and tested code to handle these +new certificates. It will not be possible to start testing this in the general public before +DanID later in 2012 opens the last infrastructure components. DanID will sometime in +2013 stop issuing oces1 certificates and at that time, the RASP 1.3.0 (or newer) will be +mandatory in NemHandel. It will be announced when the date is set and notification will be +given at least 6 months in advance. +* Optimize performance. Caches have been made configurable, memory consumption have +been minimized, style-sheets are now pre-compiled, code is optimized – all to optimize the +throughput of communication. + +This release is fully compatible with RASP 1.2.1 and 1.2.3 when using oces1 certificates. +The 1.3.0 release is not a patch release, due to several breaking changes. + +In the provided Rasp Configuration file a number of default values for e.g. cache sizes have been +proposed. These are only default values, and can be changes by users as needed. +It is recommended to use the provided Rasp Configuration file as starting point. Please see the +details below for configuration. + +.Default values +[format="csv", options="header", separator=";"] +|=== +Cache name;OIORASP 1.2.3.HotFix1;OIORASP 1.3.0 +LdapCertificateLookup/CertificateCache;TimedCache - 14 days;TimedCache, 24 hours validity,each 1 hour check for expiration; +OcspLookup;TimedCache - 1 hour;TimedCache, 1 hour validity,each 10 mins check for expiration; +UddiLookupClient.getServiceCache; TimedCache - 24 hours; TimedCache, 10 hours validity, each 10 minutes check for expiration; +UddiLookupClient.getTModelCache;TimedCache - 24 hours;TimedCache, 24 hours validity, each 1 hour check for expiration; +SchematronStore;QuantityCache - 2 path entries;LFU cache (max size 20), no expiration; +CrlCache; Unlimited hashtable for each CRL url, checks for expiration each time it is accessed, updates in the same thread where it was found that it is expired;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server; +SchemaStoreCache;N/A - Schema object is built each time when required;Deleted from RaspConfiguration Test and Live + +|=== +===== New features +* Oces2 certificates are now supported. OIORASP 1.3.0 is prepared for DanID to start issuing +oces2 certificates. +* Schematron validation speed has been improved. +* New internal Rasp logger that can be used to get status information from inside the RASP. +Can be replaced by another logging implementation, by updating the configuration file. +* Configurable cache and improved implementation. +* Schema and schematron validation is moved before the sending process begins. +* Update OIOSIMessage, so the receiving document can be received as a test string, instead +of an XmlDocument (much faster processing, if the document is stored in e.g. database). +* Lots of logging has been added around the code base. + +===== Fixes +* Xpath for KreditNota made absolute [367] +* Profile validation error in test-code [579] +* Code reference to .NET 3.0 stuff fixed [598] +* Enable code to allow SE as sender type [613] +* Field ServiceType always empty in UddiLookupResponse [637] +* Error in EndpointAddress corrected [644] + +===== Changes +* http://discoverybackup.uddi.ehandel.gov.dk/registry/uddi/inquiry put in as default +backup [621] +* BouncyCastle and other libraries are updated to latest version. +* December 2012 schematron files (version 1.3) put in as default files [668] +* Schema is now placed correct, and loading of included schema, is also handled correct. +* Improved samples, that show how sending and receiving should be done. +* Use revocation CRL instead of OCSP. +* Rasp Request interface has changed. +* Implemented functionalities that can test certificates validity. +* Restructuring of source code for easy reading / debugging. +* Default location for schema and schematron files have changed, to get clearer file structure +(related to how e.g. Schematron updates are released [633] + +===== Removals +* Configuration of old VANS GW adapter removed from configuration files. + +=== How to release signed .NET RASP +Work has gone into make a signed release og RASP .NET. +However, we have the problem that the virtual build server can't reach the code Signing certificate on physical USB eToken. +Therefore, the only option so far, is release a signed version from a workstation. +These steps explain howto setup the workstation to release a signed version of RASP .NET. + +. Add (if not already exist) to windows Enviroment, the password to the certificate (yes, the key start with '-'): + Name -DigstSignToolPassword + Password not added to SVN. + + +. Add (if not already exist) to windows Enviroment, the key and Hash to the certificate (yes, the key start with '-'): + Name -DigstSPCThumbprint + VAlue 98642f19b787ec0386db8b52ce9e8ed4e49c + +. Install (if not already done) SAFENET DRIVERS: https://www.trustzone.com/standard-code-signing (step 1). + +. Find the svn revision number, and update the file './../NAnt.build.Distribute.Signed.bat', and set the correct build number (line 27). + +. Run the file './../NAnt.build.Distribute.Signed.bat'. + +=== How to upgrade to 2.2.0 +How to upgrade project from .NET 2.1.0 to version 2.2.0 + +This file should be seen as a guide for migrating own code to OIORASP library 2.2.0 + +The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! + +Steps + +1. Download new release from https://digitaliser.dk/group/405467/resources + +2. Replace your old .dll files with the new .dll and .config files. + +That should be it..! + + +It you meet problems, that should be included in this guide, please post your comments to the following email address: + support@nemhandel.dk + + +=== How to upgrade to 2.1.0 +How to upgrade project from .NET 2.0.X to version 2.1.0 + +This file should be seen as a guide for migrating own code to OIORASP library 2.1.0 +The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! + +Steps + +1. Download new release from https://digitaliser.dk/group/405467/resources + +2. Replace your old .dll files with the new .dll and .config files. + Please note, there are several new files (IKVM and Saxon). + Remove the 'dk.gov.oiosi.xml.dll' file (it is not used). + +3. RaspConfiguration.xml must be updated! + See RaspConfiguration-update-2.1.0.pdf + +4. Code updates: + EndpointKeyTypeCode class has been removed. Now endpoint types is treated likes strings, so replace the class with 'string'. + enum EndpointAddressTypeCode has been cleaned for unusable values (https, email, ftp and other) + EndpointAddressSMTP.cs has been deleted. + + A lot of cleanup in the (default) endpoint service WCF configuration files. + See the test instances for how the configuration files could look, for more information. + + Important updates are: +4.1 The WCF binding for lookup in NemHandelRegisteret (NHR), must be present and is now named NHR_lookup (was just call basic before). + The client endpoint can be removed (was only used to point to the binding below). + + + + + + +4.2 + The Schematron Store Cache in RaspConfiguration.xml file must be updated from + dk.gov.oiosi.common.cache.QuantityCache`2[System.String,System.Xml.Xsl.XslCompiledTransform] + to + dk.gov.oiosi.common.cache.QuantityCache`2[System.String,dk.gov.oiosi.xml.schematron.CompiledXslt] + + + +That should be it..! + + +It you meet problems, that should be included in this guide, please post your comments to the following email address: + support@nemhandel.dk + + +=== How to upgrade to 2.0.0 +How to upgrade project from Net 1.3.0 to version 2.0.0 + +This file should be seen as a guide for migrating own code to OIORASP library 2.0.0 +The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! + +Steps + +1. Download new release from http://digitaliser.dk/group/405467/resources/type/150019 + +2. Replace your old .dll files with the new .dll and .config files + +3. Update your RaspConfiguration.xml file - remember to: + - adjust path to resources (schema + schematron files) + - change ConfigurationSection "LdapSettings": Host has changed to crtdir.certifikat.dk + - add Oces2 root certificate in ConfigurationSection "RootCertificateCollectionConfig" + +That should be it..! + +It you meet problems, that should be included in this guide, please post your comments to the following email address: + support@nemhandel.dk + + +=== How to upgrade to 1.3.0 +How to upgrade project from Net 1.2.3 to version 1.3.0 + +This file should be seen as a guide for migrating own code to OIORASP library 1.3.0 +The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! + +Steps + +1. Download new release from http://digitaliser.dk/group/405467/resources/type/150019 + +2. Replace your old .dll files with the new .dll and .config files - Note there exist more files in this release then in the old release + +3. Remove OcspClient2.dll and bccrypto-csharp-b02.dll from lib - Not used anymore. + +4. Update your RaspConfiguration.xml file - remember to adjust path to resources (schema + schematron files), as the path has benn changed. + +5. When a document is received though RASP OiosiMessage, a new method MessageAsString is provided to extract the document. Use this new method to take advantage of the improved processing speed, that has been implemented. + +6. Some classes/method is no longer static, and must in initialized. + +7. Log4Net har been implemented to be used by RASP .Net. Update the configuration fil log4net4Rasp.xml, to fit you needs. + +That should be it..! + +It you meet problems, that should be included in this guide, please post your comments to the following email address: + support@nemhandel.dk + +=== Compatibility +This RASP 2.0.x release has been tested OK with RASP 1.2.1 and 1.2.3 for both Java and .NET +when running with Oces1 certificate at sender and receiver side. +Running with an Oces2 certificate, requires that both sender and receiver uses RASP 2.0.x. + +=== Known issues +Calling Abort() on the request may occasionally crash if one tries to update configuration or shut +down the application during sending. +This is due to a bug in the WCF WS-RM implementation that Microsoft has recognized. [as +reported: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2189376&SiteID=1] + +Processing large sized documents will consume large size of RAM and CPU. The RASP library it +self should no longer be the obstacle for sending and handling large files – but the hardware must +be well equipped, as well as internet connection speed between sender and receiver + +=== Licenses +Some of the source code is licensed under the Mozilla Public License Version 1.1. The used license +is stated below. +Please check each source file for a license declaration as some source code is licensed on other +terms. + +[source] +/* + * The contents of this file are subject to the Mozilla Public + * License Version 1.1 (the "License"); you may not use this + * file except in compliance with the License. You may obtain + * a copy of the License at http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an + * "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express + * or implied. See the License for the specific language governing + * rights and limitations under the License. + * + * + * The Original Code is .NET RASP toolkit. + * + * The Initial Developer of the Original Code is Accenture and Avanade. + * Portions created by Accenture and Avanade are Copyright (C) 2009 + * Danish National IT and Telecom Agency (http://www.digst.dk). + * All Rights Reserved. + */ + +The NUnit distributed is not a product of DIGST. Following license is from the +originator. + + Portions Copyright © 2002-2007 Charlie Poole or Copyright © 2002-2004 James W. Newkirk, + Michael C. Two, Alexei A. Vorontsov or Copyright © 2000-2002 Philip A. Craig diff --git a/doc/OIORASP_Library_DotNet-Tutorials.adoc b/doc/OIORASP_Library_DotNet-Tutorials.adoc new file mode 100644 index 00000000..476f6cd7 --- /dev/null +++ b/doc/OIORASP_Library_DotNet-Tutorials.adoc @@ -0,0 +1,943 @@ +:toc: +:toc: left +:toclevels: 6 +:sectnums: +:sectnumlevels: 5 +:xrefstyle: full + +== Tutorials + +=== OIOSI RASP Library for .NET 2.1.0 + +==== Introduction +The purpose of this document is to guide developers in creating an application using the +RASP library. The main components will be explained here, and example code showing how +to set them up will be given. +This document represents a high-level view of the main communication components. More +documentation is found + +* As comments in the code +* As stand-alone test applications +* As NUnit tests +* By seeing code used as part of other components + +Please visit http://www.digst.dk/It-loesninger/NemHandel for more information on the +OIOSI project. + +==== Overview of Lessons +The basics of the RASP Library will be explained through different lessons, each describing +one specific aspect of the API. +The lessons are + +* Configuring RASP and Windows Communication Foundation +* Sending documents +* Extended Requests (including UDDI, LDAP and OCSP/CRL lookups) +* Receiving documents +* The interceptors +* Hosting a HTTP service in IIS + +==== Prerequisites + +===== Resources +All common resources can be found in the resource project src/ dk.gov.oiosi.resource, and is +added (by link) to other project that need the resources. + +===== Sample documents +There are several sample documents used in the tests of the rasp library. They are located in +the src\dk.gov.oiosi.raspProfile\Resources\Documents directory. + +==== Sending Configuration - App.Config +Each test project has an App.Config application configuration file, and so should every +project that uses the RASP Library. +Most of the Windows Communication Foundation settings are done in App.Config, and this +section will briefly cover each important section in the configuration. +It is recommended that the main sections described here are copied from one of the test +projects, since the RASP Library is dependent on default settings (first and foremost the +OiosiHttpEndpoint, OiosiHttpEndpointBehavior, OiosiHttpEndpointBinding and +NHR_lookup). + +[#client_endpoint] +===== Client endpoint + + + +.App.Config sample 1 +[source, xml] + + ... + + + + + + ... + + +This sample shows a client endpoint, “OiosiHttpEndpoint”, using the attributes + +* name – Must be OiosiHttpEndpoint, as the name is hardcoded in RASP. +* address – Is retrieved from NemHandelsRegisteret, so can be left empty +* binding – Must be ‘customBinding’, as it described that we used a custom binding. +* bindingConfiguration – The name of the binding to use, described in the +customConfiguration see <>. +* contact – The contact describing the interface. +* behaviorConfiguration – The name of the behavior to use, described in <>. + +[#client_behavior] +===== Client behavior +The behavior configuration for sending. +.AppConfig sample 2 +[source, xml] + + ... + + + + + + + + + + + + + + + + + ... + + +The behavior name (‘OiosiHttpEndpointBehavior’) must match the defined name in <> + +[#client_binding] +===== Client binding +The binding configuration for sending. + +.App.Config sample 3 +[source, xml] + + ... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ... + + +First there is a basicHttpBinding, that must be named NHR_lookup, that is used to perform +lookup in NemHandelsRegisteret. + +Second, must of theses configuration should not be changed. +Last, there must be a customBinding where the name (‘OiosiHttpEndpointBinding’) must +match the defined name in <>. + +==== Receiving Configuration - App.Config +Each test project has an App.Config application configuration file, and so should every +project that uses the RASP Library. + +Most of the Windows Communication Foundation settings are done in App.Config, and this +section will briefly cover each important section in the configuration. + +It is recommended that the main sections described here are copied from one of the test +projects, since the RASP Library is dependent on default settings (first and foremost the +OiosiHttpServer, OiosiHttpServerBehavior, OiosiHttpServerBinding). + +Note – This section describe how to setup a receiving endpoint on an IIS (IIS hosted). There +exist other ways of setting up receiving service (self-hosted), that will not be described here. + +[#server_services] +===== Server services + +.AppConfig sample 4 +[source, xml] + + ... + + + + + + +... + + +This sample shows a server endpoint using the attributes +Service + +* behaviorConfiguration – The name of the behavior to use, described in <>. +* name – Is the namespace and class that implement the communication interface. +Services +* name – Name of the endpoint – not importen. +* binding – Must be ‘customBinding’, as it described that we used a custom binding. +* bindingConfiguration – The name of the binding to use, described in the +customConfiguration <> +* contact – Represents service contract implemented by the endpoint, describing what +operations are supported and what SOAP actions they expect (and return). RASP +endpoints should implement dk.gov.oiosi.communication.client.IClientProxyContract +interface. + +[#server_behavior] +===== Server behavior +The behavior configuration for sending. +.App.Config sample 5 +[source, xml] + + ... + + + + + + + + + + + + + + + + + + + + + + + + + ... + + +App.Config sample 6 shows an endpoint behavior. The behavior name +(OiosiHttpServerBehavior) must the name defined in <>. The behavior add the +signCustomHeaders and references a client certificate (and where to find it). As mentioned +before, this behaviour is referenced from a client endpoint. +The sender certificate and the server root certificate is checked using WCF extension, as this +give the possibility to create better error description back to the sender when something is +wrong. + +[NOTE] +==== +Oiosi RASP can use both Test and Live certificates, however most organisation +can’t use test certificates in testing. This is because of Nets port restrain in there +firewall protection the LDAR and OCSP/CRL servers. +==== + +For a hint on how to find the serial number and store location/name of your certificate check +the section named “Importing certificates” in the document “Rasp Library for .Net +Installation” + +The certificate configuration must match the location where the certificate is installed. In +this setup, the find value is the certificate serial number. + +[#server_binding] +===== Server binding +The server binding configuration. +.App.Config sample 6 + +[source, xml] + + ... + + + + + + + + + + + + + + + + + + + + + + + + + ... + + +The name of the server binding (OiosiHttpServerBinding) must match the name of the +binding defined in <>. + +===== Configuring timeouts +There are several timout settings in the app.config. Some of the overall timeouts are +described here. + +* SendTimeout is the overall timeout for a communication, i.e. including all RM +messages back and forth between sender and receiver. +* Open- and CloseTimeout concerns the timeout of the creation of a connection from +the sender to the receiver, and nothing else. +* ReceiveTimeout is the timeout for a process waiting for a message within a session, +before deciding to time out the session. + +==== Lesson: dk.gov.oiosi.communication +The communication namespace holds the 3 main classes for communicating with web +services using the RASP stack. These are + +* Request: Allows the simplest form of request using the RASP stack using http +transport. Transport options (i.e. using RM, security, schema- and schematron +validation) can be configured in App.Config as described in the earlier section. + +===== Request +dk.gov.oiosi.communication.Request is the main class for making RASP service calls. + +For a concrete example of how to use the Request class, see the test project +dk.gov.oiosi.test.request. + +The sample below shows how to easily use Request to send an XML document to an http +endpoint through the use of the method GetResponse. The code should be fairly straight +forward. + +.Code sample 1 + +[source, csharp] +// Sends an xml document and receives a response +XmlDocument xdoc = new XmlDocument(); +Request raspReq = new Request(new Uri("http://myEndpoint")); +Response response; +try{ +raspReq.GetResponse(new OiosiMessage(xdoc), out response); +} +catch(RequestShutdownException e){ +// No need to do anything in particular if one +//isn’t concerned with a nice shutdown +// If the response variable is set, it’s good to use +// and your message has been acknowledged +} + +Calls can be made to http service, and Request automatically detects which type of service is +being called by looking at the scheme of the URI given. Http endpoint addresses MUST be +formatted http://address and is normally provided by NemHandelsRegisteret, and is +currently the only one supported. + +Code sample 1 give an URI as lone argument to the Rasp constructor, defining what +endpoint messages will be sent to. However, Request offers two more constructors, presented +in Code sample 2. + +.Code sample 2 +[source, csharp] +// Takes the name of an endpoint in App.Config +public Request(string endpointConfigurationName); +// Takes an endpoint, credentials and a sending policy +public Request(Uri endpointAddress, + Credentials credentials, + SendPolicy sendPolicy); + + The first constructor in Code sample 2 takes the name of an endpoint in the application +configuration file. See the file App.Config in the test dk.gov.oiosi.test.request for further +reference to how the configured endpoint (OiosiHttpEndpoint) describes the service which we +will call. + +An endpoint configuration is needed no matter what constructor is used. Unless the first +constructor in Code sample 2 is used, the endpoint configuration name must be +“OiosiHttpEndpoint”, and therefore should always be present in the App.Config file when +using the RASP Library. See the App.Config section for more information. + +The second constructor in Code sample 2 takes an endpoint URI, just like the ones used in +Code sample 1+2, but also takes programmatically set certificates (for sending and/or +receiving). These will override any certificates given in App.Config. + +===== Extended request +This section demonstrates the following in addition to making plain Request: + +* Gets identifiers from xml documents (e.g. EAN or OVT numbers) from documents +using configurable xpath expressions +* Performs a UDDI lookup using these parameters +* Retrieves an endpoint certificate from LDAP based on information returned from +UDDI +* Checks certificate revocation status against OCSP. + +[NOTE] +==== +Please note that the project has moved into the samples namespace and changed name +to “dk.gov.oiosi.samples.consoleClientExample”. +==== + +For a concrete example of how to use the Request class, see the test project +dk.gov.oiosi.test.requestTests. + +Code sample 3 shows how ExtendedRequest encapsulates all UDDI, OCSP, LDAP and +document searching to send an XML document to an http endpoint through the use of the +method GetResponse. + +.Code sample 3 +[source, csharp] +// 1. Get client certificate: +X509Certificate2 cert = CertificateLoader.GetCertificateFromStoreWithSSN( +"CVR:26769388-UID:1172691221366", +StoreLocation.CurrentUser, +StoreName.My +); +OcesX509Certificate clientCert = new OcesX509Certificate(cert); +// 2. Define send policy: +SendPolicy sendPolicy = new SendPolicy("*"); +// 3. Create request: +ExtendedRequest requestEx = new ExtendedRequest(clientCert, sendPolicy); +// 4. Create test message: +// 4.1 Load a test message from file: +XmlDocument xmlMsg = GetTestMessage(); +OiosiMessage msg = new OiosiMessage(xmlMsg); +// 5. Get response: +Response response; +try { +response = requestEx.GetResponse(msg); +} catch (Exception ex) { +txtResult.Text += "RequestExtended failed: " + ex.ToString(); +return; +} + +You can run the ExtendedRequest test sample by running the +dk.gov.oiosi.test.extendedRequest project application, see below. + +image::images\:rasp_extendedrequest.png[] + +The LDAP, OCSP and UDDI lookup components have both online and offline implementation +of their interfaces, see the RASP client tutorials on how to switch between these. + +You can choose which implementation to run by setting the corresponding factory +configuration in the configuration file, see below. + +You choose the implementation type by setting class + namespace + assembly name. The +factory then instantiates this type dynamically. You may supply your own implementation of +the OCSP, LDAP and UDDI interfaces. + +.Code sample 4 +[source, xml] + + +dk.gov.oiosi.security.revocation.ocsp.OcspLookup + + dk.gov.oiosi.library + + + +dk.gov.oiosi.security.Ldap.LdapCertificateLookup + + +dk.gov.oiosi.library + + + + +dk.gov.oiosi.uddi.UddiLookupClient + + +dk.gov.oiosi.library + + + +Code sample 5 uses OCSP for to check for revocation, while sample 6 use CRL lookup. + +.Code sample 5 +[source, xml] + + + dk.gov.oiosi.security.revocation.crl.CrlLookup + + dk.gov.oiosi.library + + + +dk.gov.oiosi.security.Ldap.LdapCertificateLookup + + +dk.gov.oiosi.library + + + + +dk.gov.oiosi.uddi.UddiLookupClient + + +dk.gov.oiosi.library + + + +The OCSP-server is by default read from the certificate. This can be overridden by having a +configuration in the OCSPconfig section: + +.Code sample 6 +[source, xml] + + 10000 + http://localhost/ + + +The configuration file also demonstrates how to configure RaspDocumentType configuration. +This configuration is associates the following information with the root element of an xml +document: + +* Validation schemas and schematron xslts +* Xpath expressions for finding e.g. an EAN number or other endpoint key types +* Associate a service and SOAP action with the document type + +Most of this configuration points forward to the RASP client which uses this library for +automatically sending business messages. + +You can see the RequestExtended class for an example on how to string the OCSP, LDAP, +UDDI, certificate checking and Request components together, either by using configuration +or programmatically. + + +====== The UDDI lookup +The UDDI lookup of the extended request requires the UDDI connection to be configured in +the app.config file, where it has its own HTTP binding. + +The parameters of the UDDI lookup may additionally use a process definition filter. By +setting the BusinessProcessDefinitionTModel and RoleIdentifier fields of the +LookupParameters object, the result from the query is filtered using these criteria. If null, +they are ignored. + +For more information on how to use the IUddiLookup interface have a look at <>. + +[#uddi_lookup] +==== Lesson: dk.gov.oiosi.uddi.IUddiLookupClient + +This section will have a short description on how to use the UddiLookupClient interface and +the LookupParameters class for different scenarios. + +There are several different kinds of lookup in that the interface IUddiLookupClient supports. +The interface only has one method and that is for lookup that take some parameters and +returns a list of responses. See + +[source, csharp] +/// +/// Translate interface for the ARS (Address Resolving Service) client. +/// +public interface IUddiLookupClient { +/// + /// Translate parametres + /// + /// + /// + List Lookup(LookupParameters parameters); +} + +The parameters that are used for the lookup can be different after what is searched for in the +UDDI. It seems like there are three major lookups that is needed by suppliers and these are; +first one is to find all that a specific identifier supports, second one is to find the endpoint to +a specific identifier and specific document type, finally the third one is to find the endpoint to +a specific identifier, specific document type and specific profile. + +First there is how to make a lookup that get all services for a specific identifier, then you +have to use the following constructor: + +[source, csharp] +public LookupParameters( + Identifier identifier, + List acceptedTransportProtocols) + +Where the identifier is given as the first parameter and the second parameter is what +transport protocols the client can support. + +Second lookup type takes three parameters; the first parameter is the identifier, the second +parameter is the service identifier in the UDDI and the third parameter is the accepted +transport protocols. The second parameter is a bit tricky to find but it is defined and found +on the UDDI. Se below for the method parameters: + +[source, csharp] +public LookupParameters( + Identifier identifier, + UddiId serviceId, + List acceptedTransportProtocols) + +Here the UDDIID on the portType tModel is used as the value in the parameter. The portType +can for an example correlate to a document type (invoice) in a process (billing). + +Third lookup type takes four parameters where the third parameter is different than the +other two lookup constructors. This parameter is a list of UddiId’s on the profiles that the +service must support. The method looks like the following: + +[source, csharp] +public LookupParameters( + Identifier identifier, + UddiId serviceId, + List profileIds, + List acceptedTransportProtocols) + +The lookup will accept a service as a result if just one of the profiles in the list is supported +by it. + +There are more constructors but they are not needed to send documents over the RASP +protocol, so they are not described here in this document. + +==== Lesson: dk.gov.oiosi.extension.wcf +The RASP library comes with several extensions to the .Net 3 Windows Communications +Foundation framework, that can all be found under the dk.gov.oiosi.extension.wcf and +dk.gov.oiosi.raspProfile.extension.wcf namespaces. + +These extensions come in the form of binding elements that are inserted into the +communication stack, where they intercept and handle the in- or outgoing message +according to their functionality. + +The extensions available in version 2.0 are + +.Interceptors +* The schema interceptor +* The schematron interceptor +* The signature validation proof generator +* The XSLT transformer +* The ubiquitous message property interceptor + +.Headers +* The party identifier headers + + +These stack elements are added in the App.Config file, but only after adding reference to +each of the elements configuration extension as seen in App.Config sample 7. + +Server and client side interceptors have been implemented in different manners because of +the different ways the two handles SOAP messages wherefore one has to make sure the +correct interceptor binding element has been selected. + +.App.Config sample 7 + +[source, xml] + + + + + + + + + + + + + + + + + + + + + + + + +===== Schema and schematron interceptors +The xml validators have the following settings + +* *ValidateRequest* - If true it will validate the xml on request. Default is true. +* *ValidateResponse* - If true it will validate the xml on response. Default is true. The +current configuration does not return any valid xml so this is disabled. +* *FaultOnRequestValidationException* - If true it will send soap fault to the client if +the validation fails. If false the message will continue up the stack and any validation +failure is added as a custom property to the message. Default is true. + + +===== Signature validation proof interceptor +The server side signature validation proof interceptor has the following options + +* *FaultOnRequestValidationException* - should a SOAP fault be sent on exceptions? Default is true. + +The client side signature validation proof interceptor has no options. + +Note that the ServerSignatureProof and ClientSignatureProof interceptors must be located +between the RM layer and the security layer as seen in *Error! Reference source not found*. + +===== XSLT Transformation interceptor +The XSLT transformation transforms the incoming XML, and has the following options + +* FaultOnTransformationException – should a SOAP fault be sent on exceptions? +* PropagateOriginalMessage – The original XML will be added as a message +property + +Note that the XSLT interceptor must be placed above the ReliableMessaging layer. + +===== Ubiquitous properties interceptor +The ubiquitous properties interceptor adds ubiquitous message properties to all messages +that pass it (as opposed to normal WCF Message properties), that will only be added to the +payload message. + +Ubiquitous properties are added to the OiosiMessage before sending, and need to be given a +unique string as an identifier, which later stack layers need to be familiar with if they would +like to read the property. + +[source, csharp] +OiosiMessage msg = new OiosiMessage(); +msg.UbiquitousProperties.Add("MyProperty", new object()); + +Note that the ubiquitous properties interceptor needs to be located under the +ReliableMessaging layer. + +===== SenderPartyIdentifier and ReceiverPartyIdentifier headers +In dk.gov.oiosi.raspProfile.communication.extension.wcf an additional interceptor can be +found, which is used to add the obligatory RASP SOAP headers and + . + +The value of the headers is configured by adding an PartyIdentifierSettings object as an +ubiquitous property to the message to be sent, as seen in the code below. The name of the +ubiquitous property must be the value found in the constant MessagePropertyKey on the +PartyIdentifierHeaderSettings class. + +[source, csharp] +OiosiMessage msg = new OiosiMessage(); +string key = PartyIdentifierHeaderSettings.MessagePropertyKey; +PartyIdentifierHeaderSettings partyIdentifierSetting = new PartyIdentifierHeaderSettings(senderID, receiverID); +msg.UbiquitousProperties[key] = partyIdentifierSetting; + +==== Lesson: Enabling tracing +Windows communication enables both Message level logging and internal system traces, +both which can be used with the RASP library. Furthermore the RASP library can add it’s +own internal system logs to the same (or a different) log file as WCF. Beware that when using +traces for the library on the Verbose tracing level the trace files will very quickly become very +large, so tracing at this level should only be enabled for advanced debugging. + +At the very top of all the App.Config files that are distributed with the RASP library source, +there should be a section called . This section has been disabled by +making it an xml comment, and to enable it again just remove the from before +and after it. + +When tracing has been enabled, two files (App_Traces.svclog and App_Messages.svclog) can +be viewed using the application SvcTraceViewer.exe that comes with the Windows SDK. +App_Traces will contain internal logs and App_Messages will contain all the SOAP messages +sent and/or received. + +===== Changing the trace settings +To change the tracing options it is recommended that the App.Config file is edited in the +Windows SDK application SvcConfigEditor.exe. + +image::images\rasp_clientappconfig.png[] + +In the configuration editor, under Diagnostics there will be two important sections; Listeners +and Sources. + +Under listeners you can add new trace listeners that will write to other files than the above +mentioned two. Under Sources you can add more sources (for example your own WCF +extensions) or change to what Listener the existing Sources will be written (if for example you +would like to separate RASP logs from WCF logs). It is also here where you can change on +what detail level to log. “Warning” is recommended to not clog the log files. + +==== Lesson: Configuration - RaspConfiguration.xml +This section briefly describes how to access the dynamic configuration file, which +supplements App.Config, RaspConfiguration.xml and change loaded library versions from +live to test versions. + +The RaspConfiguration.xml file is loaded using the class ConfigurationDocument. Default the +location and name of the configuration file is loaded from the programs main App.Config file, +or it should be set like this: + +[source, csharp] +ConfigurationDocument.ConfigFilePath = "RaspConfiguration.Live.xml"; + +[NOTE] +You must set the configuration before starting to use the RASP functionality. + +You can choose to use offline test stub versions of the LDAP, OCSP and UDDI libraries. This +is suitable for testing in offline environments or to fix some parameters of the test. + +You can set this in the factory configuration sections of the config. + +To do use test stubs do the following: + +* *LDAPLookupFactory* – change the implementation namespace class from +“dk.gov.oiosi.security.Ldap.LdapCertificateLookup” to +“dk.gov.oiosi.security.Ldap.LdapCertificateLookupTest”. +* *LdapLookupFactoryConfig* – change the implementation namespace class from +“dk.gov.oiosi.security.Ldap.LdapCertificateLookup” to +“dk.gov.oiosi.security.Ldap.LdapCertificateLookupTest”. +* *RevocationLookupFactoryConfig* – change the implementation namespace class +from “dk.gov.oiosi.security.revocation.ocsp.OcspLookup” to +“dk.gov.oiosi.security.revocation.ocsp.OcspLookupTest”. + +When you use the test stubs, you can configure the behaviour of each of them. You can do +this in the following sections: + +* LdapCertificateLookupTestConfig: Here you can configure a certificate that the LDAP +client should always return. +* OcspLookupTestConfig: Here you can set the response that the OCSP client always +will return in response to a question of certificate validity (true/false). +* UddiLookupClientTestConfig: Here you can statically configure an UDDI response, +regardless of lookup parameters. Parameters include the endpoint address and +certificate subject. + +==== Lesson: Setting up an IIS hosted RASP service +To host an HTTP endpoint it is recommended that this endpoint should be hosted by +Microsoft Internet Information Services (IIS). + +A test project in the sample code demonstrates how this could be done. In this project you +will find some code and a Web.Config file (which will act as a substitute for the App.Config +file while hosting our service in IIS). + +To get started, either publish the project directly into C:\Inetpub\wwwroot\ (assuming that +you have your Windows installation on the C drive), or publish another location and +manually install the application into the IIS. + +Then you should open the IIS manager (found under Start->Control Panel->Administrative +Tools, alternatively as a subsection of Start->Control Panel->Administrative Tools->Computer +Management). + +image::images\rasp_iis.png[] + +Under local computer\Web sites there should be a default web site with the folder +C:\Inetpub\wwwroot\ as it’s home directory. If there is no web sites please refer to Microsoft +help for setting a web site up. + +As a sub folder of this web site you should see the folder you just published called +RaspTestEndpoint. Right click on this folder and select Properties. + +image::images\rasp_interoptest2properties.png[] + +In the properties window, under the Directory tab push the Create button. + +image::images\rasp_interoptest2properties2.png[] + +In the properties window, under the ASP.NET tab, select Asp.Net version 2.0 + +image::images\rasp_interoptest2properties3.png[] + +Under the Directory Security tab, Authentication and access control, make sure anonymous +access is enabled. + +Now you should be able to see that your service is running by opening + +http://localhost/RaspTestEndpoint/OiosiOmniEndpoint.svc + +in a browser (such as Internet Explorer) . + + +===== Tips for solving common issues when hosting in IIS +If you have problems contacting the ISS service from outside, you may try and look into the +firewall settings. +If your endpoint is not working, you may try the following: + +* Go to the IIS application pool property window +* Select the “Identity” tab. +* Change the account to “local system” +If you do not want to elevate permission on the whole of application pool, you can try the +following. +* Creating a new application pool, where all web sites are running on the same .Net +version (v. 2.0) +* If that doesn’t work, perhaps the application pool doesn’t have rights to use the +certificate. Try: + +** Delete the certificate OiosiTestVOCES.pfx from the MMC window. +** Run the command line tool WinHttpCertCfg +(http://www.microsoft.com/downloads/details.aspx*familyid=c42e27 +ac-3409-40e9-8667-c748e422833f&displaylang=en) +** Re-install the certificate like: +>WinHttpCertCfg.exe –i NemHandelTest2.pfx –c LOCAL_MACHINE\MY –a +“NetworkService” –p Test1234 +(imports the pfx file to the personal store on local machine, for the +NetworkService account, using the password Test1234) +** Grant acces to the certificate for asp.net by running +>WinHttpCertCfg.exe –c LOCAL_MACHINE\MY –s “NemHandel Test 2” –g +–a “aspnet” +(where “NemHandel Test 2” is part of the subject string of the certificate you +just imported) +** In web.config, change the location of the certificate from “Root” to “My” store.+image::images\rasp_dotnetproperties.png[] +** In the IIS manager, right click on the application pool you’re running on (if it +is the default, you might want to create a new one) and make sure that under +the Identity tab the “Network service” security account is selected. diff --git a/doc/images/rasp_clientappconfig.png b/doc/images/rasp_clientappconfig.png new file mode 100644 index 0000000000000000000000000000000000000000..30f3f5619443bb43ddda23d320c91a74513a99e7 GIT binary patch literal 58798 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

Ezc_O9jNn>asr~vpQl<2 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 V=P@{gX!3x7%TUi$w;bz4`X3opXKnxh literal 0 HcmV?d00001 diff --git a/doc/images/rasp_dotnetproperties.png b/doc/images/rasp_dotnetproperties.png new file mode 100644 index 0000000000000000000000000000000000000000..1f2ac72d762a9eeeaec319bf2cf7b80941e71f00 GIT binary patch literal 32038 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 Wh(L9)17w>oIi{|ymU8&C-#-Ct^{XfV literal 0 HcmV?d00001 diff --git a/doc/images/rasp_extendedrequest.png b/doc/images/rasp_extendedrequest.png new file mode 100644 index 0000000000000000000000000000000000000000..f6fd55d1e3673f516cdc4e0495a4fc4d9fa9cf29 GIT binary patch literal 42623 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 literal 0 HcmV?d00001 diff --git a/doc/images/rasp_iis.png b/doc/images/rasp_iis.png new file mode 100644 index 0000000000000000000000000000000000000000..60871219b9a46350f07dff311326af6b7bd09ee7 GIT binary patch literal 70143 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 b!onja${sci2_D zcn0`uxJ&|E@%hpi0{kQPgsa~rsu<#21748XE9)u~5mm=ipV*KCuPNO$%sq*S=(;cd zh%*$~~N&Jgz$Sn)4H znP>+ay5qQ|L;H?esHlovz;BdZEC%ns6-2LwQbr)Iue=W6R>ErL7b{UYC9(;wa-rCr zLYYHrq^V{E<<9SgrtB%>pW$G58cT92i%Ypnj-eh=u`?d@h7WVn-BS4AFg%tbu=KXB z#|j$sR3_@AO-387v);;<<2)$wsprKvL+Wi5UO%uaikKw*dC$8Cjq)m9Jh>Tr%b!QXaZ zy7Lq0ZBi%Poxgep!~H8=-E$(3yUk=meG>*H>hz6!H;&t!0WgJ3dpWWmu?8DzfT6;_@bx6TRU#H7lK&XPv~hDO@n;*j;V zMq89f(|H@ku~PubjyJqKV*KbUa=>h&Ngrz)r$WwWp6|Ph@gYhPr3^k9KORvHOV)r0 zIKDA6YKlc&Y93GK-_f%*Q4aSpO_RW5=>olWb$6zFWBl z*xgI^)^YklYwFLMVJUrZ(_E4_Aigz54Gv)0j9|VbBH+&o-{G58UaT@;Qb)~-zeYNhRWkVD%(>XA=;l?VR*01*RAPlnLR_h+}x+}4ecv8|G@le zqNNhyY6G8*c2A$gHFn#KCV@V!%{^<_`}w0oA?BppVxf8Wb5o1&b{GY`@3I_!`wwu#D3W`IC(if@~((%Pp^6M46Z% z@z~zmlFcDhEungk$BI&BS|0?sR}gvs;czNQY?rzBbTrF_R8rqM)N@5 z1~gKl>u=A#T@)A7vOv6cW_pV%Y1CqK9OM1oy6;E%FB-BEbXW6_il^zkHfdC?(ss77 zRyyJABUePe9mxvCEe~?Do+3?_ijsTgWBS9AuTgnFAO?S$v@7m)@hh5`Tp9nq z^1|V=kglEEUMj_J)Dv6Gmpkr9X;&&6=9>jMeQu+Ou230~S^2`K;jy?(Dst>-BAa?& z@3X$TupOg@FDi539yj^a-%}Q+H+h~*w2drFzKYo@j+ak%OPoI_G|Je!P1-WcHp`tg-$~odAT?X>tzpISe!U>9Gd+LWCo4d|=YnETxaqCHrjaS?hf}}GgT~{hQ zVp_3%PxI=5IFXB{Rn?ilZ*5shvAEt0LaFgZb13;VX-i3{xuFl$vTfJR@{ajgIZiH% zODYW_1X6a0}cY7&accJ35cJN6?Gbd(5o-*=&P=1q*=7 z_&Ee(tXw31ii1nLgod&ou@zekDXnjUQdUeExYG&=bwuExcrdPFKeVrydJbc)>->&l zNC`G|>q}rq3KEN&73)ChjU8w3e^6txR+gazMPxPYPVBKml4C3-c*Lr2njfYEf0D$ZX)Y_ zBYUTy+LfD9q0&G3z#=A`Tc#Nk2yZBP)$6LrJOaW2*x0ALw5W2`f*OU*XWu8(uDIzX z2pHQ_LU7zh&5>M2rAH>RZ?Dbz$sLh^6F>>9P;n!sc?DIh!7 z)83@^94oVbPA9LvUU=I$kkd@n$r!Fsc>8Igu9p8MEx8s<33KyGPqCqLc|y3~A*a^5 zo((5mBhz4cQJD1RGb$s9fu+Kex>rBwTxJ+9 zJ?sEulGKB;%e$+U#Ln5aqR_^+8vp&ZUzsx{yhH?2ZDEcr8C#A{N=uFh4;pN~aR1jP z-^Q9TIOSLAG;o&OiEx)*)a!eB#p&vGw2{=js|-tY*+dveT`~C69`DL z*>{?inPF}*8hu>HD>vR9X{=;Ac-M07ZrIBki5ExSV_Oy_KsZ^Pgd{U#{kGD21o7e0 z;tdH@sB)3;Vrnl5OD%LcJJIj-tb^eGN}`nXuzPHXO|qMU6fo^N3Nn8V_p&SUaVm~t zPxBgP<3Y>TF+!zrD09{nvFBEoo<%7@Vs>FWZ^WnE+8A+bO;XH4xa%egt24uQb!8+W zWM71E%|_{|(%-({;KL&z+FI-Qo`Y2(pl4RV;MVEoKkd-(KZB>743i%-(rK?gTxmKd^q`%}dptaz5v(28dX$OC`qk8wM@1mwu zf_Z>e`$9$6HGyjN`KF)sA8S4^`|psiW(DoW^miO&{lLNsjW}DsE;e%)7mZv%kc`_W z{j?X*155cI0Hhb`jD`IicZAL_u0Wl3=zV_E?av&Tz;1z)G(voKVrh}DlXv83+bj7v z#zn8~5@;oT&B>@jq}0pVMJ)?_kUOy(*NBohYrZPI*t$}62daICL z_A8F>XhQfw6LEqWgtuU#;7u8|Sq=CKCG=HW4 zq_Dx1!PD^Kd=ffS$UCKOVOK#$P-&piiXMvUS3k!5(yjPM8Zw$2c;|^p^5zGO+zJh0 zsbE@7t0@h8t!mi4H$RZAhaCzHUpt3MgKs&^r0}9j%X?Oz&E$r2fTJIruA5GwOGfTY ztC|elp(L?W<%Cy|kjtuHp(UGsDu9)Ue$zvXV6~P`RU&FMn6)X_x1s|%zS$Lpa7RRX zUfm-!YLycYHgvQ5-c2UlFM%_WJZ5qK)vbbF`KklEWoPC!htXc{JkT6F7#Uef<7UB^ z2n<>dg_^`_pkpN{+wEic=)k669e*)?91)VbRo zi+9)YB7!BB(N>)zpYwa!dNh?vv1LLyqQ`SXwxI6i?&JzhX}>0|BfU8G7axD20_DO> z%nW8$8kkuI1tPN1nN69*Z%;nk{t+_s z00CJ`$WNP#46PE*O{{U$fQG@kb3HE{P(1o?HSiB-w1rCI)A#>-@nG~Ge|4}8rz<({ zw(`z2Hzo1D-KdG(=%YyFBS@`7lytYRNy$L&BuxoE{f#a3H4)wYR|38iMXZsD^cieb#uH}Wko%X;CvZ=&(GkkwWh(9r6bzpQ><28gG#DwO4Hp?sGA+LU|v+`KXn)OSxcn(f+ zeOkgUdKz;_YY)X1RUr#S*7a7f~1Yu|}l zINpihynFS>!Sv50nsrMotfpnFSv)qT26BB@+PEgY>ngH?KU$zT>^}cb;@__*sA@{o z%!vv%Md7B$I{q>?zxZPNOO!0h7m>+gc4mOxP$N6LwCP&cBDZ#qe%%Fu$*LJ!cW5hZ z4OUTDTa$YlB6^#oDA+7#i7bb&CdlQAC>VT;p(Y@1d@1W=54CBW?vjbbzsX zV{8hxjf`k(Y{_gU^l;Aw2{r<9slg?_4OR+WIYT(MybWE~K>1MyMk66SAKHCA)e{ar z7`f%w=kd)$&rlB+ZZ;)nvtcrCcmIk?huTZjUuoki=PA@_YBcjFg;KYsenOD2-s=BpbDf(`Wk%t5(@g7OJQf{-0M#L z)Wxg+843Qj5eSrv(FIX4$zpgNihY8fXHQLmb(xPde{sH;?La=@52D+%Zx^a14o~bA zZxqjZul_9YeM2)k(z`tz`Q&_OIppvq%o_MqAaVBbMp0h0sDtl@x~K(JqFMOIt>$0# zeEaGPM!#$H#d_xUHDvMIs>c*9C zS2vsUK407Z{H--lK-fUM+~?B)qHQCI#=SwF@j&uyGT_ZYk-Y#(t3iM}$k7*;zx%Pf zOW!hhqu@c?-rl&LJ~&iF8GB@y=VIPj@mWmx7K@Y-D<8l2yQn^AM4ie@Eh}(BGTcc@vQ7alK0e8#kBbYpl@^ttjjTbJuCT-(Exb%NHm(Sjn1 z`(IL;!vtb(p10Q8`mlOs$SMyhs^58bkq!XH<78pSxx7kr#Cd(yzjF& zHrG$^(L$N8$Um|xNaSJ}959pc7B|8k!>le<4j^Y$Igm6ZfxB#~Ru@{LyKTmwk;fk4 zau)~2hsh8lNRN;Fm(7xD-0gH!VSvjU$b`(^dl|=s|Dsvq0TF^+8vFrwd|g%U>T7a8 z4NNyN&6c+^pv5l_e#Poux`tLP>|aco!L)qX>Am)Ac$7`9NF7 zcv*s5YpwXOw2|@v>bGW}iZyIxs`bCx}(6g3uTg`1k=z5n1 z-Wcy+J%}+-{y+=&IC{Hp19xrZ(6)nyiP$hdJpN`ZU+{~SPrefg>I^#6@^%RG$_cv7La(vCR?$}6`%h+7Cx9L%={lB!F~ zia-K92Eovx9U+dr53Q7^p;6U~6)q*I4%pI~lt1XF+D+Z920{>4?3yztH<`l$bv z#0E~h=W)Y4v!?kt_$1u!FL3{7&+xya1bw1juApQMuUHL#j^^1=Zk9(77n1AKpnsl;O?_TZC2w;nXL%*I+zVIB`Yxt zTs++(*R*7Cs%ZMw=Ty02n<)LTbLlj}&KmR<(9-<0tuc?&XJB+|esc~3f`03c{{*bl ztM_rk#Hl%v^cv9ROXwk2hMuh+IH&FT#r&X?ZdDwkX}wZ6O>?x^(H>vY^-1h+){A`| zyb?iDA44AmsPsFyLmVzvkV_AKR8&`cDpx0=OL z!3$t-FH-)gA8d|7c}>DV;iM}h=%A%ubs+S*9u)*_(-x1aMs4PE=5l~}>7W#9>+p1* zCqHp^;Z-1?WJBMbmijM|u)g~95sJ&gwn24O(p2u85wE0U$zx?S5o|>qxExO8I^W}a z{-qOf#R~J7KI|IFMLGq{)w$(&y*ig4A9rx;VawNLS5Lt^fxbf-BarBs?+R5#Kj)j` zglg-m@^84Xr8H;q(VA*EJ`;*clkE(0q}TXOz(GtP#vJ3a`-IJKP}L7XMdIO=U#qIr zY7D}ZCo5TBTy7@L^|;*big!L&t^-@F;$r&^OZqkYmP*uMfEfREyx0rK%Sni@z^tT3 z3cl_+kSRGO4n9dPTn3_^2@gLD>7n*h7;dxvi}Sl>I&R+Rr1yRfHoAEgLC+Ye8OAAo zy-?Q^O5=0)m8lXToqdF+8lY|6zfx93M0}}K$K3XQ4|3KKkR*BbZXH00H@-NZK2Q0i zkXzPRqpd}5%~d#^Dsf*!Yr{j@shEi6mPU258GFl>0;SfKKIU*lr%66L){#75hfL}G zv761kC!gJq6A`vLQq`c0HJdV@6Wf@O4GE^O{{z^?PGaOL6P6mJ7?vg-EU{K5PIySNJ7okQ!8#HWCps~##m`Mh%jPeYw4{O>D-2k#sQ77vp+ z$pUsnfV7;~nf>+pG{!z*45P1zjzHP|>Hd3xyK5fvM87Yb&FyensEsX_Fs^TQwBObF4Yh^i9 zSZ_UCO!T; z*d=TVn)vBv=fP+mNDv0LfBi(va6cz13ue5Zn_SEDoIIAY=KfIKP`H9kQs)lW6lo7) zZkON?9&IE4@ljWi;yX}@h>*P!Lsb4NY0E$OtHz4StV_ol@gykrG!&ff4*{h5Qg^3S z>s4IW%c5)&I4tyo*!UIJJ<1HS=Lc0>*9%|Wf}RZo2e{TPIccJmW$tk#K7zD0KHU!L zxl>?E)f{OP>5JdP9gkv z&a&sDlzkSDqkX8XAA2d)2^Ie`NrjcMjj-DWp(VkkCFS~aW}HR2sQdQH*;Sg08uUMi zQKkEBhqc)=X*tKAJ5H~9U+MOj4E(vErAb~eNfHeavd{VQh_NRHS)Oy}VpS>6pL`6X zV8r)9OibK2#0;eDU?Fe>({gh~a(d!F^bo(!B<1*Qd&(A03Qfi!tp%KKLpQPji<$ zJO4`U3NCUQGbpqzD03OeZe;pfr(36Kd>rD}&-f_1ka8H#>Wygbz^yNM8qh!8D|mlA zn@yZ*?5|J$?}*oE1-F{z`K>kZJfuBEjeT54_HN3d7$g2?T?tbK-#J+IH(>Rw)+mq;v;6$p~ZEHCf z=PW20qarY)3ayaq>!-UDeM{6LOth1)S{QCVgU*qzr_n%5!3z_|W`7n~+buPPgC6)U zMaXG1GAtJ?-^Fs&U&&8|E5N~q`L9u6k>|XuiHTGLWQM?wyO=Umc#}4AK^=#xP`SXh zu4hyv(PUPc-jKtX^bk)9W)`>PU@nFkwE+FQq-Qi_;CWw6W=bBVeFvm>I%+ca=BrQtuHW8aQdvz-tbE`(~k$4KG7qJBz z_Cyb!Z}Cqi|2K6*sh}i~+_@iGHw0OJsIAUf$d>PStGg9h?wqM*!GBmf-Z}GZHTJxt zg;sK!XqfD0De1dEcWJ+9_x}lnFE!?V9}Fph9!;wec$B5uuP7MTK^DL0t0Yvf%aE!L8nLER{`K&`mM7x@owxh(cB^G; zUe>_qx&ORp_Kk;ba5f_{X~G`COldlf)!dY{FM_CrR=oJC6I{#OIb{yf>EdZJ=kbR9 z+3Nayz?NpOW=`RerJ?4q91sHCOI0k|CCE!Up)Q1ruO??n0H_ip)PCSF^p+=z3ukuX z)b|UX@Ae-7BLz&dSklndZK$@l#9 zk~bZm5jT_*k?LityT5-|hFrS|9Jrq489D*pHr~7XP=Nfk z@TqycuS8~<_a`fgB9g~r+JB_wPCPU6Ios#`fBaGW_EP%4;>S>_gLsKx101n{rySYEadd}s)?2Huw;0+k=}hh0((j{FtSZ}jS@$1TaIFOas%W{ zi6p50s{X8a{!5VwoUzEq$EwtO*I9;Mznluu-DsIiT%MFi_=+7J3V@Q3zvApk*8G>( zp5Xab^;`!1z5V%9j;F+aylvnbB7^pLYF9M>4JC@lwTk4I3G4+LIY2MVms8+L0-6?M z5AFKi}GEgtc&6ZX`UG6v&eUKcyC@YX8#Vg!a7dx2Tu^=e+qMOzIV3JzWHM?Id4erv8rY%tX3yvbv^#aXpz!2!a$pUDE z0Wg@e+ORgz&v!tOf!WFFWPog6Hk_PVteg4$d~X87r|;Z~K(;=LSf>U6#A?V2)^E8u zxf!6nMYlB);$Ni7ng{%Rm#~t3d>fz61N8lRF;Ka!@`>C_#I~{3PFPrwHMD)5GCt%a zVl_LC=qFS5_A_dSmep+9Ys8%9uq=+7&4_f~%pNw|Kb=T9iV(8YNiCc0!(RF4?ji>J zxzs~E(Z9vt!SEuN19mtEkpn~kR9!w>q<;n!U*p{S1evqNgOKw?%uvD0TveKg62CSx zm>L*}u;eySB(0^f;-p&C%{Dg4(@D%QsX_30bv&Ae;dm8gs}llj)wK!7+ELzNVARlO z%l(T@223axPW^H>c}O~y9Ux2rXA5-7bAOm1$8}`Z0Xmw)b(X8P142LyKbwSx%uqZ2 zrM{7t030Z_uKzske~_bw5q>+LDw+b3?MJ`M#)SaVR949@D*8@H;OeC(U(lb(-=eUv zWt-2fZ2itPI|AP2t^0lCZ^eSoj!U(ZP}rB`g(Dc#w+2CPA|HSKTn1$_M9kg@q5;Q* zoVZ5Qpk49lqc+gjwH@cbxA}+fmWOk($HqPXfH`iwW;-BV4N@dX>2=n&KN(!P+YaXe<%9 zhq2`UUVAIx*+s7Q6VWIJ$J4LZl; zH1?$HPL2{_@YZCs7P;GPoS}VL3B&e-MHD0^Ka-Cx|L!dls?~&Wc7|H*+bPTs%?0@F z;$XITWTt%dKH?RK;8fX;4Y7W9t|vpQ(lCQ52yN5??wjgqoGrRP(5d@=$MH`!Km&_g zW8NpI`;NGt@4No$*uFVPU2VDB5d5Q|xJnzP%#qGaWYNpF67tAI53Z-`kmvr|L$Aj@ z@%AjzS;waeH0;M9lKx4;G}t)zK1uvp*22-X)X~b(8jLV&=Q1i5S1@ku{{U#k-qOpc ze?_P>Uaw9>atdP20UF&)Nhn@FeBtEJq<2msC%F;uZC=IIh(OSsEi@nU0J>{FLmXT( zr9dP_Ob<;n5eMrJZJSPKz3^{Q~{WVETMxlx-)M)g(`Ar9Sz)6R@ul`fQ8xG zmbOZtGFt*jgUZw@*d2a(PX)pzYisd=ZM+jG_PJVqRv%ZisKVo5PhaSz!ET`8ZHHZi z_Z+~`qy^SZBG{LnQ1iK!tDW_07_IfU9lsqZQ)H4^kW_o%(XIp!NC$dkCf0n$Rt8GT z?+936vu)Pjt$s6dK^nvo|4%w#c-!Gle1Ih!h$wg0VnK>aJMk2n&XFClOELPs;lb+n zNrjABM*lErCSrN3L#D=J|%=UvXzGVt`x2Fi*tZAg$Z5 zP=o@Nh%gf6F>srgDH2b?*D(I7C93{rGhotf&TVh4d;dL~xRKW<3_DTtV+30*n)PiB z*%Y1{U2>gH&|CX5vo&O*3L_%ei_;p)5h2An7}b|+YO~qe#RApxNBv;2f$#LDRy5bu z%1Xtx>IZU-S*;U2hZW+I$=#((Ebh8NoQ=PXpAb>mTf589e@?#XB%P9a3qQd8GXQ3} zA#9%o(fZeoCSU*#F6Fz#sI2TSzIKoyP4VCY+HF$|H*K&l!Lm!ZYT+{fKBLzkM#Q`%Mtnw}4fOtt~#+7>k36Yp7rJ&FrZDubN$d$3*|hHuW_*90)#UH}W_? zJt)XyRGtbA`O_Psqi^>eXk(GL4oS71(c)D^o3>}a>9fsj1^>7zJ{0yqx@w3&D!R?r zWbudGavcl)GAH(%{xr9=gWJc8oW*h|`&;;D9M52Om7<$9RI06BkUVxT=S$qdY56<~4w8=k@MT;Mo91w8S{;#S1 z6Wf?=qaF=TJDfd>+6~i}J$aHS?ZshYL$!taio~XL1|7^N?Oig6FM!IPXCl>b9|JhW zg0{US17KWwaEJ}N02U?Q#$0QsJpQT+SO_4)bT@oeaqDO}Kvc5?*|}YP8ZQ@oN0U>Q zw(M4f59~e^m|&d(nKv`TrPc8xfgi4t6+UR==ykq&=Myd*QHjzS68-#*2d;vKfUB?m zPEO4Ab>8+aT+Y~MeOfFSaZ?~UkxGl7MI8~z;WY!dw^q~oB`9}Df&57QVEg0-z2Y8F zB?2rc&>^T(&|PKwizZ>j(JTVoiW&8XrFPMmZmVBHxC9;&D9lT&9qGbIr0i40i!&l` zSkM6`jVN4?bh2At*Rp{f$mmr$?4mZ~++2%GCh~H{>frwDxzddNx8HiDyc``pp`oda^k#f0*->MM)*ck^K`G&1zjrJtTh|$vsch7d{U#VEP+vVwiK# z>^4+^TX#N*vt6CmTtH$o$Qzxm!&0gvm26%_Cg*ETd*pbD!@UHA9f$VSvq0Sz?0G~_ zbaITaRBdKSN-^fK_sHx${npogy-lviRt-M9GJYnoU z#|XCW@4H7QOLi0fmW}qwSObX3>>(7rvpL4_=9LFyef@HE*YbUJ&w52*1OcN;oby@!G=(il=O8^u<$Uz4lw zzHNU@s&G7()+#;YzKcQ|#?%i8KuuDAcavXi@9?B@;K+I%wZttKxYIifw<(CcVIcX$ z9Y^v|ILhJfcO9_aoQJfi5Wtg5b$^r2AsCpoM%t+t-R$kZt|pK7wgSf{RXA&bC2!;& z2|fRw!}a6?A+2qXpG0eKJY6-D89`vvE-B|0r4^M?`G+gkop;>%Y_x&0(ZPf&iLjWI zqF>acP(4NDi9Tg6aw!L8D=voKqnBZROa-dsq^+OE%K~J z1HvX=`vYgkJdM%iAIx?W=04=nrqjs}hXHN>{|rIZ>;n5JBh6oe8}yt&Px2NphR}MY zXcMy7iFA&nM6OmpID<3B0bwFRe*4#hboULMU3%cborTjG{ScH+?h(_xd+)V{T_0E2 zK1%#{@OGQ)RU=JVNP_Kih4(M^9!5U@KMXSdH_HDS>($4H_v@~@?%h9ke+;C-_ZX>p zhkIQv1CpUyLDg;X_Zhs$pF1>(R(-_FpMIuFeq%M_`Mn@Lq~qSnRWAV2em)@RO3k=+ z1RXFM5EkmkXwK_d@SJzN)(d|IC1pj}-5*;{vi#mp0z|*UJwo#whxoO+E!^RHVtA$d zxUMA0hD-gLWw|J6eQA%6uvHb8L!=N%jM9U4X7ABd@#Kumoa|-aJK3M@ue7u#>>`1Y zH**e+mOowfb#QfKpb6w2ZSyXwf~3lVwaRHAd9)q0)pGDU<8d?WO?c%MUIStq;+o6p zs;$Gw03o}Kb$|p^kzS>ijLVdPaFRGJ-Ziub!Kk%D)~@?2fpV}H{$gW7)1Lqq({nm^1-QX7@fHzb-CLw#7hR(SOXBVo~jGiTTO{G_9 zM$wp>YvH6780eH4s6!w1X*N>07=v9h8m^CGnFAN4&b9-@hunL)Oji@{%iz)MSwucEdjt^oqn1FQpJrIPn8*4E}n=P7xU(pw(?e< zkL@!u&GZEZVkh4>?*wp9>SWrRd8S@C)=i_MFsS_37e*$TZiADb7<`=|#blA;eHku? z3Z2_r>Jr^D?DS4Ui~vk3MEB7LuDyxM^cc(hF=|Zdom-RNX`m;&!}nyg&~VJWTzc*D z<(5Iu8Z|30^+jXR@#QXQ6!heK#T}RC9SXx|gIzh5?dy+}`tPx~6ofBj@;%RepX#Y) z!~VP3__pNG%SZVl%mV=K!PjXXg>{105b6EBnn<8;y(fxGt zUN}u*qTZT9o1vOZRI6Lp{ysVMIsc^7@i8s$@)D%VPzaa@?0sd5kCJ%$?T=lA`<8X` z#hD1KP|!)q`Qbilik!NrXq~(SSPEL?#Lih-_e5^>T`W5Z*e5QgpI&j}mhwt6OHmbu zEl-O=Bt^PZFD8#;U3gU`)6M{^bY7Dy%E|x?!W}r<_iov0ZMOf~_d@V`b05Ysr9N;! zVtFR6p?vTyBRIMOFD9BIP4y&+`Gs1FIoJ%5Qd;swlZFFj14LM|N>6}ngx2|*5BU*u z`=M*oS`;sMUCbae`9><&B|Z5gMCh*=6L6R4@4j;8OC@SnmtYmlMmiVKb=zC?Kw|RK zD*bea&*6$x$om_oo%*t8js4ITISHz4D^czhZHUv_nJz2m-z$chDZs*PnVcHsf>~NR{|6WA^ zez`_U8$+#|Qa;(iMzsgOe=i4xY(M3;ymrKK_#R_-2ig{}lMn^Xa0l-AWa&AW^<);A z@4SFL+S>SzUcJ}aqM(6nJ>CBja=3)inlm;HWj9fOYUOKGcH;r*1K&~S)dF>>!eS_C z{mi4Q;=;(xe!=NJ`zSFGIC9I4AgSQtXzy&zA!O7RJ+PpE9?=UT9!j(Bu8g> zAIGI2rZ(TGYfq-{Se7AOe*)q`4YC{?H6Z#OU~$x5&v<36NhVUu9CZR<08N_){5k(SgoHt((;3{Xmw zp!p-<4|@VX>!)J74b4~BO^DA?)seSzcVv9BdMS$JiT7I*jF@F6MT1(9aquR*@6%mq zt3y3e6veP4QdTcV9V%&?$Ammd_^GJD#~Zv_Z=tPB+f1fTMP(62f&*r$mO1?$$62s1 z2&~DSH}FelB){Bv)^%{APPZ9uJ*RTzqb1u}+Ed>nsA5>V9{auZZ|G1XN&q!aUt;N* zrm?Vd=ZWw$=ys8@G@ZC|54<{hQl>Uw75x);Y6ToJ<#Sptfl9Au8#pUq4Vld0<9Tcn zcLEPddC}%M=_TKmNYDkKB0^0eO%>TA>4!jPpY(d+e`)5V8pXK(JlcM@{QOQXM&4jG z;_*gxFBkS@Ecu5qjOl?XT1LN_P~7ZS>>%iHrLyn%{&oat&}8xY5@lW-FTfm$d+vY1 z9I-p54jv$T!CpI6Z=fQzvmM-W+P3(QgIa;sR6nX^Lkx4ih5l2g$ z!r;(v?~XTHiu_OwE?i)?_Hn&CZ_uAixi3WfRRg;KYUz92z9G-F1|SB?1-UM8c&Zig z4Iv{<&5}N)n}!hY3~yYC(x2-p(6i}Yh5gZ}N-Li^7OKyar}4qb3Ksr5>s~N27^$Vs zTI{$OFj{CtZIs1RLtp)D1-PJU$H-aH!^86<`7f&Qt_g-V-!wPiTlW04eg=uS3B~&w zlqGtCye-$oI#uP7WlZ!%%!?=y^7CiW<`04Zhjw1YA!jA*<}ixeX9og*B{ar6(I{5` zi6V4enBp%Kbd#fY6Ia_EifsKgbf@yU+LJh&n39g|+~L!{re4n91sA)d4cIBal><6{ z740=BK8u*WGTNQ2GFko^rSOrqzP2DYixZ z#v4FM9P!1qWhPx~%ns9fzd{z#F!YSm_O%Nl*OZ(gePi68(=FnXK}c{FZ+_EFmvm4#1fE6meYuo2=+V`Qg9Oq0zNQ!EusaCD%gucZ2^8Alc;r~=U`$@W$ z4HIU;O0X>MT?d$>z;VI9Uy?a?K=q@&OrPWVyQEnkh7ecb&Pd zv}LpLCTqSwi>=3#QAzp)UWm~z$SjXH)!~_eMKQ>vptW>o`;+bA2?rB#3?Eh80ukRaO=zYI^ zBlRYFgm+p80DTz2$RNg^i5cU#OZ#FfRao;FZ*j!XN1j3uL9<)DXZ(hn=xdw89GzlN zUL5y*H0`oYn2h~<%ubt40g#+6iB-s6y>!ol+YxuH8tKch01wa#V~rXr8qG(gMp&nH zYC-DNdYWg^tX6P3o=Zg6Ua8PWvev{FsIo5N?^xh_@ge00+(`ZY!95B^`8#4EeZ_9qqrsQElM!&^v&I=nvU??vjCf|;Jp^D zdXDo(xLK(43WM(DEHEy|GD~7GRzS1%9m#{DR$l<#QSReO$TXAR^N83EY_{G@P6?MB zyY)2LBiS*hHz~5{a|LLadR{@XAU~d4zARy^ipt0rbmRPdZuA2Rg5P}l zk6vVtV7Bi`im7Ex>UBHXV#{j-Wy#8bQ;%WNu01J^mMAE8DJX6fD?=a<0x0DIMk70< z{|TQT7sKsO2hv}nqqE_d@8)sIk;duoTiBXFX^X$Kw{j4XbRFj!I^Ih`DSq+ zf7jEzZFC8_6W;maoBm<4k)GdHN9!k`kROrWdB)`0ymXA`d!@JpJjbpVnJ;*uq4s_J zX8ZX6KWgh7|8E8Pzn{VX?|j;ehxz|s`?xq6wEZyLGY%LozRy9PWNii77lnNJ2>b>? zD9u;g)?rbI7(ka~PV7p2{r8s%H2(X;MgP$&-XZhcjp@~uS_|&-sdylR3tTB5A3F_4 zh@%fvBiek!&4KpbRQ8zD+jmp%=L(L=rE`HP>^Z_?HOt4PZb=RJ0RWFF7nwO|`ldzX zQsFWGK7sO*OT_=z$hk%(Va8!RG$|d!nH55}b8?MPi@+>R3LUXUiAWJXu}} z1kJQm#8nP&l{d^{G%rV6$4V(lsFlQ-6$E*JtD{824p-X~}2**1#u?QSzi7-xNSwO)e zp|U(T^Y(aqpk(JNW1V}^gIMUEx2g%b;OTqt<%o_^?(BG2ZTn11Glq|6CD@!S>2vi<(|r&>U-fFYE$*?lCm zgAhN>Z2v|YpA}-9sqokTQ?}-V%_9C!%|-AR`E=yb#%U(h`(j>8vJhfyJvptf%0L|s z^^32lU(Q6~F?7X1^n$acq5T*Rc5ocf2bkQB8jloPR-CSxZC;a0O+ubgl;u159Dk;6 z3Wz$}m4$iJCSgr=2$9{sor*O2Tpe(k+Ecf z@_PLb%V!|Q^i(=mt3|}S+Qd%zi#HQTpf1wZhwKeQ)s8uRJ#yimfGyZdha}owV^Z(3 zv{DGCdDL~~H4jP4-F|v7YVso^$l1+lb&M>sc-1ySv03nyvnole9I?_ee<`G5X$sdi zqrBV^W9RO!;mrHQ_s$irD3(|b&fKYA1<2&-OBGBa z5}OBfufj&<;<(ve)-R%^GewhS|NCHIUqCp<_C5NMJyG&0|4HH9ZWC17>Hrl&E1%Xd c9J3C{lVh5!zj)CE|>3lt3wg%(;QxLctuQrs=L6)6xXZUu@4hvHhSxI^$FL5dc4cL}aR z=Jx%*`8P9vW`0iA%3|FcR&pOXXYaH3c|w&HrE#$-upd2ogexoaLG{t2$1}jY0rLrP zN8#@bKJe$6rG$dSqeqodIJd@Vz%`bGjE>WzM|hq8-j93if0;dc6yhQKK|LJr(LEcr!SFyyRT=sDFIOAlo=LpuqTTG6A!11=B@;ARzvk|_2A9n$)?-V& zcy?UyYtrEGHrWeYHm_Mg_&;~(i{-$KnEr3R<$Di0iTQvT*$tYhxNM(K#_m|Z8rOJs zxadvBXZvcB9z^s^f>^%Vhcr{nyZP(=IKH4Kv(xqH#{1xiZe8ala^LG)ozL(5AOfBp z(7?5jm30$;x{wZIa1f!OYOD#17aJFsGyEz!j$G~_5xX&IkNJrJ2>qcFX4rOpguIiM zs=e^A-TLl!zl!T&9FfdbvS5Z+qd|&JSjd63trdU4%3A034Jl?kkaN=W1GK zdF_5FhVhg`_07GW+mQezr9JP6?i&N1DLb)lU41EbbA^zr{=|p#!-{FS>LgV1Mnhy(;B~8)%~!79@7KO8qrZ6el5ySj*wFV* zquK&@d@Oct*+j7_u;B_=#kZlHWI8!gxZ_IHO2z7hstt}Cie`B~>)~MZ0ffeB?5eL} zv-|1AQ|XAv8%!=xwM=@M2!ps+>|lg3q3=-$$ZBM49T@<^^-QLByliiqPhxBtBxrEI zBnLenMCqMq4mcgpxeA8V3~--p_|iC<&OWb`cm{#re8X`ev-3UJB(h^O>!}r@oZPWi zZ=kk+r74{_f3;!zak0@Ij1-L7TB=S&W-nTf7S#|2p)6$fFz0c=b2#*nO^*PP9VDjEv&G#N4=t{y+s(QF=d#K&E z4BhOXIy7v%Q!a0UUi7Jq}%E#iGoam?sFKr8MU$Vn|NKzDV- zIlM5!=>*+Ukt6snZ>(wtU+7_zJ{`K-A`6H}YjdP+&mf{AFzeJdn0Gy4o-|W>mL}r6 z)t|`zG{3ZL9;rvDn*~!cgu}3H@2~q4ebls=EbjuQ9#bIDl``5Q1o&dzZy3AZFU4_w<=iaLxh244ZqO++{x|S=05Qg+&xu~{BY$GfW4su>&7CRc zo7^yhdz`c`M<%W^@tSUx*#89PN{3nWhg3xE!;24A(Y~!@xr_*nG6*?2XMwu%nHT5R zw6qryX^mdjCptT_klREEM3kL62&Pg#G4rhmwz5|faWe8JX&_7Q&d!Q#_Ikp_$Uujq`FXkyyHeYj?+Zb|XDez?A| zLieFFv?;rJT`SsSA%gOZqv1y)oh!u--MUFeh`28~hd1tN$%_GmZKVGiNM8i9m|WWX zCI-f|S^XuwOv=qgB^2~mSl=mCnO)*Vp0u$$^xS%ag5UZT8S4Pz1+>;$gupVFF$*h- zsr&dVq=`?d2jP5Ny;VLV(h1wIpP1bv*``I4;UYAEfK==ynPW~Sa{EPA8y@>BbEmk{HXA8O&AsF+U|%$M zHf!}RD3RQRg`eCU6tJHLIa3+?o_90YCi9Z(_jt)A!`47sISa+M6*Z#dN_7Vb!`L(gK<{=n2 z<1gC_T;aZ5T5+F@^7?9Bj1+dp5b>V!VU>5SJ8zG7-ii?T(uPX6z`=Io{ozjsgG8@? zG&dG1i~7dlRADCC1fV}Lo%Su~1i4aH%X9Qn&IE|Z-UU-mnf-3|Cjg%YA{#KD58*ER z+mhLv8I&7+$B~3Xp80HPTDoElAc)i<&jOlb79tvA9!+tO65M{{iyu6%6588Xywfg(?>0c5^Vb)+Ws- zWXzgL0<^Whj*0u`MagRyu+-vIZdAi^!C)8F`r5Q{yKN#J=Gz=8&x4(@{3uG{GJ$Yv z?t}*TrzXM@Ub_K-V@FPj7vHZcb5r(z5+0A)#K5rp={_j6gB3r?E55??r@JSXmF)wa zJVdM7fNLYLOlmtsaouT96|90{)^rbvuLC5 zWnT_TvSl>*@GnDuqR{fSWY>e3FY`Ey_k61}t{`njd6Lu3hoFG;&MqvXz*TW+EXZ>L z!zK@jH*Yjc93h1~hR2hosqQlyZ?g?Tf18gnI+N6vl*or%jkP@G zl=nm-4O`u$ererc;$n}CO)S8DL_c_KjOzRw;Y}@Uef1~gw(Y^Y;mxAUG~A~%7b_0A z*aDL)R!+>V=p6iVF))*yoLp~jK(tFQ&@3ADtGJL>#O(!`bT{@BeTU>%=dW6N{|PU6{*p<;ZVMHa$FYkr3F2AdGsu32X@thj(q;AE$?VvFai?vIXok3`oS3tn|QD2$ZqX=NWga)f3_!yXu9(qQ}o z!dC2~gxI9Cj+J!nkHyUY#QO>8aGz*9w6%KsKk*89>i&B?%QyhNq``hT^8W4y+nPs+ zi@4bIkxlnUTAPt9AIMj?bfMaSCtlOK#xL(JmCS!SIy@jLc&+JZNcV@o_`MH@%vZig z@s;XvMq1`p7;O!uS8>HQa3ZoT@f*f-wX>I%l#^h=&&j(EEZtvJVvhkj_+&h`QT5yV&dlV`(>C|E{EeIQ_8WC}3 zDW4f8#KAMd%Xwc%xoOeO{AWq*y|uY=5lVx!Bsw<@1tp zxzW*!e}#4i;hOyH$TH#)1SPU)MSgi!z|5~53-RJ&`7sf2+am0WO!|>AUn^%R)1Ws6 z)^<6Ze9fXn>gc#ISNrAZXzM+j&3ebJj3X5!To`X08k<$Dlxa``!=m7)3x&o2@e>*q zLB^3~4;kRB3-o)6T5~pYmLdS-VV#&d&wD?o5TFx@FIbCV2&%+bwR_hcPSZ#4*54CJ z9=L}Mi=yO54_>%}nrfG~MQwE*uW1M3ChB>nNg_uMztGa_DDJt#}n5oM--rgPCMiag!wJ6t#@6YvFBnPQq;DjGzVln6w9 zaZhYwp)4=@*-MX{tM5R-h2Jj>{z#;@DJrf4r)7S&wklfrS^G}TySTqQ5QnGEcJX&z zR?EA7^EmF}03GfEc0=nPUh+n{nwk8`^0g)dLsw2%iGKCyJHsBUS_T*;`F5#JZAY)N z?|IQi^m5UU{%C@7M+iD->PJkwn_15$qf})7m0(q1a_C6sk6uJcS$UJ$-zN%XIArA8 ztJhURF7My#2Tmv`JfBeip+il)X(B>>vH$!mp#lu-J?#%lmYgtK2Nx59b;tlBm9NB< z;2^O1ElzXMbTM1%*k7 z{8}`J&H%?!(Msy?kHp`f8*JPh$Ow%I#@ja@oZ+^l5`*KDG%wipKZhr!+L|w8_B`G> zaQ^%!URF#RUnxW6?-Z(cU6zOrB%aA&YeU2o-qZWYupDcx2mOi~QTUxP_vKvVl(5~v z8#|k<4`B2W&N?iY2K#`>mDQ7tKb1WPbM>w=bPw~E9H30W=8(!2%EOpp znu}kXUjKQKdSPsGLYH1X)5@UTSpGRd)ZLb%WnZ7O@O~v|n5frzFC`;(q&PUO$4`{i z@j{)^Ake#ML5F%%w89m%w>weI^fi2qEWexJTVlCNP7nuyC%ij?@+0-y6gdLQ`8yKr zhL&2;@#^9Wc;7GRIXN-KzPQENo2k-N?R7Iv-C(=}s8OYckn^tF_*jlpL8MK(=1RY@WpMH5=sPJ&!qoCY<&D6bYZER=# z3{+hB##jX0M`6v(D0SQLgbkN>J9UEmBV0RQk-EpNiypr?trA3nNs%o0N~qvRwT0Ih=TO(5A1u{crZ+Wj z-LjsdTr`T*t@gK7dODs!4RXXh#$_-GD9J?~pUuJhrM6^=x;?4I9$6VBI@pJ;TU;Gw zmuPKk)^dPMQEa+A<;vM2G>zu4&5iyv%M0hknY z+-?d_I(7or@$mP_D14w|dI?ssRVvab4ss&VdcxX3g0}UBQGqJ>G-3iO*j|VUde36j z*X#+}Hd>q)l!?fG9`gP({gWO}1C~de5OE+`JLaG1S{kmbyy-wVZ4FomqgUV~Tsaj5>mHQF@i^?rAmJaP z<{0B63c|OZNK_vSh`m$`@4{`LlJS-qY#*Xv$C<-S&3WfySS^Lihdw2;NMaZGbn%0Q z0pxnwJb@197zXZ^@INI;e9ZUGA+qC3Do#^5MsF2Vw;k~m<4l^}?iS;0>#iK6$U{|W z`}`XWN?)P%bn^W(aCcwFt^*WxQMKPnbm=9)JN?w1W;ROL0#3H2ubtrzm0U5CNEtxK zR84{fJZXkH^|gQm1OhF>1VK(t#8e!8%YILlS0K+lmze`uDG#&an*_KcEHNH|-b=y1 z7{42N?aWEYN&2|=aSnr|JJ!jiEa!`Cm{uudNVI*8{B5srm;+}d$@BN4f3sUy=kR)l z8^{W%U~8{F@clW!id~9rbQ>%pVSN%UUka%tZorRkM+;2iw&@1=l?+Dy8V$(a4hnfb zTqWZJda8{dHa@OQa$C+VWi_C(+*g$z^&o`R{l+2k$*_6Hcj){n;&`Xo4mYTBQ<5#B z0}{?3qKAXsjRQ+ejA)<0lhCulp(2r#y8j4T6N+Ffhpc>KV;NGrat7fHs{BTXdj6>t zg0M18rBC2|g(eQAYafOVsPF&i-#ni###-yHqRYVqRbyeJD_W<`#;izC3)l2W{r>HD z7gI*EZL2Duok`k{QI)Gl>pD-bTNZ0SVKvX{hRktm|yeTY-+SAs9J4Xl=X84@|}y35!`4 z02_uSLc1Ic{xGbYq=l74rfvfO_Yeky4yKmVMdiXnlo|l-!$bR7@_CT6VjFT5o@9zs zGhSKS<@HdmS9FSy1TYmm_|>3(cH|vMiBu_haCCM~mt=Dl0QYLn-kk(igE!kIQr3=X z8Ay|60{<;vW3Zx9Xb&uE4yWD72UIP9M<(YqX8b-lBos!@ani`k@=~qc2;hxY{dXX| zHuB|wyu-hp;aQIi4gvBdVW{*4Z`(ipP$oDgtdee5n`PwiO|iqXt7D8b(I4c?dx+g@ z0(Q_E#b~7|#xm51ozD;W5!Ch3d{@xHQq$gkA*(N~5?R>CEGu8bVW1Srjuh4us8pgg zpx&R^2%3`VMLd$_Q+XCrS9ckJmF!npmOs5`3jTaL8I=0Hjxx^OA9%LWm|8Rh^5 z0)IwVzz=HhGGu|s5&A)Uq=bBInj`H&K#QRx!00jQ%np)*oaVVi7P8fwW!GuLvJxyz zDX0Ce7h!aB_EshWjp0$Gsm`tR-^Q&wSu6;%jc`h#5-szROHcO);p0vpJ3H+GUrF&!Rv55CA9PEknZ zYhUqu^^NyfyO$h#v@H5j4SGKxUel!!*{{vMcy~1NZ50mx^y7~$35Qd64G=^`kKG?p z22o*NM`yvHPh57p_9z4$;mf{>e)RW;iX|@?Kn!2bF3ybT7%U_p8bj$rCUSPKR6p`P zpCTtcMv3`u|HjKGC5aUiS{CNU_K)=;r+XG*V-l!-u<0M=x3X2(A3Wuw*m0N^FeM&e-T{_PyAdmew>GvPfpbM+~r?#-EgfY8Ms;qk* zO~2`>KElazU-wj#JYMwv;2`1!Tc>_iGL#Q}jQ7%j+kTOcfj8#7$_kRJZ2Yo0isYEt zJ(GQv`8m~ZTaf_jMeP$$?pU;~r%<5^8wX?sI8C_($C4c85Dk;tH;MVZ2@CWO z?|`sM0LkEgu6&>K8L|?a0oPV}pFwi8>n42;oP@hi;!NIw?_1~sq-dCkZ%yeaKXS1U zn?=L&C><-!;Bd@d!~;PuVidOlt_*7PKD}9(<9|RcJyZ}|(ulY@?2P86rKMdSE@C^& zVn@-4Hac$n0m@bJqx+-;2ljTii?bc^huhQjzPKnsK}mhpJ{ag>5e|JS+g+fP`Moih zFhtuQBH})3mVL*bqBS$4n}X&Q)~pQ<3bem>N(N-9;cw&Gy^==S zN=4NjJbOtvs;Y`yXn6Zop76VyY9rX7#c^U^2Po{*KECixa#k$1UxeSU|9zTm8cWv| z=ahG_`Zq_4iHV7}KyqU^VXPoh-2FBhA}@pO+kvoOYDMg-|GMovx%%tv$oWzt8dfM{ z`4U7Fi`I}7_LUU4rSt#oEtrxK}44;ox#A0B~2#{l*p@JE%@e&c${r7`vnXs4lzY#cG(@}sCTsj6V@lm z3h}yLHGjVMw_4g!^#oY2tH1N}0W=t%7yE@JziwBTK;;H4T)eysaI3XF{_^XEJVP;` zTll2=!T4J>+_UFZqtzK=?z^zv*kKa$!eRUO$lX zd;GQK^yOLr8Js~X@||PYR{>@&W>JRpepq#;-~1IB z8<74!7>_z$Bi{I$D48iikky7^P72!kb6ACTy|-PW-PL~SH3;@!lmx=zZrjn>m6es; zmV@dlT7F-utE&qX(p{E+`T>8X5RM&At50V$?3)5+=OB=3U?nwL3ncpXy;n&ECX8K9PA-&F)6WOcS~*d z4*?kX9ITu#q1zSNo~{Sp4u|c#C}m1;ew zpdslGQgqaN>cc``sol4M7x)Q|6aD{?Y5H#de>L?^p#&X?$Ef{yDg~xLV~p2hLr4L#4tp zww8k_yiP*{O|HnQKErxyJK%A}p!9ctCRo%8M z{@){$H3+bv8h|pLPTY}gcn?o;=3$jE^GqZE_-WJ8x z4^{m#{o8-5gEPx%_rq&EmcRLtCXfzHy&0lR3w}=Hh#Y8ufxssg;-oe#%*=Q+Tx9N- zEuNQ*N*N{j*+J`xxMHi$W+T5P3JYZu%ONQoR+8TgA2}WG#1%+Kksa(E$bm^8B*BcY za5x<~&9FDDtgSAPQ%!Q0V6j#)S~0J0Ud9?j2n$jR8E1`gbz)-T3~~2Jo{OF8f;s(q z!xoS851XN4EvT!jt7gv!9r zqLq~u<0fN^$7NVVsK%6XrT}zR{Ndns@@KiRA5$y)e5lkcKWtJu0 zCi^iB=YNAxR#sNO(OEW3>E;X=L!xDbF7M6xq3hlxThia@X}DIDff9}Q%CO3`E(5ig zs_Q9RfFqR27pI3g=1h~;_vsb%k&#ffcA;go?+nymkZ>C=kTH^zummRs(bFz zH=jNJGI6KP@Syze{D{<{G*PFu8{Ah53ysclii&uc*koL0A#*PL>%GuQXij%{Rb8FW z$#&m{Tw+fYB`pQvAF%)^FqoH}K_v#&H?!hXi!JUw-U*RmWd8wFNFYopU5wWgxlg3S zv~2RrX);_#u{eENH4}_FpX$2TNzuy? z_2%PY{W?DljZul&HzmVIidWRur3<^3`T4b{2|CFuD3n85PJrawSi48O`Ign7dHUVb zJ6TyPK)D5~h@&C3v?*UB-`5&>#tcEV)(fAcwJf*F(!qNA=y+7yn?p`K7r2R!QRWxb z7Qn4&_FK|GXz{|`6 zNC#-~@o{lZt5>0V{Pvahmha+qda42N+CErYD6}bvOczp2;j-G?PkxGlTVjyoQCl=& zJ^4$}g{nhlLToO z#eMHZw%+4i#L@bTi2JsBZXwIkn}Ag9dAXxsZ@1t`^5?itS*D#~vQP~p(XUXgz|MKW zPUh-N`Z z-p8WeZjEh4Wy+xhWB(BhE(qX<{jghT`oX4`VBaJ8DUMOW&52l0{0c48$#OV3In^0J zy=!*g!Bvv!YUk8R7>G?#Nnwle&9aHNw|DN=t%SIq(JkO1oo&x_4oxCY^7>g}i7Eba zTDrQkE>j1^0NCzUjL(gsj&pi$TSwpi+Xm6kL9}9SWHT&=x`80LW5gH*vf2)fG(`L3 z$Gk}S^tSsOSeq^uPVCI_TDSCf>7z^##P*kA^=5fv5(_Q`kFuJYaE3e8j@Kes?!EhU zEWg@Pt=ts)IpuOG1a7pF2TQ#2&Qt3}d^daf7%Ua^+32%!q3Y|_;xJaH%>j3}2V>)< zz$WL@ghqj^OvPHgJUhD#y3&DGcSa|QT>B36>f5|-PUiH(=@}TRJD`ZpVEk)O_7yZRFh|6)oQDlR*tiYd?*n0g z1$-6s3_iWI)Mn7Kie00+@ky`Vj_rs)GA=Hz$$9U>bw=_bsw_88q7xl;f%H5-(XfJ( z<>_785yTMeGkC-r^dg?A@T?+NqiDr-b#*k$AcDh+2C3lj`MtwGGI^k?i9`Avt=m=`p+t-T)A;*)B%F8TRf5ph z!^M{0wal6&)0%Y$x9+FI>7tfqpVhmlc%+z_nE|E*1!zyI^5iK8H!mf(h5UKS#B~7n z+Z^dAG3S%`<={y14KI(2Gjf9jKtvbyy@wpFksdC!wS8St{rq_wcoIAs0ZgxEZ`D{; zjw`LrbaC(7v-Q7mI9uS{f&!+3R|R=_=J}Qh@!!9HN5df~{pO`xs|Fi#6ohyi`>ot${{F`Ap1e@}fUjW8;8XhrlD-c8< zUp086E=Ao>a-*x4n{o`KJweNQ1~WLL2|fzVYt3lQC|m4Spadqb zf3@Cj-f<4eD6ZEEWV>|0ZkWzy_#J50bwqG;b0gs=(HzB=SkdfuO#hP8crT$eC@6^A zVu*~_V?2a_K`NrFEl2Lp(MqRYopqo71O<;RN7mA#GS~IqnCX&!i$nmN=o#qmyzkWF z)S!7QhdoLp|H`Y7CKxp}HH+5U_Gf4;FlSP6-)__fU74Gw=Ty02=90cLIiDBVCDX@e z{Y|ci5Wa@rHUMm<3R@z9zQE?@X2mp-b~6cd$U)zzmhO_yQU zxH#*%)BK(op4wFaXXdq@xN5q!Pqkz(+1}oTi1;246mr8E1T)-k&-)E;I)naOLK{Hl zNaHg9)Ns;4L>y9MH_@nDYklj|ItuW}{zNd&eMHk!8jP@e{NMkQ&x}Q`nh9FFxlWD8T{+Og6VSv^|mRyyRqFY-OC`J&k-{gvQuVv<@?Uo4E z*Pe>bejnX$*z5q!p6qBm-#uZ<>eqOq*Pz=_H1SZRoE`q#`(3eSDNs9xaieZ`H&|%x zGn2V3R(BEJZRiQ*nk~BLx)a6frLhlk{Fv%st$dG|co3YaebRdTm&z8(#KOYmaHs`f z`oPY6hB|^7Vle$z3^tKj*fPz5AG##R@)Z;!6aZi{oaR3U?6K9YPSi`&`yfZBC=Y5j zA$BRN$(ot(SVYgyabqxP&&5)b;@vh*Nao-A-d~Zso7~4I8~U^(qB2D^m6hMD?)jSc z|5&KEUjl&kipA@2H8hS#$a%yG2d|(P!ga@7tw@z_fk%ksq@P!j@>KVCywgvT2 zZxyvUK9#@`7wWaI9vTV6*5zH+usPml!e&uXkvHn% zqsb6@)_4iTAlvk5@I4#M=)YwI26kZA_30K+BH?hHun(v_Lr44LoY=W|61>U6#l`iw_3{32X%+qU zDv)e;cX$8PB_d8^t>!co2R%yU#?^;exczAdusuZ<9xepxbB9jDi>B=VWVp?=_0!LZ zx^6;@xk=#bRAP=~8Kue@mt(YVsD;1Q)NtV9k-`NXc~lth$TG_BF&#^a;cz5h>uGWF zoVj?4{yaJ{vA(88#BF&QPzc&kU|CLx*U?BjKu%W3kNfvrwZQtvCnx`E3cwA%Uc+Wy zXmpX2m$^MVo_lzM-3Yg9X^f!YFVe0wxf{BZnmtg(Yc3-_{ltr;4)!<+c3(_v9G)nK zq>77=HEP%x+Am!mwk~jDlFo<7r-+22!Wd|Jos0L<=lI3F3Ga~uJ!w%KRe6Et0FRko zPN*&3PiMXyHNNQK{X?tu)~82zLyKigCkm-rV7=IMtwqkO!FwZ5DS=7f3U2i{ux_eD zlUIHxI#*}c$>+L1uhO*@xHn!(ge;ylMoGqzT%%;VML z!3NE}OP_X#|I5qeuoyYgUyAb}0NT86uQ++xYQLn`1u6)~vuRC2f8;FRntIuK^+Zzp zUYXhhB-Rli;sb+&?1qg4{o20kCd6*djuU@0iZqPXOVld`$UOkpw(iSP_g$ZuCeRs( z3Ti)f9_%P%m-97Eyz1aHAVbygYeMl+EUabf>Gi?p4`7=tdxz6ah5OBCpCFL=-+oVL z_5!FiwY1tC?j`>|_yxJHjAXwD3YDR`M6QTk&Dj>S+dXemT0HHxCHubPo#=xx?*vlr z8z*r7;R3<;7pr?F8n_crnBJh{lY2efdy6339`1#qqg@^O;VRtmSbH<$>Dlv8Pfs zb$55?D^)3*H-r`7-EKv%ZDCF+y-XEs{Q$SXu&q#|P%GD5Od|w@(UX_?V4tI9iGs3p z>;ZQ`z=9hhYO1Q3OR zRGGfFx7Skh{RI{_F#q%3{eDrHEnh<7uz4n)s`8e zt_f`oitc^&9$h^WcV-AQ6C`SCB_ZNjX)P4wPw2>O#)Q^~Q;F zpkTjECw;Tj0Eb*-30(+t)6&3?JT8+#XigV-JrhwLsUj5hcEg$-gI#@UOxLL>T|y#4 z)cIZydi-6}KHHQd8BD6W(whQl5nDl0G_*aRN%wq&PC~5 zFg`6H)ost@Sbj;K_5H!-*4-eGr#oStT5oGm^Z9T210xqpt@R`YujBZlX!D^w=;|@M z1Sqjo_q}OD@!>VdCvnML-%X$HK5;Q<{>m19oeJwwBJ*8c$GYEaB`wb}fIq5u3=irX zj+1`H#eAaORrxbCERu_#-yU!)_3DAvs?-<+xbxgkcN`#_J8`Go-;S1itnRo+;pGAH=e4i-lMSH$&;lD` z;bGU+)~541C8VW6fHKDi*>(=7c1oFiE!&3QSQHBl+wQa416T)GO@5k&U5&l+2bZbm zG#<|$7;9BU-Ng}kYj@=G}NjO5*947C^qQhwa`79^w6UN6fiOP(63OS zCKpR0v$XGgpb+{m&?CVv+PlgFZNJphxLgGk}eUwOH$vSlV&`xo*&JaxR6`I{sBH zgXB31&)A0=-=DZPv~Bec&$N0s_4wdRTpY}7xp#4kh={PU9o(Gnl^e7Y-ad}#2+M*M zPnH~1AnvYO_T%s!xei;|qt`CQGd*LP{0&pW_OB0A4A}{~xITo%TcA_Bb*!bx8g_FY-;AF;drtsm`VZpCl?PA5! zpU(4DAN%PckZi}mTAQg8AATgxp>Jbr4jHZb3ub?Ckf@futM~&CYJMzjEXr|6>^?qI zPN{9)E49g|Ub?^TW5e`7SGW^&ka;7bw(*LFih5s=`KmYGNC{!Y9B6M;A!)H`qa`}kB22d# zsx2PQEG)(ErSVD)+ZIQrU)WLedJvED>*(kt3vmHpCTzMHE(ZdWT-fZ9?~n%sKL;CT zk0eK9lQ7rV=&2h#2iZF;9ubMtLW~F;k8h}vQ-)@Sp2ycG)$CfCTbo;(uz6|020N7K zY#obrWXIyg+}5bIR`GV7DsrMlut7<~k#=W8Og{$YrG|tpG_bcgEm8G*XQrW6v(A1?^IGAX2~F9!>0Tg}#3;WyBHyq(m2+Xz=YU=yCFZ5i-6W4s*d_jf-N zx|}GOzoVf!FvoE|-bx$RgVfPASw1aNf7>=$ba%?4=5$!Nxj5P1VxNc_d3$+WH(wC! zl!>v?8s6`n{sVR4Xg9PluOxF3=v(yjH=rVi`~-Rt+I&$4K6SVDX<2V9tVXi@A|n-z zl$UFZr!qv{FHR8sS~KMtV&2$>wzKd;fT4W!>N4pHA;{?oC%t_vo2?oKPAEJ;A~Wvj zQRk?65Fn&&pys18oka0GYwQhw!JOLGZ*Hy}Q%kiAn_GNP!CPT#Cb`{+8#x(3S$RWo z?06jL1QK#VYA;)k7pWJkw)xxz;Zl(HmKTghTLGe=#)SHp5?f7H{T2AY-_coB1k~pg@%w}(8G7w5}=}A^{oMJ-@4L7p#FZh6Q`8-tu|(}66b9%!d>k> zU?EsOb!*e%l)kX=fa>1@D(TjP80fZk`}Thp%>caE-~n-XmL;);WZCFXte)sHq3(4_Aa0iOI)3M^%kmz}M$ zeE7IMcjRoWKna@B_UAsMd3EhTt<6})w=PE_2VMN`OJv8V4dx%`&(D_s{Cv3he5`+a zy|(ph`^~F0z~?DbD~OcWCvTu}oSd8lNX(iTl5u}E9XZ1;x4jBoMI9$%WCC0=02VrO+>T&jae4yszDJh#?&Hh4D zeR|6RVBTFvF)JU@u<131J8>RfhHhWNup}P=2FB2eV!9B?uYRDDE<@D$;-9D>{03Vx9J)JOznjyd!4Pe9KI}HQw$><~nVns1^UZwt^<)E(5`cQY!)fKq zO*t1fHa5_ZzjpaU@qaxcvdcA%V$f}ljev8en9ofcd!P^1rRk8gx%mdY*nx7ME{W-T z(~)1$9K)%9P6GxW1sU0kUXNA-HFZ+(-k5n`E|y<;O7*C)YSURJu1;BO$|-8cAXDc+3f-7Js%LatA-%9#{bk) z2+;YWEv;4XTSwo_nv&oCc15bre$JrFH!FKUEy-16Pr&YHjQ7JIY2Mw5Vt$*=lI3Ni zd#z&MxPO6H&?3|Hd#U#GWC=M~-G1rVz|YVXI!sU{{F5yQ+3;b0=9SF&9UCgPw1?%Q zSU2u)QmD3QD4DLwv$|vED{2eh#mj5u{Mxy;@gSu z4%j2=wbWC&5zi?@Ra?Dg>PjgGGRG{>s|0E68l~}BPiNb{=2R!=cQ=F6g&q0nfpZP| zbzf%==IXDbw3Hj1PbcXQKF%ZZ-K#fsQ*<#ds6!$m6y!gJhlih?9(N*62K81lZSNcY zGyb4ZsJa<3AxkfwDv=4`d0rkaJggXE`dn?V0Df7t16C=xH}XI@dO*?|Kth}J$)O*a zbNXe%nuY&P(4Jg#ZM3r4$Wz@ddO|6m>sZh2qwLAjYu96c^WE{nt)Vni!L@QgL$lRuU`)s0XOG77PMs>! z`}mm@L#m8jO`%TXZisr$1vyeBo6|T?8`e!7R8mrsUb-;BvUERc&ePnqQJJ@3W zbp;^i9hlGIQwx0^-&T2wfw%uRCwT2s4+r#Bc0hs@BeRH%>CmAD5KKdFoJX?UJuQ$2gW`6n>&#vFRzIISO3VnT23$W}6a^ZZ#2Osa7 zi^sphsYD$Ch6G6Pe42co7f4w-S)3=*J>W%O2VY^G`=#?M z{X9toHsJnb3RwNz@!=@d=v_|F&uVXOn=z zL9+jRTHrWuefd(W=V|2An6xx15o}*b%!VnRJ%gm)vK!zr456r2Zf~5BDA&V(!pF_{ z&iMHFNX5u zR2_#vR-LlbXHrUT_8dkQC}o`Z$h;~4@KG949QPv{ytF6FqrGOhEgYQP*+S5=*bTbWwxT0;q)%0zt5$fm?0D-P{8GgYs_ zB7j}-lgD=Y1wU=EW*PGhyAr7Fe>0DKAPZ14goj4VwAr^66j*9nB#dM>H+k<}03(~) z_%R4h1svG(mCmTPK(C#SJb*BjJN?o7a;H>jw~#Vnqgk#C;B2$&kbsXbL z)wJZt@&BkZAR8~}-Rp|$MDMiu1VrgN$b(c;{^7KW;VDNg6+`wI*IMjso!?-q;}*4$!6ysrPsR7 zwse%J^eoZ!khsDNh25Vj*)MGCp4#Shx%<}sy7Ak_m%3)>0JbF@@RC=3GeS>njop6n ziVp4t+i+&J-!xo=X8=DbXn&2ojyO!Db?^5*N#F+>2|{v?XMdcEukYqL9dpJ2K{vY$ zxjowDc+G10`Kxw$Gaqa|}oqBXBdRh9TD!HPyR@t_ghsaI8{NnJv z_^ihe=>C6Hch*r+y=}iIq&sBjR8V4I=2hG!%Y>+`KqouuO#%#i4xRaUU*QOEn? z=TVs8DUiW0_o7?3=G3Er#LTu_JmA-#WtxXI1*FCn#lnvL0%|X#+KI>=0?AIPT zzO$!_DzDZ_leFk_V0d?*3b&$4FH10}@=eySCAYBgUnN@fQm$EHXUe=OpR{R(zWAl} zoP5U~=bvB{`*a<-oNlFd_`5;TajWktgQ>PBc5Ss<*YWS4HYg7ymVVr4;1do<)X`*< z|9mvt3-|;ty=>mGC@Tz!<&iQ=k^u;z*PFAaf4o2L%t$hM3vGWn}9O4dei!BPtUKB zzJX>*`tAyEPZwW)&nn20?DyXl+(avk`_%hI9c^D6rPil7t+r2u^4Uz)lAxb|FXu~6 zcKTIEAZb3?q_sI01|$^qqjrUd z_B(>ov>A)+-zjpV1%|UEu1pR*X~beFsJ?>fc36@{k=55Stl{kb*ci%qSK||vg%1hy zwKRm3`FN`fY7^`>%b*Xs7%b&~*I{Lc#nrVV*_A#Y&Omx5Mv^K%? z8cg@iqQiLU_eu-w@xO<%?0Jh|n9K4o9F0F-3aY|O=$xQST#^kB1_k9uANnEoeO~=d4JnYoT3tC`smH5OJVooa@qE1Rat5 z!aMl!A;>4MEe%_}w~fHWD;)9?nfr{TLTT`OCerF-Cr%X1e7?`BL$Tu|)e4?IICeAr zln^GwC1gN#yKYIus{L?5@JlE`RT8i7S+~zn3%;D&qiAH_oioTh{Nm)jx`)QOmor8E zt_+^2BX+na@%!>w`eA>jalDS)&{iI}VvSjwRqL0*?|9hBPQ(#y-Y9L5!I8VgRw^wFhp$UrWEboj<4tKum2=GS+HoVCSdy)vm z-40{i00iRq?h~(w^N%L4#CB~>Yg%*ft6Zc-Ym?We;#)g+=#lj2_fECx__--@;El&F*UE_$~4S;7eGU)7_X8RQ`@&WWcT|7O5n zS4+5cd)o^G*NJ$iN{`h?Og7dVmC@&Qe3~7g9Vf9+^#(^z9kjN)mGdFA8X#2_%{~)e$RoqUY=Hj?*d8p=YPgznF$Z2<&nE z+`jEFg|8srP+4t^Ee@p!Qq(*4LSTs)5RNxx@J7K~cmW?MDc1%lE#lKf9N9S{k!Dr})WhCq}Olkekz~oUhMnH56t*UKU(ltB2 z;bMsS5@;ozc!@*!YwOD=5x0ip&fLk}!V{wvzC$A=cVz-Q45}pZOnnwR;l$gPQgx1} z>jM0vBX4g((0N%knal$vH{GjS@Sj&m(S;55tN}XzR{2c}5%_jz{1Wq$)l;9sm zLEY10SeOS)Osyk{7UBohp3X!{c_tnn$cAnma>1uRsvUDMpErALQ&P}`bHW*4r(lKU zh1=x~g0AP6KCn{MzfX7`V3-|&T(^WvH-@L5NQgt^nkn+jtm5B#n<%j3sx%uUE@vn* znkW)^z(lLP&tdv_BjrQCFrr8<_=I>9sdqo*oycMCTQ-(&6J0Q>xGQQ-)%}j4RgXjp z{qUutjs^3Fov0W$9ao-@K;*IIL49fh2eOdxh8EA05~Sauf6IM_6-$?IO4Htd0?{wQ z2}u`op`qz~FA|wf#x&hKzRfmaa*sb!+wfUMwhY!~Yg)wl@n*A2y%h3z`^VJp-Wqwx zkHEc(u10jn@TUh+dz;f7f4ADHV50_U<*G&0YnFMR6W1qR!8Z9iQM8C%M!RFLcv|C? z7z0)gTmW)0EZd_>f5Dk|dkIx9D5f#CdM{nnsh<-`2c*Jb>GR5I6?ge0NcX`0^QCWE z0Cy>smL=j9qS<>yjHtiA-;xha9%OB79x;#v2IvjYg_B@~@aN@CbX4p>n24%PH$T(X z#{@(PYm>p@%kv|WKT`cAe>Vpf)RVt6is#7fd)D;>Sxw-6^$J@U-U53^X!o~{#*@>b zwXFbqSG$9&WMXlOLc&q&HOkvks~C1~y~=*k+itAIv2t&X~wML6e ze^1smNW=0?#q|9eJgUm#Y-&}p9eqa2$J}(<^1U$!;&FH-2$>)MDcF~RN2z$VK^^y#kwm86S9`jV z#&xTFj(<{!h)ldG;7|&q@$Kq7N#p)x>&e5ZYG#+lm&W>3@VdohNfo~47slh)O{GTY zYNxAw{VSWW9YnElzW9J>1e77jM88Kj-q?Yr7Ew0olsDf>Wt<2B7?Kqm?<0UvQF)V= ztPa9%@?jLq`+Vbd?cbG}lfTT*BJ=x2afQaE?oHAUyVgDXER^0j{OJ3v@3_&_sfL!V z#N?o{tzg?q;nC_?|5av#L!Vt zseqti=vA5v`Qz&Qcvgx3NsluEUXCahd-22FhG@n<<5^MarlyD6QxP*kuYrepHK-?b zeh>_8co!+EW!&j$~UGdOn3ab_q!5yMxJB~4F(jp z?QdDMNs+v@B{`h3$r1O6zJ_+43Ps-963rBQ;X2365wRW?c0~UzOZ1-a`>KndA#CSb zE1Gn)?q58Q-eTtBX+784VOg;d_0YZkqhu?@c_ihH4m=AFqEH(wjN66ybq8)VwCSkv z7Q}8dY}-rtX}+iBA9(Qbyqmc;UA)OBvwkdGr*$E)v^Qbv_O7Flv-P)Iav4<|{&&u% z;^}5N?tgIxoG5GFsQ!H1$prdQ89sE-(wy^p2PwGk2k;Fg1I;I5=kmMoJiihfihd4G zS+p34`nws(9(Zcbo508Nww@7P|Kn@)ZR|5o$=mDb3ZGt~@9~%ZUg8Wj)h^#iS1q3% zu7AIR4}Ow$-~QHHzQe~A01NW^=DZC>Rjhxnomsxc)d+Q}xMMlF;=b@}$K)4W%V?t3 zV>4KH+-v>kng1t`)%Y^!JPDtjk$u%)XHXN#_TXz-m@NHkKGN~z@tgGMC9+nyHn8=D zZ19;f`GRH||YSeNE>hfue4zpkKeunGB&~x;b>V+VA7zOxA8j@PYI|P)%?%Npu@b zWkzw56H<{yD$bA-Q7m;t_)>`{UAn98gLJ0DM?=Ov$jFY!I+M%5oO5) zXif|9RoM>F(-jj;W3WCceB_{;X`W}dF;VeM7gFyq$roLO2fg(b)EsKGRbn&@#8N?_q!V>R`@N)WB^PzQyHJTv=cH z;pd55=t&cpQUw#&pbJ5G!_kPro5Ou+B;uG{hcp&;QH3V6f&j(cf{FuMe-+*$|HMRF z?R@Ynaiv{IL2erq-l819mM-4ymCS2Yo%#%~D5tpOqe&gYa9hP_4F$qRf0Dn+InLHO zM61=&Nx9j{1@s_7$sV3cZ!Cswluk_lRM%4Z+TZ!q(2d!jq64FW_LRS*=JM82-8lK) zVoZ1dbR1>A}cmt{P}8iUptJ7$rieR=t}Zn&nn4>>N)%jzuQ_7 zIoCS+T*{AP;E2=|QtUozf{Hmtl;t*#0DnLQIMGnkocs=WOou^4T(@fF{RY}A8wx9q z7bIS{J0u8&s5m;xiti283yUeJ=ouz0wOgN8AAlmL+`xAYwhDCwU=MJh5($oaW{^(=rp;NqQ_2WE(teMK#Fxp?k< zh)CaR#RUkcPSh{I8mc)icxj%vwyPsxkAx%vEMCrs(tAsm0aBZQs&QxGn%eR**hjBK zKLlB_Pr0NFs6JhveD5gVTD?c;>Gq~44v;=EZU!B4kRRDk)?LBaSt`=F*5PYeCmart z5s^5{jkFWQ&fW>+67Annk{Z50y5-GW2$V07(3OIiToV!z8~v!aT5)mIt33EkAhvRl zRSpyk6N$OTr(9q7yi{?;H;Mv0o_KsR$)q&Gjq!K)V%Y6d zlNNamZ1?cP$7-L>kADXP^3d>4G;2FDR}NfpfI_Iu=+!{y^@TGD$0W9FeI07sik9`C zw?w3=2#@JebkI_9yb!Jx9@7yMf?2org?@LmvKdbAf7oJZMO;}euzbipR9{;+CyHb4 zaMs>@jb*vLK$UjiYvU)#AT14DAD9dtxbV89)BY@ZRxb`!WoDvd9%Kg~4W4+Ul-C9= z_1sWsc;DAu%R7bYI)+S?(%DH^k1br?^m|_)5|Yp`c9CyHAocX9aX6-Fi$p83zxr#x z?{myvNMA_|9o2Z*xQR;0_pg(Vz|Uz7>yd=^ef4G zPYQ_PvFbGiS`F$UK&Vqp$w1CH7nT)y2_^_o>>%laz+#2S!)EBWMh_Y5lk75M7en5a*JeQvQ`T@;#Rg3#xF*;@rL zNcQ&nGm>CE3@pRoGE@8n*maaQ(*oRc3m>ziaO472$tf{!9y3q3pM!B(?WaZR=Ai94 z+LeD$SOJ&TAb_I6*!+QF=>PN}n!io0b-coZ6Fx|glP~vd)l?l%BF}k z5Xj<8=-r}?1Z53&0U_AaCwi2z2B{hMc!nTl=kR(&r)=ffnU`Zv0z=pIeA^46r&udI zeKn>E-rH!X-1Fqee+of{?*gXn6gxWq$oTtCqrYd)T?9%`2E{XrP!4^}W(IQsyv0|c z*nvj%&UdLVZnG``bz>y%xk@z8H|2J>kIirsnggRQWOZ)2_Icg!?N23`t`ri8lJ^Z0~IO+|k~~qMylKbo@e? z?lw(G-bgsoajZ0^AfmAR*wT#sJHG(No+@Fges6AzztoB) zCjRT25;De=Rk6w{Hlez#Y>O2ApFob`)4QsfgB zla#8`=#6V&=Hs!Kx@mL&i(Ke z=mCK8+I^m3D~_rTfHcXi{xS2e3~S|n-{Jx$NZ8?YLyh}2FbqMPRu9{6%DY#sQqRAo zyP5wkHxzoFb3Au7Q|hzwxA<{aE_Q$+m1c%yTA69Fu8MHsqwH`@Q#I1c*#~cWK0_?jY=tqxVek)4q`hJ^oP0C%of|7no%JSr~ zX9Vu~4epSEPSR6g!SzOYFsVdLC!FZ?II$@D@i-A%4jseoVf`qcN)dRu0sq=eGZ*d` z)N=njrJCp35(Y)j$s}&MrL9JK@dxfG2AaV0AKq^1?+9rlMo>)1OM9<3Hn=USCiR9I zUK-f3US=^rxYLdV;0|IE&q~R|k1fFCh;3_hQ zbN&q}V-sN(^A_fQ>9MyGw~70Amx20=vE%Zq{1F&@x?bBw7*sjUM}ab^+6gom6@!j6 z>z$w=-pLlX2n3}=Wofrg@o{8ty2OiL!Soi06>|!Wu=;6 zz366=ChZnlUx@d%pIxU{ac<$Ldb?6`10kpI^8G|*t`d8fUm;(Q&juQkbYH^1K`H7e zn)QVC_{9VQH>{veLi2!fQ96wCL*spkI7*;eg0 z8)&O#cqw#9A|W9lhOF{o8c? z;(kb5T+wVWf*N*wcAsac*L*87=LXQJFb$B6XsTh)5@8dU|ag!K!^il*6F$Z+wA-j$9L$@a@-sZqPQZ&Y$a)-+^99%O~`Da z&E6SmK!x9khCFZ!FqC7->)95E)Z5Kw2HL=7?Fqsh{p&=jzz$dayEdO zNW01hGZG@aTCCd_EENO$b}bokiG;_JXhLoeFp^Vb@;{12h8v_vqN!IFx=)JkA|cgd zwGck_SY#(%ezP)z7LSHd1MPFjrb&Z5XcBQI8Q$u>?cug5r1s=nSfzsQ#bKAVw`fZqZJTOV3jMe2uM6t0z;EPrV}H_eWdpEMM)Xp;40|0p z6>beVl$4u?>sdUOqj&iCi1p zBe2IiaWK5p-#dBqFFg?VxpfmMhZA9JW(m77?!y~sxkQkfv~n~KT|?yuzsBs?E9A11 z!Z$HDnWSu~r8gJ7qD9ma=n1?O`!ht#l{`kf_p+moo_#V%I>bVdB=`#Qc$Ex9y7{r- z@2NOUXNx@{zDT4Vs8hl*o!x0lD+@I?%^Y@hiy&M!v>thRmD|zsBqM7D-3Rbr4X-Lq zr7M1L3Av^WrZ*(s!uwOu7`(Os;w202I+_;#Ea-}C$j|2IWQ-2el|cB%&u;oKs8y%S z%ncU*jFE>|Jv#XU5HwjHsbj=_hrO}3!Uwbe#h@RX{rswK$RpZ?Gb8B-NFTnNlBI4R8;ap!k z9vMTZgu{iCIS^Xm31p!aZHlm zVeDt+ztx6DYpEnxzcgPFUyIsfFx8lfzQKU_Y>%QQ&hgoM+lKk%ds}R0*Sj{bhN#E8 z)B13gz+-ic64&sElN!uf(N?rb!;2jxx$u&8zl@K`t0qv|pI^IUpA<7i1CW6PbN z18i;39-F1<^~F$%VADGTzf_oEze62>FbG^x zO1B;kl@xvqy~|Je1^M!cpB5S{5i1)YjDmy3MQ+}5=~Iju)$Hp~WRv+PWA;RT5Bm!7 zm%?ey{JbQBKi)JD*S{4{O6$+BU%>Y4X2cR9@FD;sa-7lcL8U;Gd;#MoHv`#EI1tI@ z5rXU|7nI$KL;s!5y+j`G{JMW4qZyirf0HA*UH*CphJRWE&LdgxklvIH;jMvJD{?6W zij<9e-)#QhGPw@Spq;5Ys_^cr=M&}6_|5)%`LP@FO^Nvz^7B9JD9Y}@h|>oIRsYW9 zte;zLuWmmef2|14*-iQIQ_gRDj(;U^|4}&v37BG%G$esZh@0oKxt)x!ZZJcNOL0#7 zEmiPKERz*Mi><--LT*6Gx#49MBh;L|psw+hU$Usa;-r9N#ib|UUf8{NwvIhL#y0Q#J*-+z(_cKUc)4PcK z5NgZ9=90!@ijv)5RatRjBBFD+u3J+zVTbf|YlJ;uskO-|y*z(Wu+^%bY z1#UHC+X;*^}QnNxk?*{nKX`UH+l8uO}meE+d_mFn+o| zAnNsk^tdB|AH!PJNyv+4DQ`PDZ_WExhCv_jyC+Zp!a7+wY(F(V6bn{6p9UvX^=Fgm zya!g$w3+6qOJ7^U2|Zmx54XZcObPz}_&71Y6@wsMmVY26jt)iibQ>Kn6;E@>a{-r- zD|QjiNVAZDU(!`4z+WQNse}#a)`m==gF?%&?pRb(i7#DL@CjjSnfK{KH#;bvaz8vs zqOcO%H%_IvP4R(MF2e()iM1D*hNX_hVcT1VLXSJvzdZ0uITsbVeb*-6ZxB_&n4$%e zEwA||L7RQ$%rx=Tw6{r%i<4ER(^Ro6Vl=IN(ICOFvoA_Qszew70_b*gV>Ccu;IE*l zxZ)XP5%_(Y8q|!qoZ9JqO#q7v=J&$)3_ip|89$ct+-FNCQDq-Y=vK=mfE;g5;SB*O zrTChmsr2(BO;Ju!Nyec@58Eov=ooyPsrghn?QAc-GNX5m2KH@O$VzHr=+0yfUb^_# z?@x7ftXp#xf)GR-pZYt@v|Tk&nwY!2|fX-Q+iVR7kF$K zLGO@$N}Tz0>i1AdRhpMms^fs3Yy?Q{AW-!2Hj0pp{|Q)e1`~kl{d&PlAPA@(F8aFn zV)k^zm69dVIWe)cVxKJ7FaZZd*}bDjGffx6q|Ri?pSVH`g(x7?&e;=F@Xai2Wa!gGs1{L)Cs+tlyV>lB-BHK za9nr`2xgRH{V&fBaY?tnjf3H9_ITS{N$^T_kZp4$;1CV#2!L?+yY$88UuO`E=V&yf zHuE`wH0-7tj<*f8QhyFDy`1B*#1gjH!1uGV?WOJ-|G_b3xHaI=yjA4WGr5H-7KNqz z#rYCs94P8u6dYnuly8w!7-pT!WD6hWS+Z=4Zf{!$_Z~v}%`R9TYatFe%VP>KlN*A1 z@%XP%O}93z&E=C^q=YMNO_olk9Hic}FO(?r<6O_Gj~o0itPY1nCN)mW+oass4B=7(ujeFfg>2 zJFDOwXNP%p4U5##uDFzs$Eq4wY&RP%KG zq>*tYYgop|dm}d&Nw*S*?pz?uag;FvKgk?Yb8034qU(+%a0A@OC;!@#*89!q19E-{Zu-WjT!j`oYrw|#=GT1t_5xJ!rJC$QRzQ#F zC0J+kJ_DzLN-pFY^!tjt1?hBRt-~0lyq=w6e^JdI29$~sQB?7xTE(Lra$nJ)QjR%V zWN!qG$tZW`uVG*vk{sDyF;O)lkNtv)=KJW=4K>`K5>NWz0OWM)kwTW%1&Gk zFPkVTF|)xk6lk4&F0Nu@NN~iELN}Z)q!tN)0?9bCBy@Ei8{s7nrC|e-oe4e$F0gI^ z_I2gBeZIMAi__-H1FGH{==3^K6B@9SN!7+9me!PQKLMdpAH6}IZvI2ps`I0=M5**W zx1>Ro)N~#DfVq`^xoh7;ZSGDKFcHXrz2Ihu1&&AnaU$!{BTUmV+=UA8Zk*>;6p|JO zDWp%HM5#}4tCj;LKYzjL!h6nkBxZShhFCfFbT1p$Wqh@|y23RDgnF*af0A0+m9_mV z`Pm=rr%*J}0Xsg^L53Os;0O$P5$%piQ|6pOJ$ zJlP-%EbE;ni@8>!*%_|UF~sNk34~Uyq3pO--{;lZY;n6;R0B;~Y!1$D?lum9T+ft9 z>qzz+ifj0BE0o=~0oXn?Jz~^9$ZK7LzaD5t{?D)d;ZUOp8r+nO>V~Cr6hf{ z%Y`4)b?_&5RhxzAUk&1aA~gRd|Az8TVyg*1f>X*%hW=D~-R`+bjfQ+o!4A{8IgbHHap$0W(Ci~*Nh|iz@Z4r z=h~oS1{SN|0Lu(|hS2IUn~%c_D&zVqYBHz61=-l0Ce^-dO&Hu$^?ROMZB80sRPHl` zkDT!W`%@n}=tNk$& zGQGaTEl$fQvk>AD9@m>o#B}b-vD}y!IMd?M>Nh&@Ew#nL9|0wTWSP%L! zKlBVw&S4g~fnP1>J?Movq}h2s=46e+f=GxJZo=fGABDu^?t_6!>C+r! zRhAOoQFRmO8y7@!GvoJiBU969KNWLlq|p|Cx>pqq`X&Gat&a!R=bxrU5qBY&S8b+? zJ@G5>Eno)$8lZipIK9Ay!YAto_fyv`xBJ)qw>1j2GeTPc)(t@n_nqG*q7u{m0Vy%*67^->fpz#0!?b zLbvJ3_ua zOMIrIZw;CpLmy%r=tpT3QM4y+$mEg3s5FhBK!!h{A5e<+pV9Ud71 zfK{=>+{i3e0PXK2L)N150$`}|{+Z5$N71m62@9>9+yX2n;M6kz){5eU8VZV-B9F)# zXiHe5YyXvr#a?!o@h}t@mlHB&WYBvgf%#(rP}}&0Q%q9N)%{IJ69Dx4H(bfftC{hR zD(e@cd#@H6Xm_a@cB_KP(wlvPs9^WnkY&7@@2GD#OzV@gK?c61p%yfl5TM!9v2kkQ zK|Qkhx%iFYEx*0DU#TW9l!ENy6$8N$Gi+?K2U};#CPCL0fc_LDw|Ko`MFzQ8qXy0@ z!zghi`Xx|(pn8=-Bim(oD-DgspbtvGa7H@j*oT1T0dk|q_TO9RcIMKp=oY^90BJn? zoxTb%U9NyB%iFnfPyEKzU=X!EHLzf99uWGXtJUIP8CWF@ls-q(d_%4=?gYiZ_kfiM zfx&Er)M&D;MIttEb-j=;F0BU+7+*Y$wxgpHCfJ-8 zLgBo!>LA)mM7lYrrqK$5-jsV+Dgce~ci!*tue#rWo*k$6%Df{khGs;uc)<4k>$q59 z&`hoPS+f7j9KkMvrkwR&{R>FFCCJIh)7lAZ!{|t0c))M2Q%w!T93*D zj-5?#Tn^|W&m?`RCVeYsylOxUBz|E)MfMr^Y=PW+gZGsFbi+);R9Cv6l^AIi31ZRW0UX->uwhLP?OB`?r#xpD@*S`7V&VrA!qo??zK4{fi#?%9sguB z_Nhu|K6n%bOmk|Y^BW%^Jbgo;b#=lZmyx+nIWa4chjal#Def2GfkiXf?gK$G9-(_l z7XP5zGY*+0zfi%%Jh@5c9K-V5`A=hxFpLMrxbtKXVK znq_jM^Ez61FDmIN#Mm(1!J){Z=s-YlWZ?ac>zAEFQ57cWUPU5-SgEog7kqZ&`;N;b z>e{DAU+X&IH-&t$x{I+xFWol_iSO*}Kh>z0rHde4Va^PYK&F@}izQS;1Uv_oFqf`y zfNDQd|3~i8BgUQMx zGdcb%bWEr{h^l+IhjJ+Pr^~g^a~H>~?9PnG-jzxbt84j3qFYvdMU`W0mZH9=y2dn^ zK$Fgs{Oc}PH^|rCXMVZPiCA>U6ZMEAWJsp%)gH^WayB`VNdmoKkFQdDKW++3DuE`N zNQ`O#JI<-N7jg*Kq%nIjF*0Tp#Bd*WYb=Yl%Eq?y$Yz z%fQcXcec&%Y73@tVVW%+luG_yz^zj`SE(FS|GI-A4JYf1QHlzoCti=<_qkSjfP+%5 z0{`US0?3Vrpq6;=E|6~MVD+Jt?*lnSG$m^zl$2=icdJM9<3BzWOcV|-j;%9eD)$~y zvj9iMw-|2TZt98eK~uhW)?_EN^-&2Emv%ZiGbIK`RMdWQXe%Ryg~Buq*hUBsY4DZ7 zy37w$5ViS!n$~C+n7blkDS3#&Kn4bN0IgVf%I6y<1tse+)EhoO@eJYUw#xN_ zxG~^wqSc|5MMzJi|9`yr3N%~R>D6QMm_LGe#sZE#!VM<|c5|~cJFadi&@77Snt?b5 zItu1n%ac<^9u%rStIX>nfL)XCP&E1YEvac=GtHMsV2y?>0NGO?5~K|Z0;1fR3@dd* zccGHg+m3CF5D!H2=E_NGw3G3qI~AC4p+Hn_(wI^~oxyy3I!I4Ad(@n~=9l{(?CBtg zHPYTteK4eIK)9mt=V!%nW&XEF9#R!NP8+^CZ-@W0Ck3s@a zd1y}9rPzV9t2aGpQcqYbGZDdHqtA^&5IM+ujV9Ri`c zxocEjnGn|&m)zf-X;l(9c@A#@o5^e|5bFVNsmoW$CvPn4n-JC=Kl2*O%;aK|k{Q3f z5Kxl-_g8hi#a0gz5p2l=bi108$vctd=iip#foQAuk?Dk?2&1$vDoK4k+r^HXODr?} z6{TZ(I<1jmDu}DD+Ok3Ea?8_<9n>;iW#(2hi#f#OTL z^AtQ4*`qz5pzbQ68KkPdHgp2bHI`$gjBw&@7^5R+6w7`gNs?}Lb9D%_Nf8NIiJ~XY zD?yFz?Q>g)ZuTJAY#_8Lx^?1TReN^4O9W9O2??6z#fl~V3p7eMQV%26JAEmeV-v=q z>IRi88%>f(3k#4TD1+DpjR9N{M`H1bj6Sp`mNC;Yw}4EE8%P{JgMHZCQ+e$JPI@Ub z6&>zCO_T4x?|oSs`UYEI(#dL>3k!|~!(#{*-a)M^qW7d%UjHmk-IJiwvy&-pAIgfl zs8+R~+ua1^yJ%&&^uK={t_;M_(Ud@K{E*kVi~11#!CPE&`ThxiNiHOc`5H$OxHK@JcS5qx-CDa_x&9}f`C{~u0PU*H0|AS(Y3 zB~atZY3m05Nl@xdH%iyV!(4?Ml#x;_9m_Pft#ZC>3+ly#jd;<3e-O6LwA(baj9V_r-$X-8u=rNIjVE3b0=QSWE^n1Y)+-F9Zts=53E3OX8D}j2eCb z$$yQRG=%UW-u)Q2726e@CfZ@jSap*2GbTGlX$xqZ$7a)G_~@QwAkaa_!3S9(8dOV` z>)~)-twf|mA8N^xAnZT?U)DO06X>1saWulwO((!3get8V$Pq&u8fiboO40x$)>dFE z^JdiB&0Wz`*?=6B-OlJ^zEYPK?rpZGfFJumlnyXuy?)*oL~6{S0gTwfGj-XoVv*mn z`v)It%ckjJ)%Wx&@3?w2yRVl%zL+?*g7(zJ#}MB}s1gZFP+D>TX)Xof6`)U#J}7RY z{q*j=Obrl|eHk8qz3vMZ<{RI_*RN@Xv=xFt+Uea3yg{zQFi~LxR9rSv3~Sk3e2{wIKl$=lrzg&`6RL@ zG#AAV*e|*z4jctU`1i}wQVcc1Zw^(GhNi{s5?79;U5(6_pX2At`gd-EJY`?-J@y8+ zAf;b>To26@mY_XU7B1}P`#{S9xdqd)K)m~nBl-xMtoZO73OGC%EjMTi2wI&z?Oi5y zt%^yK&0B;!u;YRciY=2BVMMQ}VE)_@@adFtigSS+0r-j-)H>Xz>F~l29oEzk6cGhZ zhe*f*v}5{bv$2N z9Yo}+efZf2QDQFB(^W5|1`4PwKTfxg2S>=QFW{2Uo6|8-5Q2&i9z+SLCPP*&Rt3bA zBhVX#kM(4=jbTeGq8Y25;~2!P`BX^_4PZtX$PEd+FTJl?kV#AI&#=}a0_QD7^zM$^ zINO$fD7CY2{!l9X{z+tQ{^Vc#CunZ48n52((|CoHN$_p+Ph+C;+5%oK6=pVFDA1|| ziok*1%uGOn+xGO)jzvl=xkam#n>JQ=4e{NVrGd5q1joEm6tkQ^eulDIxF6GA;K9nX z=X_UrNPyNxQUTzKzy4<*n%gQ0U<#qzNnez)16@C<^s(~Xw=+1y>6PM*@dh{q7 zwLd%*TwQa$EPCY;?H!K=RlOQ$jmeVq2EmCOFxWMCpkqMEp zK}wdjSUg(Wvqn9t-bGAy;?Vbn;)L}?o~3VGwEF?x&|^&q&+s$z!$rEU>-Py3fP5VE zC(37A+=Q$yn+|~slX`Ryw(TX&HvB`7&^=cAFdp0$8QgegC zr!QN$=>u zAD&F)x~Ge0tatmaC?|&q1%K$P{lM|?0*IZxdic%PyU)q8-@lAZ0g@nhpxXmWplqP) zwX&_l&#K1&k>22Y-F8XFvJVE=E!1RM#UWN4h=P;hvfqi+*x#FIcTEBe4Uag_{8-jU zFuj6I;mzKBG-Q9Je$_b{gCGg};TTFD^e0KRDxLYRgE!3cy&UzcC9ACp$9N1bk99vm zarJ2mw)`-$XYNL$4UAnWX6_Y!drO!<+Q$w+0N6et`SSNnVFC*# zGk(AAwNEcQ|H1z6jBB`R#1Q0n+bJ2*)y?X6SJ5?opZ2Zv+-+L~(EFw-8(4&3p0)tV*7haH0&-Gw@|>fHN)U zqttsSFm**FW0Qa#5YeMfNA%hE{RGV&ZuX~kv2S5E`_#FG#Q(cM<9`T2R;3`pK*tDl zI5$BI%gWYzsSDH;*qs6EGd4c$eB(*yB-KCvl?YxrxyF&m{GFV%Itt2@zbGiE7?`NQ zJ36?gg}@7%rKFN13QBn_&YdYbaE#?7r|XJ>g4g-)?@6y?J`4qA?8`f8Nlh=Ky=L@p z#M*ya2OTQIasc1k+x32iG3%&6N|O7a$&Q7at!2 zd{>AvuDV{=tBjPMYHenKKx(2cf>e02Lv)e{e~=v02EaiWSfvgjM1^OW-xmEF7-oKD zcmH-#Tt(vHYBhcSBUe&bY8dZC*!JVYeSj*L7_|T-taI5dDkF9=;Ndht^+Rcs`(@80 zt9BnU{UH7E{_yeZ_QYYhQmM!Ic0%u`yqyE=c3z{jrrRco@mkZuGyPOo416JCGk>#O^-IVaEv9rNha z%z5O`T^SbI4Mw;=EynX|Ew3NpBdUc{)0)_mWn5E%oy)j{F!51xJcwrTsBm#P+lf(h>YBvm;6+iqTl6vk$xJ715d|l z?>cWf)X55QosZHEi&o}@OZ)U|-7r|>l^3>AsJ$+&F(<8b+w%xZte-tFSYgM2j!Ld5 zIY?pF$N657W-NxU&hfhIi^mWbQ_&o*o@07Vg`h1uda6Z>*fS*awCS6!3;wc0g z%5Az(doXY3SP<|~ziH%mt`%QU5T=In8(sE(g{;-9#q6!6O-ES6BQ&?7v52yeH!~0w z1WL~lmqV7Ts(5BaTFTJMT|ZDSZ>uHpdUp&kd42TB8gBj@RNVa8MC68!8cIM-AdLa3 zD6Pe3rz-4*J8=}koOqXW7?}7uL7)gOEl@lg2KpTv`oS2m@ZJW#Cx5VaD3*CL)Qzg2 zil!TehTi^Xi-`0^B%Lr_I9?gMPiR;uy2W|o_Xb*mkTlJNo7A9qsff3Dh#LVFrW zF*_*3)QS93k@`CyU7`C)VhjYP1id&p`nlfrM^gp_g@QobpyW`vDJpiAL3@=$DJ^Ln2Jo(FfpqT;OR1>=kbW;q;_tg$c1roDkLZ*ms01oSfTb&9SRJ zJsLOfen-2t!{D2d|Mn}=-c3Ck=!MJW8v#^F2;_z34$m8~RO3pB*}Pmoif#DR5R{SH z^SXqZQq}?o4F;>=@zMl?Wl2lvK|&0gg-hwta4KC)K8D| z(akQT7C#8kCHF z|ME|_t7JbAgQ7EI^8^axAX->6*FLsH3EbM5tw&&Nx8V2!$|iX57g!(u=FXjd6fkeE zYxpNu*T*YAzhhH`TC_X$mClZQZFveC?(RV(BStaQbHxcwO@AZ9r>C(yd+m%UWOE_u z42&$1iEYbHYn^Sf>_>eeQKq6(m0$*P{ESOkE(j>mM9cZBqCheWP6cXkb%h`Z6iR~8 zEoNTG#-y>o#kiJ0Y-;{&w@0rV!4bR?qWT$*OBfaWNnP(*R2kliIHY8LaG($f?CEX- zHtq5KTi#UlA~b`@6KPSKV@*1m>Ln+^&KKm@c^Up6bk&B#qwfv_9`$ppMMCot*6Xk! zspLF|5MXYzSGJbw0u~?U8$B)wA&`kXIoIbhU{^t^A=Rh;O+M>8;L*c+l>agSE=dF5 z$=^$d|ME$?n=K3vNDD}i!@pM$i_`ynD3CI_69|3Sb4Vc1@MtbUH-I#ih5Ek-s6&Kt z1l%v*KKAA<sd593#xF=A*JG5AC8hrTdvlEF)oF~RyS9vw+>k=&jr)+;{7SE zA0G}Me=_%vq>A4xQP-pgJl?8|ZH@Cw_U>sp`OtycwWO55e6M60mO~HEk|Z7x%{#zQ zniSM6fhy0=_+5_zHZ%o!>n%9?RXu?xO$Q^3&wpJamV( zmeW1*`if#Ss7K4jUFT&0!kQwns+M;~XEwj6;1T%EN!An$bFHqc{p+mQ82J5N7^ng# zsy{`*hl{nAuwG&i&0EQk;M-2AV4aK>rXoN0}Aj#8{o5AN@jx9^vR25Uan{?&@-)cux<&epRR{SPf~bA4~toNZ1{kKdgC-u^0XbYMB0c5>k+ z;(1Y(6voOfd3>j<;z`C5{PlH=Ve?8`;pd7mbiMe~NmgPtEwvw*!bL>|f-g-x&Yx=}+tbAWS(s(M3>J z7?NCGju2;4DUu}L+11lejso8_=y^fkPmWH(6i{^D6|)o>)!W5RcNF@e>7!8Ya|3w< z8C!CP=)}G<8E}iE7iMsKY-xtHw*=3B6QgcRXC60QIQh{DfiQti<6)UetPe5F!OLSz}flp@^GOIW9;vEf>A+7`~6ihjf6*6 z=U_6!<)J|s!W4rgL)?9CayB9*hFT0jvQJ7{&&Cv{(>Suvw-8cRIeDFL4Su~7!*Mzb zsg`}mxRYJ%Ho7pBLYm|C06*1|WOpYmX)=Ers(U4s+3d;)^w352$uj~hk+gaRHB8B*8A$}nl4+@N%4~_IJ}nJk+(#s zZB#E;%CZdnTsnIuTAR&y>W`+vu-7W#cxlT>B_ayP70Ba(_a^2_@uk~0LrG2#3cVY9BEwyYEBbM_Fes>lb zJqp`$c4!P$1jM|b$8zW=qaCB>=I`{75`M=6Dm!_fpRayrNYv&Q#`jC(LoEup7s_5m zk!iShN1C5Whg{E2U^}Y+q!V!6-_g1j0udY6dMG(~+}ya^7VwGixOax0Gr@B5RKo^S z`PDV_PAO6fO~L;>L0eTxK3vlMa%g`dg`8GNf$qiTm{ zsPHgZ>c4)tTkm-2AdwL^^deS|N_}Ry!sO*20s%N2P9h9N>z&qk9n*eDHk2Xb^YQRv zIFylYeQHDaljfhvb(Sx-`Dy8wA!J5xjJzNAtT9BEG4!RAp!~ceIe+7Lz?Et^d)gE> zEF&3#=`j(ACsgvz+6@017$LpAcBGD(MGjDNwWnF*uDx_#Ck&)f?Q(-;S0ms)gew68rc z8!z_l3lC*tkNp{C1+WQh@ApbE&NiOM)mi*!_EZ7$pNuP&afrk!>(ysx?HHd)TTJhT z&wlsGcZOlozVgi+NlE%DS)xOyPXVA>)wLBFobpxkpRd4;9dG+1Pw9!AY014$*4}AC zTX1p88Bqe^lp-};oH!pO6F}F|0t*D5;5g=3&}qt5_Y0LkMEd||>*w#Q2}#DG2xISc zl9#Gl>oS59iph|irk@18ATINhmoG=hbCsA``|>b_+mIpXvzqCAu25%5JiaVAJD>lY z;FYk1z|#_<1>eeCbsJMT+SF7rk*z31dvP*P)JdgtnumT3{!I?T!YLCGL z*2FM$3{^A{D;pQ83n5>BRlnVXXhV_OuuwUD^JhV~mTQ?P+bHPbGIDy>eJBoon&8Gp zqijq;k3FtLkGrkm7ch`=hOl$@C=E0eIdjUud=Q187m0M^hp1|6@$+y8@n$KL5|8H~ z0`7OomWfj0g7G5}#=ghs+b?8eL-mjKei@awdM%4K>!e|iG%Uw@eh;Jrm8IgTU`- z!cYM{hzS2`q{htIU9`J;!7Z0IlD<`;||cs2IBq+R8u73iqs*VmgF*(HH^ z;V)lzi3620QZ3G({*j=6cbeh6UG^z0fu5IvB3e2zVbw~oM{_kdr-%ZgGfskuV?RtzgO?<;EZmm`{L z>riQZwKrxd-h&R>)9Agk=8Q@9%TyBd4N+=PlO3MY|0>Bg=BdERK4l3I{Cl7`o(=MG zl1b3_TJ;lSnhI9=%$M`XndEJ1O)a$##*rw+Ysng~XCTqf&$p}Jj8D+U^hC+1P}MS> zoG5T&QFe{eP==Ad%_arX)GFHBKbz}G&iTQJAr=PMYR@?rqyl^9Nd;6qN)Q$qpLm0^*Ml@kp|maI+rlMpycv5H zRjSa>1rcY2>G<*o1N4kKggT5!U`77$rK35CLLA!|{(x7p_DQ_LnH8j=j6Bd+%eaO+e z_*EG@%_MThhWH5)Bc?Uv#oA8f3(}YAnFs(j&fxg&9t;A-q956OoN?2|pRJZyy{4NT z)-C)ap`U>vL(rbYUTbFePAo_RebDLq$fe529RPi);vHSK%r5xu<*Pn(Vya>_gMH$i z?bhX&Y;jXVY@m)D04UpQaX3Rnicp_&pt1IkgP~(!JrgR?e8XtRMu!8i>6Rs5rfz+r z`ns}X)4$@l10$bP!|8Ul+}bDFB{z8`606sSL|PU|v_*x)AWqdMJAMPOS1Rg9eTwOt znJm5rtz7`x_fp{xIBf&OFP~Y#_MYiLgw6VN0s|>^Er4|-?BT`Ii9F&6OB1(S zGflB@b70$sd{xGNF%PP*V#0?I+TH%KVqr6^kZxjJ&k51URZN6~Ti;RY7HbE=;cpF} z8;B-?yz8R%6w|n}3V)#C?2jSs8WmIdNxToo?EnCQsG&J9i3ySx1W4o3r_ntmh{cN@=BAuGk=flyYP zw9%ij{YDcoy=2EKqr9n-5ieVgtC`L7fb^ewV9C9v#?RW`}-ncl`haQET}J{ ze1_+b{*HEu!8=6IoT4VZM&ZBECq@nu83{e#&9{Vk9qD^I0s(wzqQ+tNGu}Ha?naOO z%prP7e?KZ&e})mk3Pn|i|DJyn@j_x=$(?R1Nt5)_NRLP(l8pTUk_YWI0dad6Dzs;G zV6;7vA&zfItqXc_ev!#YPMSe?0nZcxKm7t3#4O_#oc}u>U0B+3!vd!Q3N5Xd6M|Jz zgAXm~`80E_`0H;19Bo2+5wFg=k;4*?qJyZPGu%DQU}9~wCz5^B? zsy?1_c0s3x#o9(s%EmKhyPRW+Of?^vSeD^VPY{GqCpCfI%Eo82rHVy4jEwDD(qC(| zWT2k&`f3%3GF#4Mv`E-AYmT-ps>K|1AG*S1;<(F%Dc>zFJ+G5cP}8iX2MrW%8(JCq z5E_qI4r!c^rIT=olfI0j3m$?(BiU(O>-@44v>X?Gbr{Q>NF|f~8)rf9#ybyZ<61RH zI&uUM)fJeZ>_ueI`rh_S6fHPdo`k&XR{G$>1!*h5AH=jWAxk$$?7l!(7@#)JRQp`` zlUBn`cLroH+c#^RdirI`ZHQxNKPp;MGo6 z8sbni)ow65MwPrCVO9`1{mjHD3$t8*ZAksgR%R2NCnJRJZ_*OFan-;QgjQ6#jB;+4 zYkA@H=4NQyMZ1tJ+ld7T{eU;TT>3#!McLu4=mtOx5H zvY8y9F#xjsZt*dTBvvXp!~bS`7$DRiZv!3=CB6w)i<8`4wmz;y55Tas&vjnO_JVg; z)2$EJ)3gsawXOHh8^aXG%hmvr{}Lc4j>BmE$t#B1g#pe!wk%q)iF1j|b;XN}?7cr4 z82qq&d+2-h@Rv%6t4l>X6wh(K*}Jm&8sOU@lyRM)iY9Ns+ZAVJR{8#~Ju~BnHMN@b` z0ONi!vBH$*%dN*le*{snIL=lf=7SEo%l+s7)P2KDUK)|sy8cpH8>U#MFqAH|zGcGt zf5sophDMWf|EMndm_y*$bPSc+?@Z0O=tOGdDgOhZE`Cbr^MM7H8$;i}0!Y|g^!8q) z;!>Z&Ae{kBE8)|%p0c-}-}o7zwziXBo28u z)I>0s8aC$sP(&sP6dNn}$xTrT6lb%{=ThwQc}&r?=?$-qWF>1wI0#s}~s!UU0k4G~*mr&*QSF^bAV9w*Nv=pK{1Thg*pO0Dn@5?#JE@hQm)D3>_yN2L z%N^KzN;RY*uOqi5@gOcZJrsZny>M~`s4D-*`{CF8xA|(|?cC46I1bjt(xMi>Z3mx^ zaYqUm1yGZQBE~gd6tP4u)(7A~m6al7K|uPfYpMCrePX`Nj76+ljWH*y%>JkVKM;l;JBr`@c1>c*MNd``1;;WjyQ_6BECn zP-9%*s=}^M%pp*R!qOkPejh!g`bWx3Yei%Z=4^sv=q0VsE&lec_R>if(x?j(kPu>1 zH#QpXZjE3IH3*BSonJ(UUE+ttd@nUR2(LA0a(dVy!6-}@_NG!7chPAd>xgHtRL=Mu zZwhnO0BbrLI*L2rG3^1IP;^CTL*(}olJllauc?7~8N0R8)| z13m^g;Ap8uk&5k`z#&=d6?!~&*uzOut8`XL{V!UmvT}F{ z8z;j*sgM@BQ0FZ6Sx(_iSRkeM@PT1g`;)3RnJ7~6LWHT51g%Pn-()|D8Xq}-UUrSz*u7VFi2f&PQdl@^0+@o?f`pxVKoLk=XdD=Ed~o%AQL0_P~F zN~2)GcoRCt38RJ8tyxuP#R=a6Ui zG{=8zvrPdQ{skRpLnU1li_SR|QN*gSB(9md6XJLQ1Nd)F{f5ssc`v)&lfhEsNZ!#W z-V7iRAtquYsMxk>V5&q{Y0~&!p1eB0h-0zLpS@7#dKLzgj+58O2rpX#G}KFzwVRYk zd;MC~%>yXA)3@1bTak0`<8HEUs6&3yT&*RUZBP{DF3aWNUj@X~43k}AFvf)%AHOiF z7Baq&#$g&zF++$7b~apq-I3^OsiHvwkx39Er1D#tQM19uJL@bzn&>mrba$z0b#Jb( zL>$vdR&OnBuF~_nD43P3)bsF`mQ;5GYN`Wl=*UcvvcAyZs^Y*@>tvo9JI+N$m!3YR zt)`5Jra*#Ks(&I`OP7`@wWUt#3AO64{qQ&ayh(~AZ8dLy>V;<-Xd6Na<&uTxcJmh+ z*@-{9Jn!GvWTZ3SVLNM`kJ*`z!8@-e0mwkL!1FB3r!5vro(|YbBW|)KLY{G%P(RZ&}1HAJ>iXO+4u`s&#~sq{a$aZK>c|y4i@;# zdfcEbYZcPL=4)5QQjjw0(4cz6ZRd{=9A7`tNE}zp1{N7ha31NL*W>D8+YOk8Z6^8i9{<^_%UDz)AN%1d zyQ(Ul1vO2?NS6=Wep}9)!qAr!Sw3~c3a1gpZy$;DmNn0@OQp}_m0#|Tc>a18Z?d4! zRi}f$cqt--V~3 z+b1YTaYO9v@RmHaux;i2iQkY}QgS(-*w^3mViy+ zp|XsR2lXHN2G{BkxA<^TfY#OJvHaxQXMgz#j>xKMeOz6Xdv@4#y1r@rXx*tsucSO= zA8@$pC_r;5EySJoe4YKZ=mS>Y;tK~rQ2S&kr_qD7ua)Rdobw(^ zf~*^EqJ{C#Utz9`MLsYIR0V{eJSaRle*w1DeO)?pC~6VG3<6z9R-a$=s-6y2wy0ST z2Hb9EJj1ib{6KH)e`+aLUv*)B#@q5GkdE|ZQXpW#lRFM>=fOuL`LpMmfrmL|E1VZMQF`szbrw4v;2a)<|O-9(YFJwkGqT1 zevt&dkgUB*A2sLX602qkRk(@r_IJmC$KW5!Qp}x5RS%0}_OrnFEVIiI7d>(K-jZQB zCOp<#tl`L9b#)BzdM_ven2g%Fc*V~Rt=}X ziU7OpG&r{9{x~n-hpzz`4);~pCqHHX<&U$jA&h`zlm155n|p=?A-|yCZj>@5DQyeI`0b87}(9=jQgQ#E^<#hAcs&*6d7DF}&bU2*eNNMUzzBmvSKC^s;^k zZ}}5*a-o-5G$Fv2dYXQ(5^zn~|NfT{Y>h*f-It+A)#Hfe2nY?!6)N;Wg36h`-K9u& zX(oenPH0@T9tts?xoAiP5#Xs%`7{Itw%ARvE|08S?)B+L+10q^nzPXY7#dStl(+!> z8Swj?`2Ns$kxK_0GNUinJ0i^#Le)z>i;u^Sc74MwH>)aNIyQ~(o$u9RpHR#$x!goP z<>;bR7z8M$D?EmpV`S%;{O+RU?kX1qI}VbLDh$=_K^hSz?2*tjADB|r(?X%@ROv58 zsTsYJ6_UXLFu3ob$L*dj4}zL(&3qjOto754!JOQ@aU`^7oQ&Nj|LcPHq1tSXyMnj( zb+gFj!^vhVu5>@wNqpZ|%i(kxw}*56ztr@S?1y16znO+!-8v^C`93rj7`-M;ojW56Nd}-u?!z}f=6Y=^3SgNv_MCyB!_rt{&9RgXq>SN(pBUd9jgBMcZk2Ks|gP>`C*cpZ5H+ z(1#=^M6ion`0*wh-gH`grcj@#Pn(Sm9$q}~y4~lD6KuV07m&EWH^%Hhp4J$*I3M!7 z9L01HV!pRf=|Q^I8amWpACnnBV)=#7Z~k0GLZIoDlUcvcgE<3kEzg9UnBzd+7o-?$ z`$dkQ1qF*KARjCJygM6>{cg!L|Lw5R=g{=(S(>POy%(ZcBtvjf*RO_>>-YaQ_i@+xi$dg|URfZy#*0?r`h*B{S4qJqeoLFvQ4Fx$YTo$9h9| z`dleL%pWS~Q^;ALVU6u|$Ga%ta z={?ol<#5ms2)9}G_d5AEU0eLl)g-Juj3tCYagZWqea`rt<8yu{6(g{(h=7(lW2Tw( z=cR@)NiK70UVHXJ7i!mZl<&QW#?=BoNKRiuY#O6V2LJxSe4}FTS$Gorc*!Etx3U*7 zC32krW{tzlPi^7^M-$}UhF*1U$RIA>lya|Qa5SUi-O%b*KGZEB;3Zky%tCjf-owK4$OPz5A zY%6KXThY3i4{|2I^2U&Wyt%b%b#h^^ua%%B{ME5R@c1863+@=V zSktY9YHG&Rc{*zyslV?c!QaIgTGpE^De2jU`Q?&q(@2jH`_ z)Sw?W9wIyRj=-m7HQ&dCtB@0d#5!hRQ)4;Lt4SdD<~q$T=FZ2imj}@^wT}Kq9_c#0 zUby&Jt+NYkJPM^uRC5vlf3He+ZB0)HuEYZ5CqF}_T_W^^4Vy~B*t4HI)A0}X|c+$;vi@adK_(Lqm!Qb`IxA`n8 z%YIEJ3aT@UDg3LDg78wcSG?r`s~l^0>Q}NvfDwK^Q^CaK%Bh)7n4CQP$IO?p9x)0+*KrZh7$e96&ej zY-YG>{BV|3yXb$b+{^2{($&%N);h=R=4Q9_@igO6)a%IP@xl7#dbKS&^Vb+Mb^}el zG|p4FShkZ>z^7JE<@Xfd#B3S=8H+#$p;ZV;Nuv$h(rB9H&ta)7DEr3zU*+z}>D0rCC!z|hyx@}MBp?W<;t!~Mn9fc5?aEfTHAyF905dH&|d zh1(kbnt>$FR+sDkI_K4%7-~wYE2QwVS0VL{p8Gm=CgMxkq=4~u#2Xuqi^k0PO=2af z^)uq}d^lshLl>m`x5hp=d~-PCaC4uGjHuROzag>$o6&qrkOgpc{pkKzycU7n+6nz4O$(b6dZiVEwUwRGsmOSkCZ1PAzIB&;4qX6k5Yf% zKu$}U^8?;12QWa++=MnP^3J2nHih!#qo#nY!mVZs$YG-hFU{yk%t=k{C~W-EG1Vws z{HZa`C`_EODfQm$m>Q^;Rot%{3mv)4^qBWLPM^|$y|*fBZTaOP7njkJ?%|Y~5!j-v z`l&Rl#UZXW77=JfNAvs~^{zQO`t0dllOp{2onNzJ^z%Dk(Lwn0`zEp9ig4fN`9Z~K z-=?|WgYagtdA8q5O``K`gG$Y!1|@92MduBR*^amD?9DfpJqCOF=jP8-N~%Lr2lzy6 z6$CbmJow-L8dCPCdCxJVy|-Wdy;MkeM&Gz`$7^zVgpEloy7qK1Nkh=FqpHhaq@${=F^Dp!Q?P!TZ0k2kc*(jEl+aa( z&B~_h-GtUekX#$w2_jCX025u;g8Lj0c1xlGA<3(lfQHilLg)RA zaxDAv1alec*z>*e=dtTD_Jd=+g(oXD8x0v^?}=;2%rp$$W#09gvD4^pm6z8voGhCu znOiHEJ^yHz+Z&pa!g8TwsILW$RoW|WC@wI%(RnTUeo`xG+zc!>r8PMz>RVh|U{zey zW%l%Aafwxaf;hh%ZB9s-(hprLkL2!(Jff1eP7)#-nIa|5z-B_KA-a=z5a^#5>y<*H zrl#gxlea5?Mq0#M*xA|j`5krZUCiBO_`H*UQc+Udet`WbDiN`n$ftK$LmnL|ka19p zxm1aKAzA@2iiH39^=ms)ST7Qxn*bI7yb|oc6=6YCLzzdK6!m3g1OpPjS7oiGkDiNu zVL=(O#tNvv?plLUC7IXx#ZdLFnA039P=S7Zt-P_m?sxQn zVR*9i{WjqC7^569pzxV0S?e|?F;veD7B2WByM&OClr6@|2PN61)iJ$o`Rq4<@|x1% z-$gu&fyh5{T)Rju?1o&FWug*tK{GOHb@0>j){_4aS&k@=NyMu#3osu37^~E4LJ;k{ zo9Gn#D!C7d#C-k4*#98{j!57%)M>KH`UY@iQ-7ZRj|+}S7LS?g$jy^bR#0qdb=|>q z$Q3qZw!F;)K@KPnD=O%<`rj976`7cB>BxO;zHhnRXavg6p%gyb_B(VySWM=9hm4^u zifK3FgSf$i<*lu)Ex}17o27d7R5oq7bbs_IbZqgR!1!^wH#`1wLV=yzI4U^^EH5E2 zyLIQyd69PM#rg65MXF;gwOH4qgILx3wt)&ge&D|X!FC87c!B}f{A^UC7#<8N_>2I4xOBv2tPjt zTy|Y!bHrGT?ll#>rx$LOHIO_!BN`6Cw8i9AC!&ENqOV}%;#wbB82mlDD2j;B(4)+` z-UB^^HEBP8xVk8*Afj$(?aeW8$h_imjxEFS_itvTjM`-T6onSRC~8($m;Zd2p(8FY zhscr?$!jU#EWcU`QLP=))Q<0Os;9yuq@lPNR|)t!YYOwafm0EY$kbB3a#>!V=!&M~ zZyVrjxmrnGT}%_Tu28h0A|rC$^}#8^;{Ya1+G=KBzc%3SATcGi0(7C$a=6L+l+L_A zCd(`U(0p1STPhI>uY^vjtTmF@ba7v-e5Q{w6!H9)LT(!TY5cWHmkf?N2PbnTGI{(p zy*c?T@=X%M=1_V}Bqlw0cgJe>ub!I0@m%sz+?xx7%!=ah6b>W7*ujqguOFVy07UVp zPkl4ZSaCEWnOF_m2#@b(#|!(Dn1X^zYkSeVU2CS)*9`%m8#Sw8!zc6~!3`;qfVl}< zr#LLN@_Tend6xKKQBKw~X50Lt6mrUuCcP9J!Iy$YHIvihx#H)15{(2Veo8{!qsx)m z-%t5u0Rvp*gjQ0$u!yy7p+{Y$8g5QY zPeGap$HYcR4yW{2cpfbN*vTxaKZN$^pX>`5`(N~7e2<8M!=Rxd^yXvb85y*0@Y>u; zgjPJqzornj-|+2MwY3vqOfbfc0?!oSi@Cn_$;vFqYH;iOzy*lK#*UtV8HGON-iYQG zY)uLqBTq41QA{?LMk$%ObL34@iqXgYYFp(b)3qXPs{HM<0wQgy{j86$VqziB3u1LO z^4WG}&iGgcbN!4A1O_0tPV*|jxaSdB!R7#J3f=zRjX>%o_DPv@Mr4zf%X6KgCM;auvfB87$Nt0E^ztYQknh06Q30a2UOQP2^f+rsjn`=Gx_3CtrS2>~$^x|t>)?Jd- zqK2STn%b^zWv^^Yjcao)!Mod5YAT=hp?;sTS~$+6kN5x9oc%>I88iXrjFqvFQ(g)# z0`T}$Oy zH|xAM1YKyftj&mhEpu`Bcf1lIHuux4PH+|<-%rrS`EHAlq89yi3@vpyf>|jPZJAFK z;{%MPbD%etntNnAi)CbbG89o@mtQ(g1}-XM(U=`KBr=8^BXm(>8H{^RA zcX%5+;ujsb!tnAGLbDK0e$LJ5;N192G5+kMuEcGLY0sntjR#}kcLA3+i+qJdXtQOA z`~9iNQ3&s<+Zuv$unvW>7IfyTWh0T}xyo6X@L9mz2?e&cs;Fn^N}2k?45gs_Ng&{wkk-0Fc>% z1Xf{wx3FV^FX0ss zK{dPEQNjplRRjuGbkw!fQ2DgAh%56}oo+ggcuxpmW$?7bl(Qjy&$4`u>!o&m2;g;6 z3nCi-vI+uLYmSV!{b0u@2opQB9uHkE`P|yR@YY+4JmpiAzA!d18NMz-93-`jnC&7N|%gCk9^zuXLmVcGFj{yYh>eU%!$DBIwJW zRW&|(4m}Mic6xq!1u1rMesz5fF%HJJ`U+zF!f$2u!TiDo+WI_U~w zh^DcM2n&O>vC3;yS-Pt*GESy*#g|;k~>( zuBw4to*tK#LoUxfWGnUn_+e?by&56Q>Zl^{QJ(#X9vfs~_H!w6!RchFb`#I<_@Gw{OpT;4wV>1AVzZWof!&hqa4?-#5QTHV-Y)#WEZosqCE z198L%8wa!wmz8%Q5HZCy*@t01^I=Uy)Q)HYsXJa#w*aWD(n>I#PTKNoayKrGK#)WnA8;W zEheEc4=(0Oy3AO(##C<~k@4tC>K$XK4!ZC4zLqi3o^(n(r5Y^QawA(TH zp*O;S=?5M|%wfS99D(qc)+vi9mz4gthrSm^F{Djx_&sO3a`WY@t|hU_G0m?LuIY3t zV}SN^QE!rAY2x$Pt{?mXW}brs_%@3R3w@cv>=9ZYWfU~T3RWLK0_7^^8JWZKC>id# z`@S6;(dv)X#vA;FQE*shJ>ZUO6jb26n<6V_`yGVpYaS%FYGS#+%idgzH2+9RtFoQ5 z{mY={^u)=%!R~POuTmb64W6IT7(MKR=*9UX4cB83#I&v(XYZQwLaucoN@=f=M0_WC zwEoB2vcsr{5_J+x&;>wroOg+ssdARm>>73;o97Ynw6lES`w~1pDQF%9e*o1N3$_}$ z6lAspKYh{I^2+cwx__sz-+~be)I)CGnKWMf(R-V#|7_vOCYi0nzrKqcwI>48zy?gi zFmdc8(x$NA_I)X;HFHEhpscC#@d>57KjS(98XX8!{`p1$x9Pk27b`zI$$(xA;)vLU z1>e|D2+N_gKtZua03f+XMPkZm^&sQG)nm^yfEu*pEvjl6ufTIGQVvnHqENIOUELIP zj2m73WDUzU4gwonv%a8*ma!uK;PmLdH7ib7zc$rO)1L4UaJ!fx&K+nF$op>$ZjzRs z(?vtmpQC0!)(IQCzBuUKTt4tUk5oN6amq^9rpifjeg59YBt>l8qw?|!Ozg96gn)NFsF)cGIx5MHI$U0&|No)N@Ve&S!CVIa-S%HeO1%(WUp|WuC(vZdUe%hKi$ou)$^1=|b|9|PWFWFu0RZP@f&C|C_lPhkHQ(oE z;&@_BaEcbnKQS%Slv6<37$2CP`{R z0FXt#<8j;}g!$GE#-jnYRp7DFYH)kv(vE>u6c#daj!oRx9%85D#MMS0 z*e@uzr21rc`Hh^IX*7xir#qi{;fj^1t-ZCQrI^EoPMwv3LGRfzlI_cjqPPEB5JD9d{@p!wVD5TK-H*)mJ&(;JrSLf8qYK{Zb8 zsF5Zjti}y-Uy~!n0vR}lly$DVuD0r3H&wd^*LOlrEj3=40bMXq9Oyh$~zye&%Ao{Cj&+aF1pv+B zatAlK#KRdf9)Olg)o3NwSVR>3OQ$plZFWvtOQvt`w@%$;_{*fd0~!X^!mL0J8LNr6 zDzZ2XxtN8RUl8;2zm^FJi}^vIs1&Ycr99R#5iK5JN)Yqo)$!_V&SlmBP*aTdr185K z9*yl4m*1Pa;g(6}|2^9tx6(Il6!X&m6B!+$)Gs_fl?z!w|LJc?aozUdN8CP&W3lZ% z!5}!|xfx?mjQ{*%vBe$--sHCZ;%6-}4EFQY=%1lf5zE!kbFLG>HETs*KDrE0#O;B; z`+p`UKw;iLzjB=bZ5ahBE^pcJo(lY-m^Uc>kh+8!m=yOt8JnKNut7)1-)03c2C53hnCIl(j2mI`LDyh#}R}s|=-RTf- zNYQ&O;?}E`sEL5tikyFqA~l73A;$NS_QK?M|5|w}ep}QBY(nK%I^mY8OF#mS9Y)S@ zu9`8Zd>0K>dFvz30Jr<_GZs^lEcLYyU&XH&##FVtR||lF2Wakt9azRO8rM)(K%oL| zJ#60)a05f#Af-Se96SADi9u9gk~56Xx-_!$f=ht9j{P@3qckpf^>;9P;HL-8cusZN zrYgWB3YcS%f_TEDLlQ4-Z5?bT9KqRfUx;gcuOTnf0i%!1_#3$IEfi-80}Cx(yQ!p* zRsLdsR>?MMe~Jv;dfc(GGxtE`+fpEK!g43b4bR#!^u+u_uAbdQ~hEWM{ zQWEh}+MgNK*4)CXrYcnhDJAlXxVa@Wp!*?@kdPQa>qqaPs2|N z_f`Q>?$P_Ns30lQog)e;HFQWyNw= zXsX8$?bX4fTSKq|y%awfpKverDao|9=(oDs=eka)K;l$hF5PD(QT7ol)09_8JQeB{ zWJj(L&ePGY6}MC(d7$TB22**mejQ)?vHMp&73#_oT+J*ovL>*Pjg3zh;%gF(;N)WP zJ3E9BXwvDT&tKN=%tIn}7pK%P)cV}9_V`4FUgSfRg;u4N@D91dv;G<+CG>B+o7a@P zq1z~P5wunBiSBqv^f7^*+V&brW11ngt$tU6QR`g@`tvRy?_Jo&y*_Cq4w=AH|Fznw55X+lI>!(2h<9bo9O^-f`n(XdX z*w2n}xCvAxL{KQY@wWy%8~ijKUwQX1H@iA4ctL-@(L=J%*9p2ux3m=6`09q>TsVe=(X7hf(pT!c zXMvd8eqPM^;(1FBb45i1t<9pX&khX_PD}#0%d^x~Yt`wxZ~Lnyjj0&3k+V?l6qMkG zbNA+^v)WXqB;qVpsrMJ0_oDdzhprqVYPJ6f(v+=S8mT4 zjSE$T^CRT>*7^@wdkS(Jkv07~qM?7_0A!ZDD%{?+^P+e}mZ^?o@_RLjesU@U7gsku zvv?pr7k?K9snDJxPeBFH5t~v~q6VR#;{hs}?B@vIcojvZRa{v9IcPW~$RmzJ_8_Cu za|@qK?OBTJ`qqL&8Mh~T{q@H&?jxGsx`q$CMW?@gT%h#V_NzI2_QBZO4(F=p_vva} zthZyp??(b(?IXJ}HsOr#;3)zgq08>QQ2m7p>6Jbbl#;DeZ{}CV`@d*L&KjBjdY0&V z3@I05a1NFw_1H%=3X(+J#hTcYA2f34pG(2yj%R19oZXY zI`6@`JHwZ=Lj1qK{MD0KNKVWS_v}}cETOjlf+#5mM2HdJJn=uo8a@rBWucv3d&PQx8n(d%CVgEJq`Txi1ugFsWiQ~ zv?)dY`+>IHSZHwJ8M-; zQ4FbE9}VR&j9Ux*Upr&xCm(_RPcE+pw8R%7K_^{hAT$U>G{z;gxol=Zur~ah%r=-d z>!oEEKL-}!Bvlm$(@vqm!@e6YR#2rK*aK3X8gRX%8;ZN)X=>jFyCX;=#|r;^ zi^U&uw)ac(x;#2-<}*!FZMk>J-kGLSmeEEmDh%8ZKY|P!Aj?CVJzG8 zA19I?{`S`$hf&$F3#zz*G7R%V+^m!%6dp(^_csXAGF@~ZYZmL1WYp1Gb8od? zr9FC5)(L??`DmD?Mx10hL-z1Q(B1fv=fJOt-sMInqt{`v*VSn)^jTj&A*!Uf-p2Jt zyZ?`0M-)y)+x=51mz5qubXB10Y|qE95>KP&J@;2h0)<)x_he3YeKJ4qe1?lTmoXQV zzwJ-0U%^yu@iurfp{bM^4a!%o&+u~y=7zz=iKCPl|7hl=k0@N9I)}D=(jxBA#!wzL zu4Lb;#ZW92US^(AuFl)y#bUIcO0ZS8h<|EX2!!6bvPG?OqXMF@q%4N{rBHS8#QjJ%(szq+I+E6!p)C;qT#NlBGR5G*RNd|&&h5z^C;Y!hv(?(_$&DfG_p@>V2 zK}FS=tj|l|Q;>uYUN3xjmmqZo!Y;e-6K>jmOEe)Ce1$o~N$}^r!gRSI`UzZC!bWDX z0s;brDO{40lDxc^lg6S!q?eYKMj$Rky?=juJ%S5#LUD0p6CG_8Rn>x_-0K5sLFDA* zNI}60b&5QErk#6ZE#dN>o}Ml)&l}h?*%1hP@uiCL@>mlE1qCi$U0r$1=g;@!QZq92 zuClU*vOnRzaf2(icX;?kOG{QCe5Wzyl#1ui6PJYie0_z4gj8;%^bQV^%x7h1mw4gg z($Hi~O&QuNBF$R86Vk7JeZ*i){NGs5(Xq1r1w~k5)3sK~&K-~ySfqU2{v1A}qDs?} zK6>BRM|e3!1Sl&aA|lV9Ki^rKd}b6cSxPGNXJ_wAe_ULg{%iLycYJhDzZE6%nz#8L zAFTcQ6!LdDNk++zgQMi}b*;jkg@A3j9&c~&6dQaB!wWY;!&_R8F$iUC-(T}SB}D5_ z@~x{1iUVp}TP0PGfEzVEIXV9pCY!FWqqsetEG^}N+S=OAU${UPnK(Ewz!|%?@H)UE z=ttV4N4<$ml3R1lh?_0e$D6Jp@t5y*OjVoe$U6G_AFmE(?@pu`$Gd)dL&C&BPp?Zg zUTymF&B;$w%8kv<>1xxMj=^lvlK98lLYzv^pL2qbjOgLkfPLl^8@}isg{?Mvt}|CF zM$|0PL{>I0FOSpH9%X83S{yc(j0(prK7fqmlkz#g4)hZNq+&axc@t+g$rp zFHPgkn>TJH4eVK;Zx8$iXC4hvXrcWL0Y&| z2WEAwL@n3ooSuWj`qBQ^3Sz`laSx?A5>wJ1DtkqtFJHg1-165q@gpD4rv>YYqX&4-D<`#sx_&XGmG3!N| zCXm5+b>dR7$`&`Cx&|?qybr0MsBozR%mkvEA8E%X6y_OHmrhX9Fv*cI+}MBeE#|w( ztAkF6l@@$fNFnf-57b7ZtLW^0HO$P++$FRE{+FDb93CFtSR5)m5yQ0nxC6~dMpjT! zp;|4ZsI2^~q5_k(*8Jz>q@rS5DNpPn`=A=b*KF4}VPCkyHx=gjNf;2rnYW1Y1(tj!wm|=Vx_1 z4PQfjE%{%ZpkL3KvevmLHVc=UQ?D-CCPFA=3>&qdycc%z8@ir?N>829zA<&qd%Ehe z36Y67KlBY-RCJ}i)nCyFo1T6iBSjRQi;IhUa1(>UTo5>OLEg%E`BGFhldc)=+`Om+u6|lSa24F87zp@2 z#X~6H*C14$sp>aFdz5BmKKsV`h8Xl5(js-QSRq+$E)n?cexN$a%qo1HyDq#&qp8_xKM%KbKgb~Jd)wP_9`T@w zE!&l$2H9kj>z=5`%wAN>%FNU;c3OdFP2~GuaHoJj(V28!-vaDR_voDCaI#<$DS$neyZ)znqaXB zUTM${1hllWYFtAYr9oC^DPASrzP54FhOces{N_3Y(mKCFs`1IrA*ezrSIAdl%-mpT zV!X!1UzeDU$9^&KXeLwpz6V)uf|IQS%GyTLqxx=bn;in-Sehq$`PX%(n~3r9uHV~l zNfBiwB|45@?L(EQwIBmok)6$uqc)k6LSDr~LMMm_IX(L7%Lf0X@OIGn``Y_#FO+a= zxUzwP0eC1PfttZF>CSs&|tq&Mk7|P%~HBtS;-xDA1NxT%zMw&wAHFB4u0L=M@Izl zr$<+GX@djhyc1c zO^rCofYpg1rjPiSB)>zrG3b_a<%f^PqLW4ngI|Yp3-A+|evM**t&zc-Q%2X5@ZElb zT~g5CXbgAV-qJ;0ye_8)Qy^b{aa@@tD3ZHa-9UXrfSr_CDtT&u-yVDT`qx54Y*Z!( zMc)#4_DJSx2RUarZr!Jb#kF!OigAI`B$?AEC;5f@7rDl77F(-74f;u^2!>H*NbIoR zlSF~{Qmgq)X)T@U%^o7`u61K@sICg zeUG2u^cIB&m)vgD-GPovSw6C%j!ycE~M z#W=^pMCbp@kl|-w9HUfC5_x`iOCJ=DxwcLY<;;S%#A&AVjuru%!Y(Ui5pn{^(A0l6%Sqb^-*;G^HQlBx0*HG z*Gj6;l!mfXq4M5JgkILxJ>r=a8}wQcni)mZ5lFU-+tHkPDUTnQI0vTm!+8vZg!kTN z$CXD@KWukZKUOpFO!Sd2LbYtgZmc^;_*XZqMbU>?TegqV@@vsAmzOY{QS0}4t{kb_ z|0~Mq# z`?MCxsT6FxsKne2hw@Rya;C^0*jl`|KajDoWZcLCGFmh%gBp|PgnnvGU}2RQ1dmwX zVJ+F%Hmfx(LXNoXp6ni#u{=ZwM!&^i=zF>dcu&FE2z6khTB+-sqte2{^X&lK5>6;%~KenA^lk7nY}O&*dZR?$7#!-Jw8YvtYlpSVe6J74flGG{A*^U&^mlI7BWE$DAgn#1 zi8@dgwQykf*wSU?^XJcSo)COj*L(PI7u>h!&z}$ev#V^cvShO|3W!0vmgiB~*``d; ztARf}HVID@Dd3b42xShc$Lg%|&AS!w6Y2*YZEe{_FbY2wQ7H~w9jNHp^>M(1OW?B+ zJ$<(xsS&+D9$lVNbfWcb2@!sNR+=PQf%62&F%%`XUnnq)Ko{Ot&y)LqazX6>@$U3> zeqn>QsUB0*UP`#7H7daLdvPRf=I7;T20vP@IjmK5+1Y!)53g16F9wNgG~)-o*Pjk# z39Ff4e4(USX!GMxjNtc%fe6xX?_uTT=u`Z z%n2?xW~myMv$^2o=1c*_Iu6mmIw8>l2ScU0v?#8V&W|6)ZtB%VPZ_SRr3g1PHs!n6 za}kt(n7vzit>@!Mlagy)MRDgFHFLyZx-+|=}{(IY@RlyCLJ{6oI=|9oS!cTMxJd+F)4;B&Fey!C-_I`}Il zsW^UmPt`~@va2Ya1-s{e&=a}??_>OAM}Uf&`i??McBU@BjEn{S@u$E1e7GL&?!^Uv zPe^SD<1*0AoKG+qHjJrrCIQ zKo~TC>74)|y?5Pxg$0_2%wq%ZW7(~H-hj`s0qR=eXGUL8s;)6D*1wx3pBdWPm1?H} zv1N9wLmy7`s+GL?aLli**-dx=1cB*l`TOQ&#Em=|g%DYp;u;p-QbQ4kFyfZVwkP39 z*}MtF;=FfjLKohA>Cb?YXgP|AM%Qg^tmLZAz^ezN?1a3=b&4#{_arGFpPf3Kdtu8|d) zAC}ji)^F5}rn`Xn^g4*9o_JS>h{THu^hH^t*_g!Y>H#h!0PbjEu15&`11gw!Vtduq zVks)`Wbo!^rD5ci78)rC>L4*L3Br2-e_c`rgJO$Noz&VGmYSNHyg>E3kB`qqXJ_XU zuillVrSSZSh=>N>OeoN=w7GwYgAYe8$=TW2*_$C}XJ%MqIn=(V^p1^@|89Qy@+Ev$ zT|;A(LOBRNy?B$PJwKlnK3ZE}xB6LA!w(A4a6LtO2<}OA53HH@SE|reAVNa09c)X?TSNJc6}-rsuNo_;+j~$e zufE|Icg9d%KF?@SRoH~LgJ@0mp#U$w6z9eiUaI)>t-Oj)u%6V|jW zH(u4(k01YlFi!}P|qJud?bhxjQ6kj;hr(!-^ zjJUtHKZQV#dGS-g_AS&o$~pLpVH`ph`1j;jT52liE63^Q45BWqhj8XrmX~Y0^&~QF zZf@dBXH$sQJ+XYSA}iy%@jc|vGK+_YhegPV*N3&Bpdhv?9@D0ckFBm>;?hQH!}4$# z?)==_^Z$Nodg&)iO?_?4=+xEvcXF26XhsIA1x`9iY6=<(97S>d`@_&VVb84Juyi9v~J?Qjx|yVzY6;1@lyF@zpMabOK!Qk$KSopRGC7 z6!l{3tb859ltlY*H!c;4QUaT^k2~&BUS%4O{GxYdn3F`cSY2*RKqDE6tJ)(Z*LU`r zi(Gm;#!~_iwioCe!G@kFM2?}p(b`3AWKan?&$e}qb)*#EGd9mmNksltqH`nvAGk>2MA3wf604)&D#7;D(vhH^5x`y0XHm(cR1S+X!EG8Q4#HbX;er zA=nscsL26WCnD+C-;>G;MYX%S{*%`4!U9P@Oc)g|{m;b*M=@S_>SVF5ZOBY#YA#0O zZC$>qmU7{;^G7FV<{~g>(jH|-{jbBe8Y36_l&1JkjLaV#T}>4gRz3tx@EMDJXK$~? z|BHjK%HdDvkIopTmoiFB7hqlqBTe-6v)_3Z`|i`Unwgn~s_G-Z*|oUG5xEzz16V1j z;UGYRVfqv}Ab|%p4ge(nJJ*}RD7vxgZeV6+W{hOg74y9R7l-xL%m;D}_Yr~5O3e8D z?%JUtjvk$&79s6)wt+`S*XOY4MOV~$b8j#26gg?$YcM|T`1or(=%|b4)88*zIhMUZ z{sF?WuOa%+dnl#xp9bxPsatiypN6Oe()GBW0A`i{B5JSC>u;kX7T3c z*;%CKS2wZY^K=zlS_9ZmLHj?p-~8UJe;2d;c3v6r>D9u*)Q9dxw>;zLFD*ilO2MVy ziZE|a*9Gaaq1?7hI3s6w6C4OcT^Ux43L z=6JxC33?y}QNF(yc!Uz@#p|k@&FAQ#BwT;s7z#LiPAgl7+nDT4jaA!j(GS_2E|xCt zud7GNld2QasY}5Hd8MI_zhuanr%tV@7FkxBUTUK6T+LJdVeW23Wo`nM0l2dONUa01 zx%^!FLi7@t&NG;tqU4=%m%ugWB`l9~ui44S$Sk_!J{@d;Akfk`H({l)^L-_rLH$L? z?{^aq42-KPk`Db_Aycgj+9X28$Yd)_Hsonel~CsWj2!VG@{hN#VHe$)AN5$FNJW1g zw;Y#tUlV{m7?(7l6eORuKM!TM^@UqZ3Rj1YB_6bRy`F_ciy~;d;B07mUYe6G1&XM! zL5Xi$x$lsy7K3?H9lt`D#CHeBI4@Ugn}ScH6Cd>Lz%y9+ZFWvuFkng@=!NBXG&p7Z zV5W42n^tcFF4BLUWy2111ps<2IMlosB)k`}82 zR&Kka?dH@36C73D1@hNsI6%@Jdgpgf=@f8dKYBg^EZ|d6|NVM}KD=Xzb6KrHML!y+ z&7stdMf$FlSSZ8-Ld)OUjKkCf_?K@y!O)Ewd;bX3$k7czJY?^s#E7ppROt1`?HhXm zSV$39{0#4Es}n4ORyWK7R0aone|4yLP%~T9)y2hIqVhj%tD@!NKhDqv0e9nv1p}%V z-t9)4%-_p7@M?^5E-W(EF^P?Z$Nx{0WTxe)ci2n6wmbW8@(e{_&O9S8T3%^O1TJo_ z-N6)wJL$v7wSw@QO$Qd3T77kDGPJ6M^wV zP)-H~_!PzMwO{znAOH3RP4*4o>JC#;e(tnwR}%9+*m<7&Q70-t;(TD277mv}&&}`z zg!M}72EL&lwXCxR}rG3_(d)6<^~P{@~$lGZr~@7=3I62eG#?7AQr&4UB5z(9v`+X0wktj zO8OrRB3H5rEV3QhS9tH??c9N?z!HU@aV-1(%>px6=#a>UtuKpr$j%Fn$=7hr-Fw~v zlI_xAE#l)#*AhdgOz?4P=1OgOc7>S$(DS}?#r{%P{DyP28@IKcb*~AZnLb$C?F?*6 z;(a$KLXPT6W+-4dH1)!QNLcR@iPxmp_bKhVfy1Tor1u{m0~s&y_s18}g=cjOW{rOf zw#L|L9Wr{~PDYq!W!GQRMxRk;~#8Q@k`e~>U z_ct>`Jf~n-@|P=#27;khi|O}Tb`&(!E}xQ5r#i;wQrU&Z9BeF=4BQ~p_!K3jt99Sn zSx&=>i30Mk6YzwIf#jSp%qaEwK7Q2p51wsrswkkxRi<2j#>n?^G>JE#wr^^2DcYnU z^nG&rxpj`r-|rIIfVqc=p_;KOQ_p0iA_HaT67Hey#l6j^n1}j1ZXTt3U=#;n{ZS<% zO(FbGfXH5ReHqh+b9t5Tsgng7Et=amim~KB8_ENOIh&qA7r;li)OCqQoi$ebdu7`w63<{e_lAIj{iXQYRp`@6-`PK@I3 zv}lz}o56A_@f9oNjdpM`q|a0QLz(gr6+(@nQ{Ku!C`S@3V<}a&G~Vw<8;qw=?4)!N z*@+_!j1$!j@(><*65z*wpN}@tPo=7@+_^#2`yvIGYx%0#d6HNn-KkM-o*^){TfWu! z`O}jJ^JngSbjgrPvd)iPcfLNFU{9QUYx<{T#Z^TH$r)?g-;G&Ms-tKI)1D##YtW6s zA(_XAzoXEC;}T%!D9BOza-79;qcYE|lXLGcV?&jEFLJ3>j(swb?MrcRs5^K`tzUA{ z_|R5Mx1<2Y*ig#1qy*ql)oiE?G&+!Qka@wo4L@1D-I$TvfVChs#K!qsm1Lt zk39Ykc|rS@nNJIzApuTUdE+K5GGV75cgjB|7%ZJv!epeE@(1%FM)(J@XVtT6xLwk( zA2GxdgWdpG^jrQb+AMsD>bE0t>q8QW*`dWbpdp7`o~_dXHl#pP6Ri;&Uxw9##rCm#StW^Z3kX2U_sXFM$k!EB<-2Ss}by3A8W9tzaKFt$DH z&4w;EA~rgUu=Tm(U$oPM{AblAnl|O)cig>R=hX^{8i2a_CH4JXZ$*sUCDTJN7U{17 zy>kvbhds|b{rm|n-4)M8HaL&Ba-xoWo5wv2QVFJOe*O4a&dKvWMmzB9^)ozU#J31_ zIwk31w@_QIHQG1$2fqsNPa3mu&Ngt+?8^7bRKpEaZW@NVqRnj%T@i7FX?dgxgtHPtjj zF`~|Mp_j3#mMaMiQ+gpHff!mA1+wF}USQQVz{$E2hM9hD41R)~EJo!ccN2H1ACHm} zC@Z-LAPtvKhE^tw{_dYQcHo#&Q`xf!OOs}_GOu)fnx2UiT-37$HXOH?|Z40O_gZ&EthF+ z7|)e)dlwvM5prv51v-=yuyDljgOjv;E$gwH@UzuuhsyA0Oh)w%_LU{rlK40)#7p7n z`m^*BW!u6BSxi5ZQ5*Ezx5*&kr0?1!sy8__wGMJh3-Qz@15eY`Sa?DsE}@T0ldfnB z|J1yxGi-41ZKxAc_yN9Lhsp8LKsXKH_B!(~!xW^d;yK|CTUqutNjgT0QO3c_Nmf6d zW>KNAs6=kqCjUhQ>F^X!b`rC6B&%6hcqr!A#zK@dV5s=_^5!K=>c6f1v*1g7U?LhF zCsU(iu^osP3k)ND`--9XrU-JLFw*45kA{7Bq-LI&H=qWoJD#6-uTDIIc=J$>^rPX< zS-~<^ZTk>2=Lc%9sA3a62>_^CleY1VxcF(6hmu2Ko3Y~+`~Z#NSkOW$1CPr-?aM@_hl?Lky_&Opvjv+u1XzDfl6)d6)aP31*w@e z>3n&dK|=haPz(*9c_gr=)v{pP~(={>dx_)^$(X0Djf|r47 z+o=Sh2FWCVEW;9k_+F7+8eN%?CQkhu@R#hd)t8v+4IyVWhuyRNY*e+~j)lPgq_z=9 zO^lbH@K8`dWD-j@5v*~-5x#Wjw>e+01{OU%>kIroLry5zodLxYwrch|9i3>dq#$BB z=R?VIXGABSG!F`e3MtN>s}iC^STtp9R%S^@&J0nqjp>owv(0?q?#qDhib4g_ z^O=eL{p`#Z9=IO9B;Ll^CbYhM-_>Jl!`=b6L0H?(y+I~uPmIuw&{=dt@!+;tDzl7# zWE1}&2XiB!3`&3DZnHKnok-M#uw0%LYc7x$a#-B{E^hbpCSy>AX@;kWyYGX~5J#Bd z4a)^OPep?jM000hHv?Mg;nKz0L>zRR?I1VzGHsLpG3gDb%2obc4yooj3MfOQzP69xQyjzc#WsVVAh zhl+;)Aa>ZM{!}F4e|#WHIO0eiZ4CngzKdLcU4!?zTjiacy=K8wVdZ+`YJVsi-FBD1 zDw=!20_pCdKysP5fxcS93urSuv`0}iZuqw^YK7U1ksp?KQGBkY2ReM=*ML}le_>=e z&`}}}V<;|&BKIio;4Vp5UhuAzBU3sIAw?62eqJ*`Ms6 zVXHOm;{;opBd}Tg?0Ku)hLwVs6GUh9YRt~d_FzM}5|`WGCBV|cb1%ov*D7>i`MLUP zc+B}0s=hlX$WtBF)v|f(Al z44LWLx~VZ7BSX>S$n{XqvFVSmlaw^?#2Poc<3cN94V5Jn{N;AmW@*{|oqP!%bz`f; zPnEy4cc&C018tnAkk@g-#0QK%r*@(<%+t2#ERhM!D8KReUHeXAYYj#MS!2*GUx%@Oyx`yII}1TNJ%!FQ00W% zu?=tEBxb}ontS8LbAC3PYi%v&%&459nB(}=WGVV?h_y*UNA9u+jhCeNK{9{hJrma4 zepwnxQ+pj|Z$avIOi_~3^P4y1z2yb-ZjFzZ<05H!NbI#@lisKzAW^J>G zPY8K$JtCq6jak%i==gmWc=>QI=1&Iu;X8Ka=vx(WKBPU?_zgu4p-%Kf_T`GaDzOM(RiUohe*=&#)j^JM?9D+q@U-8>_!h0 zq}&coVyuJ`3roySp?&=rLIbdug=Zk+biT85linpP815KGT&_Po!&p6SC=L}RKq;5%1@i`gSz!mLxT!PY(9oBURJ>+s>Zw~aVR5H_R z+!g~fAFkAVKId@$Fd1=Pv{og2L4u@894*bACwq3GF4(+ha^b= zGuFuV{|j>~1W6x{}A}3s&-_LKsOHUBRA4y1U7`%M;Jn;_8-O9ucV2CY6+H z???Geo?lDZWTn)lc=+HpPIkP@TDY?cQM+Nu&xBHvbiC%wW`G<_$IdZWkq{JMsIR^42{wY_oD1VRQR&MF%hF zKoSt!$q&uRvb~tG=?syh2d|n+>n7y(o<(O>>eAOnrB-C$?YXVsjBARoseG1*XDu!* zJ?6eaw3uiChg=mYl)zN)ur*h^3akm6gr{qVAa)Km3H|8sQUBM~n94&|y%4bvBeEuM zyk67Ah;n~=Gb(>;@t!{HV4a*!W8Q9`H{F~dbSuR!o$vFl zMs&1o4R*h{Z!tMvT;nZ2IoE6E+{o{(&Z^hl{*^S91+!3KHq9+Q@m|&zo2W12$J&ljDK^gwrZPUlI>t)yC(Wy=pl~> zfj~6z3pOu&2;CFDe#v8B$H3s(lUN((+#K_|E5%azWW?R|wtzB94(!GE8U~N`=%6m3 zbbXu9QhsAsy?&6b+HxoFO>jM~M;cA)!?&B&RZGe(mI^vn+mIf-uwpL?bEo_Pma2f& z_q#<0gIdEmk^xz7766EM{|W6;pN%9O=H_(5?km@yqMrymMn<>vL9SVF{8v+xQ&?(O zlAIjhQ?WO*y=!Spg@YYCQO|$o7x!wlVjxVw4A&F<9-1<=m%+U-IAAUy$S_J%`OMJl z&7Y;A+#7-ynOvV&oX#RV+gv}zL5KoJxhErzNK`BPnA;3x7fPItISG1wlSf_7OOc=w zC)nKJOBYV?g70nM!)Ke=@J`TCel|5Xp=JDLWX^ss7$0}taO&Zsp^^I`aiL>{ZEzEL zld-c&@(z%YQn{}HE?Y_|5|>JK?@MgW{j4anTd>$Bl3k6OkDNhV0-1VBNDE^%nVR@V zgu{cHF&KEW357cY&JOt_y2+3T9D$I*>j(CaF7 zFDe_avGa>e#H2!tvgXm7y%p22z=^ zs)t-(I%S-_X?=Jqrr<{4=0Dvv=kmX!nlhb_#DrlxeunjueLn^xGN za2NG+!`KQj{XFK#-b^JN<~Jg z@VQ;SkCM$80aw`X+M<|>k8|SnHm8cOLq6r@CA8V>E8WpgVx&GLQtCGbkkzyL@!cZj znJ*Nu!xoEGNrp|35I;=5_HTLGG0hLa4c%2R*{Dpr;Z!wXiTcTRPGxrN-XV?bgJcHVM_VEjiMd)^-+FF*yKFQ~lf=}y{340vBd_1w>eAS*FJls4?zBv>d6 z*A@zz`EP3uum6mxJu`g%;g#hw5nmg>JhJ*;Gr7T17mWoa`whdwP`yKiOH_S#qNGf+ z8ap~O84fmuGg@9&c@G$#kj#OY>Y#W{eDOGGRt`5ClQx>pJuU(1!LcH zVJ2jl{ud%CPAG4)_>s?{dntc{8D{4VjzjKM5nMiZi*|PS&6!$w; z_cD}h|K@7MCiG#@CQwl82C5t4u_&(+i$*75aF8}p5rm*Azj8ZeluJ@X9DP3RL^w3EbPn3$Z@uZnV= zgY{2zbgJdBe6rEu4zK30E#=vOuc)?w*=u}EyT4!6$IBbJ9y{<1cUg-!mFt9x0DfPlnyP zF?Rh}8;&SQyUBgoODRM*Oq~4wxlDYV+`(ovouQTcVSQ<@Z%xk>wqUh7f1eu3&kvv5 zfbeYn?C->qsI?NJuX0{CT#9+r2!!!!h~uhT9wk@}J?fD}d+uAG$cl5abB&X;A7j$P z0pFESZQ2B?RtmEoIR&fZH`*j9!yaXfxWb zOsPvosP%PN$7F?^a;h|kh`ZZ??1`jYvHcmu*#`B<$v`wG*FZwtmFIPzF4%M(c@_i> zjd$=1ARDstvUFAaH+z!ok^<0GdC_LguCS#YZ5ymVnT^929C|gt9tpbG>E=lRev~3)K ztB*3-S2qSk5{JSUEP61Wr&`l}yaboZHsFHFq>W|XQtJ3Suy@V6{?N|HpFhVhcq_B= zp!IbXv3=Uf1JYqdvg0-8sj$i=$vph;jC_Bh`S>IwOx8pLiQ63FI@9=(B19*7FZgA$ zmxNNoNK_13R9Vq&s9vkMksVw?cPQ4oW?7YtA4)4GvfLVrz})C3tYDbuep%PXdGl(1 zW!v39e*+S8=<}&(bBky9~2$ZPluA2{J8XzGCMWxBNB0-g_U|Qum%j4F7HMa=cs2 zDZ}7CI;CG03yB!ZU~0w&+aKKaw=HP=B|?4*%^#Aps`yM;Kp)oEVez{`I5Ip>6U4mt z$_Du_%5ooPR+bi`T)0o3!T>d{qLvMq9Yv}^h3t{08A!mSa6K=3hD&pSk~6$?paEq_ zLh^ICPi1s^vXq-TwoAUpSNCk?u6z$3lfmw-pUzbSFo#IWCAy(iy)jjCu7??35o^i& zj`$%rWW3Is;(d%+GEXthDCOwUGf>kb(T&E~4LspZcu+3aheCaunbCf_lto|Z+dBfA zbA{?aciDnfgoY?9lhl$!3HvNs&bliw1~4=IuEw-J;0uySTj8^Quoh3j9x&+1#8=%3Xq6AMH1pZEC^iNx!!z5$#ZXVL!K za;-eEZWn#^zq5!-IxBOtdQfl!x0H>moUpmLDIHJOmUec^fgCN1MwDF|cPlTfZKJ(V< zNO!mKvD*i^;b4`;b0Sr~6X!2=fT)AT=4}nZ)UY^DIf+ri_x{tDWgj8nQ*K9EL>+c2 z-RixSFP8-FFc9wAv5&85u1Eye5wjpJJc5YUbwuyrka}4UuNQiVs-z3~@F!=wyG-;= zSjc%!ubk5YRyghc+SS*218Wlh=rhnsh=pts%d+=|3+OCn(K}EoA5Q@!A(TUwQ)S8x zFJWC4&B*vIrlh?I+dA8oisMQAckBbNc|#4KlKHFqI6p4kb@D{f61IHEy6b*NS8C5t zA5%|cFbW%O#Mwl2A54;)P;f-h-u6-ICLgg-(_=aT{sY9x(ZmN=aCU-+&rH+YKQ7Lk zUJ%$z+%)Y965F%8OGhW$hrB%4JMhZqcgvv;{Wca85WE3f=MdZT_1UM}FM(?b)-$bu z#5s;mgLr zL<4F~rUPP_>3pV@m4&wre9z`tcLgfXBaz~wY$6V@cSvlkW@-zqUd^TY5OythD0P;0 z;$1bfdi>J~b#;`I@5WHiED#rX`5+|pcb4|D=-vqG?2!3p(09ThM{O~E9$1qBU&r$h zK992d4LC{f;HqWtf+G=TsY-bM6PF0?yIVPBDB;DaJmw%k!b&%&J?T`GzG!F0pgJ4-A^$(Vf)WI0s~&I3#%Awn=~eF7X%=C&(^f1C)dJS>ak22J1% z7Y8aJ8l9j{=H%@Zh(u1oQfvcy(XpPN!*{f%zQukvV@3Qv@?}@M{|v{yetdFLznr0o z!7zfsk8?+zfsWPjO~5m_Irr_@-%O@w=gw~P9iY%su|~^)JSD;&;+Kzf{-FPDd_GW4 zMkUmu{K5%qd;fS^!t-O_=F#mdS1bvTJ3n^w$qYhRw2l|U-o7w$YS6~t*)J^_-6oN} zA4;kytAG1}TRuzLEXOWwGV;6XTi(#rinwd~Y&Ml08s$n+m-MK(u2urRBZBg&XL}?qj_h=JBtnK6B_%MYu0#<3Gt9p?gQ`EJB-Y53x*Dx0Sl;$lru|}6#+Ix zfq+J^G}=(cU< zA#&7E{^Q)tKCeFw|3&}*w?k~jQaxA`k3se;HnV9}LT2=SP=MO&!)Fs^m;ZqP=3L=0 z+xIB>B|*muK?bu^zl(ArAd~gpDRQ+5=<4f$Dy@^{-H$su!QNkGk`C1Ebr#b4y*K!- z!kG`?Xy4n(WDHE^V6#aa`Sp~_M)4*&(`^5jrD*)Y1mUF+`Jb}EF00UFSaMcceH_XX zuYX-qP@m!2AbjlmGnfE#o#>xsZA&zGfw@-Z?G>B1qmxrYBactHjn#c)cUY`4^B-Z} zl(tmD@;6wVMDTF*z-aBw^7@95)%)19)n}9QKR$r|4!gyMb0lgZ6knlNmhZN?ZsV%; zl1uMek@~&YOWHby4;-AZ?8!*eRc*XW*sgf$zKgBJY6#IOgY`A(Keggv7iM6&JStp) zQwj^CaI( zk5$o7O1yb5j+2KY&tzZHg%ls+86NfHYh;t?hO6tHTan?zB8s5;TdqKpLihzunam+o zYRmR;NWFwn{JLP81WftbvDu=|x5W_}*worUhww}Gy?06CHszjnwK`S%X&^&Up%3uU6!>Gx9SFzGFzN|37j zWtL|(n0smT)5jHE8E56s>rIlp-bWrcGJFZf$`yB}jh|O@7diNr@9fKI8|i6c_fgI#iHHk`BiL60UDxb6SLF(OiID98!UBA`n%|dta1W|gjFWOGpXCs9+lx}1e=y| z&@%#6$a7M6$181bRG`fLs`5X_4a3ww6H!7-?cN!*HWB9i(c$`6Kg*ErSTZeBc z=BB6QgZfszq~{85D*)bu%j_NNh(L~7P^21}P03u`2FvKa2n=F)2i?{Qf9u6N2>&>OdSKAORbOi|NF zo;KOpSy%X;-UN8M1VZwSldGD~GUOHUaBFR9g6%}rEhkin%nJa)-b)trSS9{8GX=0& z>#t#$kp1;%oQ{qapB}h&m?~(@96A|16+0s{R*1O6vgn}@IX~4fvAin`io0L>)8*-w z{%+tLi}F9SnwIhW#`+`1<#Q2i`hqmw@Se>Rq9Z1=20darx;};H%Dr{8w0^L}`QVon znDyXI8qsr_ZR?%UW`RwB)~1^22XVRJ2g3R+h99NYK~yNL$1cqz%y*(=;=S8=DM`Z_ zbp!_ea<^*88~e^$VdO@W_aOJ3bR5C6q#4(Fvpi`(Mj{!nJu$_c7ZTngNKG1{34_|% zfPafnYOkD+SG-boUf)2^ARXflBd*uw@S|?eyy3ZuW%+ug3Kk=}!3H~ZZ?VJ2+t%-R1pAdcnutx9exFtEs!ULgG=tCcv9T zAVzJDoO+8^{j~saEDmJ0f`tL`{Pt`OB^MWGZ_K%MMPrpU@Z|tvaf1699DfG@CN2-J z(3@B72df>0=x#XST4+Af)uPLhb}Cw2M=xQ8N_t>rN_`D6j@1_&k5XK+RMC5>emupp z_>~+D*h`7lZoaU6&#lNU1PF-aoi80xYNcw4Sh9KhpS?&>aTN=|I4oi2nMO)6 z7xL>OXOg{ITvrepwfku$g5myD6|l zN{Vc15?9pIa$|4s=(%VDz5|FeSuacu44H{64lZg;I!gA<{3L?sL@yY8?|y6ok;!J^ zQd+lEOnfx0AiGTg) z94a$S$9X71>cApNf3Wh_GZ|RZUZ6%><$nFreZKf!;@9;5XTRG2cgk590#pors^PEK zuJ1bq9Q_gJ<98KFEkOOp9gD=l6XxgrKKXq&lJ@2eNITsu8IndMAv*s7l z_O4vQ_k@gq(P<=R6#`foXVx{TQ85!N=Kw0MRp2#~plB;lYXU|zuq7ohBj@Ai{4ih2 z%`e%g;A$on6_>7Ul8C)p^_$f*6tKcf4b&bGtpf4Z<6Tt?EA!&gqdo0Zzg!?)o?mY& zWdQ78z_A8*uZY@{u84!(!joYU2S_qjyFhMuEU*7n18|73@{H>RjF0dgT2U4%>64o9 ziQ9la0JT>onBWqaXiD^y8wPA-XV=Cx0@`D<)N4=VcO+n!7vpgoEYLv2#V`_-^TEy= z1ZV)F36e18FSmBzOOo9kw<=StKpK7Du$Ijdm_otb9|1#Wx!L@U2D_ zdXSx+g^>!%Dst-a*!@{tJqP*Xd`4_NvfGH>LW>m3Wt~X)Y2ZaJ1D0Nky)L@j2fM-V z=(qQr9;owPT^8%H0}SR){91k#pjb8Qmz%t010`Gui&?I|azRry10yfVH(Es|_0%^* z=XAmEly`sxef@60YBhB&Fy3GKL;-!)7r$r*_4b`3(^o|geyOWGzsvzZxU4@ z=2O#v3io+==@ASp_YiqWWzatcKFXZ*5{4V2=>iHo>RLVO_DO(+ z&wfpfOjKChRLPiPWb!)~vJZsi6r@;#+H^E{=-BPk5#wq4Ft8U)=d;0_(kJT4u9V@3 zpSSLq8zZZrrnFguldu0=T||WpCGw_SSiYhe}JuSod}S2Y&lA8Y9~qAB_K zG^v9~ZhAlkau&!NUz6axt;Dk|VNFK&071hBEUxf=-%n1vJJ`R5UVAqLTB#lW6K46Tz2lEBKYY;uFTn-7vX7L_{;!h=D#tGOs21?jiz~>Ko z4;WQHTu_L6OO>SW1NLXb=Lxr=$EX_;(XT1(!vTspOb|(>pE(&Eb7%7vi1(Q@T8w`J zkPP@1L({iM;B6#<6P8NB;^ftU1yvoI!vEtzSY`@6$d1RZKv=DXx#0(a=e#5D3Y7FjhsJkl!=O5*4+$ie1&W=L4#%u>JPp3>eC2E_rf`n`;Dv$^@=-i6QQr5C+=Nbr6~kw#|5X{u-q02GU`f_{zb=J1h>1Fsn$tpt)^ zR#v&dvS={dN6WI)6(S9}z0b@qR&vkQgRx0KbVz9lD@drYSAC`WO2;=EoCC86uwN0z z-n!TV7z)rcu=#D#HfrDqI#S?)Y-jq}j4@v4|Hf8a3!#@=8zhKxAjOR+`;mt`|02|P3w(ng73x1B`~NRVw1|FWtRl9=-Afl z`_3<+#e1KnB?9$*2em-gHFI#7*BzWu`CJ0`2GT#L0d_5p;9FquJcb2gUc}Ypds*aJ zSU@Z>+Po$xL+EM6_~3y!q&5Y}NJ>@6rFEOvyEmXOEjd>n9E#zYc+W5f!01FR5++k% zW`9w#VEhs(2|6KePPSQFzg14-AM71xI|537A|m+?Rj9Ia6iv97$__I%1;Lx@&}M#p zOm--LNGN)viX%5546CJqf+L4sZmLKgFomxtaJ8ZL9UfAZte3PjBw{3o?=VNaRMvZw zN`U~~jM&9nY~#MTy+SmhW#L^nINPAZ6df>Wd$h|GC#nHxjklC)&`v-3nO5(AIc_7l zHv}C24hy?w-XsGZ4$5d1^X0rB;Nh2H<}@sSWS|<{yM3B~IyB&>*$EcC#3h^0!M`k1 zSz9Gh8NlteB%SB#*$lPsz(C}F0|?q}2?AaWEFkwn{*@^IvDE)Z%J@H+?SOplSXxnD z%(9(yO49=DKAigcfkrDG>vk&yrX_q5b94Q3$S;NBs8?657YBXq*Ty$7)+)CA z2K9yXW?P|7%+gPy?AE%#K-+Ko$AY5=5CkHAtj#A9*4YuQ%J#0tCJ0-+GG8h>BSuS~ z<1@alzoWHn)loV`QZq55`;Ve_Y{vZW2xZutNZcd$lbz|+>HVJlXRO?;AOb2OUKQI_ zyca}dHX7N2vO<(P;pt8!NTUHL12mzVj041@0bM>Pp)Ui)?~=1x$<;gH!oYg;qtS8} z&?N!U7#*PRD!m{RVx#CPQgd;)mH--uhK{Z*P|Z(?A{SugcuDqu4G$x5_Thr$WGWZF9?)TYUjzn5d|X?Hz)f zEnVJ-N$2Yaq2sKSk1(5DT|FWl!fMOZ51q&YjSPjqg~CQmPf>tk&mQ`yimig{4WcC# zrx>*f9TV<*grw6&u#&D=Yqy$2C8+qV3;6|m8|f;(4rhb=?tPKUdYWjg8zq0v$7i)E z&&nUDi;m2}H~)eJfQC$}qf%gLYSReqJ^edHuZ=Jt(L94S+CY}O>2(10EqnD&Jf9_@ z78+$JFndJc8(&;C+wGiu1Ji!xt|CVGq7>-Z6)%l?XOY^(}Nj$R68&-f%Tp)JTOMKL~+KNHkY z2(%T8RYqR9jliOQgN+5)*o;X_K@02Z1-iNwKGkD=EPUqlGIIh*fRbGdZ?(Q5?-6fT z4xFU^1~;5SlX3jEfHwi0QkW!($gR{(3qh}}407G~=nPuj-qN4FXh#BwMN5 z7NAvA^wX3fZU>gFItm8HIviG|v!JW`u*X)`)}<8$3%Pe%&{={0HbA!MU%9#ad)c=G z_7I@sP(9fr*prL0SkBXnCAQEqs1OmsAoUmboBrW3nyd1O#a+(|808D`^JXIh(GSgG z4)UoznrPf4+SUfkZl0e#fD5ctjGN$-^(ml>di~Tmxk~VDWEsZ*ODn)p$;id(K)4u& z5O*%fSQPizqLkBXh>1tX5($cmt>KF|HzhQ*M|8%e*g41F8xQklf( zO(2w997f;(6hl# zt9Bg6P*r#bY8|&Jn(CZvAfBRjZ}IBhrPVGq@((}cH1CU7ubYVXYosVRyFe;{112XL z_W%&=O4!Ll!8d`%k{L$ZEX4 zVbUI0VvL2U2OZG>7XKSN=gfu3?O9EXe@^mPfHVJz5jgAtDPtGB#di7LQ#m)-`d8fF zFV622{Z5^(nI5<%u*k6n@f)f<0>h>NV}?uEjj?dzF3x-x;cox)=G|-KSJWq1xPru~ zCF&_+!55Y~+|NEetXLOrJC7(1bEdXSwN_7;NQz!v#Jybw!{9Am``N(L^WhnhY#@u_ z)5Lq{m&1i1On&)pPPXp{>m;7Vfj{KlKjuU~p*hQ+(*i=DH7dt>j( zL?s3BlY!Q09r(Hn(Vr>*>`&-@xCH!qtjZ0CL_E~?(Bpu0@TfH8JF!2C)U1Hrej#*1 z(}34X_~D4Ak2drHF6OYVfuPW6+oqeS1j9pnD+`#j-oXsG+(Zlw8*}Tx0RkGz4`t@I zj&?6u=Z>)$zV>`E6UoYABYThNltZn1IWKn@5_%8x$`k-F(@We3WI?!)3Zu_qfo1Bo z!&PtuAVUXJcaA(W1wtR517Of!RP;Fyr6xQ=O*fv{{2MS6A-*3<4mQ@MZxlv4^28aE zv?Eo{kk@?GE8$YF>~0k$QuWRewRz-<1h7t6H5dXJycB zB@~a~>>t?u(RjRU*0vk1A-%Koi2iHHYY>jZ9Q8r-VI%Bm*dF==4i)v~uUHFPbg198 zf_8`l@kBwBDS2|HmrC!#Kh@mcQe|F7E!O$fL!f#h`4EPqh^9@_yGR%Lz~ju}J6uy+ zq0pIM(lA8~A}dc^WbvX>^UfL7J=IZPWpZi&_0lOcS;nM<6Alp5Ho8B0@~a5zijn)i zHkABB8)(UmLKRvh=L_%7)1b);WZkJmAI|9gvM_{=4b!9Qd;t}s`(j7yV^wD1tkAf| za2;n15ankSagdI{ph-#+u-xD~;5v|GJtTjOeSgaB{d0cpI5!-?b)SAI3pmt!(9Acd z!A(_!82573)W4{?@}XdA$30=Hl>S)=x#dpZk*DM5#0-_pic0Ta>y~8~=O35RU}omm zGc$M{f=EdVk*A201yLdHA?>W%Q3;Cp6yhL>25K#%jy4K=9Q9#z$#+x3vPWd6*vbttl@T#1&LsJ-HJ|a?z<)2QrmBVs|zzZ#8U-`;YPDVW*+;ZYTdcDKwJ=Y z0fec)EeImW&En}oFGIKK!F12(1$nfjkx1&=3p!G(2 z+j=vEN_j8krkAIeMZ8SV)rT}urFn7xHn(Ug&b4k7)8f*p9#JTR{JIY*O%P`GvaC97rZZ(=Q&!n# z^xd7)P=|)KcgWhnkc$mj#E}s1lL;gVFvtE0Le&Tq3bAi zA7Awr9Tktp!I~l$TaYRS@FG|1oRUR$hft{*wk)#iQrSmUelzEadjo1rcpXRdJVC_O z&^%G)HZVd$7P326^%9_a#`O-UCw2Nj9<(&U#VaV3TLM2#0gO)zbw34PQ|$gnEayXR zL+>jDRzRFtkLuab5rhs9Mw!Ebs-bo8Cgu^wKOi9i!AkJVgE7CAM+Q=3-}bGm86wQC z4)6@BvtNTr^Sd@Qf&YqNn8&v8w>**H6gn%Ld_Z`9`!%wZ+?!VsR8mHffPlw^>oJ%4 zQKlN|(ga+C$hO#A&Kr~5$AQENh`5GPlK9}hvRW*6g?zOV6Br|ucN7ERiN$Yr&nZV9{UI@=k@3Je~V zV|C9ljse1X;uR}%dEyn!dZwZ>uAB)~(!stJH9;ajl!`}R zKBo9xT!^)|13`s!hREr~vI;|#29<3c3(W!E)z2AGI|keVyWn#(x=OM_??)!)@DXzr zxn+4$oQzqf2g=lU;1a;4_DB{51SLcWU|(n5K#d`nHqzD0Kyypx4I)FPZ2p!@_zSUX9Ur?El(@tb{{p5S z+BANqFGWaGEP#rgXyp3{fhzf|g0X5cEhXiK2B=k<=#;fj4v%x+gQ77P{w@fS^+>T? zY(~B(F}&D-Yj)%q!AshFlJYL?_`IfI-(o-wUYG*P$6Vj;5&y&d2(UGQOx(Td;3Ul2 z!6bfT2bjYm0DjEvjg1nu?zdo<5-Vxiv%d;kCb}>7bri&Yk?dBqRs5o?XnTV1u$|hk zOLl(DYpE$X{N23I91v&@XY9w$w~}HkSnCDG#h%sWF*)4l~#)m76OUy0;>`&TG<19%tMf}nwTDFIN_!eE9xhE={vZ55M0B%1{V zb+fFKgWX zb>uM#gE1fzf#VZ7sBzD$on@bl0mNRnqT5AQ|21dPxx*zl-h=X}+lUT}vJG zO#xT~ISr)~v_r%sg}}(Y$-Sv7oIMe{>SFX8roC$zJn-o;< zRLV#Lvu}t}4x?JSz`hG5xu}TP@ON1%9=-#&*hO&%0WZMBzORSto`uEj*&3>h2bJ>M zM3XeAfQF##bAVXkeGUumWrlnE;iQ9f54e}NeU>98@#!jAAJqf7AVqij6H`5Mv9I=7 zn}FhtMDk54-2)Cr$KwXma$FvB0zx1Ph!y>K5z4gpx)E`|D~j&`2v{=l!hY&tL3Dtv z5FT?Ku>O#wOxj^qu6wJ=B;$f=s|OT9lO+tSb9}JqIQ%kx`X}C>*ZAp~syn9X^CdKHY`9^CZ_x ze!i2YbCF?eW;Au__at@>3BV$p85M;b4e{b+GJ(rv;e=j-r%-iTgmWnVW<`E65e102 z#j#2uqs+Yf^py#(q1j#O8`@;jPPw60_h5RRQe-HW0OlTyW9N z$9V93o*bCh|C&N{uE(TDzd6Kdkx51uC-&%$TwJd4(s4d}8_WI}8;_kzA#{vEcDTM= z*r!3uGLg7&H8@WdFtz(-+ZYT4HtRaJ>H*mi6{g+y<0R z6KDR4#x={!SB+snIWdVsi>gZj%M+(cK-e5nxc5+@lyg8c#3FNHk7tpK?oKf-9;O0H za^@gi`=7!kxDIJ&b z^2u_|z+He)Q@1b(-*@r+95Td%bq9T)Q|=CtMw|aT1hYo60>9kR*yitLS^PV@Qy zR#@g9q9y0Bsonsi=#4+LzdqsdhaQk;kWZ7XkXwWkLgUUJezuzRkL4q zyot5_mb}RZx|jmU2dp{|dnh;K6JliX-*l?UK4ThmEmTo+F@GR7tX>H|8jm{XsebB5 zdBJHCZ7I(a0W8pGTz5V>VvSwAUW}!^`wyZ8HCtQ2?jQhC=k9vZlS58}0snpdz2?13 zmARUGsxjR;B&k{727V8uD@SRhkqKe)-S#zrnTzzFMe(HE234uchEwKf6y`NRGPThR zymCNgZ5F{k7aV<=#55R{on5-#zY)XNUO@ft^VXb2Iw`?_|LAKvNQ1 zZr3ojPiQSMm8F}iId-&VL4_H_BQ!u(Q9)p=F=PY3$!Y)e`D`{bfV<}`H@ zGdLsPJBe%SMs+S7oZFj$BWbhj7(~lRUxBpkzSs;!$OT>n>YP$ByDA&QWXFAwCc71{ zC8=p_s?XHOcdxL7i<|w=wBo*KYWnR6<-0(K(vgPOLP4{KIvPYqlK=cw3*uv@Yplyn zYm(o8j1U0Jw|RdeZ;dt9K4=Km1%c#p5K<~D37nUv7~^PYz@lBoIRFdvlU3D;;M%xz zVFM$yyo>9u#|BV7QPVmb^?7qkEB}oS?+Y`h%(nWph@%4)swZZD+fhBY77ea$m3ab5 zIdg{=tdV6TS6cdZY>4-(`E1% zxO58%aglxAUFXK@y;J891l95v%g8yr3HT*V@sZr`=+LYaPWls_nzBrFYCdZzn_JC| zaM{A`r8BFZXAR3(G>3Wp2RTzXYK&wjGK1q;kRprp^z(ac`gK^%Iz((1u~iQE_MON> z>5GSVH8(quG=66&lo=9QA~{*ApX%WqJQL_%=nOmusiM1;Ty@c8L*q!6scABOzU2ao z`5=*Ufe^&L@oLlAq7I?qXJ1yqw-M%y{3proDE^en7=f}-A^bH<*!6G7A@o_>4mOYq z0a;Nmp3of9Sjg$@qrsnhn*DOURU@SO95=Cyj$Dz$`@O`fMw6?toju_sS390LzJN<%w=xeW z8-wMb$SN+%n%Cp5%H9j<^B*No$W-;qOrY9KUPvTUM=AVjl{BNB37~N;hz##FTP6(Y z&n1pOZe76YLN+M7OA1apQVQQ29h|n^{6ffIY9)14CJ`p+K5O`yqsN|5V?q7}d3DUD zb+t2JWB-kr=Fp%Rb~^tC5pcOexD}n^nNq6^|7cB_b~rez`GY#bx5p?PkVP!6o4DIU zUoF^F?2WWE&b^rhX`0gZ?Qr^D5jlB;@PbT|1AmQCctQHbHG4%1PK$(_SjaoW10>|*7bG}K zD){u&aiX*qEUvyZ7S3wEo*h{4=(|UeH1GLfZUm{aKf=Q_yI$dc-j_svKKW64@EHn~ z)Y&`^JT*PK(tG*!36_S`J{oyagA(}8ME1wptCdDvh9thO5m%U@$_ua>UK~$H}x>&-I@XI6r)sGw>w#?leyi0TWX4b1y6w&1GX30uu*5)<#za08sf%_SHfq{5^%ma#;i%hUDKeB-ro z>^O%JkeNs^97VL)Og>1&57&%3pq#I_nasyEtI=C)=^J<|^HP&dbx(e&pd++h_;;He zX~*Yzq|yUwnRgLpH^&K~4|ba8k-+`q&%t3WSybx7PPoIXxr^|jiOO2dg4uM5dsa0& z1sT3LklESvFFfFJ&rU?7ZM~#*5n7uqOYv}6cnoFQxko;&K-Px@#(4>SSobS%=kVRP zsdqNfo<{%@n1D#inNQ8b^7GlgfaBBSz_Q_=`^P8G@3uZW&HFf6cKCw~yboA=5eKCR z`*&9C?7X(?Tf;5gUfX(~SIBNOY2$ z>nDn-;>U43-=10xDsec9mz6_c+zF83TG?;cF6~UgdgepT>a|$NK75|X{8WWKMe5Pa zq~t>>^!%4l`BYCReLyplul7N=)ZZDa1@~Q?Yot&5)LL#waPR(orX(ey`$smMJM4ff zeRgJE$-jcp(N70S!N?(NEU7WoBwE0i7h<5Ft#e$nd9uR}Y-zmDSKD~bk{knhY;K=o z7AO-&M>TINkjjl#^J!!H5h-f(@yR~av4BC?<9exQJsf76B8HhkbU0k?VOK2KG{_gP z^Vm)n40;2&0snm|q3655zXp#LnC!IgS#Pi5?=R)RS_y*%(&h)j9e|kynyeZoxP?&& z%)mqfzUmLO5JEIwMlf$>!G%~n2A350|Mw52aJt$)bDUt5?~+rDPKyU9CX|Q>m$1n9h{UWsIG_4-aRqzBSdK zEL!lsq;BVmxgF88!(Y=Zai^V7_5^Nbwf-HDG~Sxng^Ws|{e(lLIC^)1nidicCZ~fr zXtK>cjUvo{3oixd12ED7629t&D8%vKucUff4oX7GS1kpGZ0-o~SYU^0lKlX$f5*|Jhfm5`mT0 z{yA&ZnvM93_}q4^csgJ3)}Ie4a1OqF-UC|=jRYO8XX(#qS*1=KwNE7d#2}Kj1_`+EfV)vM`KM9tBM{mzvl%G_!7chB5-o@7?~SV zU9EQme}2iF9l(Y(i!}q_x&(FgwlAg1sbg^(CS8e#6HM0jOMVZBwjIPzG62PkjV7_%h-4Fx}b$sx;?^i=1E9 zfB#-Bw%%UU&E!n-h8#9B7#KWGV1p5=Fg>vJ5xp*udNKKx^ZC?(0}i{1B8eUL^fNT+<@a(2#+(zzO#Ov@DHbzrr# zw{z&v*yE;3NRM9M>Y{Ek42mKruWpS^?sAo;F;jV_pCsqO%9+H7^5;)4LDDh4y(6b| zK#l>BPa^R9ka~K0HXTC>rVOmydFIvCqg{y4ihsBxsvKBds&=(BPa(A4k4vN|Kfz{d1=wI~#E z3fJvzOcXw_D)Z%)p-1rG*Vor#)HxC%kxLeCkawHCd@nxb=IaGmcKM;E;BgWn?f9Hx8ks_*t2Kqme`21irrHoLpK^YA@>hyU_r zxTQ;Go3w;Ls&I8hz3?CH<<`|^DL0|3QdSUzLHhA=V@(cqN@PT2(j0Qe8#cdH<3a}s z?*m*l`RIhzoy{N9(;I7>_j(q2Izz<7#b#%oCLv5yO^*&DPfq$`$Qsq&iWv*f!-WD! z?oXyCh6qvpdyqjBSrNe@%}gjZ*f+Soy%E;pg)gT|)Q5lX;&Rp6)S`x@AE}vMTB&KI z9hCR%(T=l=uL;$&T-|oY0!c|P2s0CdG9!9kn8mfz34KQ=!+A8H73RH5ue1<^PIUC) z;ejCm1=V}vUF(&jPoL&eQxCM!p>o$TlmPn_5fY1DLvZ4OCjr{I*abjUtRp-b;-%lq z-{i>V)@R5bojZ0S7J&y zJEcicvBGC67ia>^I@iRAjb4x1^H4Gtd(>%WoUmq2KFsyJ|oj3A5^dIMw!^Q!Cza! zybSfDUOi5^e|9cBrgwU37N_#cXleKN{cjx|>le1OJlwvLVq#%sM12Qzzj;lKmsS@= zg}&C}hW_0X_|`Wz$y%klo{L$#c|J?RXe13~Ij$capB}6j&s=M*{k_!?ConPT;bHQ% zMyRcy5x1$xj;cC(u74(ZGm@Pe-el(}EIu7_my-57W7OD*{r_FER2s5B&j7&PRtY!#5J{;30H6Gclf0k z=(W2~3;Vpl!#S!kk0TDV_iZ+D*-kEhNedog-Xw%NPO&xfeI-BOV~l3m4`ycr**sFG zno>!=3tbaSh`NmnLA^#}T#8b&E0F;=Pa zy5iJ_!ST@Jd3Y%sJA$~^V|VT)Vr#0dQv~`%L!GEafL9cVEy3&a%JOWz&cx{G4Sami zZdl;4xedVY+n9$vo|ACvKn;HNZK=EK69{Id`&%;c^H%@VaJ6{+Vj_?hLq72XqRhhx z|9hY{Cq^JoP!j0$*Z;!*PA?>s{I{Iy??T?#$YbzwTIjs`_Mak*=(Y&sLF21ty)DAb zF<>wqncHgcArhJY2JSEzi)0+Va**Q)!#XU{%L@!33Mnpa$S>~KZhvND`WSx;&_ckU z7)UzAw*e_JPPMaPJd$Svp}|29rQRrV4&&aId9OlDFSkF7 z?)tSj)0tb;IsOPbMK`^S2!%UfA(3l1rV%{ZkHrMk{8kZNl zOr6`h)S)DVIuwohP1X)Tj}8+NU=VKJKL(9wb_vt9VXjl>T zF~p0N$^P4%DF)Ou>gvbG8Knw7I|*~cw>Gzc+cpOhU8VxOClAun zs821!-oZJT@&#N~cyo)sw6FYH)-l$>hR6@N@FF+|)D0@0;bJ~$j7^4jkTW{JB1{Mh z4$3QFkelvDg6-eZ(h}bWq8&r{x~X|kQ6ZO!QKl=aU6yQkRF``y8(rq_=s`Fuw!4dx zkN6MN{+cLUTwFLPstP47)bMb2jkCFXc~xJVBWplRWz zB*ewl3KU)Y`Sm^?`Kd5B?v3t0xsYo0?{a|h|Kg98siGF$=EsYR*Z0LQvpamrfbybe z@GHrT;*YVZAl~k3R3FObCJJKqaxH3cQL*_JZ^CU5+1akY0~U_NME^(USBl@F@tOy@!T z^1R8sVUf6m#N5JUK;Gvx^6BpB;8nxng~`d05#A4oJ|b8DCUUtJ%UNe6(!zod0=9^W z@d;kY-3AeM2rdQg!Rf0{o?VM^X$b$?`VuWuLaLub1e&IL)YQa!dPd}g#HK~s?MOP= zw`_XoaH=pUy09M=1(B}SvnPkhpb_43MBk@^QeHmpyo=YDZtm`BCkKHq5kI$o?rgG6 z4n93PIeP8wj2M_x8miNZW*lxd(>oYN`}LTzg)5 z+17f)(zZK=yGs^B=&B}vouJptJ5J>BG6Q;Sc_y>R&X(H}AQNI_M9Tpk>fz~5`MvgV z-o&KmYr}21(A^a)SiP-cjFO-ogVu@Rce}orK<+vccxR8jiPRF5FYUE3$~YMrpGFDQ zH;8}mz}ajo7uo}RO5OMsEj3(eC*U40hE+CJj%*P`G4-YG)< zH((4<;p#iBGHd$>M}fxZooe8WsCK)Gf(3G?9?Uu`a&{l@voJ#raCgBm9Gv%;EKngS zbTAk%*yi}bY@vhvmWK+VgLU~H^v~;gG3NW?vQH92zD4+M&)gBmALw8~_A&iE*QS1m zYyqKwMtRx<*~7YKuY@753}RR+rs{1n6svtE9r>zVyk6Dx%o>}Zw=~ho@W8>6KKQ9# z@MATfA0Nkf(q2$WPjc=suSI zs8OO_6&CVosqH52DzJ+F*D5$TdJ`GbVn((3ZR`bwAVnioCv&9BUO=?-?m=&1TUlMT z1(tP}*Pwog6lyO67~ImFy>_tnP#*R#$X+QML6=KLQc0XGSG>ZHJ{O-EjDK?yf|WO!v{Wcj3wepU`{o*$ zmeBwA9qr_eefqDyo4)#P#P7ekhTF5xdr1kYv+QI}t}%0paiXR!{r;j!FqtbNUp>dx zs?a{}e+DH2si*op5@4~lxk#BN9!k-=p~+>3{8O=cmhkjYiiVnH{6(=qG9Sw34E_HM zi07a-Or5jwrh@IDVly|ugzM>~&W6wwg`m{aijhw*1hgZVPCdqIj|Lur=8rry{SlAr zWuEu8VzW}{V}WGX2x$Ju$_s%a3iV!wLVIi+VOPdSxArfXvJa(&VCapo727)yVbj;A zPu~rlDF;CG5&o$h${JXD-rb%@sdz`Klj~H8LGE`qwU>vFNf(pzJsn+SlL+fW}l;Y!t%X85-$j z*B~mxzt)|0$A)Y(8RvGKUjyN#^7bnWc&8!u<;}L`vlQ=}E(kz73d2$sI)MT)$nd** z?Next)Z>R)(ry;J{r63GpoB^${+M*3C!Z^ zrC!(Iyufq!tVHU@;h?BTzAS)w0EZcpA_{|{ zz+f^^A0teziB>K01pU27ZKK_0iZ-oEJMU~k7jpB$ck|GFCg<6gL(341-QUie$5rxuytgVKRHv1 z?z7CA&}cBiu2L)y8#4F7}qAM>TnugAlvpR)2p?A=@X?I!(3 zcpr8n!{|3!C7Xem(A=u(Qzh;F%IKusgKrF$hLiLWCiziSezB^JnB>+lsj)R^dKWFk zmszdA@K^y zclS9v%($^VQH8`HE256&hEaA z)gtP{KK$akK4r&D`Xtr93K+b%oJ*+~5kc-g=?y2TG`)95CHDI4O9whl6<650I0ZS@ zALpG*K3lG@pt5p!VkkfC5Vt%L%2^GS@??UYsB%~P;o#wddr?MlzL4Rae9cBb7}T=Y zad;JW`ha|z4~%6H(83>$N}brb<4lx3ZO^c%@)#&K6|bwRa{*1mpTq5b4hj2bz%Pq| zCBpqW^wHB#&aKBI@01dMs$_}+_K;Q_vH0W=mjDHM9W zz-fL{lmO1G;7oZ3Kf*yO3bBi=xiUYa$^4U0c93Ml(}*79c=d8-O*5~_5_a@;GiKjc z8G5^zfT{Tg?rZkqH$`Hbbabt;*d^(s_i}ePOPhV&VO#eMT^T|+t-Re;@%pB-o9cdy zRJlkQ*-?k{u11*pRxf!`wKWx2*&lyHYwfF)fCvjt#Kj{yKD_5&guy^9+d=8+XI zvGnRqP2FTjC+d#5M0-`pz18i9mO4i`Y=ECgr9Y|_x3ouJ$Hf<9#xzs)fp-*O}mD1HkIT?%+5!-$bUF3Zhm_wb$`*6s}^>{WdzC?$8EstYfIwpJsTz9{U z*lh|jFZWS4N!6=rkC_&gXcj3eFoB^MChci#9DpbN9atynaobq zth~VKLm?pZKCcqFUKx*Q5_%K3>rsw=3wm9?Wh84X$_e=MC;Z~Wh3i7Zz6)()d!g-y zl_;1W`AvDDyQpJ*#rck{>>?Z4Ev>J{6~2|~dh&_K+%{t9_Ti~=k{lG8F3QU)%2klMPssqfJy_tzU;L8(bAE$jPVy$A U(9DwK4)~{{_(Y*x?s?$<0(d!>o&W#< literal 0 HcmV?d00001 diff --git a/doc/Howto Release Signed .Net RASP.txt b/doc/old/Howto Release Signed .Net RASP.txt similarity index 98% rename from doc/Howto Release Signed .Net RASP.txt rename to doc/old/Howto Release Signed .Net RASP.txt index 2282ac60..4320c4d6 100644 --- a/doc/Howto Release Signed .Net RASP.txt +++ b/doc/old/Howto Release Signed .Net RASP.txt @@ -1,19 +1,19 @@ -Work has gone into make a signed release og RASP .Net. -However, we have the problem that the virtual build server can't reach the code Signing certificate on physical USB eToken. -Therefore, the only option so far, is release a signed version from a workstation. -These steps explain howto setup the workstation to release a signed version of RASP.Net. - -1) Add (if not already exist) to windows Enviroment, the password to the certificate (yes, the key start with '-'): - Name -DigstSignToolPassword - Password not added to SVN. - - -2) Add (if not already exist) to windows Enviroment, the key and Hash to the certificate (yes, the key start with '-'): - Name -DigstSPCThumbprint - VAlue 98642f19b787ec0386db8b52ce9e8ed4e49c - -3) Install (if not already done) SAFENET DRIVERS: https://www.trustzone.com/standard-code-signing (step 1). - -4) Find the svn revision number, and update the file './../NAnt.build.Distribute.Signed.bat', and set the correct build number (line 27). - +Work has gone into make a signed release og RASP .Net. +However, we have the problem that the virtual build server can't reach the code Signing certificate on physical USB eToken. +Therefore, the only option so far, is release a signed version from a workstation. +These steps explain howto setup the workstation to release a signed version of RASP.Net. + +1) Add (if not already exist) to windows Enviroment, the password to the certificate (yes, the key start with '-'): + Name -DigstSignToolPassword + Password not added to SVN. + + +2) Add (if not already exist) to windows Enviroment, the key and Hash to the certificate (yes, the key start with '-'): + Name -DigstSPCThumbprint + VAlue 98642f19b787ec0386db8b52ce9e8ed4e49c + +3) Install (if not already done) SAFENET DRIVERS: https://www.trustzone.com/standard-code-signing (step 1). + +4) Find the svn revision number, and update the file './../NAnt.build.Distribute.Signed.bat', and set the correct build number (line 27). + 5) Run the file './../NAnt.build.Distribute.Signed.bat'. \ No newline at end of file diff --git a/doc/old/OIOSI RASP Library for .Net Cache Overview.csv b/doc/old/OIOSI RASP Library for .Net Cache Overview.csv new file mode 100644 index 00000000..0dfec2f4 --- /dev/null +++ b/doc/old/OIOSI RASP Library for .Net Cache Overview.csv @@ -0,0 +1,15 @@ +;Cache configuration comparison;;; +;;;; +Cache name;OIORASP 1.2.3.HotFix1;OIORASP 1.3.0;OIORASP 2.0;Proposition to change +LdapCertificateLookup/CertificateCache;TimedCache - 14 days;TimedCache, 24 hours validity, each 1 hour check for expiration;TimedCache, 24 hours validity, each 1 hour check for expiration;Limit maximum number of entries by some big value to avoid OutOfMemory, use LFU cache together with timed cache +OcspLookup;TimedCache - 1 hour;TimedCache, 1 hour validity, each 10 mins check for expiration ;TimedCache, 1 hour validity, each 10 mins check for expiration ;-- // --- +UddiLookupClient.getServiceCache;TimedCache - 24 hours;TimedCache, 1 hours validity, each 10 minutes check for expiration;TimedCache, 1 hours validity, each 10 minutes check for expiration;Critical! If we do not decrease it, NO changes in public UDDI can be visible to clients during 24 hours. +UddiLookupClient.getTModelCache;TimedCache - 24 hours;TimedCache, 24 hours validity, each 1 hour check for expiration;TimedCache, 24 hours validity, each 1 hour check for expiration;Barelly used at all, at least none in TrueLink subsystem uses it. +SchematronStore;QuantityCache - 2 path entries;LFU cache (max size 20), no expiration;LFU cache (max size 20), no expiration; +CrlCache;Unlimited hashtable for each CRL url, checks for expiration each time it is accessed, updates in the same thread where it was found that it is expired;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server; +SchemaStoreCache;absent, Schema object is built each time when required;LFU cache (max size 20), no expiration;LFU cache (max size 20), no expiration; +MessageIdUnfinishedSignaturesCache;10 minutes;TimedCache, 1 hour validity, each 10 mins check for expiration ;TimedCache, 1 hour validity, each 10 mins check for expiration ; +SequenceIdUnfinishedSignaturesCache;10 minutes;TimedCache, 1 hour validity, each 10 mins check for expiration ;TimedCache, 1 hour validity, each 10 mins check for expiration ; +;;;; +;;;; +LFU: Least Frequently Used;;;; diff --git a/doc/OIOSI RASP Library for .Net Cache Overview.xlsx b/doc/old/OIOSI RASP Library for .Net Cache Overview.xlsx similarity index 100% rename from doc/OIOSI RASP Library for .Net Cache Overview.xlsx rename to doc/old/OIOSI RASP Library for .Net Cache Overview.xlsx diff --git a/doc/OIOSI RASP Library for .Net Installation Guide.docx b/doc/old/OIOSI RASP Library for .Net Installation Guide.docx similarity index 100% rename from doc/OIOSI RASP Library for .Net Installation Guide.docx rename to doc/old/OIOSI RASP Library for .Net Installation Guide.docx diff --git a/doc/OIOSI RASP Library for .Net Installation Guide.pdf b/doc/old/OIOSI RASP Library for .Net Installation Guide.pdf similarity index 100% rename from doc/OIOSI RASP Library for .Net Installation Guide.pdf rename to doc/old/OIOSI RASP Library for .Net Installation Guide.pdf diff --git a/doc/OIOSI RASP Library for .Net Release Notes.docx b/doc/old/OIOSI RASP Library for .Net Release Notes.docx similarity index 100% rename from doc/OIOSI RASP Library for .Net Release Notes.docx rename to doc/old/OIOSI RASP Library for .Net Release Notes.docx diff --git a/doc/OIOSI RASP Library for .Net Release Notes.pdf b/doc/old/OIOSI RASP Library for .Net Release Notes.pdf similarity index 100% rename from doc/OIOSI RASP Library for .Net Release Notes.pdf rename to doc/old/OIOSI RASP Library for .Net Release Notes.pdf diff --git a/doc/OIOSI RASP Library for .Net Tutorials.docx b/doc/old/OIOSI RASP Library for .Net Tutorials.docx similarity index 100% rename from doc/OIOSI RASP Library for .Net Tutorials.docx rename to doc/old/OIOSI RASP Library for .Net Tutorials.docx diff --git a/doc/OIOSI RASP Library for .Net Tutorials.pdf b/doc/old/OIOSI RASP Library for .Net Tutorials.pdf similarity index 100% rename from doc/OIOSI RASP Library for .Net Tutorials.pdf rename to doc/old/OIOSI RASP Library for .Net Tutorials.pdf diff --git a/doc/release-notes-1.3.0_HowToUpgrade.txt b/doc/old/release-notes-1.3.0_HowToUpgrade.txt similarity index 97% rename from doc/release-notes-1.3.0_HowToUpgrade.txt rename to doc/old/release-notes-1.3.0_HowToUpgrade.txt index aab31351..05f923f4 100644 --- a/doc/release-notes-1.3.0_HowToUpgrade.txt +++ b/doc/old/release-notes-1.3.0_HowToUpgrade.txt @@ -1,26 +1,25 @@ -How to upgrade project from Net 1.2.3 to version 1.3.0 - -This file should be seen as a guide for migrating own code to OIORASP library 1.3.0 -The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! - -Steps ------ - -1. Download new release from http://digitaliser.dk/group/405467/resources/type/150019 - -2. Replace your old .dll files with the new .dll and .config files - Note there exist more files in this release then in the old release - -3. Remove OcspClient2.dll and bccrypto-csharp-b02.dll from lib - Not used anymore. - -4. Update your RaspConfiguration.xml file - remember to adjust path to resources (schema + schematron files), as the path has benn changed. - -5. When a document is received though RASP OiosiMessage, a new method MessageAsString is provided to extract the document. Use this new method to take advantage of the improved processing speed, that has been implemented. - -6. Some classes/method is no longer static, and must in initialized. - -7. Log4Net har been implemented to be used by RASP .Net. Update the configuration fil log4net4Rasp.xml, to fit you needs. - -That should be it..! - -It you meet problems, that should be included in this guide, please post your comments to the following email address: - support@nemhandel.dk +How to upgrade project from Net 1.2.3 to version 1.3.0 + +This file should be seen as a guide for migrating own code to OIORASP library 1.3.0 +The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! + +Steps + +1. Download new release from http://digitaliser.dk/group/405467/resources/type/150019 + +2. Replace your old .dll files with the new .dll and .config files - Note there exist more files in this release then in the old release + +3. Remove OcspClient2.dll and bccrypto-csharp-b02.dll from lib - Not used anymore. + +4. Update your RaspConfiguration.xml file - remember to adjust path to resources (schema + schematron files), as the path has benn changed. + +5. When a document is received though RASP OiosiMessage, a new method MessageAsString is provided to extract the document. Use this new method to take advantage of the improved processing speed, that has been implemented. + +6. Some classes/method is no longer static, and must in initialized. + +7. Log4Net har been implemented to be used by RASP .Net. Update the configuration fil log4net4Rasp.xml, to fit you needs. + +That should be it..! + +It you meet problems, that should be included in this guide, please post your comments to the following email address: + support@nemhandel.dk diff --git a/doc/release-notes-2.0.0_HowToUpgrade.txt b/doc/old/release-notes-2.0.0_HowToUpgrade.txt similarity index 97% rename from doc/release-notes-2.0.0_HowToUpgrade.txt rename to doc/old/release-notes-2.0.0_HowToUpgrade.txt index 60a5da6b..21c222b9 100644 --- a/doc/release-notes-2.0.0_HowToUpgrade.txt +++ b/doc/old/release-notes-2.0.0_HowToUpgrade.txt @@ -1,21 +1,20 @@ -How to upgrade project from Net 1.3.0 to version 2.0.0 - -This file should be seen as a guide for migrating own code to OIORASP library 2.0.0 -The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! - -Steps ------ - -1. Download new release from http://digitaliser.dk/group/405467/resources/type/150019 - -2. Replace your old .dll files with the new .dll and .config files - -3. Update your RaspConfiguration.xml file - remember to: - - adjust path to resources (schema + schematron files) - - change ConfigurationSection "LdapSettings": Host has changed to crtdir.certifikat.dk - - add Oces2 root certificate in ConfigurationSection "RootCertificateCollectionConfig" - -That should be it..! - -It you meet problems, that should be included in this guide, please post your comments to the following email address: - support@nemhandel.dk +How to upgrade project from Net 1.3.0 to version 2.0.0 + +This file should be seen as a guide for migrating own code to OIORASP library 2.0.0 +The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! + +Steps + +1. Download new release from http://digitaliser.dk/group/405467/resources/type/150019 + +2. Replace your old .dll files with the new .dll and .config files + +3. Update your RaspConfiguration.xml file - remember to: + - adjust path to resources (schema + schematron files) + - change ConfigurationSection "LdapSettings": Host has changed to crtdir.certifikat.dk + - add Oces2 root certificate in ConfigurationSection "RootCertificateCollectionConfig" + +That should be it..! + +It you meet problems, that should be included in this guide, please post your comments to the following email address: + support@nemhandel.dk diff --git a/doc/release-notes-2.1.0_HowToUpgrade.txt b/doc/old/release-notes-2.1.0_HowToUpgrade.txt similarity index 96% rename from doc/release-notes-2.1.0_HowToUpgrade.txt rename to doc/old/release-notes-2.1.0_HowToUpgrade.txt index 0c0376dc..da63cd1d 100644 --- a/doc/release-notes-2.1.0_HowToUpgrade.txt +++ b/doc/old/release-notes-2.1.0_HowToUpgrade.txt @@ -1,47 +1,46 @@ -How to upgrade project from .NET 2.0.X to version 2.1.0 - -This file should be seen as a guide for migrating own code to OIORASP library 2.1.0 -The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! - -Steps ------ - -1. Download new release from https://digitaliser.dk/group/405467/resources - -2. Replace your old .dll files with the new .dll and .config files. - Please note, there are several new files (IKVM and Saxon). - Remove the 'dk.gov.oiosi.xml.dll' file (it is not used). - -3. RaspConfiguration.xml must be updated! - See RaspConfiguration-update-2.1.0.pdf - -4. Code updates: - EndpointKeyTypeCode class has been removed. Now endpoint types is treated likes strings, so replace the class with 'string'. - enum EndpointAddressTypeCode has been cleaned for unusable values (https, email, ftp and other) - EndpointAddressSMTP.cs has been deleted. - - A lot of cleanup in the (default) endpoint service WCF configuration files. - See the test instances for how the configuration files could look, for more information. - - Important updates are: -4.1 The WCF binding for lookup in NemHandelRegisteret (NHR), must be present and is now named NHR_lookup (was just call basic before). - The client endpoint can be removed (was only used to point to the binding below). - - - - - - -4.2 - The Schematron Store Cache in RaspConfiguration.xml file must be updated from - dk.gov.oiosi.common.cache.QuantityCache`2[System.String,System.Xml.Xsl.XslCompiledTransform] - to - dk.gov.oiosi.common.cache.QuantityCache`2[System.String,dk.gov.oiosi.xml.schematron.CompiledXslt] - - - -That should be it..! - - -It you meet problems, that should be included in this guide, please post your comments to the following email address: - support@nemhandel.dk +How to upgrade project from .NET 2.0.X to version 2.1.0 + +This file should be seen as a guide for migrating own code to OIORASP library 2.1.0 +The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! + +Steps + +1. Download new release from https://digitaliser.dk/group/405467/resources + +2. Replace your old .dll files with the new .dll and .config files. + Please note, there are several new files (IKVM and Saxon). + Remove the 'dk.gov.oiosi.xml.dll' file (it is not used). + +3. RaspConfiguration.xml must be updated! + See RaspConfiguration-update-2.1.0.pdf + +4. Code updates: + EndpointKeyTypeCode class has been removed. Now endpoint types is treated likes strings, so replace the class with 'string'. + enum EndpointAddressTypeCode has been cleaned for unusable values (https, email, ftp and other) + EndpointAddressSMTP.cs has been deleted. + + A lot of cleanup in the (default) endpoint service WCF configuration files. + See the test instances for how the configuration files could look, for more information. + + Important updates are: +4.1 The WCF binding for lookup in NemHandelRegisteret (NHR), must be present and is now named NHR_lookup (was just call basic before). + The client endpoint can be removed (was only used to point to the binding below). + + + + + + +4.2 + The Schematron Store Cache in RaspConfiguration.xml file must be updated from + dk.gov.oiosi.common.cache.QuantityCache`2[System.String,System.Xml.Xsl.XslCompiledTransform] + to + dk.gov.oiosi.common.cache.QuantityCache`2[System.String,dk.gov.oiosi.xml.schematron.CompiledXslt] + + + +That should be it..! + + +It you meet problems, that should be included in this guide, please post your comments to the following email address: + support@nemhandel.dk diff --git a/doc/release-notes-2.2.0_HowToUpgrade.txt b/doc/old/release-notes-2.2.0_HowToUpgrade.txt similarity index 96% rename from doc/release-notes-2.2.0_HowToUpgrade.txt rename to doc/old/release-notes-2.2.0_HowToUpgrade.txt index 87375291..804d136e 100644 --- a/doc/release-notes-2.2.0_HowToUpgrade.txt +++ b/doc/old/release-notes-2.2.0_HowToUpgrade.txt @@ -1,20 +1,19 @@ -How to upgrade project from .NET 2.1.0 to version 2.2.0 - -This file should be seen as a guide for migrating own code to OIORASP library 2.2.0 - -The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! - -Steps ------ - -1. Download new release from https://digitaliser.dk/group/405467/resources - -2. Replace your old .dll files with the new .dll and .config files. - - - -That should be it..! - - -It you meet problems, that should be included in this guide, please post your comments to the following email address: - support@nemhandel.dk +How to upgrade project from .NET 2.1.0 to version 2.2.0 + +This file should be seen as a guide for migrating own code to OIORASP library 2.2.0 + +The guide might not be 100% accurate, depending on your use of the library! Some steps might be unnecessary in your setup, and others might be as detailed as need in your setup! + +Steps + +1. Download new release from https://digitaliser.dk/group/405467/resources + +2. Replace your old .dll files with the new .dll and .config files. + + + +That should be it..! + + +It you meet problems, that should be included in this guide, please post your comments to the following email address: + support@nemhandel.dk diff --git a/doc/release-notes-CacheConfiguration.txt b/doc/old/release-notes-CacheConfiguration.txt similarity index 98% rename from doc/release-notes-CacheConfiguration.txt rename to doc/old/release-notes-CacheConfiguration.txt index 68463f26..7ae8737a 100644 --- a/doc/release-notes-CacheConfiguration.txt +++ b/doc/old/release-notes-CacheConfiguration.txt @@ -1,68 +1,68 @@ -Possibility to configure caches (new functionality from RASP version 1.3.0) - -By default, after updating OIORASP library, cache configuration is changed. See "OIOSI RASP Library for Java Cache Overview 1.3.0.xlsx" for details. -The new cache configuration settings can be seen in the default RaspConfiguration file located in /dk.gov.oiosi/src/dk.gov.oiosi.resource/RaspConfiguration.xml. - -How to change cache configuration: - -1. The cache is configurated in the ConfigurationSection element (type =CacheConfig) as demostrated below: - - - - dk.gov.oiosi.common.cache.TimedCache - dk.gov.oiosi.RaspLibrary - - - validityTimeInHours - 1 - - - frequencyInMinutes - 10 - - - - ... - - - -2. Possible nested tags inside this section are: - - CertificateCache - The certificated downloaded from LDAP - - OcspLookupCache - A ocsp validation result (if the certificate has been revoked). - - UddiServiceCache - The registration downloaded from UDDI (NemHandelsRegisteret). - - UddiTModelCache - The special TModel key, that is used i UDDI. - - SchemaCache - The build xml schema - - SchematronCache - The build schematron - - CrlLookupCache - Cache crl lists (list over the certificates, that has been revoked). - - MessageIdUnfinishedSignaturesCache - Used in RASP communication - - SequenceIdUnfinishedSignaturesCache - Used in RASP communication - - -These tags should have sub-tags: - -ImplementationNamespaceClass - class name of the cache to use -ImplementationAssembly - not used in OIORASP java, optional -CacheConfigurationCollection - list of configuration parameters, which depend on cache implementation class. - - -Detailed description: - -In OIORASP 1.3.0 there are 4 configurable cache implementations: - -1) dk.gov.oiosi.common.cache.TimedCache - contains unlimited number of cached values, which are removed from cache with some expiration time. -Parameters: -validityTimeInHours or validityTimeInMinutes - integer with number of hours or minutes during which cache entry is considered as not expired -frequencyInHours or frequencyInMinutes - integer with number of hours or minutes to check expiration state of cached values. -Default values: -1 hour validity period and 10 minutes expiration check. -By default this cache is used for certificates, OCSP revocation and UDDI requests caching. - -2) dk.gov.oiosi.common.cache.LeastFrequentlyUsedQuantityCache - limited number of cached values, no expiration, least frequently used values are removed from cache if it is overloaded. -Parameters: -maxSize - integer with maximum number of cached entries. - -3) dk.gov.oiosi.common.cache.LeastRecentlyUsedQuantityCache - similar to LeastFrequentlyUsedQuantityCache, limited number of cached values, no expiration, but least recently used values are removed from cache if it is overloaded. -Parameters: -maxSize - integer with maximum number of cached entries. - +Possibility to configure caches (new functionality from RASP version 1.3.0) + +By default, after updating OIORASP library, cache configuration is changed. See "OIOSI RASP Library for Java Cache Overview 1.3.0.xlsx" for details. +The new cache configuration settings can be seen in the default RaspConfiguration file located in /dk.gov.oiosi/src/dk.gov.oiosi.resource/RaspConfiguration.xml. + +How to change cache configuration: + +1. The cache is configurated in the ConfigurationSection element (type =CacheConfig) as demostrated below: + + + + dk.gov.oiosi.common.cache.TimedCache + dk.gov.oiosi.RaspLibrary + + + validityTimeInHours + 1 + + + frequencyInMinutes + 10 + + + + ... + + + +2. Possible nested tags inside this section are: + - CertificateCache - The certificated downloaded from LDAP + - OcspLookupCache - A ocsp validation result (if the certificate has been revoked). + - UddiServiceCache - The registration downloaded from UDDI (NemHandelsRegisteret). + - UddiTModelCache - The special TModel key, that is used i UDDI. + - SchemaCache - The build xml schema + - SchematronCache - The build schematron + - CrlLookupCache - Cache crl lists (list over the certificates, that has been revoked). + - MessageIdUnfinishedSignaturesCache - Used in RASP communication + - SequenceIdUnfinishedSignaturesCache - Used in RASP communication + + +These tags should have sub-tags: + +ImplementationNamespaceClass - class name of the cache to use +ImplementationAssembly - not used in OIORASP java, optional +CacheConfigurationCollection - list of configuration parameters, which depend on cache implementation class. + + +Detailed description: + +In OIORASP 1.3.0 there are 4 configurable cache implementations: + +1) dk.gov.oiosi.common.cache.TimedCache - contains unlimited number of cached values, which are removed from cache with some expiration time. +Parameters: +validityTimeInHours or validityTimeInMinutes - integer with number of hours or minutes during which cache entry is considered as not expired +frequencyInHours or frequencyInMinutes - integer with number of hours or minutes to check expiration state of cached values. +Default values: +1 hour validity period and 10 minutes expiration check. +By default this cache is used for certificates, OCSP revocation and UDDI requests caching. + +2) dk.gov.oiosi.common.cache.LeastFrequentlyUsedQuantityCache - limited number of cached values, no expiration, least frequently used values are removed from cache if it is overloaded. +Parameters: +maxSize - integer with maximum number of cached entries. + +3) dk.gov.oiosi.common.cache.LeastRecentlyUsedQuantityCache - similar to LeastFrequentlyUsedQuantityCache, limited number of cached values, no expiration, but least recently used values are removed from cache if it is overloaded. +Parameters: +maxSize - integer with maximum number of cached entries. + 4) dk.gov.oiosi.common.cache.ZeroCache - cache nothing, no parameters. Primarily used in debugging and development \ No newline at end of file -- GitLab From 660a290d5f000dae35ee2969cc37887758ae1348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20S=C3=B8rensen-Boll?= Date: Mon, 15 Mar 2021 16:13:28 +0100 Subject: [PATCH 2/6] Added README.adoc for better documentation availability on GitLab --- README.adoc | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 README.adoc diff --git a/README.adoc b/README.adoc new file mode 100644 index 00000000..49710c43 --- /dev/null +++ b/README.adoc @@ -0,0 +1,30 @@ +:toc: +:toc: left +:toclevels: 6 +:sectnums: +:sectnumlevels: 5 +:xrefstyle: full + +== OIOSI RASP Library for .NET + +[WARNING] +A security issue has been pointed out due to old versions of the Log4net component. +This issue requires a HotFix presented in *2.1.1 (Log4net Hotfix)*. The next stable version: *2.1.2* will have this issue adressed. + +[options="header"] +|=== +| Version | Branch | Release status | Description +| 3.0.0 | master_dev | _Ongoing development_ | +| _2.1.2_ | _master_ | _Announced_ | - Log4net component update to 2.0.12 +| 2.1.1 (Log4Net Hotfix) | master_2_1_1_hotfix | _Announced_ | +| *2.1.1 (Current)* | *master* | *released* | xref:doc/OIORASP_Library_DotNet-ReleaseNotes.adoc#rasp_2_1_1[RASP version 2.1.1] +4+| xref:doc/OIORASP_Library_DotNet-ReleaseNotes.adoc#what_is_changed[View section "What is changed" for earlier releases] +|=== + +include::doc/OIORASP_Library_DotNet-InstallationGuide.adoc[] + +include::doc/OIORASP_Library_DotNet-ReleaseNotes.adoc[] + +include::doc/OIORASP_Library_DotNet-ReleaseNotes-CacheOverview.adoc[] + +include::doc/OIORASP_Library_DotNet-Tutorials.adoc[] -- GitLab From 265e27a70e7708baa032f4bc3e5290fd99d0158d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20S=C3=B8rensen-Boll?= Date: Mon, 15 Mar 2021 16:23:19 +0100 Subject: [PATCH 3/6] Fix expectedCertificateSubjectString for unittest --- test/dk.gov.oiosi.test.unit/uddi/UddiLookupClientTest.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/dk.gov.oiosi.test.unit/uddi/UddiLookupClientTest.cs b/test/dk.gov.oiosi.test.unit/uddi/UddiLookupClientTest.cs index d6fb1c83..956e8e5e 100644 --- a/test/dk.gov.oiosi.test.unit/uddi/UddiLookupClientTest.cs +++ b/test/dk.gov.oiosi.test.unit/uddi/UddiLookupClientTest.cs @@ -87,7 +87,9 @@ namespace dk.gov.oiosi.test.integration.uddi { Assert.Greater(lookupResponses.Count, 0); - var expectedCertificateSubjectString = "OID.2.5.4.5=CVR:34051178-FID:55310689 + CN=Digst Demo Endpoint Foces2 (funktionscertifikat), O=Digitaliseringsstyrelsen // CVR:34051178, C=DK"; + var expectedCertificateSubjectString = "OID.2.5.4.5=CVR:10150817-FID:73995930 + CN=demo.nemhandel.dk_modtager_2020 (funktionscertifikat), O=Erhvervsstyrelsen // CVR:10150817, C=DK"; + //var expectedCertificateSubjectString = "OID.2.5.4.5=CVR:34051178-FID:55310689 + CN=Digst Demo Endpoint Foces2 (funktionscertifikat), O=Digitaliseringsstyrelsen // CVR:34051178, C=DK"; + var actualCertificateSubjectString = lookupResponses[0].CertificateSubjectSerialNumber.SubjectString; Assert.AreEqual(expectedCertificateSubjectString, actualCertificateSubjectString); } -- GitLab From 02e336fc2935db704fb6aedb93efb472fb48ec3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20S=C3=B8rensen-Boll?= Date: Mon, 15 Mar 2021 16:51:12 +0100 Subject: [PATCH 4/6] Ignoring failing unittest --- .../dk.gov.oiosi.test.unit/security/revocation/OcspLookupTest.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/test/dk.gov.oiosi.test.unit/security/revocation/OcspLookupTest.cs b/test/dk.gov.oiosi.test.unit/security/revocation/OcspLookupTest.cs index 52dc69a3..3a751680 100644 --- a/test/dk.gov.oiosi.test.unit/security/revocation/OcspLookupTest.cs +++ b/test/dk.gov.oiosi.test.unit/security/revocation/OcspLookupTest.cs @@ -120,6 +120,7 @@ namespace dk.gov.oiosi.test.unit.security.revocation } [Test] + [Ignore("Ignore a test")] public void LookupTestRevokedFoces2() { try -- GitLab From 4c28878082d429bbc69ed38c2f203437089344d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20S=C3=B8rensen-Boll?= Date: Mon, 15 Mar 2021 19:20:07 +0100 Subject: [PATCH 5/6] Split release notes into seperate files --- doc/OIORASP_Library_DotNet-ReleaseNotes.adoc | 191 +------------------ doc/release-notes-1.x.x.adoc | 71 +++++++ doc/release-notes-2.x.x.adoc | 119 ++++++++++++ doc/release-notes-3.0.0.adoc | 2 + 4 files changed, 194 insertions(+), 189 deletions(-) create mode 100644 doc/release-notes-1.x.x.adoc create mode 100644 doc/release-notes-2.x.x.adoc create mode 100644 doc/release-notes-3.0.0.adoc diff --git a/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc b/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc index e3b48019..90f3f0c7 100644 --- a/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc +++ b/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc @@ -54,125 +54,7 @@ In the following part of the document, some issue numbers are mentioned – thes internal numbers used by the Digitaliseringsstyrelsen (Danish Agency for Digitisation), so please ignore these as external developer. -[#rasp_2_1_1] -==== RASP version 2.1.1 -Main purposes of this release have been: - -* Make patch for NemHandel Referenceklient to avoid program stop on 2 Trust2408 root -certs in Windows cert. store. - -===== New features -_None_ - -===== Fixes -_None_ - -===== Changes -* Update CertificateLoader.GetCertificateFromStore to avoid -CertificateLoaderMultipleCertificatesFoundException() based on more than one found cert -(issue 1961). - -===== Removals -_None_ - -==== RASP version 2.1.0 -Main purposes of this release have been: -* Update code to enable PEPPOL BIS documents in Danish NemHandel. - -===== New features -* Support multiple schematron validations per document type. -* Send document, having a Sender part with other KeyType than the valid Danish receiver -KeyTypes. -* xPath parsing of values in RaspConfiguration has been updated, so it’s possible to set a -fixed value instead of an xpath – eg. string(‘EAN’). -* RaspConfiguration: It now possible to set an empty string as value for to -disable Schema validation for a single document type. -* Support schematron styling using XSLT version 2.0 (Peppol schematrons), by using IKWM -and Saxon. - -===== Fixes -* Minor memory improvement (release resource after use). - -===== Changes -* Minor restricting of internal functionality -* BouncyCastle.Crypto.dll has been updated from version 1.7 to version 1.8. -* dk.gov.oiosi.xml.dll has been removed, as it was not used. -* Add several new required libraries (IKWM and saxon) for the XSLT version 2.0 styling. - -===== Removals -* Functionality and classes that convert and KeyType to a specific Identifier implementation, -using the enum EndpointKeyTypeCode. -* Removed lesnikowskiMailProvider and some code around mail sending and receiving. -* Removed invalid and not used enum EndpointAddressTypeCode values. - -==== RASP version 2.0.2 -Main purposes of this patch release have been fixing smaller issues not related to functionality. - -===== New features -_None_ - -===== Fixes -* Spelling and divided text strings fixed. -* Minor exception error fixed in OcspConfig. -* Some invalid example files updated. - -===== Changes -* Unit tests depending on old UDDI Test setup, has been updated to depend on new NHR -Test setup. -* Schematron version 1.5 to project (2013.09.15) added to project -(http://digitaliser.dk/resource/2514884) -* Presentation style-sheets version 1.5 (2013.03.15) added to project -(http://digitaliser.dk/resource/2455502) -* dk.gov.oiosi.raspProfile.dll added to binary package. - -===== Removals -_None_ - -==== RASP version 2.0.1 -Main purposes of this patch release have been fixing a serious cache issue. - -The problem also persists in RASP version 1.3.0, but by intention, a patch is not released for RASP -1.3.0 because all NemHandel parties must upgrade to RASP 2.x.x latest June 2013. - -===== New features -_None_ - -===== Fixes -* Implementation of TimedCache had an error multiplying the cache time by 60. So a -CertificateCache with validityTimeInHours=24 cached the certificates for 60 days [1210]. - -===== Changes -_None_ - -===== Removals -_None_ - -==== RASP version 2.0.0 -Main purposes of this release have been: - -* Full support for Foces2 certificates. Foces1 is still supported in this version, BUT after -June 2013 DanID will no longer issue Foces1 certificates. Renewal of Foces1 certificates -will also not be possible after this date. - -The version number is changed to 2.0.0 to clearly indicate, that this version of RASP will not be -able to communicate with any RASP 1.x software where one of the parties communicating has -updated to Foces2. - -===== New features -_None_ -===== Fixes -* Error messages for invalid certificate (before activation or after expire) has been updated to -show certificate subject [1098]. - -===== Changes -* LDAP URL changed in RaspConfiguration.xml (/Host) to crtdir.certifikat.dk [1053]. -* RASP library identifies itself by platform and version number when making Uddi Inquiry -requests [1142]. -* Log4net library updated from version 1.2.10 to 1.2.11 [1168]. - -===== Removals -_None_ +include::release-notes-2.x.x.adoc[] ==== Cache Configuration (From version 1.3.0) Possibility to configure caches (new functionality from RASP version 1.3.0) @@ -244,76 +126,7 @@ maxSize - integer with maximum number of cached entries. 4) dk.gov.oiosi.common.cache.ZeroCache - cache nothing, no parameters. Primarily used in debugging and development -==== RASP version 1.3.0 -Main purposes of this release have been: - -* Support for oces2 certificates. This release has prepared and tested code to handle these -new certificates. It will not be possible to start testing this in the general public before -DanID later in 2012 opens the last infrastructure components. DanID will sometime in -2013 stop issuing oces1 certificates and at that time, the RASP 1.3.0 (or newer) will be -mandatory in NemHandel. It will be announced when the date is set and notification will be -given at least 6 months in advance. -* Optimize performance. Caches have been made configurable, memory consumption have -been minimized, style-sheets are now pre-compiled, code is optimized – all to optimize the -throughput of communication. - -This release is fully compatible with RASP 1.2.1 and 1.2.3 when using oces1 certificates. -The 1.3.0 release is not a patch release, due to several breaking changes. - -In the provided Rasp Configuration file a number of default values for e.g. cache sizes have been -proposed. These are only default values, and can be changes by users as needed. -It is recommended to use the provided Rasp Configuration file as starting point. Please see the -details below for configuration. - -.Default values -[format="csv", options="header", separator=";"] -|=== -Cache name;OIORASP 1.2.3.HotFix1;OIORASP 1.3.0 -LdapCertificateLookup/CertificateCache;TimedCache - 14 days;TimedCache, 24 hours validity,each 1 hour check for expiration; -OcspLookup;TimedCache - 1 hour;TimedCache, 1 hour validity,each 10 mins check for expiration; -UddiLookupClient.getServiceCache; TimedCache - 24 hours; TimedCache, 10 hours validity, each 10 minutes check for expiration; -UddiLookupClient.getTModelCache;TimedCache - 24 hours;TimedCache, 24 hours validity, each 1 hour check for expiration; -SchematronStore;QuantityCache - 2 path entries;LFU cache (max size 20), no expiration; -CrlCache; Unlimited hashtable for each CRL url, checks for expiration each time it is accessed, updates in the same thread where it was found that it is expired;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server; -SchemaStoreCache;N/A - Schema object is built each time when required;Deleted from RaspConfiguration Test and Live - -|=== -===== New features -* Oces2 certificates are now supported. OIORASP 1.3.0 is prepared for DanID to start issuing -oces2 certificates. -* Schematron validation speed has been improved. -* New internal Rasp logger that can be used to get status information from inside the RASP. -Can be replaced by another logging implementation, by updating the configuration file. -* Configurable cache and improved implementation. -* Schema and schematron validation is moved before the sending process begins. -* Update OIOSIMessage, so the receiving document can be received as a test string, instead -of an XmlDocument (much faster processing, if the document is stored in e.g. database). -* Lots of logging has been added around the code base. - -===== Fixes -* Xpath for KreditNota made absolute [367] -* Profile validation error in test-code [579] -* Code reference to .NET 3.0 stuff fixed [598] -* Enable code to allow SE as sender type [613] -* Field ServiceType always empty in UddiLookupResponse [637] -* Error in EndpointAddress corrected [644] - -===== Changes -* http://discoverybackup.uddi.ehandel.gov.dk/registry/uddi/inquiry put in as default -backup [621] -* BouncyCastle and other libraries are updated to latest version. -* December 2012 schematron files (version 1.3) put in as default files [668] -* Schema is now placed correct, and loading of included schema, is also handled correct. -* Improved samples, that show how sending and receiving should be done. -* Use revocation CRL instead of OCSP. -* Rasp Request interface has changed. -* Implemented functionalities that can test certificates validity. -* Restructuring of source code for easy reading / debugging. -* Default location for schema and schematron files have changed, to get clearer file structure -(related to how e.g. Schematron updates are released [633] - -===== Removals -* Configuration of old VANS GW adapter removed from configuration files. +include::release-notes.1.x.x.adoc[] === How to release signed .NET RASP Work has gone into make a signed release og RASP .NET. diff --git a/doc/release-notes-1.x.x.adoc b/doc/release-notes-1.x.x.adoc new file mode 100644 index 00000000..5a441aec --- /dev/null +++ b/doc/release-notes-1.x.x.adoc @@ -0,0 +1,71 @@ +[#rasp_1_3_0] +==== RASP version 1.3.0 +Main purposes of this release have been: + +* Support for oces2 certificates. This release has prepared and tested code to handle these +new certificates. It will not be possible to start testing this in the general public before +DanID later in 2012 opens the last infrastructure components. DanID will sometime in +2013 stop issuing oces1 certificates and at that time, the RASP 1.3.0 (or newer) will be +mandatory in NemHandel. It will be announced when the date is set and notification will be +given at least 6 months in advance. +* Optimize performance. Caches have been made configurable, memory consumption have +been minimized, style-sheets are now pre-compiled, code is optimized – all to optimize the +throughput of communication. + +This release is fully compatible with RASP 1.2.1 and 1.2.3 when using oces1 certificates. +The 1.3.0 release is not a patch release, due to several breaking changes. + +In the provided Rasp Configuration file a number of default values for e.g. cache sizes have been +proposed. These are only default values, and can be changes by users as needed. +It is recommended to use the provided Rasp Configuration file as starting point. Please see the +details below for configuration. + +.Default values +[format="csv", options="header", separator=";"] +|=== +Cache name;OIORASP 1.2.3.HotFix1;OIORASP 1.3.0 +LdapCertificateLookup/CertificateCache;TimedCache - 14 days;TimedCache, 24 hours validity,each 1 hour check for expiration; +OcspLookup;TimedCache - 1 hour;TimedCache, 1 hour validity,each 10 mins check for expiration; +UddiLookupClient.getServiceCache; TimedCache - 24 hours; TimedCache, 10 hours validity, each 10 minutes check for expiration; +UddiLookupClient.getTModelCache;TimedCache - 24 hours;TimedCache, 24 hours validity, each 1 hour check for expiration; +SchematronStore;QuantityCache - 2 path entries;LFU cache (max size 20), no expiration; +CrlCache; Unlimited hashtable for each CRL url, checks for expiration each time it is accessed, updates in the same thread where it was found that it is expired;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server; +SchemaStoreCache;N/A - Schema object is built each time when required;Deleted from RaspConfiguration Test and Live + +|=== +===== New features +* Oces2 certificates are now supported. OIORASP 1.3.0 is prepared for DanID to start issuing +oces2 certificates. +* Schematron validation speed has been improved. +* New internal Rasp logger that can be used to get status information from inside the RASP. +Can be replaced by another logging implementation, by updating the configuration file. +* Configurable cache and improved implementation. +* Schema and schematron validation is moved before the sending process begins. +* Update OIOSIMessage, so the receiving document can be received as a test string, instead +of an XmlDocument (much faster processing, if the document is stored in e.g. database). +* Lots of logging has been added around the code base. + +===== Fixes +* Xpath for KreditNota made absolute [367] +* Profile validation error in test-code [579] +* Code reference to .NET 3.0 stuff fixed [598] +* Enable code to allow SE as sender type [613] +* Field ServiceType always empty in UddiLookupResponse [637] +* Error in EndpointAddress corrected [644] + +===== Changes +* http://discoverybackup.uddi.ehandel.gov.dk/registry/uddi/inquiry put in as default +backup [621] +* BouncyCastle and other libraries are updated to latest version. +* December 2012 schematron files (version 1.3) put in as default files [668] +* Schema is now placed correct, and loading of included schema, is also handled correct. +* Improved samples, that show how sending and receiving should be done. +* Use revocation CRL instead of OCSP. +* Rasp Request interface has changed. +* Implemented functionalities that can test certificates validity. +* Restructuring of source code for easy reading / debugging. +* Default location for schema and schematron files have changed, to get clearer file structure +(related to how e.g. Schematron updates are released [633] + +===== Removals +* Configuration of old VANS GW adapter removed from configuration files. diff --git a/doc/release-notes-2.x.x.adoc b/doc/release-notes-2.x.x.adoc new file mode 100644 index 00000000..fb38f2b8 --- /dev/null +++ b/doc/release-notes-2.x.x.adoc @@ -0,0 +1,119 @@ +[#rasp_2_1_1] +==== RASP version 2.1.1 +Main purposes of this release have been: + +* Make patch for NemHandel Referenceklient to avoid program stop on 2 Trust2408 root +certs in Windows cert. store. + +===== New features +_None_ + +===== Fixes +_None_ + +===== Changes +* Update CertificateLoader.GetCertificateFromStore to avoid +CertificateLoaderMultipleCertificatesFoundException() based on more than one found cert +(issue 1961). + +===== Removals +_None_ + +==== RASP version 2.1.0 +Main purposes of this release have been: +* Update code to enable PEPPOL BIS documents in Danish NemHandel. + +===== New features +* Support multiple schematron validations per document type. +* Send document, having a Sender part with other KeyType than the valid Danish receiver +KeyTypes. +* xPath parsing of values in RaspConfiguration has been updated, so it’s possible to set a +fixed value instead of an xpath – eg. string(‘EAN’). +* RaspConfiguration: It now possible to set an empty string as value for to +disable Schema validation for a single document type. +* Support schematron styling using XSLT version 2.0 (Peppol schematrons), by using IKWM +and Saxon. + +===== Fixes +* Minor memory improvement (release resource after use). + +===== Changes +* Minor restricting of internal functionality +* BouncyCastle.Crypto.dll has been updated from version 1.7 to version 1.8. +* dk.gov.oiosi.xml.dll has been removed, as it was not used. +* Add several new required libraries (IKWM and saxon) for the XSLT version 2.0 styling. + +===== Removals +* Functionality and classes that convert and KeyType to a specific Identifier implementation, +using the enum EndpointKeyTypeCode. +* Removed lesnikowskiMailProvider and some code around mail sending and receiving. +* Removed invalid and not used enum EndpointAddressTypeCode values. + +==== RASP version 2.0.2 +Main purposes of this patch release have been fixing smaller issues not related to functionality. + +===== New features +_None_ + +===== Fixes +* Spelling and divided text strings fixed. +* Minor exception error fixed in OcspConfig. +* Some invalid example files updated. + +===== Changes +* Unit tests depending on old UDDI Test setup, has been updated to depend on new NHR +Test setup. +* Schematron version 1.5 to project (2013.09.15) added to project +(http://digitaliser.dk/resource/2514884) +* Presentation style-sheets version 1.5 (2013.03.15) added to project +(http://digitaliser.dk/resource/2455502) +* dk.gov.oiosi.raspProfile.dll added to binary package. + +===== Removals +_None_ + +==== RASP version 2.0.1 +Main purposes of this patch release have been fixing a serious cache issue. + +The problem also persists in RASP version 1.3.0, but by intention, a patch is not released for RASP +1.3.0 because all NemHandel parties must upgrade to RASP 2.x.x latest June 2013. + +===== New features +_None_ + +===== Fixes +* Implementation of TimedCache had an error multiplying the cache time by 60. So a +CertificateCache with validityTimeInHours=24 cached the certificates for 60 days [1210]. + +===== Changes +_None_ + +===== Removals +_None_ + +==== RASP version 2.0.0 +Main purposes of this release have been: + +* Full support for Foces2 certificates. Foces1 is still supported in this version, BUT after +June 2013 DanID will no longer issue Foces1 certificates. Renewal of Foces1 certificates +will also not be possible after this date. + +The version number is changed to 2.0.0 to clearly indicate, that this version of RASP will not be +able to communicate with any RASP 1.x software where one of the parties communicating has +updated to Foces2. + +===== New features +_None_ +===== Fixes +* Error messages for invalid certificate (before activation or after expire) has been updated to +show certificate subject [1098]. + +===== Changes +* LDAP URL changed in RaspConfiguration.xml (/Host) to crtdir.certifikat.dk [1053]. +* RASP library identifies itself by platform and version number when making Uddi Inquiry +requests [1142]. +* Log4net library updated from version 1.2.10 to 1.2.11 [1168]. + +===== Removals +_None_ diff --git a/doc/release-notes-3.0.0.adoc b/doc/release-notes-3.0.0.adoc new file mode 100644 index 00000000..3ca4959b --- /dev/null +++ b/doc/release-notes-3.0.0.adoc @@ -0,0 +1,2 @@ +[#rasp_3_0_0] +==== RASP version 3.0.0 -- GitLab From d4ced5fb262f5d21602b23e3d44665d91d739b5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kristian=20Theo=20S=C3=B8rensen-Boll?= Date: Wed, 17 Mar 2021 14:38:46 +0100 Subject: [PATCH 6/6] Revert "Split release notes into seperate files" This reverts commit 4c28878082d429bbc69ed38c2f203437089344d7 --- doc/OIORASP_Library_DotNet-ReleaseNotes.adoc | 191 ++++++++++++++++++- doc/release-notes-1.x.x.adoc | 71 ------- doc/release-notes-2.x.x.adoc | 119 ------------ doc/release-notes-3.0.0.adoc | 2 - 4 files changed, 189 insertions(+), 194 deletions(-) delete mode 100644 doc/release-notes-1.x.x.adoc delete mode 100644 doc/release-notes-2.x.x.adoc delete mode 100644 doc/release-notes-3.0.0.adoc diff --git a/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc b/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc index 90f3f0c7..e3b48019 100644 --- a/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc +++ b/doc/OIORASP_Library_DotNet-ReleaseNotes.adoc @@ -54,7 +54,125 @@ In the following part of the document, some issue numbers are mentioned – thes internal numbers used by the Digitaliseringsstyrelsen (Danish Agency for Digitisation), so please ignore these as external developer. -include::release-notes-2.x.x.adoc[] +[#rasp_2_1_1] +==== RASP version 2.1.1 +Main purposes of this release have been: + +* Make patch for NemHandel Referenceklient to avoid program stop on 2 Trust2408 root +certs in Windows cert. store. + +===== New features +_None_ + +===== Fixes +_None_ + +===== Changes +* Update CertificateLoader.GetCertificateFromStore to avoid +CertificateLoaderMultipleCertificatesFoundException() based on more than one found cert +(issue 1961). + +===== Removals +_None_ + +==== RASP version 2.1.0 +Main purposes of this release have been: +* Update code to enable PEPPOL BIS documents in Danish NemHandel. + +===== New features +* Support multiple schematron validations per document type. +* Send document, having a Sender part with other KeyType than the valid Danish receiver +KeyTypes. +* xPath parsing of values in RaspConfiguration has been updated, so it’s possible to set a +fixed value instead of an xpath – eg. string(‘EAN’). +* RaspConfiguration: It now possible to set an empty string as value for to +disable Schema validation for a single document type. +* Support schematron styling using XSLT version 2.0 (Peppol schematrons), by using IKWM +and Saxon. + +===== Fixes +* Minor memory improvement (release resource after use). + +===== Changes +* Minor restricting of internal functionality +* BouncyCastle.Crypto.dll has been updated from version 1.7 to version 1.8. +* dk.gov.oiosi.xml.dll has been removed, as it was not used. +* Add several new required libraries (IKWM and saxon) for the XSLT version 2.0 styling. + +===== Removals +* Functionality and classes that convert and KeyType to a specific Identifier implementation, +using the enum EndpointKeyTypeCode. +* Removed lesnikowskiMailProvider and some code around mail sending and receiving. +* Removed invalid and not used enum EndpointAddressTypeCode values. + +==== RASP version 2.0.2 +Main purposes of this patch release have been fixing smaller issues not related to functionality. + +===== New features +_None_ + +===== Fixes +* Spelling and divided text strings fixed. +* Minor exception error fixed in OcspConfig. +* Some invalid example files updated. + +===== Changes +* Unit tests depending on old UDDI Test setup, has been updated to depend on new NHR +Test setup. +* Schematron version 1.5 to project (2013.09.15) added to project +(http://digitaliser.dk/resource/2514884) +* Presentation style-sheets version 1.5 (2013.03.15) added to project +(http://digitaliser.dk/resource/2455502) +* dk.gov.oiosi.raspProfile.dll added to binary package. + +===== Removals +_None_ + +==== RASP version 2.0.1 +Main purposes of this patch release have been fixing a serious cache issue. + +The problem also persists in RASP version 1.3.0, but by intention, a patch is not released for RASP +1.3.0 because all NemHandel parties must upgrade to RASP 2.x.x latest June 2013. + +===== New features +_None_ + +===== Fixes +* Implementation of TimedCache had an error multiplying the cache time by 60. So a +CertificateCache with validityTimeInHours=24 cached the certificates for 60 days [1210]. + +===== Changes +_None_ + +===== Removals +_None_ + +==== RASP version 2.0.0 +Main purposes of this release have been: + +* Full support for Foces2 certificates. Foces1 is still supported in this version, BUT after +June 2013 DanID will no longer issue Foces1 certificates. Renewal of Foces1 certificates +will also not be possible after this date. + +The version number is changed to 2.0.0 to clearly indicate, that this version of RASP will not be +able to communicate with any RASP 1.x software where one of the parties communicating has +updated to Foces2. + +===== New features +_None_ +===== Fixes +* Error messages for invalid certificate (before activation or after expire) has been updated to +show certificate subject [1098]. + +===== Changes +* LDAP URL changed in RaspConfiguration.xml (/Host) to crtdir.certifikat.dk [1053]. +* RASP library identifies itself by platform and version number when making Uddi Inquiry +requests [1142]. +* Log4net library updated from version 1.2.10 to 1.2.11 [1168]. + +===== Removals +_None_ ==== Cache Configuration (From version 1.3.0) Possibility to configure caches (new functionality from RASP version 1.3.0) @@ -126,7 +244,76 @@ maxSize - integer with maximum number of cached entries. 4) dk.gov.oiosi.common.cache.ZeroCache - cache nothing, no parameters. Primarily used in debugging and development -include::release-notes.1.x.x.adoc[] +==== RASP version 1.3.0 +Main purposes of this release have been: + +* Support for oces2 certificates. This release has prepared and tested code to handle these +new certificates. It will not be possible to start testing this in the general public before +DanID later in 2012 opens the last infrastructure components. DanID will sometime in +2013 stop issuing oces1 certificates and at that time, the RASP 1.3.0 (or newer) will be +mandatory in NemHandel. It will be announced when the date is set and notification will be +given at least 6 months in advance. +* Optimize performance. Caches have been made configurable, memory consumption have +been minimized, style-sheets are now pre-compiled, code is optimized – all to optimize the +throughput of communication. + +This release is fully compatible with RASP 1.2.1 and 1.2.3 when using oces1 certificates. +The 1.3.0 release is not a patch release, due to several breaking changes. + +In the provided Rasp Configuration file a number of default values for e.g. cache sizes have been +proposed. These are only default values, and can be changes by users as needed. +It is recommended to use the provided Rasp Configuration file as starting point. Please see the +details below for configuration. + +.Default values +[format="csv", options="header", separator=";"] +|=== +Cache name;OIORASP 1.2.3.HotFix1;OIORASP 1.3.0 +LdapCertificateLookup/CertificateCache;TimedCache - 14 days;TimedCache, 24 hours validity,each 1 hour check for expiration; +OcspLookup;TimedCache - 1 hour;TimedCache, 1 hour validity,each 10 mins check for expiration; +UddiLookupClient.getServiceCache; TimedCache - 24 hours; TimedCache, 10 hours validity, each 10 minutes check for expiration; +UddiLookupClient.getTModelCache;TimedCache - 24 hours;TimedCache, 24 hours validity, each 1 hour check for expiration; +SchematronStore;QuantityCache - 2 path entries;LFU cache (max size 20), no expiration; +CrlCache; Unlimited hashtable for each CRL url, checks for expiration each time it is accessed, updates in the same thread where it was found that it is expired;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server; +SchemaStoreCache;N/A - Schema object is built each time when required;Deleted from RaspConfiguration Test and Live + +|=== +===== New features +* Oces2 certificates are now supported. OIORASP 1.3.0 is prepared for DanID to start issuing +oces2 certificates. +* Schematron validation speed has been improved. +* New internal Rasp logger that can be used to get status information from inside the RASP. +Can be replaced by another logging implementation, by updating the configuration file. +* Configurable cache and improved implementation. +* Schema and schematron validation is moved before the sending process begins. +* Update OIOSIMessage, so the receiving document can be received as a test string, instead +of an XmlDocument (much faster processing, if the document is stored in e.g. database). +* Lots of logging has been added around the code base. + +===== Fixes +* Xpath for KreditNota made absolute [367] +* Profile validation error in test-code [579] +* Code reference to .NET 3.0 stuff fixed [598] +* Enable code to allow SE as sender type [613] +* Field ServiceType always empty in UddiLookupResponse [637] +* Error in EndpointAddress corrected [644] + +===== Changes +* http://discoverybackup.uddi.ehandel.gov.dk/registry/uddi/inquiry put in as default +backup [621] +* BouncyCastle and other libraries are updated to latest version. +* December 2012 schematron files (version 1.3) put in as default files [668] +* Schema is now placed correct, and loading of included schema, is also handled correct. +* Improved samples, that show how sending and receiving should be done. +* Use revocation CRL instead of OCSP. +* Rasp Request interface has changed. +* Implemented functionalities that can test certificates validity. +* Restructuring of source code for easy reading / debugging. +* Default location for schema and schematron files have changed, to get clearer file structure +(related to how e.g. Schematron updates are released [633] + +===== Removals +* Configuration of old VANS GW adapter removed from configuration files. === How to release signed .NET RASP Work has gone into make a signed release og RASP .NET. diff --git a/doc/release-notes-1.x.x.adoc b/doc/release-notes-1.x.x.adoc deleted file mode 100644 index 5a441aec..00000000 --- a/doc/release-notes-1.x.x.adoc +++ /dev/null @@ -1,71 +0,0 @@ -[#rasp_1_3_0] -==== RASP version 1.3.0 -Main purposes of this release have been: - -* Support for oces2 certificates. This release has prepared and tested code to handle these -new certificates. It will not be possible to start testing this in the general public before -DanID later in 2012 opens the last infrastructure components. DanID will sometime in -2013 stop issuing oces1 certificates and at that time, the RASP 1.3.0 (or newer) will be -mandatory in NemHandel. It will be announced when the date is set and notification will be -given at least 6 months in advance. -* Optimize performance. Caches have been made configurable, memory consumption have -been minimized, style-sheets are now pre-compiled, code is optimized – all to optimize the -throughput of communication. - -This release is fully compatible with RASP 1.2.1 and 1.2.3 when using oces1 certificates. -The 1.3.0 release is not a patch release, due to several breaking changes. - -In the provided Rasp Configuration file a number of default values for e.g. cache sizes have been -proposed. These are only default values, and can be changes by users as needed. -It is recommended to use the provided Rasp Configuration file as starting point. Please see the -details below for configuration. - -.Default values -[format="csv", options="header", separator=";"] -|=== -Cache name;OIORASP 1.2.3.HotFix1;OIORASP 1.3.0 -LdapCertificateLookup/CertificateCache;TimedCache - 14 days;TimedCache, 24 hours validity,each 1 hour check for expiration; -OcspLookup;TimedCache - 1 hour;TimedCache, 1 hour validity,each 10 mins check for expiration; -UddiLookupClient.getServiceCache; TimedCache - 24 hours; TimedCache, 10 hours validity, each 10 minutes check for expiration; -UddiLookupClient.getTModelCache;TimedCache - 24 hours;TimedCache, 24 hours validity, each 1 hour check for expiration; -SchematronStore;QuantityCache - 2 path entries;LFU cache (max size 20), no expiration; -CrlCache; Unlimited hashtable for each CRL url, checks for expiration each time it is accessed, updates in the same thread where it was found that it is expired;LFU cache (max size 10), if failed to update - reattempt in 5 minutes by special scheduled job, which is started after each successful cache update depending on revocation next update date from CRL server; -SchemaStoreCache;N/A - Schema object is built each time when required;Deleted from RaspConfiguration Test and Live - -|=== -===== New features -* Oces2 certificates are now supported. OIORASP 1.3.0 is prepared for DanID to start issuing -oces2 certificates. -* Schematron validation speed has been improved. -* New internal Rasp logger that can be used to get status information from inside the RASP. -Can be replaced by another logging implementation, by updating the configuration file. -* Configurable cache and improved implementation. -* Schema and schematron validation is moved before the sending process begins. -* Update OIOSIMessage, so the receiving document can be received as a test string, instead -of an XmlDocument (much faster processing, if the document is stored in e.g. database). -* Lots of logging has been added around the code base. - -===== Fixes -* Xpath for KreditNota made absolute [367] -* Profile validation error in test-code [579] -* Code reference to .NET 3.0 stuff fixed [598] -* Enable code to allow SE as sender type [613] -* Field ServiceType always empty in UddiLookupResponse [637] -* Error in EndpointAddress corrected [644] - -===== Changes -* http://discoverybackup.uddi.ehandel.gov.dk/registry/uddi/inquiry put in as default -backup [621] -* BouncyCastle and other libraries are updated to latest version. -* December 2012 schematron files (version 1.3) put in as default files [668] -* Schema is now placed correct, and loading of included schema, is also handled correct. -* Improved samples, that show how sending and receiving should be done. -* Use revocation CRL instead of OCSP. -* Rasp Request interface has changed. -* Implemented functionalities that can test certificates validity. -* Restructuring of source code for easy reading / debugging. -* Default location for schema and schematron files have changed, to get clearer file structure -(related to how e.g. Schematron updates are released [633] - -===== Removals -* Configuration of old VANS GW adapter removed from configuration files. diff --git a/doc/release-notes-2.x.x.adoc b/doc/release-notes-2.x.x.adoc deleted file mode 100644 index fb38f2b8..00000000 --- a/doc/release-notes-2.x.x.adoc +++ /dev/null @@ -1,119 +0,0 @@ -[#rasp_2_1_1] -==== RASP version 2.1.1 -Main purposes of this release have been: - -* Make patch for NemHandel Referenceklient to avoid program stop on 2 Trust2408 root -certs in Windows cert. store. - -===== New features -_None_ - -===== Fixes -_None_ - -===== Changes -* Update CertificateLoader.GetCertificateFromStore to avoid -CertificateLoaderMultipleCertificatesFoundException() based on more than one found cert -(issue 1961). - -===== Removals -_None_ - -==== RASP version 2.1.0 -Main purposes of this release have been: -* Update code to enable PEPPOL BIS documents in Danish NemHandel. - -===== New features -* Support multiple schematron validations per document type. -* Send document, having a Sender part with other KeyType than the valid Danish receiver -KeyTypes. -* xPath parsing of values in RaspConfiguration has been updated, so it’s possible to set a -fixed value instead of an xpath – eg. string(‘EAN’). -* RaspConfiguration: It now possible to set an empty string as value for to -disable Schema validation for a single document type. -* Support schematron styling using XSLT version 2.0 (Peppol schematrons), by using IKWM -and Saxon. - -===== Fixes -* Minor memory improvement (release resource after use). - -===== Changes -* Minor restricting of internal functionality -* BouncyCastle.Crypto.dll has been updated from version 1.7 to version 1.8. -* dk.gov.oiosi.xml.dll has been removed, as it was not used. -* Add several new required libraries (IKWM and saxon) for the XSLT version 2.0 styling. - -===== Removals -* Functionality and classes that convert and KeyType to a specific Identifier implementation, -using the enum EndpointKeyTypeCode. -* Removed lesnikowskiMailProvider and some code around mail sending and receiving. -* Removed invalid and not used enum EndpointAddressTypeCode values. - -==== RASP version 2.0.2 -Main purposes of this patch release have been fixing smaller issues not related to functionality. - -===== New features -_None_ - -===== Fixes -* Spelling and divided text strings fixed. -* Minor exception error fixed in OcspConfig. -* Some invalid example files updated. - -===== Changes -* Unit tests depending on old UDDI Test setup, has been updated to depend on new NHR -Test setup. -* Schematron version 1.5 to project (2013.09.15) added to project -(http://digitaliser.dk/resource/2514884) -* Presentation style-sheets version 1.5 (2013.03.15) added to project -(http://digitaliser.dk/resource/2455502) -* dk.gov.oiosi.raspProfile.dll added to binary package. - -===== Removals -_None_ - -==== RASP version 2.0.1 -Main purposes of this patch release have been fixing a serious cache issue. - -The problem also persists in RASP version 1.3.0, but by intention, a patch is not released for RASP -1.3.0 because all NemHandel parties must upgrade to RASP 2.x.x latest June 2013. - -===== New features -_None_ - -===== Fixes -* Implementation of TimedCache had an error multiplying the cache time by 60. So a -CertificateCache with validityTimeInHours=24 cached the certificates for 60 days [1210]. - -===== Changes -_None_ - -===== Removals -_None_ - -==== RASP version 2.0.0 -Main purposes of this release have been: - -* Full support for Foces2 certificates. Foces1 is still supported in this version, BUT after -June 2013 DanID will no longer issue Foces1 certificates. Renewal of Foces1 certificates -will also not be possible after this date. - -The version number is changed to 2.0.0 to clearly indicate, that this version of RASP will not be -able to communicate with any RASP 1.x software where one of the parties communicating has -updated to Foces2. - -===== New features -_None_ -===== Fixes -* Error messages for invalid certificate (before activation or after expire) has been updated to -show certificate subject [1098]. - -===== Changes -* LDAP URL changed in RaspConfiguration.xml (/Host) to crtdir.certifikat.dk [1053]. -* RASP library identifies itself by platform and version number when making Uddi Inquiry -requests [1142]. -* Log4net library updated from version 1.2.10 to 1.2.11 [1168]. - -===== Removals -_None_ diff --git a/doc/release-notes-3.0.0.adoc b/doc/release-notes-3.0.0.adoc deleted file mode 100644 index 3ca4959b..00000000 --- a/doc/release-notes-3.0.0.adoc +++ /dev/null @@ -1,2 +0,0 @@ -[#rasp_3_0_0] -==== RASP version 3.0.0 -- GitLab