[Pkg-cli-apps-commits] [SCM] keepass2 branch, upstream, updated. upstream/2.18-1-g5bfd54b

Julian Taylor jtaylor.debian at googlemail.com
Wed May 2 17:24:06 UTC 2012


The following commit has been merged in the upstream branch:
commit 5bfd54b82952a57089600f42109d637d1be310fd
Author: Julian Taylor <jtaylor.debian at googlemail.com>
Date:   Wed May 2 19:03:21 2012 +0200

    Imported Upstream version 2.19

diff --git a/Build/KeePassLibSD_Distrib/KeePassLibSD.dll b/Build/KeePassLibSD_Distrib/KeePassLibSD.dll
index 543aa5b..e122702 100644
Binary files a/Build/KeePassLibSD_Distrib/KeePassLibSD.dll and b/Build/KeePassLibSD_Distrib/KeePassLibSD.dll differ
diff --git a/Build/KeePassLib_Distrib/KeePassLib.dll b/Build/KeePassLib_Distrib/KeePassLib.dll
index 3cd1848..ad1ae13 100644
Binary files a/Build/KeePassLib_Distrib/KeePassLib.dll and b/Build/KeePassLib_Distrib/KeePassLib.dll differ
diff --git a/Build/KeePassLib_Distrib/KeePassLib.xml b/Build/KeePassLib_Distrib/KeePassLib.xml
index 744d618..ead4795 100644
--- a/Build/KeePassLib_Distrib/KeePassLib.xml
+++ b/Build/KeePassLib_Distrib/KeePassLib.xml
@@ -1234,7 +1234,6 @@
             <param name="strTree">Tree string.</param>
             <param name="vSeparators">Separators that delimit groups in the
             <c>strTree</c> parameter.</param>
-            <returns></returns>
         </member>
         <member name="M:KeePassLib.PwGroup.GetLevel">
             <summary>
@@ -2290,6 +2289,17 @@
             Character stream class.
             </summary>
         </member>
+        <member name="P:KeePassLib.Utility.StrEncodingInfo.CodePointSize">
+            <summary>
+            Size of a character in bytes.
+            </summary>
+        </member>
+        <member name="P:KeePassLib.Utility.StrEncodingInfo.StartSignature">
+            <summary>
+            Start signature of the text (byte order mark).
+            May be <c>null</c> or empty, if no signature is known.
+            </summary>
+        </member>
         <member name="T:KeePassLib.Utility.StrUtil">
             <summary>
             A class containing various string helper methods.
@@ -2743,7 +2753,16 @@
         <member name="F:KeePassLib.PwDefs.Version32">
             <summary>
             Version, encoded as 32-bit unsigned integer.
-            2.00 = 0x02000000, 2.01 = 0x02000100, 2.15 = 0x02010500, etc.
+            2.00 = 0x02000000, 2.01 = 0x02000100, ..., 2.18 = 0x02010800.
+            As of 2.19, the version is encoded component-wise per byte,
+            e.g. 2.19 = 0x02130000.
+            It is highly recommended to use <c>FileVersion64</c> instead.
+            </summary>
+        </member>
+        <member name="F:KeePassLib.PwDefs.FileVersion64">
+            <summary>
+            Version, encoded as 64-bit unsigned integer
+            (component-wise, 16 bits per component).
             </summary>
         </member>
         <member name="F:KeePassLib.PwDefs.VersionString">
diff --git a/Docs/Chm/default.css b/Docs/Chm/default.css
index 07410e7..98cd2fd 100644
--- a/Docs/Chm/default.css
+++ b/Docs/Chm/default.css
@@ -146,12 +146,13 @@ div.menubox a:visited, div.menubox a:active, div.menubox a:link {
 
 div.menubox a:hover {
 	border: 1px solid #0A246A;
-	border-radius: 2px;
 	-moz-border-radius: 2px;
+	border-radius: 2px;
 	background-color: #B6BDD2;
-	background-image: linear-gradient(top, #D9E5F9, #B8BED8);
 	background-image: -moz-linear-gradient(top, #D9E5F9, #B8BED8);
-	background-image: -webkit-gradient(linear, left top, left bottom, from(#D9E5F9), to(#B8BED8));
+	background-image: -webkit-linear-gradient(top, #D9E5F9, #B8BED8);
+	background-image: -ms-linear-gradient(top, #D9E5F9, #B8BED8);
+	background-image: linear-gradient(top, #D9E5F9, #B8BED8);
 }
 
 /* --------------------------------------------------------------------- */
@@ -243,15 +244,18 @@ div.tooltipex {
 	background-color: #FFFFE0;
 	padding: 1px 1px 1px 1px;
 	filter: alpha(opacity=90);
-	opacity: 0.9;
 	-moz-opacity: 0.9;
+	opacity: 0.9;
 	border: 1px solid #000000;
 }
 
 /* --------------------------------------------------------------------- */
 
 div.specificbox {
-	border: 1px dashed #808080;
+	border: 1px solid #808080;
+	-webkit-border-radius: 5px;
+	-moz-border-radius: 5px;
+	border-radius: 5px;
 	display: block;
 	background-color: #EEF0FF;
 	padding-top: 1px;
@@ -275,7 +279,10 @@ div.specificbox div.specifictitle {
 
 table.sectionsummary {
 	width: 100%;
-	border: thin dashed #808080;
+	border: thin solid #808080;
+	-moz-box-shadow: 1px 1px 5px #808080;
+	-webkit-box-shadow: 1px 1px 5px #808080;
+	box-shadow: 1px 1px 5px #808080;
 	background-color: #F0F8FF;
 	margin: 0px 0px 0px 0px;
 	padding: 0px 0px 0px 0px;
diff --git a/Docs/Chm/help/base/autotype.html b/Docs/Chm/help/base/autotype.html
index 5c466e8..26fba39 100644
--- a/Docs/Chm/help/base/autotype.html
+++ b/Docs/Chm/help/base/autotype.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -215,7 +214,12 @@ Any associations specified will be used in addition to the KeePass entry
 title to determine a match.
 
 
-<br /><br />
+<p>Auto-Type window definitions, entry titles and URLs are Spr-compiled, i.e.
+<a href="placeholders.html">placeholders</a>,
+<a href="placeholders.html#envvars">environment variables</a>,
+<a href="fieldrefs.html">field references</a>, etc. can be used.</p>
+
+<br />
 
 <a name="autoseq"></a>
 <h2 class="sectiontitle"><img src="../images/b16x16_ktouch.png"
diff --git a/Docs/Chm/help/base/autourl.html b/Docs/Chm/help/base/autourl.html
index f39ce63..2fa0079 100644
--- a/Docs/Chm/help/base/autourl.html
+++ b/Docs/Chm/help/base/autourl.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/cmdline.html b/Docs/Chm/help/base/cmdline.html
index c35639e..00b30cf 100644
--- a/Docs/Chm/help/base/cmdline.html
+++ b/Docs/Chm/help/base/cmdline.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/configuration.html b/Docs/Chm/help/base/configuration.html
index f85df6e..346a73c 100644
--- a/Docs/Chm/help/base/configuration.html
+++ b/Docs/Chm/help/base/configuration.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -70,7 +69,7 @@ Configuration files are stored in XML format.<br /><br />
 </tr>
 <tr>
 <td>Global (Virtualized)</td>
-<td>Windows Vista/7 Virtual Store</td>
+<td>Windows Vista/7/8 Virtual Store</td>
 <td>C:\Users\<i>User Name</i>\AppData\Local\VirtualStore\Program Files\KeePass Password Safe\KeePass.config.xml</td>
 </tr>
 <tr>
diff --git a/Docs/Chm/help/base/credits.html b/Docs/Chm/help/base/credits.html
index 1db2491..e7c20f4 100644
--- a/Docs/Chm/help/base/credits.html
+++ b/Docs/Chm/help/base/credits.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/credits_icons_license.html b/Docs/Chm/help/base/credits_icons_license.html
index badd000..b51d2ae 100644
--- a/Docs/Chm/help/base/credits_icons_license.html
+++ b/Docs/Chm/help/base/credits_icons_license.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/disclaimer.html b/Docs/Chm/help/base/disclaimer.html
index db7e167..42bc029 100644
--- a/Docs/Chm/help/base/disclaimer.html
+++ b/Docs/Chm/help/base/disclaimer.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/faq.html b/Docs/Chm/help/base/faq.html
index 63916bb..97064c7 100644
--- a/Docs/Chm/help/base/faq.html
+++ b/Docs/Chm/help/base/faq.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/faq_tech.html b/Docs/Chm/help/base/faq_tech.html
index 7076086..a840fb8 100644
--- a/Docs/Chm/help/base/faq_tech.html
+++ b/Docs/Chm/help/base/faq_tech.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -72,6 +71,7 @@ startup?</a></li>
 
 
 
+<li><a href="#internet">Why does KeePass try to connect to the Internet?</a></li>
 </ul>
 
 Security:
@@ -89,6 +89,7 @@ Usage:
 <ul>
 <li><a href="#editattach">Can I directly edit file attachments?</a></li>
 <li><a href="#rtftext">How to store and work with large amounts of (formatted) text?</a></li>
+<li><a href="#email">Can an e-mail address field be added?</a></li>
 </ul>
 
 <br />
@@ -356,6 +357,25 @@ manually print the document in the application that just opened the file.</p>
 <br />
 
 
+<a name="internet"></a>
+<h2 class="sectiontitle">
+<img src="../images/b16x16_help.png" class="singleimg" alt="Info" />  Why
+does KeePass try to connect to the Internet?</h2>
+
+<p>KeePass has an option to automatically check for updates on each program start.
+In order to check for updates, KeePass downloads a small version information
+file and compares the available version with the installed version.
+No personal information is sent to the KeePass web server.</p>
+
+<p>Automatic update checks are performed unintrusively in the background.
+A notification is only displayed when an update is available. Updates are not
+downloaded or installed automatically.</p>
+
+<p>The option is disabled by default. You can enable/disable it in
+'Tools' -> 'Options' -> tab 'Advanced'.</p>
+
+<br />
+
 <a name="autotypelog"></a>
 <h2 class="sectiontitle">
 <img src="../images/b16x16_ktouch.png" class="singleimg" alt="Info" />  Is
@@ -595,7 +615,8 @@ to store and work with large amounts of (formatted) text?</h2>
 KeePass has a built-in editor that allows working conveniently with
 large amounts of (formatted) texts.<br />
 <br />
-To add a large text to an entry, import the file as attachment.
+To add a large text to an entry, import the file as attachment
+(or click 'Attach' -> 'Create Empty Attachment').
 The built-in editor supports *.TXT (simple text) and *.RTF (formatted text) files.<br />
 <br />
 In order to edit an attachment, right-click onto the entry in the main window,
@@ -617,5 +638,75 @@ alt="Editor screenshot" /></a>
 </td></tr></table>
 
 
+<br /><br />
+
+<a name="email"></a>
+<h2 class="sectiontitle">
+<img src="../images/b16x16_help.png" class="singleimg" alt="Info" />  Can
+an e-mail address field be added?</h2>
+
+<p>A few times it has been requested that a standard entry field for e-mail addresses
+is added (on the main tab page in the entry editing dialog).
+The short answer: an e-mail address field will not be added
+due to usability reasons. Now the long answer.</p>
+
+<p>First of all, let's assume that most of the entries stored in KeePass
+contain information for logging in to websites.
+When you register an account for a website, you often have to specify a
+user name as well as an e-mail address. When you regularly
+log in later, you usually only need to provide either user name + password
+or e-mail + password (never user name + e-mail + password).
+Here the first part (which is either user name or e-mail) serves as
+identification: you tell the website who you are.
+The second part (password) provides authentication: you prove to the
+website that you're really the one who you claim to be.</p>
+
+<p>There are various methods how KeePass can transfer data to
+other applications. All of these methods by default assume that the content
+of the user name field is used for identification. For example,
+the default <a href="autotype.html#autoseq">auto-type sequence</a> of
+an entry is
+<code>{USERNAME}{TAB}{PASSWORD}{ENTER}</code>, the default
+<a href="http://keepass.info/plugins.html#formfiller" target="_blank">KeeForm</a>
+configuration uses the user name, etc.
+Now on the one hand some websites require an e-mail address instead
+of a user name. On the other hand we want the default data transfer configuration
+to work for most websites (such that the work that the user has to put
+into the configuration is kept minimal and only needed for
+websites using special login forms).</p>
+
+<p>The solution is simple: instead of interpreting the 'User Name' field
+strictly as a field containing a user name, users should rather interpret
+it as a field in which the data required for identification is stored.
+This data can consist of a user name, an e-mail address or something else
+(e.g. an account number for an online banking website).
+By handling it like this, the default data transfer configuration will work for most
+websites, i.e. zero amount of work needs to be put into
+the configuration.
+If you had to provide both a user name and an e-mail address at
+registration time, the other information (which isn't required
+on a regular basis) can be stored e.g. in
+the notes field or a custom string field of the KeePass entry.</p>
+
+<p>Now assume a separate e-mail field would be added.
+When users store both a user name and an e-mail address,
+KeePass cannot know which of the two is required for identification.
+So, in order to setup data transfer for the entry, users would be forced
+to choose which of the two fields should be used.</p>
+
+<p>So, adding an e-mail field would be a step back in usability,
+because it forces users to put additional time into data transfer configuration.
+The current system ('User Name' containing identification information,
+without a separate e-mail field) doesn't require this, and thus is
+the better solution.</p>
+
+<p>For users that are willing to manually configure the data transfer for each
+entry, there are multiple ways to get a separate e-mail address field.
+After switching to the 'Advanced' tab in the entry editing dialog,
+an e-mail address field can be added as custom string.
+If the field should appear on the main tab page of the dialog, the
+<a href="http://keepass.info/plugins.html#kpentrytemplates"
+target="_blank">KPEntryTemplates</a> plugin can be used.</p>
+
 </body></html>
 
diff --git a/Docs/Chm/help/base/fieldrefs.html b/Docs/Chm/help/base/fieldrefs.html
index c5183d1..700c361 100644
--- a/Docs/Chm/help/base/fieldrefs.html
+++ b/Docs/Chm/help/base/fieldrefs.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/firststeps.html b/Docs/Chm/help/base/firststeps.html
index ebfe048..053f7e3 100644
--- a/Docs/Chm/help/base/firststeps.html
+++ b/Docs/Chm/help/base/firststeps.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/importexport.html b/Docs/Chm/help/base/importexport.html
index 250b28e..bb16f6a 100644
--- a/Docs/Chm/help/base/importexport.html
+++ b/Docs/Chm/help/base/importexport.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -235,16 +234,21 @@ time in form HH:mm:ss.</li>
 <img src="../images/b16x16_dataexchange.png" class="singleimg" alt="Text" />  Generic
 CSV Importer</h2>
 
-<p>KeePass 2.x ships with a generic
-CSV importer. This tool can import almost all CSV formats out there. The CSV
+<p>KeePass 2.x features a generic CSV importer.
+This tool can import almost all CSV formats. The CSV
 files are loaded and you can manually specify the encoding / character set, assign columns
-to data fields, and
-specify how the low-level structure looks like (usage of quotes, etc.).</p>
+to data fields, and specify how the low-level structure looks like (usage of quotes, etc.).</p>
 
 <p>To start the generic CSV file importer, click <i>'File' -> 'Import'</i> and
 choose <i>'Generic CSV Importer'</i>.</p>
 
-<br />
+<center>
+<a href="http://keepass.info/screenshots/keepass_2x/gencsvimp_big.png"
+target="_blank"><img src="../../screenshots/keepass_2x/gencsvimp.png"
+alt="Generic CSV Importer" /></a>
+</center>
+
+<br /><br />
 
 <a name="imp_cwallet"></a>
 <h2 class="sectiontitle">
diff --git a/Docs/Chm/help/base/index.html b/Docs/Chm/help/base/index.html
index 5cbd208..0d75efd 100644
--- a/Docs/Chm/help/base/index.html
+++ b/Docs/Chm/help/base/index.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/integration.html b/Docs/Chm/help/base/integration.html
index 735616e..f7972d1 100644
--- a/Docs/Chm/help/base/integration.html
+++ b/Docs/Chm/help/base/integration.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/keys.html b/Docs/Chm/help/base/keys.html
index 0ef657b..80d98e1 100644
--- a/Docs/Chm/help/base/keys.html
+++ b/Docs/Chm/help/base/keys.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/license_lgpl.html b/Docs/Chm/help/base/license_lgpl.html
index 0e75706..cd54dfa 100644
--- a/Docs/Chm/help/base/license_lgpl.html
+++ b/Docs/Chm/help/base/license_lgpl.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/multiuser.html b/Docs/Chm/help/base/multiuser.html
index 5228d63..9c0fd6d 100644
--- a/Docs/Chm/help/base/multiuser.html
+++ b/Docs/Chm/help/base/multiuser.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/placeholders.html b/Docs/Chm/help/base/placeholders.html
index c7d376b..9b409e1 100644
--- a/Docs/Chm/help/base/placeholders.html
+++ b/Docs/Chm/help/base/placeholders.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -126,7 +125,8 @@ class="singleimg" alt="Placeholder" />  Paths and Date/Time Placeholde
 <tr><td width="50%">{INTERNETEXPLORER}</td><td width="50%">Path of Internet Explorer, if installed.</td></tr>
 <tr><td width="50%">{FIREFOX}</td><td width="50%">Path of Mozilla Firefox, if installed.</td></tr>
 <tr><td width="50%">{OPERA}</td><td width="50%">Path of Opera, if installed.</td></tr>
-<tr><td width="50%">{GOOGLECHROME}</td><td width="50%">Path of Google Chrome, if installed.</td></tr>
+<tr><td width="50%">{GOOGLECHROME}</td><td width="50%">Path of Google Chrome (or Chromium
+on Unix-like systems), if installed.</td></tr>
 <tr><td width="50%">{SAFARI}</td><td width="50%">Path of Safari, if installed.</td></tr>
 </table>
 
@@ -150,6 +150,8 @@ class="singleimg" alt="Placeholder" />  Paths and Date/Time Placeholde
 <tr><td width="50%">{DB_BASENAME}</td><td width="50%">File name (excluding extension) of the current database.</td></tr>
 <tr><td width="50%">{DB_EXT}</td><td width="50%">File name extension of the current database.</td></tr>
 <tr><td width="50%">{ENV_DIRSEP}</td><td width="50%">Directory separator ('\' on Windows, '/' on Unix).</td></tr>
+<tr><td width="50%">{ENV_PROGRAMFILES_X86}</td><td width="50%">This is
+<code>%ProgramFiles(x86)%</code>, if it exists, otherwise <code>%ProgramFiles%</code>.</td></tr>
 <tr><td width="50%">{DT_SIMPLE}</td><td width="50%">Current local date/time as a simple, sortable string.</td></tr>
 <tr><td width="50%">{DT_YEAR}</td><td width="50%">Year component of the current local date/time.</td></tr>
 <tr><td width="50%">{DT_MONTH}</td><td width="50%">Month component of the current local date/time.</td></tr>
diff --git a/Docs/Chm/help/base/pwgenerator.html b/Docs/Chm/help/base/pwgenerator.html
index b6194d2..a5ebca8 100644
--- a/Docs/Chm/help/base/pwgenerator.html
+++ b/Docs/Chm/help/base/pwgenerator.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -122,18 +121,6 @@ are supported:</p>
 <td>Upper-Case Alphanumeric</td>
 <td>ABCDEFGHIJKLMNOPQRSTUVWXYZ 0123456789</td></tr>
 
-<tr><td><code>c</code></td>
-<td>Lower-Case Consonant</td>
-<td>bcdfghjklmnpqrstvwxyz</td></tr>
-
-<tr><td><code>C</code></td>
-<td>Mixed-Case Consonant</td>
-<td>BCDFGHJKLMNPQRSTVWXYZ bcdfghjklmnpqrstvwxyz</td></tr>
-
-<tr><td><code>z</code></td>
-<td>Upper-Case Consonant</td>
-<td>BCDFGHJKLMNPQRSTVWXYZ</td></tr>
-
 <tr><td><code>d</code></td>
 <td>Digit</td>
 <td>0123456789</td></tr>
@@ -158,6 +145,30 @@ are supported:</p>
 <td>Upper-Case Letter</td>
 <td>ABCDEFGHIJKLMNOPQRSTUVWXYZ</td></tr>
 
+<tr><td><code>v</code></td>
+<td>Lower-Case Vowel</td>
+<td>aeiou</td></tr>
+
+<tr><td><code>V</code></td>
+<td>Mixed-Case Vowel</td>
+<td>AEIOU aeiou</td></tr>
+
+<tr><td><code>Z</code></td>
+<td>Upper-Case Vowel</td>
+<td>AEIOU</td></tr>
+
+<tr><td><code>c</code></td>
+<td>Lower-Case Consonant</td>
+<td>bcdfghjklmnpqrstvwxyz</td></tr>
+
+<tr><td><code>C</code></td>
+<td>Mixed-Case Consonant</td>
+<td>BCDFGHJKLMNPQRSTVWXYZ bcdfghjklmnpqrstvwxyz</td></tr>
+
+<tr><td><code>z</code></td>
+<td>Upper-Case Consonant</td>
+<td>BCDFGHJKLMNPQRSTVWXYZ</td></tr>
+
 <tr><td><code>p</code></td>
 <td>Punctuation</td>
 <td>,.;:</td></tr>
@@ -168,39 +179,27 @@ are supported:</p>
 
 <tr><td><code>s</code></td>
 <td>Printable 7-Bit Special Character</td>
-<td>!"#$%&'()*+,-./:;<=>?[\]^_{|}~</td></tr>
+<td>!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~</td></tr>
 
 <tr><td><code>S</code></td>
 <td>Printable 7-Bit ASCII</td>
-<td>A-Z, a-z, 0-9, !"#$%&'()*+,-./:;<=>?[\]^_{|}~</td></tr>
-
-<tr><td><code>v</code></td>
-<td>Lower-Case Vowel</td>
-<td>aeiou</td></tr>
-
-<tr><td><code>V</code></td>
-<td>Mixed-Case Vowel</td>
-<td>AEIOU aeiou</td></tr>
-
-<tr><td><code>Z</code></td>
-<td>Upper-Case Vowel</td>
-<td>AEIOU</td></tr>
+<td>A-Z, a-z, 0-9, !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~</td></tr>
 
 <tr><td><code>x</code></td>
 <td>High ANSI</td>
-<td>From '~' to U255 (excluding U255)</td></tr>
+<td>From '~' to U255 (excluding U255).</td></tr>
 
 <tr><td><code>\</code></td>
 <td>Escape (Fixed Char)</td>
-<td>Use following character as is</td></tr>
+<td>Use following character as is.</td></tr>
 
 <tr><td><code>{<i>n</i>}</code></td>
 <td>Escape (Repeat)</td>
-<td>Repeat the previous character <i>n</i> times</td></tr>
+<td>Repeat the previous character <i>n</i> times.</td></tr>
 
 <tr><td><code>[<i>...</i>]</code></td>
 <td>Custom Char Set</td>
-<td>Define a custom character set</td></tr>
+<td>Define a custom character set.</td></tr>
 
 </table>
 
diff --git a/Docs/Chm/help/base/repair.html b/Docs/Chm/help/base/repair.html
index a6a64de..75c5846 100644
--- a/Docs/Chm/help/base/repair.html
+++ b/Docs/Chm/help/base/repair.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/secedits.html b/Docs/Chm/help/base/secedits.html
index 84a7be6..cfa5592 100644
--- a/Docs/Chm/help/base/secedits.html
+++ b/Docs/Chm/help/base/secedits.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/security.html b/Docs/Chm/help/base/security.html
index 08b2427..39b1b68 100644
--- a/Docs/Chm/help/base/security.html
+++ b/Docs/Chm/help/base/security.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/tans.html b/Docs/Chm/help/base/tans.html
index 313d479..128ee48 100644
--- a/Docs/Chm/help/base/tans.html
+++ b/Docs/Chm/help/base/tans.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/base/usingpws.html b/Docs/Chm/help/base/usingpws.html
index 61d4679..404a0a5 100644
--- a/Docs/Chm/help/base/usingpws.html
+++ b/Docs/Chm/help/base/usingpws.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -107,10 +106,9 @@ other applications.</p>
 and other Plugins</h2>
 
 <p>There are a lot of plugins available integrating KeePass directly with
-other applications. <i>KeeForm</i>
+other applications. For example, <i>KeeForm</i>
 (for Internet Explorer und Mozilla Firefox)
-allows completely automatic filling of
-webforms for example.</p>
+allows completely automatic filling of webforms.</p>
 
 <p>You can find these integration plugins on the
 <a href="http://keepass.info/plugins.html">KeePass Plugins</a> page.</p>
diff --git a/Docs/Chm/help/v2/autotype_obfuscation.html b/Docs/Chm/help/v2/autotype_obfuscation.html
index 860a1ac..a23c77c 100644
--- a/Docs/Chm/help/v2/autotype_obfuscation.html
+++ b/Docs/Chm/help/v2/autotype_obfuscation.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/dbsettings.html b/Docs/Chm/help/v2/dbsettings.html
index 959ea2a..6b93201 100644
--- a/Docs/Chm/help/v2/dbsettings.html
+++ b/Docs/Chm/help/v2/dbsettings.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/entry.html b/Docs/Chm/help/v2/entry.html
index 47b5b33..9835ecd 100644
--- a/Docs/Chm/help/v2/entry.html
+++ b/Docs/Chm/help/v2/entry.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/guioptions.html b/Docs/Chm/help/v2/guioptions.html
index c0cfc9e..60794ac 100644
--- a/Docs/Chm/help/v2/guioptions.html
+++ b/Docs/Chm/help/v2/guioptions.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/ioconnect.html b/Docs/Chm/help/v2/ioconnect.html
index f31e084..3c66a9d 100644
--- a/Docs/Chm/help/v2/ioconnect.html
+++ b/Docs/Chm/help/v2/ioconnect.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/license.html b/Docs/Chm/help/v2/license.html
index 6bb900b..a4f1685 100644
--- a/Docs/Chm/help/v2/license.html
+++ b/Docs/Chm/help/v2/license.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/plugins.html b/Docs/Chm/help/v2/plugins.html
index 6dc2056..ba1f751 100644
--- a/Docs/Chm/help/v2/plugins.html
+++ b/Docs/Chm/help/v2/plugins.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/policy.html b/Docs/Chm/help/v2/policy.html
index 22d54ef..a7f9f34 100644
--- a/Docs/Chm/help/v2/policy.html
+++ b/Docs/Chm/help/v2/policy.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/setup.html b/Docs/Chm/help/v2/setup.html
index 086a744..8be268d 100644
--- a/Docs/Chm/help/v2/setup.html
+++ b/Docs/Chm/help/v2/setup.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -184,8 +183,27 @@ your system.</p>
 KeePass under Mono (Linux, Mac OS X, BSD, ...)</h2>
 
 <p>In addition to Windows, KeePass 2.x runs fine under Mono, i.e. Linux, Mac OS X,
-BSD, etc. In order to run KeePass, follow these steps:</p>
+BSD, etc.</p>
 
+<p>Links to all supported packages can be found on the KeePass downloads page:
+<a href="http://keepass.info/download.html"
+target="_blank">http://keepass.info/download.html</a>.</p>
+
+<ul>
+<li><strong>Debian/Ubuntu Linux:</strong><br />
+Install the <em>keepass2</em> /
+<em>KeePass 2.x for Debian/Ubuntu Linux</em> package (e.g. using APT).
+A link to a page with more information about this package can be found on the
+downloads page.<br />
+<br /></li>
+
+<li><strong>Mac OS X:</strong><br />
+Install the <em>KeePass 2.x for Mac OS X</em> package
+(link on the downloads page).<br />
+<br /></li>
+
+<li><strong>Other Unix-like systems:</strong><br />
+In order to run KeePass, follow these steps:
 <ol>
 <li>Install <a href="http://www.mono-project.com/"
 target="_blank">Mono ≥ 2.6</a> (older versions will not work and are
@@ -270,6 +288,8 @@ must be 2.20100818.3004 or higher! If your distribution only offers an
 older version, you can download and install the latest version of the
 package manually, see the <a href="http://www.semicomplete.com/projects/xdotool/"
 target="_blank" rel="nofollow"><code>xdotool</code> website</a>.</p>
+</li>
+</ul>
 
 <!-- <br />
 <a name="wine"></a>
diff --git a/Docs/Chm/help/v2/sync.html b/Docs/Chm/help/v2/sync.html
index 831c62d..02df7c3 100644
--- a/Docs/Chm/help/v2/sync.html
+++ b/Docs/Chm/help/v2/sync.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/translation.html b/Docs/Chm/help/v2/translation.html
index e010b06..2e780a1 100644
--- a/Docs/Chm/help/v2/translation.html
+++ b/Docs/Chm/help/v2/translation.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2/triggers.html b/Docs/Chm/help/v2/triggers.html
index 9594cd2..5278a81 100644
--- a/Docs/Chm/help/v2/triggers.html
+++ b/Docs/Chm/help/v2/triggers.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -137,6 +136,22 @@ This event occurs right after a database file has been saved successfully.
 <li><i>Parameters:</i> See 'Opened database file' event.<br /><br /></li>
 </ul></li>
 
+<li><b>Closing database file (before saving):</b><br />
+This event occurs right before a database file is closed.
+It occurs before KeePass saves the database automatically or asks the
+user whether to save unsaved changes.
+<ul>
+<li><i>Parameters:</i> See 'Opened database file' event.<br /><br /></li>
+</ul></li>
+
+<li><b>Closing database file (after saving):</b><br />
+This event occurs right before a database file is closed.
+The database file already was saved automatically or unsaved changes were
+saved/discarded depending on the user's choice.
+<ul>
+<li><i>Parameters:</i> See 'Opened database file' event.<br /><br /></li>
+</ul></li>
+
 <li><b>Copied entry data to clipboard:</b><br />
 This event occurs when entry data (user name, password, ...) is copied
 to the Windows clipboard.
@@ -223,8 +238,9 @@ see: <a href="../base/autourl.html#builtin">Executing Built-In Shell Commands</a
 <ul>
 <li><i>File/URL:</i> The string to be executed by the shell.</li>
 <li><i>Arguments:</i> Optional. If <i>'File/URL'</i> points to an executable
-file, this string is sent to the executable as command line argument(s).
-<br /><br /></li>
+file, this string is sent to the executable as command line argument(s).</li>
+<li><i>Wait for exit:</i> If this option is checked, KeePass waits indefinitely
+for the started process to exit.<br /><br /></li>
 </ul></li>
 
 <li><b>Change trigger on/off state:</b><br />
diff --git a/Docs/Chm/help/v2/version.html b/Docs/Chm/help/v2/version.html
index 33f4433..11ed683 100644
--- a/Docs/Chm/help/v2/version.html
+++ b/Docs/Chm/help/v2/version.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2_dev/customize.html b/Docs/Chm/help/v2_dev/customize.html
index 4990026..f63147e 100644
--- a/Docs/Chm/help/v2_dev/customize.html
+++ b/Docs/Chm/help/v2_dev/customize.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2_dev/plg_index.html b/Docs/Chm/help/v2_dev/plg_index.html
index f680139..e5a590f 100644
--- a/Docs/Chm/help/v2_dev/plg_index.html
+++ b/Docs/Chm/help/v2_dev/plg_index.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -269,11 +268,11 @@ of your plugin.</li>
 the quotes).</li>
 <li><b>Copyright:</b> Not used by KeePass; freely assignable by the plugin.</li>
 <li><b>Trademarks:</b> Not used by KeePass; freely assignable by the plugin.</li>
-<li><b>Assembly Version:</b> Should be set to the recommended KeePass version (i.e.
-the KeePass version your plugin is built for).</li>
+<li><b>Assembly Version:</b> Should be set to the version of your plugin.</li>
 <li><b>File Version:</b> Should be set to the version of your plugin. It is up
 to you how you are versioning your plugin builds, but it should be a scheme that
-allows version comparisons (based on string comparisons).</li>
+allows version comparisons (by comparing the version components).
+Do <i>not</i> use asterisks for creating a version number at build time.</li>
 <li><b>GUID:</b> Not used by KeePass; freely assignable by the plugin.</li>
 </ul>
 
diff --git a/Docs/Chm/help/v2_dev/scr_index.html b/Docs/Chm/help/v2_dev/scr_index.html
index f248dd2..d24e840 100644
--- a/Docs/Chm/help/v2_dev/scr_index.html
+++ b/Docs/Chm/help/v2_dev/scr_index.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2_dev/scr_kps_index.html b/Docs/Chm/help/v2_dev/scr_kps_index.html
index 384392b..d859b6e 100644
--- a/Docs/Chm/help/v2_dev/scr_kps_index.html
+++ b/Docs/Chm/help/v2_dev/scr_kps_index.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
diff --git a/Docs/Chm/help/v2_dev/scr_sc_index.html b/Docs/Chm/help/v2_dev/scr_sc_index.html
index 51c0610..dced094 100644
--- a/Docs/Chm/help/v2_dev/scr_sc_index.html
+++ b/Docs/Chm/help/v2_dev/scr_sc_index.html
@@ -9,7 +9,6 @@
 	<meta name="keywords" content="KeePass, Password, Safe, Security, Database, Encryption, Secure, Manager, Open, Source, Free, Code, Key, Master, Disk, Dominik, Reichl" />
 
 	<meta name="robots" content="index" />
-	<meta name="revisit-after" content="14 days" />
 
 	<meta http-equiv="expires" content="0" />
 	<meta http-equiv="cache-control" content="no-cache" />
@@ -37,6 +36,7 @@
 
 
 
+
 <table class="sectionsummary"><tr><td width="68px">
 <img src="../images/b64x64_konsole.png" width="64px" height="64px"
 class="singleimg" align="left" alt="Console" />
@@ -94,13 +94,17 @@ next release of KPScript.</p>
 <ul>
 <li>ListGroups</li>
 <li>ListEntries</li>
+<li>GetEntryString</li>
 <li>AddEntry</li>
 <li>EditEntry</li>
+<li>MoveEntry</li>
 <li>DeleteEntry</li>
+<li>DeleteAllEntries</li>
 <li>Export</li>
 <li>Sync</li>
 <li>ChangeMasterKey</li>
 <li>DetachBins</li>
+<li>GenPw</li>
 </ul>
 
 <hr />
@@ -124,6 +128,21 @@ Opens the MyDb.kdbx database using 'MyPassword' as password and the MyDb.key fil
 It will output a list of all entries contained in the MyDb.kdbx database file.</p>
 
 <hr />
+<p><b>Command: GetEntryString</b></p>
+
+<p>Retrieves the value of an entry string field. The entry identification
+syntax is exactly the same as in the <code>EditEntry</code> command.
+The field name can be specified using the '<code>-Field</code>' parameter (supported
+field names are e.g. Title, UserName, Password, URL, Notes, etc.).
+Usage example:</p>
+
+<p><code>KPScript -c:GetEntryString "C:\KeePass\MyDb.kdbx" -pw:MyPassword
+-Field:UserName -ref-Title:"Demo Account"</code><br />
+Opens the MyDb.kdbx database using 'MyPassword' as password.
+It outputs the user names of all entries that have the title
+"Demo Account".</p>
+
+<hr />
 <p><b>Command: AddEntry</b></p>
 
 <p>This command adds an entry to the database. To specify the entry details, use the
@@ -148,12 +167,21 @@ the entry will be created in the root group. Example:</p>
 <hr />
 <p><b>Command: EditEntry</b></p>
 
-<p>This command edits existing entries. To identify the entries to be edited,
-specify string fields to be compared. The syntax is
+<p>This command edits existing entries.</p>
+
+<p>To identify the entries to be edited,
+string fields can be compared. The syntax is
 <code>-ref-<i>FIELDNAME</i>:<i>FIELDVALUE</i></code>.
-To specify one or more new entry string values, use the following syntax:
-<code>-set-<i>FIELDNAME</i>:<i>FIELDVALUE</i></code>.
-Usage examples:</p>
+Additionally to comparing string fields, some other entry fields
+can be compared.
+<code>-refx-UUID:</code> can be used to specify the UUID.
+<code>-refx-Tags:</code> can be used to specify tags
+(multiple tags must be separated using commas '<code>,</code>').</p>
+
+<p>To specify one or more new entry string values, use the following syntax:
+<code>-set-<i>FIELDNAME</i>:<i>FIELDVALUE</i></code>.</p>
+
+<p>Usage examples:</p>
 
 <p><code>KPScript -c:EditEntry "C:\KeePass\MyDb.kdbx" -pw:MyPw -ref-Title:"Existing
 entry title" -set-UserName:"New user name"</code></p>
@@ -165,12 +193,28 @@ entry title" -set-UserName:"New user name"</code></p>
 first create backups of entries before modifying them.</p>
 
 <hr />
+<p><b>Command: MoveEntry</b></p>
+
+<p>This command moves one or more existing entries. The entry identification
+syntax is exactly the same as in the <code>EditEntry</code> command.</p>
+
+<p>The target group can be specified using the <code>GroupTree</code>
+parameter. '<code>/</code>' must be used as separator
+(e.g. <code>-GroupTree:Internet/eMail</code> moves the specified entries
+to the subgroup 'eMail' of the subgroup 'Internet').</p>
+
+<hr />
 <p><b>Command: DeleteEntry</b></p>
 
 <p>This command deletes one or more existing entries. The entry identification
 syntax is exactly the same as in the <code>EditEntry</code> command.</p>
 
 <hr />
+<p><b>Command: DeleteAllEntries</b></p>
+
+<p>This command deletes all entries (in all subgroups).</p>
+
+<hr />
 <p><b>Command: Export</b></p>
 
 <p>This command exports the complete database. The format is specified by
@@ -208,5 +252,22 @@ Usage example:</p>
 
 <p><code>KPScript -c:DetachBins -guikeyprompt "C:\KeePass\MyDb.kdbx"</code></p>
 
+<hr />
+<p><b>Command: GenPw</b></p>
+
+<p>Generates passwords. The number of passwords can be specified using the
+optional <code>-count:</code> parameter.
+A password generator profile can be specified using the optional
+<code>-profile:</code> parameter
+(the names of all available profiles can be found in the password generator
+dialog).
+Usage examples:</p>
+
+<p><code>KPScript -c:GenPw</code><br />
+Generates one password using the default generator profile.</p>
+
+<p><code>KPScript -c:GenPw -count:5 -profile:"128-Bit Hex Key (built-in)"</code><br />
+Generates five 128-bit hex passwords (when no translation is used).</p>
+
 </body></html>
 
diff --git a/Docs/Chm/screenshots/keepass_2x/gencsvimp.png b/Docs/Chm/screenshots/keepass_2x/gencsvimp.png
new file mode 100644
index 0000000..b427c17
Binary files /dev/null and b/Docs/Chm/screenshots/keepass_2x/gencsvimp.png differ
diff --git a/Docs/History.txt b/Docs/History.txt
index 213a2ae..8c46690 100644
--- a/Docs/History.txt
+++ b/Docs/History.txt
@@ -1,3 +1,142 @@
+2012-05-01: 2.19
+- New generic CSV importer (now supports multi-line fields, '\'
+  as escape character, field & record separators and the text
+  qualifier can be specified, white space characters can be
+  removed from the beginning/end of fields, the fields and
+  their order can be defined, supported fields now are group
+  name & standard fields like e.g. title & custom strings &
+  times & ignore column, the first row can be ignored, KeePass
+  initially tries to guess the fields and their order based on
+  the first row)
+- Native master key transformations are now computed in two
+  threads on 64-bit systems, too; on dual/multi core processors
+  this results in almost twice the performance as before (by
+  doubling the amount of rounds you'll get the same waiting
+  time as in 2.18, but the protection against dictionary and
+  guessing attacks is doubled)
+- New XML configuration and translation deserializer to improve
+  the startup performance
+- Added option to require a password repetition only when
+  hiding using asterisks is enabled (enabled by default)
+- Entry attachments can now be renamed using in-place label
+  editing (click on an already selected item to show an edit
+  box)
+- Empty entry attachments can now be created using 'Attach' ->
+  'Create Empty Attachment'
+- Sizes of entry attachments are now shown in a column of the
+  attachments list in the entry editing dialog
+- Added {ENV_PROGRAMFILES_X86} placeholder (this is
+  %ProgramFiles(x86)%, if it exists, otherwise %ProgramFiles%)
+- Added auto-type option 'An entry matches if one of its tags
+  is contained in the target window title'
+- URLs in HTML exports are now linkified
+- Import modules may now specify multiple default/equivalent
+  file extensions (like e.g. 'htm' and 'html')
+- Added support for reading texts encoded using UTF-32 Big
+  Endian
+- Enhanced text encoding detection (now detects UTF-32 LE/BE
+  and UTF-16 LE/BE by zeros, improved UTF-8 detection, ...)
+- Added zoom function for images in internal data viewer
+- Drop-down image buttons in the entry editing dialog are now
+  marked using small black triangle overlays
+- Added support for loading key files from URLs
+- Controls in the options dialog are now disabled when the
+  options are enforced (using an enforced configuration file)
+- If KeePass is started with the '-debug' command line option,
+  KeePass now shows a developer-friendly error message when
+  opening a database file fails
+- Added 'Wait for exit' property in the 'Execute command line /
+  URL' trigger action
+- The 'File exists' trigger condition now also supports URLs
+- Added two file closing trigger events (one raised before and
+  one after saving the database file)
+- Plugins: added file closing events
+- Plugins: added events (AutoType.Sequence*) that allow plugins
+  to provide auto-type sequence suggestions
+- Added workaround to support loading data from version
+  information files even when they have incorrectly been
+  decompressed by a web filter
+- Added workarounds for '°', '|' and '£' .NET SendKeys issues
+- Added workaround for topmost window .NET/Windows issue (the
+  'Always on Top' option now works even when switching to a
+  different window while KeePass is starting up)
+- Added workaround for Mono dialog event ordering bug
+- Added workaround for Mono clipboard bugs on Mac OS X
+- KPScript: added 'MoveEntry', 'GetEntryString' and 'GenPw'
+  commands
+- KPScript: added '-refx-UUID' and '-refx-Tags' entry
+  identification parameters
+
+- When only deleting history entries (without changing any data
+  field of an entry), no backup entry is created anymore
+- Unified text encoding handling for internal data viewer and
+  editor, generic CSV importer and text encoding selection
+  dialog
+- Improved font sizing in HTML exports/printouts
+- Improved encoding of group names in HTML exports/printouts
+- If an entry doesn't expire, 'Never expires' is now shown in
+  the 'Expiry Time' column in HTML exports/printouts
+- The expiry edit control now accepts incomplete edits and the
+  'Expires' checkbox is checked immediately
+- The time component of the default expiry suggestion is now
+  00:00:00
+- The last selected/focused item in the attachments list of the
+  entry editing dialog is now selected/focused after editing an
+  attachment
+- Improved field to standard field mapping function
+- Enhanced RoboForm importer to concatenate values of fields
+  with conflicting names
+- Updated Spamex.com importer
+- Removed KeePass 1.x CSV importer; users should use the new
+  generic CSV importer (which can import more data than the old
+  specialized 1.x CSV importer)
+- When trying to open another database while a dialog is
+  displayed, KeePass now just brings itself to the foreground
+  without attempting to open the second database
+- More list views use the Vista Explorer style
+- Modifier keys without another key aren't registered as global
+  hot key anymore
+- Improved default suggestions for custom sequences in the
+  auto-type sequence editing dialog
+- Improved default focus in the auto-type sequence editing
+  dialog
+- Added {C:Comment} placeholder in the auto-type sequence
+  editing dialog
+- On Unix-like systems, the {GOOGLECHROME} placeholder now
+  first searches for Google Chrome and then (if not found) for
+  Chromium
+- Versions displayed in the update checking dialog now consist
+  of at least two components
+- Added '@' and '`' to the printable 7-bit ASCII character set
+- Merged simple and extended special character spaces to one
+  special character space
+- Reduced control character space from 60 to 32
+- The first sample entry's URL now points to the KeePass
+  website
+- Improved key transformation delay calculation
+- Improved key file loading performance
+- The main menu now isn't a tab stop anymore
+- Some configuration nodes are now allocated only on demand
+- Improved UI update when moving/copying entries to the
+  currently active group or a subgroup of it using drag&drop
+- Improved behavior when closing an inactive database having
+  unsaved changes
+- Changed versioning scheme in file version information blocks
+  from digit- to component-based
+- Development snapshots don't ask anymore whether to enable the
+  automatic update check (only stable releases do)
+- Improved PLGX cache directory naming
+- The PLGX cache directory by default is now located in the
+  local application data folder instead of the roaming one
+- Improved support for PLGX plugins that are using LINQ
+- Various UI improvements
+- Various code optimizations
+- Minor other improvements
+
+- Fixed sorting of items in the most recently used files list
+- Fixed tab order in the 'Advanced' tab of the entry editing
+  dialog
+
 2012-01-05: 2.18
 - The update check now also checks for plugin updates (if
   plugin developers provide version information files)
diff --git a/KeePass/Forms/ImportCsvForm.Designer.cs b/Ext/DeprecatedSources/ImportCsvForm_120218.Designer.cs
similarity index 100%
rename from KeePass/Forms/ImportCsvForm.Designer.cs
rename to Ext/DeprecatedSources/ImportCsvForm_120218.Designer.cs
diff --git a/KeePass/Forms/ImportCsvForm.cs b/Ext/DeprecatedSources/ImportCsvForm_120218.cs
similarity index 100%
rename from KeePass/Forms/ImportCsvForm.cs
rename to Ext/DeprecatedSources/ImportCsvForm_120218.cs
diff --git a/KeePass/Forms/ImportCsvForm.resx b/Ext/DeprecatedSources/ImportCsvForm_120218.resx
similarity index 100%
rename from KeePass/Forms/ImportCsvForm.resx
rename to Ext/DeprecatedSources/ImportCsvForm_120218.resx
diff --git a/KeePass/DataExchange/Formats/KeePassCsv1x.cs b/Ext/DeprecatedSources/KeePassCsv1x_120221.cs
similarity index 100%
rename from KeePass/DataExchange/Formats/KeePassCsv1x.cs
rename to Ext/DeprecatedSources/KeePassCsv1x_120221.cs
diff --git a/Ext/KeePass.exe.config b/Ext/KeePass.exe.config
index 62795ed..9635f44 100644
--- a/Ext/KeePass.exe.config
+++ b/Ext/KeePass.exe.config
@@ -9,8 +9,8 @@
 				<assemblyIdentity name="KeePass"
 					publicKeyToken="fed2ed7716aecf5c"
 					culture="neutral" />
-				<bindingRedirect oldVersion="2.0.9.0-2.1.8.0"
-					newVersion="2.1.8.18961" />
+				<bindingRedirect oldVersion="2.0.9.0-2.19.0.0"
+					newVersion="2.19.0.18206" />
 			</dependentAssembly>
 		</assemblyBinding>
 		<enforceFIPSPolicy enabled="false" />
diff --git a/Ext/KeePass.iss b/Ext/KeePass.iss
index 1ceb617..a2c3407 100644
--- a/Ext/KeePass.iss
+++ b/Ext/KeePass.iss
@@ -8,10 +8,10 @@
 #define MyAppNameEx "KeePass Password Safe 2"
 #define MyAppPublisher "Dominik Reichl"
 
-#define KeeVersionStr "2.18"
-#define KeeVersionStrWithMinor "2.18"
-#define KeeVersionStrWithMinorPath "2.18"
-#define KeeVersionWin "2.1.8.0"
+#define KeeVersionStr "2.19"
+#define KeeVersionStrWithMinor "2.19"
+#define KeeVersionStrWithMinorPath "2.19"
+#define KeeVersionWin "2.19.0.0"
 
 #define MyAppURL "http://keepass.info/"
 #define MyAppExeName "KeePass.exe"
diff --git a/Ext/KeePassMsi/KeePassMsi.vdproj b/Ext/KeePassMsi/KeePassMsi.vdproj
index c7521a6..9f4db7d 100644
--- a/Ext/KeePassMsi/KeePassMsi.vdproj
+++ b/Ext/KeePassMsi/KeePassMsi.vdproj
@@ -118,7 +118,7 @@
         "Entry"
         {
         "MsmKey" = "8:_UNDEFINED"
-        "OwnerKey" = "8:_838987B3C51D42C3C7B9BDA1339A5500"
+        "OwnerKey" = "8:_8C05ADB649434D7892E36709EBDED4CC"
         "MsmSig" = "8:_UNDEFINED"
         }
         "Entry"
@@ -130,7 +130,7 @@
         "Entry"
         {
         "MsmKey" = "8:_UNDEFINED"
-        "OwnerKey" = "8:_8C05ADB649434D7892E36709EBDED4CC"
+        "OwnerKey" = "8:_838987B3C51D42C3C7B9BDA1339A5500"
         "MsmSig" = "8:_UNDEFINED"
         }
     }
@@ -382,7 +382,7 @@
             {
             "AssemblyRegister" = "3:1"
             "AssemblyIsInGAC" = "11:FALSE"
-            "AssemblyAsmDisplayName" = "8:KeePass, Version=2.1.8.18961, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL"
+            "AssemblyAsmDisplayName" = "8:KeePass, Version=2.19.0.18206, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL"
                 "ScatterAssemblies"
                 {
                     "_838987B3C51D42C3C7B9BDA1339A5500"
@@ -413,7 +413,7 @@
             {
             "AssemblyRegister" = "3:1"
             "AssemblyIsInGAC" = "11:FALSE"
-            "AssemblyAsmDisplayName" = "8:KeePass.XmlSerializers, Version=2.1.8.18961, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL"
+            "AssemblyAsmDisplayName" = "8:KeePass.XmlSerializers, Version=2.19.0.18206, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL"
                 "ScatterAssemblies"
                 {
                     "_8C05ADB649434D7892E36709EBDED4CC"
@@ -564,7 +564,7 @@
             {
             "AssemblyRegister" = "3:1"
             "AssemblyIsInGAC" = "11:FALSE"
-            "AssemblyAsmDisplayName" = "8:KeePass, Version=2.1.8.18961, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL"
+            "AssemblyAsmDisplayName" = "8:KeePass, Version=2.19.0.18206, Culture=neutral, PublicKeyToken=fed2ed7716aecf5c, processorArchitecture=MSIL"
                 "ScatterAssemblies"
                 {
                     "_C4F8814F844C43EE8C9F5B662182B11A"
@@ -712,14 +712,14 @@
         {
         "Name" = "8:Microsoft Visual Studio"
         "ProductName" = "8:KeePass"
-        "ProductCode" = "8:{3560D137-75F3-4E06-BE84-FB80CABF40AC}"
-        "PackageCode" = "8:{38E032C9-1409-4F5F-BF01-43B99210854B}"
+        "ProductCode" = "8:{E75AF9CE-09D4-46F2-BF44-9E7D2B4763D9}"
+        "PackageCode" = "8:{3707808B-0F74-4AD0-B136-D80EB2DE377C}"
         "UpgradeCode" = "8:{F2F19898-4F86-4940-9BFA-426574CE03E1}"
         "RestartWWWService" = "11:FALSE"
         "RemovePreviousVersions" = "11:TRUE"
         "DetectNewerInstalledVersion" = "11:TRUE"
         "InstallAllUsers" = "11:TRUE"
-        "ProductVersion" = "8:2.1.8"
+        "ProductVersion" = "8:2.19.0"
         "Manufacturer" = "8:Dominik Reichl"
         "ARPHELPTELEPHONE" = "8:"
         "ARPHELPLINK" = "8:http://keepass.info/"
diff --git a/KeePass/App/AppDefs.cs b/KeePass/App/AppDefs.cs
index cac2e4d..2cbabbf 100644
--- a/KeePass/App/AppDefs.cs
+++ b/KeePass/App/AppDefs.cs
@@ -48,7 +48,7 @@ namespace KeePass.App
 		// public const string MruNameValueSplitter = @"/::/";
 
 		/// <summary>
-		/// Hot key IDs (used in WM_HOTKEY window messages).
+		/// Hot key IDs (used in <c>WM_HOTKEY</c> window messages).
 		/// </summary>
 		public static class GlobalHotKeyId
 		{
@@ -154,9 +154,10 @@ namespace KeePass.App
 			public const string PlgxBuildPost = "plgx-build-post";
 
 			public const string Debug = "debug";
+			public const string DebugThrowException = "debug-throwexcp";
 			public const string SavePluginCompileRes = "saveplgxcr";
 			public const string ShowAssemblyInfo = "showasminfo";
-			public const string DebugThrowException = "debug-throwexcp";
+			public const string MakeXmlSerializerEx = "makexmlserializerex";
 
 #if (DEBUG && !KeePassLibSD)
 			public const string MakePopularPasswordTable = "makepopularpasswordtable";
diff --git a/KeePass/App/Configuration/AceApplication.cs b/KeePass/App/Configuration/AceApplication.cs
index 8f5757c..0a672cc 100644
--- a/KeePass/App/Configuration/AceApplication.cs
+++ b/KeePass/App/Configuration/AceApplication.cs
@@ -68,10 +68,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private IOConnectionInfo m_ioLastDb = new IOConnectionInfo();
+		private IOConnectionInfo m_ioLastDb = null;
 		public IOConnectionInfo LastUsedFile
 		{
-			get { return m_ioLastDb; }
+			get
+			{
+				if(m_ioLastDb == null) m_ioLastDb = new IOConnectionInfo();
+				return m_ioLastDb;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
@@ -79,10 +83,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private AceMru m_mru = new AceMru();
+		private AceMru m_mru = null;
 		public AceMru MostRecentlyUsed
 		{
-			get { return m_mru; }
+			get
+			{
+				if(m_mru == null) m_mru = new AceMru();
+				return m_mru;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
@@ -90,10 +98,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private AceStartUp m_su = new AceStartUp();
+		private AceStartUp m_su = null;
 		public AceStartUp Start
 		{
-			get { return m_su; }
+			get
+			{
+				if(m_su == null) m_su = new AceStartUp();
+				return m_su;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
@@ -101,10 +113,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private AceOpenDb m_fo = new AceOpenDb();
+		private AceOpenDb m_fo = null;
 		public AceOpenDb FileOpening
 		{
-			get { return m_fo; }
+			get
+			{
+				if(m_fo == null) m_fo = new AceOpenDb();
+				return m_fo;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
diff --git a/KeePass/App/Configuration/AceIntegration.cs b/KeePass/App/Configuration/AceIntegration.cs
index e92e395..83f1134 100644
--- a/KeePass/App/Configuration/AceIntegration.cs
+++ b/KeePass/App/Configuration/AceIntegration.cs
@@ -132,6 +132,14 @@ namespace KeePass.App.Configuration
 			set { m_bMatchByUrlHostInTitle = value; }
 		}
 
+		private bool m_bMatchByTagInTitle = false;
+		[DefaultValue(false)]
+		public bool AutoTypeMatchByTagInTitle
+		{
+			get { return m_bMatchByTagInTitle; }
+			set { m_bMatchByTagInTitle = value; }
+		}
+
 		private bool m_bPrependInitSeqIE = true;
 		[DefaultValue(true)]
 		public bool AutoTypePrependInitSequenceForIE
diff --git a/KeePass/App/Configuration/AceMainWindow.cs b/KeePass/App/Configuration/AceMainWindow.cs
index 9b78385..bf5e96c 100644
--- a/KeePass/App/Configuration/AceMainWindow.cs
+++ b/KeePass/App/Configuration/AceMainWindow.cs
@@ -336,10 +336,14 @@ namespace KeePass.App.Configuration
 		//	set { m_bGridLines = value; }
 		// }
 
-		private ListSorter m_pListSorter = new ListSorter();
+		private ListSorter m_pListSorter = null;
 		public ListSorter ListSorting
 		{
-			get { return m_pListSorter; }
+			get
+			{
+				if(m_pListSorter == null) m_pListSorter = new ListSorter();
+				return m_pListSorter;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
diff --git a/KeePass/App/Configuration/AceUI.cs b/KeePass/App/Configuration/AceUI.cs
index 3ef27a7..f7f2efd 100644
--- a/KeePass/App/Configuration/AceUI.cs
+++ b/KeePass/App/Configuration/AceUI.cs
@@ -103,6 +103,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
+		private bool m_bRepeatPwOnlyWhenHidden = true;
+		[DefaultValue(true)]
+		public bool RepeatPasswordOnlyWhenHidden
+		{
+			get { return m_bRepeatPwOnlyWhenHidden; }
+			set { m_bRepeatPwOnlyWhenHidden = value; }
+		}
+
 		private AceFont m_font = new AceFont();
 		public AceFont StandardFont
 		{
diff --git a/KeePass/App/Configuration/AppConfigEx.cs b/KeePass/App/Configuration/AppConfigEx.cs
index e53fe2c..cd49ef7 100644
--- a/KeePass/App/Configuration/AppConfigEx.cs
+++ b/KeePass/App/Configuration/AppConfigEx.cs
@@ -20,10 +20,14 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.Reflection;
+using System.Xml;
 using System.Xml.Serialization;
 using System.Diagnostics;
 
+using KeePass.UI;
 using KeePass.Util;
+using KeePass.Util.XmlSerialization;
 
 using KeePassLib.Serialization;
 using KeePassLib.Utility;
@@ -59,10 +63,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private AceLogging m_aceLogging = new AceLogging();
+		private AceLogging m_aceLogging = null;
 		public AceLogging Logging
 		{
-			get { return m_aceLogging; }
+			get
+			{
+				if(m_aceLogging == null) m_aceLogging = new AceLogging();
+				return m_aceLogging;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
@@ -81,10 +89,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private AceUI m_aceUI = new AceUI();
+		private AceUI m_aceUI = null;
 		public AceUI UI
 		{
-			get { return m_aceUI; }
+			get
+			{
+				if(m_aceUI == null) m_aceUI = new AceUI();
+				return m_aceUI;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
@@ -92,10 +104,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private AceSecurity m_sec = new AceSecurity();
+		private AceSecurity m_sec = null;
 		public AceSecurity Security
 		{
-			get { return m_sec; }
+			get
+			{
+				if(m_sec == null) m_sec = new AceSecurity();
+				return m_sec;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
@@ -103,10 +119,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private AceNative m_native =  new AceNative();
+		private AceNative m_native = null;
 		public AceNative Native
 		{
-			get { return m_native; }
+			get
+			{
+				if(m_native == null) m_native = new AceNative();
+				return m_native;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
@@ -114,10 +134,14 @@ namespace KeePass.App.Configuration
 			}
 		}
 
-		private AcePasswordGenerator m_pwGen = new AcePasswordGenerator();
+		private AcePasswordGenerator m_pwGen = null;
 		public AcePasswordGenerator PasswordGenerator
 		{
-			get { return m_pwGen; }
+			get
+			{
+				if(m_pwGen == null) m_pwGen = new AcePasswordGenerator();
+				return m_pwGen;
+			}
 			set
 			{
 				if(value == null) throw new ArgumentNullException("value");
@@ -290,6 +314,55 @@ namespace KeePass.App.Configuration
 			if(bObf) m_int.ProxyPassword = StrUtil.Obfuscate(m_int.ProxyPassword);
 			else m_int.ProxyPassword = StrUtil.Deobfuscate(m_int.ProxyPassword);
 		}
+
+		private static Dictionary<object, string> m_dictXmlPathCache =
+			new Dictionary<object, string>();
+		public static bool IsOptionEnforced(object pContainer, PropertyInfo pi)
+		{
+			if(pContainer == null) { Debug.Assert(false); return false; }
+			if(pi == null) { Debug.Assert(false); return false; }
+
+			XmlDocument xdEnforced = AppConfigSerializer.EnforcedConfigXml;
+			if(xdEnforced == null) return false;
+
+			string strObjPath;
+			if(!m_dictXmlPathCache.TryGetValue(pContainer, out strObjPath))
+			{
+				strObjPath = XmlUtil.GetObjectXmlPath(Program.Config, pContainer);
+				if(string.IsNullOrEmpty(strObjPath)) { Debug.Assert(false); return false; }
+
+				m_dictXmlPathCache[pContainer] = strObjPath;
+			}
+
+			string strProp = XmlSerializerEx.GetXmlName(pi);
+			if(string.IsNullOrEmpty(strProp)) { Debug.Assert(false); return false; }
+
+			string strPre = strObjPath;
+			if(!strPre.EndsWith("/")) strPre += "/";
+			string strXPath = strPre + strProp;
+
+			XmlNode xn = xdEnforced.SelectSingleNode(strXPath);
+			return (xn != null);
+		}
+
+		public static bool IsOptionEnforced(object pContainer, string strPropertyName)
+		{
+			if(pContainer == null) { Debug.Assert(false); return false; }
+			if(string.IsNullOrEmpty(strPropertyName)) { Debug.Assert(false); return false; }
+
+			// To improve performance (avoid type queries), check here, too
+			XmlDocument xdEnforced = AppConfigSerializer.EnforcedConfigXml;
+			if(xdEnforced == null) return false;
+
+			Type tContainer = pContainer.GetType();
+			PropertyInfo pi = tContainer.GetProperty(strPropertyName);
+			return IsOptionEnforced(pContainer, pi);
+		}
+
+		public static void ClearXmlPathCache()
+		{
+			m_dictXmlPathCache.Clear();
+		}
 	}
 
 	public sealed class AceMeta
diff --git a/KeePass/App/Configuration/AppConfigSerializer.cs b/KeePass/App/Configuration/AppConfigSerializer.cs
index b59861e..70a9d11 100644
--- a/KeePass/App/Configuration/AppConfigSerializer.cs
+++ b/KeePass/App/Configuration/AppConfigSerializer.cs
@@ -23,11 +23,11 @@ using System.Text;
 using System.Reflection;
 using System.Diagnostics;
 using System.Xml;
-using System.Xml.Serialization;
 using System.IO;
 
 using KeePass.Resources;
 using KeePass.Util;
+using KeePass.Util.XmlSerialization;
 
 using KeePassLib;
 using KeePassLib.Serialization;
@@ -84,6 +84,12 @@ namespace KeePass.App.Configuration
 			}
 		}
 
+		private static XmlDocument m_xdEnforced = null;
+		public static XmlDocument EnforcedConfigXml
+		{
+			get { return m_xdEnforced; }
+		}
+
 		private static void GetConfigPaths()
 		{
 			if(m_strGlobalConfigFile == null)
@@ -175,9 +181,11 @@ namespace KeePass.App.Configuration
 			{
 				XmlDocument xmlDoc = new XmlDocument();
 				xmlDoc.Load(m_strEnforcedConfigFile);
+
+				m_xdEnforced = xmlDoc;
 				return xmlDoc;
 			}
-			catch(Exception) { }
+			catch(Exception) { m_xdEnforced = null; }
 
 			return null;
 		}
@@ -188,7 +196,7 @@ namespace KeePass.App.Configuration
 			if(string.IsNullOrEmpty(strFilePath)) return null;
 
 			AppConfigEx tConfig = null;
-			XmlSerializer xmlSerial = new XmlSerializer(typeof(AppConfigEx));
+			XmlSerializerEx xmlSerial = new XmlSerializerEx(typeof(AppConfigEx));
 
 			if(xdEnforced == null)
 			{
@@ -249,7 +257,7 @@ namespace KeePass.App.Configuration
 			{
 				if(xdEnforced != null)
 				{
-					XmlSerializer xmlSerial = new XmlSerializer(typeof(AppConfigEx));
+					XmlSerializerEx xmlSerial = new XmlSerializerEx(typeof(AppConfigEx));
 					try
 					{
 						MemoryStream msEnf = new MemoryStream();
@@ -284,7 +292,7 @@ namespace KeePass.App.Configuration
 		{
 			tConfig.OnSavePre();
 
-			XmlSerializer xmlSerial = new XmlSerializer(typeof(AppConfigEx));
+			XmlSerializerEx xmlSerial = new XmlSerializerEx(typeof(AppConfigEx));
 			bool bResult = true;
 
 			// FileStream fs = null;
@@ -297,7 +305,7 @@ namespace KeePass.App.Configuration
 			if(bRemoveConfigPref) tConfig.Meta.PreferUserConfiguration = false;
 
 			XmlWriterSettings xws = new XmlWriterSettings();
-			xws.Encoding = new UTF8Encoding(false);
+			xws.Encoding = StrUtil.Utf8;
 			xws.Indent = true;
 			xws.IndentChars = "\t";
 
diff --git a/KeePass/DataExchange/CsvStreamReaderEx.cs b/KeePass/DataExchange/CsvStreamReaderEx.cs
new file mode 100644
index 0000000..b5b526f
--- /dev/null
+++ b/KeePass/DataExchange/CsvStreamReaderEx.cs
@@ -0,0 +1,201 @@
+/*
+  KeePass Password Safe - The Open-Source Password Manager
+  Copyright (C) 2003-2012 Dominik Reichl <dominik.reichl at t-online.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Diagnostics;
+
+using KeePassLib.Utility;
+
+namespace KeePass.DataExchange
+{
+	public sealed class CsvOptions
+	{
+		private char m_chFieldSep = ',';
+		public char FieldSeparator
+		{
+			get { return m_chFieldSep; }
+			set { m_chFieldSep = value; }
+		}
+
+		private char m_chRecSep = '\n';
+		public char RecordSeparator
+		{
+			get { return m_chRecSep; }
+			set { m_chRecSep = value; }
+		}
+
+		private char m_chTextQual = '\"';
+		public char TextQualifier
+		{
+			get { return m_chTextQual; }
+			set { m_chTextQual = value; }
+		}
+
+		private bool m_bBackEscape = true;
+		public bool BackslashIsEscape
+		{
+			get { return m_bBackEscape; }
+			set { m_bBackEscape = value; }
+		}
+
+		private bool m_bTrimFields = true;
+		public bool TrimFields
+		{
+			get { return m_bTrimFields; }
+			set { m_bTrimFields = value; }
+		}
+
+		private string m_strNewLineSeq = "\r\n";
+		public string NewLineSequence
+		{
+			get { return m_strNewLineSeq; }
+			set
+			{
+				if(value == null) throw new ArgumentNullException("value");
+				m_strNewLineSeq = value;
+			}
+		}
+	}
+
+	public sealed class CsvStreamReaderEx
+	{
+		private CharStream m_sChars;
+		private CsvOptions m_opt;
+
+		public CsvStreamReaderEx(string strData)
+		{
+			Init(strData, null);
+		}
+
+		public CsvStreamReaderEx(string strData, CsvOptions opt)
+		{
+			Init(strData, opt);
+		}
+
+		private void Init(string strData, CsvOptions opt)
+		{
+			if(strData == null) throw new ArgumentNullException("strData");
+
+			m_opt = (opt ?? new CsvOptions());
+
+			string strInput = strData;
+
+			// Normalize to Unix "\n" right now; the new lines are
+			// converted back in the <c>AddField</c> method
+			strInput = StrUtil.NormalizeNewLines(strInput, false);
+
+			strInput = strInput.Trim(new char[] { (char)0 });
+
+			m_sChars = new CharStream(strInput);
+		}
+
+		public string[] ReadLine()
+		{
+			char chFirst = m_sChars.PeekChar();
+			if(chFirst == char.MinValue) return null;
+
+			List<string> v = new List<string>();
+			StringBuilder sb = new StringBuilder();
+			bool bInText = false;
+
+			char chFS = m_opt.FieldSeparator, chRS = m_opt.RecordSeparator;
+			char chTQ = m_opt.TextQualifier;
+
+			while(true)
+			{
+				char ch = m_sChars.ReadChar();
+				if(ch == char.MinValue) break;
+
+				Debug.Assert(ch != '\r'); // Was normalized to Unix "\n"
+
+				if((ch == '\\') && m_opt.BackslashIsEscape)
+				{
+					char chEsc = m_sChars.ReadChar();
+					if(chEsc == char.MinValue) break;
+
+					if(chEsc == 'n') sb.Append('\n');
+					else if(chEsc == 'r') sb.Append('\r');
+					else if(chEsc == 't') sb.Append('\t');
+					else if(chEsc == 'u')
+					{
+						char chNum1 = m_sChars.ReadChar();
+						char chNum2 = m_sChars.ReadChar();
+						char chNum3 = m_sChars.ReadChar();
+						char chNum4 = m_sChars.ReadChar();
+						if(chNum4 != char.MinValue) // Implies the others
+						{
+							StringBuilder sbNum = new StringBuilder();
+							sbNum.Append(chNum3); sbNum.Append(chNum4); // Little
+							sbNum.Append(chNum1); sbNum.Append(chNum2); // Endian
+
+							byte[] pbNum = MemUtil.HexStringToByteArray(sbNum.ToString());
+							ushort usNum = MemUtil.BytesToUInt16(pbNum);
+
+							sb.Append((char)usNum);
+						}
+					}
+					else sb.Append(chEsc);
+				}
+				else if(ch == chTQ)
+				{
+					if(!bInText) bInText = true;
+					else // bInText
+					{
+						char chNext = m_sChars.PeekChar();
+						if(chNext == chTQ)
+						{
+							m_sChars.ReadChar();
+							sb.Append(chTQ);
+						}
+						else bInText = false;
+					}
+				}
+				else if((ch == chRS) && !bInText) break;
+				else if(bInText) sb.Append(ch);
+				else if(ch == chFS)
+				{
+					AddField(v, sb.ToString());
+					if(sb.Length > 0) sb.Remove(0, sb.Length);
+				}
+				else sb.Append(ch);
+			}
+			// Debug.Assert(!bInText);
+			AddField(v, sb.ToString());
+
+			return v.ToArray();
+		}
+
+		private void AddField(List<string> v, string strField)
+		{
+			// Escape characters might have been used to insert
+			// new lines that might not conform to Unix "\n"
+			strField = StrUtil.NormalizeNewLines(strField, false);
+
+			// Transform to final form of new lines
+			strField = strField.Replace("\n", m_opt.NewLineSequence);
+
+			if(m_opt.TrimFields) strField = strField.Trim();
+
+			v.Add(strField);
+		}
+	}
+}
diff --git a/KeePass/DataExchange/FileFormatPool.cs b/KeePass/DataExchange/FileFormatPool.cs
index 1ee310a..83ebfb5 100644
--- a/KeePass/DataExchange/FileFormatPool.cs
+++ b/KeePass/DataExchange/FileFormatPool.cs
@@ -98,7 +98,7 @@ namespace KeePass.DataExchange
 			Debug.Assert(m_vFormats == null);
 			m_vFormats = new List<FileFormatProvider>();
 
-			m_vFormats.Add(new KeePassCsv1x());
+			// m_vFormats.Add(new KeePassCsv1x());
 			m_vFormats.Add(new KeePassKdb1x());
 			m_vFormats.Add(new KeePassKdb2x());
 			m_vFormats.Add(new KeePassKdb2xRepair());
diff --git a/KeePass/DataExchange/FileFormatProvider.cs b/KeePass/DataExchange/FileFormatProvider.cs
index 0eaae9b..eb74574 100644
--- a/KeePass/DataExchange/FileFormatProvider.cs
+++ b/KeePass/DataExchange/FileFormatProvider.cs
@@ -43,6 +43,9 @@ namespace KeePass.DataExchange
 
 		/// <summary>
 		/// Default file name extension, without leading dot.
+		/// If there are multiple default/equivalent extensions
+		/// (like e.g. "html" and "htm"), specify all of them
+		/// separated by a '|' (e.g. "html|htm").
 		/// </summary>
 		public virtual string DefaultExtension
 		{
diff --git a/KeePass/DataExchange/Formats/AmpXml250.cs b/KeePass/DataExchange/Formats/AmpXml250.cs
index 0170fe5..73d73ef 100644
--- a/KeePass/DataExchange/Formats/AmpXml250.cs
+++ b/KeePass/DataExchange/Formats/AmpXml250.cs
@@ -145,6 +145,7 @@ namespace KeePass.DataExchange.Formats
 					{
 						DateTime dt = DateTime.Parse(strInner);
 						pe.ExpiryTime = dt;
+						pe.Expires = true;
 					}
 					catch(Exception) { }
 				}
diff --git a/KeePass/DataExchange/Formats/GenericCsv.cs b/KeePass/DataExchange/Formats/GenericCsv.cs
index 06f3dec..440dfd9 100644
--- a/KeePass/DataExchange/Formats/GenericCsv.cs
+++ b/KeePass/DataExchange/Formats/GenericCsv.cs
@@ -42,7 +42,7 @@ namespace KeePass.DataExchange.Formats
 		public override string DefaultExtension { get { return @"*"; } }
 		public override string ApplicationGroup { get { return KPRes.General; } }
 
-		public override bool ImportAppendsToRootGroupOnly { get { return true; } }
+		public override bool ImportAppendsToRootGroupOnly { get { return false; } }
 
 		public override Image SmallIcon
 		{
@@ -56,9 +56,9 @@ namespace KeePass.DataExchange.Formats
 			byte[] pbData = br.ReadBytes((int)sInput.Length);
 			br.Close();
 
-			ImportCsvForm csv = new ImportCsvForm();
-			csv.InitEx(pwStorage, pbData);
-			UIUtil.ShowDialogAndDestroy(csv);
+			CsvImportForm dlg = new CsvImportForm();
+			dlg.InitEx(pwStorage, pbData);
+			UIUtil.ShowDialogAndDestroy(dlg);
 		}
 	}
 }
diff --git a/KeePass/DataExchange/Formats/KeePassHtml2x.cs b/KeePass/DataExchange/Formats/KeePassHtml2x.cs
index 8a106db..7d9ffd0 100644
--- a/KeePass/DataExchange/Formats/KeePassHtml2x.cs
+++ b/KeePass/DataExchange/Formats/KeePassHtml2x.cs
@@ -40,7 +40,7 @@ namespace KeePass.DataExchange.Formats
 		public override bool SupportsExport { get { return true; } }
 
 		public override string FormatName { get { return KPRes.CustomizableHtml; } }
-		public override string DefaultExtension { get { return "html"; } }
+		public override string DefaultExtension { get { return @"html|htm"; } }
 		public override string ApplicationGroup { get { return KPRes.General; } }
 
 		public override Image SmallIcon
diff --git a/KeePass/DataExchange/Formats/MozillaBookmarksHtml100.cs b/KeePass/DataExchange/Formats/MozillaBookmarksHtml100.cs
index e47064f..e6ca8f4 100644
--- a/KeePass/DataExchange/Formats/MozillaBookmarksHtml100.cs
+++ b/KeePass/DataExchange/Formats/MozillaBookmarksHtml100.cs
@@ -41,7 +41,7 @@ namespace KeePass.DataExchange.Formats
 		public override bool SupportsExport { get { return false; } }
 
 		public override string FormatName { get { return "Mozilla Bookmarks HTML"; } }
-		public override string DefaultExtension { get { return "html"; } }
+		public override string DefaultExtension { get { return @"html|htm"; } }
 		public override string ApplicationGroup { get { return KPRes.Browser; } }
 
 		public override bool ImportAppendsToRootGroupOnly { get { return true; } }
diff --git a/KeePass/DataExchange/Formats/PpKeeperHtml270.cs b/KeePass/DataExchange/Formats/PpKeeperHtml270.cs
index b77478d..7f3e40e 100644
--- a/KeePass/DataExchange/Formats/PpKeeperHtml270.cs
+++ b/KeePass/DataExchange/Formats/PpKeeperHtml270.cs
@@ -41,7 +41,7 @@ namespace KeePass.DataExchange.Formats
 		public override bool SupportsExport { get { return false; } }
 
 		public override string FormatName { get { return "Passphrase Keeper HTML"; } }
-		public override string DefaultExtension { get { return "html"; } }
+		public override string DefaultExtension { get { return @"html|htm"; } }
 		public override string ApplicationGroup { get { return KPRes.PasswordManagers; } }
 
 		public override bool ImportAppendsToRootGroupOnly { get { return true; } }
diff --git a/KeePass/DataExchange/Formats/RoboFormHtml69.cs b/KeePass/DataExchange/Formats/RoboFormHtml69.cs
index 1eb1eee..c9bc77b 100644
--- a/KeePass/DataExchange/Formats/RoboFormHtml69.cs
+++ b/KeePass/DataExchange/Formats/RoboFormHtml69.cs
@@ -33,14 +33,14 @@ using KeePassLib.Utility;
 
 namespace KeePass.DataExchange.Formats
 {
-	// 6.9.82
+	// 6.9.82-7.7.0+
 	internal sealed class RoboFormHtml69 : FileFormatProvider
 	{
 		public override bool SupportsImport { get { return true; } }
 		public override bool SupportsExport { get { return false; } }
 
 		public override string FormatName { get { return "RoboForm HTML (PassCards)"; } }
-		public override string DefaultExtension { get { return "html"; } }
+		public override string DefaultExtension { get { return @"html|htm"; } }
 		public override string ApplicationGroup { get { return KPRes.PasswordManagers; } }
 
 		public override bool ImportAppendsToRootGroupOnly { get { return false; } }
@@ -127,13 +127,13 @@ namespace KeePass.DataExchange.Formats
 					string strKeyMapped = ImportUtil.MapNameToStandardField(strKey, true);
 					if((strKeyMapped == PwDefs.TitleField) ||
 						(strKeyMapped == PwDefs.UrlField) ||
-						(strKeyMapped.Length == 0) ||
-						(pe.Strings.ReadSafe(strKeyMapped).Length > 0))
+						(strKeyMapped.Length == 0))
 						strKeyMapped = strKey;
 
-					pe.Strings.Set(strKeyMapped, new ProtectedString(
-						pwStorage.MemoryProtection.GetProtection(strKeyMapped),
-						strValue));
+					// pe.Strings.Set(strKeyMapped, new ProtectedString(
+					//	pwStorage.MemoryProtection.GetProtection(strKeyMapped),
+					//	strValue));
+					ImportUtil.AppendToField(pe, strKeyMapped, strValue, pwStorage);
 
 					nOffset = nValueTD + 1;
 				}
diff --git a/KeePass/DataExchange/Formats/Spamex20070328.cs b/KeePass/DataExchange/Formats/Spamex20070328.cs
index 1dfb9a9..5e8686a 100644
--- a/KeePass/DataExchange/Formats/Spamex20070328.cs
+++ b/KeePass/DataExchange/Formats/Spamex20070328.cs
@@ -40,7 +40,7 @@ using KeePassLib.Utility;
 
 namespace KeePass.DataExchange.Formats
 {
-	// 2007-03-28
+	// Originally written on 2007-03-28, updated on 2012-04-15
 	internal sealed class Spamex20070328 : FileFormatProvider
 	{
 		public override bool SupportsImport { get { return true; } }
@@ -201,7 +201,7 @@ namespace KeePass.DataExchange.Formats
 			pe.Strings.Set(PwDefs.PasswordField, new ProtectedString(
 				pwStorage.MemoryProtection.ProtectPassword, str));
 
-			str = StrUtil.GetStringBetween(strPage, 0, "Site URL : <b>", "</b>");
+			str = StrUtil.GetStringBetween(strPage, 0, "Site Domain : <b>", "</b>");
 			if(str.StartsWith("<b>")) str = str.Substring(3, str.Length - 3);
 			pe.Strings.Set(PwDefs.UrlField, new ProtectedString(
 				pwStorage.MemoryProtection.ProtectUrl, str));
diff --git a/KeePass/DataExchange/ImportUtil.cs b/KeePass/DataExchange/ImportUtil.cs
index b1386ab..61e5128 100644
--- a/KeePass/DataExchange/ImportUtil.cs
+++ b/KeePass/DataExchange/ImportUtil.cs
@@ -360,16 +360,18 @@ namespace KeePass.DataExchange
 			"service", "servicename", "service name",
 			"head", "heading", "card", "product", "provider", "bank",
 
+			// Non-English names
 			"seite"
 		};
 
 		private static readonly string[] m_vUserNames = {
-			"user", "name", "user name", "username",
+			"user", "name", "user name", "username", "login name",
 			"email", "e-mail", "id", "userid", "user id",
 			"login", "form_loginname", "wpname", "mail",
-			"loginid", "login id", "first name", "last name",
-			"card#",
+			"loginid", "login id", "log",
+			"first name", "last name", "card#",
 
+			// Non-English names
 			"nom"
 		};
 
@@ -379,7 +381,7 @@ namespace KeePass.DataExchange
 			"secret", "secret word",
 			"key", "keyword", "key word", "keyphrase", "key phrase",
 			"form_pw", "wppassword", "pin", "pwd", "pw", "pword",
-			"serial", "serial#",
+			"p", "serial", @"serial#"
 		};
 
 		private static readonly string[] m_vUrls = {
@@ -387,6 +389,7 @@ namespace KeePass.DataExchange
 			"host", "address", "hyper ref", "href",
 			"web", "website", "web site", "site",
 
+			// Non-English names
 			"ort"
 		};
 
diff --git a/KeePass/DataExchange/Kdb3Manager.cs b/KeePass/DataExchange/Kdb3Manager.cs
index bc5e597..408ea0c 100644
--- a/KeePass/DataExchange/Kdb3Manager.cs
+++ b/KeePass/DataExchange/Kdb3Manager.cs
@@ -492,7 +492,7 @@ namespace KeePass.DataExchange
 	}
 
 	/// <summary>
-	/// Manager class for Kdb3 files. It can load/save databases, add/change/delete
+	/// Manager class for KDB3 files. It can load/save databases, add/change/delete
 	/// groups and entries, check for KeePassLibC library existence and version, etc.
 	/// </summary>
 	public sealed class Kdb3Manager
@@ -518,8 +518,6 @@ namespace KeePass.DataExchange
 		private static extern UInt32 GetKeePassVersion64();
 		/// <summary>
 		/// Get the KeePass version, which the KeePassLibC library supports.
-		/// Examples: KeePass version 1.05 is encoded as 0x01000501, version
-		/// 1.06 is 0x01000601.
 		/// </summary>
 		public static UInt32 KeePassVersion
 		{
diff --git a/KeePass/Ecas/EcasDefaultActionProvider.cs b/KeePass/Ecas/EcasDefaultActionProvider.cs
index a9b07c8..65d36c0 100644
--- a/KeePass/Ecas/EcasDefaultActionProvider.cs
+++ b/KeePass/Ecas/EcasDefaultActionProvider.cs
@@ -51,7 +51,8 @@ namespace KeePass.Ecas
 				0x9E, 0xEF, 0x2E, 0xBA, 0xCB, 0x6E, 0xE4, 0xC7 }),
 				KPRes.ExecuteCmdLineUrl, PwIcon.Console, new EcasParameter[] {
 					new EcasParameter(KPRes.FileOrUrl, EcasValueType.String, null),
-					new EcasParameter(KPRes.Arguments, EcasValueType.String, null) },
+					new EcasParameter(KPRes.Arguments, EcasValueType.String, null),
+					new EcasParameter(KPRes.WaitForExit, EcasValueType.Bool, null) },
 				ExecuteShellCmd));
 
 			m_actions.Add(new EcasActionType(new PwUuid(new byte[] {
@@ -145,13 +146,28 @@ namespace KeePass.Ecas
 		{
 			string strCmd = EcasUtil.GetParamString(a.Parameters, 0, true, true);
 			string strArgs = EcasUtil.GetParamString(a.Parameters, 1, true, true);
+			bool bWait = StrUtil.StringToBool(EcasUtil.GetParamString(a.Parameters,
+				2, string.Empty));
 
 			if(string.IsNullOrEmpty(strCmd)) return;
 
 			try
 			{
-				if(string.IsNullOrEmpty(strArgs)) Process.Start(strCmd);
-				else Process.Start(strCmd, strArgs);
+				Process p;
+				if(string.IsNullOrEmpty(strArgs)) p = Process.Start(strCmd);
+				else p = Process.Start(strCmd, strArgs);
+
+				if((p != null) && bWait)
+				{
+					Program.MainForm.UIBlockInteraction(true);
+					MessageService.ExternalIncrementMessageCount();
+
+					try { p.WaitForExit(); }
+					catch(Exception) { Debug.Assert(false); }
+
+					MessageService.ExternalDecrementMessageCount();
+					Program.MainForm.UIBlockInteraction(false);
+				}
 			}
 			catch(Exception e)
 			{
diff --git a/KeePass/Ecas/EcasDefaultConditionProvider.cs b/KeePass/Ecas/EcasDefaultConditionProvider.cs
index ed7d571..43dc23e 100644
--- a/KeePass/Ecas/EcasDefaultConditionProvider.cs
+++ b/KeePass/Ecas/EcasDefaultConditionProvider.cs
@@ -27,6 +27,7 @@ using System.Net.NetworkInformation;
 using KeePass.Resources;
 
 using KeePassLib;
+using KeePassLib.Serialization;
 
 namespace KeePass.Ecas
 {
@@ -58,8 +59,8 @@ namespace KeePass.Ecas
 				0xCB, 0x4A, 0x9E, 0x34, 0x56, 0x8C, 0x4C, 0x95,
 				0xAD, 0x67, 0x4D, 0x1C, 0xA1, 0x04, 0x19, 0xBC }),
 				KPRes.FileExists, PwIcon.PaperReady, new EcasParameter[] {
-					new EcasParameter(KPRes.File, EcasValueType.String, null) },
-				IsMatchFile));
+					new EcasParameter(KPRes.FileOrUrl, EcasValueType.String, null) },
+				IsMatchFileExists));
 
 			m_conditions.Add(new EcasConditionType(new PwUuid(new byte[] {
 				0x2A, 0x22, 0x83, 0xA8, 0x9D, 0x13, 0x41, 0xE8,
@@ -109,12 +110,18 @@ namespace KeePass.Ecas
 			return EcasUtil.CompareStrings(str, strValue, uCompareType);
 		}
 
-		private static bool IsMatchFile(EcasCondition c, EcasContext ctx)
+		private static bool IsMatchFileExists(EcasCondition c, EcasContext ctx)
 		{
 			string strFile = EcasUtil.GetParamString(c.Parameters, 0, true);
 			if(string.IsNullOrEmpty(strFile)) return true;
 
-			try { return File.Exists(strFile); }
+			try
+			{
+				// return File.Exists(strFile);
+
+				IOConnectionInfo ioc = IOConnectionInfo.FromPath(strFile);
+				return IOConnection.FileExists(ioc);
+			}
 			catch(Exception) { }
 
 			return false;
diff --git a/KeePass/Ecas/EcasDefaultEventProvider.cs b/KeePass/Ecas/EcasDefaultEventProvider.cs
index 01194ed..30455bc 100644
--- a/KeePass/Ecas/EcasDefaultEventProvider.cs
+++ b/KeePass/Ecas/EcasDefaultEventProvider.cs
@@ -43,6 +43,14 @@ namespace KeePass.Ecas
 			0xB3, 0xA8, 0xFD, 0xFE, 0x78, 0x13, 0x4A, 0x6A,
 			0x9C, 0x5D, 0xD5, 0xBA, 0x84, 0x3A, 0x9B, 0x8E
 		});
+		public static readonly PwUuid ClosingDatabaseFilePre = new PwUuid(new byte[] {
+			0x8C, 0xEA, 0xDE, 0x9A, 0xA8, 0x17, 0x49, 0x19,
+			0xA3, 0x2F, 0xF4, 0x1E, 0x3B, 0x1D, 0xEC, 0x49
+		});
+		public static readonly PwUuid ClosingDatabaseFilePost = new PwUuid(new byte[] {
+			0x94, 0xFA, 0x70, 0xE5, 0xB1, 0x3F, 0x41, 0x26,
+			0xA6, 0x4E, 0x06, 0x4F, 0xD8, 0xC3, 0x6C, 0x95
+		});
 		public static readonly PwUuid CopiedEntryInfo = new PwUuid(new byte[] {
 			0x3F, 0x7E, 0x5E, 0xC6, 0x2A, 0x54, 0x4C, 0x58,
 			0x95, 0x44, 0x85, 0xFB, 0xF2, 0x6F, 0x56, 0xDC
@@ -99,6 +107,12 @@ namespace KeePass.Ecas
 			m_events.Add(new EcasEventType(EcasEventIDs.SavedDatabaseFile,
 				KPRes.SavedDatabaseFile, PwIcon.Disk, epFileFilter,
 				IsMatchTextEvent));
+			m_events.Add(new EcasEventType(EcasEventIDs.ClosingDatabaseFilePre,
+				KPRes.ClosingDatabaseFile + " (" + KPRes.SavingPre + ")",
+				PwIcon.PaperQ, epFileFilter, IsMatchTextEvent));
+			m_events.Add(new EcasEventType(EcasEventIDs.ClosingDatabaseFilePost,
+				KPRes.ClosingDatabaseFile + " (" + KPRes.SavingPost + ")",
+				PwIcon.PaperQ, epFileFilter, IsMatchTextEvent));
 			m_events.Add(new EcasEventType(EcasEventIDs.CopiedEntryInfo,
 				KPRes.CopiedEntryData, PwIcon.ClipboardReady, epValueFilter,
 				IsMatchTextEvent));
diff --git a/KeePass/Forms/AboutForm.cs b/KeePass/Forms/AboutForm.cs
index 60fc343..67ba82f 100644
--- a/KeePass/Forms/AboutForm.cs
+++ b/KeePass/Forms/AboutForm.cs
@@ -73,7 +73,7 @@ namespace KeePass.Forms
 			m_lvComponents.Columns[0].Width = nWidth;
 			m_lvComponents.Columns[1].Width = nWidth + nMod;
 
-			UIUtil.SetExplorerTheme(m_lvComponents.Handle);
+			UIUtil.SetExplorerTheme(m_lvComponents, false);
 		}
 
 		private void OnFormClosed(object sender, FormClosedEventArgs e)
diff --git a/KeePass/Forms/AutoTypeCtxForm.cs b/KeePass/Forms/AutoTypeCtxForm.cs
index 79a2eb2..ed572f0 100644
--- a/KeePass/Forms/AutoTypeCtxForm.cs
+++ b/KeePass/Forms/AutoTypeCtxForm.cs
@@ -78,9 +78,7 @@ namespace KeePass.Forms
 
 			this.MinimumSize = new Size(550, 300);
 
-			UIUtil.SetExplorerTheme(m_lvItems.Handle);
-			if(UISystemFonts.ListFont != null)
-				m_lvItems.Font = UISystemFonts.ListFont;
+			UIUtil.SetExplorerTheme(m_lvItems, true);
 
 			if(m_ilIcons != null) m_lvItems.SmallImageList = m_ilIcons;
 			else { Debug.Assert(false); m_ilIcons = new ImageList(); }
diff --git a/KeePass/Forms/ColumnsForm.cs b/KeePass/Forms/ColumnsForm.cs
index e6aefc3..b8ea3ee 100644
--- a/KeePass/Forms/ColumnsForm.cs
+++ b/KeePass/Forms/ColumnsForm.cs
@@ -66,7 +66,7 @@ namespace KeePass.Forms
 			m_lvColumns.Columns.Add(KPRes.Asterisks + " ***", nWidth);
 			m_lvColumns.Columns.Add(KPRes.Toggle + " ***", nWidth);
 
-			UIUtil.SetExplorerTheme(m_lvColumns.Handle);
+			UIUtil.SetExplorerTheme(m_lvColumns, false);
 
 			ThreadPool.QueueUserWorkItem(new WaitCallback(FillColumnsList));
 
diff --git a/KeePass/Forms/CsvImportForm.Designer.cs b/KeePass/Forms/CsvImportForm.Designer.cs
new file mode 100644
index 0000000..29c899c
--- /dev/null
+++ b/KeePass/Forms/CsvImportForm.Designer.cs
@@ -0,0 +1,564 @@
+namespace KeePass.Forms
+{
+	partial class CsvImportForm
+	{
+		/// <summary>
+		/// Required designer variable.
+		/// </summary>
+		private System.ComponentModel.IContainer components = null;
+
+		/// <summary>
+		/// Clean up any resources being used.
+		/// </summary>
+		/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+		protected override void Dispose(bool disposing)
+		{
+			if(disposing && (components != null))
+			{
+				components.Dispose();
+			}
+			base.Dispose(disposing);
+		}
+
+		#region Windows Form Designer generated code
+
+		/// <summary>
+		/// Required method for Designer support - do not modify
+		/// the contents of this method with the code editor.
+		/// </summary>
+		private void InitializeComponent()
+		{
+			this.m_tabMain = new System.Windows.Forms.TabControl();
+			this.m_tabEnc = new System.Windows.Forms.TabPage();
+			this.m_rtbEncPreview = new System.Windows.Forms.RichTextBox();
+			this.m_lblEncPreview = new System.Windows.Forms.Label();
+			this.m_cmbEnc = new System.Windows.Forms.ComboBox();
+			this.m_lblEnc = new System.Windows.Forms.Label();
+			this.m_tabStructure = new System.Windows.Forms.TabPage();
+			this.m_grpSem = new System.Windows.Forms.GroupBox();
+			this.m_grpFieldAdd = new System.Windows.Forms.GroupBox();
+			this.m_btnFieldAdd = new System.Windows.Forms.Button();
+			this.m_linkFieldFormat = new System.Windows.Forms.LinkLabel();
+			this.m_cmbFieldFormat = new System.Windows.Forms.ComboBox();
+			this.m_lblFieldFormat = new System.Windows.Forms.Label();
+			this.m_tbFieldName = new System.Windows.Forms.TextBox();
+			this.m_lblFieldName = new System.Windows.Forms.Label();
+			this.m_cmbFieldType = new System.Windows.Forms.ComboBox();
+			this.m_lblFieldType = new System.Windows.Forms.Label();
+			this.m_btnFieldMoveDown = new System.Windows.Forms.Button();
+			this.m_btnFieldMoveUp = new System.Windows.Forms.Button();
+			this.m_btnFieldDel = new System.Windows.Forms.Button();
+			this.m_lblFields = new System.Windows.Forms.Label();
+			this.m_lvFields = new KeePass.UI.CustomListViewEx();
+			this.m_grpSyntax = new System.Windows.Forms.GroupBox();
+			this.m_cbIgnoreFirst = new System.Windows.Forms.CheckBox();
+			this.m_cbTrim = new System.Windows.Forms.CheckBox();
+			this.m_cmbTextQual = new System.Windows.Forms.ComboBox();
+			this.m_lblTextQual = new System.Windows.Forms.Label();
+			this.m_cbBackEscape = new System.Windows.Forms.CheckBox();
+			this.m_lblFieldSep = new System.Windows.Forms.Label();
+			this.m_cmbFieldSep = new System.Windows.Forms.ComboBox();
+			this.m_cmbRecSep = new System.Windows.Forms.ComboBox();
+			this.m_lblRecSep = new System.Windows.Forms.Label();
+			this.m_tabPreview = new System.Windows.Forms.TabPage();
+			this.m_lvImportPreview = new KeePass.UI.CustomListViewEx();
+			this.m_btnOK = new System.Windows.Forms.Button();
+			this.m_btnCancel = new System.Windows.Forms.Button();
+			this.m_btnTabBack = new System.Windows.Forms.Button();
+			this.m_btnTabNext = new System.Windows.Forms.Button();
+			this.m_tabMain.SuspendLayout();
+			this.m_tabEnc.SuspendLayout();
+			this.m_tabStructure.SuspendLayout();
+			this.m_grpSem.SuspendLayout();
+			this.m_grpFieldAdd.SuspendLayout();
+			this.m_grpSyntax.SuspendLayout();
+			this.m_tabPreview.SuspendLayout();
+			this.SuspendLayout();
+			// 
+			// m_tabMain
+			// 
+			this.m_tabMain.Controls.Add(this.m_tabEnc);
+			this.m_tabMain.Controls.Add(this.m_tabStructure);
+			this.m_tabMain.Controls.Add(this.m_tabPreview);
+			this.m_tabMain.Location = new System.Drawing.Point(12, 12);
+			this.m_tabMain.Name = "m_tabMain";
+			this.m_tabMain.SelectedIndex = 0;
+			this.m_tabMain.Size = new System.Drawing.Size(684, 462);
+			this.m_tabMain.TabIndex = 2;
+			this.m_tabMain.SelectedIndexChanged += new System.EventHandler(this.OnTabMainSelectedIndexChanged);
+			// 
+			// m_tabEnc
+			// 
+			this.m_tabEnc.Controls.Add(this.m_rtbEncPreview);
+			this.m_tabEnc.Controls.Add(this.m_lblEncPreview);
+			this.m_tabEnc.Controls.Add(this.m_cmbEnc);
+			this.m_tabEnc.Controls.Add(this.m_lblEnc);
+			this.m_tabEnc.Location = new System.Drawing.Point(4, 22);
+			this.m_tabEnc.Name = "m_tabEnc";
+			this.m_tabEnc.Padding = new System.Windows.Forms.Padding(3);
+			this.m_tabEnc.Size = new System.Drawing.Size(676, 436);
+			this.m_tabEnc.TabIndex = 0;
+			this.m_tabEnc.Text = "Encoding";
+			this.m_tabEnc.UseVisualStyleBackColor = true;
+			// 
+			// m_rtbEncPreview
+			// 
+			this.m_rtbEncPreview.AcceptsTab = true;
+			this.m_rtbEncPreview.DetectUrls = false;
+			this.m_rtbEncPreview.Location = new System.Drawing.Point(9, 60);
+			this.m_rtbEncPreview.Name = "m_rtbEncPreview";
+			this.m_rtbEncPreview.ReadOnly = true;
+			this.m_rtbEncPreview.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical;
+			this.m_rtbEncPreview.Size = new System.Drawing.Size(657, 366);
+			this.m_rtbEncPreview.TabIndex = 3;
+			this.m_rtbEncPreview.Text = "";
+			// 
+			// m_lblEncPreview
+			// 
+			this.m_lblEncPreview.AutoSize = true;
+			this.m_lblEncPreview.Location = new System.Drawing.Point(6, 44);
+			this.m_lblEncPreview.Name = "m_lblEncPreview";
+			this.m_lblEncPreview.Size = new System.Drawing.Size(71, 13);
+			this.m_lblEncPreview.TabIndex = 2;
+			this.m_lblEncPreview.Text = "Text preview:";
+			// 
+			// m_cmbEnc
+			// 
+			this.m_cmbEnc.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+			this.m_cmbEnc.FormattingEnabled = true;
+			this.m_cmbEnc.Location = new System.Drawing.Point(91, 13);
+			this.m_cmbEnc.Name = "m_cmbEnc";
+			this.m_cmbEnc.Size = new System.Drawing.Size(298, 21);
+			this.m_cmbEnc.TabIndex = 1;
+			this.m_cmbEnc.SelectedIndexChanged += new System.EventHandler(this.OnEncSelectedIndexChanged);
+			// 
+			// m_lblEnc
+			// 
+			this.m_lblEnc.AutoSize = true;
+			this.m_lblEnc.Location = new System.Drawing.Point(6, 16);
+			this.m_lblEnc.Name = "m_lblEnc";
+			this.m_lblEnc.Size = new System.Drawing.Size(78, 13);
+			this.m_lblEnc.TabIndex = 0;
+			this.m_lblEnc.Text = "Text encoding:";
+			// 
+			// m_tabStructure
+			// 
+			this.m_tabStructure.Controls.Add(this.m_grpSem);
+			this.m_tabStructure.Controls.Add(this.m_grpSyntax);
+			this.m_tabStructure.Location = new System.Drawing.Point(4, 22);
+			this.m_tabStructure.Name = "m_tabStructure";
+			this.m_tabStructure.Padding = new System.Windows.Forms.Padding(3);
+			this.m_tabStructure.Size = new System.Drawing.Size(676, 436);
+			this.m_tabStructure.TabIndex = 1;
+			this.m_tabStructure.Text = "Structure";
+			this.m_tabStructure.UseVisualStyleBackColor = true;
+			// 
+			// m_grpSem
+			// 
+			this.m_grpSem.Controls.Add(this.m_grpFieldAdd);
+			this.m_grpSem.Controls.Add(this.m_btnFieldMoveDown);
+			this.m_grpSem.Controls.Add(this.m_btnFieldMoveUp);
+			this.m_grpSem.Controls.Add(this.m_btnFieldDel);
+			this.m_grpSem.Controls.Add(this.m_lblFields);
+			this.m_grpSem.Controls.Add(this.m_lvFields);
+			this.m_grpSem.Location = new System.Drawing.Point(6, 140);
+			this.m_grpSem.Name = "m_grpSem";
+			this.m_grpSem.Size = new System.Drawing.Size(662, 290);
+			this.m_grpSem.TabIndex = 1;
+			this.m_grpSem.TabStop = false;
+			this.m_grpSem.Text = "Semantics";
+			// 
+			// m_grpFieldAdd
+			// 
+			this.m_grpFieldAdd.Controls.Add(this.m_btnFieldAdd);
+			this.m_grpFieldAdd.Controls.Add(this.m_linkFieldFormat);
+			this.m_grpFieldAdd.Controls.Add(this.m_cmbFieldFormat);
+			this.m_grpFieldAdd.Controls.Add(this.m_lblFieldFormat);
+			this.m_grpFieldAdd.Controls.Add(this.m_tbFieldName);
+			this.m_grpFieldAdd.Controls.Add(this.m_lblFieldName);
+			this.m_grpFieldAdd.Controls.Add(this.m_cmbFieldType);
+			this.m_grpFieldAdd.Controls.Add(this.m_lblFieldType);
+			this.m_grpFieldAdd.Location = new System.Drawing.Point(380, 143);
+			this.m_grpFieldAdd.Name = "m_grpFieldAdd";
+			this.m_grpFieldAdd.Size = new System.Drawing.Size(272, 137);
+			this.m_grpFieldAdd.TabIndex = 5;
+			this.m_grpFieldAdd.TabStop = false;
+			this.m_grpFieldAdd.Text = "Add field";
+			// 
+			// m_btnFieldAdd
+			// 
+			this.m_btnFieldAdd.Location = new System.Drawing.Point(188, 103);
+			this.m_btnFieldAdd.Name = "m_btnFieldAdd";
+			this.m_btnFieldAdd.Size = new System.Drawing.Size(75, 23);
+			this.m_btnFieldAdd.TabIndex = 7;
+			this.m_btnFieldAdd.Text = "&Add";
+			this.m_btnFieldAdd.UseVisualStyleBackColor = true;
+			this.m_btnFieldAdd.Click += new System.EventHandler(this.OnBtnFieldAdd);
+			// 
+			// m_linkFieldFormat
+			// 
+			this.m_linkFieldFormat.AutoSize = true;
+			this.m_linkFieldFormat.Location = new System.Drawing.Point(234, 75);
+			this.m_linkFieldFormat.Name = "m_linkFieldFormat";
+			this.m_linkFieldFormat.Size = new System.Drawing.Size(29, 13);
+			this.m_linkFieldFormat.TabIndex = 6;
+			this.m_linkFieldFormat.TabStop = true;
+			this.m_linkFieldFormat.Text = "Help";
+			this.m_linkFieldFormat.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.OnFieldFormatLinkClicked);
+			// 
+			// m_cmbFieldFormat
+			// 
+			this.m_cmbFieldFormat.FormattingEnabled = true;
+			this.m_cmbFieldFormat.Location = new System.Drawing.Point(74, 72);
+			this.m_cmbFieldFormat.Name = "m_cmbFieldFormat";
+			this.m_cmbFieldFormat.Size = new System.Drawing.Size(154, 21);
+			this.m_cmbFieldFormat.TabIndex = 5;
+			// 
+			// m_lblFieldFormat
+			// 
+			this.m_lblFieldFormat.AutoSize = true;
+			this.m_lblFieldFormat.Location = new System.Drawing.Point(6, 75);
+			this.m_lblFieldFormat.Name = "m_lblFieldFormat";
+			this.m_lblFieldFormat.Size = new System.Drawing.Size(42, 13);
+			this.m_lblFieldFormat.TabIndex = 4;
+			this.m_lblFieldFormat.Text = "Format:";
+			// 
+			// m_tbFieldName
+			// 
+			this.m_tbFieldName.Location = new System.Drawing.Point(74, 46);
+			this.m_tbFieldName.Name = "m_tbFieldName";
+			this.m_tbFieldName.Size = new System.Drawing.Size(189, 20);
+			this.m_tbFieldName.TabIndex = 3;
+			// 
+			// m_lblFieldName
+			// 
+			this.m_lblFieldName.AutoSize = true;
+			this.m_lblFieldName.Location = new System.Drawing.Point(6, 49);
+			this.m_lblFieldName.Name = "m_lblFieldName";
+			this.m_lblFieldName.Size = new System.Drawing.Size(38, 13);
+			this.m_lblFieldName.TabIndex = 2;
+			this.m_lblFieldName.Text = "Name:";
+			// 
+			// m_cmbFieldType
+			// 
+			this.m_cmbFieldType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+			this.m_cmbFieldType.FormattingEnabled = true;
+			this.m_cmbFieldType.Location = new System.Drawing.Point(74, 19);
+			this.m_cmbFieldType.Name = "m_cmbFieldType";
+			this.m_cmbFieldType.Size = new System.Drawing.Size(189, 21);
+			this.m_cmbFieldType.TabIndex = 1;
+			this.m_cmbFieldType.SelectedIndexChanged += new System.EventHandler(this.OnFieldTypeSelectedIndexChanged);
+			// 
+			// m_lblFieldType
+			// 
+			this.m_lblFieldType.AutoSize = true;
+			this.m_lblFieldType.Location = new System.Drawing.Point(6, 22);
+			this.m_lblFieldType.Name = "m_lblFieldType";
+			this.m_lblFieldType.Size = new System.Drawing.Size(34, 13);
+			this.m_lblFieldType.TabIndex = 0;
+			this.m_lblFieldType.Text = "Type:";
+			// 
+			// m_btnFieldMoveDown
+			// 
+			this.m_btnFieldMoveDown.Image = global::KeePass.Properties.Resources.B16x16_1DownArrow;
+			this.m_btnFieldMoveDown.Location = new System.Drawing.Point(380, 96);
+			this.m_btnFieldMoveDown.Name = "m_btnFieldMoveDown";
+			this.m_btnFieldMoveDown.Size = new System.Drawing.Size(75, 23);
+			this.m_btnFieldMoveDown.TabIndex = 4;
+			this.m_btnFieldMoveDown.UseVisualStyleBackColor = true;
+			this.m_btnFieldMoveDown.Click += new System.EventHandler(this.OnBtnFieldMoveDown);
+			// 
+			// m_btnFieldMoveUp
+			// 
+			this.m_btnFieldMoveUp.Image = global::KeePass.Properties.Resources.B16x16_1UpArrow;
+			this.m_btnFieldMoveUp.Location = new System.Drawing.Point(380, 67);
+			this.m_btnFieldMoveUp.Name = "m_btnFieldMoveUp";
+			this.m_btnFieldMoveUp.Size = new System.Drawing.Size(75, 23);
+			this.m_btnFieldMoveUp.TabIndex = 3;
+			this.m_btnFieldMoveUp.UseVisualStyleBackColor = true;
+			this.m_btnFieldMoveUp.Click += new System.EventHandler(this.OnBtnFieldMoveUp);
+			// 
+			// m_btnFieldDel
+			// 
+			this.m_btnFieldDel.Location = new System.Drawing.Point(380, 38);
+			this.m_btnFieldDel.Name = "m_btnFieldDel";
+			this.m_btnFieldDel.Size = new System.Drawing.Size(75, 23);
+			this.m_btnFieldDel.TabIndex = 2;
+			this.m_btnFieldDel.Text = "&Delete";
+			this.m_btnFieldDel.UseVisualStyleBackColor = true;
+			this.m_btnFieldDel.Click += new System.EventHandler(this.OnBtnFieldDel);
+			// 
+			// m_lblFields
+			// 
+			this.m_lblFields.AutoSize = true;
+			this.m_lblFields.Location = new System.Drawing.Point(6, 22);
+			this.m_lblFields.Name = "m_lblFields";
+			this.m_lblFields.Size = new System.Drawing.Size(268, 13);
+			this.m_lblFields.TabIndex = 0;
+			this.m_lblFields.Text = "Specify the layout (fields and their order) of the CSV file:";
+			// 
+			// m_lvFields
+			// 
+			this.m_lvFields.FullRowSelect = true;
+			this.m_lvFields.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+			this.m_lvFields.HideSelection = false;
+			this.m_lvFields.Location = new System.Drawing.Point(9, 38);
+			this.m_lvFields.Name = "m_lvFields";
+			this.m_lvFields.ShowItemToolTips = true;
+			this.m_lvFields.Size = new System.Drawing.Size(365, 242);
+			this.m_lvFields.TabIndex = 1;
+			this.m_lvFields.UseCompatibleStateImageBehavior = false;
+			this.m_lvFields.View = System.Windows.Forms.View.Details;
+			this.m_lvFields.SelectedIndexChanged += new System.EventHandler(this.OnFieldsSelectedIndexChanged);
+			// 
+			// m_grpSyntax
+			// 
+			this.m_grpSyntax.Controls.Add(this.m_cbIgnoreFirst);
+			this.m_grpSyntax.Controls.Add(this.m_cbTrim);
+			this.m_grpSyntax.Controls.Add(this.m_cmbTextQual);
+			this.m_grpSyntax.Controls.Add(this.m_lblTextQual);
+			this.m_grpSyntax.Controls.Add(this.m_cbBackEscape);
+			this.m_grpSyntax.Controls.Add(this.m_lblFieldSep);
+			this.m_grpSyntax.Controls.Add(this.m_cmbFieldSep);
+			this.m_grpSyntax.Controls.Add(this.m_cmbRecSep);
+			this.m_grpSyntax.Controls.Add(this.m_lblRecSep);
+			this.m_grpSyntax.Location = new System.Drawing.Point(6, 13);
+			this.m_grpSyntax.Name = "m_grpSyntax";
+			this.m_grpSyntax.Size = new System.Drawing.Size(662, 121);
+			this.m_grpSyntax.TabIndex = 0;
+			this.m_grpSyntax.TabStop = false;
+			this.m_grpSyntax.Text = "Syntax";
+			// 
+			// m_cbIgnoreFirst
+			// 
+			this.m_cbIgnoreFirst.AutoSize = true;
+			this.m_cbIgnoreFirst.Location = new System.Drawing.Point(9, 73);
+			this.m_cbIgnoreFirst.Name = "m_cbIgnoreFirst";
+			this.m_cbIgnoreFirst.Size = new System.Drawing.Size(95, 17);
+			this.m_cbIgnoreFirst.TabIndex = 7;
+			this.m_cbIgnoreFirst.Text = "Ignore first row";
+			this.m_cbIgnoreFirst.UseVisualStyleBackColor = true;
+			// 
+			// m_cbTrim
+			// 
+			this.m_cbTrim.AutoSize = true;
+			this.m_cbTrim.Checked = true;
+			this.m_cbTrim.CheckState = System.Windows.Forms.CheckState.Checked;
+			this.m_cbTrim.Location = new System.Drawing.Point(9, 96);
+			this.m_cbTrim.Name = "m_cbTrim";
+			this.m_cbTrim.Size = new System.Drawing.Size(331, 17);
+			this.m_cbTrim.TabIndex = 8;
+			this.m_cbTrim.Text = "Remove white space characters from the beginning/end of fields";
+			this.m_cbTrim.UseVisualStyleBackColor = true;
+			// 
+			// m_cmbTextQual
+			// 
+			this.m_cmbTextQual.FormattingEnabled = true;
+			this.m_cmbTextQual.Location = new System.Drawing.Point(91, 46);
+			this.m_cmbTextQual.Name = "m_cmbTextQual";
+			this.m_cmbTextQual.Size = new System.Drawing.Size(112, 21);
+			this.m_cmbTextQual.TabIndex = 5;
+			this.m_cmbTextQual.SelectedIndexChanged += new System.EventHandler(this.OnTextQualSelectedIndexChanged);
+			this.m_cmbTextQual.TextUpdate += new System.EventHandler(this.OnTextQualTextUpdate);
+			// 
+			// m_lblTextQual
+			// 
+			this.m_lblTextQual.AutoSize = true;
+			this.m_lblTextQual.Location = new System.Drawing.Point(6, 49);
+			this.m_lblTextQual.Name = "m_lblTextQual";
+			this.m_lblTextQual.Size = new System.Drawing.Size(70, 13);
+			this.m_lblTextQual.TabIndex = 4;
+			this.m_lblTextQual.Text = "Text qualifier:";
+			// 
+			// m_cbBackEscape
+			// 
+			this.m_cbBackEscape.AutoSize = true;
+			this.m_cbBackEscape.Checked = true;
+			this.m_cbBackEscape.CheckState = System.Windows.Forms.CheckState.Checked;
+			this.m_cbBackEscape.Location = new System.Drawing.Point(248, 48);
+			this.m_cbBackEscape.Name = "m_cbBackEscape";
+			this.m_cbBackEscape.Size = new System.Drawing.Size(192, 17);
+			this.m_cbBackEscape.TabIndex = 6;
+			this.m_cbBackEscape.Text = "Interpret \'\\\' as an escape character";
+			this.m_cbBackEscape.UseVisualStyleBackColor = true;
+			// 
+			// m_lblFieldSep
+			// 
+			this.m_lblFieldSep.AutoSize = true;
+			this.m_lblFieldSep.Location = new System.Drawing.Point(6, 22);
+			this.m_lblFieldSep.Name = "m_lblFieldSep";
+			this.m_lblFieldSep.Size = new System.Drawing.Size(79, 13);
+			this.m_lblFieldSep.TabIndex = 0;
+			this.m_lblFieldSep.Text = "Field separator:";
+			// 
+			// m_cmbFieldSep
+			// 
+			this.m_cmbFieldSep.FormattingEnabled = true;
+			this.m_cmbFieldSep.Location = new System.Drawing.Point(91, 19);
+			this.m_cmbFieldSep.Name = "m_cmbFieldSep";
+			this.m_cmbFieldSep.Size = new System.Drawing.Size(112, 21);
+			this.m_cmbFieldSep.TabIndex = 1;
+			this.m_cmbFieldSep.SelectedIndexChanged += new System.EventHandler(this.OnFieldSepSelectedIndexChanged);
+			this.m_cmbFieldSep.TextUpdate += new System.EventHandler(this.OnFieldSepTextUpdate);
+			// 
+			// m_cmbRecSep
+			// 
+			this.m_cmbRecSep.FormattingEnabled = true;
+			this.m_cmbRecSep.Location = new System.Drawing.Point(343, 19);
+			this.m_cmbRecSep.Name = "m_cmbRecSep";
+			this.m_cmbRecSep.Size = new System.Drawing.Size(112, 21);
+			this.m_cmbRecSep.TabIndex = 3;
+			this.m_cmbRecSep.SelectedIndexChanged += new System.EventHandler(this.OnRecSepSelectedIndexChanged);
+			this.m_cmbRecSep.TextUpdate += new System.EventHandler(this.OnRecSepTextUpdate);
+			// 
+			// m_lblRecSep
+			// 
+			this.m_lblRecSep.AutoSize = true;
+			this.m_lblRecSep.Location = new System.Drawing.Point(245, 22);
+			this.m_lblRecSep.Name = "m_lblRecSep";
+			this.m_lblRecSep.Size = new System.Drawing.Size(92, 13);
+			this.m_lblRecSep.TabIndex = 2;
+			this.m_lblRecSep.Text = "Record separator:";
+			// 
+			// m_tabPreview
+			// 
+			this.m_tabPreview.Controls.Add(this.m_lvImportPreview);
+			this.m_tabPreview.Location = new System.Drawing.Point(4, 22);
+			this.m_tabPreview.Name = "m_tabPreview";
+			this.m_tabPreview.Size = new System.Drawing.Size(676, 436);
+			this.m_tabPreview.TabIndex = 2;
+			this.m_tabPreview.Text = "Preview";
+			this.m_tabPreview.UseVisualStyleBackColor = true;
+			// 
+			// m_lvImportPreview
+			// 
+			this.m_lvImportPreview.FullRowSelect = true;
+			this.m_lvImportPreview.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
+			this.m_lvImportPreview.HideSelection = false;
+			this.m_lvImportPreview.Location = new System.Drawing.Point(6, 13);
+			this.m_lvImportPreview.Name = "m_lvImportPreview";
+			this.m_lvImportPreview.ShowItemToolTips = true;
+			this.m_lvImportPreview.Size = new System.Drawing.Size(662, 416);
+			this.m_lvImportPreview.TabIndex = 0;
+			this.m_lvImportPreview.UseCompatibleStateImageBehavior = false;
+			this.m_lvImportPreview.View = System.Windows.Forms.View.Details;
+			// 
+			// m_btnOK
+			// 
+			this.m_btnOK.DialogResult = System.Windows.Forms.DialogResult.OK;
+			this.m_btnOK.Location = new System.Drawing.Point(540, 480);
+			this.m_btnOK.Name = "m_btnOK";
+			this.m_btnOK.Size = new System.Drawing.Size(75, 23);
+			this.m_btnOK.TabIndex = 0;
+			this.m_btnOK.Text = "&Finish";
+			this.m_btnOK.UseVisualStyleBackColor = true;
+			this.m_btnOK.Click += new System.EventHandler(this.OnBtnOK);
+			// 
+			// m_btnCancel
+			// 
+			this.m_btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+			this.m_btnCancel.Location = new System.Drawing.Point(621, 480);
+			this.m_btnCancel.Name = "m_btnCancel";
+			this.m_btnCancel.Size = new System.Drawing.Size(75, 23);
+			this.m_btnCancel.TabIndex = 1;
+			this.m_btnCancel.Text = "&Cancel";
+			this.m_btnCancel.UseVisualStyleBackColor = true;
+			// 
+			// m_btnTabBack
+			// 
+			this.m_btnTabBack.Location = new System.Drawing.Point(384, 480);
+			this.m_btnTabBack.Name = "m_btnTabBack";
+			this.m_btnTabBack.Size = new System.Drawing.Size(75, 23);
+			this.m_btnTabBack.TabIndex = 3;
+			this.m_btnTabBack.Text = "< &Back";
+			this.m_btnTabBack.UseVisualStyleBackColor = true;
+			this.m_btnTabBack.Click += new System.EventHandler(this.OnBtnTabBack);
+			// 
+			// m_btnTabNext
+			// 
+			this.m_btnTabNext.Location = new System.Drawing.Point(459, 480);
+			this.m_btnTabNext.Name = "m_btnTabNext";
+			this.m_btnTabNext.Size = new System.Drawing.Size(75, 23);
+			this.m_btnTabNext.TabIndex = 4;
+			this.m_btnTabNext.Text = "&Next >";
+			this.m_btnTabNext.UseVisualStyleBackColor = true;
+			this.m_btnTabNext.Click += new System.EventHandler(this.OnBtnTabNext);
+			// 
+			// CsvImportForm
+			// 
+			this.AcceptButton = this.m_btnOK;
+			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+			this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+			this.CancelButton = this.m_btnCancel;
+			this.ClientSize = new System.Drawing.Size(708, 515);
+			this.Controls.Add(this.m_btnTabNext);
+			this.Controls.Add(this.m_btnTabBack);
+			this.Controls.Add(this.m_btnCancel);
+			this.Controls.Add(this.m_btnOK);
+			this.Controls.Add(this.m_tabMain);
+			this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
+			this.MaximizeBox = false;
+			this.MinimizeBox = false;
+			this.Name = "CsvImportForm";
+			this.ShowInTaskbar = false;
+			this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+			this.Text = "<>";
+			this.Load += new System.EventHandler(this.OnFormLoad);
+			this.FormClosed += new System.Windows.Forms.FormClosedEventHandler(this.OnFormClosed);
+			this.m_tabMain.ResumeLayout(false);
+			this.m_tabEnc.ResumeLayout(false);
+			this.m_tabEnc.PerformLayout();
+			this.m_tabStructure.ResumeLayout(false);
+			this.m_grpSem.ResumeLayout(false);
+			this.m_grpSem.PerformLayout();
+			this.m_grpFieldAdd.ResumeLayout(false);
+			this.m_grpFieldAdd.PerformLayout();
+			this.m_grpSyntax.ResumeLayout(false);
+			this.m_grpSyntax.PerformLayout();
+			this.m_tabPreview.ResumeLayout(false);
+			this.ResumeLayout(false);
+
+		}
+
+		#endregion
+
+		private System.Windows.Forms.TabControl m_tabMain;
+		private System.Windows.Forms.TabPage m_tabEnc;
+		private System.Windows.Forms.TabPage m_tabStructure;
+		private System.Windows.Forms.Button m_btnOK;
+		private System.Windows.Forms.Button m_btnCancel;
+		private System.Windows.Forms.TabPage m_tabPreview;
+		private System.Windows.Forms.ComboBox m_cmbEnc;
+		private System.Windows.Forms.Label m_lblEnc;
+		private System.Windows.Forms.RichTextBox m_rtbEncPreview;
+		private System.Windows.Forms.Label m_lblEncPreview;
+		private System.Windows.Forms.ComboBox m_cmbRecSep;
+		private System.Windows.Forms.Label m_lblRecSep;
+		private System.Windows.Forms.Label m_lblFieldSep;
+		private System.Windows.Forms.ComboBox m_cmbFieldSep;
+		private System.Windows.Forms.GroupBox m_grpSyntax;
+		private System.Windows.Forms.GroupBox m_grpSem;
+		private System.Windows.Forms.Button m_btnFieldDel;
+		private System.Windows.Forms.Label m_lblFields;
+		private KeePass.UI.CustomListViewEx m_lvFields;
+		private System.Windows.Forms.GroupBox m_grpFieldAdd;
+		private System.Windows.Forms.Label m_lblFieldFormat;
+		private System.Windows.Forms.TextBox m_tbFieldName;
+		private System.Windows.Forms.Label m_lblFieldName;
+		private System.Windows.Forms.ComboBox m_cmbFieldType;
+		private System.Windows.Forms.Label m_lblFieldType;
+		private System.Windows.Forms.Button m_btnFieldMoveDown;
+		private System.Windows.Forms.Button m_btnFieldMoveUp;
+		private System.Windows.Forms.Button m_btnFieldAdd;
+		private System.Windows.Forms.LinkLabel m_linkFieldFormat;
+		private System.Windows.Forms.ComboBox m_cmbFieldFormat;
+		private KeePass.UI.CustomListViewEx m_lvImportPreview;
+		private System.Windows.Forms.CheckBox m_cbBackEscape;
+		private System.Windows.Forms.ComboBox m_cmbTextQual;
+		private System.Windows.Forms.Label m_lblTextQual;
+		private System.Windows.Forms.CheckBox m_cbTrim;
+		private System.Windows.Forms.Button m_btnTabBack;
+		private System.Windows.Forms.Button m_btnTabNext;
+		private System.Windows.Forms.CheckBox m_cbIgnoreFirst;
+	}
+}
\ No newline at end of file
diff --git a/KeePass/Forms/CsvImportForm.cs b/KeePass/Forms/CsvImportForm.cs
new file mode 100644
index 0000000..e73ff20
--- /dev/null
+++ b/KeePass/Forms/CsvImportForm.cs
@@ -0,0 +1,776 @@
+/*
+  KeePass Password Safe - The Open-Source Password Manager
+  Copyright (C) 2003-2012 Dominik Reichl <dominik.reichl at t-online.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Drawing;
+using System.Text;
+using System.Windows.Forms;
+using System.Globalization;
+using System.Diagnostics;
+
+using KeePass.App;
+using KeePass.DataExchange;
+using KeePass.Resources;
+using KeePass.UI;
+using KeePass.Util;
+
+using KeePassLib;
+using KeePassLib.Utility;
+
+namespace KeePass.Forms
+{
+	public partial class CsvImportForm : Form
+	{
+		private byte[] m_pbData = null;
+		private PwDatabase m_pwDatabase = null;
+
+		private bool m_bInitializing = false;
+		private uint m_uStartOffset = 0;
+
+		private readonly string StrCharTab = @"{Tab}";
+		private readonly string StrCharNewLine = @"{" + KPRes.NewLine + @"}";
+
+		private enum CsvFieldType
+		{
+			Ignore = 0,
+			GroupName,
+			Title,
+			UserName,
+			Password,
+			Url,
+			Notes,
+			CustomString,
+			CreationTime,
+			LastAccessTime,
+			LastModTime,
+			ExpiryTime,
+
+			Count, // Last enum item + 1
+			First = 0
+		}
+
+		private sealed class CsvFieldInfo
+		{
+			private readonly CsvFieldType m_t;
+			public CsvFieldType Type { get { return m_t; } }
+
+			private readonly string m_strName;
+			public string Name { get { return m_strName; } }
+
+			private readonly string m_strFormat;
+			public string Format { get { return m_strFormat; } }
+
+			public CsvFieldInfo(CsvFieldType t, string strName, string strFormat)
+			{
+				m_t = t;
+				m_strName = strName; // May be null
+				m_strFormat = strFormat; // May be null
+			}
+		}
+
+		public void InitEx(PwDatabase pwStorage, byte[] pbInData)
+		{
+			m_pwDatabase = pwStorage;
+			m_pbData = pbInData;
+		}
+
+		public CsvImportForm()
+		{
+			InitializeComponent();
+			Program.Translation.ApplyTo(this);
+		}
+
+		private void OnFormLoad(object sender, EventArgs e)
+		{
+			if((m_pbData == null) || (m_pwDatabase == null))
+				throw new InvalidOperationException();
+
+			m_bInitializing = true;
+
+			GlobalWindowManager.AddWindow(this);
+
+			this.Icon = Properties.Resources.KeePass;
+			this.Text = KPRes.GenericCsvImporter + " - " + PwDefs.ShortProductName;
+
+			// FontUtil.AssignDefaultBold(m_grpSyntax);
+			// FontUtil.AssignDefaultBold(m_grpSem);
+
+			UIUtil.SetExplorerTheme(m_lvFields, false);
+			UIUtil.SetExplorerTheme(m_lvImportPreview, false);
+
+			foreach(StrEncodingInfo seiEnum in StrUtil.Encodings)
+			{
+				m_cmbEnc.Items.Add(seiEnum.Name);
+			}
+
+			StrEncodingInfo seiGuess = BinaryDataClassifier.GetStringEncoding(
+				m_pbData, out m_uStartOffset);
+
+			int iSel = 0;
+			if(seiGuess != null)
+				iSel = Math.Max(m_cmbEnc.FindStringExact(seiGuess.Name), 0);
+			m_cmbEnc.SelectedIndex = iSel;
+
+			string[] vChars = new string[] { ",", ";", ".", ":", "\"", @"'",
+				StrCharTab, StrCharNewLine };
+			foreach(string strChar in vChars)
+			{
+				m_cmbFieldSep.Items.Add(strChar);
+				m_cmbRecSep.Items.Add(strChar);
+				m_cmbTextQual.Items.Add(strChar);
+			}
+			m_cmbFieldSep.SelectedIndex = 0;
+			m_cmbRecSep.SelectedIndex = 7;
+			m_cmbTextQual.SelectedIndex = 4;
+
+			m_lvFields.Columns.Add(KPRes.Field);
+
+			AddCsvField(CsvFieldType.Title, null, null);
+			AddCsvField(CsvFieldType.UserName, null, null);
+			AddCsvField(CsvFieldType.Password, null, null);
+			AddCsvField(CsvFieldType.Url, null, null);
+			AddCsvField(CsvFieldType.Notes, null, null);
+
+			for(int i = (int)CsvFieldType.First; i < (int)CsvFieldType.Count; ++i)
+				m_cmbFieldType.Items.Add(CsvFieldToString((CsvFieldType)i));
+			m_cmbFieldType.SelectedIndex = (int)CsvFieldType.GroupName;
+
+			string[] vFormats = new string[] { @"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzz",
+				@"ddd, dd MMM yyyy HH':'mm':'ss 'GMT'", @"yyyy'-'MM'-'dd'T'HH':'mm':'ss",
+				@"yyyy'-'MM'-'dd HH':'mm':'ss'Z'",
+				@"yyyy/MM/dd HH:mm:ss",
+				@"yyyy/MM/dd", @"MM/dd/yy", @"MMMM dd, yyyy", @"MM/dd/yy H:mm:ss zzz"
+			};
+			foreach(string strFormat in vFormats)
+			{
+				m_cmbFieldFormat.Items.Add(strFormat);
+			}
+			m_cmbFieldFormat.Text = string.Empty;
+
+			m_bInitializing = false;
+
+			UpdateTextPreview();
+			UpdateImportPreview();
+			GuessFieldTypes();
+
+			ProcessResize();
+			EnableControlsEx();
+
+			UIUtil.SetFocus(m_btnTabNext, this);
+		}
+
+		private void OnFormClosed(object sender, FormClosedEventArgs e)
+		{
+			GlobalWindowManager.RemoveWindow(this);
+		}
+
+		private void EnableControlsEx()
+		{
+			if(m_bInitializing) return;
+
+			bool bSelField = (m_lvFields.SelectedIndices.Count >= 1);
+			bool bSel1Field = (m_lvFields.SelectedIndices.Count == 1);
+			m_btnFieldDel.Enabled = bSelField;
+			m_btnFieldMoveUp.Enabled = bSel1Field;
+			m_btnFieldMoveDown.Enabled = bSel1Field;
+
+			bool bFieldName, bFieldFormat;
+			GetCsvFieldType(out bFieldName, out bFieldFormat);
+			m_lblFieldName.Enabled = bFieldName;
+			m_tbFieldName.Enabled = bFieldName;
+			m_lblFieldFormat.Enabled = bFieldFormat;
+			m_cmbFieldFormat.Enabled = bFieldFormat;
+			m_linkFieldFormat.Enabled = bFieldFormat;
+
+			int iTab = m_tabMain.SelectedIndex, nTabs = m_tabMain.TabCount;
+			m_btnTabBack.Enabled = (iTab > 0);
+			m_btnTabNext.Enabled = (iTab < (nTabs - 1));
+
+			bool bValidFieldSep = (GetCharFromDef(m_cmbFieldSep.Text) != char.MinValue);
+			bool bValidRecSep = (GetCharFromDef(m_cmbRecSep.Text) != char.MinValue);
+			bool bValidTextQual = (GetCharFromDef(m_cmbTextQual.Text) != char.MinValue);
+
+			if(bValidFieldSep) m_cmbFieldSep.ResetBackColor();
+			else m_cmbFieldSep.BackColor = AppDefs.ColorEditError;
+			if(bValidRecSep) m_cmbRecSep.ResetBackColor();
+			else m_cmbRecSep.BackColor = AppDefs.ColorEditError;
+			if(bValidTextQual) m_cmbTextQual.ResetBackColor();
+			else m_cmbTextQual.BackColor = AppDefs.ColorEditError;
+
+			bool bOK = true;
+			bOK &= (iTab == (nTabs - 1));
+			bOK &= (bValidFieldSep && bValidRecSep && bValidTextQual);
+			m_btnOK.Enabled = bOK;
+		}
+
+		private string GetDecodedText()
+		{
+			StrEncodingInfo sei = StrUtil.GetEncoding(m_cmbEnc.Text);
+			try
+			{
+				return (sei.Encoding.GetString(m_pbData, (int)m_uStartOffset,
+					m_pbData.Length - (int)m_uStartOffset) ?? string.Empty);
+			}
+			catch(Exception) { }
+
+			return string.Empty;
+		}
+
+		private void UpdateTextPreview()
+		{
+			if(m_bInitializing) return;
+
+			m_rtbEncPreview.Clear(); // Clear formatting
+			m_rtbEncPreview.Text = GetDecodedText();
+		}
+
+		private void UpdateImportPreview()
+		{
+			if(m_bInitializing) return;
+
+			PerformImport(new PwGroup(true, true), true);
+		}
+
+		private void ProcessResize()
+		{
+			if(m_bInitializing) return;
+
+			int dx = m_lvFields.ClientRectangle.Width;
+			m_lvFields.Columns[0].Width = dx -
+				UIUtil.GetVScrollBarWidth(); // Add some space for usability
+
+			dx = m_lvImportPreview.ClientRectangle.Width;
+			int nCols = m_lvImportPreview.Columns.Count;
+			for(int c = 0; c < nCols; ++c)
+				m_lvImportPreview.Columns[c].Width = dx / nCols;
+		}
+
+		private static string CsvFieldToString(CsvFieldType t)
+		{
+			string strText;
+			if(t == CsvFieldType.Ignore) strText = "(" + KPRes.Ignore + ")";
+			else if(t == CsvFieldType.GroupName) strText = KPRes.Group;
+			else if(t == CsvFieldType.Title) strText = KPRes.Title;
+			else if(t == CsvFieldType.UserName) strText = KPRes.UserName;
+			else if(t == CsvFieldType.Password) strText = KPRes.Password;
+			else if(t == CsvFieldType.Url) strText = KPRes.Url;
+			else if(t == CsvFieldType.Notes) strText = KPRes.Notes;
+			else if(t == CsvFieldType.CustomString)
+				strText = KPRes.String;
+			else if(t == CsvFieldType.CreationTime)
+				strText = KPRes.CreationTime;
+			else if(t == CsvFieldType.LastAccessTime)
+				strText = KPRes.LastAccessTime;
+			else if(t == CsvFieldType.LastModTime)
+				strText = KPRes.LastModificationTime;
+			else if(t == CsvFieldType.ExpiryTime)
+				strText = KPRes.ExpiryTime;
+			else { Debug.Assert(false); strText = KPRes.Unknown; }
+
+			return strText;
+		}
+
+		private void AddCsvField(CsvFieldType t, string strName, string strFormat)
+		{
+			string strText = CsvFieldToString(t);
+
+			string strSub = string.Empty;
+			if(strName != null) strSub += strName;
+			if(!string.IsNullOrEmpty(strFormat))
+			{
+				if(strSub.Length > 0) strSub += ", ";
+				strSub += strFormat;
+			}
+
+			if(strSub.Length > 0) strText += " (" + strSub + ")";
+
+			ListViewItem lvi = m_lvFields.Items.Add(strText);
+			lvi.Tag = new CsvFieldInfo(t, strName, strFormat);
+		}
+
+		private CsvFieldType GetCsvFieldType(out bool bName, out bool bFormat)
+		{
+			int i = m_cmbFieldType.SelectedIndex;
+			if((i < (int)CsvFieldType.First) || (i >= (int)CsvFieldType.Count))
+			{
+				Debug.Assert(false);
+				bName = false;
+				bFormat = false;
+				return CsvFieldType.Ignore;
+			}
+
+			CsvFieldType t = (CsvFieldType)i;
+			bName = (t == CsvFieldType.CustomString);
+			bFormat = ((t == CsvFieldType.CreationTime) || (t == CsvFieldType.LastAccessTime) ||
+				(t == CsvFieldType.LastModTime) || (t == CsvFieldType.ExpiryTime));
+			return t;
+		}
+
+		private char GetCharFromDef(string strDef)
+		{
+			if(strDef.Equals(StrCharTab, StrUtil.CaseIgnoreCmp))
+				return '\t';
+			if(strDef.Equals(StrCharNewLine, StrUtil.CaseIgnoreCmp))
+				return '\n';
+			if(strDef.Length == 1) return strDef[0];
+			return char.MinValue;
+		}
+
+		private void OnEncSelectedIndexChanged(object sender, EventArgs e)
+		{
+			UpdateTextPreview();
+		}
+
+		private void OnFieldSepTextUpdate(object sender, EventArgs e)
+		{
+			EnableControlsEx();
+		}
+
+		private void OnRecSepTextUpdate(object sender, EventArgs e)
+		{
+			EnableControlsEx();
+		}
+
+		private void OnTextQualTextUpdate(object sender, EventArgs e)
+		{
+			EnableControlsEx();
+		}
+
+		private void OnBtnFieldDel(object sender, EventArgs e)
+		{
+			ListView.SelectedIndexCollection lvsic = m_lvFields.SelectedIndices;
+			for(int i = lvsic.Count - 1; i >= 0; --i)
+				m_lvFields.Items.RemoveAt(lvsic[i]);
+
+			EnableControlsEx();
+		}
+
+		private void OnFieldsSelectedIndexChanged(object sender, EventArgs e)
+		{
+			EnableControlsEx();
+		}
+
+		private void OnBtnFieldMoveUp(object sender, EventArgs e)
+		{
+			ListView.SelectedIndexCollection lvsic = m_lvFields.SelectedIndices;
+			if(lvsic.Count != 1) { Debug.Assert(false); return; }
+
+			int iPos = lvsic[0];
+			if(iPos == 0) return;
+
+			ListViewItem lviMove = m_lvFields.Items[iPos];
+			m_lvFields.Items.RemoveAt(iPos);
+			m_lvFields.Items.Insert(iPos - 1, lviMove);
+		}
+
+		private void OnBtnFieldMoveDown(object sender, EventArgs e)
+		{
+			ListView.SelectedIndexCollection lvsic = m_lvFields.SelectedIndices;
+			if(lvsic.Count != 1) { Debug.Assert(false); return; }
+
+			int iPos = lvsic[0];
+			if(iPos == (m_lvFields.Items.Count - 1)) return;
+
+			ListViewItem lviMove = m_lvFields.Items[iPos];
+			m_lvFields.Items.RemoveAt(iPos);
+			m_lvFields.Items.Insert(iPos + 1, lviMove);
+		}
+
+		private void OnFieldTypeSelectedIndexChanged(object sender, EventArgs e)
+		{
+			EnableControlsEx();
+		}
+
+		private void OnFieldFormatLinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
+		{
+			string strUrl = @"http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx";
+			try { Process.Start(strUrl); }
+			catch(Exception ex) { MessageService.ShowWarning(strUrl, ex.Message); }
+		}
+
+		private void OnBtnFieldAdd(object sender, EventArgs e)
+		{
+			bool bName, bFormat;
+			CsvFieldType t = GetCsvFieldType(out bName, out bFormat);
+			string strName = (bName ? m_tbFieldName.Text : null);
+			string strFormat = (bFormat ? m_cmbFieldFormat.Text : null);
+
+			AddCsvField(t, strName, strFormat);
+			ProcessResize();
+			for(int i = 0; i < (m_lvFields.Items.Count - 1); ++i)
+				m_lvFields.Items[i].Selected = false;
+			m_lvFields.EnsureVisible(m_lvFields.Items.Count - 1);
+			UIUtil.SetFocusedItem(m_lvFields, m_lvFields.Items[
+				m_lvFields.Items.Count - 1], true);
+		}
+
+		private void OnTabMainSelectedIndexChanged(object sender, EventArgs e)
+		{
+			if(m_tabMain.SelectedTab == m_tabPreview)
+				UpdateImportPreview();
+
+			EnableControlsEx();
+		}
+
+		private CsvOptions GetCsvOptions()
+		{
+			CsvOptions opt = new CsvOptions();
+			opt.FieldSeparator = GetCharFromDef(m_cmbFieldSep.Text);
+			opt.RecordSeparator = GetCharFromDef(m_cmbRecSep.Text);
+			opt.TextQualifier = GetCharFromDef(m_cmbTextQual.Text);
+			if((opt.FieldSeparator == char.MinValue) || (opt.RecordSeparator == char.MinValue) ||
+				(opt.TextQualifier == char.MinValue))
+				return null;
+			opt.BackslashIsEscape = m_cbBackEscape.Checked;
+			opt.TrimFields = m_cbTrim.Checked;
+
+			return opt;
+		}
+
+		private void PerformImport(PwGroup pgStorage, bool bCreatePreview)
+		{
+			List<CsvFieldInfo> lFields = new List<CsvFieldInfo>();
+			for(int i = 0; i < m_lvFields.Items.Count; ++i)
+			{
+				CsvFieldInfo cfi = (m_lvFields.Items[i].Tag as CsvFieldInfo);
+				if(cfi == null) { Debug.Assert(false); continue; }
+				lFields.Add(cfi);
+			}
+
+			if(bCreatePreview)
+			{
+				int dx = m_lvImportPreview.ClientRectangle.Width; // Before clearing
+
+				m_lvImportPreview.Items.Clear();
+				m_lvImportPreview.Columns.Clear();
+
+				foreach(CsvFieldInfo cfi in lFields)
+				{
+					string strCol = CsvFieldToString(cfi.Type);
+					if(cfi.Type == CsvFieldType.CustomString)
+						strCol = (cfi.Name ?? string.Empty);
+					m_lvImportPreview.Columns.Add(strCol, dx / lFields.Count);
+				}
+			}
+
+			CsvOptions opt = GetCsvOptions();
+			if(opt == null) { Debug.Assert(bCreatePreview); return; }
+
+			string strData = GetDecodedText();
+			CsvStreamReaderEx csr = new CsvStreamReaderEx(strData, opt);
+
+			Dictionary<string, PwGroup> dGroups = new Dictionary<string, PwGroup>();
+			dGroups[string.Empty] = pgStorage;
+
+			if(bCreatePreview) m_lvImportPreview.BeginUpdate();
+
+			DateTime dtNow = DateTime.Now;
+			DateTime dtNoExpire = Kdb3Time.NeverExpireTime.ToDateTime();
+			bool bIgnoreFirstRow = m_cbIgnoreFirst.Checked;
+			bool bIsFirstRow = true;
+
+			while(true)
+			{
+				string[] v = csr.ReadLine();
+				if(v == null) break;
+				if(v.Length == 0) continue;
+				if((v.Length == 1) && (v[0].Length == 0)) continue;
+
+				if(bIsFirstRow && bIgnoreFirstRow)
+				{
+					bIsFirstRow = false;
+					continue;
+				}
+				bIsFirstRow = false;
+
+				PwGroup pgParent = pgStorage;
+				PwEntry pe = new PwEntry(true, true);
+
+				ListViewItem lvi = null;
+				for(int i = 0; i < Math.Min(v.Length, lFields.Count); ++i)
+				{
+					string strField = v[i];
+					CsvFieldInfo cfi = lFields[i];
+
+					if(cfi.Type == CsvFieldType.Ignore) { }
+					else if(cfi.Type == CsvFieldType.GroupName)
+					{
+						if(!dGroups.ContainsKey(strField))
+						{
+							PwGroup pgNew = new PwGroup(true, true);
+							pgNew.Name = strField;
+							pgStorage.AddGroup(pgNew, true);
+							dGroups[strField] = pgNew;
+						}
+
+						pgParent = dGroups[strField];
+					}
+					else if(cfi.Type == CsvFieldType.Title)
+						ImportUtil.AppendToField(pe, PwDefs.TitleField,
+							strField, m_pwDatabase);
+					else if(cfi.Type == CsvFieldType.UserName)
+						ImportUtil.AppendToField(pe, PwDefs.UserNameField,
+							strField, m_pwDatabase);
+					else if(cfi.Type == CsvFieldType.Password)
+						ImportUtil.AppendToField(pe, PwDefs.PasswordField,
+							strField, m_pwDatabase);
+					else if(cfi.Type == CsvFieldType.Url)
+						ImportUtil.AppendToField(pe, PwDefs.UrlField,
+							strField, m_pwDatabase);
+					else if(cfi.Type == CsvFieldType.Notes)
+						ImportUtil.AppendToField(pe, PwDefs.NotesField,
+							strField, m_pwDatabase);
+					else if(cfi.Type == CsvFieldType.CustomString)
+						ImportUtil.AppendToField(pe, (string.IsNullOrEmpty(cfi.Name) ?
+							PwDefs.NotesField : cfi.Name), strField, m_pwDatabase);
+					else if(cfi.Type == CsvFieldType.CreationTime)
+						pe.CreationTime = ParseDateTime(ref strField, cfi, dtNow);
+					else if(cfi.Type == CsvFieldType.LastAccessTime)
+						pe.LastAccessTime = ParseDateTime(ref strField, cfi, dtNow);
+					else if(cfi.Type == CsvFieldType.LastModTime)
+						pe.LastModificationTime = ParseDateTime(ref strField, cfi, dtNow);
+					else if(cfi.Type == CsvFieldType.ExpiryTime)
+					{
+						bool bParseSuccess;
+						pe.ExpiryTime = ParseDateTime(ref strField, cfi, dtNow,
+							out bParseSuccess);
+						pe.Expires = (bParseSuccess && (pe.ExpiryTime != dtNoExpire));
+					}
+					else { Debug.Assert(false); }
+
+					if(bCreatePreview)
+					{
+						strField = StrUtil.MultiToSingleLine(strField);
+
+						if(lvi != null) lvi.SubItems.Add(strField);
+						else lvi = m_lvImportPreview.Items.Add(strField);
+					}
+				}
+
+				if(bCreatePreview)
+				{
+					// Create remaining subitems
+					for(int r = v.Length; r < lFields.Count; ++r)
+					{
+						if(lvi != null) lvi.SubItems.Add(string.Empty);
+						else lvi = m_lvImportPreview.Items.Add(string.Empty);
+					}
+				}
+
+				pgParent.AddEntry(pe, true);
+			}
+
+			if(bCreatePreview)
+			{
+				m_lvImportPreview.EndUpdate();
+				ProcessResize();
+			}
+		}
+
+		private DateTime ParseDateTime(ref string strData, CsvFieldInfo cfi,
+			DateTime dtDefault)
+		{
+			bool bDummy;
+			return ParseDateTime(ref strData, cfi, dtDefault, out bDummy);
+		}
+
+		private DateTime ParseDateTime(ref string strData, CsvFieldInfo cfi,
+			DateTime dtDefault, out bool bSuccess)
+		{
+			DateTime? odt = null;
+
+			if(!string.IsNullOrEmpty(cfi.Format))
+			{
+				const DateTimeStyles dts = (DateTimeStyles.AllowWhiteSpaces |
+					DateTimeStyles.AssumeLocal);
+
+				DateTime dtExact;
+				if(DateTime.TryParseExact(strData, cfi.Format, null, dts,
+					out dtExact))
+					odt = dtExact;
+			}
+
+			if(!odt.HasValue)
+			{
+				DateTime dtStd;
+				if(DateTime.TryParse(strData, out dtStd))
+					odt = dtStd;
+			}
+
+			if(odt.HasValue)
+			{
+				strData = TimeUtil.ToDisplayString(odt.Value);
+				bSuccess = true;
+			}
+			else
+			{
+				strData = string.Empty;
+				bSuccess = false;
+
+				odt = dtDefault;
+			}
+
+			return odt.Value;
+		}
+
+		private void OnBtnTabBack(object sender, EventArgs e)
+		{
+			int i = m_tabMain.SelectedIndex;
+			if(i > 0) m_tabMain.SelectedIndex = i - 1;
+		}
+
+		private void OnBtnTabNext(object sender, EventArgs e)
+		{
+			int i = m_tabMain.SelectedIndex;
+			if(i < (m_tabMain.TabCount - 1)) m_tabMain.SelectedIndex = i + 1;
+		}
+
+		private void OnBtnOK(object sender, EventArgs e)
+		{
+			PerformImport(m_pwDatabase.RootGroup, false);
+		}
+
+		private void OnFieldSepSelectedIndexChanged(object sender, EventArgs e)
+		{
+			EnableControlsEx();
+		}
+
+		private void OnRecSepSelectedIndexChanged(object sender, EventArgs e)
+		{
+			EnableControlsEx();
+		}
+
+		private void OnTextQualSelectedIndexChanged(object sender, EventArgs e)
+		{
+			EnableControlsEx();
+		}
+
+		private void GuessFieldTypes()
+		{
+			CsvOptions opt = GetCsvOptions();
+			if(opt == null) { Debug.Assert(false); return; }
+
+			string str = GetDecodedText();
+			CsvStreamReaderEx csv = new CsvStreamReaderEx(str, opt);
+
+			string[] v;
+			while(true)
+			{
+				v = csv.ReadLine();
+				if(v == null) return;
+				if(v.Length == 0) continue;
+				if((v.Length == 1) && (v[0].Length == 0)) continue;
+				break;
+			}
+			if(v.Length <= 3) return;
+
+			CsvFieldInfo[] vFields = new CsvFieldInfo[v.Length];
+			int nDetermined = 0;
+			for(int i = 0; i < v.Length; ++i)
+			{
+				CsvFieldInfo fi = GuessFieldType(v[i]);
+				if(fi != null) ++nDetermined;
+				else fi = new CsvFieldInfo(CsvFieldType.Ignore, null, null);
+
+				vFields[i] = fi;
+			}
+
+			// Accept the guesses only if at least half of them are
+			// probably correct
+			if(nDetermined < (v.Length + 1) / 2) return;
+
+			m_lvFields.Items.Clear();
+			foreach(CsvFieldInfo fi in vFields)
+				AddCsvField(fi.Type, fi.Name, fi.Format);
+		}
+
+		private static CsvFieldInfo GuessFieldType(string strRawName)
+		{
+			if(strRawName == null) return null;
+			string strName = strRawName.Trim();
+			if(strName.Length == 0) return null;
+
+			string str = ImportUtil.MapNameToStandardField(strName, false);
+			if(str == PwDefs.TitleField)
+				return new CsvFieldInfo(CsvFieldType.Title, null, null);
+			if(str == PwDefs.UserNameField)
+				return new CsvFieldInfo(CsvFieldType.UserName, null, null);
+			if(str == PwDefs.PasswordField)
+				return new CsvFieldInfo(CsvFieldType.Password, null, null);
+			if(str == PwDefs.UrlField)
+				return new CsvFieldInfo(CsvFieldType.Url, null, null);
+			if(str == PwDefs.NotesField)
+				return new CsvFieldInfo(CsvFieldType.Notes, null, null);
+
+			string[] vGroupNames = new string[] {
+				"Password Groups", "Group", "Groups"
+			};
+			foreach(string strGroupName in vGroupNames)
+			{
+				if(strName.Equals(strGroupName, StrUtil.CaseIgnoreCmp))
+					return new CsvFieldInfo(CsvFieldType.GroupName, null, null);
+			}
+
+			string[] vCreationNames = new string[] {
+				"Creation", "Creation Time",
+				KPRes.CreationTime
+			};
+			foreach(string strCreation in vCreationNames)
+			{
+				if(strName.Equals(strCreation, StrUtil.CaseIgnoreCmp))
+					return new CsvFieldInfo(CsvFieldType.CreationTime, null, null);
+			}
+
+			string[] vLastAccess = new string[] {
+				"Last Access", "Last Access Time",
+				KPRes.LastAccessTime
+			};
+			foreach(string strLastAccess in vLastAccess)
+			{
+				if(strName.Equals(strLastAccess, StrUtil.CaseIgnoreCmp))
+					return new CsvFieldInfo(CsvFieldType.LastAccessTime, null, null);
+			}
+
+			string[] vLastMod = new string[] {
+				"Last Modification", "Last Mod", "Last Modification Time",
+				"Last Mod Time",
+				KPRes.LastModificationTime
+			};
+			foreach(string strLastMod in vLastMod)
+			{
+				if(strName.Equals(strLastMod, StrUtil.CaseIgnoreCmp))
+					return new CsvFieldInfo(CsvFieldType.LastModTime, null, null);
+			}
+
+			string[] vExpiry = new string[] {
+				"Expires", "Expire", "Expiry", "Expiry Time",
+				KPRes.ExpiryTime, KPRes.ExpiryTimeDateOnly
+			};
+			foreach(string strExpire in vExpiry)
+			{
+				if(strName.Equals(strExpire, StrUtil.CaseIgnoreCmp))
+					return new CsvFieldInfo(CsvFieldType.ExpiryTime, null, null);
+			}
+
+			return null;
+		}
+	}
+}
diff --git a/KeePass/Forms/AboutForm.resx b/KeePass/Forms/CsvImportForm.resx
similarity index 100%
copy from KeePass/Forms/AboutForm.resx
copy to KeePass/Forms/CsvImportForm.resx
diff --git a/KeePass/Forms/DataEditorForm.cs b/KeePass/Forms/DataEditorForm.cs
index a5274e7..a2f880f 100644
--- a/KeePass/Forms/DataEditorForm.cs
+++ b/KeePass/Forms/DataEditorForm.cs
@@ -100,11 +100,16 @@ namespace KeePass.Forms
 			m_strInitialFormRect = UIUtil.GetWindowScreenRect(this);
 
 			m_bdc = BinaryDataClassifier.Classify(m_strDataDesc, m_pbData);
-			string strEncodingName;
 			uint uStartOffset;
-			Encoding enc = BinaryDataClassifier.GetStringEncoding(m_pbData,
-				false, out strEncodingName, out uStartOffset);
-			string strData = enc.GetString(m_pbData);
+			StrEncodingInfo seiGuess = BinaryDataClassifier.GetStringEncoding(
+				m_pbData, out uStartOffset);
+			string strData;
+			try
+			{
+				strData = (seiGuess.Encoding.GetString(m_pbData, (int)uStartOffset,
+					m_pbData.Length - (int)uStartOffset) ?? string.Empty);
+			}
+			catch(Exception) { Debug.Assert(false); strData = string.Empty; }
 
 			BlockUIEvents(true);
 
@@ -140,7 +145,13 @@ namespace KeePass.Forms
 			bool bSimpleText = true;
 			if(m_bdc == BinaryDataClass.RichText)
 			{
-				try { m_rtbText.Rtf = strData; bSimpleText = false; }
+				try
+				{
+					if(strData.Length > 0) m_rtbText.Rtf = strData;
+					else m_rtbText.Text = string.Empty;
+
+					bSimpleText = false;
+				}
 				catch(Exception) { } // Show as simple text
 			}
 			
@@ -542,8 +553,7 @@ namespace KeePass.Forms
 					try
 					{
 						string strText = enc.GetString(pbData);
-						UTF8Encoding utf8 = new UTF8Encoding(false);
-						return utf8.GetBytes(strText);
+						return StrUtil.Utf8.GetBytes(strText);
 					}
 					catch(Exception) { Debug.Assert(false); }
 				}
diff --git a/KeePass/Forms/DataViewerForm.Designer.cs b/KeePass/Forms/DataViewerForm.Designer.cs
index 9fe3481..cf27a36 100644
--- a/KeePass/Forms/DataViewerForm.Designer.cs
+++ b/KeePass/Forms/DataViewerForm.Designer.cs
@@ -28,37 +28,28 @@
 		/// </summary>
 		private void InitializeComponent()
 		{
-			this.m_rtbText = new KeePass.UI.CustomRichTextBoxEx();
 			this.m_picBox = new System.Windows.Forms.PictureBox();
 			this.m_webBrowser = new System.Windows.Forms.WebBrowser();
+			this.m_pnlImageViewer = new System.Windows.Forms.Panel();
+			this.m_statusMain = new System.Windows.Forms.StatusStrip();
+			this.m_tssStatusMain = new System.Windows.Forms.ToolStripStatusLabel();
+			this.m_rtbText = new KeePass.UI.CustomRichTextBoxEx();
 			this.m_toolMain = new KeePass.UI.CustomToolStripEx();
 			this.m_tslViewer = new System.Windows.Forms.ToolStripLabel();
 			this.m_tscViewers = new System.Windows.Forms.ToolStripComboBox();
 			this.m_tssSeparator0 = new System.Windows.Forms.ToolStripSeparator();
 			this.m_tslEncoding = new System.Windows.Forms.ToolStripLabel();
 			this.m_tscEncoding = new System.Windows.Forms.ToolStripComboBox();
-			this.m_pnlImageViewer = new System.Windows.Forms.Panel();
-			this.m_statusMain = new System.Windows.Forms.StatusStrip();
-			this.m_tssStatusMain = new System.Windows.Forms.ToolStripStatusLabel();
+			this.m_tslZoom = new System.Windows.Forms.ToolStripLabel();
+			this.m_tscZoom = new System.Windows.Forms.ToolStripComboBox();
 			((System.ComponentModel.ISupportInitialize)(this.m_picBox)).BeginInit();
-			this.m_toolMain.SuspendLayout();
 			this.m_pnlImageViewer.SuspendLayout();
 			this.m_statusMain.SuspendLayout();
+			this.m_toolMain.SuspendLayout();
 			this.SuspendLayout();
 			// 
-			// m_rtbText
-			// 
-			this.m_rtbText.Location = new System.Drawing.Point(23, 40);
-			this.m_rtbText.Name = "m_rtbText";
-			this.m_rtbText.ReadOnly = true;
-			this.m_rtbText.Size = new System.Drawing.Size(190, 114);
-			this.m_rtbText.TabIndex = 0;
-			this.m_rtbText.Text = "";
-			this.m_rtbText.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.OnRichTextBoxLinkClicked);
-			// 
 			// m_picBox
 			// 
-			this.m_picBox.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
 			this.m_picBox.Location = new System.Drawing.Point(31, 26);
 			this.m_picBox.Name = "m_picBox";
 			this.m_picBox.Size = new System.Drawing.Size(174, 130);
@@ -74,6 +65,43 @@
 			this.m_webBrowser.Size = new System.Drawing.Size(193, 158);
 			this.m_webBrowser.TabIndex = 2;
 			// 
+			// m_pnlImageViewer
+			// 
+			this.m_pnlImageViewer.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
+			this.m_pnlImageViewer.Controls.Add(this.m_picBox);
+			this.m_pnlImageViewer.Location = new System.Drawing.Point(234, 70);
+			this.m_pnlImageViewer.Name = "m_pnlImageViewer";
+			this.m_pnlImageViewer.Size = new System.Drawing.Size(264, 212);
+			this.m_pnlImageViewer.TabIndex = 1;
+			// 
+			// m_statusMain
+			// 
+			this.m_statusMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.m_tssStatusMain});
+			this.m_statusMain.Location = new System.Drawing.Point(0, 366);
+			this.m_statusMain.Name = "m_statusMain";
+			this.m_statusMain.Size = new System.Drawing.Size(524, 22);
+			this.m_statusMain.TabIndex = 4;
+			// 
+			// m_tssStatusMain
+			// 
+			this.m_tssStatusMain.Name = "m_tssStatusMain";
+			this.m_tssStatusMain.Size = new System.Drawing.Size(509, 17);
+			this.m_tssStatusMain.Spring = true;
+			this.m_tssStatusMain.Text = "<>";
+			this.m_tssStatusMain.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+			// 
+			// m_rtbText
+			// 
+			this.m_rtbText.Location = new System.Drawing.Point(23, 40);
+			this.m_rtbText.Name = "m_rtbText";
+			this.m_rtbText.ReadOnly = true;
+			this.m_rtbText.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedBoth;
+			this.m_rtbText.Size = new System.Drawing.Size(190, 114);
+			this.m_rtbText.TabIndex = 0;
+			this.m_rtbText.Text = "";
+			this.m_rtbText.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.OnRichTextBoxLinkClicked);
+			// 
 			// m_toolMain
 			// 
 			this.m_toolMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -81,7 +109,9 @@
             this.m_tscViewers,
             this.m_tssSeparator0,
             this.m_tslEncoding,
-            this.m_tscEncoding});
+            this.m_tscEncoding,
+            this.m_tslZoom,
+            this.m_tscZoom});
 			this.m_toolMain.Location = new System.Drawing.Point(0, 0);
 			this.m_toolMain.Name = "m_toolMain";
 			this.m_toolMain.Size = new System.Drawing.Size(524, 25);
@@ -91,7 +121,7 @@
 			// m_tslViewer
 			// 
 			this.m_tslViewer.Name = "m_tslViewer";
-			this.m_tslViewer.Size = new System.Drawing.Size(19, 22);
+			this.m_tslViewer.Size = new System.Drawing.Size(21, 22);
 			this.m_tslViewer.Text = "<>";
 			// 
 			// m_tscViewers
@@ -109,40 +139,28 @@
 			// m_tslEncoding
 			// 
 			this.m_tslEncoding.Name = "m_tslEncoding";
-			this.m_tslEncoding.Size = new System.Drawing.Size(19, 22);
+			this.m_tslEncoding.Size = new System.Drawing.Size(21, 22);
 			this.m_tslEncoding.Text = "<>";
 			// 
 			// m_tscEncoding
 			// 
 			this.m_tscEncoding.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
 			this.m_tscEncoding.Name = "m_tscEncoding";
-			this.m_tscEncoding.Size = new System.Drawing.Size(150, 25);
+			this.m_tscEncoding.Size = new System.Drawing.Size(200, 25);
 			this.m_tscEncoding.SelectedIndexChanged += new System.EventHandler(this.OnEncodingSelectedIndexChanged);
 			// 
-			// m_pnlImageViewer
-			// 
-			this.m_pnlImageViewer.Controls.Add(this.m_picBox);
-			this.m_pnlImageViewer.Location = new System.Drawing.Point(234, 70);
-			this.m_pnlImageViewer.Name = "m_pnlImageViewer";
-			this.m_pnlImageViewer.Size = new System.Drawing.Size(264, 212);
-			this.m_pnlImageViewer.TabIndex = 1;
-			// 
-			// m_statusMain
+			// m_tslZoom
 			// 
-			this.m_statusMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
-            this.m_tssStatusMain});
-			this.m_statusMain.Location = new System.Drawing.Point(0, 366);
-			this.m_statusMain.Name = "m_statusMain";
-			this.m_statusMain.Size = new System.Drawing.Size(524, 22);
-			this.m_statusMain.TabIndex = 4;
+			this.m_tslZoom.Name = "m_tslZoom";
+			this.m_tslZoom.Size = new System.Drawing.Size(21, 22);
+			this.m_tslZoom.Text = "<>";
 			// 
-			// m_tssStatusMain
+			// m_tscZoom
 			// 
-			this.m_tssStatusMain.Name = "m_tssStatusMain";
-			this.m_tssStatusMain.Size = new System.Drawing.Size(509, 17);
-			this.m_tssStatusMain.Spring = true;
-			this.m_tssStatusMain.Text = "<>";
-			this.m_tssStatusMain.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+			this.m_tscZoom.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+			this.m_tscZoom.Name = "m_tscZoom";
+			this.m_tscZoom.Size = new System.Drawing.Size(75, 25);
+			this.m_tscZoom.SelectedIndexChanged += new System.EventHandler(this.OnZoomSelectedIndexChanged);
 			// 
 			// DataViewerForm
 			// 
@@ -163,11 +181,11 @@
 			this.SizeChanged += new System.EventHandler(this.OnFormSizeChanged);
 			this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OnFormClosing);
 			((System.ComponentModel.ISupportInitialize)(this.m_picBox)).EndInit();
-			this.m_toolMain.ResumeLayout(false);
-			this.m_toolMain.PerformLayout();
 			this.m_pnlImageViewer.ResumeLayout(false);
 			this.m_statusMain.ResumeLayout(false);
 			this.m_statusMain.PerformLayout();
+			this.m_toolMain.ResumeLayout(false);
+			this.m_toolMain.PerformLayout();
 			this.ResumeLayout(false);
 			this.PerformLayout();
 
@@ -187,5 +205,7 @@
 		private System.Windows.Forms.Panel m_pnlImageViewer;
 		private System.Windows.Forms.StatusStrip m_statusMain;
 		private System.Windows.Forms.ToolStripStatusLabel m_tssStatusMain;
+		private System.Windows.Forms.ToolStripLabel m_tslZoom;
+		private System.Windows.Forms.ToolStripComboBox m_tscZoom;
 	}
 }
\ No newline at end of file
diff --git a/KeePass/Forms/DataViewerForm.cs b/KeePass/Forms/DataViewerForm.cs
index 685a73b..e95ab06 100644
--- a/KeePass/Forms/DataViewerForm.cs
+++ b/KeePass/Forms/DataViewerForm.cs
@@ -21,6 +21,8 @@ using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Drawing;
+using System.Drawing.Drawing2D;
+using System.Drawing.Imaging;
 using System.Text;
 using System.Windows.Forms;
 using System.Diagnostics;
@@ -47,9 +49,12 @@ namespace KeePass.Forms
 
 		private RichTextBoxContextMenu m_ctxText = new RichTextBoxContextMenu();
 
-		public event EventHandler<DvfContextEventArgs> Initializing;
-		public event EventHandler<DvfContextEventArgs> UpdatingDataView;
-		public event EventHandler<DvfContextEventArgs> Uninitializing;
+		private Image m_img = null;
+		private Image m_imgResized = null;
+
+		public event EventHandler<DvfContextEventArgs> DvfInit;
+		public event EventHandler<DvfContextEventArgs> DvfUpdating;
+		public event EventHandler<DvfContextEventArgs> DvfRelease;
 
 		public void InitEx(string strDataDesc, byte[] pbData)
 		{
@@ -73,53 +78,44 @@ namespace KeePass.Forms
 
 			this.Icon = Properties.Resources.KeePass;
 
-			m_tslViewer.Text = KPRes.ShowIn + ":";
-			m_tslEncoding.Text = KPRes.Encoding + ":";
-
 			if(m_strDataDesc.Length > 0)
 				this.Text = m_strDataDesc + " - " + this.Text;
 
 			this.DoubleBuffered = true;
 
-			m_tssStatusMain.Text = KPRes.Ready;
-
-			m_ctxText.Attach(m_rtbText, this);
-
 			m_bInitializing = true;
 
+			m_tssStatusMain.Text = KPRes.Ready;
+			m_ctxText.Attach(m_rtbText, this);
 			m_rtbText.Dock = DockStyle.Fill;
 			m_webBrowser.Dock = DockStyle.Fill;
 			m_pnlImageViewer.Dock = DockStyle.Fill;
 			m_picBox.Dock = DockStyle.Fill;
 
-			m_tscEncoding.Items.Add(BinaryDataClassifier.BdeAnsi + " (" +
-				KPRes.SystemCodePage + ")");
-			m_tscEncoding.Items.Add(BinaryDataClassifier.BdeAscii);
-			m_tscEncoding.Items.Add(BinaryDataClassifier.BdeUtf7);
-			m_tscEncoding.Items.Add(BinaryDataClassifier.BdeUtf8);
-			m_tscEncoding.Items.Add(BinaryDataClassifier.BdeUtf32);
-			m_tscEncoding.Items.Add(BinaryDataClassifier.BdeUnicodeLE);
-			m_tscEncoding.Items.Add(BinaryDataClassifier.BdeUnicodeBE);
-
-			string strEnc;
-			Encoding enc = BinaryDataClassifier.GetStringEncoding(m_pbData,
-				false, out strEnc, out m_uStartOffset);
-
-			if(strEnc == BinaryDataClassifier.BdeAnsi)
-				m_tscEncoding.SelectedIndex = 0;
-			else if(strEnc == BinaryDataClassifier.BdeAscii)
-				m_tscEncoding.SelectedIndex = 1;
-			else if(strEnc == BinaryDataClassifier.BdeUtf7)
-				m_tscEncoding.SelectedIndex = 2;
-			else if(strEnc == BinaryDataClassifier.BdeUtf8)
-				m_tscEncoding.SelectedIndex = 3;
-			else if(strEnc == BinaryDataClassifier.BdeUtf32)
-				m_tscEncoding.SelectedIndex = 4;
-			else if(strEnc == BinaryDataClassifier.BdeUnicodeLE)
-				m_tscEncoding.SelectedIndex = 5;
-			else if(strEnc == BinaryDataClassifier.BdeUnicodeBE)
-				m_tscEncoding.SelectedIndex = 6;
-			else m_tscEncoding.SelectedIndex = 0;
+			m_tslEncoding.Text = KPRes.Encoding + ":";
+
+			foreach(StrEncodingInfo seiEnum in StrUtil.Encodings)
+			{
+				m_tscEncoding.Items.Add(seiEnum.Name);
+			}
+
+			StrEncodingInfo seiGuess = BinaryDataClassifier.GetStringEncoding(
+				m_pbData, out m_uStartOffset);
+
+			int iSel = 0;
+			if(seiGuess != null)
+				iSel = Math.Max(m_tscEncoding.FindStringExact(seiGuess.Name), 0);
+			m_tscEncoding.SelectedIndex = iSel;
+
+			m_tslZoom.Text = KPRes.Zoom + ":";
+
+			m_tscZoom.Items.Add(KPRes.Auto);
+			int[] vZooms = new int[] { 10, 25, 50, 75, 100, 125, 150, 200, 400 };
+			foreach(int iZoom in vZooms)
+				m_tscZoom.Items.Add(iZoom.ToString() + @"%");
+			m_tscZoom.SelectedIndex = 0;
+
+			m_tslViewer.Text = KPRes.ShowIn + ":";
 
 			m_tscViewers.Items.Add(KPRes.TextViewer);
 			m_tscViewers.Items.Add(KPRes.ImageViewer);
@@ -133,12 +129,12 @@ namespace KeePass.Forms
 			else if(m_bdc == BinaryDataClass.WebDocument) m_tscViewers.SelectedIndex = 2;
 			else m_tscViewers.SelectedIndex = 0;
 
-			if(this.Initializing != null)
-				this.Initializing(this, new DvfContextEventArgs(this,
-					m_pbData, m_strDataDesc, m_tscViewers));
+			if(this.DvfInit != null)
+				this.DvfInit(this, new DvfContextEventArgs(this, m_pbData,
+					m_strDataDesc, m_tscViewers));
 
 			m_bInitializing = false;
-			UpdateDataView(enc);
+			UpdateDataView();
 		}
 
 		private void OnRichTextBoxLinkClicked(object sender, LinkClickedEventArgs e)
@@ -146,37 +142,22 @@ namespace KeePass.Forms
 			WinUtil.OpenUrl(e.LinkText, null);
 		}
 
-		private string BinaryDataToString(Encoding enc)
+		private string BinaryDataToString()
 		{
-			if(enc == null)
-			{
-				string strEnc = m_tscEncoding.Text;
+			string strEnc = m_tscEncoding.Text;
+			StrEncodingInfo sei = StrUtil.GetEncoding(strEnc);
 
-				if(strEnc == (BinaryDataClassifier.BdeAnsi + " (" +
-					KPRes.SystemCodePage + ")"))
-				{
-					enc = Encoding.Default;
-				}
-				else if(strEnc == BinaryDataClassifier.BdeAscii)
-					enc = Encoding.ASCII;
-				else if(strEnc == BinaryDataClassifier.BdeUtf7)
-					enc = Encoding.UTF7;
-				else if(strEnc == BinaryDataClassifier.BdeUtf8)
-					enc = new UTF8Encoding(false);
-				else if(strEnc == BinaryDataClassifier.BdeUtf32)
-					enc = Encoding.UTF32;
-				else if(strEnc == BinaryDataClassifier.BdeUnicodeLE)
-					enc = Encoding.Unicode;
-				else if(strEnc == BinaryDataClassifier.BdeUnicodeBE)
-					enc = Encoding.BigEndianUnicode;
-				else enc = Encoding.Default;
+			try
+			{
+				return (sei.Encoding.GetString(m_pbData, (int)m_uStartOffset,
+					m_pbData.Length - (int)m_uStartOffset) ?? string.Empty);
 			}
+			catch(Exception) { }
 
-			return enc.GetString(m_pbData, (int)m_uStartOffset,
-				m_pbData.Length - (int)m_uStartOffset);
+			return string.Empty;
 		}
 
-		private void UpdateDataView(Encoding enc)
+		private void UpdateDataView()
 		{
 			if(m_bInitializing) return;
 
@@ -187,23 +168,29 @@ namespace KeePass.Forms
 
 			string strViewer = m_tscViewers.Text;
 
-			m_tssSeparator0.Visible = m_tslEncoding.Visible =
-				m_tscEncoding.Visible = !(strViewer == KPRes.ImageViewer);
+			bool bText = ((strViewer == KPRes.TextViewer) ||
+				(strViewer == KPRes.WebBrowser));
+			bool bImage = (strViewer == KPRes.ImageViewer);
+
+			m_tssSeparator0.Visible = (bText || bImage);
+			m_tslEncoding.Visible = m_tscEncoding.Visible = bText;
+			m_tslZoom.Visible = m_tscZoom.Visible = bImage;
 
 			try
 			{
-				if(this.UpdatingDataView != null)
+				if(this.DvfUpdating != null)
 				{
 					DvfContextEventArgs args = new DvfContextEventArgs(this,
 						m_pbData, m_strDataDesc, m_tscViewers);
-					this.UpdatingDataView(this, args);
+					this.DvfUpdating(this, args);
 					if(args.Cancel) return;
 				}
 
 				if(strViewer == KPRes.TextViewer)
 				{
-					string strData = BinaryDataToString(enc);
+					string strData = BinaryDataToString();
 
+					m_rtbText.Clear(); // Clear formatting
 					if(m_bdc == BinaryDataClass.RichText) m_rtbText.Rtf = strData;
 					else m_rtbText.Text = strData;
 
@@ -211,17 +198,17 @@ namespace KeePass.Forms
 				}
 				else if(strViewer == KPRes.ImageViewer)
 				{
-					Image img = UIUtil.LoadImage(m_pbData);
-					m_picBox.Image = img;
+					if(m_img == null) m_img = UIUtil.LoadImage(m_pbData);
+					// m_picBox.Image = m_img;
 
 					m_pnlImageViewer.Visible = true;
 					m_picBox.Visible = true;
 
-					OnFormSizeChanged(null, null);
+					UpdateImageView();
 				}
 				else if(strViewer == KPRes.WebBrowser)
 				{
-					string strData = BinaryDataToString(enc);
+					string strData = BinaryDataToString();
 
 					UIUtil.SetWebBrowserDocument(m_webBrowser, strData);
 
@@ -233,35 +220,124 @@ namespace KeePass.Forms
 
 		private void OnViewersSelectedIndexChanged(object sender, EventArgs e)
 		{
-			UpdateDataView(null);
+			UpdateDataView();
 		}
 
 		private void OnEncodingSelectedIndexChanged(object sender, EventArgs e)
 		{
-			UpdateDataView(null);
+			UpdateDataView();
 		}
 
 		private void OnFormSizeChanged(object sender, EventArgs e)
 		{
-			Image img = m_picBox.Image;
-			if(img != null)
+			UpdateImageView();
+		}
+
+		private void UpdateImageView()
+		{
+			if(m_img == null) return;
+
+			string strZoom = m_tscZoom.Text;
+			if(string.IsNullOrEmpty(strZoom) || (strZoom == KPRes.Auto))
 			{
-				if((img.Width > m_picBox.ClientSize.Width) ||
-					(img.Height > m_picBox.ClientSize.Height))
+				m_pnlImageViewer.AutoScroll = false;
+				m_picBox.Dock = DockStyle.Fill;
+				m_picBox.Image = m_img;
+
+				if((m_img.Width > m_picBox.ClientSize.Width) ||
+					(m_img.Height > m_picBox.ClientSize.Height))
 				{
 					m_picBox.SizeMode = PictureBoxSizeMode.Zoom;
 				}
 				else m_picBox.SizeMode = PictureBoxSizeMode.CenterImage;
+
+				return;
+			}
+
+			if(!strZoom.EndsWith(@"%")) { Debug.Assert(false); return; }
+
+			int iZoom;
+			if(!int.TryParse(strZoom.Substring(0, strZoom.Length - 1), out iZoom))
+			{
+				Debug.Assert(false);
+				return;
+			}
+
+			int cliW = m_pnlImageViewer.ClientRectangle.Width;
+			int cliH = m_pnlImageViewer.ClientRectangle.Height;
+
+			int dx = (m_img.Width * iZoom) / 100;
+			int dy = (m_img.Height * iZoom) / 100;
+
+			float fScrollX = 0.5f, fScrollY = 0.5f;
+			if(m_pnlImageViewer.AutoScroll)
+			{
+				Point ptOffset = m_pnlImageViewer.AutoScrollPosition;
+				Size sz = m_picBox.ClientSize;
+
+				if(sz.Width > cliW)
+				{
+					fScrollX = Math.Abs((float)ptOffset.X / (float)(sz.Width - cliW));
+					if(fScrollX < 0.0f) { Debug.Assert(false); fScrollX = 0.0f; }
+					if(fScrollX > 1.0f) { Debug.Assert(false); fScrollX = 1.0f; }
+				}
+
+				if(sz.Height > cliH)
+				{
+					fScrollY = Math.Abs((float)ptOffset.Y / (float)(sz.Height - cliH));
+					if(fScrollY < 0.0f) { Debug.Assert(false); fScrollY = 0.0f; }
+					if(fScrollY > 1.0f) { Debug.Assert(false); fScrollY = 1.0f; }
+				}
 			}
+			m_pnlImageViewer.AutoScroll = false;
+
+			m_picBox.Dock = DockStyle.None;
+			m_picBox.SizeMode = PictureBoxSizeMode.AutoSize;
+
+			int x = 0, y = 0;
+			if(dx < cliW) x = (cliW - dx) / 2;
+			if(dy < cliH) y = (cliH - dy) / 2;
+
+			m_picBox.Location = new Point(x, y);
+
+			if((dx == m_img.Width) && (dy == m_img.Height))
+				m_picBox.Image = m_img;
+			else if((m_imgResized != null) && (m_imgResized.Width == dx) &&
+				(m_imgResized.Height == dy))
+				m_picBox.Image = m_imgResized;
+			else
+			{
+				Image imgToDispose = m_imgResized;
+
+				Image img = new Bitmap(dx, dy, PixelFormat.Format32bppArgb);
+				using(Graphics g = Graphics.FromImage(img))
+				{
+					g.InterpolationMode = InterpolationMode.High;
+					g.SmoothingMode = SmoothingMode.HighQuality;
+					g.DrawImage(m_img, 0, 0, img.Width, img.Height);
+				}
+				m_imgResized = img;
+				m_picBox.Image = m_imgResized;
+
+				if(imgToDispose != null) imgToDispose.Dispose();
+			}
+
+			m_pnlImageViewer.AutoScroll = true;
+
+			int sx = 0, sy = 0;
+			if(dx > cliW) sx = (int)(fScrollX * (float)(dx - cliW));
+			if(dy > cliH) sy = (int)(fScrollY * (float)(dy - cliH));
+			try { m_pnlImageViewer.AutoScrollPosition = new Point(sx, sy); }
+			catch(Exception) { Debug.Assert(false); }
 		}
 
 		private void OnFormClosing(object sender, FormClosingEventArgs e)
 		{
-			if(this.Uninitializing != null)
+			if(this.DvfRelease != null)
 			{
 				DvfContextEventArgs args = new DvfContextEventArgs(this,
 					m_pbData, m_strDataDesc, m_tscViewers);
-				this.Uninitializing(sender, args);
+				this.DvfRelease(sender, args);
 				if(args.Cancel)
 				{
 					e.Cancel = true;
@@ -269,6 +345,10 @@ namespace KeePass.Forms
 				}
 			}
 
+			m_picBox.Image = null;
+			if(m_img != null) { m_img.Dispose(); m_img = null; }
+			if(m_imgResized != null) { m_imgResized.Dispose(); m_imgResized = null; }
+
 			m_ctxText.Detach();
 			GlobalWindowManager.RemoveWindow(this);
 		}
@@ -287,9 +367,14 @@ namespace KeePass.Forms
 
 			return base.ProcessCmdKey(ref msg, keyData);
 		}
+
+		private void OnZoomSelectedIndexChanged(object sender, EventArgs e)
+		{
+			UpdateImageView();
+		}
 	}
 
-	public sealed class DvfContextEventArgs : CancelEventArgs
+	public sealed class DvfContextEventArgs : CancellableOperationEventArgs
 	{
 		private DataViewerForm m_form;
 		public DataViewerForm Form { get { return m_form; } }
@@ -304,8 +389,7 @@ namespace KeePass.Forms
 		public ToolStripComboBox ViewersComboBox { get { return m_tscViewers; } }
 
 		public DvfContextEventArgs(DataViewerForm form, byte[] pbData,
-			string strDataDesc, ToolStripComboBox cbViewers) :
-			base(false)
+			string strDataDesc, ToolStripComboBox cbViewers)
 		{
 			m_form = form;
 			m_pbData = pbData;
diff --git a/KeePass/Forms/DataViewerForm.resx b/KeePass/Forms/DataViewerForm.resx
index 0443815..8bceb6a 100644
--- a/KeePass/Forms/DataViewerForm.resx
+++ b/KeePass/Forms/DataViewerForm.resx
@@ -117,10 +117,10 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
-  <metadata name="m_toolMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>17, 17</value>
-  </metadata>
   <metadata name="m_statusMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>126, 17</value>
   </metadata>
+  <metadata name="m_toolMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
 </root>
\ No newline at end of file
diff --git a/KeePass/Forms/EditAutoTypeItemForm.Designer.cs b/KeePass/Forms/EditAutoTypeItemForm.Designer.cs
index 5f5f9d5..47eea65 100644
--- a/KeePass/Forms/EditAutoTypeItemForm.Designer.cs
+++ b/KeePass/Forms/EditAutoTypeItemForm.Designer.cs
@@ -98,7 +98,7 @@
 			// m_lblKeySeqInsertInfo
 			// 
 			this.m_lblKeySeqInsertInfo.AutoSize = true;
-			this.m_lblKeySeqInsertInfo.Location = new System.Drawing.Point(119, 213);
+			this.m_lblKeySeqInsertInfo.Location = new System.Drawing.Point(29, 213);
 			this.m_lblKeySeqInsertInfo.Name = "m_lblKeySeqInsertInfo";
 			this.m_lblKeySeqInsertInfo.Size = new System.Drawing.Size(94, 13);
 			this.m_lblKeySeqInsertInfo.TabIndex = 6;
@@ -117,10 +117,10 @@
 			this.m_rbKeySeq.DetectUrls = false;
 			this.m_rbKeySeq.Font = new System.Drawing.Font("Courier New", 8.25F);
 			this.m_rbKeySeq.HideSelection = false;
-			this.m_rbKeySeq.Location = new System.Drawing.Point(122, 187);
+			this.m_rbKeySeq.Location = new System.Drawing.Point(32, 187);
 			this.m_rbKeySeq.Multiline = false;
 			this.m_rbKeySeq.Name = "m_rbKeySeq";
-			this.m_rbKeySeq.Size = new System.Drawing.Size(377, 20);
+			this.m_rbKeySeq.Size = new System.Drawing.Size(467, 20);
 			this.m_rbKeySeq.TabIndex = 5;
 			this.m_rbKeySeq.Text = "";
 			this.m_rbKeySeq.TextChanged += new System.EventHandler(this.OnTextChangedKeySeq);
@@ -128,21 +128,26 @@
 			// m_rtbPlaceholders
 			// 
 			this.m_rtbPlaceholders.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
-			this.m_rtbPlaceholders.Location = new System.Drawing.Point(122, 229);
+			this.m_rtbPlaceholders.Location = new System.Drawing.Point(32, 229);
 			this.m_rtbPlaceholders.Name = "m_rtbPlaceholders";
 			this.m_rtbPlaceholders.ReadOnly = true;
 			this.m_rtbPlaceholders.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.ForcedVertical;
-			this.m_rtbPlaceholders.Size = new System.Drawing.Size(377, 136);
+			this.m_rtbPlaceholders.Size = new System.Drawing.Size(467, 136);
 			this.m_rtbPlaceholders.TabIndex = 7;
 			this.m_rtbPlaceholders.Text = "";
 			this.m_rtbPlaceholders.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.OnPlaceholdersLinkClicked);
 			// 
 			// m_cmbWindow
 			// 
+			this.m_cmbWindow.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawVariable;
+			this.m_cmbWindow.DropDownHeight = 218;
 			this.m_cmbWindow.FormattingEnabled = true;
-			this.m_cmbWindow.Location = new System.Drawing.Point(123, 72);
+			this.m_cmbWindow.IntegralHeight = false;
+			this.m_cmbWindow.Location = new System.Drawing.Point(95, 72);
+			this.m_cmbWindow.MaxDropDownItems = 12;
 			this.m_cmbWindow.Name = "m_cmbWindow";
-			this.m_cmbWindow.Size = new System.Drawing.Size(376, 21);
+			this.m_cmbWindow.OrderedImageList = null;
+			this.m_cmbWindow.Size = new System.Drawing.Size(404, 21);
 			this.m_cmbWindow.TabIndex = 0;
 			this.m_cmbWindow.SelectedIndexChanged += new System.EventHandler(this.OnWindowSelectedIndexChanged);
 			this.m_cmbWindow.TextUpdate += new System.EventHandler(this.OnWindowTextUpdate);
@@ -150,7 +155,7 @@
 			// m_lblOpenHint
 			// 
 			this.m_lblOpenHint.AutoSize = true;
-			this.m_lblOpenHint.Location = new System.Drawing.Point(120, 99);
+			this.m_lblOpenHint.Location = new System.Drawing.Point(92, 99);
 			this.m_lblOpenHint.Name = "m_lblOpenHint";
 			this.m_lblOpenHint.Size = new System.Drawing.Size(351, 13);
 			this.m_lblOpenHint.TabIndex = 1;
@@ -159,7 +164,7 @@
 			// m_lnkWildcardRegexHint
 			// 
 			this.m_lnkWildcardRegexHint.AutoSize = true;
-			this.m_lnkWildcardRegexHint.Location = new System.Drawing.Point(120, 116);
+			this.m_lnkWildcardRegexHint.Location = new System.Drawing.Point(92, 116);
 			this.m_lnkWildcardRegexHint.Name = "m_lnkWildcardRegexHint";
 			this.m_lnkWildcardRegexHint.Size = new System.Drawing.Size(270, 13);
 			this.m_lnkWildcardRegexHint.TabIndex = 2;
diff --git a/KeePass/Forms/EditAutoTypeItemForm.cs b/KeePass/Forms/EditAutoTypeItemForm.cs
index a6efb36..453e5fd 100644
--- a/KeePass/Forms/EditAutoTypeItemForm.cs
+++ b/KeePass/Forms/EditAutoTypeItemForm.cs
@@ -43,9 +43,10 @@ namespace KeePass.Forms
 	public partial class EditAutoTypeItemForm : Form
 	{
 		private AutoTypeConfig m_atConfig = null;
-		private ProtectedStringDictionary m_vStringDict = null;
-		private int m_iOrgIndex = -1;
+		private int m_iAssocIndex = -1;
 		private bool m_bEditSequenceOnly = false;
+		private string m_strDefaultSeq = string.Empty;
+		private ProtectedStringDictionary m_vStringDict = null;
 
 		// private Color m_clrOriginalForeground = Color.Black;
 		// private Color m_clrOriginalBackground = Color.White;
@@ -55,53 +56,28 @@ namespace KeePass.Forms
 		private RichTextBoxContextMenu m_ctxKeyCodes = new RichTextBoxContextMenu();
 		private bool m_bBlockUpdates = false;
 
-		private const string VkcBreak = @"<break />";
-
-		private static string[] SpecialKeyCodes = new string[] {
-			"TAB", "ENTER", "UP", "DOWN", "LEFT", "RIGHT",
-			"HOME", "END", "PGUP", "PGDN",
-			"INSERT", "DELETE", VkcBreak,
-			"BACKSPACE", "BREAK", "CAPSLOCK",
-			"ESC", "HELP", "NUMLOCK", "PRTSC", "SCROLLLOCK", VkcBreak,
-			"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12",
-			"F13", "F14", "F15", "F16", VkcBreak,
-			"ADD", "SUBTRACT", "MULTIPLY", "DIVIDE"
-		};
-
-		private static string[] SpecialPlaceholders = new string[] {
-			"GROUP", "GROUPPATH", "PASSWORD_ENC", "URL:RMVSCM", VkcBreak,
-			"DELAY 1000", "DELAY=200", "VKEY 65",
-			"PICKCHARS", "PICKCHARS:Password:C=3",
-			"NEWPASSWORD", "HMACOTP", "CLEARFIELD", VkcBreak,
-			"APPDIR", "DB_PATH", "DB_DIR", "DB_NAME", "DB_BASENAME", "DB_EXT",
-			"ENV_DIRSEP", VkcBreak,
-			"DT_SIMPLE", "DT_YEAR", "DT_MONTH", "DT_DAY", "DT_HOUR", "DT_MINUTE",
-			"DT_SECOND", "DT_UTC_SIMPLE", "DT_UTC_YEAR", "DT_UTC_MONTH",
-			"DT_UTC_DAY", "DT_UTC_HOUR", "DT_UTC_MINUTE", "DT_UTC_SECOND"
-		};
-
 		public EditAutoTypeItemForm()
 		{
 			InitializeComponent();
 			Program.Translation.ApplyTo(this);
 		}
 
-		public void InitEx(AutoTypeConfig atConfig, ProtectedStringDictionary vStringDict,
-			int iOrgIndex, bool bEditSequenceOnly)
+		public void InitEx(AutoTypeConfig atConfig, int iAssocIndex, bool bEditSequenceOnly,
+			string strDefaultSeq, ProtectedStringDictionary vStringDict)
 		{
-			Debug.Assert(vStringDict != null); if(vStringDict == null) throw new ArgumentNullException("vStringDict");
 			Debug.Assert(atConfig != null); if(atConfig == null) throw new ArgumentNullException("atConfig");
 
 			m_atConfig = atConfig;
-			m_vStringDict = vStringDict;
-			m_iOrgIndex = iOrgIndex;
+			m_iAssocIndex = iAssocIndex;
 			m_bEditSequenceOnly = bEditSequenceOnly;
+			m_strDefaultSeq = (strDefaultSeq ?? string.Empty);
+			m_vStringDict = (vStringDict ?? new ProtectedStringDictionary());
 		}
 
 		private void OnFormLoad(object sender, EventArgs e)
 		{
-			Debug.Assert(m_vStringDict != null); if(m_vStringDict == null) throw new InvalidOperationException();
 			Debug.Assert(m_atConfig != null); if(m_atConfig == null) throw new InvalidOperationException();
+			Debug.Assert(m_vStringDict != null); if(m_vStringDict == null) throw new InvalidOperationException();
 
 			GlobalWindowManager.AddWindow(this);
 
@@ -123,12 +99,81 @@ namespace KeePass.Forms
 
 			this.Icon = Properties.Resources.KeePass;
 
+			// FontUtil.AssignDefaultBold(m_lblTargetWindow);
+			// FontUtil.AssignDefaultBold(m_rbSeqDefault);
+			// FontUtil.AssignDefaultBold(m_rbSeqCustom);
+
 			UIUtil.EnableAutoCompletion(m_cmbWindow, false);
 
 			// m_clrOriginalForeground = m_lblOpenHint.ForeColor;
 			// m_clrOriginalBackground = m_cmbWindow.BackColor;
 			// m_strOriginalWindowHint = m_lblTargetWindowInfo.Text;
 
+			InitPlaceholdersBox();
+
+			string strInitSeq = m_atConfig.DefaultSequence;
+			if(m_iAssocIndex >= 0)
+			{
+				AutoTypeAssociation asInit = m_atConfig.GetAt(m_iAssocIndex);
+				m_cmbWindow.Text = asInit.WindowName;
+
+				if(!m_bEditSequenceOnly) strInitSeq = asInit.Sequence;
+			}
+			else if(m_bEditSequenceOnly)
+				m_cmbWindow.Text = "(" + KPRes.Default + ")";
+			else strInitSeq = string.Empty;
+
+			bool bSetDefault = false;
+			m_bBlockUpdates = true;
+			if(strInitSeq.Length > 0) m_rbSeqCustom.Checked = true;
+			else
+			{
+				m_rbSeqDefault.Checked = true;
+				bSetDefault = true;
+			}
+			m_bBlockUpdates = false;
+
+			if(bSetDefault) m_rbKeySeq.Text = m_strDefaultSeq;
+			else m_rbKeySeq.Text = strInitSeq;
+
+			try
+			{
+				if(NativeLib.IsUnix()) PopulateWindowsListUnix();
+				else PopulateWindowsListWin();
+			}
+			catch(Exception) { Debug.Assert(false); }
+
+			EnableControlsEx();
+		}
+
+		private void InitPlaceholdersBox()
+		{
+			const string VkcBreak = @"<break />";
+
+			string[] vSpecialKeyCodes = new string[] {
+				"TAB", "ENTER", "UP", "DOWN", "LEFT", "RIGHT",
+				"HOME", "END", "PGUP", "PGDN",
+				"INSERT", "DELETE", VkcBreak,
+				"BACKSPACE", "BREAK", "CAPSLOCK",
+				"ESC", "HELP", "NUMLOCK", "PRTSC", "SCROLLLOCK", VkcBreak,
+				"F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12",
+				"F13", "F14", "F15", "F16", VkcBreak,
+				"ADD", "SUBTRACT", "MULTIPLY", "DIVIDE"
+			};
+
+			string[] vSpecialPlaceholders = new string[] {
+				"GROUP", "GROUPPATH", "PASSWORD_ENC", "URL:RMVSCM",
+				"C:Comment", VkcBreak,
+				"DELAY 1000", "DELAY=200", "VKEY 65",
+				"PICKCHARS", "PICKCHARS:Password:C=3",
+				"NEWPASSWORD", "HMACOTP", "CLEARFIELD", VkcBreak,
+				"APPDIR", "DB_PATH", "DB_DIR", "DB_NAME", "DB_BASENAME", "DB_EXT",
+				"ENV_DIRSEP", VkcBreak,
+				"DT_SIMPLE", "DT_YEAR", "DT_MONTH", "DT_DAY", "DT_HOUR", "DT_MINUTE",
+				"DT_SECOND", "DT_UTC_SIMPLE", "DT_UTC_YEAR", "DT_UTC_MONTH",
+				"DT_UTC_DAY", "DT_UTC_HOUR", "DT_UTC_MINUTE", "DT_UTC_SECOND"
+			};
+
 			RichTextBuilder rb = new RichTextBuilder();
 			rb.AppendLine(KPRes.StandardFields, FontStyle.Bold, null, null, ":", null);
 
@@ -168,7 +213,7 @@ namespace KeePass.Forms
 			rb.AppendLine();
 			rb.AppendLine(KPRes.SpecialKeys, FontStyle.Bold, null, null, ":", null);
 			bFirst = true;
-			foreach(string strNav in SpecialKeyCodes)
+			foreach(string strNav in vSpecialKeyCodes)
 			{
 				if(strNav == VkcBreak) { rb.AppendLine(); rb.AppendLine(); bFirst = true; }
 				else
@@ -183,7 +228,7 @@ namespace KeePass.Forms
 			rb.AppendLine();
 			rb.AppendLine(KPRes.OtherPlaceholders, FontStyle.Bold, null, null, ":", null);
 			bFirst = true;
-			foreach(string strPH in SpecialPlaceholders)
+			foreach(string strPH in vSpecialPlaceholders)
 			{
 				if(strPH == VkcBreak) { rb.AppendLine(); rb.AppendLine(); bFirst = true; }
 				else
@@ -197,38 +242,16 @@ namespace KeePass.Forms
 			rb.Build(m_rtbPlaceholders);
 
 			LinkifyRtf(m_rtbPlaceholders);
-
-			if(m_iOrgIndex >= 0)
-			{
-				AutoTypeAssociation asInit = m_atConfig.GetAt(m_iOrgIndex);
-				m_cmbWindow.Text = asInit.WindowName;
-
-				if(!m_bEditSequenceOnly)
-					m_rbKeySeq.Text = asInit.Sequence;
-				else
-					m_rbKeySeq.Text = m_atConfig.DefaultSequence;
-			}
-			else if(m_bEditSequenceOnly)
-				m_cmbWindow.Text = "(" + KPRes.Default + ")";
-
-			m_bBlockUpdates = true;
-			if(m_rbKeySeq.Text.Length > 0) m_rbSeqCustom.Checked = true;
-			else m_rbSeqDefault.Checked = true;
-			m_bBlockUpdates = false;
-
-			try
-			{
-				if(NativeLib.IsUnix()) PopulateWindowsListUnix();
-				else PopulateWindowsListWin();
-			}
-			catch(Exception) { Debug.Assert(false); }
-
-			EnableControlsEx();
 		}
 
 		private void OnFormShown(object sender, EventArgs e)
 		{
-			UIUtil.SetFocus(m_cmbWindow, this); // Doesn't work in OnFormLoad
+			// Focusing doesn't work in OnFormLoad
+			if(m_cmbWindow.Enabled)
+				UIUtil.SetFocus(m_cmbWindow, this);
+			else if(m_rbKeySeq.Enabled)
+				UIUtil.SetFocus(m_rbKeySeq, this);
+			else UIUtil.SetFocus(m_btnOK, this);
 		}
 
 		private void CleanUpEx()
@@ -254,7 +277,7 @@ namespace KeePass.Forms
 			if(!m_bEditSequenceOnly)
 			{
 				AutoTypeAssociation atAssoc;
-				if(m_iOrgIndex >= 0) atAssoc = m_atConfig.GetAt(m_iOrgIndex);
+				if(m_iAssocIndex >= 0) atAssoc = m_atConfig.GetAt(m_iAssocIndex);
 				else
 				{
 					atAssoc = new AutoTypeAssociation();
@@ -316,13 +339,18 @@ namespace KeePass.Forms
 			//	m_btnOK.Enabled = false;
 			// }
 
-			if(m_bEditSequenceOnly)
-			{
-				m_cmbWindow.Enabled = false;
-				// m_lblTargetWindowInfo.Enabled = false;
-			}
+			m_lblTargetWindow.Enabled = !m_bEditSequenceOnly;
+			m_cmbWindow.Enabled = !m_bEditSequenceOnly;
+			m_lblOpenHint.Enabled = !m_bEditSequenceOnly;
+			m_lnkWildcardRegexHint.Enabled = !m_bEditSequenceOnly;
+
+			// Workaround for disabled link render bug (gray too dark)
+			m_lnkWildcardRegexHint.Visible = !m_bEditSequenceOnly;
 
-			m_rbKeySeq.Enabled = m_rbSeqCustom.Checked;
+			bool bCustom = m_rbSeqCustom.Checked;
+			m_rbKeySeq.Enabled = bCustom;
+			m_lblKeySeqInsertInfo.Enabled = bCustom;
+			m_rtbPlaceholders.Enabled = bCustom;
 
 			m_bBlockUpdates = false;
 		}
diff --git a/KeePass/Forms/EditStringForm.cs b/KeePass/Forms/EditStringForm.cs
index 0e0f7a1..8e7face 100644
--- a/KeePass/Forms/EditStringForm.cs
+++ b/KeePass/Forms/EditStringForm.cs
@@ -186,20 +186,17 @@ namespace KeePass.Forms
 
 			if(m_strStringName == null) // Add string field
 			{
-				Debug.Assert(m_vStringDict.Exists(strName) == false);
-
-				ProtectedString ps = new ProtectedString(m_cbProtect.Checked, m_richStringValue.Text);
-					m_vStringDict.Set(strName, ps);
+				Debug.Assert(!m_vStringDict.Exists(strName));
 			}
 			else // Edit string field
 			{
 				if(!m_strStringName.Equals(strName))
 					m_vStringDict.Remove(m_strStringName);
-
-				ProtectedString ps = new ProtectedString(m_cbProtect.Checked,
-					m_richStringValue.Text);
-				m_vStringDict.Set(strName, ps);
 			}
+
+			ProtectedString ps = new ProtectedString(m_cbProtect.Checked,
+				m_richStringValue.Text);
+			m_vStringDict.Set(strName, ps);
 		}
 
 		private void OnBtnCancel(object sender, EventArgs e)
diff --git a/KeePass/Forms/ExchangeDataForm.cs b/KeePass/Forms/ExchangeDataForm.cs
index 0f5b68b..1b9fd84 100644
--- a/KeePass/Forms/ExchangeDataForm.cs
+++ b/KeePass/Forms/ExchangeDataForm.cs
@@ -195,19 +195,19 @@ namespace KeePass.Forms
 			if(!m_fmtCur.RequiresFile) return; // Break on double-click
 
 			string strFormat = m_fmtCur.FormatName;
-			if((strFormat == null) || (strFormat.Length == 0))
-				strFormat = KPRes.Data;
+			if(string.IsNullOrEmpty(strFormat)) strFormat = KPRes.Data;
 
-			string strExt = m_fmtCur.DefaultExtension;
-			if((strExt == null) || (strExt.Length == 0))
-				strExt = "export";
+			string strExts = m_fmtCur.DefaultExtension;
+			if(string.IsNullOrEmpty(strExts)) strExts = "export";
+			string strPriExt = UIUtil.GetPrimaryFileTypeExt(strExts);
+			if(strPriExt.Length == 0) strPriExt = "export"; // In case of "|"
 
-			string strFilter = UIUtil.CreateFileTypeFilter(strExt, strFormat, true);
+			string strFilter = UIUtil.CreateFileTypeFilter(strExts, strFormat, true);
 
 			if(m_bExport == false) // Import
 			{
 				OpenFileDialog ofd = UIUtil.CreateOpenFileDialog(KPRes.Import + ": " +
-					strFormat, strFilter, 1, strExt, true, true);
+					strFormat, strFilter, 1, strPriExt, true, true);
 
 				if(ofd.ShowDialog() != DialogResult.OK) return;
 
@@ -230,7 +230,7 @@ namespace KeePass.Forms
 			else // Export
 			{
 				SaveFileDialog sfd = UIUtil.CreateSaveFileDialog(KPRes.Export + ": " +
-					strFormat, null, strFilter, 1, strExt, false);
+					strFormat, null, strFilter, 1, strPriExt, false);
 
 				string strSuggestion;
 				if((m_pwDatabaseInfo != null) &&
@@ -241,15 +241,9 @@ namespace KeePass.Forms
 				}
 				else strSuggestion = KPRes.Database;
 
-				if((m_fmtCur != null) && (m_fmtCur.DefaultExtension != null) &&
-					(m_fmtCur.DefaultExtension.Length > 0))
-				{
-					strSuggestion += "." + m_fmtCur.DefaultExtension;
-				}
-				else strSuggestion += ".export";
+				strSuggestion += "." + strPriExt;
 
 				sfd.FileName = strSuggestion;
-
 				if(sfd.ShowDialog() != DialogResult.OK) return;
 
 				m_tbFile.Text = sfd.FileName;
diff --git a/KeePass/Forms/FieldRefForm.cs b/KeePass/Forms/FieldRefForm.cs
index 4e791fd..56c7f2e 100644
--- a/KeePass/Forms/FieldRefForm.cs
+++ b/KeePass/Forms/FieldRefForm.cs
@@ -70,9 +70,7 @@ namespace KeePass.Forms
 
 			this.Icon = Properties.Resources.KeePass;
 
-			UIUtil.SetExplorerTheme(m_lvEntries.Handle);
-			if(UISystemFonts.ListFont != null)
-				m_lvEntries.Font = UISystemFonts.ListFont;
+			UIUtil.SetExplorerTheme(m_lvEntries, true);
 
 			m_vColumns.Add(new KeyValuePair<string, string>(PwDefs.TitleField, KPRes.Title));
 			m_vColumns.Add(new KeyValuePair<string, string>(PwDefs.UserNameField, KPRes.UserName));
diff --git a/KeePass/Forms/FileBrowserForm.cs b/KeePass/Forms/FileBrowserForm.cs
index 757452f..c1a8be4 100644
--- a/KeePass/Forms/FileBrowserForm.cs
+++ b/KeePass/Forms/FileBrowserForm.cs
@@ -102,13 +102,8 @@ namespace KeePass.Forms
 			{
 				m_tvFolders.ShowLines = false;
 
-				UIUtil.SetExplorerTheme(m_tvFolders.Handle);
-				UIUtil.SetExplorerTheme(m_lvFiles.Handle);
-			}
-			if(UISystemFonts.ListFont != null)
-			{
-				m_tvFolders.Font = UISystemFonts.ListFont;
-				m_lvFiles.Font = UISystemFonts.ListFont;
+				UIUtil.SetExplorerTheme(m_tvFolders, true);
+				UIUtil.SetExplorerTheme(m_lvFiles, true);
 			}
 
 			m_btnOK.Text = (m_bSaveMode ? KPRes.SaveCmd : KPRes.OpenCmd);
diff --git a/KeePass/Forms/GroupForm.Designer.cs b/KeePass/Forms/GroupForm.Designer.cs
index f2a90ab..d7728f5 100644
--- a/KeePass/Forms/GroupForm.Designer.cs
+++ b/KeePass/Forms/GroupForm.Designer.cs
@@ -160,7 +160,6 @@
 			this.m_dtExpires.Name = "m_dtExpires";
 			this.m_dtExpires.Size = new System.Drawing.Size(259, 20);
 			this.m_dtExpires.TabIndex = 5;
-			this.m_dtExpires.ValueChanged += new System.EventHandler(this.OnExpiresValueChanged);
 			// 
 			// m_cbExpires
 			// 
@@ -267,7 +266,7 @@
 			// 
 			// m_btnAutoTypeEdit
 			// 
-			this.m_btnAutoTypeEdit.Location = new System.Drawing.Point(318, 57);
+			this.m_btnAutoTypeEdit.Location = new System.Drawing.Point(315, 54);
 			this.m_btnAutoTypeEdit.Name = "m_btnAutoTypeEdit";
 			this.m_btnAutoTypeEdit.Size = new System.Drawing.Size(32, 23);
 			this.m_btnAutoTypeEdit.TabIndex = 3;
@@ -299,7 +298,7 @@
 			// 
 			// m_lblAutoTypeDesc
 			// 
-			this.m_lblAutoTypeDesc.Location = new System.Drawing.Point(29, 82);
+			this.m_lblAutoTypeDesc.Location = new System.Drawing.Point(26, 79);
 			this.m_lblAutoTypeDesc.Name = "m_lblAutoTypeDesc";
 			this.m_lblAutoTypeDesc.Size = new System.Drawing.Size(321, 27);
 			this.m_lblAutoTypeDesc.TabIndex = 4;
@@ -308,7 +307,7 @@
 			// 
 			// m_tbDefaultAutoTypeSeq
 			// 
-			this.m_tbDefaultAutoTypeSeq.Location = new System.Drawing.Point(32, 59);
+			this.m_tbDefaultAutoTypeSeq.Location = new System.Drawing.Point(29, 56);
 			this.m_tbDefaultAutoTypeSeq.Name = "m_tbDefaultAutoTypeSeq";
 			this.m_tbDefaultAutoTypeSeq.Size = new System.Drawing.Size(280, 20);
 			this.m_tbDefaultAutoTypeSeq.TabIndex = 2;
diff --git a/KeePass/Forms/GroupForm.cs b/KeePass/Forms/GroupForm.cs
index d78454d..3a0f7b5 100644
--- a/KeePass/Forms/GroupForm.cs
+++ b/KeePass/Forms/GroupForm.cs
@@ -43,6 +43,8 @@ namespace KeePass.Forms
 		private PwIcon m_pwIconIndex = 0;
 		private PwUuid m_pwCustomIconID = PwUuid.Zero;
 
+		private ExpiryControlGroup m_cgExpiry = new ExpiryControlGroup();
+
 		public void InitEx(PwGroup pg, ImageList ilClientIcons, PwDatabase pwDatabase)
 		{
 			m_pwGroup = pg;
@@ -71,9 +73,6 @@ namespace KeePass.Forms
 			UIUtil.SetButtonImage(m_btnAutoTypeEdit,
 				Properties.Resources.B16x16_Wizard, true);
 
-			m_dtExpires.CustomFormat = DateTimeFormatInfo.CurrentInfo.ShortDatePattern +
-				" " + DateTimeFormatInfo.CurrentInfo.LongTimePattern;
-
 			m_pwIconIndex = m_pwGroup.IconId;
 			m_pwCustomIconID = m_pwGroup.CustomIconUuid;
 			
@@ -94,9 +93,10 @@ namespace KeePass.Forms
 			}
 			else // Does not expire
 			{
-				m_dtExpires.Value = DateTime.Now;
+				m_dtExpires.Value = DateTime.Now.Date;
 				m_cbExpires.Checked = false;
 			}
+			m_cgExpiry.Attach(m_cbExpires, m_dtExpires);
 
 			UIUtil.MakeInheritableBoolComboBox(m_cmbEnableAutoType,
 				m_pwGroup.EnableAutoType, m_pwGroup.GetAutoTypeEnabledInherited());
@@ -137,8 +137,8 @@ namespace KeePass.Forms
 			m_pwGroup.IconId = m_pwIconIndex;
 			m_pwGroup.CustomIconUuid = m_pwCustomIconID;
 
-			m_pwGroup.Expires = m_cbExpires.Checked;
-			m_pwGroup.ExpiryTime = m_dtExpires.Value;
+			m_pwGroup.Expires = m_cgExpiry.Checked;
+			m_pwGroup.ExpiryTime = m_cgExpiry.Value;
 
 			m_pwGroup.EnableAutoType = UIUtil.GetInheritableBoolComboBoxValue(m_cmbEnableAutoType);
 			m_pwGroup.EnableSearching = UIUtil.GetInheritableBoolComboBoxValue(m_cmbEnableSearching);
@@ -152,6 +152,11 @@ namespace KeePass.Forms
 		{
 		}
 
+		private void CleanUpEx()
+		{
+			m_cgExpiry.Release();
+		}
+
 		private void OnBtnIcon(object sender, EventArgs e)
 		{
 			IconPickerForm ipf = new IconPickerForm();
@@ -176,11 +181,6 @@ namespace KeePass.Forms
 			UIUtil.DestroyForm(ipf);
 		}
 
-		private void OnExpiresValueChanged(object sender, EventArgs e)
-		{
-			m_cbExpires.Checked = true;
-		}
-
 		private void OnAutoTypeInheritCheckedChanged(object sender, EventArgs e)
 		{
 			EnableControlsEx();
@@ -194,7 +194,7 @@ namespace KeePass.Forms
 			atConfig.DefaultSequence = m_tbDefaultAutoTypeSeq.Text;
 
 			EditAutoTypeItemForm dlg = new EditAutoTypeItemForm();
-			dlg.InitEx(atConfig, new ProtectedStringDictionary(), -1, true);
+			dlg.InitEx(atConfig, -1, true, atConfig.DefaultSequence, null);
 
 			if(dlg.ShowDialog() == DialogResult.OK)
 				m_tbDefaultAutoTypeSeq.Text = atConfig.DefaultSequence;
@@ -205,6 +205,7 @@ namespace KeePass.Forms
 
 		private void OnFormClosed(object sender, FormClosedEventArgs e)
 		{
+			CleanUpEx();
 			GlobalWindowManager.RemoveWindow(this);
 		}
 	}
diff --git a/KeePass/Forms/IconPickerForm.cs b/KeePass/Forms/IconPickerForm.cs
index 8d88515..50a0469 100644
--- a/KeePass/Forms/IconPickerForm.cs
+++ b/KeePass/Forms/IconPickerForm.cs
@@ -240,7 +240,7 @@ namespace KeePass.Forms
 
 					try
 					{
-						if(File.Exists(strFile) == false)
+						if(!File.Exists(strFile))
 							throw new FileNotFoundException();
 
 						// Image img = Image.FromFile(strFile);
diff --git a/KeePass/Forms/KeyPromptForm.cs b/KeePass/Forms/KeyPromptForm.cs
index 383784a..1510269 100644
--- a/KeePass/Forms/KeyPromptForm.cs
+++ b/KeePass/Forms/KeyPromptForm.cs
@@ -235,8 +235,8 @@ namespace KeePass.Forms
 			Debug.Assert(strKeyFile != null); if(strKeyFile == null) strKeyFile = string.Empty;
 			bool bIsProvKey = Program.KeyProviderPool.IsKeyProvider(strKeyFile);
 
-			if(m_cbKeyFile.Checked && (!strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta)) &&
-				(bIsProvKey == false))
+			if(m_cbKeyFile.Checked && !strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta) &&
+				!bIsProvKey)
 			{
 				if(ValidateKeyFileLocation() == false) return false;
 
@@ -247,8 +247,8 @@ namespace KeePass.Forms
 					return false;
 				}
 			}
-			else if(m_cbKeyFile.Checked && (!strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta)) &&
-				(bIsProvKey == true))
+			else if(m_cbKeyFile.Checked && !strKeyFile.Equals(KPRes.NoKeyFileSpecifiedMeta) &&
+				bIsProvKey)
 			{
 				KeyProvider kp = Program.KeyProviderPool.Get(strKeyFile);
 				if((kp != null) && m_bSecureDesktop)
@@ -304,13 +304,14 @@ namespace KeePass.Forms
 
 			bool bSuccess = true;
 
-			if(File.Exists(strKeyFile) == false)
+			IOConnectionInfo ioc = IOConnectionInfo.FromPath(strKeyFile);
+			if(!IOConnection.FileExists(ioc))
 			{
 				MessageService.ShowWarning(strKeyFile, KPRes.FileNotFoundError);
 				bSuccess = false;
 			}
 
-			if(bSuccess == false)
+			if(!bSuccess)
 			{
 				int nPos = m_cmbKeyFile.Items.IndexOf(strKeyFile);
 				if(nPos >= 0) m_cmbKeyFile.Items.RemoveAt(nPos);
diff --git a/KeePass/Forms/LanguageForm.cs b/KeePass/Forms/LanguageForm.cs
index 20fafab..d7fb07a 100644
--- a/KeePass/Forms/LanguageForm.cs
+++ b/KeePass/Forms/LanguageForm.cs
@@ -30,6 +30,7 @@ using KeePass.App.Configuration;
 using KeePass.UI;
 using KeePass.Resources;
 using KeePass.Util;
+using KeePass.Util.XmlSerialization;
 
 using KeePassLib;
 using KeePassLib.Translation;
@@ -88,7 +89,8 @@ namespace KeePass.Forms
 				{
 					string strFullName = fi.FullName;
 
-					if(strFullName.ToLower().EndsWith("." + KPTranslation.FileExtension))
+					if(strFullName.EndsWith("." + KPTranslation.FileExtension,
+						StrUtil.CaseIgnoreCmp))
 					{
 						string strFileName = UrlUtil.GetFileName(strFullName);
 
@@ -105,7 +107,9 @@ namespace KeePass.Forms
 
 						try
 						{
-							KPTranslation kpTrl = KPTranslation.LoadFromFile(strFullName);
+							XmlSerializerEx xs = new XmlSerializerEx(typeof(KPTranslation));
+							KPTranslation kpTrl = KPTranslation.LoadFromFile(
+								strFullName, xs);
 
 							ListViewItem lvi = m_lvLanguages.Items.Add(
 								kpTrl.Properties.NameEnglish, 0);
diff --git a/KeePass/Forms/MainForm.Designer.cs b/KeePass/Forms/MainForm.Designer.cs
index f8b714d..ae47290 100644
--- a/KeePass/Forms/MainForm.Designer.cs
+++ b/KeePass/Forms/MainForm.Designer.cs
@@ -207,8 +207,9 @@
 			this.m_ctxTray = new System.Windows.Forms.ContextMenuStrip(this.components);
 			this.m_ctxTrayTray = new System.Windows.Forms.ToolStripMenuItem();
 			this.m_ctxTraySep0 = new System.Windows.Forms.ToolStripSeparator();
-			this.m_ctxTrayLock = new System.Windows.Forms.ToolStripMenuItem();
+			this.m_ctxTrayOptions = new System.Windows.Forms.ToolStripMenuItem();
 			this.m_ctxTraySep1 = new System.Windows.Forms.ToolStripSeparator();
+			this.m_ctxTrayLock = new System.Windows.Forms.ToolStripMenuItem();
 			this.m_ctxTrayFileExit = new System.Windows.Forms.ToolStripMenuItem();
 			this.m_timerMain = new System.Windows.Forms.Timer(this.components);
 			this.m_tabMain = new System.Windows.Forms.TabControl();
@@ -217,7 +218,6 @@
 			this.m_tvGroups = new KeePass.UI.CustomTreeViewEx();
 			this.m_lvEntries = new KeePass.UI.CustomListViewEx();
 			this.m_richEntryView = new KeePass.UI.CustomRichTextBoxEx();
-			this.m_ctxTrayOptions = new System.Windows.Forms.ToolStripMenuItem();
 			this.m_ctxGroupList.SuspendLayout();
 			this.m_ctxPwList.SuspendLayout();
 			this.m_menuMain.SuspendLayout();
@@ -248,27 +248,27 @@
             this.m_ctxGroupSep3,
             this.m_ctxGroupRearrange});
 			this.m_ctxGroupList.Name = "m_ctxGroupList";
-			this.m_ctxGroupList.Size = new System.Drawing.Size(166, 204);
+			this.m_ctxGroupList.Size = new System.Drawing.Size(180, 204);
 			this.m_ctxGroupList.Opening += new System.ComponentModel.CancelEventHandler(this.OnCtxGroupListOpening);
 			// 
 			// m_ctxGroupAdd
 			// 
 			this.m_ctxGroupAdd.Image = global::KeePass.Properties.Resources.B16x16_Folder_Sent_Mail;
 			this.m_ctxGroupAdd.Name = "m_ctxGroupAdd";
-			this.m_ctxGroupAdd.Size = new System.Drawing.Size(165, 22);
+			this.m_ctxGroupAdd.Size = new System.Drawing.Size(179, 22);
 			this.m_ctxGroupAdd.Text = "Add &Group";
 			this.m_ctxGroupAdd.Click += new System.EventHandler(this.OnGroupsAdd);
 			// 
 			// m_ctxGroupSep0
 			// 
 			this.m_ctxGroupSep0.Name = "m_ctxGroupSep0";
-			this.m_ctxGroupSep0.Size = new System.Drawing.Size(162, 6);
+			this.m_ctxGroupSep0.Size = new System.Drawing.Size(176, 6);
 			// 
 			// m_ctxGroupEdit
 			// 
 			this.m_ctxGroupEdit.Image = global::KeePass.Properties.Resources.B16x16_Folder_Txt;
 			this.m_ctxGroupEdit.Name = "m_ctxGroupEdit";
-			this.m_ctxGroupEdit.Size = new System.Drawing.Size(165, 22);
+			this.m_ctxGroupEdit.Size = new System.Drawing.Size(179, 22);
 			this.m_ctxGroupEdit.Text = "Ed&it Group";
 			this.m_ctxGroupEdit.Click += new System.EventHandler(this.OnGroupsEdit);
 			// 
@@ -276,7 +276,7 @@
 			// 
 			this.m_ctxGroupDelete.Image = global::KeePass.Properties.Resources.B16x16_Folder_Locked;
 			this.m_ctxGroupDelete.Name = "m_ctxGroupDelete";
-			this.m_ctxGroupDelete.Size = new System.Drawing.Size(165, 22);
+			this.m_ctxGroupDelete.Size = new System.Drawing.Size(179, 22);
 			this.m_ctxGroupDelete.Text = "Dele&te Group";
 			this.m_ctxGroupDelete.Click += new System.EventHandler(this.OnGroupsDelete);
 			// 
@@ -284,33 +284,33 @@
 			// 
 			this.m_ctxGroupEmpty.Image = global::KeePass.Properties.Resources.B16x16_Trashcan_Full;
 			this.m_ctxGroupEmpty.Name = "m_ctxGroupEmpty";
-			this.m_ctxGroupEmpty.Size = new System.Drawing.Size(165, 22);
+			this.m_ctxGroupEmpty.Size = new System.Drawing.Size(179, 22);
 			this.m_ctxGroupEmpty.Text = "&Empty Recycle Bin";
 			this.m_ctxGroupEmpty.Click += new System.EventHandler(this.OnGroupsEmpty);
 			// 
 			// m_ctxGroupSep1
 			// 
 			this.m_ctxGroupSep1.Name = "m_ctxGroupSep1";
-			this.m_ctxGroupSep1.Size = new System.Drawing.Size(162, 6);
+			this.m_ctxGroupSep1.Size = new System.Drawing.Size(176, 6);
 			// 
 			// m_ctxGroupFind
 			// 
 			this.m_ctxGroupFind.Image = global::KeePass.Properties.Resources.B16x16_XMag;
 			this.m_ctxGroupFind.Name = "m_ctxGroupFind";
-			this.m_ctxGroupFind.Size = new System.Drawing.Size(165, 22);
+			this.m_ctxGroupFind.Size = new System.Drawing.Size(179, 22);
 			this.m_ctxGroupFind.Text = "&Find in this Group...";
 			this.m_ctxGroupFind.Click += new System.EventHandler(this.OnGroupsFind);
 			// 
 			// m_ctxGroupSep2
 			// 
 			this.m_ctxGroupSep2.Name = "m_ctxGroupSep2";
-			this.m_ctxGroupSep2.Size = new System.Drawing.Size(162, 6);
+			this.m_ctxGroupSep2.Size = new System.Drawing.Size(176, 6);
 			// 
 			// m_ctxGroupPrint
 			// 
 			this.m_ctxGroupPrint.Image = global::KeePass.Properties.Resources.B16x16_FilePrint;
 			this.m_ctxGroupPrint.Name = "m_ctxGroupPrint";
-			this.m_ctxGroupPrint.Size = new System.Drawing.Size(165, 22);
+			this.m_ctxGroupPrint.Size = new System.Drawing.Size(179, 22);
 			this.m_ctxGroupPrint.Text = "&Print Group...";
 			this.m_ctxGroupPrint.Click += new System.EventHandler(this.OnGroupsPrint);
 			// 
@@ -318,14 +318,14 @@
 			// 
 			this.m_ctxGroupExport.Image = global::KeePass.Properties.Resources.B16x16_Folder_Outbox;
 			this.m_ctxGroupExport.Name = "m_ctxGroupExport";
-			this.m_ctxGroupExport.Size = new System.Drawing.Size(165, 22);
+			this.m_ctxGroupExport.Size = new System.Drawing.Size(179, 22);
 			this.m_ctxGroupExport.Text = "E&xport...";
 			this.m_ctxGroupExport.Click += new System.EventHandler(this.OnGroupsExport);
 			// 
 			// m_ctxGroupSep3
 			// 
 			this.m_ctxGroupSep3.Name = "m_ctxGroupSep3";
-			this.m_ctxGroupSep3.Size = new System.Drawing.Size(162, 6);
+			this.m_ctxGroupSep3.Size = new System.Drawing.Size(176, 6);
 			// 
 			// m_ctxGroupRearrange
 			// 
@@ -338,14 +338,14 @@
             this.m_ctxGroupSort,
             this.m_ctxGroupSortRec});
 			this.m_ctxGroupRearrange.Name = "m_ctxGroupRearrange";
-			this.m_ctxGroupRearrange.Size = new System.Drawing.Size(165, 22);
+			this.m_ctxGroupRearrange.Size = new System.Drawing.Size(179, 22);
 			this.m_ctxGroupRearrange.Text = "&Rearrange";
 			// 
 			// m_ctxGroupMoveToTop
 			// 
 			this.m_ctxGroupMoveToTop.Image = global::KeePass.Properties.Resources.B16x16_2UpArrow;
 			this.m_ctxGroupMoveToTop.Name = "m_ctxGroupMoveToTop";
-			this.m_ctxGroupMoveToTop.Size = new System.Drawing.Size(187, 22);
+			this.m_ctxGroupMoveToTop.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxGroupMoveToTop.Text = "Move Group to &Top";
 			this.m_ctxGroupMoveToTop.Click += new System.EventHandler(this.OnGroupsMoveToTop);
 			// 
@@ -353,7 +353,7 @@
 			// 
 			this.m_ctxGroupMoveOneUp.Image = global::KeePass.Properties.Resources.B16x16_1UpArrow;
 			this.m_ctxGroupMoveOneUp.Name = "m_ctxGroupMoveOneUp";
-			this.m_ctxGroupMoveOneUp.Size = new System.Drawing.Size(187, 22);
+			this.m_ctxGroupMoveOneUp.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxGroupMoveOneUp.Text = "Move Group &One Up";
 			this.m_ctxGroupMoveOneUp.Click += new System.EventHandler(this.OnGroupsMoveOneUp);
 			// 
@@ -361,7 +361,7 @@
 			// 
 			this.m_ctxGroupMoveOneDown.Image = global::KeePass.Properties.Resources.B16x16_1DownArrow;
 			this.m_ctxGroupMoveOneDown.Name = "m_ctxGroupMoveOneDown";
-			this.m_ctxGroupMoveOneDown.Size = new System.Drawing.Size(187, 22);
+			this.m_ctxGroupMoveOneDown.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxGroupMoveOneDown.Text = "Mo&ve Group One Down";
 			this.m_ctxGroupMoveOneDown.Click += new System.EventHandler(this.OnGroupsMoveOneDown);
 			// 
@@ -369,20 +369,20 @@
 			// 
 			this.m_ctxGroupMoveToBottom.Image = global::KeePass.Properties.Resources.B16x16_2DownArrow;
 			this.m_ctxGroupMoveToBottom.Name = "m_ctxGroupMoveToBottom";
-			this.m_ctxGroupMoveToBottom.Size = new System.Drawing.Size(187, 22);
+			this.m_ctxGroupMoveToBottom.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxGroupMoveToBottom.Text = "Move Group to &Bottom";
 			this.m_ctxGroupMoveToBottom.Click += new System.EventHandler(this.OnGroupsMoveToBottom);
 			// 
 			// m_ctxGroupRearrSep0
 			// 
 			this.m_ctxGroupRearrSep0.Name = "m_ctxGroupRearrSep0";
-			this.m_ctxGroupRearrSep0.Size = new System.Drawing.Size(184, 6);
+			this.m_ctxGroupRearrSep0.Size = new System.Drawing.Size(199, 6);
 			// 
 			// m_ctxGroupSort
 			// 
 			this.m_ctxGroupSort.Image = global::KeePass.Properties.Resources.B16x16_KaboodleLoop;
 			this.m_ctxGroupSort.Name = "m_ctxGroupSort";
-			this.m_ctxGroupSort.Size = new System.Drawing.Size(187, 22);
+			this.m_ctxGroupSort.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxGroupSort.Text = "&Sort Direct Subgroups";
 			this.m_ctxGroupSort.Click += new System.EventHandler(this.OnGroupsSort);
 			// 
@@ -390,7 +390,7 @@
 			// 
 			this.m_ctxGroupSortRec.Image = global::KeePass.Properties.Resources.B16x16_KaboodleLoop;
 			this.m_ctxGroupSortRec.Name = "m_ctxGroupSortRec";
-			this.m_ctxGroupSortRec.Size = new System.Drawing.Size(187, 22);
+			this.m_ctxGroupSortRec.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxGroupSortRec.Text = "So&rt Subgroup Tree";
 			this.m_ctxGroupSortRec.Click += new System.EventHandler(this.OnGroupsSortRec);
 			// 
@@ -490,14 +490,14 @@
             this.m_ctxEntryClipboard,
             this.m_ctxEntryRearrangePopup});
 			this.m_ctxPwList.Name = "m_ctxPwList";
-			this.m_ctxPwList.Size = new System.Drawing.Size(201, 352);
+			this.m_ctxPwList.Size = new System.Drawing.Size(215, 352);
 			this.m_ctxPwList.Opening += new System.ComponentModel.CancelEventHandler(this.OnCtxPwListOpening);
 			// 
 			// m_ctxEntryCopyUserName
 			// 
 			this.m_ctxEntryCopyUserName.Image = global::KeePass.Properties.Resources.B16x16_Personal;
 			this.m_ctxEntryCopyUserName.Name = "m_ctxEntryCopyUserName";
-			this.m_ctxEntryCopyUserName.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryCopyUserName.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryCopyUserName.Text = "Copy User &Name";
 			this.m_ctxEntryCopyUserName.Click += new System.EventHandler(this.OnEntryCopyUserName);
 			// 
@@ -505,7 +505,7 @@
 			// 
 			this.m_ctxEntryCopyPassword.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Info;
 			this.m_ctxEntryCopyPassword.Name = "m_ctxEntryCopyPassword";
-			this.m_ctxEntryCopyPassword.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryCopyPassword.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryCopyPassword.Text = "<COPYPW>";
 			this.m_ctxEntryCopyPassword.Click += new System.EventHandler(this.OnEntryCopyPassword);
 			// 
@@ -517,14 +517,14 @@
             this.m_ctxEntryUrlSep0,
             this.m_ctxEntryUrlOpenInInternal});
 			this.m_ctxEntryUrl.Name = "m_ctxEntryUrl";
-			this.m_ctxEntryUrl.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryUrl.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryUrl.Text = "&URL(s)";
 			// 
 			// m_ctxEntryOpenUrl
 			// 
 			this.m_ctxEntryOpenUrl.Image = global::KeePass.Properties.Resources.B16x16_FTP;
 			this.m_ctxEntryOpenUrl.Name = "m_ctxEntryOpenUrl";
-			this.m_ctxEntryOpenUrl.Size = new System.Drawing.Size(190, 22);
+			this.m_ctxEntryOpenUrl.Size = new System.Drawing.Size(209, 22);
 			this.m_ctxEntryOpenUrl.Text = "<>";
 			this.m_ctxEntryOpenUrl.Click += new System.EventHandler(this.OnEntryOpenUrl);
 			// 
@@ -532,21 +532,21 @@
 			// 
 			this.m_ctxEntryCopyUrl.Image = global::KeePass.Properties.Resources.B16x16_EditCopy;
 			this.m_ctxEntryCopyUrl.Name = "m_ctxEntryCopyUrl";
-			this.m_ctxEntryCopyUrl.Size = new System.Drawing.Size(190, 22);
+			this.m_ctxEntryCopyUrl.Size = new System.Drawing.Size(209, 22);
 			this.m_ctxEntryCopyUrl.Text = "&Copy to Clipboard";
 			this.m_ctxEntryCopyUrl.Click += new System.EventHandler(this.OnEntryCopyURL);
 			// 
 			// m_ctxEntryUrlSep0
 			// 
 			this.m_ctxEntryUrlSep0.Name = "m_ctxEntryUrlSep0";
-			this.m_ctxEntryUrlSep0.Size = new System.Drawing.Size(187, 6);
+			this.m_ctxEntryUrlSep0.Size = new System.Drawing.Size(206, 6);
 			this.m_ctxEntryUrlSep0.Visible = false;
 			// 
 			// m_ctxEntryUrlOpenInInternal
 			// 
 			this.m_ctxEntryUrlOpenInInternal.Image = global::KeePass.Properties.Resources.B16x16_Browser;
 			this.m_ctxEntryUrlOpenInInternal.Name = "m_ctxEntryUrlOpenInInternal";
-			this.m_ctxEntryUrlOpenInInternal.Size = new System.Drawing.Size(190, 22);
+			this.m_ctxEntryUrlOpenInInternal.Size = new System.Drawing.Size(209, 22);
 			this.m_ctxEntryUrlOpenInInternal.Text = "Open in Internal Browser";
 			this.m_ctxEntryUrlOpenInInternal.Visible = false;
 			this.m_ctxEntryUrlOpenInInternal.Click += new System.EventHandler(this.OnEntryUrlOpenInInternal);
@@ -554,46 +554,46 @@
 			// m_ctxEntryCopyCustomString
 			// 
 			this.m_ctxEntryCopyCustomString.Name = "m_ctxEntryCopyCustomString";
-			this.m_ctxEntryCopyCustomString.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryCopyCustomString.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryCopyCustomString.Text = "Copy Custom &String";
 			// 
 			// m_ctxEntryAttachments
 			// 
 			this.m_ctxEntryAttachments.Name = "m_ctxEntryAttachments";
-			this.m_ctxEntryAttachments.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryAttachments.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryAttachments.Text = "Attach&ments";
 			// 
 			// m_ctxEntrySaveAttachedFiles
 			// 
 			this.m_ctxEntrySaveAttachedFiles.Image = global::KeePass.Properties.Resources.B16x16_Attach;
 			this.m_ctxEntrySaveAttachedFiles.Name = "m_ctxEntrySaveAttachedFiles";
-			this.m_ctxEntrySaveAttachedFiles.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntrySaveAttachedFiles.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntrySaveAttachedFiles.Text = "Save Attached &File(s) To...";
 			this.m_ctxEntrySaveAttachedFiles.Click += new System.EventHandler(this.OnEntrySaveAttachments);
 			// 
 			// m_ctxEntrySep0
 			// 
 			this.m_ctxEntrySep0.Name = "m_ctxEntrySep0";
-			this.m_ctxEntrySep0.Size = new System.Drawing.Size(197, 6);
+			this.m_ctxEntrySep0.Size = new System.Drawing.Size(211, 6);
 			// 
 			// m_ctxEntryPerformAutoType
 			// 
 			this.m_ctxEntryPerformAutoType.Image = global::KeePass.Properties.Resources.B16x16_KRec_Record;
 			this.m_ctxEntryPerformAutoType.Name = "m_ctxEntryPerformAutoType";
-			this.m_ctxEntryPerformAutoType.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryPerformAutoType.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryPerformAutoType.Text = "&Perform Auto-Type";
 			this.m_ctxEntryPerformAutoType.Click += new System.EventHandler(this.OnEntryPerformAutoType);
 			// 
 			// m_ctxEntrySep1
 			// 
 			this.m_ctxEntrySep1.Name = "m_ctxEntrySep1";
-			this.m_ctxEntrySep1.Size = new System.Drawing.Size(197, 6);
+			this.m_ctxEntrySep1.Size = new System.Drawing.Size(211, 6);
 			// 
 			// m_ctxEntryAdd
 			// 
 			this.m_ctxEntryAdd.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Import;
 			this.m_ctxEntryAdd.Name = "m_ctxEntryAdd";
-			this.m_ctxEntryAdd.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryAdd.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryAdd.Text = "&Add Entry...";
 			this.m_ctxEntryAdd.Click += new System.EventHandler(this.OnEntryAdd);
 			// 
@@ -601,7 +601,7 @@
 			// 
 			this.m_ctxEntryEdit.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Sign;
 			this.m_ctxEntryEdit.Name = "m_ctxEntryEdit";
-			this.m_ctxEntryEdit.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryEdit.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryEdit.Text = "&Edit/View Entry...";
 			this.m_ctxEntryEdit.Click += new System.EventHandler(this.OnEntryEdit);
 			// 
@@ -609,7 +609,7 @@
 			// 
 			this.m_ctxEntryDuplicate.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Key2;
 			this.m_ctxEntryDuplicate.Name = "m_ctxEntryDuplicate";
-			this.m_ctxEntryDuplicate.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryDuplicate.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryDuplicate.Text = "Dupli&cate Entry";
 			this.m_ctxEntryDuplicate.Click += new System.EventHandler(this.OnEntryDuplicate);
 			// 
@@ -617,7 +617,7 @@
 			// 
 			this.m_ctxEntryDelete.Image = global::KeePass.Properties.Resources.B16x16_DeleteEntry;
 			this.m_ctxEntryDelete.Name = "m_ctxEntryDelete";
-			this.m_ctxEntryDelete.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryDelete.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryDelete.Text = "&Delete Entry";
 			this.m_ctxEntryDelete.Click += new System.EventHandler(this.OnEntryDelete);
 			// 
@@ -633,7 +633,7 @@
             this.m_ctxEntrySelectedPrint,
             this.m_ctxEntrySelectedExport});
 			this.m_ctxEntryMassModify.Name = "m_ctxEntryMassModify";
-			this.m_ctxEntryMassModify.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryMassModify.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryMassModify.Text = "Selected Entr&ies";
 			// 
 			// m_ctxEntrySetColor
@@ -648,58 +648,58 @@
             this.m_ctxEntryColorSep1,
             this.m_ctxEntryColorCustom});
 			this.m_ctxEntrySetColor.Name = "m_ctxEntrySetColor";
-			this.m_ctxEntrySetColor.Size = new System.Drawing.Size(136, 22);
+			this.m_ctxEntrySetColor.Size = new System.Drawing.Size(144, 22);
 			this.m_ctxEntrySetColor.Text = "Set &Color";
 			// 
 			// m_ctxEntryColorStandard
 			// 
 			this.m_ctxEntryColorStandard.Name = "m_ctxEntryColorStandard";
-			this.m_ctxEntryColorStandard.Size = new System.Drawing.Size(184, 22);
+			this.m_ctxEntryColorStandard.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxEntryColorStandard.Text = "&Standard";
 			this.m_ctxEntryColorStandard.Click += new System.EventHandler(this.OnEntryColorStandard);
 			// 
 			// m_ctxEntryColorSep0
 			// 
 			this.m_ctxEntryColorSep0.Name = "m_ctxEntryColorSep0";
-			this.m_ctxEntryColorSep0.Size = new System.Drawing.Size(181, 6);
+			this.m_ctxEntryColorSep0.Size = new System.Drawing.Size(199, 6);
 			// 
 			// m_ctxEntryColorLightRed
 			// 
 			this.m_ctxEntryColorLightRed.Name = "m_ctxEntryColorLightRed";
-			this.m_ctxEntryColorLightRed.Size = new System.Drawing.Size(184, 22);
+			this.m_ctxEntryColorLightRed.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxEntryColorLightRed.Text = "Light &Red";
 			this.m_ctxEntryColorLightRed.Click += new System.EventHandler(this.OnEntryColorLightRed);
 			// 
 			// m_ctxEntryColorLightGreen
 			// 
 			this.m_ctxEntryColorLightGreen.Name = "m_ctxEntryColorLightGreen";
-			this.m_ctxEntryColorLightGreen.Size = new System.Drawing.Size(184, 22);
+			this.m_ctxEntryColorLightGreen.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxEntryColorLightGreen.Text = "Light &Green";
 			this.m_ctxEntryColorLightGreen.Click += new System.EventHandler(this.OnEntryColorLightGreen);
 			// 
 			// m_ctxEntryColorLightBlue
 			// 
 			this.m_ctxEntryColorLightBlue.Name = "m_ctxEntryColorLightBlue";
-			this.m_ctxEntryColorLightBlue.Size = new System.Drawing.Size(184, 22);
+			this.m_ctxEntryColorLightBlue.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxEntryColorLightBlue.Text = "Light &Blue";
 			this.m_ctxEntryColorLightBlue.Click += new System.EventHandler(this.OnEntryColorLightBlue);
 			// 
 			// m_ctxEntryColorLightYellow
 			// 
 			this.m_ctxEntryColorLightYellow.Name = "m_ctxEntryColorLightYellow";
-			this.m_ctxEntryColorLightYellow.Size = new System.Drawing.Size(184, 22);
+			this.m_ctxEntryColorLightYellow.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxEntryColorLightYellow.Text = "Light &Yellow";
 			this.m_ctxEntryColorLightYellow.Click += new System.EventHandler(this.OnEntryColorLightYellow);
 			// 
 			// m_ctxEntryColorSep1
 			// 
 			this.m_ctxEntryColorSep1.Name = "m_ctxEntryColorSep1";
-			this.m_ctxEntryColorSep1.Size = new System.Drawing.Size(181, 6);
+			this.m_ctxEntryColorSep1.Size = new System.Drawing.Size(199, 6);
 			// 
 			// m_ctxEntryColorCustom
 			// 
 			this.m_ctxEntryColorCustom.Name = "m_ctxEntryColorCustom";
-			this.m_ctxEntryColorCustom.Size = new System.Drawing.Size(184, 22);
+			this.m_ctxEntryColorCustom.Size = new System.Drawing.Size(202, 22);
 			this.m_ctxEntryColorCustom.Text = "&Choose Custom Color...";
 			this.m_ctxEntryColorCustom.Click += new System.EventHandler(this.OnEntryColorCustom);
 			// 
@@ -707,21 +707,21 @@
 			// 
 			this.m_ctxEntryMassSetIcon.Image = global::KeePass.Properties.Resources.B16x16_Spreadsheet;
 			this.m_ctxEntryMassSetIcon.Name = "m_ctxEntryMassSetIcon";
-			this.m_ctxEntryMassSetIcon.Size = new System.Drawing.Size(136, 22);
+			this.m_ctxEntryMassSetIcon.Size = new System.Drawing.Size(144, 22);
 			this.m_ctxEntryMassSetIcon.Text = "Set &Icons...";
 			this.m_ctxEntryMassSetIcon.Click += new System.EventHandler(this.OnEntryMassSetIcon);
 			// 
 			// m_ctxEntrySelectedSep0
 			// 
 			this.m_ctxEntrySelectedSep0.Name = "m_ctxEntrySelectedSep0";
-			this.m_ctxEntrySelectedSep0.Size = new System.Drawing.Size(133, 6);
+			this.m_ctxEntrySelectedSep0.Size = new System.Drawing.Size(141, 6);
 			// 
 			// m_ctxEntrySelectedAddTag
 			// 
 			this.m_ctxEntrySelectedAddTag.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
             this.m_ctxEntrySelectedNewTag});
 			this.m_ctxEntrySelectedAddTag.Name = "m_ctxEntrySelectedAddTag";
-			this.m_ctxEntrySelectedAddTag.Size = new System.Drawing.Size(136, 22);
+			this.m_ctxEntrySelectedAddTag.Size = new System.Drawing.Size(144, 22);
 			this.m_ctxEntrySelectedAddTag.Text = "Add &Tag";
 			this.m_ctxEntrySelectedAddTag.DropDownOpening += new System.EventHandler(this.OnEntrySelectedAddTagOpening);
 			// 
@@ -729,27 +729,27 @@
 			// 
 			this.m_ctxEntrySelectedNewTag.Image = global::KeePass.Properties.Resources.B16x16_KNotes;
 			this.m_ctxEntrySelectedNewTag.Name = "m_ctxEntrySelectedNewTag";
-			this.m_ctxEntrySelectedNewTag.Size = new System.Drawing.Size(127, 22);
+			this.m_ctxEntrySelectedNewTag.Size = new System.Drawing.Size(132, 22);
 			this.m_ctxEntrySelectedNewTag.Text = "&New Tag...";
 			this.m_ctxEntrySelectedNewTag.Click += new System.EventHandler(this.OnEntrySelectedNewTag);
 			// 
 			// m_ctxEntrySelectedRemoveTag
 			// 
 			this.m_ctxEntrySelectedRemoveTag.Name = "m_ctxEntrySelectedRemoveTag";
-			this.m_ctxEntrySelectedRemoveTag.Size = new System.Drawing.Size(136, 22);
+			this.m_ctxEntrySelectedRemoveTag.Size = new System.Drawing.Size(144, 22);
 			this.m_ctxEntrySelectedRemoveTag.Text = "&Remove Tag";
 			this.m_ctxEntrySelectedRemoveTag.DropDownOpening += new System.EventHandler(this.OnEntrySelectedRemoveTagOpening);
 			// 
 			// m_ctxEntrySelectedSep1
 			// 
 			this.m_ctxEntrySelectedSep1.Name = "m_ctxEntrySelectedSep1";
-			this.m_ctxEntrySelectedSep1.Size = new System.Drawing.Size(133, 6);
+			this.m_ctxEntrySelectedSep1.Size = new System.Drawing.Size(141, 6);
 			// 
 			// m_ctxEntrySelectedPrint
 			// 
 			this.m_ctxEntrySelectedPrint.Image = global::KeePass.Properties.Resources.B16x16_FilePrint;
 			this.m_ctxEntrySelectedPrint.Name = "m_ctxEntrySelectedPrint";
-			this.m_ctxEntrySelectedPrint.Size = new System.Drawing.Size(136, 22);
+			this.m_ctxEntrySelectedPrint.Size = new System.Drawing.Size(144, 22);
 			this.m_ctxEntrySelectedPrint.Text = "&Print...";
 			this.m_ctxEntrySelectedPrint.Click += new System.EventHandler(this.OnEntrySelectedPrint);
 			// 
@@ -757,21 +757,21 @@
 			// 
 			this.m_ctxEntrySelectedExport.Image = global::KeePass.Properties.Resources.B16x16_Folder_Outbox;
 			this.m_ctxEntrySelectedExport.Name = "m_ctxEntrySelectedExport";
-			this.m_ctxEntrySelectedExport.Size = new System.Drawing.Size(136, 22);
+			this.m_ctxEntrySelectedExport.Size = new System.Drawing.Size(144, 22);
 			this.m_ctxEntrySelectedExport.Text = "E&xport...";
 			this.m_ctxEntrySelectedExport.Click += new System.EventHandler(this.OnEntrySelectedExport);
 			// 
 			// m_ctxEntrySelectAll
 			// 
 			this.m_ctxEntrySelectAll.Name = "m_ctxEntrySelectAll";
-			this.m_ctxEntrySelectAll.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntrySelectAll.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntrySelectAll.Text = "Se&lect All";
 			this.m_ctxEntrySelectAll.Click += new System.EventHandler(this.OnEntrySelectAll);
 			// 
 			// m_ctxEntrySep2
 			// 
 			this.m_ctxEntrySep2.Name = "m_ctxEntrySep2";
-			this.m_ctxEntrySep2.Size = new System.Drawing.Size(197, 6);
+			this.m_ctxEntrySep2.Size = new System.Drawing.Size(211, 6);
 			// 
 			// m_ctxEntryClipboard
 			// 
@@ -779,7 +779,7 @@
             this.m_ctxEntryClipCopy,
             this.m_ctxEntryClipPaste});
 			this.m_ctxEntryClipboard.Name = "m_ctxEntryClipboard";
-			this.m_ctxEntryClipboard.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryClipboard.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryClipboard.Text = "Clip&board";
 			this.m_ctxEntryClipboard.DropDownOpening += new System.EventHandler(this.OnCtxEntryClipboardOpening);
 			// 
@@ -787,7 +787,7 @@
 			// 
 			this.m_ctxEntryClipCopy.Image = global::KeePass.Properties.Resources.B16x16_EditCopy;
 			this.m_ctxEntryClipCopy.Name = "m_ctxEntryClipCopy";
-			this.m_ctxEntryClipCopy.Size = new System.Drawing.Size(136, 22);
+			this.m_ctxEntryClipCopy.Size = new System.Drawing.Size(146, 22);
 			this.m_ctxEntryClipCopy.Text = "&Copy Entries";
 			this.m_ctxEntryClipCopy.Click += new System.EventHandler(this.OnEntryClipCopy);
 			// 
@@ -795,7 +795,7 @@
 			// 
 			this.m_ctxEntryClipPaste.Image = global::KeePass.Properties.Resources.B16x16_EditPaste;
 			this.m_ctxEntryClipPaste.Name = "m_ctxEntryClipPaste";
-			this.m_ctxEntryClipPaste.Size = new System.Drawing.Size(136, 22);
+			this.m_ctxEntryClipPaste.Size = new System.Drawing.Size(146, 22);
 			this.m_ctxEntryClipPaste.Text = "&Paste Entries";
 			this.m_ctxEntryClipPaste.Click += new System.EventHandler(this.OnEntryClipPaste);
 			// 
@@ -807,14 +807,14 @@
             this.m_ctxEntryMoveOneDown,
             this.m_ctxEntryMoveToBottom});
 			this.m_ctxEntryRearrangePopup.Name = "m_ctxEntryRearrangePopup";
-			this.m_ctxEntryRearrangePopup.Size = new System.Drawing.Size(200, 22);
+			this.m_ctxEntryRearrangePopup.Size = new System.Drawing.Size(214, 22);
 			this.m_ctxEntryRearrangePopup.Text = "&Rearrange";
 			// 
 			// m_ctxEntryMoveToTop
 			// 
 			this.m_ctxEntryMoveToTop.Image = global::KeePass.Properties.Resources.B16x16_2UpArrow;
 			this.m_ctxEntryMoveToTop.Name = "m_ctxEntryMoveToTop";
-			this.m_ctxEntryMoveToTop.Size = new System.Drawing.Size(182, 22);
+			this.m_ctxEntryMoveToTop.Size = new System.Drawing.Size(195, 22);
 			this.m_ctxEntryMoveToTop.Text = "Move Entry to &Top";
 			this.m_ctxEntryMoveToTop.Click += new System.EventHandler(this.OnEntryMoveToTop);
 			// 
@@ -822,7 +822,7 @@
 			// 
 			this.m_ctxEntryMoveOneUp.Image = global::KeePass.Properties.Resources.B16x16_1UpArrow;
 			this.m_ctxEntryMoveOneUp.Name = "m_ctxEntryMoveOneUp";
-			this.m_ctxEntryMoveOneUp.Size = new System.Drawing.Size(182, 22);
+			this.m_ctxEntryMoveOneUp.Size = new System.Drawing.Size(195, 22);
 			this.m_ctxEntryMoveOneUp.Text = "Move Entry &One Up";
 			this.m_ctxEntryMoveOneUp.Click += new System.EventHandler(this.OnEntryMoveOneUp);
 			// 
@@ -830,7 +830,7 @@
 			// 
 			this.m_ctxEntryMoveOneDown.Image = global::KeePass.Properties.Resources.B16x16_1DownArrow;
 			this.m_ctxEntryMoveOneDown.Name = "m_ctxEntryMoveOneDown";
-			this.m_ctxEntryMoveOneDown.Size = new System.Drawing.Size(182, 22);
+			this.m_ctxEntryMoveOneDown.Size = new System.Drawing.Size(195, 22);
 			this.m_ctxEntryMoveOneDown.Text = "Mo&ve Entry One Down";
 			this.m_ctxEntryMoveOneDown.Click += new System.EventHandler(this.OnEntryMoveOneDown);
 			// 
@@ -838,7 +838,7 @@
 			// 
 			this.m_ctxEntryMoveToBottom.Image = global::KeePass.Properties.Resources.B16x16_2DownArrow;
 			this.m_ctxEntryMoveToBottom.Name = "m_ctxEntryMoveToBottom";
-			this.m_ctxEntryMoveToBottom.Size = new System.Drawing.Size(182, 22);
+			this.m_ctxEntryMoveToBottom.Size = new System.Drawing.Size(195, 22);
 			this.m_ctxEntryMoveToBottom.Text = "Move Entry to &Bottom";
 			this.m_ctxEntryMoveToBottom.Click += new System.EventHandler(this.OnEntryMoveToBottom);
 			// 
@@ -854,7 +854,6 @@
 			this.m_menuMain.Name = "m_menuMain";
 			this.m_menuMain.Size = new System.Drawing.Size(654, 24);
 			this.m_menuMain.TabIndex = 0;
-			this.m_menuMain.TabStop = true;
 			// 
 			// m_menuFile
 			// 
@@ -879,14 +878,14 @@
             this.m_menuFileLock,
             this.m_menuFileExit});
 			this.m_menuFile.Name = "m_menuFile";
-			this.m_menuFile.Size = new System.Drawing.Size(35, 20);
+			this.m_menuFile.Size = new System.Drawing.Size(39, 20);
 			this.m_menuFile.Text = "&File";
 			// 
 			// m_menuFileNew
 			// 
 			this.m_menuFileNew.Image = global::KeePass.Properties.Resources.B16x16_FileNew;
 			this.m_menuFileNew.Name = "m_menuFileNew";
-			this.m_menuFileNew.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileNew.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileNew.Text = "&New...";
 			this.m_menuFileNew.Click += new System.EventHandler(this.OnFileNew);
 			// 
@@ -896,14 +895,14 @@
             this.m_menuFileOpenLocal,
             this.m_menuFileOpenUrl});
 			this.m_menuFileOpen.Name = "m_menuFileOpen";
-			this.m_menuFileOpen.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileOpen.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileOpen.Text = "&Open";
 			// 
 			// m_menuFileOpenLocal
 			// 
 			this.m_menuFileOpenLocal.Image = global::KeePass.Properties.Resources.B16x16_Folder_Yellow_Open;
 			this.m_menuFileOpenLocal.Name = "m_menuFileOpenLocal";
-			this.m_menuFileOpenLocal.Size = new System.Drawing.Size(134, 22);
+			this.m_menuFileOpenLocal.Size = new System.Drawing.Size(141, 22);
 			this.m_menuFileOpenLocal.Text = "Open File...";
 			this.m_menuFileOpenLocal.Click += new System.EventHandler(this.OnFileOpen);
 			// 
@@ -911,34 +910,34 @@
 			// 
 			this.m_menuFileOpenUrl.Image = global::KeePass.Properties.Resources.B16x16_Browser;
 			this.m_menuFileOpenUrl.Name = "m_menuFileOpenUrl";
-			this.m_menuFileOpenUrl.Size = new System.Drawing.Size(134, 22);
+			this.m_menuFileOpenUrl.Size = new System.Drawing.Size(141, 22);
 			this.m_menuFileOpenUrl.Text = "Open URL...";
 			this.m_menuFileOpenUrl.Click += new System.EventHandler(this.OnFileOpenUrl);
 			// 
 			// m_menuFileRecent
 			// 
 			this.m_menuFileRecent.Name = "m_menuFileRecent";
-			this.m_menuFileRecent.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileRecent.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileRecent.Text = "Open &Recent";
 			// 
 			// m_menuFileClose
 			// 
 			this.m_menuFileClose.Image = global::KeePass.Properties.Resources.B16x16_File_Close;
 			this.m_menuFileClose.Name = "m_menuFileClose";
-			this.m_menuFileClose.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileClose.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileClose.Text = "&Close";
 			this.m_menuFileClose.Click += new System.EventHandler(this.OnFileClose);
 			// 
 			// m_menuFileSep0
 			// 
 			this.m_menuFileSep0.Name = "m_menuFileSep0";
-			this.m_menuFileSep0.Size = new System.Drawing.Size(173, 6);
+			this.m_menuFileSep0.Size = new System.Drawing.Size(187, 6);
 			// 
 			// m_menuFileSave
 			// 
 			this.m_menuFileSave.Image = global::KeePass.Properties.Resources.B16x16_FileSave;
 			this.m_menuFileSave.Name = "m_menuFileSave";
-			this.m_menuFileSave.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileSave.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileSave.Text = "&Save";
 			this.m_menuFileSave.Click += new System.EventHandler(this.OnFileSave);
 			// 
@@ -950,14 +949,14 @@
             this.m_menuFileSaveAsSep0,
             this.m_menuFileSaveAsCopy});
 			this.m_menuFileSaveAs.Name = "m_menuFileSaveAs";
-			this.m_menuFileSaveAs.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileSaveAs.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileSaveAs.Text = "Save &As";
 			// 
 			// m_menuFileSaveAsLocal
 			// 
 			this.m_menuFileSaveAsLocal.Image = global::KeePass.Properties.Resources.B16x16_FileSaveAs;
 			this.m_menuFileSaveAsLocal.Name = "m_menuFileSaveAsLocal";
-			this.m_menuFileSaveAsLocal.Size = new System.Drawing.Size(166, 22);
+			this.m_menuFileSaveAsLocal.Size = new System.Drawing.Size(176, 22);
 			this.m_menuFileSaveAsLocal.Text = "Save to &File...";
 			this.m_menuFileSaveAsLocal.Click += new System.EventHandler(this.OnFileSaveAs);
 			// 
@@ -965,33 +964,33 @@
 			// 
 			this.m_menuFileSaveAsUrl.Image = global::KeePass.Properties.Resources.B16x16_Browser;
 			this.m_menuFileSaveAsUrl.Name = "m_menuFileSaveAsUrl";
-			this.m_menuFileSaveAsUrl.Size = new System.Drawing.Size(166, 22);
+			this.m_menuFileSaveAsUrl.Size = new System.Drawing.Size(176, 22);
 			this.m_menuFileSaveAsUrl.Text = "Save to &URL...";
 			this.m_menuFileSaveAsUrl.Click += new System.EventHandler(this.OnFileSaveAsUrl);
 			// 
 			// m_menuFileSaveAsSep0
 			// 
 			this.m_menuFileSaveAsSep0.Name = "m_menuFileSaveAsSep0";
-			this.m_menuFileSaveAsSep0.Size = new System.Drawing.Size(163, 6);
+			this.m_menuFileSaveAsSep0.Size = new System.Drawing.Size(173, 6);
 			// 
 			// m_menuFileSaveAsCopy
 			// 
 			this.m_menuFileSaveAsCopy.Image = global::KeePass.Properties.Resources.B16x16_FileSaveAs;
 			this.m_menuFileSaveAsCopy.Name = "m_menuFileSaveAsCopy";
-			this.m_menuFileSaveAsCopy.Size = new System.Drawing.Size(166, 22);
+			this.m_menuFileSaveAsCopy.Size = new System.Drawing.Size(176, 22);
 			this.m_menuFileSaveAsCopy.Text = "Save &Copy to File...";
 			this.m_menuFileSaveAsCopy.Click += new System.EventHandler(this.OnFileSaveAsCopy);
 			// 
 			// m_menuFileSep1
 			// 
 			this.m_menuFileSep1.Name = "m_menuFileSep1";
-			this.m_menuFileSep1.Size = new System.Drawing.Size(173, 6);
+			this.m_menuFileSep1.Size = new System.Drawing.Size(187, 6);
 			// 
 			// m_menuFileDbSettings
 			// 
 			this.m_menuFileDbSettings.Image = global::KeePass.Properties.Resources.B16x16_Package_Development;
 			this.m_menuFileDbSettings.Name = "m_menuFileDbSettings";
-			this.m_menuFileDbSettings.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileDbSettings.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileDbSettings.Text = "&Database Settings...";
 			this.m_menuFileDbSettings.Click += new System.EventHandler(this.OnFileDbSettings);
 			// 
@@ -999,33 +998,33 @@
 			// 
 			this.m_menuFileChangeMasterKey.Image = global::KeePass.Properties.Resources.B16x16_File_Locked;
 			this.m_menuFileChangeMasterKey.Name = "m_menuFileChangeMasterKey";
-			this.m_menuFileChangeMasterKey.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileChangeMasterKey.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileChangeMasterKey.Text = "Change &Master Key...";
 			this.m_menuFileChangeMasterKey.Click += new System.EventHandler(this.OnFileChangeMasterKey);
 			// 
 			// m_menuFileSep2
 			// 
 			this.m_menuFileSep2.Name = "m_menuFileSep2";
-			this.m_menuFileSep2.Size = new System.Drawing.Size(173, 6);
+			this.m_menuFileSep2.Size = new System.Drawing.Size(187, 6);
 			// 
 			// m_menuFilePrint
 			// 
 			this.m_menuFilePrint.Image = global::KeePass.Properties.Resources.B16x16_FilePrint;
 			this.m_menuFilePrint.Name = "m_menuFilePrint";
-			this.m_menuFilePrint.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFilePrint.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFilePrint.Text = "&Print...";
 			this.m_menuFilePrint.Click += new System.EventHandler(this.OnFilePrint);
 			// 
 			// m_menuFileSep3
 			// 
 			this.m_menuFileSep3.Name = "m_menuFileSep3";
-			this.m_menuFileSep3.Size = new System.Drawing.Size(173, 6);
+			this.m_menuFileSep3.Size = new System.Drawing.Size(187, 6);
 			// 
 			// m_menuFileImport
 			// 
 			this.m_menuFileImport.Image = global::KeePass.Properties.Resources.B16x16_Folder_Inbox;
 			this.m_menuFileImport.Name = "m_menuFileImport";
-			this.m_menuFileImport.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileImport.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileImport.Text = "&Import...";
 			this.m_menuFileImport.Click += new System.EventHandler(this.OnFileImport);
 			// 
@@ -1033,7 +1032,7 @@
 			// 
 			this.m_menuFileExport.Image = global::KeePass.Properties.Resources.B16x16_Folder_Outbox;
 			this.m_menuFileExport.Name = "m_menuFileExport";
-			this.m_menuFileExport.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileExport.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileExport.Text = "&Export...";
 			this.m_menuFileExport.Click += new System.EventHandler(this.OnFileExport);
 			// 
@@ -1045,14 +1044,14 @@
             this.m_menuFileSyncSep0,
             this.m_menuFileSyncRecent});
 			this.m_menuFileSync.Name = "m_menuFileSync";
-			this.m_menuFileSync.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileSync.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileSync.Text = "S&ynchronize";
 			// 
 			// m_menuFileSyncFile
 			// 
 			this.m_menuFileSyncFile.Image = global::KeePass.Properties.Resources.B16x16_Reload_Page;
 			this.m_menuFileSyncFile.Name = "m_menuFileSyncFile";
-			this.m_menuFileSyncFile.Size = new System.Drawing.Size(188, 22);
+			this.m_menuFileSyncFile.Size = new System.Drawing.Size(203, 22);
 			this.m_menuFileSyncFile.Text = "Synchronize with &File...";
 			this.m_menuFileSyncFile.Click += new System.EventHandler(this.OnFileSynchronize);
 			// 
@@ -1060,31 +1059,31 @@
 			// 
 			this.m_menuFileSyncUrl.Image = global::KeePass.Properties.Resources.B16x16_Reload_Page;
 			this.m_menuFileSyncUrl.Name = "m_menuFileSyncUrl";
-			this.m_menuFileSyncUrl.Size = new System.Drawing.Size(188, 22);
+			this.m_menuFileSyncUrl.Size = new System.Drawing.Size(203, 22);
 			this.m_menuFileSyncUrl.Text = "Synchronize with &URL...";
 			this.m_menuFileSyncUrl.Click += new System.EventHandler(this.OnFileSynchronizeUrl);
 			// 
 			// m_menuFileSyncSep0
 			// 
 			this.m_menuFileSyncSep0.Name = "m_menuFileSyncSep0";
-			this.m_menuFileSyncSep0.Size = new System.Drawing.Size(185, 6);
+			this.m_menuFileSyncSep0.Size = new System.Drawing.Size(200, 6);
 			// 
 			// m_menuFileSyncRecent
 			// 
 			this.m_menuFileSyncRecent.Name = "m_menuFileSyncRecent";
-			this.m_menuFileSyncRecent.Size = new System.Drawing.Size(188, 22);
+			this.m_menuFileSyncRecent.Size = new System.Drawing.Size(203, 22);
 			this.m_menuFileSyncRecent.Text = "&Recent Files";
 			// 
 			// m_menuFileSep4
 			// 
 			this.m_menuFileSep4.Name = "m_menuFileSep4";
-			this.m_menuFileSep4.Size = new System.Drawing.Size(173, 6);
+			this.m_menuFileSep4.Size = new System.Drawing.Size(187, 6);
 			// 
 			// m_menuFileLock
 			// 
 			this.m_menuFileLock.Image = global::KeePass.Properties.Resources.B16x16_LockWorkspace;
 			this.m_menuFileLock.Name = "m_menuFileLock";
-			this.m_menuFileLock.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileLock.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileLock.Text = "&Lock Workspace";
 			this.m_menuFileLock.Click += new System.EventHandler(this.OnFileLock);
 			// 
@@ -1092,7 +1091,7 @@
 			// 
 			this.m_menuFileExit.Image = global::KeePass.Properties.Resources.B16x16_Exit;
 			this.m_menuFileExit.Name = "m_menuFileExit";
-			this.m_menuFileExit.Size = new System.Drawing.Size(176, 22);
+			this.m_menuFileExit.Size = new System.Drawing.Size(190, 22);
 			this.m_menuFileExit.Text = "E&xit";
 			this.m_menuFileExit.Click += new System.EventHandler(this.OnFileExit);
 			// 
@@ -1105,7 +1104,7 @@
             this.m_menuEditSep0,
             this.m_menuEditFind});
 			this.m_menuEdit.Name = "m_menuEdit";
-			this.m_menuEdit.Size = new System.Drawing.Size(37, 20);
+			this.m_menuEdit.Size = new System.Drawing.Size(40, 20);
 			this.m_menuEdit.Text = "&Edit";
 			this.m_menuEdit.DropDownOpening += new System.EventHandler(this.OnMenuEditOpening);
 			// 
@@ -1113,7 +1112,7 @@
 			// 
 			this.m_menuEditShowAllEntries.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Key3;
 			this.m_menuEditShowAllEntries.Name = "m_menuEditShowAllEntries";
-			this.m_menuEditShowAllEntries.Size = new System.Drawing.Size(188, 22);
+			this.m_menuEditShowAllEntries.Size = new System.Drawing.Size(207, 22);
 			this.m_menuEditShowAllEntries.Text = "&Show All Entries";
 			this.m_menuEditShowAllEntries.Click += new System.EventHandler(this.OnShowAllEntries);
 			// 
@@ -1121,27 +1120,27 @@
 			// 
 			this.m_menuEditShowExpired.Image = global::KeePass.Properties.Resources.B16x16_History_Clear;
 			this.m_menuEditShowExpired.Name = "m_menuEditShowExpired";
-			this.m_menuEditShowExpired.Size = new System.Drawing.Size(188, 22);
+			this.m_menuEditShowExpired.Size = new System.Drawing.Size(207, 22);
 			this.m_menuEditShowExpired.Text = "Show All E&xpired Entries";
 			this.m_menuEditShowExpired.Click += new System.EventHandler(this.OnToolsShowExpired);
 			// 
 			// m_menuEditShowByTag
 			// 
 			this.m_menuEditShowByTag.Name = "m_menuEditShowByTag";
-			this.m_menuEditShowByTag.Size = new System.Drawing.Size(188, 22);
+			this.m_menuEditShowByTag.Size = new System.Drawing.Size(207, 22);
 			this.m_menuEditShowByTag.Text = "Show Entries &by Tag";
 			this.m_menuEditShowByTag.DropDownOpening += new System.EventHandler(this.OnEditShowByTagOpening);
 			// 
 			// m_menuEditSep0
 			// 
 			this.m_menuEditSep0.Name = "m_menuEditSep0";
-			this.m_menuEditSep0.Size = new System.Drawing.Size(185, 6);
+			this.m_menuEditSep0.Size = new System.Drawing.Size(204, 6);
 			// 
 			// m_menuEditFind
 			// 
 			this.m_menuEditFind.Image = global::KeePass.Properties.Resources.B16x16_XMag;
 			this.m_menuEditFind.Name = "m_menuEditFind";
-			this.m_menuEditFind.Size = new System.Drawing.Size(188, 22);
+			this.m_menuEditFind.Size = new System.Drawing.Size(207, 22);
 			this.m_menuEditFind.Text = "&Find...";
 			this.m_menuEditFind.Click += new System.EventHandler(this.OnPwListFind);
 			// 
@@ -1162,27 +1161,27 @@
             this.m_menuViewSep3,
             this.m_menuViewShowEntriesOfSubGroups});
 			this.m_menuView.Name = "m_menuView";
-			this.m_menuView.Size = new System.Drawing.Size(42, 20);
+			this.m_menuView.Size = new System.Drawing.Size(45, 20);
 			this.m_menuView.Text = "&View";
 			// 
 			// m_menuChangeLanguage
 			// 
 			this.m_menuChangeLanguage.Image = global::KeePass.Properties.Resources.B16x16_Keyboard_Layout;
 			this.m_menuChangeLanguage.Name = "m_menuChangeLanguage";
-			this.m_menuChangeLanguage.Size = new System.Drawing.Size(202, 22);
+			this.m_menuChangeLanguage.Size = new System.Drawing.Size(222, 22);
 			this.m_menuChangeLanguage.Text = "Change &Language...";
 			this.m_menuChangeLanguage.Click += new System.EventHandler(this.OnMenuChangeLanguage);
 			// 
 			// m_menuViewSep0
 			// 
 			this.m_menuViewSep0.Name = "m_menuViewSep0";
-			this.m_menuViewSep0.Size = new System.Drawing.Size(199, 6);
+			this.m_menuViewSep0.Size = new System.Drawing.Size(219, 6);
 			// 
 			// m_menuViewShowToolBar
 			// 
 			this.m_menuViewShowToolBar.CheckOnClick = true;
 			this.m_menuViewShowToolBar.Name = "m_menuViewShowToolBar";
-			this.m_menuViewShowToolBar.Size = new System.Drawing.Size(202, 22);
+			this.m_menuViewShowToolBar.Size = new System.Drawing.Size(222, 22);
 			this.m_menuViewShowToolBar.Text = "Show &Toolbar";
 			this.m_menuViewShowToolBar.Click += new System.EventHandler(this.OnViewShowToolBar);
 			// 
@@ -1190,7 +1189,7 @@
 			// 
 			this.m_menuViewShowEntryView.CheckOnClick = true;
 			this.m_menuViewShowEntryView.Name = "m_menuViewShowEntryView";
-			this.m_menuViewShowEntryView.Size = new System.Drawing.Size(202, 22);
+			this.m_menuViewShowEntryView.Size = new System.Drawing.Size(222, 22);
 			this.m_menuViewShowEntryView.Text = "&Show Entry View";
 			this.m_menuViewShowEntryView.Click += new System.EventHandler(this.OnViewShowEntryView);
 			// 
@@ -1200,14 +1199,14 @@
             this.m_menuViewWindowsStacked,
             this.m_menuViewWindowsSideBySide});
 			this.m_menuViewWindowLayout.Name = "m_menuViewWindowLayout";
-			this.m_menuViewWindowLayout.Size = new System.Drawing.Size(202, 22);
+			this.m_menuViewWindowLayout.Size = new System.Drawing.Size(222, 22);
 			this.m_menuViewWindowLayout.Text = "&Window Layout";
 			// 
 			// m_menuViewWindowsStacked
 			// 
 			this.m_menuViewWindowsStacked.Image = global::KeePass.Properties.Resources.B16x16_Window_2Horz1Vert;
 			this.m_menuViewWindowsStacked.Name = "m_menuViewWindowsStacked";
-			this.m_menuViewWindowsStacked.Size = new System.Drawing.Size(133, 22);
+			this.m_menuViewWindowsStacked.Size = new System.Drawing.Size(142, 22);
 			this.m_menuViewWindowsStacked.Text = "Stacked";
 			this.m_menuViewWindowsStacked.Click += new System.EventHandler(this.OnViewWindowsStacked);
 			// 
@@ -1215,40 +1214,40 @@
 			// 
 			this.m_menuViewWindowsSideBySide.Image = global::KeePass.Properties.Resources.B16x16_Window_3Horz;
 			this.m_menuViewWindowsSideBySide.Name = "m_menuViewWindowsSideBySide";
-			this.m_menuViewWindowsSideBySide.Size = new System.Drawing.Size(133, 22);
+			this.m_menuViewWindowsSideBySide.Size = new System.Drawing.Size(142, 22);
 			this.m_menuViewWindowsSideBySide.Text = "Side by Side";
 			this.m_menuViewWindowsSideBySide.Click += new System.EventHandler(this.OnViewWindowsSideBySide);
 			// 
 			// m_menuViewSep1
 			// 
 			this.m_menuViewSep1.Name = "m_menuViewSep1";
-			this.m_menuViewSep1.Size = new System.Drawing.Size(199, 6);
+			this.m_menuViewSep1.Size = new System.Drawing.Size(219, 6);
 			// 
 			// m_menuViewAlwaysOnTop
 			// 
 			this.m_menuViewAlwaysOnTop.CheckOnClick = true;
 			this.m_menuViewAlwaysOnTop.Name = "m_menuViewAlwaysOnTop";
-			this.m_menuViewAlwaysOnTop.Size = new System.Drawing.Size(202, 22);
+			this.m_menuViewAlwaysOnTop.Size = new System.Drawing.Size(222, 22);
 			this.m_menuViewAlwaysOnTop.Text = "&Always on Top";
 			this.m_menuViewAlwaysOnTop.Click += new System.EventHandler(this.OnViewAlwaysOnTop);
 			// 
 			// m_menuViewSep2
 			// 
 			this.m_menuViewSep2.Name = "m_menuViewSep2";
-			this.m_menuViewSep2.Size = new System.Drawing.Size(199, 6);
+			this.m_menuViewSep2.Size = new System.Drawing.Size(219, 6);
 			// 
 			// m_menuViewConfigColumns
 			// 
 			this.m_menuViewConfigColumns.Image = global::KeePass.Properties.Resources.B16x16_View_Detailed;
 			this.m_menuViewConfigColumns.Name = "m_menuViewConfigColumns";
-			this.m_menuViewConfigColumns.Size = new System.Drawing.Size(202, 22);
+			this.m_menuViewConfigColumns.Size = new System.Drawing.Size(222, 22);
 			this.m_menuViewConfigColumns.Text = "Configure &Columns...";
 			this.m_menuViewConfigColumns.Click += new System.EventHandler(this.OnViewConfigColumns);
 			// 
 			// m_menuViewSortBy
 			// 
 			this.m_menuViewSortBy.Name = "m_menuViewSortBy";
-			this.m_menuViewSortBy.Size = new System.Drawing.Size(202, 22);
+			this.m_menuViewSortBy.Size = new System.Drawing.Size(222, 22);
 			this.m_menuViewSortBy.Text = "S&ort By";
 			// 
 			// m_menuViewTanOptions
@@ -1257,14 +1256,14 @@
             this.m_menuViewTanSimpleList,
             this.m_menuViewTanIndices});
 			this.m_menuViewTanOptions.Name = "m_menuViewTanOptions";
-			this.m_menuViewTanOptions.Size = new System.Drawing.Size(202, 22);
+			this.m_menuViewTanOptions.Size = new System.Drawing.Size(222, 22);
 			this.m_menuViewTanOptions.Text = "TAN &View Options";
 			// 
 			// m_menuViewTanSimpleList
 			// 
 			this.m_menuViewTanSimpleList.CheckOnClick = true;
 			this.m_menuViewTanSimpleList.Name = "m_menuViewTanSimpleList";
-			this.m_menuViewTanSimpleList.Size = new System.Drawing.Size(273, 22);
+			this.m_menuViewTanSimpleList.Size = new System.Drawing.Size(303, 22);
 			this.m_menuViewTanSimpleList.Text = "Use &Simple List View for TAN-Only Groups";
 			this.m_menuViewTanSimpleList.Click += new System.EventHandler(this.OnViewTanSimpleListClick);
 			// 
@@ -1272,20 +1271,20 @@
 			// 
 			this.m_menuViewTanIndices.CheckOnClick = true;
 			this.m_menuViewTanIndices.Name = "m_menuViewTanIndices";
-			this.m_menuViewTanIndices.Size = new System.Drawing.Size(273, 22);
+			this.m_menuViewTanIndices.Size = new System.Drawing.Size(303, 22);
 			this.m_menuViewTanIndices.Text = "Show TAN &Indices in Entry Titles";
 			this.m_menuViewTanIndices.Click += new System.EventHandler(this.OnViewTanIndicesClick);
 			// 
 			// m_menuViewSep3
 			// 
 			this.m_menuViewSep3.Name = "m_menuViewSep3";
-			this.m_menuViewSep3.Size = new System.Drawing.Size(199, 6);
+			this.m_menuViewSep3.Size = new System.Drawing.Size(219, 6);
 			// 
 			// m_menuViewShowEntriesOfSubGroups
 			// 
 			this.m_menuViewShowEntriesOfSubGroups.CheckOnClick = true;
 			this.m_menuViewShowEntriesOfSubGroups.Name = "m_menuViewShowEntriesOfSubGroups";
-			this.m_menuViewShowEntriesOfSubGroups.Size = new System.Drawing.Size(202, 22);
+			this.m_menuViewShowEntriesOfSubGroups.Size = new System.Drawing.Size(222, 22);
 			this.m_menuViewShowEntriesOfSubGroups.Text = "Show Entries of Su&bgroups";
 			this.m_menuViewShowEntriesOfSubGroups.Click += new System.EventHandler(this.OnViewShowEntriesOfSubGroups);
 			// 
@@ -1303,14 +1302,14 @@
             this.m_menuToolsSep2,
             this.m_menuToolsOptions});
 			this.m_menuTools.Name = "m_menuTools";
-			this.m_menuTools.Size = new System.Drawing.Size(45, 20);
+			this.m_menuTools.Size = new System.Drawing.Size(49, 20);
 			this.m_menuTools.Text = "&Tools";
 			// 
 			// m_menuToolsPwGenerator
 			// 
-			this.m_menuToolsPwGenerator.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Gen;
+			this.m_menuToolsPwGenerator.Image = global::KeePass.Properties.Resources.B16x16_Key_New;
 			this.m_menuToolsPwGenerator.Name = "m_menuToolsPwGenerator";
-			this.m_menuToolsPwGenerator.Size = new System.Drawing.Size(195, 22);
+			this.m_menuToolsPwGenerator.Size = new System.Drawing.Size(213, 22);
 			this.m_menuToolsPwGenerator.Text = "&Generate Password...";
 			this.m_menuToolsPwGenerator.Click += new System.EventHandler(this.OnToolsPwGenerator);
 			// 
@@ -1318,20 +1317,20 @@
 			// 
 			this.m_menuToolsGeneratePwList.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Gen;
 			this.m_menuToolsGeneratePwList.Name = "m_menuToolsGeneratePwList";
-			this.m_menuToolsGeneratePwList.Size = new System.Drawing.Size(195, 22);
+			this.m_menuToolsGeneratePwList.Size = new System.Drawing.Size(213, 22);
 			this.m_menuToolsGeneratePwList.Text = "Generate Password &List...";
 			this.m_menuToolsGeneratePwList.Click += new System.EventHandler(this.OnToolsGeneratePasswordList);
 			// 
 			// m_menuToolsSep0
 			// 
 			this.m_menuToolsSep0.Name = "m_menuToolsSep0";
-			this.m_menuToolsSep0.Size = new System.Drawing.Size(192, 6);
+			this.m_menuToolsSep0.Size = new System.Drawing.Size(210, 6);
 			// 
 			// m_menuToolsTanWizard
 			// 
 			this.m_menuToolsTanWizard.Image = global::KeePass.Properties.Resources.B16x16_Wizard;
 			this.m_menuToolsTanWizard.Name = "m_menuToolsTanWizard";
-			this.m_menuToolsTanWizard.Size = new System.Drawing.Size(195, 22);
+			this.m_menuToolsTanWizard.Size = new System.Drawing.Size(213, 22);
 			this.m_menuToolsTanWizard.Text = "&TAN Wizard...";
 			this.m_menuToolsTanWizard.Click += new System.EventHandler(this.OnToolsTanWizard);
 			// 
@@ -1344,27 +1343,27 @@
             this.m_menuToolsDbDelEmptyGroups,
             this.m_menuToolsDbDelUnusedIcons});
 			this.m_menuToolsDb.Name = "m_menuToolsDb";
-			this.m_menuToolsDb.Size = new System.Drawing.Size(195, 22);
+			this.m_menuToolsDb.Size = new System.Drawing.Size(213, 22);
 			this.m_menuToolsDb.Text = "&Database Tools";
 			// 
 			// m_menuToolsDbMaintenance
 			// 
 			this.m_menuToolsDbMaintenance.Image = global::KeePass.Properties.Resources.B16x16_Package_Settings;
 			this.m_menuToolsDbMaintenance.Name = "m_menuToolsDbMaintenance";
-			this.m_menuToolsDbMaintenance.Size = new System.Drawing.Size(212, 22);
+			this.m_menuToolsDbMaintenance.Size = new System.Drawing.Size(233, 22);
 			this.m_menuToolsDbMaintenance.Text = "Database &Maintenance...";
 			this.m_menuToolsDbMaintenance.Click += new System.EventHandler(this.OnToolsDbMaintenance);
 			// 
 			// m_menuToolsDbSep0
 			// 
 			this.m_menuToolsDbSep0.Name = "m_menuToolsDbSep0";
-			this.m_menuToolsDbSep0.Size = new System.Drawing.Size(209, 6);
+			this.m_menuToolsDbSep0.Size = new System.Drawing.Size(230, 6);
 			// 
 			// m_menuToolsDbDelDupEntries
 			// 
 			this.m_menuToolsDbDelDupEntries.Image = global::KeePass.Properties.Resources.B16x16_DeleteEntry;
 			this.m_menuToolsDbDelDupEntries.Name = "m_menuToolsDbDelDupEntries";
-			this.m_menuToolsDbDelDupEntries.Size = new System.Drawing.Size(212, 22);
+			this.m_menuToolsDbDelDupEntries.Size = new System.Drawing.Size(233, 22);
 			this.m_menuToolsDbDelDupEntries.Text = "Delete &Duplicate Entries";
 			this.m_menuToolsDbDelDupEntries.Click += new System.EventHandler(this.OnToolsDelDupEntries);
 			// 
@@ -1372,7 +1371,7 @@
 			// 
 			this.m_menuToolsDbDelEmptyGroups.Image = global::KeePass.Properties.Resources.B16x16_Folder_Locked;
 			this.m_menuToolsDbDelEmptyGroups.Name = "m_menuToolsDbDelEmptyGroups";
-			this.m_menuToolsDbDelEmptyGroups.Size = new System.Drawing.Size(212, 22);
+			this.m_menuToolsDbDelEmptyGroups.Size = new System.Drawing.Size(233, 22);
 			this.m_menuToolsDbDelEmptyGroups.Text = "Delete Empty &Groups";
 			this.m_menuToolsDbDelEmptyGroups.Click += new System.EventHandler(this.OnToolsDelEmptyGroups);
 			// 
@@ -1380,20 +1379,20 @@
 			// 
 			this.m_menuToolsDbDelUnusedIcons.Image = global::KeePass.Properties.Resources.B16x16_Trashcan_Full;
 			this.m_menuToolsDbDelUnusedIcons.Name = "m_menuToolsDbDelUnusedIcons";
-			this.m_menuToolsDbDelUnusedIcons.Size = new System.Drawing.Size(212, 22);
+			this.m_menuToolsDbDelUnusedIcons.Size = new System.Drawing.Size(233, 22);
 			this.m_menuToolsDbDelUnusedIcons.Text = "Delete Unused Custom &Icons";
 			this.m_menuToolsDbDelUnusedIcons.Click += new System.EventHandler(this.OnToolsDelUnusedIcons);
 			// 
 			// m_menuToolsSep1
 			// 
 			this.m_menuToolsSep1.Name = "m_menuToolsSep1";
-			this.m_menuToolsSep1.Size = new System.Drawing.Size(192, 6);
+			this.m_menuToolsSep1.Size = new System.Drawing.Size(210, 6);
 			// 
 			// m_menuToolsTriggers
 			// 
 			this.m_menuToolsTriggers.Image = global::KeePass.Properties.Resources.B16x16_Make_KDevelop;
 			this.m_menuToolsTriggers.Name = "m_menuToolsTriggers";
-			this.m_menuToolsTriggers.Size = new System.Drawing.Size(195, 22);
+			this.m_menuToolsTriggers.Size = new System.Drawing.Size(213, 22);
 			this.m_menuToolsTriggers.Text = "T&riggers...";
 			this.m_menuToolsTriggers.Click += new System.EventHandler(this.OnToolsTriggers);
 			// 
@@ -1401,20 +1400,20 @@
 			// 
 			this.m_menuToolsPlugins.Image = global::KeePass.Properties.Resources.B16x16_BlockDevice;
 			this.m_menuToolsPlugins.Name = "m_menuToolsPlugins";
-			this.m_menuToolsPlugins.Size = new System.Drawing.Size(195, 22);
+			this.m_menuToolsPlugins.Size = new System.Drawing.Size(213, 22);
 			this.m_menuToolsPlugins.Text = "&Plugins...";
 			this.m_menuToolsPlugins.Click += new System.EventHandler(this.OnToolsPlugins);
 			// 
 			// m_menuToolsSep2
 			// 
 			this.m_menuToolsSep2.Name = "m_menuToolsSep2";
-			this.m_menuToolsSep2.Size = new System.Drawing.Size(192, 6);
+			this.m_menuToolsSep2.Size = new System.Drawing.Size(210, 6);
 			// 
 			// m_menuToolsOptions
 			// 
 			this.m_menuToolsOptions.Image = global::KeePass.Properties.Resources.B16x16_Misc;
 			this.m_menuToolsOptions.Name = "m_menuToolsOptions";
-			this.m_menuToolsOptions.Size = new System.Drawing.Size(195, 22);
+			this.m_menuToolsOptions.Size = new System.Drawing.Size(213, 22);
 			this.m_menuToolsOptions.Text = "&Options...";
 			this.m_menuToolsOptions.Click += new System.EventHandler(this.OnToolsOptions);
 			// 
@@ -1431,14 +1430,14 @@
             this.m_menuHelpSep2,
             this.m_menuHelpAbout});
 			this.m_menuHelp.Name = "m_menuHelp";
-			this.m_menuHelp.Size = new System.Drawing.Size(41, 20);
+			this.m_menuHelp.Size = new System.Drawing.Size(45, 20);
 			this.m_menuHelp.Text = "&Help";
 			// 
 			// m_menuHelpContents
 			// 
 			this.m_menuHelpContents.Image = global::KeePass.Properties.Resources.B16x16_Toggle_Log;
 			this.m_menuHelpContents.Name = "m_menuHelpContents";
-			this.m_menuHelpContents.Size = new System.Drawing.Size(158, 22);
+			this.m_menuHelpContents.Size = new System.Drawing.Size(170, 22);
 			this.m_menuHelpContents.Text = "&Help Contents";
 			this.m_menuHelpContents.Click += new System.EventHandler(this.OnHelpContents);
 			// 
@@ -1446,20 +1445,20 @@
 			// 
 			this.m_menuHelpSelectSource.Image = global::KeePass.Properties.Resources.B16x16_KOrganizer;
 			this.m_menuHelpSelectSource.Name = "m_menuHelpSelectSource";
-			this.m_menuHelpSelectSource.Size = new System.Drawing.Size(158, 22);
+			this.m_menuHelpSelectSource.Size = new System.Drawing.Size(170, 22);
 			this.m_menuHelpSelectSource.Text = "Help &Source...";
 			this.m_menuHelpSelectSource.Click += new System.EventHandler(this.OnHelpSelectSource);
 			// 
 			// m_menuHelpSep0
 			// 
 			this.m_menuHelpSep0.Name = "m_menuHelpSep0";
-			this.m_menuHelpSep0.Size = new System.Drawing.Size(155, 6);
+			this.m_menuHelpSep0.Size = new System.Drawing.Size(167, 6);
 			// 
 			// m_menuHelpWebsite
 			// 
 			this.m_menuHelpWebsite.Image = global::KeePass.Properties.Resources.B16x16_Folder_Home;
 			this.m_menuHelpWebsite.Name = "m_menuHelpWebsite";
-			this.m_menuHelpWebsite.Size = new System.Drawing.Size(158, 22);
+			this.m_menuHelpWebsite.Size = new System.Drawing.Size(170, 22);
 			this.m_menuHelpWebsite.Text = "KeePass &Website";
 			this.m_menuHelpWebsite.Click += new System.EventHandler(this.OnHelpHomepage);
 			// 
@@ -1467,33 +1466,33 @@
 			// 
 			this.m_menuHelpDonate.Image = global::KeePass.Properties.Resources.B16x16_Identity;
 			this.m_menuHelpDonate.Name = "m_menuHelpDonate";
-			this.m_menuHelpDonate.Size = new System.Drawing.Size(158, 22);
+			this.m_menuHelpDonate.Size = new System.Drawing.Size(170, 22);
 			this.m_menuHelpDonate.Text = "&Donate...";
 			this.m_menuHelpDonate.Click += new System.EventHandler(this.OnHelpDonate);
 			// 
 			// m_menuHelpSep1
 			// 
 			this.m_menuHelpSep1.Name = "m_menuHelpSep1";
-			this.m_menuHelpSep1.Size = new System.Drawing.Size(155, 6);
+			this.m_menuHelpSep1.Size = new System.Drawing.Size(167, 6);
 			// 
 			// m_menuHelpCheckForUpdate
 			// 
 			this.m_menuHelpCheckForUpdate.Image = global::KeePass.Properties.Resources.B16x16_FTP;
 			this.m_menuHelpCheckForUpdate.Name = "m_menuHelpCheckForUpdate";
-			this.m_menuHelpCheckForUpdate.Size = new System.Drawing.Size(158, 22);
+			this.m_menuHelpCheckForUpdate.Size = new System.Drawing.Size(170, 22);
 			this.m_menuHelpCheckForUpdate.Text = "&Check for Update";
 			this.m_menuHelpCheckForUpdate.Click += new System.EventHandler(this.OnHelpCheckForUpdate);
 			// 
 			// m_menuHelpSep2
 			// 
 			this.m_menuHelpSep2.Name = "m_menuHelpSep2";
-			this.m_menuHelpSep2.Size = new System.Drawing.Size(155, 6);
+			this.m_menuHelpSep2.Size = new System.Drawing.Size(167, 6);
 			// 
 			// m_menuHelpAbout
 			// 
 			this.m_menuHelpAbout.Image = global::KeePass.Properties.Resources.B16x16_Help;
 			this.m_menuHelpAbout.Name = "m_menuHelpAbout";
-			this.m_menuHelpAbout.Size = new System.Drawing.Size(158, 22);
+			this.m_menuHelpAbout.Size = new System.Drawing.Size(170, 22);
 			this.m_menuHelpAbout.Text = "&About KeePass...";
 			this.m_menuHelpAbout.Click += new System.EventHandler(this.OnHelpAbout);
 			// 
@@ -1579,7 +1578,7 @@
 			// 
 			this.m_tbAddEntryDefault.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Import;
 			this.m_tbAddEntryDefault.Name = "m_tbAddEntryDefault";
-			this.m_tbAddEntryDefault.Size = new System.Drawing.Size(86, 22);
+			this.m_tbAddEntryDefault.Size = new System.Drawing.Size(88, 22);
 			this.m_tbAddEntryDefault.Text = "<>";
 			this.m_tbAddEntryDefault.Click += new System.EventHandler(this.OnEntryAdd);
 			// 
@@ -1736,40 +1735,48 @@
             this.m_ctxTrayLock,
             this.m_ctxTrayFileExit});
 			this.m_ctxTray.Name = "m_ctxTray";
-			this.m_ctxTray.Size = new System.Drawing.Size(153, 126);
+			this.m_ctxTray.Size = new System.Drawing.Size(142, 104);
 			this.m_ctxTray.Opening += new System.ComponentModel.CancelEventHandler(this.OnCtxTrayOpening);
 			// 
 			// m_ctxTrayTray
 			// 
 			this.m_ctxTrayTray.Image = global::KeePass.Properties.Resources.B16x16_View_Detailed;
 			this.m_ctxTrayTray.Name = "m_ctxTrayTray";
-			this.m_ctxTrayTray.Size = new System.Drawing.Size(152, 22);
+			this.m_ctxTrayTray.Size = new System.Drawing.Size(141, 22);
 			this.m_ctxTrayTray.Text = "&Tray / Untray";
 			this.m_ctxTrayTray.Click += new System.EventHandler(this.OnTrayTray);
 			// 
 			// m_ctxTraySep0
 			// 
 			this.m_ctxTraySep0.Name = "m_ctxTraySep0";
-			this.m_ctxTraySep0.Size = new System.Drawing.Size(149, 6);
+			this.m_ctxTraySep0.Size = new System.Drawing.Size(138, 6);
+			// 
+			// m_ctxTrayOptions
+			// 
+			this.m_ctxTrayOptions.Image = global::KeePass.Properties.Resources.B16x16_Misc;
+			this.m_ctxTrayOptions.Name = "m_ctxTrayOptions";
+			this.m_ctxTrayOptions.Size = new System.Drawing.Size(141, 22);
+			this.m_ctxTrayOptions.Text = "&Options...";
+			this.m_ctxTrayOptions.Click += new System.EventHandler(this.OnTrayOptions);
+			// 
+			// m_ctxTraySep1
+			// 
+			this.m_ctxTraySep1.Name = "m_ctxTraySep1";
+			this.m_ctxTraySep1.Size = new System.Drawing.Size(138, 6);
 			// 
 			// m_ctxTrayLock
 			// 
 			this.m_ctxTrayLock.Image = global::KeePass.Properties.Resources.B16x16_LockWorkspace;
 			this.m_ctxTrayLock.Name = "m_ctxTrayLock";
-			this.m_ctxTrayLock.Size = new System.Drawing.Size(152, 22);
+			this.m_ctxTrayLock.Size = new System.Drawing.Size(141, 22);
 			this.m_ctxTrayLock.Text = "<>";
 			this.m_ctxTrayLock.Click += new System.EventHandler(this.OnTrayLock);
 			// 
-			// m_ctxTraySep1
-			// 
-			this.m_ctxTraySep1.Name = "m_ctxTraySep1";
-			this.m_ctxTraySep1.Size = new System.Drawing.Size(149, 6);
-			// 
 			// m_ctxTrayFileExit
 			// 
 			this.m_ctxTrayFileExit.Image = global::KeePass.Properties.Resources.B16x16_Exit;
 			this.m_ctxTrayFileExit.Name = "m_ctxTrayFileExit";
-			this.m_ctxTrayFileExit.Size = new System.Drawing.Size(152, 22);
+			this.m_ctxTrayFileExit.Size = new System.Drawing.Size(141, 22);
 			this.m_ctxTrayFileExit.Text = "E&xit";
 			this.m_ctxTrayFileExit.Click += new System.EventHandler(this.OnTrayExit);
 			// 
@@ -1890,14 +1897,6 @@
 			this.m_richEntryView.LinkClicked += new System.Windows.Forms.LinkClickedEventHandler(this.OnEntryViewLinkClicked);
 			this.m_richEntryView.KeyUp += new System.Windows.Forms.KeyEventHandler(this.OnEntryViewKeyUp);
 			// 
-			// m_ctxTrayOptions
-			// 
-			this.m_ctxTrayOptions.Image = global::KeePass.Properties.Resources.B16x16_Misc;
-			this.m_ctxTrayOptions.Name = "m_ctxTrayOptions";
-			this.m_ctxTrayOptions.Size = new System.Drawing.Size(152, 22);
-			this.m_ctxTrayOptions.Text = "&Options...";
-			this.m_ctxTrayOptions.Click += new System.EventHandler(this.OnTrayOptions);
-			// 
 			// MainForm
 			// 
 			this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
diff --git a/KeePass/Forms/MainForm.cs b/KeePass/Forms/MainForm.cs
index 45099b8..c85db50 100644
--- a/KeePass/Forms/MainForm.cs
+++ b/KeePass/Forms/MainForm.cs
@@ -338,7 +338,9 @@ namespace KeePass.Forms
 			UIUtil.SetCueBanner(m_tbQuickFind, strSearchTr);
 
 #if DEBUG
-			Program.Config.CustomConfig.SetBool("TestItem", true);
+			Program.Config.CustomConfig.SetBool("TestItem1", true);
+			Program.Config.CustomConfig.SetULong("TestItem2", 13);
+			Program.Config.CustomConfig.SetString("TestItem3", "TestValue");
 
 			Program.KeyProviderPool.Add(new KeePassLib.Keys.SampleKeyProvider());
 #endif
@@ -499,7 +501,7 @@ namespace KeePass.Forms
 			pe.Strings.Set(PwDefs.UserNameField, new ProtectedString(pd.MemoryProtection.ProtectUserName,
 				KPRes.UserName));
 			pe.Strings.Set(PwDefs.UrlField, new ProtectedString(pd.MemoryProtection.ProtectUrl,
-				@"http://www.somesite.com/"));
+				PwDefs.HomepageUrl));
 			pe.Strings.Set(PwDefs.PasswordField, new ProtectedString(pd.MemoryProtection.ProtectPassword,
 				KPRes.Password));
 			pe.Strings.Set(PwDefs.NotesField, new ProtectedString(pd.MemoryProtection.ProtectNotes,
@@ -564,7 +566,7 @@ namespace KeePass.Forms
 
 		private void OnFileClose(object sender, EventArgs e)
 		{
-			CloseDocument(null, false, false);
+			CloseDocument(false, false);
 		}
 
 		private void OnFileSave(object sender, EventArgs e)
@@ -1268,7 +1270,8 @@ namespace KeePass.Forms
 
 		private void OnGroupsListDragDrop(object sender, DragEventArgs e)
 		{
-			TreeViewHitTestInfo tvhi = m_tvGroups.HitTest(m_tvGroups.PointToClient(new Point(e.X, e.Y)));
+			TreeViewHitTestInfo tvhi = m_tvGroups.HitTest(m_tvGroups.PointToClient(
+				new Point(e.X, e.Y)));
 
 			if(tvhi.Node == null) return;
 			PwGroup pgSelected = (tvhi.Node.Tag as PwGroup);
@@ -1279,6 +1282,8 @@ namespace KeePass.Forms
 				PwEntry[] vSelected = GetSelectedEntries();
 				if((vSelected == null) || (vSelected.Length == 0)) return;
 
+				PwGroup pgSafeView = (m_pgActiveAtDragStart ?? new PwGroup());
+				bool bFullUpdateView = false;
 				List<PwEntry> vNowInvisible = new List<PwEntry>();
 
 				if(e.Effect == DragDropEffects.Move)
@@ -1295,7 +1300,8 @@ namespace KeePass.Forms
 
 						pgSelected.AddEntry(pe, true, true);
 
-						vNowInvisible.Add(pe);
+						if(pe.IsContainedIn(pgSafeView)) bFullUpdateView = true;
+						else vNowInvisible.Add(pe);
 					}
 				}
 				else if(e.Effect == DragDropEffects.Copy)
@@ -1306,12 +1312,19 @@ namespace KeePass.Forms
 						peCopy.SetUuid(new PwUuid(true), true); // Create new UUID
 
 						pgSelected.AddEntry(peCopy, true, true);
+
+						if(peCopy.IsContainedIn(pgSafeView)) bFullUpdateView = true;
 					}
 				}
 				else { Debug.Assert(false); }
 
-				RemoveEntriesFromList(vNowInvisible, true);
-				UpdateUI(false, null, true, m_pgActiveAtDragStart, false, null, true);
+				if(!bFullUpdateView)
+				{
+					RemoveEntriesFromList(vNowInvisible, true);
+					UpdateUI(false, null, true, m_pgActiveAtDragStart, false, null, true);
+				}
+				else UpdateUI(false, null, true, m_pgActiveAtDragStart, true, null, true);
+
 				m_pgActiveAtDragStart = null;
 			}
 			else if(e.Data.GetDataPresent(typeof(PwGroup)))
@@ -1346,7 +1359,6 @@ namespace KeePass.Forms
 				else { Debug.Assert(false); }
 
 				pgSelected.AddGroup(pgDragged, true, true);
-
 				pgSelected.IsExpanded = true;
 
 				UpdateUI(false, null, true, pgDragged, true, null, true);
@@ -1450,7 +1462,7 @@ namespace KeePass.Forms
 			bool bTop = m_menuViewAlwaysOnTop.Checked;
 
 			Program.Config.MainWindow.AlwaysOnTop = bTop;
-			this.TopMost = bTop;
+			EnsureAlwaysOnTopOpt();
 		}
 
 		private void OnGroupsPrint(object sender, EventArgs e)
@@ -2333,6 +2345,7 @@ namespace KeePass.Forms
 				if(f != null) f.Activate();
 				// SystemSounds.Beep.Play(); // Do not beep!
 			}
+			// else EnsureAlwaysOnTopOpt();
 		}
 
 		private void OnToolsTriggers(object sender, EventArgs e)
@@ -2352,7 +2365,9 @@ namespace KeePass.Forms
 					{
 						PwDocument pd = (m_tabMain.TabPages[i].Tag as PwDocument);
 						if(pd == null) { Debug.Assert(false); return; }
-						CloseDocument(pd, false, false);
+
+						m_docMgr.ActiveDocument = pd;
+						CloseDocument(false, false);
 						break;
 					}
 				}
diff --git a/KeePass/Forms/MainForm.resx b/KeePass/Forms/MainForm.resx
index 2aa416d..695b671 100644
--- a/KeePass/Forms/MainForm.resx
+++ b/KeePass/Forms/MainForm.resx
@@ -127,1445 +127,1437 @@
     <value>
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
-        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD0
-        UAEAAk1TRnQBSQFMAgEBRQEAAUwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
-        AwABIAEBAgABAQEAASAGAAEgAQEhAAGFAVYBSgH/AUkBFgEFAf8BSQEWAQUB/wFJARYBBQH/AUkBFgEF
-        Af8BSQEWAQUB/wGFAVYBSgH/4AABlgFuAWQB/wFjAUMBOAH/AWQBTwFJAf8BZgFVAVAB/wOHAf8BbwFh
-        AVwB/wFvAV4BWAH/AWUBRAE6Af8BnAF0AWoB/9wAAW8BTAFBAf8BRwErASMB/wFFASQBGgH/AUUBJAEa
-        Af8BUAEzASkB/wFQATMBKQH/AVABMwEpAf8BUAEzASkB/wFvAUwBQQH/3AABbwFMAUEB/wFgAUEBNwH/
-        AWYBRwE9Af8BZgFHAT0B/wFmAUkBPwH/AWYBSQE/Af8BZgFJAT8B/wFmAUgBPwH/AW8BTAFBAf/cAAFv
-        AUwBQQH/AWABQQE4Af8BZgFHAT0B/wFqAUoBQQH/AY4BYgFYAf8BagFMAUIB/wFmAUkBPwH/AWYBSQE/
-        Af8BbwFMAUEB/9wAAW8BTAFBAf8BSwFHARoB/wFpAZEBRwH/AXIBUQE+Af8B6wH1AfgB/wGBAkkB/wFR
-        ATMBkAH/AUcBIQFMAf8BbwFMAUEB/9wAAW8BTAFBAf8CaAFJAf8BmQGyAZQB/wHGAb0BugH/AcgBtgGx
-        Af8BxgG9AboB/wGZAZQBxgH/AWgBUAFyAf8BbwFMAUEB/9wAAW8BTAFBAf8BMAEWAREB/wEoAhgB/wE5
-        AR4BOAH/AT8CMwH/AUoCPgH/ASwCHAH/ATABFgERAf8BbwFMAUEB/9wAAW8BTAFBAf8BxwG8AbgB/wHw
-        AeEB3QH/AfgB+QH6Af8B8AHiAd8B/wP4Af8B8AHkAeEB/wG+AbMBrwH/AW8BTAFBAf/cAAFvAUwBQQH/
-        AccBuQG1Af8B2AG2Aa0B/wH1AvMB/wHZAbsBswH/AfIB7gHtAf8B4AHBAbgB/wG5Aa4BqgH/AW8BTAFB
-        Af/cAAFvAUwBQQH/AcABtAG5Af8BYQFSAdwB/wHsAfsC/wGBAd0C/wHjAfIB3wH/AYABuwFnAf8BuQGu
-        AaoB/wFvAUwBQQH/3AABbwFMAUEB/wG/AboBuwH/AWoBwAL/AfUC8wH/AdkBuwGzAf8B+AHvAe0B/wHg
-        AcEBuQH/AbkBrgGqAf8BbwFMAUEB/9wAAW8BTAFBAf8BxAG8AbsB/wG5AeIC/wHzAfgB+gH/AewB4QHf
-        Af8B9QH3AfgB/wHuAeMB4QH/Ab8BswGvAf8BbwFMAUEB/9wAAW8BTAFBAf8BMAEWAREB/wEnAhYB/wE/
-        AjIB/wFJAj0B/wFEAjcB/wEnAhYB/wEwARYBEQH/AW8BTAFBAf/cAAGEAVYBSwH/AUsBGgEJAf8BgAFU
-        AUoB/wG2Aa0BqgH/A8wB/wG2Aa0BqgH/AYABVAFKAf8BSwEaAQkB/wGKAV0BUQH/3AAB0gHFAcEB/wFJ
-        ARYBBQH/AUkBFgEFAf8BSQEWAQUB/wFJARYBBQH/AUkBFgEFAf8BPgEcAV8B/wFGARUBDQH/AdIBxQHB
-        Af/kAAPHAf8DSQH/A2IB/wOwAf8DcAH/A0MB/wOJAf9sAAGFAb4BhQH/ATEBlwExAf9sAAOuAf8DTgH/
-        A04B/wNNAf8DTQH/A00B/wNNAf8DTQH/A1IB/2gAAYUBvgGFAf8BMQGXATEB/2wAA1oB/wNcAf8DWgH/
-        A1cB/wNSAf8DTgH/A00B/wNNAf8DTQH/A18B/xwAA+8B/wPhAf8MAAPXAf8D/AH/HAABvwHdAb8B/wFp
-        AbUBaQH/ATEBlwExAf8BGgGLARoB/wEaAYsBGgH/AQABbQEAAf8BGgGLARoB/wExAZcBMQH/AbEB1QGx
-        Af9cAANzAf8DZwH/A2cB/wNmAf8DYgH/A10B/wNXAf8DUAH/A00B/wNNAf8DTQH/A8oB/xgAA1IB/wMH
-        Af8D8gH/BAADwQH/AwAB/wOvAf8cAAExAZcBMQH/AQABbQEAAf8BhQG+AYUB/wHmAfEB5gH/AYUBvgGF
-        Af8BMQGXATEB/wG/Ad0BvwH/ARoBiwEaAf8BAAFtAQAB/wGUAcYBlAH/DAABxQHrAcUB/wG2AecBtgH/
+        ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAQ
+        TwEAAk1TRnQBSQFMAgEBRQEAAWwBAAEkAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        AwABIAEBAgABAQEAASAGAAEgAQEhAAGFAVIBRgH/AUUBEgEBAf8BRQESAQEB/wFFARIBAQH/AUUBEgEB
+        Af8BRQESAQEB/wGFAVIBRgH/4AABlgFqAWAB/wFfAT8BNAH/AWABSwFFAf8BYgFRAUwB/wOHAf8BawFd
+        AVgB/wFrAVoBVAH/AWEBQAE2Af8BnAFwAWYB/9wAAWsBSAE9Af8BQwEnAR8B/wFBASABFgH/AUEBIAEW
+        Af8BTAEvASUB/wFMAS8BJQH/AUwBLwElAf8BTAEvASUB/wFrAUgBPQH/3AABawFIAT0B/wFcAT0BMwH/
+        AWIBQwE5Af8BYgFDATkB/wFiAUUBOwH/AWIBRQE7Af8BYgFFATsB/wFiAUQBOwH/AWsBSAE9Af/cAAFr
+        AUgBPQH/AVwBPQE0Af8BYgFDATkB/wFmAUYBPQH/AY4BXgFUAf8BZgFIAT4B/wFiAUUBOwH/AWIBRQE7
+        Af8BawFIAT0B/9wAAWsBSAE9Af8BRwFDARYB/wFlAZEBQwH/AW4BTQE6Af8B6wH1AfgB/wGBAkUB/wFN
+        AS8BkAH/AUMBHQFIAf8BawFIAT0B/9wAAWsBSAE9Af8CZAFFAf8BmQGyAZQB/wHGAb0BugH/AcgBtgGx
+        Af8BxgG9AboB/wGZAZQBxgH/AWQBTAFuAf8BawFIAT0B/9wAAWsBSAE9Af8BLAESAQ0B/wEkAhQB/wE1
+        ARoBNAH/ATsCLwH/AUYCOgH/ASgCGAH/ASwBEgENAf8BawFIAT0B/9wAAWsBSAE9Af8BxwG8AbgB/wHw
+        AeEB3QH/AfgB+QH6Af8B8AHiAd8B/wP4Af8B8AHkAeEB/wG+AbMBrwH/AWsBSAE9Af/cAAFrAUgBPQH/
+        AccBuQG1Af8B2AG2Aa0B/wH1AvMB/wHZAbsBswH/AfIB7gHtAf8B4AHBAbgB/wG5Aa4BqgH/AWsBSAE9
+        Af/cAAFrAUgBPQH/AcABtAG5Af8BXQFOAdwB/wHsAfsC/wGBAd0C/wHjAfIB3wH/AYABuwFjAf8BuQGu
+        AaoB/wFrAUgBPQH/3AABawFIAT0B/wG/AboBuwH/AWYBwAL/AfUC8wH/AdkBuwGzAf8B+AHvAe0B/wHg
+        AcEBuQH/AbkBrgGqAf8BawFIAT0B/9wAAWsBSAE9Af8BxAG8AbsB/wG5AeIC/wHzAfgB+gH/AewB4QHf
+        Af8B9QH3AfgB/wHuAeMB4QH/Ab8BswGvAf8BawFIAT0B/9wAAWsBSAE9Af8BLAESAQ0B/wEjAhIB/wE7
+        Ai4B/wFFAjkB/wFAAjMB/wEjAhIB/wEsARIBDQH/AWsBSAE9Af/cAAGEAVIBRwH/AUcBFgEFAf8BgAFQ
+        AUYB/wG2Aa0BqgH/A8wB/wG2Aa0BqgH/AYABUAFGAf8BRwEWAQUB/wGKAVkBTQH/3AAB0gHFAcEB/wFF
+        ARIBAQH/AUUBEgEBAf8BRQESAQEB/wFFARIBAQH/AUUBEgEBAf8BOgEYAVsB/wFCAREBCQH/AdIBxQHB
+        Af/kAAPHAf8DRQH/A14B/wOwAf8DbAH/Az8B/wOJAf9sAAGFAb4BhQH/AS0BlwEtAf9sAAOuAf8DSgH/
+        A0oB/wNJAf8DSQH/A0kB/wNJAf8DSQH/A04B/2gAAYUBvgGFAf8BLQGXAS0B/2wAA1YB/wNYAf8DVgH/
+        A1MB/wNOAf8DSgH/A0kB/wNJAf8DSQH/A1sB/xwAA+8B/wPhAf8MAAPXAf8D/AH/HAABvwHdAb8B/wFl
+        AbUBZQH/AS0BlwEtAf8BFgGLARYB/wEWAYsBFgH/AQABaQEAAf8BFgGLARYB/wEtAZcBLQH/AbEB1QGx
+        Af9cAANvAf8DYwH/A2MB/wNiAf8DXgH/A1kB/wNTAf8DTAH/A0kB/wNJAf8DSQH/A8oB/xgAA04B/wMD
+        Af8D8gH/BAADwQH/AwAB/wOvAf8cAAEtAZcBLQH/AQABaQEAAf8BhQG+AYUB/wHmAfEB5gH/AYUBvgGF
+        Af8BLQGXAS0B/wG/Ad0BvwH/ARYBiwEWAf8BAAFpAQAB/wGUAcYBlAH/DAABxQHrAcUB/wG2AecBtgH/
         AbQB5gG0Af8BtAHlAbQB/wG1AeYBswH/AbMB5QGyAf8BsQHlAbIB/wGxAeUBsgH/AbAB5AGvAf8BrwHj
-        Aa4B/wGxAeQBrgH/AawB4gGqAf8BqgHiAacB/wGpAeEBpgH/AacB4AGmAf8B2AHuAdcB/wwAA3EB/wOA
-        Af8DgAH/A3EB/wNuAf8DZwH/A2EB/wNYAf8DUAH/A00B/wNNAf8DTgH/FAAD3wH/AwAB/wMAAf8DiAH/
-        BAADOwH/AwAB/wNAAf8cAAExAZcBMQH/AUYBogFGAf8IAAGFAb4BhQH/ATEBlwExAf8EAAGFAb4BhQH/
-        AQABbQEAAf8BGgGLARoB/wwAAZoB4QGbAf8BogHkAaYB/wG4AesBvAH/AboB6wG9Af8BuQHsAbwB/wG7
+        Aa4B/wGxAeQBrgH/AawB4gGqAf8BqgHiAacB/wGpAeEBpgH/AacB4AGmAf8B2AHuAdcB/wwAA20B/wOA
+        Af8DgAH/A20B/wNqAf8DYwH/A10B/wNUAf8DTAH/A0kB/wNJAf8DSgH/FAAD3wH/AwAB/wMAAf8DiAH/
+        BAADNwH/AwAB/wM8Af8cAAEtAZcBLQH/AUIBogFCAf8IAAGFAb4BhQH/AS0BlwEtAf8EAAGFAb4BhQH/
+        AQABaQEAAf8BFgGLARYB/wwAAZoB4QGbAf8BogHkAaYB/wG4AesBvAH/AboB6wG9Af8BuQHsAbwB/wG7
         AewBwAH/AboB6wG/Af8BugHrAb0B/wG7AesBvgH/AbkB6gG8Af8BuQHqAbwB/wG4AeoBvAH/AbcB6gG5
-        Af8BtAHpAbcB/wFxAdsBggH/AcUB5gHEAf8IAAO1Af8DiQH/A4sB/wOLAf8DiAH/A4MB/wNxAf8DaQH/
-        A2EB/wNXAf8DTgH/A00B/wNNAf8UAANhAf8DAAH/AzkB/wMpAf8DvAH/AwAB/wMAAf8DKgH/A+EB/xgA
-        AZQBxgGUAf8BvwHdAb8B/wgAAYUBvgGFAf8BMQGXATEB/wQAAUYBogFGAf8BAAFtAQAB/wEAAW0BAAH/
+        Af8BtAHpAbcB/wFtAdsBggH/AcUB5gHEAf8IAAO1Af8DiQH/A4sB/wOLAf8DiAH/A4MB/wNtAf8DZQH/
+        A10B/wNTAf8DSgH/A0kB/wNJAf8UAANdAf8DAAH/AzUB/wMlAf8DvAH/AwAB/wMAAf8DJgH/A+EB/xgA
+        AZQBxgGUAf8BvwHdAb8B/wgAAYUBvgGFAf8BLQGXAS0B/wQAAUIBogFCAf8BAAFpAQAB/wEAAWkBAAH/
         AdkB6gHZAf8IAAGYAeABmwH/AcoB7wHRAf8B+gL+Af8B+gL+Af8B+gL+Af8B/QH/Af4F/wHLAc4B7gH/
-        AW4BhAHQAf8BvQHCAd4B/wFzAYoB1wH/AagBrAHXAf8B+AH+AfwB/wH1Af4B+gH/AY8B3wGVAf8BwwHl
-        AcMB/wgAA4YB/wOTAf8DmAH/A5gB/wOTAf8DjQH/A4UB/wNwAf8DZgH/A1wB/wNSAf8DTQH/A00B/wOn
-        Af8MAAPoAf8DAAH/AwAB/wPFAf8DkQH/AwYB/wMAAf8DVAH/A6wB/wN0Af8oAAFpAbUBaQH/ARoBiwEa
-        Af8BMQGXATEB/wEAAW0BAAH/AQABbQEAAf8BGgGLARoB/wwAAZwB4gGfAf8BxwHvAdAB/wHxAf4B/AH/
-        AfEB/gH8Af8B8QH+AfwB/wH6Af8B/gX/AeoB7QH8Af8BAQE5AfgB/wGbAasB3QH/AREBSAH4Af8BaAGL
+        AWoBhAHQAf8BvQHCAd4B/wFvAYoB1wH/AagBrAHXAf8B+AH+AfwB/wH1Af4B+gH/AY8B3wGVAf8BwwHl
+        AcMB/wgAA4YB/wOTAf8DmAH/A5gB/wOTAf8DjQH/A4UB/wNsAf8DYgH/A1gB/wNOAf8DSQH/A0kB/wOn
+        Af8MAAPoAf8DAAH/AwAB/wPFAf8DkQH/AwIB/wMAAf8DUAH/A6wB/wNwAf8oAAFlAbUBZQH/ARYBiwEW
+        Af8BLQGXAS0B/wEAAWkBAAH/AQABaQEAAf8BFgGLARYB/wwAAZwB4gGfAf8BxwHvAdAB/wHxAf4B/AH/
+        AfEB/gH8Af8B8QH+AfwB/wH6Af8B/gX/AeoB7QH8Af8BAAE1AfgB/wGbAasB3QH/AQ0BRAH4Af8BZAGL
         AeMB/wHrAf0B9wH/AecB/QH0Af8BjgHfAZcB/wHBAeYBwgH/CAADlQH/A58B/wOkAf8DpAH/A50B/wOV
-        Af8DiwH/A4EB/wNrAf8DYQH/A1UB/wNNAf8DTQH/A2YB/wwAA2sB/wMAAf8DMgH/BAADywH/AwAB/wMA
-        Af8D2AH/BAADKgH/A/wB/xgAAeYB8QHmAf8BWAGsAVgB/wEaAYsBGgH/AQABbQEAAf8BAAFtAQAB/wEA
-        AW0BAAH/AQABbQEAAf8BAAFtAQAB/wFGAaIBRgH/DAABnAHiAZ8B/wHFAe4BzgH/Ae0B+wH4Af8B7QH7
-        AfkB/wHsAfsB+QH/AfUB/gH9Af8B9wH+Af0B/wH8Av4B/wFXAXMB9AH/AQ4BLgHXAf8BBAEjAdEB/wHh
+        Af8DiwH/A4EB/wNnAf8DXQH/A1EB/wNJAf8DSQH/A2IB/wwAA2cB/wMAAf8DLgH/BAADywH/AwAB/wMA
+        Af8D2AH/BAADJgH/A/wB/xgAAeYB8QHmAf8BVAGsAVQB/wEWAYsBFgH/AQABaQEAAf8BAAFpAQAB/wEA
+        AWkBAAH/AQABaQEAAf8BAAFpAQAB/wFCAaIBQgH/DAABnAHiAZ8B/wHFAe4BzgH/Ae0B+wH4Af8B7QH7
+        AfkB/wHsAfsB+QH/AfUB/gH9Af8B9wH+Af0B/wH8Av4B/wFTAW8B9AH/AQoBKgHXAf8BAAEfAdEB/wHh
         AeMB7QH/Af0C/gH/AfwB/gH9Af8BjwHgAZgB/wG/AeUBwAH/CAADmgH/A6YB/wOuAf8DrgH/A6QB/wOa
-        Af8DjgH/A4MB/wNsAf8DYgH/A1cB/wNNAf8DTQH/A1UB/wgAA/AB/wMFAf8DAAH/A7YB/wQAA1IB/wMA
-        Af8DSQH/CAADagH/A7IB/xQAAdkB6gHZAf8BGgGLARoB/wEAAW0BAAH/AQABbQEAAf8BAAFtAQAB/wEA
-        AW0BAAH/AQABbQEAAf8BAAFtAQAB/wFGAaIBRgH/EAABnAHiAaAB/wG1Ad8BvgH/AdAB2wHZAf8BzgHa
-        AdgB/wHKAdYB1AH/Ad4B6wHoAf8B8QH+AfwB/wH7Av4B/wEoAVUB8wH/AQABHAHGAf8BAAEXAc0B/wG3
-        AbkB3QX/A/4B/wGTAeABnAH/AbwB4wG9Af8IAAOVAf8DpAH/A6wB/wOsAf8DogH/A40B/wNxAf8DgAH/
-        A2wB/wNhAf8DVwH/A00B/wNNAf8DhQH/CAADhQH/AwAB/wMnAf8EAAPiAf8DAAH/AwAB/wMiAf8D+wH/
-        BAAD1gH/A0UB/xQAAVgBrAFYAf8BAAFtAQAB/wEAAW0BAAH/AQABbQEAAf8BGgGLARoB/wEaAYsBGgH/
+        Af8DjgH/A4MB/wNoAf8DXgH/A1MB/wNJAf8DSQH/A1EB/wgAA/AB/wMBAf8DAAH/A7YB/wQAA04B/wMA
+        Af8DRQH/CAADZgH/A7IB/xQAAdkB6gHZAf8BFgGLARYB/wEAAWkBAAH/AQABaQEAAf8BAAFpAQAB/wEA
+        AWkBAAH/AQABaQEAAf8BAAFpAQAB/wFCAaIBQgH/EAABnAHiAaAB/wG1Ad8BvgH/AdAB2wHZAf8BzgHa
+        AdgB/wHKAdYB1AH/Ad4B6wHoAf8B8QH+AfwB/wH7Av4B/wEkAVEB8wH/AQABGAHGAf8BAAETAc0B/wG3
+        AbkB3QX/A/4B/wGTAeABnAH/AbwB4wG9Af8IAAOVAf8DpAH/A6wB/wOsAf8DogH/A40B/wNtAf8DgAH/
+        A2gB/wNdAf8DUwH/A0kB/wNJAf8DhQH/CAADhQH/AwAB/wMjAf8EAAPiAf8DAAH/AwAB/wMeAf8D+wH/
+        BAAD1gH/A0EB/xQAAVQBrAFUAf8BAAFpAQAB/wEAAWkBAAH/AQABaQEAAf8BFgGLARYB/wEWAYsBFgH/
         AYUBvgGFAf8B2QHqAdkB/xQAAZ8B4wGiAf8BswHeAb0B/wHNAdoB1wH/AcwB2QHXAf8ByQHUAdMB/wHS
-        Ad4B3QH/AfEB/gH8Af8B+QL+Af8BhAGsAfoB/wEVAUUB4AH/ATcBUwHjAf8B+AH7AfoB/wH7Af4B/QH/
-        AfoB/gH8Af8BkwHhAZwB/wG7AeQBvAH/CAADsQH/A5wB/wOhAf8DkwH/A4gB/wOYAf8DWAH/A4gB/wNi
-        Af8DWAH/A1MB/wNNAf8DSwH/CAAD9AH/AwoB/wMAAf8DqAH/BAADZAH/AwAB/wM6Af8DgQH/A5sB/wgA
-        AzYB/wPlAf8QAAExAZcBMQH/AQABbQEAAf8BAAFtAQAB/wGUAcYBlAH/AWkBtQFpAf8BMQGXATEB/wgA
+        Ad4B3QH/AfEB/gH8Af8B+QL+Af8BhAGsAfoB/wERAUEB4AH/ATMBTwHjAf8B+AH7AfoB/wH7Af4B/QH/
+        AfoB/gH8Af8BkwHhAZwB/wG7AeQBvAH/CAADsQH/A5wB/wOhAf8DkwH/A4gB/wOYAf8DVAH/A4gB/wNe
+        Af8DVAH/A08B/wNJAf8DRwH/CAAD9AH/AwYB/wMAAf8DqAH/BAADYAH/AwAB/wM2Af8DgQH/A5sB/wgA
+        AzIB/wPlAf8QAAEtAZcBLQH/AQABaQEAAf8BAAFpAQAB/wGUAcYBlAH/AWUBtQFlAf8BLQGXAS0B/wgA
         AdkB6gHZAf8QAAGfAeMBowH/AcAB7gHKAf8B4wHyAe8B/wHSAeAB3QH/Ac8B3gHbAf8B0wHhAd0B/wHV
         AeEB3gH/AdQB4AHdAf8B0AHdAdoB/wHRAd4B2wH/Ac4B3AHYAf8BzQHcAdQB/wHLAd8B1QH/AdkB9AHn
-        Af8BjwHgAZgB/wG8AeQBvQH/DAADygH/A5gB/wOGAf8DjgH/A4EB/wNEAf8DcAH/A2YB/wNaAf8DUAH/
-        A1cB/wwAA5AB/wMAAf8DDgH/BAAD6AH/AwAB/wMAAf8DuAH/A+4B/wMhAf8D8wH/BAADiwH/A2kB/xAA
-        AUYBogFGAf8BAAFtAQAB/wExAZcBMQH/BAABhQG+AYUB/wExAZcBMQH/CAABMQGXATEB/wGFAb4BhQH/
+        Af8BjwHgAZgB/wG8AeQBvQH/DAADygH/A5gB/wOGAf8DjgH/A4EB/wNAAf8DbAH/A2IB/wNWAf8DTAH/
+        A1MB/wwAA5AB/wMAAf8DCgH/BAAD6AH/AwAB/wMAAf8DuAH/A+4B/wMdAf8D8wH/BAADiwH/A2UB/xAA
+        AUIBogFCAf8BAAFpAQAB/wEtAZcBLQH/BAABhQG+AYUB/wEtAZcBLQH/CAABLQGXAS0B/wGFAb4BhQH/
         DAABnQHhAaEB/wG+Ae0ByAH/AeoB/AH4Af8B1wHnAeIB/wHJAdkB0wH/AcgB2AHTAf8ByQHYAdMB/wHT
         AeIB3QH/AckB2AHUAf8BwAHTAcwB/wHEAdQBzgH/AcIB1AHKAf8B3AH1AekB/wHgAfwB7wH/AYsB3gGX
-        Af8BugHiAbsB/xgAA5MB/wNfAf8DSwH/A9MB/wPJAf8D2QH/EAADYwH/AwAB/wMAAf8DAgH/A8UB/wMh
-        Af8DAAH/AwAB/wM+Af8DSQH/AwEB/wMjAf8DxAH/AxQB/wMAAf8DWAH/DAABvwHdAb8B/wEAAW0BAAH/
-        ARoBiwEaAf8BzAHkAcwB/wGFAb4BhQH/ATEBlwExAf8EAAGUAcYBlAH/AQABbQEAAf8BhQG+AYUB/wwA
+        Af8BugHiAbsB/xgAA5MB/wNbAf8DRwH/A9MB/wPJAf8D2QH/EAADXwH/AwAB/wMAAf8DAAH/A8UB/wMd
+        Af8DAAH/AwAB/wM6Af8DRQH/AwAB/wMfAf8DxAH/AxAB/wMAAf8DVAH/DAABvwHdAb8B/wEAAWkBAAH/
+        ARYBiwEWAf8BzAHkAcwB/wGFAb4BhQH/AS0BlwEtAf8EAAGUAcYBlAH/AQABaQEAAf8BhQG+AYUB/wwA
         AaAB4wGjAf8BnQHkAaIB/wG0AesBuwH/AaUB3QGrAf8BnwHWAaQB/wGeAdUBogH/AaIB2wGnAf8BowHa
-        AagB/wGgAdoBpQH/AZsB1wGiAf8BnAHaAaEB/wGcAdoBoQH/AaIB5AGpAf8BnQHjAaQB/wFpAdcBcQH/
-        AbcB4QG4Af8IAAPAAf8DjgH/A6IB/wOQAf8DkAH/A9EB/wPZAf9sAAGxAdUBsQH/ATEBlwExAf8BGgGL
-        ARoB/wEaAYsBGgH/ARoBiwEaAf8BGgGLARoB/wEaAYsBGgH/AUYBogFGAf8BvwHdAb8B/wwAAcgB6wHI
+        AagB/wGgAdoBpQH/AZsB1wGiAf8BnAHaAaEB/wGcAdoBoQH/AaIB5AGpAf8BnQHjAaQB/wFlAdcBbQH/
+        AbcB4QG4Af8IAAPAAf8DjgH/A6IB/wOQAf8DkAH/A9EB/wPZAf9sAAGxAdUBsQH/AS0BlwEtAf8BFgGL
+        ARYB/wEWAYsBFgH/ARYBiwEWAf8BFgGLARYB/wEWAYsBFgH/AUIBogFCAf8BvwHdAb8B/wwAAcgB6wHI
         Af8BtAHmAbMB/wG1AeYBtAH/AbYB5wG2Af8BtQHnAbYB/wG1AeYBtAH/AbcB5wG4Af8BtwHmAbUB/wG1
         AeUBtAH/AbYB5QG1Af8BtwHmAbYB/wG1AeMBtAH/AbIB4wGyAf8BtAHjAbQB/wGyAeEBsQH/AdkB7gHZ
-        Af8EAANiAf8DXwH/A3EB/wNuAf8DjgH/DAAD2QH/cAAB5gHxAeYB/wFpAbUBaQH/ATEBlwExAf8B2QHq
-        AdkB/2AAA+UB/wPqAf8UAAPwAf90AAGFAb4BhQH/ATEBlwExAf9wAAMgAS4DTgGZA1MBqgM8AWgDGAEh
-        IAADGAEhA1QBqwNFAX8YAAM5AV8DVgG2AykBPxQAAY8BygHkAf8BZAG5AdkB/wFeAbYB2AH/AWYBuQHZ
-        Af8BlgHNAeUB/wGYAdAB6AH/AWYBugHZAf8BXgG2AdgB/wFkAbkB2QH/AY0BxwHgAf8MAALsAfMB/0gA
-        AycBOgNVAbEBOAFIAWIB9gGWAa8B1QH/AZgBpQHMAf8BRgFNAYwB/QFPAVEBVAHuA1cBwgNEAXoDIQEx
-        AwEBAhAAA0ABcQEoAWoB4wH/AR4BQAGWAf0DVAGuAxABFgwAA0wBkwEnAV8BlQH7AR8BSwGpAf8DPAFn
-        EAABxwHqAfoB/wExAbUB6QH/AS8BtgHsAf8BLwG2AewB/wEvAbYB7AH/ASwBrQHhAf8BKwGrAd4B/wEv
-        AbYB7AH/AS8BtgHsAf8BLwG2AewB/wEwAbMB5wH/AcUB6QH4Af8IAALpAfMB/wKNAccB/zwAAxEBFwNV
-        AbQBMQFYAVwB+AEAAXIBKQH/AVoBrQFwAf8B8wf/AfwD/wHVAdsB8gH/AZoBqQHPAf8BVwFjAX8B/gFB
-        AUMBUgH0A1sB0AMvAUoMAAIhASIBMQFUAW0BugH7AY0B7wL/ARoBWAG/Af8CWwFeAdoDJwE6AxYBHwNZ
-        AcwBOAGQAdYB/wGUAfAC/wJMAW0B8wMWAR8UAAENAR4BJgH/AQ8BRgFeAf8BKAFqAZIB/wEtAWEBgwH/
-        ARsBJwEtAf8BGwEnASwB/wEtAWEBgwH/ASYBaAGQAf8BDwFGAV4B/wELAR0BJAH/EAAC0wHsAf8CVAHI
-        Af8C1AH+Af80AAM/AW0BfAGLAcMB/gFEAdUBiQH/AQABqQEJAf8BTQGbAV4B/wHVAfQC/wHyAf0B/gH/
-        Ad0B8wH5Af8B6wP/Ae8D/wHRAfsC/wGiAeIB+wH/ATsBYQG3Af8DTAGTEAACWgFdAdMBjwHpAf4B/wGI
-        AfEC/wEtAZEB3wH/AUEBSAFZAfIBRQFTAWkB8QFEAbUB8wH/AZcB/QL/AWoBvQHuAf8DWQHDEAADbwH/
-        A4IB/wMAAf8DhwH/A/4R/wP9Af8DbwH/AwAB/wNqAf8DggH/CAAC+AH+Af8CLwHXAf8CSwHYAf8CmgL/
-        AuUC/ywAA0ABcQF/AZ8BzAH+AUQB0AGGAf8BAAGfAR4B/wFEAY8BZQH/AcsB7wL/AdsB8QH4Af8BoQGg
-        AYwB/wHAAdIBxgH/AcgB9gL/AZgBzQH0Af8BiQHSAf4B/wE/AYIBygH/A0wBkxAAAksBTAGPAU0BswHx
-        Af8BYgHiAv8BYAHiAv8BNwG0AfgB/wFCAcUB/AH/AWMB4QL/AWEB4wL/AUIBfwGuAf4DQQFzEwAB/wMA
-        Af8DBwH/A/wZ/wP3Af8DAAH/AwAB/wMAAf8MAAKPAfoB/wJUAeMB/wJMAdoB/wKCAv8CwQL/KAADQAFw
-        AXsBkQHHAf4BOwHLAYoB/wEAAbEBCgH/ATUBkQFIAf8BvwHkAv8B0wHuAfkB/wHMAbIBiwH/AcwBywGp
-        Af8BmgHdAv8BmwGqAa4B/wGuAboBtAH/AR8BYQHJAf8DTAGTEAADIwEzAUEBagGmAfkBNQHYAv8BLwHK
-        Av8BNgHVAv8BNAHRAv8BLQHLAv8BOwHRAf4B/wFKAVEBZwHyAxIBGRAAAxQB/wMAAf8DKyH/AxwB/wMA
-        Af8DLAH/DAACzgH8Af8CUwH0Af8CWQHmAf8CRQHUAf8CgAL/AqcC/yQAA0ACcAGNAcsB/gE+AbwBgAH/
-        AQ8BkAEVAf8BUAGZAZIB/wGvAeIC/wHWAfEB+gH/AcEBjgFFAf8BuwGwAYsB/wGAAdMC/wGlAZ4BgwH/
-        AcoBpQFLAf8BEwFbAccB/wNNAZYQAANAAXEBIwFfAZ0B+wEPAdEC/wEFAcQC/wEHAcQC/wEHAcQC/wEC
-        AccC/wEZAccB/QH/ASUBPwFqAfoDSAGEAwEBAgwAA1IB/wMAAf8DKiH/AxsB/wMAAf8DawH/EAAChQHz
-        Af8CgAL/AmIB7gH/Aj8B0AH/AnQB/gH/ApYC/wLuAv8cAAM8AWcBYAGIAc8B/gFrAcYB6wH/AWwBvAHm
-        Af8BgwHIAfwB/wGUAdYC/wGLAdkB/AH/AVEBpgHQAf8BSgGmAeAB/wFLAbkC/wFNAY4BwAH/AVkBiAGh
-        Af8BDgFYAcUB/wNOAZQDAQECCAACUAFSAaQBJwFeAbYB/QEhAdAB+QH/ASIB1AL/ASQB0QL/ASUB0QL/
-        ASUB0QL/ASQB0QL/ASIB1wL/AR8BwAHuAf8BEwFLAX8B/gNWAbsDFAEbCAADtAH/AwAB/wMKHf8D+wH/
-        AwAB/wMAAf8DzQH/FAACmQL/AoAC/wJpAfUB/wI/AdIB/wJzAf0B/wKKAv8C4QL/FAADMgFQA1cBvwFL
-        AZYB2gH/AWUBxAL/AWMBvQL/AW8ByQL/AVkBnwH4Af8BGwE5AdwB/wEhAVAB5AH/ARYBTgHjAf8BFAFT
-        AeMB/wEOAV4B8gH/AQMBYwH8Af8BBQFDAcgB/wJJAVIB7wNUAa8CIQEiATEBWQFaAV4B2QExAakB6gH/
-        AVwB9gL/AWkB6wL/AWsB5gL/AWkB5QL/AWYB5AL/AWYB5AL/AWoB5QL/AWoB5wL/AWYB8AL/AVMB7AL/
-        ASEBgwG1Af8DWAHjAzUBVwgAAxsB/wMAAf8DzRn/A78B/wMAAf8DMgH/HAAClAL/AoAC/wJuAfkB/wJB
-        AdcB/wJxAfwB/wKEAv8C1wL/EAACUwFjAesCAAGhAf8BOgGGAegB/wFUAbsC/wFXAbcC/wFcAbsB/gH/
-        AS8BSAHtAf8BFAEWAdYB/wEZAR4B0wH/ARgBHAHSAf8BGAEcAdIB/wEeASQB1QH/ASIBKwHZAf8BIgEv
-        AdkB/wElASoBzgH/AloBXAHcAVUBWQFwAewBXgHbAv8BigP/AZkB9QL/AZYB8wH+Af8BkwH1Av8BmQHy
-        Av8BpwHwAv8BpAHvAv8BlAHyAv8BlQH0Av8BlwHyAf4B/wGXAfgC/wGDA/8BTgGyAd0B/wJVAVwB5wgA
-        A7oB/wMAAf8DPgH/AfsC/AH/Ac8B7QH6Af8BpAHdAfYB/wGoAd8B9wH/AdsB8gH7Af8D+QH/AzIB/wMB
-        Af8DzgH/IAAClQL/AoAC/wJyAfwB/wJFAdsB/wJwAfsB/wKCAv8C1gL/DAADTgGUAQYBAAG9Af8BIwFa
-        AegB/wFIAbgC/wFLAbYC/wE7AYAB9gH/ARsBJAHiAf8BGwEuAd0B/wEaASwB3gH/ARoBLQHfAf8BGAEr
-        Ad4B/wEYASkB3gH/ARcBKAHeAf8BGQEnAecB/wEoASkBgQH5AysBQwNZAccBWAFhAWwB5gJbAWcB4QJb
-        AWYB4QJXAWIB3wFOAVkBgwHyAZMB2wH0Af8B0gH9Av8ByQH+Av8BaAGyAdoB/wFTAVQBawHuAV0BXwFl
-        AeACWwFjAeEBXAFdAWMB4gJeAWoB5QNRAaIMAANzAf8DAAH/AS8BiwGvAf8BJQGlAdgB/wEjAaEB0wH/
-        ASMBogHUAf8BJwGoAdsB/wEtAWsBkQH/AwAB/wO5Af8oAAKaAv8CgAL/AnQB/gH/AkoB4QH/Am8B+wH/
-        AocC/wLlAv8IAAMEAQYCWgFhAdwBCwEYAbkB/wEyAZkB9QH/ATkBowL/ASMBNgHiAf8BHAEpAdgB/wEc
-        ASwB2gH/ARsBKwHbAf8BGgEpAdoB/wEaASkB2wH/ARkBKQHZAf8BGwErAeQB/wESARsBvAH/A04BmRgA
-        AjABMQFNAXABhAHHAf4B7wP/AdoB/AL/AUgBTQF7AfoDJAE1IAADzgH/AwAB/wEjAW4BmQH/AScBkQG7
-        Af8BMAG0AekB/wEuAa4B4QH/ATABmgHDAf8BEwFNAWYB/wMAAf8D8wH/LAACqQL/AoAC/wKAAv8CUQHl
-        Af8ChQH6Af8CrgL/AvgC/wgAAy0BRgIhAXwB+wENAToBvQH/ASgBXwHwAf8BIQEmAdYB/wEfASsB0wH/
-        AR8BKwHVAf8BHQErAdkB/wEdASgB1AH/ARwBKAHUAf8BHAEpAdgB/wEcASYB3AH/AVoBWwFfAeADBwEK
-        GAADCgEOAVUBXAFtAeoB9AP/Ac4B5QH8Af8CWwFcAdwDBAEGJwAB/wM2Af8DLAH/A04B/wJWAVcB/wNO
-        Af8DCwH/AyUB/zQAAsYC/wKFAv8CgAL/AlkB6wH/AoMB+gH/Ar4C/wwAAlIBVAGmAhEBoAH/ASwBOQHm
-        Af8BJAE0AeQB/wEhATAB4AH/ASEBMwHoAf8BHgExAegB/wEeAS0B4QH/ARwBLQHjAf8BHgEvAewB/wEg
-        ASQBeQH8Ay0BRSAAAlUBVgG0AdwB6gH8Af8BqQG7AeIB/wNQAZ0oAAMvAf8DAAH/A6QB/wMXAf8DMgH/
-        A5IB/wMAAf8DkAH/OAAC7wL/AqwC/wKBAv8CawH3Af8CkQL/AuQC/wgAAwwBEAJYAWUB5QEpAS0BmQH+
-        ASgBKwGHAfwBJwErAYMB/AEhASMBkQH7ASEBIwGRAfsBJQEpAYEB+gIhAZEB+wEkASYBfgH6A04BlyQA
-        AzoBYgGsAbIB7gH/AXUBewGbAf4DLwFKKAADywH/AwIB/wMAAf8DAAH/AwAB/wMAAf8DMAH/A/kB/0AA
-        AuoC/wKwAv8ChAL/AqIC/1gAAwwBEAJbAWUB4QJcAV4BzgMEAQYsAAPbAf8DXQH/AxkB/wMnAf8DggH/
-        A/UB/0wAAvUC/wLWAv8MAAMUARsDUQGhA0wBkwMkATUDAwEEaAADEAEWA1sB0ANYAcYDCQEMBAADGQEj
-        AygBPAMtAUYDLQFGAykBPgMfASwDBgEINAADDwEUA1EBogNWAb4DMQFPEAADWQHJAUIBrQE8Af8BPgGE
-        ATYB/wE+AUoBQAH1A1wBzgNFAX0DHwEsGAABYgJYAd0BmgFcASEB+wGcAU0BIgH6AZ0BTQEiAfoBnQFN
-        ASEB+gGdAU0BIAH6AZ0BTQEgAfoBnQFNAR8B+gGdAU0BHgH6AZ4BTQEdAfoBngFNAR0B+gGeAU0BHQH6
-        AZ4BTQEdAfoBngFNAR0B+gGaAUgBFgH7AWMBWwFYAeEEAAMSARkDXAHUAQABpAHiAf8BDAFYAZgB/wNZ
-        AcMDVwHCAWQBUQFJAfEBeAE+ATkB+AF8AU0BKQH6AXwBTQEpAfoBdwE+ATkB+AFfAUoBPwHzAVsCWAHZ
-        AzwBZzAAA1YBuQEOAUEBlgH/ARIBPwGSAf8BRwFMAVMB8QM2AVkIAANKAYwBJwGQAUcB/wFcAbEBpwH/
-        Ad8B8wHPAf8BtQHhAakB/wFhAasBVQH/ATABdQEyAf4BRwFTAUkB8QNXAb8DLwFKEAABgwFfAUsB8wHu
-        AaMBYAH/AewBsAGHAf8B7AGtAYEB/wHrAaoBcwH/AeoBqQFwAf8B6gGnAW4B/wHqAaQBawH/AekBogFo
-        Af8B6QGgAWUB/wHpAZ4BYQH/AegBnAFeAf8B5wGaAVwB/wHkAZsBYAH/Ae0BiwE8Af8BhAFMATsB8wQA
-        AisBLAFDAQsBVgGrAf0BAAH3Av8BFAHBAeoB/wFsATkBPwH/AfIBkQE4Av8BtQFZAv8BvgFhAf8B7QGt
-        AWkB/wH0AbQBYgL/Ab0BYAL/AbMBWAH/AegBiAE9Af8BaQEtASYB+QM5AV8oAAM/AW0BOQFPAaEB/QFD
-        AZgB3wH/AQoBYgHeAf8BCgFLAb4B/wNWAb4EAAMzAVIBLQF1AUUB+gGLAW4BuwH/Ae0BywH7Av8B+wHt
-        Av8B+QH2Af8B+AH3AecB/wHaAeIBsgH/AZ4BxgFqAf8BRAGcATwB/wFJAU4BSQHvAykBPgwAAX4BWAFM
-        AfEB7AHEAawN/wH2AfkC/wH3AfsC/wH9A/8B+wH+Av8B9wH6Av8B9AH2Af0B/wHwAfIB+QH/Ae8B7QH1
-        Af8B5gHuAf0B/wHmAbwBqAH/AYABUwFFAfEEAAMBAQIBUQFYAWIB6QEAAdsB/gH/ARUBxAHnAf8BngGF
-        AW8C/wHMAW0C/wHNAYMB/wHbAbABlgH/ASABHQHWAf8BQAEyAasB/wHzAcIBhgL/AcgBhgL/AdIBhAH/
-        Ad0BcwE+Af8DVgG7JAADDQESAVgBWwFlAeUBUQGiAeMB/wG2Ad8B/QH/Ab4B3wL/AUsBcwGkAf4DRQF/
-        Aw8BFAFYAWEBWAHmAS0ByQFeAf8BsQHpAecC/wHvAeQB/wHxAeUB2AH/AfMB4wHUAf8B9gHhAc0C/wHj
-        AcgB/wH7AdEBrQH/AdEBvAGBAf8BVgGTAT8B/wNYAcsDBAEGCAABfgFYAUwB8QH1Ac0BsgH/AccByAHM
-        Af8BhgGAAYEB/wG7ArcF/wHfAt0B/wGSAowB/wGPAYcBiAH/AZEBiQGKAf8BjwKIAf8BjgGGAYcB/wGG
-        AnMB/wKvAbYB/wHvAcIBpgH/AX4BUwFFAfEEAAM2AVkBFgFfAZMB+wEAAeMC/wEUAb8B4gH/AZUBhAGG
-        Av8B1AGXAv8B2QGiAf8B2AG8AbAB/wEhASUB6AH/ATgBNAHUAf8B8AHSAagB/wH4AckBigL/AcUBhgH/
-        AfEBpwFnAf8DWwHIJAADRgGBAS4BawG9Af8BlwHQAf0B/wHdAfwC/wG0Ab4BzwH/A1QBqwQAA1gBxgFT
-        AZ4BXAH/AdAB2gGqAf8B/QHxAeEB/wHxAeQB1gH/AfAB5AHVAf8B8QHgAcwB/wH0AdcBuAH/AfIBzwGp
-        Af8B1QGzAYoB/wH3AccBnAH/AckB1QGbAf8BNgFqASsB/gNKAYsIAAF+AVgBTwHxAfIBygGvAf8B5gHp
-        AewB/wHJAcgByQH/AeAC3wH/A/4B/wHvAu0B/wHOAswB/wHMAskB/wHMAscB/wHKAsUB/wHJAsMB/wHE
-        Ar0B/wHSAdMB2gH/Ae4BvwGjAf8BfgFTAUUB8QQAAzQBVAELAVgBqAH9AQAB5QL/ARMBvwHhAf8BkwGE
-        AY8C/wHhAbUC/wHqAccB/wHmAdYBzAH/AkAB4AH/AWMBWwHVAf8B/AHsAcUB/wHeAdQBnwH/Af0B1QGl
-        Af8B7wGoAYIB/wNWAbYgAAMSARkBUwFZAWQB7AFvAb4B9wH/AccB8wL/AZUBuQHYAf8DVgG7CAABWQFl
-        AVkB5QFJAYMBnAH/AfAB6wH7Av8B/gH7Af8B+wHsAeQB/wHzAeQB1AH/AfIB2wHCAf8B9wHYAbcB/wHc
-        AcABnQH/AeQBvQGRAf8B+gHOAaEB/wH+AegBzAH/AZkBzAGLAf8BPwFIAT0B9AMtAUUEAAF+AVcBTwHx
-        Ae8ByAGtDf8B/AL6Hf8B+AH5Av8B6wG+AaIB/wF+AVMBRQHxBAADLQFFAQsBWAGJAfwBAAHhAv8BEwHA
-        AeEB/wGYAY8BogL/AekBzAL/AfsB7AH/AvIB7QH/AUYBRAHZAf8BaQFlAdUD/wHwAv8B9wHtAv8B6wHT
-        Af8BvQF/AW0B/gM8AWggAANWAb4BRwGYAdsB/wGtAecC/wFnAagB1wH/A1kBwwMBAQIIAAMQARYBPAE9
-        ATwBaAFZAVwBWQHPAXwBmQF/AfsB0QHpAdEB/wH2AfQB5gL/AekB0gH/AeIBxwGrAf8B2wG9AZkB/wH3
-        AdEBpgH/AfMB0gGtAf8B/QHgAckB/wHzAfoB5wH/AVwBqQFXAf8DWgHTAw8BFAF7AVgBUQHxAfQBzgG0
-        Af8C0wHWAf8BoAKcAf8ByQLHAf8D/gH/AegC5QH/AaoCpQH/AagCoQH/AagCogH/AacCoAH/AaUCnwH/
-        AZ8ClgH/AcEBwwHJAf8B9AHIAawB/wF+AVMBRQHxBAADUQGgAQABkwHTAf8BAAHrAv8BEwG9AeAB/wGN
-        AV0BbwL/Ad8BygL/AfEB3gH/AeEBzQG8Af8BJgEqAbsB/wFJAUYBsAH/AfoB2AGvAv8B6gHZAv8B1QHJ
-        Af8BXQJZAdIDBgEIBAADFAEbAy4BSAMJAQwMAANOAZgBKgFvAaMB/gGbAeEC/wFxAbUB4wH/A1kBzAMG
-        AQgYAAMYASEDSwGOAl4BWgHYAXsBmAFvAfoB2AHKAagB/wH4AdQBsQH/AfIB0wGxAf8B8wHcAcIB/wHx
-        Ad4ByAL/AfQB7wH/AdcB9AHYAf8BNwF4ATEB/gNOAZcBewFXAVMB8QHzAc4BtAH/Ad4B4QHlAf8BuAG2
-        AbcB/wHYAtYF/wHuAu0B/wHAAr4B/wG+ArsB/wG/ArwB/wG+ArkB/wG9ArkB/wG3ArIB/wHPAdMB2QH/
-        AfMByQGtAf8BfgFTAUUB8QMSARkBSwFSAWIB7QEAAckB/QH/AQAB4gH9Af8BGgHJAeoB/wFBASoBQQH5
-        AZ0BSQE5AfwBswKiAf8BWQGdAcAB/wFAAZYBxgH/ATIBjAG+Af8BUAGIAZ8B/wHDAY4BcgH/AWcBXgFd
-        AeUDGwEmBAADIAEuA1gB4wI9ATwB/ANPAZwIAANOAZcBJAFmAZoB/gFzAc0C/wGfAdsB/gH/AUwBVAFi
-        Ae8DHQEqKAABKwEsASsBQwFnAXIBXQHwAf4B8AHYAf8B9QHbAcQB/wHyAeEB0AH/AfMB5gHYAv8B8AHt
-        Af8BrQHaAa0B/wEqAaQBLwH/A1EBpwF7AVYBUwHxAfABzAGzDv8C/iH/AfABxwGsAf8BewFTAUUB8QNS
-        AagBAAFhAcIB/wEAAeIC/wEAAdkB9QH/AR4B3QH3Af8BHgGXAccB/wE1AUgBdwH+AWABngHHAf8BiAHX
-        Af0B/wGNAdQB9QH/AXMBywHuAf8BSAGxAeIB/wEqAWQBnwH/A1IBqAgAA1kB1wHWAc8BzQH/AbgBtAGy
-        Af8DPgH4AzoBYQNOAZcBHwFnAZ8B/gFfAcIC/wGoAeYC/wFNAXwBlwH+A0IBdjAAAzoBYgGbAbcBkQH8
-        Af8B+AHwAf8B8gHjAdQC/wHvAesB/wHLAeIBxwH/ATUBugFFAf8DWAHjAxUBHQF3AVYBUwHxAfQB0AG4
-        Af8C3QHeAf8BtgKyAf8B1gLTBf8B7gLtAf8BvgK7Af8BvQK5Af8BvwK6Af8BvgK5Af8BvQK4Af8BuQKy
-        Af8B1AHWAdoB/wH2AcwBsAH/AXsBUwFFAfEBVAFYAWEB5AEAAb0C/wEAAeUC/wEAAesB+AH/ATEB+wH9
-        Af8BhgP/AU8BmwHMAf8BhAG5AeIB/wGlAeMC/wGcAdoB/gH/AZYB1wH6Af8BjgHSAfMB/wFRAbcB6QH/
-        AVMBWAFgAesDFAEbBAADZAHsAdcB0gHTAf8BywHJAcoB/wGOAY8BjgH/AUQBQQE1AfsBbgFvAXUB/gFI
-        AZUByQH/AYAB0wL/AWsBsgHgAf8DWQHEOAABVQFWAVUBsQHkAfQB5QL/AfQB8QH/AekB6AHbAf8BWwHW
-        AW8B/wFBAW4BQQH5AzABTQQAAXcBVgFTAfEB9gHTAbwB/wHTAdcB2wH/AaABnwGgAf8DyQX/A+oB/wGr
-        AqoB/wGpAacBqAH/AasBqQGqAf8BqgKpAf8BqwKoAf8BowGhAaIB/wHJAc8B1QH/AfkB0QG0Af8BewFT
-        AUcB8QE7AUwBdwHzAQABxQL/AQAB4gL/AQAB/QL/ATED/wGUA/8BawGwAdAB/wGFAaYBzgH/AcIB7QL/
-        AbcB5QL/AaYB3gL/AZgB2AH6Af8BhQHTAf0B/wE2AVoBbgH2Ax0BKgQAAycBOgNYAcsDiAH9AqwBqwH/
-        AaoBqQGnAf8BvgG3AbEB/wG2AbABqgH/AWcBnQG9Af8BUgFVAVwB6gMYASE4AAMPARQBZAFrAWQB5wHz
-        AfoB9QH/AZAB5QGfAf8BNQG0AUMB/wNIAYcIAAF3AVUBUwHxAe0BxwGuAf8B+AHxAe4B/wH4AfAB7QH/
-        AfcB8QHuAf8B9wHyAe8B/wH4AfEB7wH/AfgB8QHuAf8B+AHxAe4B/wH4AfEB7wH/AfgB8QHvAf8B+AHx
-        Ae8B/wH3AfEB7wH/AfcB8wHxAf8B8QHGAaoB/wF7AVMBRwHxARYBUQGUAfsBAAHHAv8BAAHiAv8BBAH7
-        Av8BMgP/AY8D/wFrAbMB1AH/AZ4BsQHQAf8B5wH7Av8B1gHvAv8BugHkAv8BogHgAv8BjAHZAv8CWwFh
-        AeEDBgEIDAADUwGtAaQBowGgAf8BzAHKAccB/wHFAcEBvwH/Ac0BxgHDAf8BbwFnAWUB/wNQAaMIAAMD
-        AQQDDwEUAwkBDCwAAzUBVwFnAboBiAH9AVgB5gGCAf8DWAHGDAABdwFhAVMB8QHsAZ0BVQH/AeQBjQFH
-        Af8B5AGPAUoB/wHkAY0BSAH/AeQBjAFHAf8B5AGMAUYB/wHkAYwBRQH/AeQBiwFEAf8B5AGKAUMB/wHk
-        AYkBQQH/AeQBiQFAAf8B5AGIAUAB/wHjAYgBQQH/AewBiwE2Af8BewFTAUkB8QFLAVUBagHtAQABygL/
-        AQABxQHwAf8BIgFLAV8B+wEwAYMBqQH+AXQD/wFCAYYBtwH/AaABsQHOBf8B8QP/AcwB9AL/Aa4B7gL/
-        AVsBgwGuAf4DQAFwEAADHQEqA2QB8QHRAc8BzQH/AeYB4wHhAf8BswGxAbAB/wFkAWMBYQH/AkUBRAH5
-        A1gB5ANaAdsDVwHoA10B5QMuAUgwAAFSAVMBUgGoAVcBXAFXAd8DGAEhDAABfgJfAfMB/wHhAaEC/wHH
-        AYIC/wHEAXMC/wHBAW0C/wG+AWcC/wG6AWEC/wG2AVsC/wGyAVUC/wGuAU4C/wGqAUcC/wGmAUIC/wGj
-        ATwC/wGeATQC/wGpAToB/wF7AVkBSgHyAlkBXAHJAQABwQH9Af8BAAHPAfYB/wELAUABUwH9AQkBiQG1
-        Af8BYgP/AUEBRwFqAfkDVgHBAYUBjAGcAfkBvQHVAeEB/wGfAckB3QH/AUsBZwF7AfYDSwGPGAADLQFG
-        A1wB5wHCAcABvQH/AdYB0wHRAf8BrAKpAf8BqAGnAaYB/wGvAa0BrAH/AbsBuQG4Af8ChAGDAf4DVgG4
-        AwkBDEgAAV0CWQHXAY4BXAFTAfsBfQJNAfoBfQJNAfoBfQJNAfoBfQJNAfoBfQFNAUoB+gF9AU0BRgH6
-        AX0BTQFCAfoBfQFNAT8B+gF9AU0BMQH6AX0BTQEuAfoBfQFNASsB+gF9AU0BKQH6AY4BRAElAfsBYAFa
-        AVgB3gJGAUcBgQEeAU0BjAH6AR4BZAGYAfoBIwFlAYwB+QEsAVwBjgH4AToBZAGHAfcDVAGvBAADKQE/
-        AkgBSQGHAkUBRgF/ASECIgExIAADEgEZA04BmANlAeUBhwKGAfkBfwJ9AfwBcQJuAfYDXgHZA0ABcRAA
+        Af8EAANeAf8DWwH/A20B/wNqAf8DjgH/DAAD2QH/cAAB5gHxAeYB/wFlAbUBZQH/AS0BlwEtAf8B2QHq
+        AdkB/2AAA+UB/wPqAf8UAAPwAf90AAGFAb4BhQH/AS0BlwEtAf9wAAMgAS4DTgGZA1MBqgM8AWgDGAEh
+        IAADGAEhA1QBqwNFAX8YAAM5AV8DVgG2AykBPxQAAY8BygHkAf8BYAG5AdkB/wFaAbYB2AH/AWIBuQHZ
+        Af8BlgHNAeUB/wGYAdAB6AH/AWIBugHZAf8BWgG2AdgB/wFgAbkB2QH/AY0BxwHgAf8MAALsAfMB/0gA
+        AycBOgNVAbEBPwFIAWIB9gGWAa8B1QH/AZgBpQHMAf8BQgFJAYwB/QNUAe4DVwHCA0QBegMhATEDAQEC
+        EAADQAFxASQBZgHjAf8BIgFAAZYB/QNUAa4DEAEWDAADTAGTAScBXwGRAfsBGwFHAakB/wM8AWcQAAHH
+        AeoB+gH/AS0BtQHpAf8BKwG2AewB/wErAbYB7AH/ASsBtgHsAf8BKAGtAeEB/wEnAasB3gH/ASsBtgHs
+        Af8BKwG2AewB/wErAbYB7AH/ASwBswHnAf8BxQHpAfgB/wgAAukB8wH/Ao0BxwH/PAADEQEXA1UBtAE6
+        AlwB+AEAAW4BJQH/AVYBrQFsAf8B8wf/AfwD/wHVAdsB8gH/AZoBqQHPAf8BVwFjAX8B/gFFAUgBUgH0
+        A1sB0AMvAUoMAAIhASIBMQFUAWIBqgH7AY0B7wL/ARYBVAG/Af8DXgHaAycBOgMWAR8DWQHMATQBkAHW
+        Af8BlAHwAv8CTAFoAfMDFgEfFAABCQEaASIB/wELAUIBWgH/ASQBZgGSAf8BKQFdAYMB/wEXASMBKQH/
+        ARcBIwEoAf8BKQFdAYMB/wEiAWQBkAH/AQsBQgFaAf8BBwEZASAB/xAAAtMB7AH/AlAByAH/AtQB/gH/
+        NAADPwFtAXwBgwG7Af4BQAHVAYkB/wEAAakBBQH/AUkBmwFaAf8B1QH0Av8B8gH9Af4B/wHdAfMB+QH/
+        AesD/wHvA/8B0QH7Av8BogHiAfsB/wE3AV0BtwH/A0wBkxAAAloBXQHTAY8B6QH+Af8BiAHxAv8BKQGR
+        Ad8B/wFJAUwBWQHyAU8BUwFkAfEBQAG1AfMB/wGXAf0C/wFmAb0B7gH/A1kBwxAAA2sB/wOCAf8DAAH/
+        A4cB/wP+Ef8D/QH/A2sB/wMAAf8DZgH/A4IB/wgAAvgB/gH/AisB1wH/AkcB2AH/ApoC/wLlAv8sAANA
+        AXEBfwGXAcQB/gFAAdABhgH/AQABnwEaAf8BQAGPAWEB/wHLAe8C/wHbAfEB+AH/AaEBoAGMAf8BwAHS
+        AcYB/wHIAfYC/wGYAc0B9AH/AYkB0gH+Af8BOwGCAcoB/wNMAZMQAAJLAUwBjwFJAbMB8QH/AV4B4gL/
+        AVwB4gL/ATMBtAH4Af8BPgHFAfwB/wFfAeEC/wFdAeMC/wFCAX8BpgH+A0EBcxMAAf8DAAH/AwMB/wP8
+        Gf8D9wH/AwAB/wMAAf8DAAH/DAACjwH6Af8CUAHjAf8CSAHaAf8CggL/AsEC/ygAA0ABcAF7AYkBvwH+
+        ATcBywGKAf8BAAGxAQYB/wExAZEBRAH/Ab8B5AL/AdMB7gH5Af8BzAGyAYsB/wHMAcsBqQH/AZoB3QL/
+        AZsBqgGuAf8BrgG6AbQB/wEbAV0ByQH/A0wBkxAAAyMBMwFBAWoBlgH5ATEB2AL/ASsBygL/ATIB1QL/
+        ATAB0QL/ASkBywL/ATcB0QH+Af8BTgFXAWcB8gMSARkQAAMQAf8DAAH/Aych/wMYAf8DAAH/AygB/wwA
+        As4B/AH/Ak8B9AH/AlUB5gH/AkEB1AH/AoAC/wKnAv8kAANAAnABhQHDAf4BOgG8AYAB/wELAZABEQH/
+        AUwBmQGSAf8BrwHiAv8B1gHxAfoB/wHBAY4BQQH/AbsBsAGLAf8BgAHTAv8BpQGeAYMB/wHKAaUBRwH/
+        AQ8BVwHHAf8DTQGWEAADQAFxASMBXwGWAfsBCwHRAv8BAQHEAv8BAwHEAv8BAwHEAv8BAAHHAv8BFQHH
+        Af0B/wEpAUMBZgH6A0gBhAMBAQIMAANOAf8DAAH/AyYh/wMXAf8DAAH/A2cB/xAAAoUB8wH/AoAC/wJe
+        Ae4B/wI7AdAB/wJwAf4B/wKWAv8C7gL/HAADPAFnAWABgAHHAf4BZwHGAesB/wFoAbwB5gH/AYMByAH8
+        Af8BlAHWAv8BiwHZAfwB/wFNAaYB0AH/AUYBpgHgAf8BRwG5Av8BSQGOAcAB/wFVAYgBoQH/AQoBVAHF
+        Af8DTgGUAwEBAggAAlABUgGkASsBVgGyAf0BHQHQAfkB/wEeAdQC/wEgAdEC/wEhAdEC/wEhAdEC/wEg
+        AdEC/wEeAdcC/wEbAcAB7gH/ARMBSwF/Af4DVgG7AxQBGwgAA7QB/wMAAf8DBh3/A/sB/wMAAf8DAAH/
+        A80B/xQAApkC/wKAAv8CZQH1Af8COwHSAf8CbwH9Af8CigL/AuEC/xQAAzIBUANXAb8BRwGWAdoB/wFh
+        AcQC/wFfAb0C/wFrAckC/wFVAZ8B+AH/ARcBNQHcAf8BHQFMAeQB/wESAUoB4wH/ARABTwHjAf8BCgFa
+        AfIB/wEAAV8B/AH/AQEBPwHIAf8CTQFXAe8DVAGvAiEBIgExAlsBXgHZAS0BqQHqAf8BWAH2Av8BZQHr
+        Av8BZwHmAv8BZQHlAv8BYgHkAv8BYgHkAv8BZgHlAv8BZgHnAv8BYgHwAv8BTwHsAv8BHQGDAbUB/wNY
+        AeMDNQFXCAADFwH/AwAB/wPNGf8DvwH/AwAB/wMuAf8cAAKUAv8CgAL/AmoB+QH/Aj0B1wH/Am0B/AH/
+        AoQC/wLXAv8QAAJYAWAB6wIAAaEB/wE2AYYB6AH/AVABuwL/AVMBtwL/AVgBuwH+Af8BKwFEAe0B/wEQ
+        ARIB1gH/ARUBGgHTAf8BFAEYAdIB/wEUARgB0gH/ARoBIAHVAf8BHgEnAdkB/wEeASsB2QH/ASEBJgHO
+        Af8DXAHcAlkBaAHsAVoB2wL/AYoD/wGZAfUC/wGWAfMB/gH/AZMB9QL/AZkB8gL/AacB8AL/AaQB7wL/
+        AZQB8gL/AZUB9AL/AZcB8gH+Af8BlwH4Av8BgwP/AUoBsgHdAf8DXAHnCAADugH/AwAB/wM6Af8B+wL8
+        Af8BzwHtAfoB/wGkAd0B9gH/AagB3wH3Af8B2wHyAfsB/wP5Af8DLgH/AwAB/wPOAf8gAAKVAv8CgAL/
+        Am4B/AH/AkEB2wH/AmwB+wH/AoIC/wLWAv8MAANOAZQBAgEAAb0B/wEfAVYB6AH/AUQBuAL/AUcBtgL/
+        ATcBgAH2Af8BFwEgAeIB/wEXASoB3QH/ARYBKAHeAf8BFgEpAd8B/wEUAScB3gH/ARQBJQHeAf8BEwEk
+        Ad4B/wEVASMB5wH/AS0BLwF6AfkDKwFDA1kBxwFYAWEBZwHmAlsBYQHhAlsBYQHhAlcBXgHfAVUBWQF5
+        AfIBkwHbAfQB/wHSAf0C/wHJAf4C/wFkAbIB2gH/AlQBYwHuAl8BYQHgAlsBYQHhAl0BYQHiAl4BZQHl
+        A1EBogwAA28B/wMAAf8BKwGLAa8B/wEhAaUB2AH/AR8BoQHTAf8BHwGiAdQB/wEjAagB2wH/ASkBZwGR
+        Af8DAAH/A7kB/ygAApoC/wKAAv8CcAH+Af8CRgHhAf8CawH7Af8ChwL/AuUC/wgAAwQBBgJcAWEB3AEH
+        ARQBuQH/AS4BmQH1Af8BNQGjAv8BHwEyAeIB/wEYASUB2AH/ARgBKAHaAf8BFwEnAdsB/wEWASUB2gH/
+        ARYBJQHbAf8BFQElAdkB/wEXAScB5AH/AQ4BFwG8Af8DTgGZGAACMAExAU0BcAF/Ab8B/gHvA/8B2gH8
+        Av8BTAFNAXcB+gMkATUgAAPOAf8DAAH/AR8BagGZAf8BIwGRAbsB/wEsAbQB6QH/ASoBrgHhAf8BLAGa
+        AcMB/wEPAUkBYgH/AwAB/wPzAf8sAAKpAv8CgAL/AoAC/wJNAeUB/wKFAfoB/wKuAv8C+AL/CAADLQFG
+        AiEBcAH7AQkBNgG9Af8BJAFbAfAB/wEdASIB1gH/ARsBJwHTAf8BGwEnAdUB/wEZAScB2QH/ARkBJAHU
+        Af8BGAEkAdQB/wEYASUB2AH/ARgBIgHcAf8BXgJfAeADBwEKGAADCgEOAVUBXAFlAeoB9AP/Ac4B5QH8
+        Af8DXAHcAwQBBicAAf8DMgH/AygB/wNKAf8CUgFTAf8DSgH/AwcB/wMhAf80AALGAv8ChQL/AoAC/wJV
+        AesB/wKDAfoB/wK+Av8MAAJSAVQBpgINAaAB/wEoATUB5gH/ASABMAHkAf8BHQEsAeAB/wEdAS8B6AH/
+        ARoBLQHoAf8BGgEpAeEB/wEYASkB4wH/ARoBKwHsAf8BJAEoAXUB/AMtAUUgAAJVAVYBtAHcAeoB/AH/
+        AakBuwHiAf8DUAGdKAADKwH/AwAB/wOkAf8DEwH/Ay4B/wOSAf8DAAH/A5AB/zgAAu8C/wKsAv8CgQL/
+        AmcB9wH/ApEC/wLkAv8IAAMMARACXgFlAeUBKQEtAZEB/gIrAX0B/AIrAXwB/AEhASMBjQH7ASEBIwGN
+        AfsCKQF7AfoCIQGNAfsBKAEpAXoB+gNOAZckAAM6AWIBrAGyAe4B/wF1AXsBkwH+Ay8BSigAA8sB/wMA
+        Af8DAAH/AwAB/wMAAf8DAAH/AywB/wP5Af9AAALqAv8CsAL/AoQC/wKiAv9YAAMMARACWwFhAeECXAFe
+        Ac4DBAEGLAAD2wH/A1kB/wMVAf8DIwH/A4IB/wP1Af9MAAL1Av8C1gL/DAADFAEbA1EBoQNMAZMDJAE1
+        AwMBBGgAAxABFgNbAdADWAHGAwkBDAQAAxkBIwMoATwDLQFGAy0BRgMpAT4DHwEsAwYBCDQAAw8BFANR
+        AaIDVgG+AzEBTxAAA1kByQE+Aa0BOAH/AToBhAEyAf8BQgFKAUIB9QNcAc4DRQF9Ax8BLBgAAV4CWAHd
+        AZQBXAEhAfsBkgFNASYB+gGTAU0BJgH6AZMBTQElAfoBkwFNASQB+gGTAU0BJAH6AZMBTQEjAfoBkwFN
+        ASIB+gGVAU0BIQH6AZUBTQEhAfoBlQFNASEB+gGVAU0BIQH6AZUBTQEhAfoBlAFIAR4B+wFhAlsB4QQA
+        AxIBGQNcAdQBAAGkAeIB/wEIAVQBmAH/A1kBwwNXAcIBZAJTAfEBdAE+AT0B+AF4AU0BKQH6AXgBTQEp
+        AfoBcwE+AT0B+AFfAUwBSgHzA1sB2QM8AWcwAANWAbkBCgE9AZYB/wEOATsBkgH/AVECUwHxAzYBWQgA
+        A0oBjAEjAZABQwH/AVgBsQGnAf8B3wHzAc8B/wG1AeEBqQH/AV0BqwFRAf8BMAF1ATIB/gFRAlMB8QNX
+        Ab8DLwFKEAABeAFfAUwB8wHuAaMBXAH/AewBsAGHAf8B7AGtAYEB/wHrAaoBbwH/AeoBqQFsAf8B6gGn
+        AWoB/wHqAaQBZwH/AekBogFkAf8B6QGgAWEB/wHpAZ4BXQH/AegBnAFaAf8B5wGaAVgB/wHkAZsBXAH/
+        Ae0BiwE4Af8BewFMAUQB8wQAAisBLAFDAQ8BUQGoAf0BAAH3Av8BEAHBAeoB/wFoATUBOwH/AfIBkQE0
+        Av8BtQFVAv8BvgFdAf8B7QGtAWUB/wH0AbQBXgL/Ab0BXAL/AbMBVAH/AegBiAE5Af8BaQE1ASoB+QM5
+        AV8oAAM/AW0BPQFLAaEB/QE/AZgB3wH/AQYBXgHeAf8BBgFHAb4B/wNWAb4EAAMzAVIBLQFxAUkB+gGL
+        AWoBuwH/Ae0BywH7Av8B+wHtAv8B+QH2Af8B+AH3AecB/wHaAeIBsgH/AZ4BxgFmAf8BQAGcATgB/wFN
+        AVQBTQHvAykBPgwAAXIBWAFTAfEB7AHEAawN/wH2AfkC/wH3AfsC/wH9A/8B+wH+Av8B9wH6Av8B9AH2
+        Af0B/wHwAfIB+QH/Ae8B7QH1Af8B5gHuAf0B/wHmAbwBqAH/AXQBUwFPAfEEAAMBAQICWAFiAekBAAHb
+        Af4B/wERAcQB5wH/AZ4BhQFrAv8BzAFpAv8BzQGDAf8B2wGwAZYB/wEcARkB1gH/ATwBLgGrAf8B8wHC
+        AYYC/wHIAYYC/wHSAYQB/wHdAW8BOgH/A1YBuyQAAw0BEgJeAWUB5QFNAaIB4wH/AbYB3wH9Af8BvgHf
+        Av8BSwFzAZwB/gNFAX8DDwEUAVgBYQFYAeYBKQHJAVoB/wGxAekB5wL/Ae8B5AH/AfEB5QHYAf8B8wHj
+        AdQB/wH2AeEBzQL/AeMByAH/AfsB0QGtAf8B0QG8AYEB/wFSAZMBOwH/A1gBywMEAQYIAAFyAVgBUwHx
+        AfUBzQGyAf8BxwHIAcwB/wGGAYABgQH/AbsCtwX/Ad8C3QH/AZICjAH/AY8BhwGIAf8BkQGJAYoB/wGP
+        AogB/wGOAYYBhwH/AYYCbwH/Aq8BtgH/Ae8BwgGmAf8BcgFTAU8B8QQAAzYBWQEeAV8BjwH7AQAB4wL/
+        ARABvwHiAf8BlQGEAYYC/wHUAZcC/wHZAaIB/wHYAbwBsAH/AR0BIQHoAf8BNAEwAdQB/wHwAdIBqAH/
+        AfgByQGKAv8BxQGGAf8B8QGnAWMB/wNbAcgkAANGAYEBKgFnAb0B/wGXAdAB/QH/Ad0B/AL/AbQBvgHP
+        Af8DVAGrBAADWAHGAU8BngFYAf8B0AHaAaoB/wH9AfEB4QH/AfEB5AHWAf8B8AHkAdUB/wHxAeABzAH/
+        AfQB1wG4Af8B8gHPAakB/wHVAbMBigH/AfcBxwGcAf8ByQHVAZsB/wE2AWoBKwH+A0oBiwgAAXIBWAFT
+        AfEB8gHKAa8B/wHmAekB7AH/AckByAHJAf8B4ALfAf8D/gH/Ae8C7QH/Ac4CzAH/AcwCyQH/AcwCxwH/
+        AcoCxQH/AckCwwH/AcQCvQH/AdIB0wHaAf8B7gG/AaMB/wFyAVMBTwHxBAADNAFUAQ8BUgGoAf0BAAHl
+        Av8BDwG/AeEB/wGTAYQBjwL/AeEBtQL/AeoBxwH/AeYB1gHMAf8CPAHgAf8BXwFXAdUB/wH8AewBxQH/
+        Ad4B1AGfAf8B/QHVAaUB/wHvAagBggH/A1YBtiAAAxIBGQJZAWQB7AFrAb4B9wH/AccB8wL/AZUBuQHY
+        Af8DVgG7CAABXgFlAV4B5QFFAYMBnAH/AfAB6wH7Av8B/gH7Af8B+wHsAeQB/wHzAeQB1AH/AfIB2wHC
+        Af8B9wHYAbcB/wHcAcABnQH/AeQBvQGRAf8B+gHOAaEB/wH+AegBzAH/AZkBzAGLAf8BQwFQAUEB9AMt
+        AUUEAAFyAVcBUwHxAe8ByAGtDf8B/AL6Hf8B+AH5Av8B6wG+AaIB/wFyAVMBTwHxBAADLQFFAQ8BUwF+
+        AfwBAAHhAv8BDwHAAeEB/wGYAY8BogL/AekBzAL/AfsB7AH/AvIB7QH/AUIBQAHZAf8BZQFhAdUD/wHw
+        Av8B9wHtAv8B6wHTAf8BtQF/AW0B/gM8AWggAANWAb4BQwGYAdsB/wGtAecC/wFjAagB1wH/A1kBwwMB
+        AQIIAAMQARYBPAE9ATwBaAFZAVwBWQHPAXABlAFzAfsB0QHpAdEB/wH2AfQB5gL/AekB0gH/AeIBxwGr
+        Af8B2wG9AZkB/wH3AdEBpgH/AfMB0gGtAf8B/QHgAckB/wHzAfoB5wH/AVgBqQFTAf8DWgHTAw8BFAFw
+        AVgBUwHxAfQBzgG0Af8C0wHWAf8BoAKcAf8ByQLHAf8D/gH/AegC5QH/AaoCpQH/AagCoQH/AagCogH/
+        AacCoAH/AaUCnwH/AZ8ClgH/AcEBwwHJAf8B9AHIAawB/wFyAVMBTwHxBAADUQGgAQABkwHTAf8BAAHr
+        Av8BDwG9AeAB/wGNAVkBawL/Ad8BygL/AfEB3gH/AeEBzQG8Af8BIgEmAbsB/wFFAUIBsAH/AfoB2AGv
+        Av8B6gHZAv8B1QHJAf8BXQJZAdIDBgEIBAADFAEbAy4BSAMJAQwMAANOAZgBKgFvAZsB/gGbAeEC/wFt
+        AbUB4wH/A1kBzAMGAQgYAAMYASEDSwGOAl4BWgHYAXcBjAFrAfoB2AHKAagB/wH4AdQBsQH/AfIB0wGx
+        Af8B8wHcAcIB/wHxAd4ByAL/AfQB7wH/AdcB9AHYAf8BNwF4ATEB/gNOAZcBcAFXAVMB8QHzAc4BtAH/
+        Ad4B4QHlAf8BuAG2AbcB/wHYAtYF/wHuAu0B/wHAAr4B/wG+ArsB/wG/ArwB/wG+ArkB/wG9ArkB/wG3
+        ArIB/wHPAdMB2QH/AfMByQGtAf8BcgFTAU8B8QMSARkBUgFWAV4B7QEAAckB/QH/AQAB4gH9Af8BFgHJ
+        AeoB/wFBATEBQQH5AZEBQQE1AfwBswKiAf8BVQGdAcAB/wE8AZYBxgH/AS4BjAG+Af8BTAGIAZ8B/wHD
+        AY4BbgH/AWUCXgHlAxsBJgQAAyABLgNYAeMCOQE4AfwDTwGcCAADTgGXASQBZgGSAf4BbwHNAv8BnwHb
+        Af4B/wFQAVgBYgHvAx0BKigAASsBLAErAUMBYQFpAV0B8AH+AfAB2AH/AfUB2wHEAf8B8gHhAdAB/wHz
+        AeYB2AL/AfAB7QH/Aa0B2gGtAf8BJgGkASsB/wNRAacBcAFWAVMB8QHwAcwBsw7/Av4h/wHwAccBrAH/
+        AXABUwFPAfEDUgGoAQABXQHCAf8BAAHiAv8BAAHZAfUB/wEaAd0B9wH/ARoBlwHHAf8BNQFIAXcB/gFc
+        AZ4BxwH/AYgB1wH9Af8BjQHUAfUB/wFvAcsB7gH/AUQBsQHiAf8BJgFgAZ8B/wNSAagIAANZAdcB1gHP
+        Ac0B/wG4AbQBsgH/Az4B+AM6AWEDTgGXAR8BZwGXAf4BWwHCAv8BqAHmAv8BTQF8AY8B/gNCAXYwAAM6
+        AWIBjwGvAYUB/AH/AfgB8AH/AfIB4wHUAv8B7wHrAf8BywHiAccB/wExAboBQQH/A1gB4wMVAR0BbwFW
+        AVMB8QH0AdABuAH/At0B3gH/AbYCsgH/AdYC0wX/Ae4C7QH/Ab4CuwH/Ab0CuQH/Ab8CugH/Ab4CuQH/
+        Ab0CuAH/AbkCsgH/AdQB1gHaAf8B9gHMAbAB/wFwAVMBTwHxAVkBWgFhAeQBAAG9Av8BAAHlAv8BAAHr
+        AfgB/wEtAfsB/QH/AYYD/wFLAZsBzAH/AYQBuQHiAf8BpQHjAv8BnAHaAf4B/wGWAdcB+gH/AY4B0gHz
+        Af8BTQG3AekB/wFYAVkBYAHrAxQBGwQAA2QB7AHXAdIB0wH/AcsByQHKAf8BjgGPAY4B/wFEAUEBMgH7
+        AW4BbwF1Af4BRAGVAckB/wGAAdMC/wFnAbIB4AH/A1kBxDgAAVUBVgFVAbEB5AH0AeUC/wH0AfEB/wHp
+        AegB2wH/AVcB1gFrAf8BQQFqAUEB+QMwAU0EAAFvAVYBUwHxAfYB0wG8Af8B0wHXAdsB/wGgAZ8BoAH/
+        A8kF/wPqAf8BqwKqAf8BqQGnAagB/wGrAakBqgH/AaoCqQH/AasCqAH/AaMBoQGiAf8ByQHPAdUB/wH5
+        AdEBtAH/AXABUwFRAfEBRAFMAW8B8wEAAcUC/wEAAeIC/wEAAf0C/wEtA/8BlAP/AWcBsAHQAf8BhQGm
+        Ac4B/wHCAe0C/wG3AeUC/wGmAd4C/wGYAdgB+gH/AYUB0wH9Af8BOwFaAWIB9gMdASoEAAMnAToDWAHL
+        A4gB/QKsAasB/wGqAakBpwH/Ab4BtwGxAf8BtgGwAaoB/wFjAZ0BvQH/AlUBXAHqAxgBITgAAw8BFANk
+        AecB8wH6AfUB/wGQAeUBnwH/ATEBtAE/Af8DSAGHCAABbwFVAVMB8QHtAccBrgH/AfgB8QHuAf8B+AHw
+        Ae0B/wH3AfEB7gH/AfcB8gHvAf8B+AHxAe8B/wH4AfEB7gH/AfgB8QHuAf8B+AHxAe8B/wH4AfEB7wH/
+        AfgB8QHvAf8B9wHxAe8B/wH3AfMB8QH/AfEBxgGqAf8BcAFTAVEB8QEeAVEBkAH7AQABxwL/AQAB4gL/
+        AQAB+wL/AS4D/wGPA/8BZwGzAdQB/wGeAbEB0AH/AecB+wL/AdYB7wL/AboB5AL/AaIB4AL/AYwB2QL/
+        AlsBYQHhAwYBCAwAA1MBrQGkAaMBoAH/AcwBygHHAf8BxQHBAb8B/wHNAcYBwwH/AWsBYwFhAf8DUAGj
+        CAADAwEEAw8BFAMJAQwsAAM1AVcBXwG2AYgB/QFUAeYBggH/A1gBxgwAAW8BYQFTAfEB7AGdAVEB/wHk
+        AY0BQwH/AeQBjwFGAf8B5AGNAUQB/wHkAYwBQwH/AeQBjAFCAf8B5AGMAUEB/wHkAYsBQAH/AeQBigE/
+        Af8B5AGJAT0B/wHkAYkBPAH/AeQBiAE8Af8B4wGIAT0B/wHsAYsBMgH/AXACUwHxAVIBWQFmAe0BAAHK
+        Av8BAAHFAfAB/wEiAUsBXwH7ATABfwGhAf4BcAP/AT4BhgG3Af8BoAGxAc4F/wHxA/8BzAH0Av8BrgHu
+        Av8BWwF/AaYB/gNAAXAQAAMdASoDZAHxAdEBzwHNAf8B5gHjAeEB/wGzAbEBsAH/AWABXwFdAf8CRQFE
+        AfkDWgHkA1oB2wNXAegDXgHlAy4BSDAAAVIBUwFSAagBVwFcAVcB3wMYASEMAAFxAl8B8wH/AeEBoQL/
+        AccBggL/AcQBbwL/AcEBaQL/Ab4BYwL/AboBXQL/AbYBVwL/AbIBUQL/Aa4BSgL/AaoBQwL/AaYBPgL/
+        AaMBOAL/AZ4BMAL/AakBNgH/AXIBWQFOAfICWQFcAckBAAHBAf0B/wEAAc8B9gH/AQ8BQAFPAf0BBQGJ
+        AbUB/wFeA/8BQQFHAWoB+QNWAcEBgQGIAZAB+QG9AdUB4QH/AZ8ByQHdAf8BSQFiAXMB9gNLAY8YAAMt
+        AUYDXAHnAcIBwAG9Af8B1gHTAdEB/wGsAqkB/wGoAacBpgH/Aa8BrQGsAf8BuwG5AbgB/wN/Af4DVgG4
+        AwkBDEgAAV0CWQHXAYoBXAFTAfsBeQJNAfoBeQJNAfoBeQJNAfoBeQJNAfoBeQJNAfoBeQFNAUoB+gF5
+        AU0BRgH6AXkBTQFDAfoBeQFNATEB+gF5AU0BLgH6AXkBTQErAfoBeQFNASkB+gGKAUQBJQH7AWACWgHe
+        AkYBRwGBASIBTQGAAfoBIgFcAYwB+gEnAWUBiAH5ATgBXAGCAfgBPgFkAYMB9wNUAa8EAAMpAT8CSAFJ
+        AYcCRQFGAX8BIQIiATEgAAMSARkDTgGYA2UB5QGDAoIB+QF7AnkB/AFlAmIB9gNeAdkDQAFxEAADOgFh
+        A1kBxwNZAcwDWgHKA1oBygNaAcoDWgHKA1oBygNaAcoDWgHKA1oBygNaAcoDWgHKA1wBzgNZAcMDNAFV
+        RAADVwHCA0QBezgAA2EB4gNwAfEDZwHuA2cB7gNnAe4DZQHuA2UB7gNlAe4DZQHuA2UB7gNlAe4DZQHu
+        A2gB8ANlAeUEAANhAe4D4gH/A90B/wPaAf8C2wHaAf8D2QH/A9gB/wPYAf8D1wH/A9YB/wPVAf8D1AH/
+        A9MB/wPgAf8DmQH/A1cBvQwAA0gBhgJNATIB+gNDAXcsAANcAdQBBwEjATgB/wNJAYkDEwEaMAABogKj
+        Bf8B9gLwAf8B9gLvAf8B9gLvAf8B9ALvAf8B9ALtAf8B9ALtAf8B9ALtAf8B8gLrAf8B8wLrAf8B8gLo
+        Av8C+wH/AaICoQH/BAADhAH3BP8C9AHzAf8B/QH4AfUC/wH2AfMB/wH9AfQB8QH/AfwB8wHwAf8B+wHw
+        Ae0B/wH5AfAB7QH/AfgB7wHsAf8B9wHtAeoB/wHyAe0B6gH/AecB5gHnAf8D9QH/A8YB/wNZAcMIAAMO
+        ARMDXwHgATABxAFLAf8BRwFqAUEB+QM4AV4oAAMpAT8BRAFSAWkB9wFhAZoBrgH/A1sB0ANCAXUDBgEI
+        KAADnwH9AfoC8wH/AeoC4gH/AekC4QH/AekC4QH/AegC3wH/AecC3gH/AeYC3gH/AeYC3QH/AeQC2wH/
+        AeQC2gH/AeIC1wH/AfUC6wH/AZ4CnAH9BAADcwH2AfwC+wH/Ae4B7AHqAf8BuwHMAdoB/wGTAbMBywH/
+        AZgBtQHLAf8BlgG1AcsB/wGVAbQBygH/AZUBswHJAf8BlAGzAckB/wGOAa4BxwH/AakBugHIAf8B3gLc
+        Af8B7gLtAf8DvQH/A1YBwQgAA0ABcQE7AZoBNgH/AUkB6QGSAf8BPQHSAWUB/wFMAV8BTAHzAy4BRygA
+        A1EBogFuAcQB3wH/AZsB5AHyAf8BIgGKAa0B/wNMAZEDAgEDJAABnwKeAv0C9gH/AfUC7QH/AfMC7AH/
+        AfMC7AH/AfIC6gH/AfEC6QH/AfEC6QH/AfAC6AH/Ae8C5gH/Ae8C5QH/Ae0C4wH/AfgC7gH/A5wB/QQA
+        A3MB9gL/Af4B/wHtAeQB5wH/AUkBswHYAf8BAQHLAesB/wEPAdAB7QH/ARIB0QHuAf8BEgHUAfEB/wET
+        AdIB7gH/ARUB0gHuAf8BDAHPAe4B/wE2AaQBzAH/AdUBzwHTAf8B9gHyAfAB/wPAAf8DVgHBBAADBQEH
+        AVYBWAFWAbwBTAHPAWsB/wFtAegBqwH/AV4B6AGjAf8BQgHOAWUB/wFZAWABWQHrAyQBNSQAAzEBTgEO
+        AW4BpQH/AZcB5gH5Af8BhgHoAfUB/wFAAVUBjwH9AyIBMiQAA6AB/QH7AvcB/wHeAtoB/wHeAtkB/wHf
+        AtoB/wHeAtkB/wHdAtkB/wHdAtkB/wHdAtgB/wHcAtYB/wHbAtYB/wHaAtQB/wH4AvEB/wGeAp0B/QQA
+        A3UB9gT/AeoB5AHmAf8BTgG7AeEB/wEhAdwC/wEmAd0C/wEOAdMB/QH/AQkB0AH3Af8BDAHUAfwB/wEM
+        Ad0C/wEFAd0C/wE0Aa4B2AH/AdUBzwHTAf8B9wHzAfEB/wPBAf8DVgHBBAADLgFIAUMBfwE8Af4BiQHu
+        AbUB/wGWAfMBxQH/AYoB6wG4Af8BagHsAa8B/wFBAcwBYwH/AVcBXAFXAd8DGgEkIAADCAELA1MBrQEf
+        AaEBzAH/AZ0B0wHdAf8BqgHiAfAB/wNUAaskAAOoAf0B0gLRAf8BHwIeAf8CEwESAf8BFwEWARUB/wET
+        ARIBEwH/ARYCFQH/ARgCFQH/AxgB/wEWAhcB/wEPARIBEwH/AxsB/wHLAsoB/wOoAf0EAAN1AfYE/wHp
+        AecB6QH/AV0BtwHhAf8BXAHQAf4B/wFcAdUC/wE7AakB3AH/AUABXgGHAf8BEwGfAdoB/wEAAcEC/wEA
+        AbwC/wExAaUB1wH/AdgB1AHWAf8B+AH0AfIB/wLCAcMB/wNWAcEDAgEDA1ABmgFdAc4BggH/AaEB+gHR
+        Af8BTQHNAWcB/wFpAeYBpQH/AZUB8wHIAf8BbQHyAbgB/wFAAcgBXgH/AVsBXgFbAdADFAEcIAADEgEY
+        A1YBswFhAcYB4QH/AfAD/wGOAZoBogH/AzMBUgMPARQcAAOoAf0BxgLIAf8DAAH/AwAB/wMAAf8DAAH/
+        AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AbwCvQH/A6gB/QQAA3UB9gT/AekB6AHrAf8BYAG5AeEB/wFq
+        AdUB/gH/AWwB3QL/AWIBrAHKAf8BXAFJAUUB/wEzAZ0ByQH/AQABuAL/AQABrwL/ATIBogHXAf8B2gHV
+        AdYB/wH6AfYB9AH/AcQCxQH/A1YBwQMcAScBUQF9AUYB9wGYAfwByQH/AV4BqgFzAf4BWgFhAVoB5AFC
+        AWwBQgH1AV0B4wGYAf8BkQH5AcwB/wFtAfcBwQH/ATwBwwFVAf8BVQFXAVUBtwMKAQ0gAAMKAQ4DTwGl
+        AY0BvgHPAf8BmAHHAeAB/wFCAVwBbwH1AVgCXAHRAxoBJRgAA6gB/QHKAc8B0AH/AQcBDwEQAf8DAAH/
+        ATQBNwEwAf8BvQG2AZYB/wESASQBIAH/ARsBIQEYAf8BIgEeARMB/wMAAf8BXgEsAQsB/wMAAf8BwgK/
+        Af8DqAH9BAADdQH2BP8B5gHnAesB/wFmAbsB4gH/AZcB5AL/AZYB6AL/AZABxwHdAf8BiwGSAZMB/wFd
+        AbwB3gH/ARgBxQL/ARABwAL/ATgBpgHYAf8B1wHUAdcB/wH7AfcB9QH/A8YB/wNWAcEDRwGCAUsB0AFr
+        Af8BUAHVAXAB/wFYAVoBWAHAAwABAQMtAUUBXQFhAV0B4gFCAcsBXgH/AYEB+QHGAf8BawH+AcoB/wE1
+        AcABTgH/A1IBqQMEAQUgAAMKAQ4DVwHFAUMBlAG7Af8BQQGYAbsB/wEiAScBLAH/A1ABnwMAAQEUAAOo
+        Af0B0QLMAf8BuAGYAVsB/wFhAWIBTAH/AbYCuAX/AUoCVAH/AVoBUwE4Af8BYAFfAUcB/wEzAScBEgH/
+        Ac4BYwEiAf8BPwEXAQMB/wHJAb4BvQH/A6gB/QQAA3cB9gT/AfEB8AHxAf8BgwG5AdoB/wFeAbcB3gH/
+        AWIBuAHeAf8BYgG/AecB/wFwAcsB8wH/AVMBuwHoAf8BPgGuAeAB/wE0AaoB3AH/AVsBqgHRAf8B4QHf
+        AeAB/wH6AfcB9gH/A8gB/wNWAcEBWAFiAVgB6QE1AdABUwH/AVkBWwFZAcQDDQESCAADHAEoAVQBVgFU
+        AasBKwG0ATcB/wFfAfIBswH/AWMB/wHQAf8BMAG7AUQB/wNLAY4kAAI+AT8BbAGAAXABbQH/AZMBGQEP
+        Af8BFAIAAf8BIwEBAQAB/wNAAXAUAAGmAqgB/QHRAcwBygH/AdcBrwFpAf8B/AHhAa4B/wH2AvcB/wH7
+        Af4C/wHkAdcBxQH/AcsBrwFtAf8BjwFrAUkB/wHMAZIBPQL/AZEBLwH/AckBPQEFAf8BygG9AbsB/wGl
+        AqgB/QQAA3cB9gT/AfsB+gH5Af8B5gHqAe4B/wGfAacBsQH/AaIBpwGuAf8BnwGnAa8B/wHAAcwB1wH/
+        AbABtQG9Af8BrgGtAbMB/wGfAaEBqAH/Ad4B3wHjAf8B7gLtAf8D9QH/A8kB/wNWAcEBPwFrATkB9gFZ
+        AVwBWQHPAxQBGxAAAwQBBQE9AT4BPQFqAT8BbgE7AfYBSgHoAZYB/wFaAf8B0gH/ASkBuAE6Af8BRQFG
+        AUUBfiAAAwEBAgNHAYIBvgFXAT0B/wFpARABDAH/AQ8CAAH/AUcBKwEmAfkBLAIrAUMQAAGnAqgB/QHQ
+        AcoByQH/Ac0BoQFbAv8B3AGdAf8B/QHlAcEB/wH2AeMBzQH/Af4B4AGuAv8B2gGaAf8B+QHAAWcB/wH8
+        AacBRAL/AYABJAH/AdABOgEAAf8ByQG8AboB/wGkAqgB/QQAA3cB9gT/A/cD/wH+Af8B2wHWAdQB/wG7
+        AbUBsgH/AckBwgHAAf8BuwG1AbIB/wHMAccBxAH/AbsBtQGyAf8B0AHLAcgB/wH3AfUB9AH/AuoB6QH/
+        A/YB/wPLAf8DVgHBAxgBIQMRARccAAMkATYBWgFeAVoB1QEzAdQBXwH/AVYB/AG+Af8BJQG3ATcB/wM8
+        AWYgAAMCAQMDUwGqAcYBZgFMAf8BRQEFAQIB/wEWAgAB/wFdAlkB1wMYASEMAAGnAqgB/QHPAcoByAH/
+        Ac0BlwFJAv8BywGFAv8BzgGOAv8BzwGQAv8BzQGNAv8BxAFvAv8BtgFUAf8B/AGWATcB/wH6AWABGAH/
+        AcgBKwEAAf8ByAG6AbkB/wGlAqgB/QQAA3cB9gT/A/kB/wP6Af8B+QL6Af8DywH/AbgCtgH/AcECvwH/
+        AbgCtgH/A8QB/wHwAvEB/wHuAu8B/wPrAf8D+QH/A80B/wNWAcEoAAMQARUBTwFQAU8BmwEgAb4BOAH/
+        AUwB9QGkAf8BOgGoAUAB/QMxAU4gAAMQARYBXAJZAcwBuQFZATsB/wEmAgAB/wEqAQMBAAH/AVECUAGf
+        DAABpwKoAf0BzQHFAcQB/wHQAYIBKgL/AbkBTwL/Ab8BYAL/AcEBYwL/AbwBWgL/AbABSQL/AZgBMwH/
+        Af0BaQEcAv8BRAEAAf8BzQEWAQAB/wHGAbYBtQH/AaUCqAH9BAADeQH2BP8D+wH/A/kB/wP6Af8B+gL7
+        Af8D5QH/A9UB/wPhAf8D9AH/A/EB/wPtAf8D6wH/A/cB/wPPAf8DVwHCMAABOQE6ATkBYAFYAV8BWAHj
+        ATUB3QFaAf8BVAFoAVUB7SQAAx0BKgFiAlgB6QGfAUQBIgH/ARECAAH/AUYBBAEAAf8DNwFbCAADqAH9
+        AdQCywH/AZgBTgEnAf8BtAFtATYB/wGzAYMBPwH/AbQBhgFAAf8BswGCAT0B/wGzAWkBNQH/AbMBWwEt
+        Af8BswFJASEB/wG1ATQBEQH/AZcBIAEPAf8BywG/Ab4B/wGnAqgB/QQAA4gB+CD/A/0B/wP8Af8D+gH/
+        A/kF/wPTAf8DVwHCNAADHQEpAVcBWgFXAcUBTQFmAU0B7ygAAyoBQAF5AUkBSAH2AYABMQEUAf8BDgIA
+        Af8BYAFYAVcB6wgAAaMCpAX/AdsB3AHgAf8C2AHeAf8C2QHdAf8B2AHZAd0B/wHYAdkB3gH/AdgB2QHe
+        Af8B2AHaAd4B/wHYAdsB3wH/AdcB3AHgAf8B2QHcAd8C/wL8Af8DogH/BAADWwHLA6UB/gOxAf0DsQH9
+        A7EB/QOxAf0DsQH9A7EB/QOxAf0DsQH9A7EB/QOxAf0DsgH9A60B/gNqAfUDOwFlbAADOwFkAXUBSAE/
+        AfYBWQFCAT4B9QFSAlEBpwgAA14B3QNlAe8DZwHtA2cB7QNnAe0DZwHtA2cB7QFmAmcB7QNmAe0DZgHt
+        A2YB7QNjAe4DZAHvA18B4JMAAQEDBAEFAxABFgMpAT8DPgFsA0YBgANEAXsDOAFcAyABLgMKAQ0DAQEC
+        DAABWgJdAdMBTAFyAYAB8wFXAWYBbgHvAVcBZgFuAe8BVwFmAW4B7wFXAWYBbgHvAVcBZgFuAe8BVwFm
+        AW4B7wFXAWYBbgHvAVcBZgFuAe8BVwFmAW4B7wFXAWYBbgHvAVcBcgF7AfIBWwJeAdkLAAEBAwYBCAMK
+        AQ0DCgENAwoBDQMKAQ0DCgENAwoBDQMKAQ0DCgENAwoBDQMKAQ0DBwEKAwMBBAsAAQEDBgEIAwoBDQMK
+        AQ0DCgENAwoBDQMKAQ0DCgENAwoBDQMKAQ0DBwEKAwMBBBMAAQEDBwEJAxUBHQM5AV8DUwGwAlgBYQHm
+        AV8BjAGUAfsBUwGoAbEB/QFOAV0BXwHwA1kB0gNSAakDRgGAAyQBNgMEAQYIAAEvAaAB0gH/ASUB+wL/
+        ARsB8QL/AR4B8AL/AR8B8AL/AR8B8QL/AR8B8QL/AR8B8QL/AR8B8QL/AR8B8AL/AR8B8AL/AR0B8AL/
+        ASMB+wL/ATMBrAHYAf8EAAMEAQUDJAE2A0QBeQNKAYsDSgGLA0oBiwNKAYsDSgGLA0oBiwNKAYsDSgGL
+        A0oBiwNKAYsDRwGCAzMBUgMLAQ8DBAEFAyQBNgNEAXkDSgGLA0oBiwNKAYsDSgGLA0oBiwNKAYsDSgGL
+        A0oBiwNFAX8DKQE/AwMBBAgAAwQBBQMkATYDRAF6Al4BYQHaAVkBdgGDAfwBrwHVAeMB/wHEAfIB/QH/
+        AbcB8AL/AaoB/gL/AZ8B/QH+Af8BiAHaAeUB/wFaAX8BmwH+AUUBUgFlAfQDVgG5AzUBVwMLAQ8EAAEs
+        AXkBqwH8ARUB4gL/AQwB2QL/AQ4B2AL/AQ0B1wL/AQ8B3wL/ARAB5QL/ARAB5QL/ARAB4AL/AQ4B2QL/
+        AQ8B2QL/AQwB2QL/ARMB4wL/AS4BfAGvAfwEAAMdASoBtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8BtQE3
+        AQAB/wG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/
+        AbUBNwEAAf8BtQE3AQAB/wNSAakDNQFYAx0BKgG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/
+        AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8DSwGO
+        AxQBGwMAAQEEAAMdASoBtQE3AQAB/wHzAU8BAAH/AZUBvwHTAf8B7wP/AdQB+wL/AakB5gL/AZIB2QL/
+        AY4B6wL/AY0B8wL/AZ0B/QL/AasD/wFlAcQB1wH/AVsBGgEAAf8DUwGtAzUBWAQAAS4BeQGrAfwBLwHg
+        Av8BIgHVAv8BFgHTAv8BCwHQAv8BAAGeAfYB/wEAAYkB5gH/AQABigHlAf8BAAGaAfMB/wEFAckC/wEG
+        AcwC/wEDAckC/wEJAdQC/wEsAXsBrwH8BAABtQE3AQAC/wFlAQMB/wG1ATcBAAL/AagBTwL/AacBTgL/
+        AaYBTAL/AaQBSQL/AaIBRQL/AaABQQL/AZ0BPAL/AZsBOAL/AZsBOAH/AeUBPgEUAv8BmwE4Af8BtQE3
+        AQAB/wNIAYgBtQE3AQAB/wG1ATcBAAL/AWsBCAL/Aa8BWwL/AaUBSgL/AaQBSAL/AaMBRgL/AaABQgL/
+        AZ8BQAL/AZ0BPAL/AZsBOAH/AbUBNwEAAf8DVAGvAzYBWQMbASYEAAG1ATcBAAL/AWUBAwH/AfsBaQEI
+        Af8BmAHDAdgB/wHZA/8BqwHmAv8BhgHTAv8BZQHKAv8BagHdAv8BZwHiAv8BgQHoAv8BkQH3Av8BXQHC
+        AdsB/wFmATgBEgH/AekBSwEAAf8DSAGIBAABLgF4AawB/AFBAeAC/wE0AdYC/wElAdQC/wEXAdsC/wEA
+        AYAB4wH/AgABaQH/AgABYwH/AQABXwHcAf8BAAHHAv8BAAG+Av8BAAG7Av8BAAHGAv8BKwF6Aa8B/AQA
+        AbUBNwEAAv8BbwERAf8BtQE3AQAC/wGyAWIC/wGxAWEC/wGxAWAC/wGvAVwC/wGrAVYC/wGoAVAC/wGn
+        AU0C/wGkAUgC/wGiAUQB/wHlAUEBGQL/AaIBRAH/AbUBNwEAAf8DSwGQAbUBNwEAAv8BZgEBAf8BtQE3
+        AQAB/wG1ATcBAAL/Aa8BWwL/Aa4BWQL/Aa0BVwL/AaoBUgL/AagBTgL/AaUBSgL/AaMBRgH/AeUBQgEb
+        Af8BtQE3AQAB/wNMAZEDFAEbBAABtQE3AQAC/wFvAREB/wH7AWkBCAH/AYkBvwHbAf8BuQHwAv8BjAHW
+        Av8BVwHEAv8BSAG8Av8BVAHPAv8BUQHTAv8BXAHaAv8BawHnAv8BTAG4Ad0B/wFmATsBFwH/AekBSwEA
+        Af8DSwGQBAABLgF4AawB/AFMAd8C/wFEAdgC/wEzAdMC/wEnAdwC/wEIAa8B8wH/AQABAwFSAf8CAAFH
+        Af8BAAGVAeoB/wEAAbsC/wEAAbAC/wEAAa4C/wEAAbkC/wErAXkBrwH8BAABtQE3AQAC/wGIASMB/wG1
+        ATcBAAL/Ab4BhwL/Ab4BhgL/AbwBgwL/AboBbwL/AbcBagL/AbMBYwL/AbABXQL/Aa0BWAL/AaoBUwH/
+        AeUBRQEgAv8BqQFQAf8BtQE3AQAB/wNLAZABtQE3AQAC/wGSASsC/wFwAQ4B/wG1ATcBAAL/AboBbwL/
+        AbgBagL/AbYBaAL/AbQBZAL/AbABXQL/Aa8BWwL/Aa0BVwH/AeUBRwEkAf8BtQE3AQAB/wNUAa8DNQFY
+        AwMBBAG1ATcBAAL/AYgBIwH/AfsBaQEIAf8BZQG3Ad4B/wGXAd8C/wFaAcUC/wEvAbAC/wEwAa8C/wFH
+        AcQC/wEzAcAC/wFDAcoC/wFTAdcC/wE8AbAB4AH/AWYBPwEdAf8B6QFLAQAB/wNLAZAEAAEwAXgBrAH8
+        AWAB4wL/AVgB3AL/AUcB2QL/ATYB4AL/AQABZwG3Af8CAAEQAf8CAAEMAf8BAAFUAaoB/wEAAb0C/wEA
+        AbMC/wEAAbAC/wECAbsC/wErAXoBrwH8BAABtQE3AQAC/wGVATcB/wG1ATcBAAL/AcgBmgL/AcgBmAL/
+        AcYBlgL/AcQBkAL/AcABiwL/Ab0BhAL/AbkBbgL/AbYBZwL/AbIBYgH/AeUBSQEnAv8BsAFdAf8BtQE3
+        AQAB/wNLAZABtQE3AQAC/wGfAUAC/wGfAUAC/wFnAQIB/wG1ATcBAAL/AcMBjgL/AcABiQL/Ab4BhAL/
+        AboBbwL/AbgBagL/AbUBZgH/AeUBSQEnAv8BsAFdAf8BtQE3AQAB/wNMAZEDEwEaAbUBNwEAAv8BlQE3
+        Af8B/AFqAQgB/wFOAa4B4AH/AWUBzQL/AUgBvAL/AUkBvgL/AVcByAL/AWsB1QL/AVcBywL/AUABwgL/
+        ATsBxgL/ASYBpgHiAf8BbAFGASUB/wHrAUwBAAH/A0sBkAQAATQBeQGtAfwBigHqAv8BgAHiAv8BXwHe
+        Av8BUQHlAv8BEwGZAc8B/wEAAQsBIAH/AQABBgEaAf8BAAGJAcMB/wEXAcUC/wEYAbsC/wEUAbkC/wEb
+        AcMC/wExAXsBsAH8BAABtQE3AQAC/wGhAUwB/wG1ATcBAAL/AdMBrAL/AdMBrQL/AdEBqQL/Ac4BpAL/
+        AcsBngL/AccBlQL/AcQBkAL/AcABigL/Ab0BhAH/AeUBTgEvAv8BugFvAf8BtQE3AQAB/wNLAY8BtQE3
+        AQAC/wGrAVQC/wGrAVQC/wGTAS0B/wG1ATcBAAL/Ac4BoAL/AcwBnAL/AckBlwL/AcUBkgL/AcIBiwL/
+        Ab8BhwH/AeUBUAE0Av8BugFvAf8BtQE3AQAB/wNUAa8DNQFYAbUBNwEAAv8BoQFMAf8B/gFrAQgB/wFJ
+        AaoB4QH/AZQB3gL/AZkB4wL/AZAB4gH+Af8BYAHJAfsB/wFnAdAB+wH/AYsB3QH9Af8BmgHiAv8BjQHd
+        Av8BOwGoAeIB/wGmAWoBQwH/AfEBTgEAAf8DSwGPBAABPwGgAdIB/wGjAfgC/wGZAe4C/wGGAeoC/wFq
+        AegC/wFXAecC/wEwAcYB7gH/ASQBwgHsAf8BMQHdAv8BOgHQAv8BMwHIAv8BMwHJAv8BQwHYAv8BPAGn
+        AdgB/wQAAbUBNwEAAv8BrgFiAf8BtQE3AQAC/wHcAb4C/wHcAb4C/wHaAbkC/wHYAbUC/wHVAa8C/wHR
+        AakC/wHOAaIC/wHKAZoC/wHIAZcB/wHlAVMBOgL/AcMBjgH/AbUBNwEAAf8DRAF8AbUBNwEAAv8BuAFq
+        Av8BuAFqAv8BuAFqAv8BiAEbAf8BtQE3AQAC/wHVAa0C/wHSAagC/wHQAaMC/wHNAZ4C/wHKAZkB/wHl
+        AVYBPQL/AcUBkgL/AcUBkgH/AbUBNwEAAf8DQgF1AbUBNwEAAv8BrgFiAv8BawEIAf8BbAGjAbwB/wE+
+        AZ0BzgH/AVwBvQHoAf8BlwHaAfgB/wGPAcoB7QH/AZYB0wH0Af8BkQHUAfUB/wFZAboB5wH/ATQBlgHK
+        Af8BPgFZAY0B/wHsAbQBgwH/AfUBUAEAAf8DRAF8BAABWQJcAcwBXAF+AZYB+AFPAW8BfgHzAUwBbwF+
+        AfMBTAFvAX4B8wFNAW8BfgHzAU8BcAF+AfMBTQFwAX4B8wFTAW4BdwHxAVEBgAGMAfcBUgGqAdQB/wFY
+        AYgBtQH+AVcBfQGWAfgBWQJdAdIEAAG1ATcBAAL/AbsBiAH/AbUBNwEALf8BtQE3AQAB/wMlATcBtQE3
+        AQAC/wHEAZAC/wHEAZAC/wHEAZAC/wGqAVIB/wG1ATcBAAL/AfYB7B3/AbUBNwEAAf8DLgFHAbUBNwEA
+        Av8BuwGIAv8BawEIBf8D/gH/Ab4B2AHrAf8BUQGnAdUB/wFTAbAB3AH/AVYBtAHeAf8BQAGYAccB/wGZ
+        AbkB0AH/AfAB8QHyAf8D/AH/A/4B/wH2AVABAAH/AyUBNwQAAxABFQMcASgDGgEkAxkBIwMaASUDGwEm
+        AxsBJgMbASYDEgEYA0gBhQG7AacBqAH/A2UB5QMuAUcDDQERBAABtQE3AQAC/wHJAZ8C/wGyAWcB/wG1
+        ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEA
+        Af8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8DKgFAAwQBBQG1ATcBAAL/AdIBqAL/Ac4BoAL/AdIBqAL/
+        AdIBqAL/AZkBNgH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/
+        AbUBNwEAAf8BtQE3AQAB/wNAAXEDBwEKAbUBNwEAAv8ByQGfAv8BsgFnAv8BawEIAv8BawEIAv8BawEI
+        Af8B/gFrAQgB/wH+AWsBCAH/AfwBagEIAf8B/QFqAQgB/wH+AWsBCAL/AWsBCAL/AWsBCAL/AWsBCAH/
+        AyoBQAMEAQUoAANIAYQB0wHAAb0B/wNhAdoDFQEdCAABtQE3AQAC/wHVAbUC/wHVAbUC/wHVAbQC/wHW
+        AbUC/wHVAbMC/wHVAbMV/wG1ATcBAAH/AyoBQAMEAQUEAAG1ATcBAAL/Ad4BvgL/Ad4BvgL/Ad0BuwL/
+        Ad4BvgL/Ad0BuwL/Ad0BuxH/AbUBNwEAAf8DKwFCAwcBCgMAAQEEAAG1ATcBAAL/AdUBtQL/AdUBtQL/
+        AdUBtAL/AdYBtQL/AdUBswL/AdUBsxX/AbUBNwEAAf8DKgFAAwQBBRAAA0ABbgNYAbwDTgGYAxMBGggA
+        AwgBCwNaAcUB3wHPAdAB/wNYAbwMAAG1ATcBAAL/AeABxwL/AeABxwL/AeABxwL/AeABxwL/AeABxwX/
+        AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wMdASoDBAEFAwIBAwQAAbUBNwEA
+        Av8B5gHNAv8B5gHNAv8B5gHNAv8B5gHNAv8B5gHNBf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8BtQE3
+        AQAB/wMdASoDBAEFDAABtQE3AQAC/wHgAccC/wHgAccC/wHgAccC/wHgAccC/wHgAccF/wG1ATcBAAH/
+        AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8DHQEqAwQBBQMCAQMQAAM2AVgBjQKFAfsBuAKk
+        Af8DVgG2AyABLwMdASoDUgGnAc4BvgG/Af8BkgKDAfwDNwFaDAABtQE3AQAV/wG1ATcBAAH/AysBQgMH
+        AQoDAwEEAwMBBAMCAQMDAAEBDAABtQE3AQAV/wG1ATcBAAH/AysBQgMHAQoDAwEEAwIBAwMAAQEQAAG1
+        ATcBABX/AbUBNwEAAf8DKwFCAwcBCgMDAQQDAwEEAwIBAwMAAQEcAANGAX8BsgKlAf8BxwK2Af8BhwJ/
+        Af4BpAKWAf0B1ALEAf8BwwK5Af8DTAGPEAADAQECAbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEA
+        Af8BtQE3AQAB/wMdASoDBAEFAwIBAxwAAwEBAgG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/
+        AbUBNwEAAf8DHQEqAwQBBSAAAwEBAgG1ATcBAAH/AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEA
+        Af8DHQEqAwQBBQMCAQMvAAEBAzcBWgNbAcsBcAJuAfEBcgJvAfIDXgHQAzsBZQMBAQIQAAMKAQ4DHwEs
+        AyUBNwMtAUYDOQFfA0IBdANIAYgDTgGXA1IBpgNWAbMDVwG9A0EBcxQAAx0BKQJaAVwBzQJBAY4B+QM9
+        AWkYAAM3AVsCQgGAAfUCXgFhAdoDJQE3EAADCAELAzcBWgFcAlkByQFwAUoBQQH0AYkBSAEnAfoBhwFF
+        AScB+gFvAUIBQAH1AV0CWgHTAT8CPgFsAw0BEigAAwoBDgM2AVkDVQGxA1QBrgM0AVUDDAEQDAACWQFd
+        AdIBNwFiAXEB9gE9AWsBfwH4ASIBbQGSAfsBJAF/AakB/gEbAZ0B0wH/ASABpgHeAf8BIwGxAecB/wEk
+        AboB7QH/ASIBxgH1Af8BHwGsAfQB/wEjATIBeQH8A1QBrwMRARcIAAMeASsCWQFcAcwCHwHxAf8CCwH7
+        Af8CJQGXAfsDPgFrEAADNwFbAj8BfQH2AkAB9wH/AlIB9QH/AlkBXQHXAyYBOAgAAxkBIwNWAbMBvQE+
+        AREB/wHQAVMBEQH/AcsBRAEAAf8BwQE2AQAB/wG+ATsBAAH/AcIBQgEAAf8BwQE+AQAB/wGyASkBAAH/
+        A1sByAMgAS8cAAMdASoDSAGIA1gB3QF9ATUBRwH8AeQBagGPAf8BzAFvAYIB/wFsAk0B+gNTAaoMAAFB
+        AY0BrQH5AaED/wGlA/8BngP/AZkD/wGMA/8BbAP/AVoD/wFHAfwC/wExAfkC/wEnAd8B/QH/ARgBqwL/
+        AQABRAHOAf8DWgHYAyoBQQQAAlwBYAHUAicB8wH/AgAB+gH/AgAB7AH/AgEB8QH/AiEBmQH7Az4BawgA
+        AzYBWQI7AX0B9gIrAe8B/wIsAewB/wI9AfYB/wJiAfcB/wJXAV4B3wQAAxgBIgFgAlsB1gHXAV0BIAH/
+        AdgBVgELAf8BwAE4AQAB/wHIAVQBGgH/AdgBkAFVAf8BugFCAQkB/wGnASkBAAH/AaoBMAEAAf8BuAE7
+        AQAB/wHCATwBAAH/AWUBXgFdAeUDIwEzDAADBgEIAzsBZANXAcIBXwJMAfMBuAFCAVkB/wHkAWUBjwH/
+        Ae0BjwGpAf8B9wGJAaEC/wGgAaYB/wH3AaQBqAH/A1oB3gwAAVQBZwFyAe4BxAP/AcQD/wGzA/8BqQP/
+        AZwD/wGKAfsC/wFoAfYC/wFWAfEC/wFEAfAC/wExAdsB9wH/ARYBrgH7Af8BAAGpAv8BAAFtAecB/wNa
+        AdMDCQEMAlUBcgHyAiEC/wIAAfgB/wIAAesB/wIAAecB/wIAAesB/wI6AZEB+AI5AToBYAMyAVECQgF7
+        AfQCGgHpAf8CIAHmAf8CLQHqAf8CNwH0Af8CaAL/AlEBigH3AwcBCgFVAlMBrQHcAWQBJgH/AdoBVgEH
+        Af8BxAE3AQAB/wHEATgBAAH/AesBywGzAf8B+AH/Af4B/wHjAa0BjAH/Aa4BJAEAAf8BrAEuAQAB/wGl
+        ASoBAAH/Aa8BMwEAAf8BwQE7AQAB/wFcAloBzQMPARQEAAMJAQwDWQHHAYEBRgFWAf4BzQFTAWcB/wHk
+        AYMBmAH/AecBpwG1Af8B4AHHAcsB/wHaAckBzAH/AeoBhQGaAv8BkwGaAf8B9wGcAaAB/wNbAdkMAAFc
+        AWQBaQHnAcID/wHHA/8BtwP/Aa4D/wGkA/8BmQH+Av8BiAH7Av8BZgH2Av8BVAHxAv8BQgHtAv8BLwHk
+        Av8BHAHsAv8BHAHcAv8CWQFkAewDFgEfAzEBTgJVAXUB8gIWAfoB/wIAAfEB/wIAAeUB/wIAAd8B/wIA
+        AeMB/wIZAbIB/QIhAZQB+wIHAeMB/wISAd8B/wIfAeQB/wItAe4B/wJRAfkB/wJSAXwB9AM4AV4DLQFF
+        AcQBTgEdAf8B6AFmARcB/wHPAUABAAH/AcsBQAEAAf8BxgE5AQAB/wHfAZ8BaQH/Ae8B3wHQAf8B1QGF
+        AUcB/wG0ASwBAAH/AbEBMgEAAf8BrAEvAQAB/wGlASoBAAH/AbcBOgEAAf8BsgEpAQAB/wE+Aj0BagQA
+        Ax0BKgGBAVEBUgH3AeYBlQGkAf8B5QG/AcUB/wHlAdoB2wH/AeQB4wHhAf8B5QHkAeEB/wHhAdIB1QH/
+        AesBhQGZAv8BlQGbAf8B9QGXAZwB/wNbAdkMAAFaAmAB3gHIA/8B0gP/AcED/wG4A/8BrgP/AaUD/wGZ
+        A/8BiAH7Av8BZgH2Av8BVAHxAv8BQwHuAv8BMAHvAv8BIwHiAv8BSwFMAWwB8wMhATEEAAMvAUoCUwFy
+        AfECDwH1Af8CAAHqAf8CAAHfAf8CAAHXAf8CAAHbAf8CAAHcAf8CBAHXAf8CEwHeAf8CIAHnAf8CPwH0
+        Af8CSAF9AfYDNgFZBAADVAGvAeYBbgErAf8B4gFRAQAB/wHVAUUBAAH/AdIBRgEAAf8ByAE1AQAB/wHO
+        AVcBGgH/AeUBsAGJAf8BvgEzAQAB/wG5ATUBAAH/AbUBNQEAAf8BsgEyAQAB/wGsAS4BAAH/AaoBLwEA
+        Af8BwAE9AQAB/wFdAlkB0gQAAxoBJQFsAUcBWQH1Ae0B0wHXAf8B9AH6AfcB/wH1AfQB8wH/AfgC9QH/
+        AvoB+QH/AfMB5gHqAf8B6wGEAZgB/wH+AZQBmgH/AfYBlgGbAf8DWwHZDAABWQJdAdIBzAP/AdoD/wHJ
+        A/8BwQP/AbgD/wGvA/8BpAP/AZkD/wGIAfsC/wFmAfYC/wFVAfEC/wFCAfAC/wEzAe4C/wE8AVwBfgH4
+        Ay4BSAgAAzABTAJPAXUB8gIJAfAB/wIAAeAB/wIAAdUB/wIAAcwB/wIAAcwB/wIAAdQB/wIRAd8B/wIu
+        Ae4B/wJHAX0B9gM3AVsIAAFkAlcB6AHzAYMBJwH/AeABSQEAAf8B2QFIAQAB/wHVAUIBAAH/Ac8BOAEA
+        Af8B2QGFAUgB/wH0Ae8B6QH/AckBUQEVAf8BvgEyAQAB/wG7ATcBAAH/AbQBNAEAAf8BsQEyAQAB/wGq
+        AS0BAAH/AcABQAEAAf8BcQE/ATUB9gQAAxoBJQFsAUcBWQL1AdwB4BH/AfkB6wHwAf8B6QGCAZYB/wH+
+        AZMBmQH/AfYBlQGZAf8DWwHZDAABWQJbAcQBzgH8Af4B/wHhA/8B0QP/AcoD/wHBA/8BtwP/Aa4D/wGk
+        A/8BmAP/AYgB+wL/AWcB9QL/AVUB8wL/AUIB9wL/ASsBaQGOAfwDOgFhDAADKgFAAj8BhwH3AgAB5wH/
+        AhsB6AH/AjMB6gH/AjMB6gH/AigB5wH/AhoB5wH/AikBlQH6AjABMQFNDAABeQFSAUYB9AH4AYQBIgH/
+        AeIBRwEAAf8B3wFKAQAB/wHhAWYBJAH/AeEBbwE0Af8B3wGZAWAB/wH3AfgB9gH/AfQB7gHoAf8B3wGm
+        AYMB/wHLAUkBCwH/AcQBPwEAAf8BtgE2AQAB/wGtAS8BAAH/Ab8BPwEAAf8BiQFEASYB+gQAAxoBJQFs
+        AUcBWQH1AfcB3gHiEf8B+QHsAfAB/wHnAYIBlQH/Af0BkwGZAf8B9gGVAZkB/wNbAdkMAANWAbYB0QH4
+        Av8B8gP/AdoD/wHRA/8BygP/AcAD/wG4A/8BrgP/AaQD/wGYAf4C/wGIAfsC/wFnAfcC/wFUAf4C/wEn
+        AX8BqgH+A0YBgAwAAzIBUAIvAYsB+QIzAfQB/wKFAv8CjwL/Ao4C/wKHAf4B/wJIAfUB/wIrAaMB/AM4
+        AV0MAAF5AVIBRgH0AfsBggEeAf8B6AFQAQAB/wHuAZcBUQH/Ae8BqQFvAf8B6wGbAV0B/wHeAY0BTgH/
+        AeIBsAGTAf8B8AHjAdwB/wH8A/8B3gGmAYUB/wHPAUoBDQH/AcoBRgEKAf8BtQEzAQAB/wHBAUIBAAH/
+        AYkBRwEnAfoEAAMaASUBawFFAUwB9QH2Ad4B4RH/AfcB4gHoAf8B6wGBAZMC/wGYAZ4B/wH3AZUBmQH/
+        A1oB2AwAAVICVAGmAdkB+AH7Af8B9gH6AfIB/wHtAf8B/QH/Ad4D/wHQA/8BygP/AcED/wG3A/8BrQP/
+        AaQD/wGYAf4C/wGIAfsC/wFnA/8BIQGoAdoB/wNOAZgIAAM3AVsCPgGHAfcCPAH6Af8CkwL/AqAC/wKW
+        Af0B/wKVAf0B/wKfAv8ClgH+Af8CWwH7Af8CLQGXAfsDPgFrCAABZAJYAeYB/AGSATUB/wH4AaYBXwH/
+        AfYBuwGXAf8B8gGtAYEB/wHqAZsBXAH/AeMBiQFHAf8B4AFuATYB/wHWAXABPwH/AfUB7QHnAf8B8gHk
+        AdoB/wHPAVoBJAH/AdMBUQEWAf8BxwFEAQcB/wHNAU0BBwH/AXABSgFBAfQEAAMaASUBawFGAUwB9QH2
+        Ad8B4wX/Af0B+gH7Af8B+AHgAeMB/wHvAa4BtgH/AeABbAGPAf8B4AFiAYQB/wH9AZIBlgH/AfcBkwGY
+        Af8DWgHVDAACTwFRAZwBNgFLAdsB/wEhASMBwQH/AVcBYgHBAf8B1wLtAf8B3gP/AdID/wHKA/8BwAP/
+        AbcD/wGuA/8BpAP/AZoD/wGMA/8BMAG/AecB/wNUAasEAAM2AVkCQQF7AfYCTQH8Af8CqgL/ArQC/wKw
+        Af0B/wIuAewB/wInAeoB/wKrAf0B/wKzAv8CrAL/AoEB/QH/AjIBmQH7Az4BawQAAVMCUgGoAe8BqQFm
+        Av8B1QGzAf8B+wHAAZgB/wHxAawBgAH/Ad8BpAGCAf8B3QGpAYwB/wHlAZQBVgH/Ad8BhAFAAf8B7AHR
+        AcIB/wH2AfAB7AH/AdIBaAE0Af8B0gFZAR8B/wHYAVYBGgH/AeMBVgEUAf8BXgJcAc4EAAMaASUBawFH
+        AVkB9QHtAcsBzwH/Ae8BxgHIAf8B4AGLAZIB/wHNAVgBZwH/AaoBRAFgAf8BZgE7AWUB/wE+AS8BXwH/
+        AZMBPgFXAf8B6AFgAWwB/wFnAU4BUQHyAzkBXwMGAQgEAAJYAV8B4wERARAB8wH/AgAB4wH/AgABwgH/
+        AWQBbwHEAf8B7AH9AfsB/wHfA/8B1wP/AdED/wHJA/8BwgP/AbkD/wGuA/8BpQP/AUMB2QHyAf8DWAHA
+        AzcBWgJMAXcB9AJYAf0B/wK7Av8CyAL/AsQC/wI+AfQB/wIfAZIB+wI0AYQB+AI9AfEB/wLBAv8CxgL/
+        Ar8C/wKUAf4B/wJEAZIB+AI9AT4BagMpAT4BygFpATsC/wHZAbQC/wHLAaYB/wHpAaUBawH/AekBzwHB
+        Af8B9gH1AfQB/wHWAYgBTQH/AdsBiAFMAf8B9wHxAe0B/wHnAcoBuQH/AdMBYgErAf8B1wFlAS8B/wHu
+        AWsBKQH/Ac8BQgEOAf8DOwFjBAADGgElAWcCUgH0Ac0BWwFhAf8BrwFHAVcB/wGBAT8BYQH/AT4BPQGB
+        Af8BEQE3AYUB/wEAATUBhgH/AQgBRwGWAf8BMAGGAbYB/wGYAaoBvwH/AccBhwGeAf8BXwEvAUYB+wNA
+        AXAEAAIrAbEB/AEjASQB8gH/AjUB6wH/AgAB3gH/AToBPgHKAf8B9AH/AfQB/wHsA/8B0QP/AbgD/wGZ
+        AfUC/wFrAeoB/AH/AVAB2gH2Af8BQAGzAcUB/QEyAZIBswH7ATsBaAGJAfYDSgGLAkgBcwH2Al8C/wLU
+        Av8C3wL/AtMC/wJOAfcB/wJAAXcB9AMzAVMDLQFFAkoBdQHyAlMB9AH/AtIC/wLZAv8C1gL/AqoC/wJD
+        AZUB+wMGAQgBUgJQAaMB6AGoAWsC/wHcAbgB/wH1Ab4BlQH/Ad4BqwGOAf8B8AHmAeMB/wHlAcoBuwH/
+        AewB2QHRAf8B6gHaAdIB/wHUAYcBTwH/Ad0BgQE/Af8B7QGKAUEB/wHsAWcBJwH/AVsCWQHDAw0BEQQA
+        AxoBJQFZAUQBWQH1AUQBPAFkAf8BFQFAAW4B/wEAAUsBpAH/AQABTgGqAf8BDgFsAbwB/wEzAacB2gH/
+        AVQB0wH1Af8BagHyAv8BgQH7Av8BjwHtAv8CXAF9AfgDLwFKBAACJgGPAfoCCAHuAf8BHwEeAfgB/wEK
+        AQcB6gH/AUABQwGzAf0BZQF3AYMB9AFZAWYBcAHsAV0BYQFiAeIBWQJcAcwDVgGzA1ABnQNFAX0DOQFf
+        AzABSwMgAS4EAAJZAVwByQJMAe0B/wLJAv8C7QL/AloB+wH/AjYBeQH2AzYBWQgAAy8BSgJRAXIB8QJl
+        AfgB/wLrAv8C3gL/AosB8wH/AloBXgHVBAADFgEeAVsCWAHLAekBqAFsAv8B3gG4Af8B9gHBAZoB/wHg
+        AaUBgwH/AeYBuwGkAf8B4gGvAZQB/wHaAY4BVQH/AewBmQFYAf8B+QGgAVkB/wHsAYEBNwH/AWACWgHe
+        Ax8BLQgAA0UBfQFWAZYB0AH+ASIBmgHXAf8BAQFmAcEB/wERAZwB4AH/ATIBvgHuAf8BUQHgAf4B/wFk
+        AfAC/wFpAekC/wFsAakB0gH+AVgBZAFwAe8BVgJYAbkDLwFKCAACTwFQAZsCHgGMAfwBJwElAbkB/gJc
+        AWEB3AEwAjEBTQMYASEDEQEXAwkBDCAAAxYBHwJZAVsBwwJLAesB/wJZAv8COwF3AfYDNwFbEAADMAFM
+        AlMBcgHxAocB/QH/AoQB8gH/AlkBXAHMAx4BKwgAAxYBHgFVAlMBrQHOAW4BPwH/AfQBvAGRAv8ByAGb
+        Af8B/QG9AY4B/wH9AbUBhQL/AbMBgAH/AfQBnQFZAf8B0AFaASkB/wFYAlYBvAMcASgMAAFZAWABbQHr
+        AZYD/wGDAfoC/wEwAWQBoAH6AT4BdAGZAfgBVgHpAv8BTgHFAfYB/wFGAWwBhAH1AlkBWwHEA0ABcQMR
+        ARdUAAMWAR8CWQFbAcMCRQFzAfQCNQE2AVgYAAMwAUsCTgFyAfICWQFcAc8DHQEpEAADBwEJAy8BSgNW
+        AbYBaAFYAVIB7wGYAVEBSgH6AZYBTgFHAfoBcgJTAfEBWwJZAcQDNgFZAwoBDhAAA0MBdwFZAlwBzwFS
+        AYEBnwH3AkgBSQGHAzsBZAFZAl0B1wNLAY4DIQEwUAADOAFeAVgBWQFrAesCVQFXAboDOgFhA1kBxwNZ
+        AcwDWgHKA1oBygNaAcoDWgHKA1oBygNaAcoDWgHKA1oBygNaAcoDWgHKA1wBzgNZAcMDNAFVDAADHAEo
+        A1QBqwMzAVI0AAMRARcDOAFdA04BmQNWAbMDVgG8A1YBuwNVAbIDTgGUAzQBVAMMARA8AAM0AVQBTAFY
+        AW4B7wErAdEC/wFTAWsBewHxA2EB7gPiAf8D3QH/A9oB/wPaAf8D2AH/AtsB2gH/At8B2gH/At0B2gH/
+        AtgB1wH/A9UB/wPUAf8D0wH/A+AB/wOZAf8DVwG9CAADGAEhA1sB4QENAYABMgH/AVIBVwFUAe0DKwFD
+        KAADAQECA0MBdwFlAl4B5QGoAWEBRgH9AdEBZAEaAf8B4AFrARsB/wHoAW8BHQH/AegBbQEeAf8B2wFn
+        AR4B/wG6AVIBFAH/AW8BSQElAfoDWwHZAzgBXRQAAyMBMwNHAYIDIAEuAwEBAgMGAQgDDAEQAwMBBAQA
+        AzIBUQFMAVgBcAHvASkBzQL/AUEBhgGeAfkCPAE9AWgDhAH3BP8D9AH/A/MB/wLxAfMB/wL4AfMB/wLx
+        AegB/wLeAd8B/wPeAf8C6QHhAf8C8QHoAf8C7gHqAf8C5gHnAf8D9QH/A8YB/wNZAcMEAAMSARkDWwHh
+        ASEBSwEAAf8BIQGAAVEB/wEAAaYBqAH/AVIBVgFUAe0DLQFGJAABUAJPAZsBrwF/AVIC/gHjAcIC/wHS
+        AaUB/wHoAWQBAAH/AecBbgEbAf8B8AGGASgB/wH2AZIBPwH/AfUBmgFOAf8B8AGYAU8B/wHyAZUBQgH/
+        AdMBXAEMAf8BUgE/ATcB9wM7AWQMAAMEAQYDVwG6AegBuAG6Af8DYQHkA1QBrgNcAckDYAHeA1kBvgM/
+        AW8BWgJcAc0BbAHoAv8BPgF/AZwB+AM9AWkEAANzAfYD+wH/A+oB/wLqAesB/wLxAewB/wLUAdwB/wJE
+        AdQB/wIiAecB/wJAAeQB/wJlAdcB/wKkAc0B/wPQAf8C5QHfAf8D7QH/A70B/wNWAcEDFAEbA1sB2QEj
+        AVABAwH/ATgBTQEMAf8BKgE4AQAB/wETAWsBVAH/AQABngGnAf8BUQJUAe4DLQFGIAABngF2AU0B+gH4
+        AcgBkQH/AfYB2gG5Af8B7wHDAZgB/wHVAWUBEwH/AdYBkwFOAf8B3gGdAVwB/wHgAZoBWQH/AdIBjAFM
+        Af8B4AGTAU8B/wHtAaABWwH/AfUBjwEvAf8BzgFQAQAB/wNWAbsMAAMzAVIBowKNAfsB9gL6Af8BwAG5
+        AboB/wHIAb0BswH/AeoB4QHRAf8B8AHnAdYB/wHaAdIBwwH/AZUBkAGHAf8BoQGeAZAB/wNfAdsDOwFj
+        CAADdQH2A/wB/wLsAe0B/wPuAf8C+AHoAf8CbgHaAf8CAAH5Af8CAAL/AgAC/wISAv8CQQH2Af8CbwHY
+        Af8CxAHOAf8C9QHvAf8DwAH/A1YBwQNYAd0BEAE+AQAB/wE5AUQBCgH/ATwBSwEQAf8BOgFOASgB/wFV
+        AWEBKAH/ASABhQFaAf8BAAGbAawB/wFSAVYBVAHtAy0BRhwAAcUBkQF/Af4B8wHOAaoB/wH0AdsBvgH/
+        AewBxAGfAf8BzgFwAS0B/wHaAaEBYAH/AdwBqQGBAf8B3AGmAXAB/wHZAZcBVQH/Ad0BjQFCAf8B3wGT
+        AUkB/wHfAY0BNwH/AdEBWQEAAf8DWAHACAADAQECA1UBsAH1Ad4B4AH/AcQBxQHGAf8BzQHHAboC/wH2
+        AdwC/wHzAdsC/wHyAdsC/wH4AeEB/wH5Ae0B1gH/AZkBlAGBAf8DRAF6DAADdQH2A/0B/wLtAe4B/wL1
+        AfEB/wLrAeIB/wI/AeEB/wIAAf4B/wIAAv8CAAL/AgAC/wICAv8CNQH9Af8CcAHWAf8D5AH/AscBxAH/
+        A1YBwQNaAdsBIwFAAQAB/wE0ATkBAAH/AToBQAEjAf8CRQFOAf8BVwJlAf8BUQFiASQB/wETAW0BVQH/
+        AQABlAGqAf8BTAFSAU8B7wMuAUgYAAG/AYgBdQH+Af0B6wHZAf8B/QHuAd4B/wHyAdABrQH/AdsBlgFF
+        Af8B2wGmAWUB/wHWAaUBawH/AeIBrwGFAf8B4gGlAWAB/wHcAZABQAH/Ad4BlQFEAf8B2wGLASoB/wHN
+        AVUBAAH/A1YBvggAAzABTAGEAm8B9QHvAeIB5QH/AcIBugG1Af8B+QHnAcoC/wHoAckC/wHhAb8C/wHg
+        Ab8C/wHkAcUC/wH0AdcB/wHQAccBrgH/A1oB2AE2AjUBWAMQARUEAAN1AfYC/gH9Af8C8gHwAf8C+AHy
+        Af8C6AHjAf8CPgHkAf8CAAL/AgAC/wIAAv8CAAL/AgAC/wIAAv8CMAHpAf8CywHfAf8CzgHEAf8DVgHB
+        AxABFgNbAdYBLAFNAQkB/wFlAWEBUQH/AU8BTAFPAf8CSQFOAf8BVAFiAWMB/wFKAWEBHwH/ASIBhgFg
+        Af8BAAGMAZ8B/wFRAVQBUwHuAysBQxQAAbsBpwFZAf0B/wHtAdgB/wH8AesB2wH/Af4B5AHJAf8B7wG7
+        AYgB/wHsAbYBgAH/AdQBowFjAf8B1gGsAYMB/wHnAbQBgQH/AfEBqgFVAf8B5gGgAUsB/wHbAY0BLQH/
+        Ac0BVgEAAf8DVgG+BAADBwEKA1UBrQH5AdYB0wH/AecB1QHWAf8B1AHGAbsC/wHfAbYC/wHTAaQC/wHQ
+        AZ4C/wHOAZ0C/wHPAaEC/wHhAbgB/wHkAdABsQH/AZMBhAFwAf8BzAGRAYkB/wFbAlgBywMpAT4DdQH2
+        A/0B/wLtAe8B/wL3AfMB/wLxAeoB/wJjAeUB/wIAAf0B/wIAAv8CAAL/AgAB+wH/AgAB+AH/AgAB9QH/
+        AkMB3wH/A+oB/wLKAcYB/wNWAcEEAAMPARQDWgHVATQBWgEVAf8BZwFoAVIB/wFfAVsBXwH/AVwBWgFk
+        Af8BVwFiAV0B/wEzAVsBAAH/ARYBgAEmAf8BAAGbAWYB/wFSAVcBVQHtAy4BSBAAAbsBpwFYAf0B/wHr
+        AdYB/wH9AewB2gH/Af0B5wHQAf8B4QG7AZMB/wHnAbwBjwH/Ad4BsQGDAf8B0gGyAZIB/wHYAa0BgAH/
+        AeQBmwFEAf8B4AGXAUEB/wHfAYYBHAH/Ac8BVwEAAf8DVgG+BAADLgFHAY4BgQGAAfcB/wHqAd4B/wHn
+        Ac8BzAH/AdIBvwG2Av8BzwGeAf8B/gHLAZgB/wH+Ac0BoAL/AdEBowL/Ac4BnAL/AdUBnwH/Ad0BtwGO
+        Af8BjwGNAYoB/wH6A/8B6gGoAaQB/wFAAj8BbwN3AfYC5wH8Af8CmwHdAf8C2AHpA/8B8QH/Ap0B5gH/
+        Ai8B/AH/AhMC/wIMAfIB/wJrAeEB/wKhAd8B/wKsAd4B/wLfAeEB/wL5AfQB/wPGAf8DVgHBCAADCgEO
+        A1sB1gEwAV0BDgH/AWwBbQFWAf8BaQFmAWgB/wEzAVYBFwH/ATUBYgEVAf8BVAGHASQB/wEkAaQBYQH/
+        AQABpwGrAf8BUgFXAVQB7QMtAUUMAAG7AagBWAH9Af8B6wHUAf8B/AHrAdsC/wHrAdMB/wHyAdYBtAH/
+        AeIBwgGfAf8B5wHCAZsB/wHYAbMBiwH/Ad0BqgFmAf8B4wGcAUUB/wHhAZoBRAH/AeABbgELAf8B0QFV
+        AQAB/wNWAb4EAANXAboB3AGwAagB/wHbAbIBqAH/AcsBoQGeAf8BtwGoAacB/wHzAcQBowL/AdIBqgH/
+        AfwB2AG8Av8B3gHBAv8B5AG/Av8B1wGkAf8BtAGPAWIB/wGgAaMBpQL/AfEB8AH/AWACXAHUAxgBIgN3
+        AfYC+QL/AsQB6AH/Ar4B2gH/AtgB6gH/AocB8AH/Ak4C/wIlAfsB/wKCAeIB/wL+AecB/wL9AesB/wL3
+        AeoB/wLrAegB/wP0Af8DyAH/A1YBwQwAAw8BFANZAdcBNAFjARIB/wE+AWEBGAH/ATMBXgEYAf8BWwJd
+        Af8BYQGAAYEB/wFPAYkBIwH/ARABmAFQAf8BAAGeAakB/wFSAVYBVQHtAysBQwgAAbQBfgFmAfwB/wHq
+        AdAB/wH9AesB2AL/AeYBywH/Af4B1QGpAf8B8QHDAZsB/wHpAbUBiQH/AeIBnAFOAf8B9AGmAU8B/wH4
+        AakBTgH/AecBnwFGAf8B3wFwAQ4B/wHQAVYBAAH/A1YBvgQAA2EB5AHHAZ4BmwH/AeQByAHHAf8B8wLm
+        Af8B1AHVAdcB/wHEAbQBrAH/AfIByQGtAv8B3wHIAv8B3gHLAf8B+wHaAbwB/wHMAaYBiwH/AY4BgwGB
+        Af8B5AHjAeUB/wG+AqgB/QNAAXAEAAN3AfYG/wH5Af8C2wHlAf8CjQHSAf8ChgH2Af8CWgL/AikB9gH/
+        AqsB5wH/AvwB7QH/AuwB7QH/AuoB6wH/A+gB/wP2Af8DyQH/A1YBwRAAAwoBDgNaAdgBHgFlAQAB/wFr
+        AYgBVAH/AWsBYgFsAf8BUAFOAVUB/wFSAWQBYQH/AUYBiAEeAf8BFAGZAVcB/wEAAZUBqwH/AVIBVwFV
+        Ae0DNAFVBAABtAGAAWkB/AH/AeoBzwH/AfkBzgGnAf8B+AHKAaQB/wHrAbwBmAH/AeUBuwGeAf8B6wHE
+        AaoB/wHuAcEBoQH/AeoBsgGLAf8B7wGoAWcB/wHvAZIBPQH/Ae0BgAEKAf8B0QFZAQAB/wNWAb4EAAMt
+        AUYDUwGqAZIBfQF3AfkB7wHDAcAC/wHpAecB/wHVAdQB1QH/Ab8BtAGvAf8BzgGyAaUB/wHQAa0BoAH/
+        AbYBlgGLAf8BnQGRAZAB/wHVAckBywL/Ae0B6wH/AV0BWgFZAdIDEgEYBAADdwH2BP8D+AP/AfsB/wLG
+        AeIB/wKKAdsB/wKOAfYB/wKSAfAB/wLiAe4B/wL0Ae8B/wPtAf8D6wH/A+oB/wP3Af8DywH/A1YBwRQA
+        AwoBDgNbAdYBNwGIARkB/wFsAYcBVgH/AVUBUQFUAf8BQwFAAUsB/wFLAlcB/wEyAYUBAgH/ARgBoAFD
+        Af8BCgGVATEB/wNTAaoEAAG1AYIBaAH8Af8BwQGJAf8BzwGJAUEB/wPfAf8BzwHVAdsB/wHBAcYByQH/
+        AeAB5AHoAf8B1QHcAeIB/wHBAcwB1QH/AdEB2wHgAf8B2AHAAbIB/wHZAWQBIwH/AeIBYgEHAf8DVwG/
+        CAADBwEJAyYBOQNQAZ4BawJiAe8B6wG3AbQB/wHrAdYB1QH/AdsB1wHWAf8B0gLXAf8BygGwAbMB/wHn
+        Ab8BugL/AfIB6wH/AeoBsAGrAf8DRAF6CAADdwH2BP8D+QH/AvkB+AH/Av0B+gH/AssB4AH/AscB3AH/
+        AvsB8gH/AvYB8wH/Au8B8AH/A+8B/wPtAf8D6wH/A/kB/wPNAf8DVgHBGAADEQEXAVkBXQFZAdcBNAGM
+        ARUB/wFhAW0BSgH/AUgBPwFKAf8BRAFaATcB/wFNAaUBJgH/ASEBnwEAAf8DWwHhAx0BKgQAAbcBfAFJ
+        AfwB7AGUATcB/wGtAWEBLgH/AcUBuwG0Af8BzwHLAcgB/wHeAeYB6gH/AdwB4wHoAf8BuwHAAcQB/wGe
+        AYIBZAH/AagBgAFfAf8BogFvAWMB/wGbATcBEwH/AekBZwEcAf8DVgG+FAADIwE0A0wBkwNfAdsB5gGw
+        Aa0B/wH6AeYB5AL/Ae0B7gH/AfwBwwG9Av8B3QHPAf8CXgFaAd0DEwEaCAADeQH2BP8D+wH/A/kB/wL6
+        AfkB/wL8AfsB/wKsAc8B/wK6AdQB/wL5AfYB/wPxAf8D7wH/A+0B/wPrAf8D9wH/A88B/wNXAcIcAAMH
+        AQoDWwHWATEBjQEUAf8BSgGAAScB/wFeAa0BPAH/AT0BsAEmAf8DWwHhAxUBHQgAAV8BXgFYAd0B9QGx
+        AWAB/wHeAYoBMgH/AdIBXwENAf8BvwFfASEB/wHKAbEBoAH/AcgBtQGoAf8BqwFnAUMB/wGfAS0BAAH/
+        AZsBHQEAAf8BlwEdAQAB/wHNAVEBGAH/AbEBbgEtAf4DQQFzHAADHQEpAUcCRgGAA2EB2gHgAagBpwH/
+        Af0BzgHMAf8B5wGdAZYB/wNAAXAMAAOIAfgU/wL4AfwB/wLzAfoD/wH+Af8D/QH/A/wB/wP6Af8D+QX/
+        A9MB/wNXAcIgAAMPARQBWgFeAVoB1QEjAZwBBQH/ASEBlgESAf8DWwHZAxYBHwwAAyUBNwFiAl8B4AHz
+        AaoBUgH/AfMBnwFDAf8B6QGJASkB/wHVAW0BJgH/AcsBYgEhAf8BywFVAQ4B/wHKAVgBGAH/AdEBXwEg
+        Af8B2wFrASgB/wGSAVwBPgH4A0wBkygAAxoBJAFAAj8BbwNeAdkBXAJZAcwDEwEaDAADWwHLA6UB/gOx
+        Af0DsQH9A7EB/QOxAf0DsQH9A7EB/QOxAf0DsQH9A7EB/QOxAf0DsgH9A60B/gNqAfUDOwFlJAADDQES
+        AVwBYQFcAdwDXAHcAxABFhQAAw0BEgNDAXcCWwFZAcQBZgFkAVwB5wF/AWUBUgH0AZkBdAFCAfgBhQFi
+        AUgB9gFuAWEBVAHuAmABWwHWAVECTwGcAycBOhAAAyMBMwNWAbkDVAGrAxEBFwMQARYDIAEuAwEBAiMA
+        AQEDBAQFAQcDDAEQAx0BKgMrAUMDLwFJAyUBNwMWAR4DEgEZAyABLgMtAUUDMgFQAzIBUQMuAUgDIgEy
+        DAADBgEIA1ABpANZAc8DXAHOAlcBYAHoAUsBWQFsAfIDWwHhA1kBzANbAdADSAGEGAADBAEGAzQBVANW
+        AbMBaQFkAVwB5wFzAWIBWAHvAXMBYgFYAe8BaAFfAVcB6AFXAlYBuAM2AVkDBwEJEAADXQHSAbUCmgH/
+        AW4CWQH/A1ABngNaAdsDXgHlAx8BLCAAAwMBBAMKAQ0DEQEXAUACPwFuAWECXAHcAWECWgHkA1kBwwNC
+        AXUDNQFWA0QBfAFdAlkB1wGOAW0BUQH3AZcBbgFBAfgBZQJeAeUDVAGrA0ABcQwAAxgBIQGGAoEB+gHe
+        Ac4ByAH/Aa0BsQHOAf8BUAHCAfkB/wFfAeAC/wGHAakB4AH/AeQBzgHDAf8ByQLCAf8DVQGyFAADEgEY
+        AVMCUgGoAfYBigFSAf8B8AG/AasB/wHjAcYBwAH/AdUBwAG+Af8B0wG/Ab0B/wHkAcYBwAH/Ae8BwAGt
+        Af8B9gGPAVcB/wNVAbIDGAEhDAADWQHHAcgBswGyAf8BoAGHAYYB/QFfAVYBVAH7AWgCZQH/AV8CWQH+
+        A1cB3wNZAckDWgHNA1oBzQNaAc0DWwHQA1kByQNFAX0DBgEIAyIBMQMwAUwDMQFNAlwBWgHNAf4BxgGm
+        Af8B7AHQAcUB/wHOAX8BSwH+A1IBqQNKAYwBbAFhAVQB7gH2AcIBpQH/AdcCxgH/AdUBxQHGAf8B7wHI
+        AbQB/wGiAW8BTQH6A04BmQgAAwQBBgMQARYDPgFrA0QBeQNCAXQBXwFvAXsB8wFtAaUBygH/A1cBxQM/
+        AW0DRQF9AyEBMAMJAQwDBgEICAADEgEYAVsCWQHDAfMBqQGFAf8BzQG2Aa4B/wHGAbwBvwH/AfIB6gHt
+        Af8BywHGAcgB/wHGAcIBwwH/AfQB7AHuAf8BxwG+AcIB/wHIAbIBrgH/AfQBsAGNAf8BWwJYAcsDFQEd
+        CAADDwEUA0gBhANWAbsBegF8AX8B/gFuAZMBoAH/AW8BowGvAf8BqAGfAa0B/wHBAY4BmgH/Ac4BbAGD
+        Af8B1gFiAWgB/wHhAW4BcAH/AeABawFvAf8B4AFrAYEB/wFXAkAB/QNEAXoDGgElAycBOwMnATsDSAGE
+        AekBmwFcAf8ByAHFAdAB/wHqAbsBpAH/AV4CXAHOAVYCVQGxAfEBrwGJAf8BxgHBAcoB/wHcAbwBrgH/
+        AeEBuwGpAf8BxAG8AcQB/wHrAb8BqgH/AVwCWAHRBAABSQJIAYgDXAHnAVsCWAHpAVwCVwHfAWECXAHc
+        A1sB2QGPAYkBiAH7AbgBogGeAf8DXQHtA1sB2QFeAlgB3QNaAeQDYAHrA1sB4QM6AWIDCAELAVQCUgGm
+        AfYBpQFlAf8B1gG9AcMB/wG0AbAB1gH/AtwB2QL/Af4B/AH/AfcC9QH/AvUB9AL/Af0B/AH/A90B/wHa
+        AdMB1wH/AeAByAHFAf8B8wGlAWwB/wNVAbIDCgENBAADUgGoAWACZAHsAYYBkAGTAfsBtAHiAesB/wG0
+        AfMC/wGrAf4C/wGUAfcB+gH/AZEB2wHkAf8BjgGzAcAB/wGGAYEBkwH/AWQBNAE3AfwBYgJXAe8B0AJS
+        Af8B3gFvAXAB/wNWAbMHAAEBAwcBCQMPARQBXAJaAc0B4gHDAbYB/wHSAcoB0QH/AaIBcAFNAfoBagFU
+        AVEB7gHhAcIBtQH/Ac8BxgHMAf8BxAF/AUwB/gG7AVQBPAH9AdcBxgHFAf8B2gHFAcIB/wF7AWcBTwHy
+        BAABjAKIAvkC+AH/AeEC3wH/AdwC2gH/AdkC1wH/AcoCxwH/Ad8C3gH/Ae0C6wH/AfcC9AH/AfUC8gH/
+        AfYB8wH0Af8B7gHwAewB/wHMAewB0AH/AdEBzwHLAf8DVgG7AzABSwG9AVMBQAH9Ac0BoQGKAf8B2AHU
+        AdUB/wLWAfsB/wLQAfoD/wH9Cf8B/gL9Av8C/gH/Af4C/AH/AdkB1gHaAf8BygGhAY4B/wHnAWgBNwH/
+        ATYCNQFYBAABdAGMAZsC+gP/AdoD/wGvAfMC/wGMAeAC/wGJAeoC/wGHAfYC/wGTAf0C/wGeA/8BkwHz
+        Af4B/wNXAd8DKQE+AZECWgH7Ad8BaQFoAf8DVQGyAwABAQMKAQ0DHAEoAzIBUAFMAksBkAHCAX8BWgH+
+        AdMBzgHWAf8B4AG6AaYB/wHhAV0BFQH/AdsBwQG3Af8B1wHLAc8B/wGBAWIBSAH2AXcBWwFTAfEB4AHI
+        AcMB/wHYAsgB/wGaAWoBQQH5BAABpgKdAfwB7ALvAf8B1QLWAf8D2QH/AdcC2AH/AcsCzAH/AeEC4gH/
+        AewC7QH/AuoB6wH/AeoC7AH/AewC7QH/AegB6gHpAf8B5gHvAegB/wHhAt4B/wNVAboDUgGpAesBkQFM
+        Af8BywG2AbMB/wHaAd0B3gL/Av4B/wHFAcYB/AH/AtIB+hL/Av4B/wHdAd8B4QH/AcoBuAG3Af8B7QGV
+        AVEB/wFYAlYBuQQAAW4BhwGMAfcB3AP/AaIB6wL/AYAB3AL/AVYB0QL/AV4B3QL/AVoB5AL/AWUB6AL/
+        AYUB9QL/AYwB+QL/A1sB4QMgAS4BjwJNAfoB3QFpAWoB/wNVAbEDBgEIAzcBWgFgAlwB1AF8AV8BTAHz
+        AXsBXwFMAfMBuQFhARkB/gHgAbkBpgH/AdQBzwHVAf8B7wGZAVUB/wHgAbsBqgH/AdYBzwHVAf8BxQF/
+        AUsB/gG5AVABNQH9Ad0BzAHKAf8B3gHLAcgB/wF+AV8BTAHzBAABjQKLAfkB7gLwAf8C5gHlAf8D5gH/
+        A+YB/wHoAukB/wHmAuUB/wHsAekB5gH/Ae8B7AHmAf8C6QHmAf8D4wH/AeMC4gH/Au8B8AH/AdkB1AHV
+        Af8DVAGvAWECWwHhAegBlgFVAf8B8wHsAe8B/wH+Af0E/wH+Af8C9wL/ArkB+wH/AtwO/wP+Av8C/gH/
+        AfQB7QHyAf8B5wGYAVsB/wFmAlcB6AQAAV8BcQF8AfMBsAH2Av8BawHaAv8BRAHMAv8BKwHBAv8BTAHT
+        Av8BOQHUAv8BQwHYAv8BVQHjAv8BXgHsAv8DXgHlAykBPgGPAk0B+gHdAmkB/wNVAbEDKgFAAYABWQFC
+        AfUB4wHEAbYB/wHeAdcB3AH/Ad4B1gHbAf8B4AG4AaEB/wHjAZgBWAH/AdYBzwHTAf8B5wG/Aa0B/wHv
+        AbUBlQH/AdMB0AHYAf8B5AHBAbEB/wHoAbwBpgH/AdQB0AHWAf8B6gHDAa8B/wFeAlwBzgQAA2UB5QT/
+        AfwD/wH5Af0B/gH/AfQB+wH9Af8B8wH8Af4B/wHrAekB6wH/AcABxwHaAf8BrAG0Ac8B/wHJAcQBzwH/
+        AuMB4AH/Ad0C3gH/AeYC6AH/AbMCrQH/A0gBhwFsAlQB7gHZAYUBRAH/AcUBwwHJAf8B8gHzAfQJ/wL0
+        Av8BsAGqAcgB/wGxAacBowH/AeYB4gHfAf8B+gL5Bf8B9gH1AfYB/wHHAcgBzgH/AdkBjAFQAf8BbgFY
+        AU4B7wQAAVkBbwF7AfIBiQHrAv8BTQHQAv8BQAHLAv8BRgHOAv8BYAHZAv8BVgHbAv8BQwHWAv8BQAHY
+        Av8BRAHlAv8BWAFZAWAB6wEsAisBQwGPAk0B+gHcAWkBagH/A1UBsQNVAbUB3wGzAZkB/wHaAdcB4AH/
+        AdsBsQGbAf8B3AG2AaEB/wHXAdYB3wH/AeoBtQGYAf8B6QG7AaUB/wHXAdMB2gH/AfMBqgGAAf8B6gG8
+        AaQB/wHeAdcB2wH/Ad4B2AHdAf8B6QHOAcIB/wGlAV8BQAH7AzgBXAQAA1cBugHrAeAB3AH/AeEBxwG+
+        Af8B1wHKAcgB/wHcAcIBugH/AdEBowGZAf8BXgGjAdwB/wE4AbYB7QH/ARwBxwHqAf8BFwGDAcwB/wGs
+        AagBvAH/AdkB0gHNAf8B2gLXAf8BcwJwAfwDLwFKAWsCVAHuAdsBhQFCAf8ByQHIAcwB/wH2AvcF/wHv
+        AuwB/wHNAcIBvgH/AbsBsAGrAf8BkwGKAasB/wG0AagBtgH/AcUBuQG1Af8B0gLLAf8D8QH/Ac4BzwHV
+        Af8B3AGMAU4B/wFrAVgBTwHvBAABVQFhAWUB6gGGAd0B/gH/AYkB4AL/AYUB2wH7Af8BaAHKAfEB/wFR
+        AbgB6wH/AW8B0AHyAf8BhgHbAv8BhQHjAv8BWQHgAv8CWgFfAdsDJAE1AY8BTQFOAfoB3AFpAWoB/wNV
+        AbEBYwJYAekB3gHJAcIB/wHhAdYB1wH/AbMBSwEwAf0BtwFUAUAB/QHgAdoB3QH/AeMBxgG6Af8B9wGe
+        AVoB/wHdAdYB2gH/AeYByAG7Af8BxgFvASsB/gF5AWcBVQHyAXsBZwFXAfIBXAJZAc8DNQFXAwcBCQQA
+        A0gBhgG8AaABnAH/AeMBcAEwAf8B3wGjAWoB/wHrAZ8BZQH/AdMBMgEIAf8BRwGEAbYB/wFXAd0C/wFS
+        A/8BHAHLAfsB/wFfAYABtwH/AeEBywHEAf8B2gHIAckB/wFiAlcB8QMVAR0BXQJXAd8B6QGQAUcB/wH0
+        AesB7gH/AvkB+gH/AdICygH/AboCrAH/AdYBzwHOAf8B+wH5AfgB/wHqAewC/wHsAe0B/QH/Ae8B6wHo
+        Af8B3wLZAf8B+QH4AfkB/wH1Ae4B8gH/AecBkgFOAf8BZQJXAegEAAM1AVcDVQG1AV0BZwFtAe0BhgGl
+        AbMB/wFrAYsBmAH/AWEBgwGUAf8BXAGTAakB/wFOAX8BlAH+AU4BZQFtAfQCWgFdAcoDLwFKAx8BLAGD
+        Ak0B+gHiAWwBbQH/A1UBtAF8AV8BTAHzAeMB0wHPAf8B5wHXAdUB/wF3AV0BTAHzAXsBYgFIAfQB5gLb
+        Af8B4wHRAcsB/wHgAWIBHwH/AeQBtwGfAf8B4AHhAeoB/wHEAX8BbQH+A1MBqgM2AVkDFQEdAwMBBAgA
+        AzQBVAGIAX8BgQH+AewBmQFQAv8BzAGOAv8B3QG3Af8B8wFZAScB/wGOAVkBYwH/AT8BxAH+Af8BRwH4
+        Af0B/wEZAeEB+gH/AS0BbQHXAf8B4AHKAc0B/wHMArgB/wNYAd0DBgEIAVICUAGjAeoBjAFBAf8BzwGv
+        AacB/wG6AbQBuAH/AcwCwgH/AfMC8Rn/AdsB3wHiAf8ByAGvAagB/wHrAY8BQgH/A1UBtQwAAzYBWQF/
+        AX4BdwH+AYIBbwFtAf8BnAGNAYYB/wHFAaYBoQH/AX8BdgF7Af4BYgJZAfUBZAJcAecDWgHYA1kB1wGd
+        AWoBaAH+AeECgQH/A1ABnQFnAWEBWAHmAecB1AHOAf8B5gHeAeAB/wG1AXABNwH+AbcBeQFCAf4B5gHg
+        AeQB/wHpAdMBygH/AWkBVAFTAe4BgQFiAUgB9gHmAeAB4gH/AekB1AHMAf8BZAJcAecDOgFhAyMBMwMI
+        AQsIAAMaASUBbAFqAWwB9QHVAaMBjAH/Af0BtgFbAv8B5QGsAf8B+QGDATQB/wHCAVoBQQH/AVoBrwHK
+        Af8BVgG1AZgB/wFTAbgBkAH/ATwBcAGLAf8BxQG3AbwB/wG4AqEB/wNWAbgEAAMtAUUBnQFfAUUB+wHT
+        AZEBXQH/AdQBygHQCf8B/gL9Cf8D/QL/Av0B/wH+AvwB/wHaAdYB3AH/AdABlQFkAf8B2QFvATsB/wMz
+        AVMMAAM1AVUBdAFzAXIB/gFaAlwB/wFoAmQB/wG7AZ0BlwH/AfcBxQG8Af8B+wHEAb0B/wH5AcIBuwH/
+        AfEBsQGrAf8B6gGfAZkB/wHqAZMBkAH/AWACWQHrAxwBKAFTAlIBqAHnAb8BpwH/AucB7gH/AecByQG6
+        Af8B5wHKAb0B/wHnAegB7wH/AegBvAGgAf8BUQJQAZ8DTgGYAecBvQGlAf8B5wHrAfUB/wHiAakBhwH/
+        AVICUAGkAygBPAMMARAIAAMGAQgDXgHdAbgBogGjAf8BawFTAZ8B/wGWAXABnwH/AZQBYgGbAf8BTwE1
+        Aa8B/wFUAYMBSQH/AUMBwwFUAf8BlgH2AbMB/wFWAckBWQH/AWwBiAFWAf8DfwH+Az8BbQQAAwcBCQNQ
+        AZ4B6wGjAWEB/wHnAbcBowH/AdcBzgHSAf8B1gHYAdoB/wH+AvwB/wH1AvQB/wH0AvMC/wH9Af4B/wHa
+        AdwB3QH/AdYBzwHSAf8B5QG3AaYB/wHsAaYBZAH/A1MBqgMJAQwMAAMfASwDagH5AWsCagH/AVEBUwFU
+        Af8DUgH0A1EBogNWAbQDXAHJA2AB3gFqAWUBZAHtAVsCWQHEAx0BKgQAAx0BKgFnAWEBWAHmAegBzgG8
+        Af8B6ALjAf8B6AHiAeMB/wHoAcoBuAH/AWQBXAFVAeoDJQE3AxgBIgF+AV8BTAHzAekB2AHPAf8B6gHO
+        AbsB/wFdAlkB0gMcAScDBwEKDAADKgFBAk8BTgGXAlcBZgHoAWcBagH5Af8BnQGmAf4B/wEoASkB9gH/
+        ASEBIwEyAfsBOgG9AU4B/wGiAf8BzgH/AYwB/wGwAf8BIQFgARkB/wNTAaoMAAMMARABVwJVAboB7AGw
+        AYAB/wHRAaUBkAH/AcgBsgGxAf8B8gHmAegB/wHKAcIBxAH/AcUBvQG/Af8B8wHoAeoB/wHKArYB/wHN
+        AaMBkQH/Ae4BtAGFAf8BWQJXAcIDEAEVFAADWwHLA9cB/wOTAf8DUAGjEAADBgEIEAADJAE2AVsCWQHE
+        AZABagFHAfkBkgFrAVgB+AFaAlcBxQMpAT4DBgEIAwABAQM9AWkBXAFaAVkBzAFcAlkBzAM7AWMDBwEK
+        AwEBAhQAA0MBdwFmAWgC/wHLAcwC/wFdAVsC/wEQARQBXAH9ASkBcQEqAfoBYwGaAX8B+QFhAXMBYwHu
+        AUABgAFGAfcDRwGDEAADDQESAlABTwGbAd8BnAFZAf8B7AG+AZwB/wHnAcIBrwH/AdkBtQGpAf8B1wGz
+        AagB/wHnAcIBrwH/AewBvgGdAf8B4QGgAV4B/wJSAVABowMTARoYAAMnAToDcAHxA14B2QMUARtwAAMQ
+        ARYCWgFgAd4CqAHRAf0CTQGvAfoCWgFeAdUDOwFkAyYBOAMSARkDKAE8AxYBHxgAAy0BRgNRAaIBXgFc
+        AVcB3wFuAWMBXgHuAW4BYwFfAe4CYQFbAeECUwFSAagDMAFMAwIBA7gAAyMBMwNZAewDVgG+AxIBGQgA
+        AxEBFwNTAaoBXwFcAVUB6gFqAWYBVwHyAWIBXQFaAe0DWQHHAyoBQQQAAwkBDBwAA0YBgQNWAbsDVQG1
+        A1UBtQNVAbUDVQG1A1UBtQNVAbUDVQG1A1UBtQNVAbUDVQG1A1YBtgNWAbsDPAFoDAACOQE6AWACQQFu
+        AfUCWQFdAdcDSgGLAy4BSAMYASEDBwEKQAADJgE5A1gB6QHyAucB/wHaAtAB/wNXAcIDEgEZAxEBFwJe
+        AVsB2QH3AdgBqwL/Ad4BrQL/Ad0BrgL/AewBwgH/AegBzgGqAf8BYgFYAVcB7wNZAdIDWwHhA1kBwwNQ
+        AZ0DPwFuAyABLgwAAbcBXQFAAf0B8AGKASUB/wHtAW8BGgH/Ae4BbgEZAf8B7gFrARUB/wHuAWgBEAH/
+        Ae0BYwEGAf8B7QFeAQAB/wHtAV8BAAH/Ae0BWwEAAf8B7QFYAQAB/wHtAVUBAAH/AfIBUwEAAf8B4wFR
+        AQAB/wNZAcQMAAJRAVIBpwImAd4B/wIbAdUB/wIKAboB/wIAAaMB/wJRAWEB7gJVAVYBtANAAXEDMgFR
+        AxQBHDAAAycBOwNcAecB6gLfAf8B7ALiAf8B5gLZAf8B3ALVAf8DWQHEA1QBrgH6AbwBgAL/AdsBoQL/
+        AcUBhgH/Af0BwgGEAf8B+AHCAYgC/wHdAakB/wHqAbUBhwH/Ab0BogGXAf8B4AHdAeAB/wHnAeIB4wH/
+        AdMBzAHNAf8BlAGMAY0B/gNlAfQDWQHHAzEBTwQAAb4BfwFGAf4B9gG3AYoB/wH0AboBlAH/AfIBtwGP
+        Af8B8gG2AY8B/wHyAbUBjQH/AfMBtAGIAf8B8wGxAYUB/wHxAa4BgAH/AfABqgFtAf8B8AGqAWwB/wHv
+        AakBawH/AfMBrAFuAf8B7wFtAR4B/wNWAcEIAAMKAQ0CXAFeAc4CNAHzAf8CJQHsAf8CGQHmAf8CDAHe
+        Af8CAAHPAf8BlwGRAcUB/wG0AasBsAH/AWYBYAGWAf8CWwFeAdkCVQFWAbEDQAFxJAADJAE2A1kB7AHp
+        AtwB/wH1Au0B/wHhAtgB/wHkAtkB/wH8AvcB/wFaAlgB7gFzAV8BTAHzAa4BVgEaAf8B5gGcAUMC/wG+
+        AVsB/wHtAaQBRwH/Aa4BUQETAf8B5QGhAU0B/wHeAZYBRgH/Ac0BnwFvAf8BzQHCAcEB/wHsAdwB2AH/
+        Ae8B2QHXAf8B8AHeAdwC/wH9AfwB/wHgAtQB/wNWAbgEAAGzAX0BSwH+Af8B8QHzAf8BmQHgAbAB/wE0
+        AccBTgH/ATMBwQFIAf8BIQG1ATAB/wGsAd0BuAH/Af0B7wH2Af8B+QG2AYcB/wH7AbMBgwH/AfoBqwFq
+        Af8B9QGsAYAB/wHpAecB7gH/AeMBjwFRAf8DWAHACAADLAFEAkMBfQH2AjwB9wH/AisB6gH/Ah8B5QH/
+        Ag4B4AH/ARkBGAHdAf8B3QHUAeAB/wH3Ae0B3gH/AekB3gHYAf8B3QHSAcwB/wHMAcIBvAH/Ak0BbwH6
+        IAADJAE1AVwCWQHsAesC5AH/AfUC7QH/AeoC4gH/AfsC+AH/AfYC9AH/AV8CWwHsAyYBOAF/AVgBKwH8
+        AYQBMQEAAf8B2wGWAUEB/wHyAbkBZQH/AbcBawEtAf8BZAEhAQAB/wGVAUABAgH/AckBiAE0Af8BzwGc
+        AWMB/wHkAcwBxAL/Ae0B3wL/AeIB0QH/AfkB1QHGAf8B2AHAAbsB/wFhAl8B6AMpAT8EAAG0AX8BTwH+
+        Af8B7wHwAf8BhQHdAZoB/wEXAc8BNQH/ARABwQEmAf8BAAGpAQAB/wGXAdMBmwL/AucB/wH9AbABZAL/
+        AbEBaAL/AaEBTwH/AfwBnAFNAf8B7QHgAd4B/wHkAZABTwH/A1gBwAgAAjwBPQFnAisB4QH/AjoB+QH/
+        Ai8B7QH/AicB6AH/AhAB4gH/AUcBRAHeAf8B8wHsAd8B/wHoAd8B2wH/AeIB2AHaAf8B6AHdAdsB/wHs
+        AeEB3AH/AloBXQHTHAADJAE2AV8CVwHoAesC5gX/AfgC9gH/AfoC9gH/AfIC7wH/AWQCYgHnAycBOwQA
+        AXkBZQFMAfQB4AGnAVgC/wHfAbMB/wHHAaYBhgH/AZ8BawFLAf8BngFqAUcB/wGEAUUBGgH/AW4BMgEA
+        Af8BqAFmAUMB/wNlAfQDYgHpAY4BfwF9AfgBZgFiAWEB7QFQAk8BmwMKAQ4IAAGyAX8BUwH+Af8B7wHu
+        Af8BhwHhAaEB/wEgAd4BTAH/ARoB0gE9Af8BAAG4AREB/wGXAdYBnwL/AeoB6QH/Af4BtgFuAv8BvAGJ
+        Af8B/gGsAWAB/wH8AaIBVgH/AfAB5AHiAf8B5AGTAVIB/wNYAcAEAAMEAQYDUQGiAoMB9AH/AVIBUQH5
+        Af8BLgEtAfIB/wEdAR4B7AH/AQoBCwHmAf8BkgGPAeIB/wH6AfEB4QH/AeQB2wHcAf8B4wHZAdoB/wHv
+        AeQB3gH/AcIBuAHGAf8DSAGFEAADGgElAyoBQQM4AVwDXgHlAe4C6A3/AfEC7gH/AWICYAHpAyYBOQgA
+        A1YBswHvAcoBoQL/AfsB9AH/AfkB9AHuAf8B7AHZAcYB/wHtAdgBwAH/AecB0gG6Af8BzQGRAU4B/wFy
+        AVABPAH+A0QBegMDAQQDEQEXFAABrwF/AVcB/gH/Ae8B6wH/AbwB7gHHAf8BigHmAZQB/wGJAeMBjwH/
+        AWkB2QFsAf8BxgHpAccC/wHxAfAC/wHPAZkC/wHRAZwC/wHKAZMB/wH9AccBlAH/AfQC6wH/AeMBkQFT
+        Af8DWAHABAADFAEbAV0BXAFhAeEC+QH4Af8B6AHkAfEB/wHGAcAB7wH/AZABjQHsAf8CQAHoAf8BywHF
+        AeUC/wH3AeIB/wHzAeoB4AH/Ae0B4wHdAf8B9wHsAeMB/wGYAZABsAH/AywBRAgAAxYBHwNUAasDZAHn
+        AWMCXwHwAWsCagH5AeAC1g3/Ae8C6wH/AWQCYwHsAyMBMwwAAxEBFwJhAVwB3AH4AeYB0wb/AfYB6wH/
+        AfsB7QHcAf8B9wHbAb4B/wHjAb8BpwH/AasBpwGvAf8CYgFmAfUDXAHqA1sB2QNZAcMDUgGmAzcBWgMD
+        AQQEAAGuAX8BWgH+Af8B9gHmAf8ByAHHAfMB/wGUAYsB3gH/AZcBjgHeAf8BlAGKAdkB/wHYAdMB7gH/
+        AfUB9gH7Af8BmAGtAf4B/wGPAacB+wH/AYwBoQH6Af8BlgGmAfoB/wHvAfAB9wH/AekBlQFOAf8DWAHA
+        BAADJgE5ApYBzwP/AfwB/wH5AfYB8gH/AfwB9wHvA/8B6wH/AdkB1AHoAf8BNgE1AeYB/wFcAVgB4gH/
+        AaABmgHgAf8ByQHCAdwB/wHvAekB4gH/AWIBXgFkAewDFgEfBAADFQEdA1oB0wHHArgB/wHxAuUB/wH5
+        AvEB/wH7AvQB/wHsAuUB/wHsAuUF/wHyAu0B/wNgAesDJQE3FAADCQEMA1ABngFmAWIBXQHqAeQBzQG/
+        Af8B4gG/AakB/wG+AVcBGgH/AcYBhAE9Af8B1QGsAW0B/wHLAawBiwH/AdEBuQGiAf8B3QHHAbgB/wHY
+        AckBwgH/AdEBwwHFAf8DXQHiAwwBEAQAAa8BfwFfAf4B/wH+AeoB/wFeAWMB3gH/AgABwwH/AgABtwH/
+        AgABnwH/AZkBmAHTAf8B7gHwAv8BFwFXAfwB/wEFAVQB/QH/AQABOAH8Af8BDQE5AfwB/wHpAesB+QH/
+        Ae4BnQFRAf8DWAHABAADQwF4AsgB5gP/Af0B/wH2AvMB/wHzAe4B8QL/AfsB7QH/AawBpwHsAf8BFgEX
+        AeoB/wIOAeQB/wEAAQEB3wH/AgkB3AH/AS0BKgHWAf8DVAGvAwcBCQQAA1ABmgG8Aq8B/wHpAtoB/wHp
+        At0B/wH0AuoB/wHzAu4B/wH2AvQB/wHuAucB/wHmAt8B/wNfAeADJwE7IAADLgFIAZEBiwGPAfwB1AG1
+        AagB/wGyAS0BAAH/AcwBTgEAAf8BzwFdAQAB/wHSAWgBAAH/Ac8BaAEDAf8BzQFgAQEB/wG+AVQBEQH/
+        AdABuAGvAf8DWgHVAwMBBAQAAa0BfwFkAf4B/wH+AegB/wFiAWcB6AH/AgAB3wH/AgAB0gH/AgABuAH/
+        AZwBmwHaAf8B7gHwAv8BKwGFAf0B/wEfAYwB/QH/ARMBXgH8Af8BHgFSAf0B/wHqAewB/AH/AewBnQFU
+        Af8DWAHABAADWQHHAvoB/QL/Af0B+wH/AfgB9AH1Af8B9wHzAfIC/wH8Ae8B/wFwAW4B8AH/AScBKAHu
+        Af8CKAHoAf8CFwHhAf8CBQHhAf8CAAHFAf8CPwFAAW4IAANhAe4B3ALJAf8B3QLNAf8BvQKvAf8BnwKV
+        Af8B3wLUAf8B8wLvAf8B+wL2Af8BZwJlAfQDNAFUJAABRwJGAYEB1wHaAd8B/wG/AY8BhAH/AawBHwEA
+        Af8BwAFEAQAB/wHIAVEBAAH/AcsBVgEAAf8BygFUAQAB/wHHAUgBAAH/Ab0BQgEAAf8BxAGsAaYB/wNV
+        AbIIAAGsAX8BaAH+Av8B7AH/AYgBjQHqAf8BDwERAdwB/wETARUB1gH/AQwBDgHDAf8BrAGtAeMB/wHx
+        AfUC/wFBAYoC/wE1AY4C/wEsAWwC/wE5AWYC/wHuAfIC/wHrAZ0BWAH/A1gBwAQAAlkBdQHyAu0B9wH/
+        AvkB/AP/Af4D/wH5Af8B8wHwAfUB/wFTAVIB9gH/Ai8B8QH/AioB6gH/Ah8B5AH/AhUB6AH/AiEBhQH8
+        AjABMQFNCAADbQH3Ae8C3AH/AcACsgH/A1UBtQM/AW8BogKZAf8B9ALrAf8B+ALxAf8BagJoAfIDKgFB
+        JAADVQGyAegB5wHoAf8BqQFOAT4B/wGyASYBAAH/AckBUQEAAf8B2gFhAQAB/wHeAWcBAAH/AdABVwEA
+        Af8BuwE1AQAB/wG1AUUBGwH/AbwCrgH/A0gBiAgAAacBfwFpAf4B+AHlAdgB/wHsAecB6wH/Ad8B1wHi
+        Af8B3wHZAeQB/wHfAdgB5AH/Ae8B6QHrAf8B9gHuAewB/wHiAdoB7QH/AeAB2QHtAf8B4AHaAe4B/wHj
+        Ad8B8AH/AfoB9AHyAf8B4gGTAVYB/wNWAcEEAAM4AVwCUAFSAaQCWgFdAcoBagFrAXsB8wLDAd4B/wLO
+        AfQB/wJrAv8CUQH+Af8COAH3Af8CIgHrAf8CFgHqAf8CXAFgAdQDEAEVCAADZAHsAcgCugH/A1UBsAMW
+        AR4DVQGyAcACtAH/AegC3AH/AfAC5wH/AWMCYQHrAxwBJyAAAwMBBANeAdkB3gHZAdwB/wGhATEBFgH/
+        AcABPAEAAf8BzwFbAQAB/wHfAWsBAAH/AecBggEAAf8B4AFuAQAB/wHJAUkBAAH/AboBWQE7Af8BoQGZ
+        AZ4B/QM3AVoIAAHRAZ8BgwH/Af4BzgGYAf8B/QHIAZIC/wHMAZEC/wHJAYwC/wHHAYkB/wH8Ab4BggH/
+        AfkBtwFtAv8BvAFpAv8BuQFlAv8BtwFiAf8B/gGzAV0C/wGxAVwB/wHvAZABNwH/A1kBxAwAAwcBCgMq
+        AUEDOwFkAk8BUQGcAloBYAHeAlABxQH/Al8B3wH/AlwB9AH/AkEB7gH/A1QBrwwAA0IBdANRAZwDHwEt
+        A1UBsgHAArAB/wHeAswB/wHoAtoB/wHOAsEB/wNTAaokAAMRARcBbQJrAfMB0AG6Ab0B/wGRAQMBAAH/
+        Aa8BHgEAAf8BugE2AQAB/wHEAUUBAAH/AckBSgEAAf8ByAFKAQAB/wG7AS8BAAH/Ab4BaAFVAf8BdAFt
+        AXQB9wMhATAIAAFuAWQBYAHxAaEBdgFmAfwBlAJfAfsBlAJfAfsBlAFfAVkB+wGUAV8BVAH7AZQBXwFO
+        AfsBlAFfAUkB+wGUAV8BRAH7AZQBXwEyAfsBlAFfATIB+wGUAV8BMgH7AZYBXwExAfsBjwFDASsB/ANI
+        AYYcAAMUARsDIgEyA0IBdQJXAVkBwgJTAWoB8gM+AWsUAANRAZwBxQK3Af8B7wLdAf8B3gLLAf8BxAK3
+        Af8DYAHUAxUBHSQAAzABTQGdApQB/gHcAc4BzwH/AZ0CRwH/Aa0BUAFDAf8BrgFTAT4B/wGuAVMBOgH/
+        Aa4BUwE2Af8BrAFOATIB/wGhAToBLQH/AcIBmgGYAf8DYgHpAwcBCowAA0IBdgNkAecBcQJtAfcDZAHs
+        A04BmAMUARwoAAMiATEDXgHZA2UB7gFlAmcB7gJvAXAB8QNxAfMBdwFzAXcB9QGHAYYBhwH3AYsBiQGL
+        AfkBkwGRAZIB+wG0Aa8BsAH9A1YBuQgAAzoBYQNZAccDWQHMA1oBygNaAcoDWgHKA1oBygNaAcoDWgHK
+        A1oBygNaAcoDWgHKA1oBygNcAc4DWQHDAzQBVUAAA04BmANZAcMDVgG+A1YBvgNWAb4DVgG+A1YBvgNW
+        Ab4DVgG+A1YBvgNWAb4DVgG+A1YBvgNWAb4DWQHEA0QBfAgAA0gBhAF/An4B8wFyAnAB8AFyAnAB8AFy
+        AnAB8AFyAnAB8AFyAm4B8AFwAm4B8AFwAm4B8AFwAm4B8AGAAn8B8wNRAZwIAANhAe4D4gH/A90B/wPa
+        Af8D2gH/A9gB/wHYAtcB/wPXAf8D1gH/A9UB/wPVAf8D1AH/A9MB/wPgAf8DmQH/A1cBvQwAAy4BRwJe
+        AWEB2gMlATcoAAGZAZ0BnwH9AcoBzQHPAf8BywHNAdAB/wHLAc4B0AH/AcoBzQHQAf8BygHNAc8B/wHJ
+        Ac0BzwH/AcgBzAHOAf8ByAHMAc4B/wHIAcsBzQH/AcgBywHNAf8ByAHLAc0B/wHIAcsBzQH/AckBywHO
+        Af8BsQG1AbcB/wNbAdADAwEEAy8BSQNSAaQB6ALjBf8B+wL5Af8B+gL3Af8B+AL0Af8B9gLwAf8B8wLs
+        Af8B8ALoAf8B8gLrAf8B7ALlAf8DVgG2AzEBTQMEAQYDhAH3BP8D9AH/A/MB/wHzAvIB/wHxAvAB/wHw
+        AfEB8gH/Ae8B8AHxAf8B7QHuAe8B/wHrAewB6wH/AesC7AH/AekB6gHsAf8B5QLmAf8D9QH/A8YB/wNZ
+        AcMIAAMbASYBTAFiAWsB7wEAAeQC/wJcAWAB1CgAAa4BsAGyAf0B7QLwAf8B2QHbAdoB/wHbAd0B3gH/
+        AdsB3QHeAf8B2wHeAd8B/wHbAd4B3wH/AdsB3gHgAf8B2wHeAeAB/wHbAd4B4AH/AdwB3gHgAf8B2wHd
+        Ad4B/wHaAdsB3AH/AeYB6AHpAf8B4QHmAekB/wNYAcsDPgFrAYACfgH1Ad0C1QH/Ad4C1Qb/Av0B/wH8
+        AvgB/wH6AvUB/wH4AvEB/wH1Au0B/wHxAukB/wH2Au8B/wHhAtYB/wHdAtYB/wN9AfYDRAF6A3MB9gP7
+        Af8D6gH/AesC6gH/AeoB6wHqAf8B6wHwAfEB/wHmAekB6gH/AeEB4AHiAf8B4wHlAecB/wHnAewB7wH/
+        AeEB4gHlAf8B3gHfAeEB/wHeAt8B/wLsAesB/wO9Af8DVgHBCAADDgETAVcBXwFlAegBAAHxAv8BMgF3
+        AZUB+gJMAU0BkQNJAYcDSQGHA0kBhwNJAYcDSQGHA0kBhwNJAYcDRwGABAABqAGqAa4B/QFcAV4BWwH/
+        AhsBBgH/AicBBwH/AjUBEgH/AkoBKgH/AlABNAH/AlIBNwH/AU8BTgEzAf8BRAFFAScB/wE3ATgBFwH/
+        ASsBLAERAf8BIQEgAQsB/wI1AS8B/wG/AcYBywH/A1oBygNeAc4B9QLpAf8B0QLIAf8BaQJnAf8CtQG0
+        Af8BwgLBAf8BvAK7Af8BvAG7AboB/wG6ArkB/wG5AbgBtwH/AbsCuQH/AbUCtAH/AWkCaAH/AckCwgH/
+        AfgC7AH/A14B2QN1AfYD/AH/Ae0C7AH/Ae4B8AHyAf8B6QHsAe4B/wHaAcgBvwH/AdYBtwGnAf8B2QG+
+        Aa4B/wHSAbYBpwH/AdABuQGwAf8B1QG1AaMB/wHOAaoBlAH/AdYBzQHKAf8B7wHxAfMB/wPAAf8DVgHB
+        CAADGwEmAVcBYAFqAesBAAHoAv8BLQGbAcgB/wG7AbgBuQH/Ac0B2AHRAf8BywHVAdIB/wHJAdIB0AH/
+        AcYB0QHOAf8BxAHPAc0B/wHBAc0BywH/AckB1QHXAf8BnQGkAagB/wQAAqgBqwH9AUMBRgE9Af8DAAH/
+        AjkBGAH/AkABGwH/ASIBIQEAAf8CNgEEAf8CNwEGAf8CNAEDAf8CKgEAAf8CHQEAAf8CFQEAAf8CCgEA
+        Af8BGQEYAQsB/wG2Ab0BwgH/A1oBygNhAeYB4gLQAf8BwgKyAf8BUwFQAVEB/wFXAVsBYgH/AV4BYwFq
+        Af8BXQFjAWsB/wFeAWMBawH/AV4BYwFrAf8BXQFkAWwB/wFeAWQBawH/AVkBXgFlAf8BUAFOAU8B/wG5
+        AawBqwH/AeIC0AH/AWcCZgHrA3UB9gP8Af8B8ALyAf8B6wHpAeoB/wHXAbMBoAH/AegBvgGVAf8B9QHR
+        AaIB/wHyAdIBpwH/AfMB0AGgAf8B6wHCAZkB/wH1Ac0BoQH/Ad4BqAFsAf8B0wHDAbsB/wHwAfQB9wH/
+        A8EB/wNWAcEIAAMpAT4BDwF4AbEB/AEAAeoC/wEcAZEBtwH/AVIBaQFEAf8BTgGIATYB/wE1AXABFAH/
+        ATYBgwETAf8BOwGFARkB/wEzAW4BFgH/ASABXgEHAf8BbAGeAWEB/wGpAawBtAH/BAACqAGpAf0BPQFA
+        ATsB/wItAR4B/wLbAdUB/wK9AbcB/wIiAQMB/wIgAQAB/wIeAQAB/wIWAQAB/wIdAQAB/wIdAQAB/wIZ
+        AQAB/wIOAQAB/wIeARAB/wG0AbsBwQH/A1oBygFkAmIB7wHOArkB/wHOAb8BwQH/AdgBwwG8Af8B4AGn
+        AYoB/wHmAaUBgAH/AekBogFnAf8B6QGdAV8B/wHpAZ0BXwH/AekBoQFmAf8B5gGmAW8B/wHgAagBiwH/
+        AdkBwQG6Af8BzgHAAcIB/wHOArkB/wFoAmYB8AN1AfYD/gH/AfAB9AH3Af8B3QG7AasB/wHuAbcBgwH/
+        AfIBwAGHAf8B3wGzAZEB/wHeAb8BqgH/Ad4BsgGOAf8B8wHBAYkB/wH3AcgBlQH/AdQBowGGAf8B3gHc
+        Ad4B/wHyAfQB9QH/A8IB/wNWAcEIAAMcASgBIQFzAZwB+gEAAegC/wEZAZABtQH/AVIBbwFJAf8BgwGl
+        AWYB/wFXAZABRgH/AVgBkAFGAf8BGgFiAQAB/wEYAV4BAAH/AQIBTAEAAf8BWwGSAVIB/wGqAasBtQH/
+        BAADqAH9ATgCOQH/ATcBNgEmAf8CgQFsAf8CqgGnAf8CkQGHAf8CFwEAAf8CkwGCAf8CSQE2Af8CDQEA
+        Af8CFAEAAf8CEQEAAf8CBgEAAf8CGQEQAf8BsAG3Ab0B/wNaAcoBbwJuAfEB7QLkAf8C6wHxAf8B5QHR
+        AcAB/wH5AYcBEwL/AWYBAAL/AWYBAAL/AWcBAAL/AWcBAAL/AWgBAAL/AWgBAAH/AfoBZgEAAf8B5wHE
+        AaoB/wHsAfAB+AH/AeoC4AH/AWkCaAHwA3UB9gT/AeoC5QH/AeUBqwGDAf8B9QGvAWAB/wHYAaoBjQH/
+        AegB5gHoAf8C7QHrAf8B5AHnAewB/wHbAa8BkgH/AfUBtQFsAf8B2QGiAW0B/wHbAdcB2AH/AfMB9wH4
+        Af8CxQHEAf8DVgHBCAADQgF1AQABuAHvAf8BAAHoAv8BGgGUAbYB/wGHAaEBgQH/ATkBgwEtAf8BNQGD
+        ASoB/wEvAW0BIAH/AQsBUgEAAf8BCgFNAQAB/wEAAUABAAH/AVoBkAFTAf8BqgGsAbQB/wQAAaUCqAH9
+        AT4BQQE/Af8DAAH/AwAB/wKoAaUB/wKlAZ0B/wIBAQAB/wJRAUYB/wK9AboB/wKRAYkB/wIOAQAB/wIH
+        AQAB/wIBAQAB/wEUARMBDwH/Aa0BtAG5Af8DWgHKA2kB8AT/AfEB7gHyAf8B3QHVAc8B/wHwAcABZAL/
+        AbcBOgL/AaYBFgH/Af4BogEJAf8B/gGhAQcB/wH+AaEBBwL/AZ8BAgH/AfABnAESAf8B2wHNAb0B/wHk
+        AeMB6AH/AfIC6wH/AXIBcAFyAfEDdQH2BP8B5wHaAdYB/wHqAakBZwH/AesBpwFbAf8B2gHDAbcB/wHw
+        Ae0B5gH/AeYBuAGJAf8B7QHnAdoB/wHbAcABswH/AfABwgGZAf8B5gG4AZUB/wHaAc0ByAH/AfQB+AH6
+        Af8DxgH/A1YBwQQAAwoBDQJcAWAB1AEAAeEC/wEAAeAC/wEVAZUBwAH/ASgBVQFLAf8BLwGQATEB/wEG
+        AYEBBQH/AQkBgQEIAf8BEQGCAQ8B/wEQAWQBDAH/AQABMwEAAf8BUwGJAU4B/wGsAa0BtQH/BAABogKo
+        Af0BNAE3ATkB/wEIAQcBBgH/AqwBpQH/Ar0BugH/AiQBFQH/AgEBAAH/AkEBOQH/Ar4BuwH/ApwBmAH/
+        AgkBAAH/AgEBAAH/AwAB/wEPARABDgH/AaoBsgG3Af8DWgHKA18B4AH/AfsB+gH/AfgB9AH1Af8B3wLb
+        Af8B4AHLAasB/wH9AeUBuwH/AfwB4AGzAf8B+wHZAaMB/wH8AdMBlgH/AfsB0AGQAf8B/gHPAYgB/wHk
+        AcABiAH/AdQBywHKAf8BzQHMAbsB/wHiAdsBzwH/A2EB6AN3AfYE/wHuAuoB/wHnAasBgAH/AfYBtAFm
+        Af8B1AGfAW8B/wHjAeIB4wH/AesB4gHQAf8B4QG6AZMB/wHbAa0BiwH/AfcB0wG0Af8B3gGtAY4B/wHf
+        AdkB1wH/AfUB+QH6Af8DyAH/A1YBwQQAA1EBoAEAAZkB6gH/AQAB5gL/AQAB2wH2Af8BMgHmAfwB/wE7
+        AaUB3QH/AUgBggFkAf8BggHEAW8B/wFuAbwBcAH/AW4BvQFvAf8BgQHCAYIB/wFBAZEBQQH/AVYBjAFS
+        Af8BqgGsAbMB/wQAAZ8BpgGoAf0BLAEvATEB/wFrAWoBaQH/A7gB/wICAQEB/wMAAf8CEgEGAf8ClQGN
+        Af8CRQFBAf8DAAH/AwAB/wMAAf8DAAH/AQwCDgH/AagBsAG1Af8DWgHKA0kBhwHIAsIB/wH2Ae8B7gH/
+        AeoC5QH/AcMBtAGrAf8B7gHcAcwB/wHvAeIB1AH/AewB4gHWAf8B6wHjAdcB/wHqAeMB1gH/AeoB3wHQ
+        Af8BxQG2Aa0B/wHgAdcB2QH/Ae4B5AHjAf8BxwHAAb8B/wNOAZgDdwH2BP8B9wH9Af4B/wHkAcABrAH/
+        Ae8BrAFmAf8B8QG6AYUB/wHYAaQBgAH/AdsBtAGbAf8B3QGoAYIB/wHlAcYBpwH/AeYBsQGNAf8B3QG7
+        AagB/wHoAe4B8QH/AfYC9wH/A8kB/wNWAcEEAAJaAV4B1QEAAcgC/wEAAecC/wEAAf0B/gH/AVMD/wGK
+        Ae4B/gH/AWABhgGfAf8BuwHSAbAB/wG3Ac8BsAH/AbgBzwGxAf8BuQHQAbIB/wG2AdABsAH/AacBvgGh
+        Af8BpAGnAawB/wQAAZsBogGnAf0BLQExATIB/wJZAVgB/wO9Af8CigGJAf8CMAErAf8DAAH/AwAB/wMA
+        Af8DAAH/AwAB/wMAAf8DAAH/AQsBDAENAf8BpgGuAbMB/wNaAcoDBwEJAz0BaANYAbkDYAHeAagBpQGm
+        Af0B+QH3AfYB/wH1AfoB+QH/AfAB+gH4Af8B7AH6AfkB/wHoAfsB+QH/Ae8C+QH/AZcBjwGQAf4DYQHi
+        A1oBvQNAAW8DCQEMA3cB9gT/AfkB+gH7Af8B9QL2Af8B4wG5AaIB/wHsAa8BgQH/AfYBwAGRAf8B9gHB
+        AZcB/wH1AcsBpwH/AegBsgGPAf8B3gG4AaQB/wHrAe4B8AH/AesB7QHuAf8B9wL2Af8DywH/A1YBwQQA
+        ATMBWAF7AfYBAAHHAv8BAAHqAv8BAAP/AU0D/wGUAfcC/wFdAYQBqgH/AtIBzQH/AdEB1gHRAf8BzwHU
+        AdAB/wHNAdMBzwH/AcwB0gHPAf8B2QLgAf8BnAGfAaIB/wQAAZYBnQGjAf0BPgFBAUIB/wIMAQsB/wOy
+        Af8D0QH/Ai8BMAH/AwgB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wEJAQoBCwH/AaUBrQGyAf8DWgHK
+        DAADDgETA1gBwQT/AfoD/wH1A/8B8gP/Ae4D/wH5A/8DXAHMAxQBHAwAA3cB9gT/A/kB/wH5AvsB/wH3
+        AvsB/wHrAdsB0wH/AecBwQGuAf8B5QG8AaUB/wHlAcEBrgH/AegB1wHQAf8B8AH0AfcB/wHuAvAB/wHr
+        AuoB/wP5Af8DzQH/A1YBwQQAAlcBZQHoAQABywL/ARgBoAG5AfwBWAJfAeMBQwHpAfcB/wGIAfIC/wJW
+        AVgBuwNDAXgDQwF4A0MBeANDAXgDQwF4A0MBeANBAXIEAAGRAZkBngH9AU0BUAFRAf8BJwImAf8DRgH/
+        A0QB/wMwAf8DOwH/AzUB/wMpAf8CHAEdAf8DEgH/AwoB/wECAgEB/wEWAhcB/wGiAaoBrwH/A1oByhAA
+        A1MBpQP9Af8B/gP/AfgD/wH1A/8B8QP/AfgD/wNVAbIQAAN5AfYE/wP7Af8D+QH/AfgC+QH/AfgB/QH+
+        Af8B9QH6Af0B/wHyAfUB+AH/AfIB9gH6Af8B8wH3AfoB/wHvAfAB8QH/A+0B/wPrAf8D9wH/A88B/wNX
+        AcIEAANTAaoBAAHJAv8BOAGCAZIB9wJSAVMBqAEqAcsB7QH/AVkBzQHsAf8DKwFCIAABjwGXAZ0B/QFL
+        AU0BTgH/ATcCNAH/AjoBOQH/ATgCNwH/Aj8BPgH/AUACPwH/AUECQAH/AkIBQQH/AUMCQgH/AkEBQAH/
+        Aj4BPQH/ATsCOQH/ATQCMwH/AZwBpAGqAf8DWQHMEAADVgGrA/0F/wH7A/8B+AP/AfUD/wH6A/8DVwG3
+        AwMBBAwAA4gB+Bz/A/4B/wP9Af8D/AH/A/oB/wP5Bf8D0wH/A1cBwgQAAzsBZQE3AWcBiAH3ATQBYgF7
+        AfYBIgFUAYwB+gFUAWEBagHuAloBXgHVAw0BESAAA38B/gGPAZcBmgH/AV8BYwFmAf8BZgFrAW4B/wFl
+        AWoBbQH/AWUBagFtAf8BZQFqAW0B/wFlAWoBbAH/AWUBagFsAf8BZQFqAW0B/wFmAWkBbQH/AWYBawFu
+        Af8BZAFpAWwB/wFtAYEBhQH/AasBtgG8Af8DWQHHEAADVAGvGP8DWAG7AwQBBQwAA1sBywOlAf4DsQH9
+        A7EB/QOxAf0DsQH9A7EB/QOxAf0DsQH9A7EB/QOxAf0DsQH9A7IB/QOtAf4DagH1AzsBZUAAAlkBWgHP
+        AYoBjQGOAfsBegF8AX4B+gF5AXsBfQH6AXoBfAF+AfoBegF9AYAB+gF7AX0BgQH6AXwBfgGDAfoBfAF+
+        AYMB+gF9AYEBhAH6AX0BgwGGAfoBfgGDAYYB+gF+AYQBhwH6AYMBjgGSAfwCZwFoAfIDOgFiEAADUQGc
+        AX4CfAHzA24B7wNuAe8DbgHvA24B7wF+AnwB8wNSAacDAQECMAADPwFtATkBSAGJAfYCIQEiATEgAAMF
+        AQcDIwEzAzQBVAMmATgDDAEQAwIBA2QAAyABLgM6AWEDNgFZA0UBfwNWAbsDVgGzA0ABcAM3AVoDOQFf
+        AxwBKDAAAzgBXgE2AaIB+AH/AloBXQHKAxcBIBMAAQEDBgEIAwsBDwNBAXIBawJiAe8BXgJbAdkDVQGy
+        A0gBhgMyAVEDGQEjAw0BEQMKAQ4DBwEKAwMBBAgAAVkCVwHCAaIBcAFZAfsBmwFrAU0B+gGNAnIB+gGQ
+        AXUBdgH6AY8CdAH6AY8CcwH6AY8CcwH6AY8CdAH6AY8BcgFwAfoBnwF0AVgB+gGgAW8BTQH6AaIBXwFF
+        AfsBXgJbAdAMAAMDAQQDYAHeAn8BfgH+AYYBWQFYAf0BNwFlAbgB/wEzAbkB8wH/AS4BiAHPAf8BdwFw
+        AX4B/gGOAYMBYwH9AVECTgH9A04BlxwAAzkBYANKAY0BSQJIAYcDNwFbBAADIAEuAVQBYQFyAe4BPgG5
+        AfQB/wNbAcgDFgEeCAADBAEFAyQBNgNEAXkDTAGSAWUCYQHuAf8B/AH9Af8B/ALrAf8BtwGmAacB/QFn
+        AlcB8gNXAd8DWgHKA1UBsgNQAZoDSAGFAzMBUwMLAQ8EAAHSAWwBRQL/AcQBWAH/Ae8BmgFPAf8B0AHE
+        AccB/wHSAssB/wHTAcoBywH/AdcCzgH/AdYCzgH/AdUB0AHTAf8B1AHCAb0B/wH9AbkBjAL/AZ0BNwL/
+        AZcBGAH/AdwBcAE5Af8QAANcAd8BrwGrAaoB/AGcAZYBlQH6AVQBqAG+Af0BagHkAv8BVAG2AfEB/wKR
+        AZUB+wGnAZ0BnAH7AX8CfQH4A0ABcBgAA0gBiAF1AnMB+gGqAqMB/wGKAmYB/wFqAmkB+QJbAVkBwwMo
+        ATwDVAGvAVMB8AL/ASQBbQHEAf8CRQFGAX4IAAMdASoBtQE3AQAB/wH0AU8BAAH/AbsBQAEMAf8B8QHM
+        Ac0C/wLzAv8B9wH2Bv8B9AH1Af8B5wG9AbwB/wGgAUwBRAH/AVoBGQEEAf8BUAEFAQAB/wGSASoBAAH/
+        A1MBsAM2AVkEAAGtAWsBOwH8Af8BtgFSAf8B7QGUAU8B/wHUAcIBxAH/AdoBUQE2Af8B1wGgAZYB/wHb
+        AdcB2gH/AdwBzgHNAf8B2wHTAdQB/wHYAb4BugH/AfMBlAFaAf8B/gGOAS8C/wGPARsB/wG6AV0BQAH9
+        CAADEQEXAxUBHQMpAT8DMwFSAygBPAFTAlUBsAGmAcIB3wH/AkwBXQHzAzoBYgMtAUYDLwFKAxgBIQMV
+        AR0DDwEUDAADKQE+A2cB8gG/AbsBsQH/AawBrQGmAf8BxgK6Af8BrgKUAf8BrwGaAZcB/wNeAdACVQFX
+        AboBVAG3AeEB/gFQAeoB/AH/A1sByAMJAQwEAAG1ATcBAAL/AWUBAwH/Ae8BYwEIAf8BuwFvAWQC/wHo
+        AeYC/wHnAegC/wLvAv8C9gL/AvoG/wL7Af8B8gLPAf8BswFeAVsB/wFuAS4BHAH/AbIBNgEAAf8DSQGJ
+        BAABrAFnATkB/AH/AbsBWAH/Ae8BmwFXAf8B3QHRAdIB/wHmATEBDgH/AeEBnQGRAf8B5QHtAe8B/wHl
+        Ad8B3QH/AuYB6AH/AeABygHFAf8B8gGCAUUB/wH9AY0BLwL/AZgBJAH/AbkBWwFAAf0EAANLAZADXAHn
+        AVwCVQHqAVsCWAHjA1sB4QNaAd4DXQHwAc0BuQG1Af8BcQFhAV4B/ANaAeQDXwHgA10B4gNcAecDYAHr
+        A1gB4wNAAXADFgEfAzcBWwNVAbUBhwFvAaEB/wFZAVQBjAH/AVUBVwGBAf8BugG4AbYB/wG+AawBqwH/
+        AbsBpgGlAf8BwgGsAaIB/wFEAUIBYgH1ATIBjgGtAfsBWQP/AUEBxgH1Af8CRgFHAYAEAAG1ATcBAAH/
+        Af4BbwERAf8BygFVAR4B/wHxAcMBuwH/AfwB0wHKAf8B9wHRAc8B/wHaAaIBpQH/AdkBngGhAf8BqwFQ
+        AVoC/wL0Av8C9QL/Af4B/QP/Af0B/wG5AWABVwH/AbUBNwEAAf8DTAGRBAABrAFnATkB/AH/AbwBWwH/
+        AfABoAFeAf8C5gHqAf8B5QGWAYcB/wHnAcsBxwH/Ae0B+gH+Af8B7QHxAfUB/wHuAfoB/gH/AeYB2AHU
+        Af8B8AFeAS8B/wH9AYoBLQL/AZwBLAH/AbkBWgFAAf0EAAGNAokB+QHyAvAB/wHiAuAB/wHdAtsB/wHc
+        AtkB/wHOAswB/wHTAtIB/wHnAuYB/wHuAuwB/wHyAvEB/wHyAu8B/wH0AvEB/wHkAekB4gH/AccB5gHK
+        Af8B0AHLAcoB/wNXAcUDVgGzAQsBlgHiAf8BAwGQAegB/wEAAYEB6gH/AQABYwHoAf8BIAFQAbwB/wGv
+        AaUBnwH/Ac4BwAG+Af8BzAG4AbIB/wGnAZoBtgH/AS8BbgHNAf8BQQHQAfIB/wFVAfkC/wFdA/8BUQF6
+        AZIB9wMsAUQBtQE3AQAB/wH+AYcBIwH/AcIBZQFSAf8B1QKZAf8B1gGdAZ4B/wHXAaEBowH/AfMC3gH/
+        AfgC7AH/AbYBYAFoAf8B/QHlAeQC/wLsAv8C8wH/AfUBzwHNAf8BjQE7ASYB/wHeAUcBAAH/A0sBkAQA
+        AawBZAE4AfwB/wHAAWIB/wHzAZwBWQH/AegB0gHQAf8B6gHpAecB/wHrAd8B3AH/AesB2QHVAf8B6wHZ
+        AdYB/wHsAeEB2gH/AecBwQG1Af8B7wFEARIB/wH8AYYBKAL/AaABMQH/AbkBWQFAAf0EAAG2ArMB/QHu
+        AvAB/wHSAtMB/wHVAtYB/wHVAtYB/wHDAsQB/wHPAtAB/wH0AfUB9AH/AfEC8gH/AfEC8gH/AfEC8gH/
+        A/MB/wHpAe4B6gH/AdwB7gHgAf8B4gHgAd8B/wNZAccBWwJhAeEBRAF/AYsB9AEvAa8BwAH9ARIBsQHv
+        Af8BCwGhAe8B/wFVAYYBqAH/AakBngGWAf8B0QLGAf8B2wHLAcYB/wG9AacBvgH/AUMBpgHgAf8BVgH9
+        Av8BVwH8Av8BVQH1AfwB/wFLAdsB8wH/AlcBWQHCAbUBNwEAAv8BlQE3Af8B2wFeASIB/wHLAYwBhAH/
+        AfABwgG/Av8B7gHrAv8B/QH8Bf8B+QLmAf8BuAFfAWcC/wHjAeIC/wHpAegB/wGzAVkBVQH/AbMBawE8
+        Af8B8gFPAQAB/wNLAZAEAAGsAWMBNgH8Af8BxQFsAf8B/QGjAVAB/wH3AZkBTAH/AfgBmgFMAf8B+AGX
+        AUgB/wH4AZcBRAH/AfgBlAFBAf8B+AGUAUAB/wH5AY8BOAH/AfwBgQEmAv8BkQEuAv8BoAE1Af8BuQFX
+        AUAB/QQAAacCngH8AeUC5gH/AdsC3AH/A98B/wPfAf8D4AH/AeEC4AH/A+AB/wPfAf8D4AH/A+AB/wPg
+        Af8B4QHgAeEB/wHvAewB7wH/AeEC3QH/A1kBwwMMARADLwFJA10B4gGbAY8BngH/AW4BZgGIAf8BbgFo
+        AW8B/wGfAp0B/wHWAs0B/wHkAdsB2QH/AfsB4gHYAf8BjwGUAckB/wFGAdMB8AH/AYAD/wFbAeAB9AH/
+        AlgBZAHmAjQBNQFVAbUBNwEAAv8BoQFMAv8BawEIAf8B/AHPAakB/wHgAagBjgH/AcoBhgFsAf8B5QGs
+        AakB/wH+AeAB3gL/AfwB+wH/AbkBZAFrAv8B1gHNAf8B8gHBAbwB/wGCASUBGgH/AekBqgFkAf8B9gFQ
+        AQAB/wNLAY8EAAGtAV8BMwH8Af8BzgGTAf8B+AHYAb4B/wH4AdcBugH/AfcB1AG1Af8B9QHSAbMB/wHy
+        Ac8BsAH/AfEBzQGuAf8B8QHJAasB/wHvAckBqQH/AewBzAGtAf8B6AHEAakB/wH7Aa8BVwH/AboBVAFA
+        Af0EAAF5AncB9AH3AvgB/wPxAf8D8AH/Ae4C7wH/A+4B/wHsAu0B/wHqAusB/wPpAf8D6AH/A+cB/wPl
+        Af8D4wH/AesC7AH/Ac8CygH/A1UBsQE9Aj4BagEmAU0BmAH6AQsBWgHCAf8BEAFjAdMB/wEFAVIBzgH/
+        ARwBSgG8Af8BqAGgAaIB/wHkAdkB1AH/AfEB6QHqAf8BsAG2AdkB/wFSAWEBvgH/AScBmgHZAf8BiAH+
+        Av8BnQP/AVgBYgFuAe8CIQEiATEBtQE3AQAC/wGuAWIC/wFrAQgC/wHcAb4C/wHcAb4B/wH+AdkBuAH/
+        AeoBuQGdAf8BzQGJAWsB/wHbAZ0BmQH/AfoB0wHSAf8BvAFjAWcB/wG2AWMBWgH/Aa0BOwEoAf8B/AHB
+        AYwB/wH2AVABAAH/A0QBfAQAAa0BXQEwAfwB/gHTAZ4B/wH1AvgB/wH8A/8B/AP/AfwD/wH6Af0C/wH6
+        AfsB/QH/AfoB9wH5Af8B+QL0Af8B+QHyAfMB/wHpAeYB6gH/AfIBswFlAf8BugFTAUAB/QQAAV0CXAHf
+        CP8B+QL6Af8B9gL3Af8D8wH/Ae4C7wH/AeoC6wH/A+cB/wHiAuMB/wPeAf8B2QLbAf8D1gH/Ad0C3gH/
+        AagCogH/A0gBiAFYAV4BYQHdARQB3gL/AQkB1QL/AQABugL/AQABogL/AUsBmgHfAf8ByAG0Aa4B/wHp
+        AeAB3QH/Ae4B6QHwAf8BQgGMAdQB/wFUAcwB7wH/AYsB5wH3Af8BlwH9Av8BowP/AZgD/wJZAVwBzAG1
+        ATcBAAL/AbsBiAL/AWsBCBX/AfIC5QH/AdICpQH/AaQBPgFHAf8BywGqAakB/wP2Bf8B9gFQAQAB/wMl
+        ATcEAAGtAV0BMAH8Af0B0gGcAf8B9gH1AfIK/wL8Av8B+QH2Av8B9wHyAv8B8wHuAv8B8AHpAv8B8QHr
+        Af8B8AHlAeQB/wHyAbMBYwH/AboBUwE+Af0EAANXAboB3wLVAf8B4wLZAf8B3ALTAf8B2wLRAf8B2gLQ
+        Af8B1wLOAf8B1QLMAf8B1ALLAf8B0wLKAf8B0QLJAf8BzwLIAf8B0ALJAf8B1wLQAf8BZAJfAfsDNAFU
+        AzIBUAM1AVYDVQG1AWwBkAGgAf8BpAHCAdoB/wHDAcoB0AH/AcsBvgG7Af8B8wHuAe0C/wH9Av8BhgGo
+        AeEB/wFvAdsB8wH/AcQD/wG3A/8BRAGtAeIB/wFCAVkBfgH1AlcBXQHfAbUBNwEAAv8ByQGfAv8BsgFn
+        Av8BawEIAv8BawEIAv8BawEIAv8BawEIAv8BawEIAv8BawEIAv8BawEIAf8B/gFrAQgB/wH+AWsBCAL/
+        AWsBCAL/AWsBCAH/AyoBQAMEAQUEAAGtAVwBLgL8AdIBnQH/AfQB8wHxBv8B/AH7Av8B9wH2Av8B9AHx
+        Av8B8gHtAv8B7gHoAv8B7gHnAv8B8wHvAf8B7AHlAeQB/wHwAbIBZAH/AboBUgE9Af0EAANMAZIBtwKh
+        Af8BxgKwAf8BwQKsAf8BwgKtAf8BwwKuAf8BxAKwAf8BxgKzAf8ByAK2Af8BywK5Af8BzgK9Af8B0QLB
+        Af8B2QLLAf8B1gLDAf8BZAJXAfEDHQEqCAADLAFEAVwBWAFBAfgB7AHhAdwB/wHmAd0B2wH/AeUC2gX/
+        Ad8B2QHTAf8BQQFJAV8B+wFJAagBugH9AdED/wHRA/8BjQHHAeoB/wNOAZQDAQECAbUBNwEAAv8B1QG1
+        Av8B1QG1Av8B1QG0Av8B1gG1Av8B1QGzAv8B1QGzFf8BtQE3AQAB/wMqAUADBAEFCAABrQFcAS4B/AH7
+        AdIBnQH/AfMB8QHwAv8C/gL/AfkB9QL/AfUB8QL/AfEB7QL/Ae4B5wL/Ae0B5gL/Ae8B6QL/AfYB8wH/
+        AesC5QH/AfEBswFmAf8BugFSAT4B/QQAAz0BaAGOAn8B/gHKArUB/wHGArIB/wHGArMB/wHIArQB/wHK
+        ArcB/wHLArkB/wHNArwB/wHRAsAB/wHTAsQB/wHXAsoB/wHfAtIB/wHJArUB/wNbAeEDDAEQDAADSgGM
+        AVkCVAH/AZ8ClQH/AbQCswH/AYgBhwGIAf8DVgG4A0MBdwFVAV0BZgHqAd8B/gL/AecD/wHrA/8BUgFt
+        AYoB9wMkATYBtQE3AQAC/wHgAccC/wHgAccC/wHgAccC/wHgAccC/wHgAccF/wG1ATcBAAH/AbUBNwEA
+        Af8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8DHQEqAwQBBQMCAQMIAAG3AVIBQAH9AfoB1AGgAf8B8gHv
+        AfAC/wH+A/8B+AH2Av8B9QHxAv8B8QHsAv8B7wHrAv8B8wHuAv8B9QHzAv8B/AH7Af8B7ALqAf8B4AGl
+        AVkB/wG4AU4BNAH9BAADJgE4AW4CYgH2AcYCsQH/AccCswH/AccCswH/AckCtgH/AcsCuQH/Ac0CvAH/
+        AdACvwH/AdICwwH/AdUCyAH/AdsC0AH/Ad0C0QH/AbACnAH/A1YBwRAAAwEBAgM0AVQDQgF0Az4BbAMx
+        AU8DCwEPAwABAQJZAVwCyQH5Av8B+wf/AdEB+AH+Af8DWwHIAbUBNwEAFf8BtQE3AQAB/wMrAUIDBwEK
+        AwMBBAMDAQQDAgEDAwABARAAAdABWAEpAv8B4QGnAf8B9wH6AfMH/wH6A/8B9QL/AfwB8gL/Af4B9gP/
+        AfoD/wH9Bf8B8QH1Ae4B/wHnAbMBYwH/AdMBUgETAf8EAAMQARYBXwJcAeoBwwKtAf8BzwK7Af8B0AK+
+        Af8B0QK/Af8B1ALDAf8B1wLHAf8B2wLLAf8B3gLQAf8B4QLWAf8B6QLeAf8B3QLLAf8BmAKEAf8DTAGS
+        LAACSAFJAYcBMQFfAZUB+wFNAWcBmgH6AU0BYgGZAfoBSQFfAZoB+wFOAVcBZgHvAwEBAgG1ATcBAAH/
+        AbUBNwEAAf8BtQE3AQAB/wG1ATcBAAH/AbUBNwEAAf8DHQEqAwQBBQMCAQMgAAFWAlQBqwGWAVoBMgH7
+        AX4CWQH1AX4CWQH1AX4CWQH1AX4CWQH1AX4BWQFMAfUBfgJZAfUBfgJZAfUBfgJZAfUBfgJZAfUBiAFS
+        AVEB9wGWAVYBLAH7AVgCVgG7CAADUQGcAXgCcQH6AY4ChAH7AYECeAH6AYECeAH6AYQCeQH6AYYCegH6
+        AYkCfAH6AYoCfQH6AYwCgAH6AZICjwH7AX4CeAH8A18B4AMhATAYAAMhATEDQAFwA1ABngMpAT8EAAMK
+        AQ4DEQEXHAADBAEFAxQBHAMnAToDLAFEAygBPQMjATQDHgErAxgBIgMUARsDEAEVAwwBEAMJAQwDBAEG
         AzoBYQNZAccDWQHMA1oBygNaAcoDWgHKA1oBygNaAcoDWgHKA1oBygNaAcoDWgHKA1oBygNcAc4DWQHD
-        AzQBVUQAA1cBwgNEAXs4AANhAeIDewHxA24B7gNuAe4DbgHuA20B7gNsAe4DbAHuA2wB7gNsAe4DbAHu
-        A2wB7gNuAfADZQHlBAADYQHuA+IB/wPdAf8D2gH/AtsB2gH/A9kB/wPYAf8D2AH/A9cB/wPWAf8D1QH/
-        A9QB/wPTAf8D4AH/A5kB/wNXAb0MAANIAYYBTQFRATIB+gNDAXcsAANcAdQBCwEnATwB/wNJAYkDEwEa
-        MAABogKjBf8B9gLwAf8B9gLvAf8B9gLvAf8B9ALvAf8B9ALtAf8B9ALtAf8B9ALtAf8B8gLrAf8B8wLr
-        Af8B8gLoAv8C+wH/AaICoQH/BAADiAH3BP8C9AHzAf8B/QH4AfUC/wH2AfMB/wH9AfQB8QH/AfwB8wHw
-        Af8B+wHwAe0B/wH5AfAB7QH/AfgB7wHsAf8B9wHtAeoB/wHyAe0B6gH/AecB5gHnAf8D9QH/A8YB/wNZ
-        AcMIAAMOARMCXwFdAeABNAHEAU8B/wFHAWoBQQH5AzgBXigAAykBPwE+AVIBaQH3AWUBmgGuAf8DWwHQ
-        A0IBdQMGAQgoAAOfAf0B+gLzAf8B6gLiAf8B6QLhAf8B6QLhAf8B6ALfAf8B5wLeAf8B5gLeAf8B5gLd
-        Af8B5ALbAf8B5ALaAf8B4gLXAf8B9QLrAf8BngKcAf0EAAN7AfYB/AL7Af8B7gHsAeoB/wG7AcwB2gH/
-        AZMBswHLAf8BmAG1AcsB/wGWAbUBywH/AZUBtAHKAf8BlQGzAckB/wGUAbMByQH/AY4BrgHHAf8BqQG6
-        AcgB/wHeAtwB/wHuAu0B/wO9Af8DVgHBCAADQAFxAT8BmgE6Af8BTQHpAZIB/wFBAdIBaQH/AUwBZAFM
-        AfMDLgFHKAADUQGiAXIBxAHfAf8BmwHkAfIB/wEmAYoBrQH/A0wBkQMCAQMkAAGfAp4C/QL2Af8B9QLt
-        Af8B8wLsAf8B8wLsAf8B8gLqAf8B8QLpAf8B8QLpAf8B8ALoAf8B7wLmAf8B7wLlAf8B7QLjAf8B+ALu
-        Af8DnAH9BAADewH2Av8B/gH/Ae0B5AHnAf8BTQGzAdgB/wEFAcsB6wH/ARMB0AHtAf8BFgHRAe4B/wEW
-        AdQB8QH/ARcB0gHuAf8BGQHSAe4B/wEQAc8B7gH/AToBpAHMAf8B1QHPAdMB/wH2AfIB8AH/A8AB/wNW
-        AcEEAAMFAQcBVgFYAVYBvAFQAc8BbwH/AXEB6AGrAf8BYgHoAaMB/wFGAc4BaQH/AVkBYgFWAesDJAE1
-        JAADMQFOARIBcgGlAf8BlwHmAfkB/wGGAegB9QH/AUABXQGPAf0DIgEyJAADoAH9AfsC9wH/Ad4C2gH/
-        Ad4C2QH/Ad8C2gH/Ad4C2QH/Ad0C2QH/Ad0C2QH/Ad0C2AH/AdwC1gH/AdsC1gH/AdoC1AH/AfgC8QH/
-        AZ4CnQH9BAADfQH2BP8B6gHkAeYB/wFSAbsB4QH/ASUB3AL/ASoB3QL/ARIB0wH9Af8BDQHQAfcB/wEQ
-        AdQB/AH/ARAB3QL/AQkB3QL/ATgBrgHYAf8B1QHPAdMB/wH3AfMB8QH/A8EB/wNWAcEEAAMuAUgBQwF/
-        ATwB/gGJAe4BtQH/AZYB8wHFAf8BigHrAbgB/wFuAewBrwH/AUUBzAFnAf8BVwFcAVcB3wMaASQgAAMI
-        AQsDUwGtASMBoQHMAf8BnQHTAd0B/wGqAeIB8AH/A1QBqyQAA6gB/QHSAtEB/wEjAiIB/wIXARYB/wEb
-        ARoBGQH/ARcBFgEXAf8BGgIZAf8BHAIZAf8DHAH/ARoCGwH/ARMBFgEXAf8DHwH/AcsCygH/A6gB/QQA
-        A30B9gT/AekB5wHpAf8BYQG3AeEB/wFgAdAB/gH/AWAB1QL/AT8BqQHcAf8BRAFiAYcB/wEXAZ8B2gH/
-        AQABwQL/AQABvAL/ATUBpQHXAf8B2AHUAdYB/wH4AfQB8gH/AsIBwwH/A1YBwQMCAQMDUAGaAWEBzgGC
-        Af8BoQH6AdEB/wFRAc0BawH/AW0B5gGlAf8BlQHzAcgB/wFxAfIBuAH/AUQByAFiAf8BWwFeAVsB0AMU
-        ARwgAAMSARgDVgGzAWUBxgHhAf8B8AP/AY4BmgGiAf8DMwFSAw8BFBwAA6gB/QHGAsgB/wEAAgEB/wMA
-        Af8DAAH/AgMBAAH/AwAB/wMAAf8DAAH/AwAB/wECAgAB/wMAAf8BvAK9Af8DqAH9BAADfQH2BP8B6QHo
-        AesB/wFkAbkB4QH/AW4B1QH+Af8BcAHdAv8BZgGsAcoB/wFgAU0BSQH/ATcBnQHJAf8BAAG4Av8BAAGv
-        Av8BNgGiAdcB/wHaAdUB1gH/AfoB9gH0Af8BxALFAf8DVgHBAxwBJwFRAYIBPwH3AZgB/AHJAf8BXgGy
-        AXMB/gFYAWEBVQHkAUIBcAFCAfUBYQHjAZgB/wGRAfkBzAH/AXEB9wHBAf8BQAHDAVkB/wFVAVcBVQG3
-        AwoBDSAAAwoBDgNPAaUBjQG+Ac8B/wGYAccB4AH/AUABZAF8AfUBWAJcAdEDGgElGAADqAH9AcoBzwHQ
-        Af8BCwETARQB/wMAAf8BOAE7ATQB/wG9AbYBlgH/ARYBKAEkAf8BHwElARwB/wEmASIBFwH/AwAB/wFi
-        ATABDwH/AwAB/wHCAr8B/wOoAf0EAAN9AfYE/wHmAecB6wH/AWoBuwHiAf8BlwHkAv8BlgHoAv8BkAHH
-        Ad0B/wGLAZIBkwH/AWEBvAHeAf8BHAHFAv8BFAHAAv8BPAGmAdgB/wHXAdQB1wH/AfsB9wH1Af8DxgH/
-        A1YBwQNHAYIBTwHQAW8B/wFUAdUBdAH/AVgBWgFYAcADAAEBAy0BRQFaAWEBWAHiAUYBywFiAf8BgQH5
-        AcYB/wFvAf4BygH/ATkBwAFSAf8DUgGpAwQBBSAAAwoBDgNXAcUBRwGUAbsB/wFFAZgBuwH/ASYBKwEw
-        Af8DUAGfAwABARQAA6gB/QHRAswB/wG4AZgBXwH/AWUBZgFQAf8BtgK4Bf8BTgJYAf8BXgFXATwB/wFk
-        AWMBSwH/ATcBKwEWAf8BzgFnASYB/wFDARsBBwH/AckBvgG9Af8DqAH9BAADfwH2BP8B8QHwAfEB/wGD
-        AbkB2gH/AWIBtwHeAf8BZgG4Ad4B/wFmAb8B5wH/AXQBywHzAf8BVwG7AegB/wFCAa4B4AH/ATgBqgHc
-        Af8BXwGqAdEB/wHhAd8B4AH/AfoB9wH2Af8DyAH/A1YBwQFWAWUBVgHpATkB0AFXAf8BWQFbAVkBxAMN
-        ARIIAAMcASgBVAFWAVQBqwEvAbQBOwH/AWMB8gGzAf8BZwH/AdAB/wE0AbsBSAH/A0sBjiQAAj4BPwFs
-        AYABdAFxAf8BkwEdARMB/wEYAgAB/wEnAQUBAAH/A0ABcBQAAaYCqAH9AdEBzAHKAf8B1wGvAW0B/wH8
-        AeEBrgH/AfYC9wH/AfsB/gL/AeQB1wHFAf8BywGvAXEB/wGPAW8BTQH/AcwBkgFBAv8BkQEzAf8ByQFB
-        AQkB/wHKAb0BuwH/AaUCqAH9BAADgQH2BP8B+wH6AfkB/wHmAeoB7gH/AZ8BpwGxAf8BogGnAa4B/wGf
-        AacBrwH/AcABzAHXAf8BsAG1Ab0B/wGuAa0BswH/AZ8BoQGoAf8B3gHfAeMB/wHuAu0B/wP1Af8DyQH/
-        A1YBwQE4AXUBNQH2AVkBXAFZAc8DFAEbEAADBAEFAT0BPgE9AWoBOAF3ATYB9gFOAegBlgH/AV4B/wHS
-        Af8BLQG4AT4B/wFFAUYBRQF+IAADAQECA0cBggG+AVsBQQH/AW0BFAEQAf8BEwIAAf8BRwEnASIB+QEs
-        AisBQxAAAacCqAH9AdABygHJAf8BzQGhAV8C/wHcAZ0B/wH9AeUBwQH/AfYB4wHNAf8B/gHgAa4C/wHa
-        AZoB/wH5AcABawH/AfwBpwFIAv8BgAEoAf8B0AE+AQQB/wHJAbwBugH/AaQCqAH9BAADgQH2BP8D9wP/
-        Af4B/wHbAdYB1AH/AbsBtQGyAf8ByQHCAcAB/wG7AbUBsgH/AcwBxwHEAf8BuwG1AbIB/wHQAcsByAH/
-        AfcB9QH0Af8C6gHpAf8D9gH/A8sB/wNWAcEDGAEhAxEBFxwAAyQBNgFaAV4BWgHVATcB1AFjAf8BWgH8
-        Ab4B/wEpAbcBOwH/AzwBZiAAAwIBAwNTAaoBxgFqAVAB/wFJAQkBBgH/ARoCAAH/AV0CWQHXAxgBIQwA
-        AacCqAH9Ac8BygHIAf8BzQGXAU0C/wHLAYUC/wHOAY4C/wHPAZAC/wHNAY0C/wHEAXMC/wG2AVgB/wH8
-        AZYBOwH/AfoBZAEcAf8ByAEvAQAB/wHIAboBuQH/AaUCqAH9BAADgQH2BP8D+QH/A/oB/wH5AvoB/wPL
-        Af8BuAK2Af8BwQK/Af8BuAK2Af8DxAH/AfAC8QH/Ae4C7wH/A+sB/wP5Af8DzQH/A1YBwSgAAxABFQFP
-        AVABTwGbASQBvgE8Af8BUAH1AaQB/wE2AagBQAH9AzEBTiAAAxABFgFcAlkBzAG5AV0BPwH/ASoCAAH/
-        AS4BBwEAAf8BUQJQAZ8MAAGnAqgB/QHNAcUBxAH/AdABggEuAv8BuQFTAv8BvwFkAv8BwQFnAv8BvAFe
-        Av8BsAFNAv8BmAE3Af8B/QFtASAC/wFIAQQB/wHNARoBAAH/AcYBtgG1Af8BpQKoAf0EAAOFAfYE/wP7
-        Af8D+QH/A/oB/wH6AvsB/wPlAf8D1QH/A+EB/wP0Af8D8QH/A+0B/wPrAf8D9wH/A88B/wNXAcIwAAE5
-        AToBOQFgAVgBZAFYAeMBOQHdAV4B/wFQAXABUQHtJAADHQEqAWoCWAHpAZ8BSAEmAf8BFQIAAf8BSgEI
-        AQAB/wM3AVsIAAOoAf0B1ALLAf8BmAFSASsB/wG0AXEBOgH/AbMBgwFDAf8BtAGGAUQB/wGzAYIBQQH/
-        AbMBbQE5Af8BswFfATEB/wGzAU0BJQH/AbUBOAEVAf8BlwEkARMB/wHLAb8BvgH/AacCqAH9BAADkwH4
-        IP8D/QH/A/wB/wP6Af8D+QX/A9MB/wNXAcI0AAMdASkBVwFaAVcBxQFJAXABSQHvKAADKgFAAYUBSwFI
-        AfYBgAE1ARgB/wESAgAB/wFgAVQBUQHrCAABowKkBf8B2wHcAeAB/wLYAd4B/wLZAd0B/wHYAdkB3QH/
-        AdgB2QHeAf8B2AHZAd4B/wHYAdoB3gH/AdgB2wHfAf8B1wHcAeAB/wHZAdwB3wL/AvwB/wOiAf8EAANb
-        AcsDrQH+A7UB/QO1Af0DtQH9A7UB/QO1Af0DtQH9A7UB/QO1Af0DtQH9A7UB/QO2Af0DtQH+A24B9QM7
-        AWVsAAM7AWQBfQFIATgB9gFZATcBMwH1AVICUQGnCAADXgHdA24B7wFtAm4B7QNtAe0DbQHtA20B7QNt
-        Ae0BawJtAe0DawHtA2sB7QFqAmsB7QFrAmoB7gNrAe8DXwHgkwABAQMEAQUDEAEWAykBPwM+AWwDRgGA
-        A0QBewM4AVwDIAEuAwoBDQMBAQIMAAFaAl0B0wFMAX8BjAHzAVIBcAF7Ae8BUgFwAXsB7wFSAXABewHv
-        AVIBcAF7Ae8BUgFwAXsB7wFSAXABewHvAVIBcAF7Ae8BUgFwAXsB7wFSAXABewHvAVIBcAF7Ae8BUQF7
-        AYkB8gFbAl4B2QsAAQEDBgEIAwoBDQMKAQ0DCgENAwoBDQMKAQ0DCgENAwoBDQMKAQ0DCgENAwoBDQMH
-        AQoDAwEECwABAQMGAQgDCgENAwoBDQMKAQ0DCgENAwoBDQMKAQ0DCgENAwoBDQMHAQoDAwEEEwABAQMH
-        AQkDFQEdAzkBXwNTAbACWAFhAeYBXwGQAZkB+wFZAagBtQH9AU4BXQFmAfADWQHSA1IBqQNGAYADJAE2
-        AwQBBggAATMBoAHSAf8BKQH7Av8BHwHxAv8BIgHwAv8BIwHwAv8BIwHxAv8BIwHxAv8BIwHxAv8BIwHx
-        Av8BIwHwAv8BIwHwAv8BIQHwAv8BJwH7Av8BNwGsAdgB/wQAAwQBBQMkATYDRAF5A0oBiwNKAYsDSgGL
-        A0oBiwNKAYsDSgGLA0oBiwNKAYsDSgGLA0oBiwNHAYIDMwFSAwsBDwMEAQUDJAE2A0QBeQNKAYsDSgGL
-        A0oBiwNKAYsDSgGLA0oBiwNKAYsDSgGLA0UBfwMpAT8DAwEECAADBAEFAyQBNgNEAXoBXQFeAWEB2gFd
-        AXoBjwH8Aa8B1QHjAf8BxAHyAf0B/wG3AfAC/wGqAf4C/wGfAf0B/gH/AYgB2gHlAf8BWgGHAaMB/gFB
-        AVIBZQH0A1YBuQM1AVcDCwEPBAABMAF9AbMB/AEZAeIC/wEQAdkC/wESAdgC/wERAdcC/wETAd8C/wEU
-        AeUC/wEUAeUC/wEUAeAC/wESAdkC/wETAdkC/wEQAdkC/wEXAeMC/wEyAYMBtwH8BAADHQEqAbUBOwEA
-        Af8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wG1
-        ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8DUgGpAzUBWAMdASoBtQE7AQAB/wG1
-        ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEA
-        Af8BtQE7AQAB/wG1ATsBAAH/A0sBjgMUARsDAAEBBAADHQEqAbUBOwEAAf8B8wFTAQAB/wGVAb8B0wH/
-        Ae8D/wHUAfsC/wGpAeYC/wGSAdkC/wGOAesC/wGNAfMC/wGdAf0C/wGrA/8BaQHEAdcB/wFfAR4BAAH/
-        A1MBrQM1AVgEAAEyAX0BswH8ATMB4AL/ASYB1QL/ARoB0wL/AQ8B0AL/AQEBngH2Af8BAAGJAeYB/wEB
-        AYoB5QH/AQIBmgHzAf8BCQHJAv8BCgHMAv8BBwHJAv8BDQHUAv8BMAGAAbcB/AQAAbUBOwEAAv8BaQEH
-        Af8BtQE7AQAC/wGoAVMC/wGnAVIC/wGmAVAC/wGkAU0C/wGiAUkC/wGgAUUC/wGdAUAC/wGbATwC/wGb
-        ATwB/wHlAUIBGAL/AZsBPAH/AbUBOwEAAf8DSAGIAbUBOwEAAf8BtQE7AQAC/wFvAQwC/wGvAV8C/wGl
-        AU4C/wGkAUwC/wGjAUoC/wGgAUYC/wGfAUQC/wGdAUAC/wGbATwB/wG1ATsBAAH/A1QBrwM2AVkDGwEm
-        BAABtQE7AQAC/wFpAQcB/wH7AW0BDAH/AZgBwwHYAf8B2QP/AasB5gL/AYYB0wL/AWkBygL/AW4B3QL/
-        AWsB4gL/AYEB6AL/AZEB9wL/AWEBwgHbAf8BagE8ARYB/wHpAU8BAAH/A0gBiAQAATIBfAG0AfwBRQHg
-        Av8BOAHWAv8BKQHUAv8BGwHbAv8BAAGAAeMB/wIAAW0B/wIAAWcB/wEAAWMB3AH/AQABxwL/AQABvgL/
-        AQABuwL/AQIBxgL/AS0BfgG3AfwEAAG1ATsBAAL/AXMBFQH/AbUBOwEAAv8BsgFmAv8BsQFlAv8BsQFk
-        Av8BrwFgAv8BqwFaAv8BqAFUAv8BpwFRAv8BpAFMAv8BogFIAf8B5QFFAR0C/wGiAUgB/wG1ATsBAAH/
-        A0sBkAG1ATsBAAL/AWoBBQH/AbUBOwEAAf8BtQE7AQAC/wGvAV8C/wGuAV0C/wGtAVsC/wGqAVYC/wGo
-        AVIC/wGlAU4C/wGjAUoB/wHlAUYBHwH/AbUBOwEAAf8DTAGRAxQBGwQAAbUBOwEAAv8BcwEVAf8B+wFt
-        AQwB/wGJAb8B2wH/AbkB8AL/AYwB1gL/AVsBxAL/AUwBvAL/AVgBzwL/AVUB0wL/AWAB2gL/AW8B5wL/
-        AVABuAHdAf8BagE/ARsB/wHpAU8BAAH/A0sBkAQAATIBfAG0AfwBUAHfAv8BSAHYAv8BNwHTAv8BKwHc
-        Av8BDAGvAfMB/wEAAQcBVgH/AQABAgFLAf8BAAGVAeoB/wEAAbsC/wEAAbAC/wEAAa4C/wEAAbkC/wEr
-        AX0BtwH8BAABtQE7AQAC/wGIAScB/wG1ATsBAAL/Ab4BhwL/Ab4BhgL/AbwBgwL/AboBcwL/AbcBbgL/
-        AbMBZwL/AbABYQL/Aa0BXAL/AaoBVwH/AeUBSQEkAv8BqQFUAf8BtQE7AQAB/wNLAZABtQE7AQAC/wGS
-        AS8C/wF0ARIB/wG1ATsBAAL/AboBcwL/AbgBbgL/AbYBbAL/AbQBaAL/AbABYQL/Aa8BXwL/Aa0BWwH/
-        AeUBSwEoAf8BtQE7AQAB/wNUAa8DNQFYAwMBBAG1ATsBAAL/AYgBJwH/AfsBbQEMAf8BaQG3Ad4B/wGX
-        Ad8C/wFeAcUC/wEzAbAC/wE0Aa8C/wFLAcQC/wE3AcAC/wFHAcoC/wFXAdcC/wFAAbAB4AH/AWoBQwEh
-        Af8B6QFPAQAB/wNLAZAEAAE0AXwBtAH8AWQB4wL/AVwB3AL/AUsB2QL/AToB4AL/AQQBawG3Af8CAAEU
-        Af8CAAEQAf8BAAFYAaoB/wECAb0C/wEDAbMC/wEAAbAC/wEGAbsC/wEvAX4BtwH8BAABtQE7AQAC/wGV
-        ATsB/wG1ATsBAAL/AcgBmgL/AcgBmAL/AcYBlgL/AcQBkAL/AcABiwL/Ab0BhAL/AbkBcgL/AbYBawL/
-        AbIBZgH/AeUBTQErAv8BsAFhAf8BtQE7AQAB/wNLAZABtQE7AQAC/wGfAUQC/wGfAUQC/wFrAQYB/wG1
-        ATsBAAL/AcMBjgL/AcABiQL/Ab4BhAL/AboBcwL/AbgBbgL/AbUBagH/AeUBTQErAv8BsAFhAf8BtQE7
-        AQAB/wNMAZEDEwEaAbUBOwEAAv8BlQE7Af8B/AFuAQwB/wFSAa4B4AH/AWkBzQL/AUwBvAL/AU0BvgL/
-        AVsByAL/AW8B1QL/AVsBywL/AUQBwgL/AT8BxgL/ASoBpgHiAf8BcAFKASkB/wHrAVABAAH/A0sBkAQA
-        ATgBfQG1AfwBigHqAv8BgAHiAv8BYwHeAv8BVQHlAv8BFwGZAc8B/wEAAQ8BJAH/AQABCgEeAf8BAQGJ
-        AcMB/wEbAcUC/wEcAbsC/wEYAbkC/wEfAcMC/wE1AYABuAH8BAABtQE7AQAC/wGhAVAB/wG1ATsBAAL/
-        AdMBrAL/AdMBrQL/AdEBqQL/Ac4BpAL/AcsBngL/AccBlQL/AcQBkAL/AcABigL/Ab0BhAH/AeUBUgEz
-        Av8BugFzAf8BtQE7AQAB/wNLAY8BtQE7AQAC/wGrAVgC/wGrAVgC/wGTATEB/wG1ATsBAAL/Ac4BoAL/
-        AcwBnAL/AckBlwL/AcUBkgL/AcIBiwL/Ab8BhwH/AeUBVAE4Av8BugFzAf8BtQE7AQAB/wNUAa8DNQFY
-        AbUBOwEAAv8BoQFQAf8B/gFvAQwB/wFNAaoB4QH/AZQB3gL/AZkB4wL/AZAB4gH+Af8BZAHJAfsB/wFr
-        AdAB+wH/AYsB3QH9Af8BmgHiAv8BjQHdAv8BPwGoAeIB/wGmAW4BRwH/AfEBUgEAAf8DSwGPBAABQwGg
-        AdIB/wGjAfgC/wGZAe4C/wGGAeoC/wFuAegC/wFbAecC/wE0AcYB7gH/ASgBwgHsAf8BNQHdAv8BPgHQ
-        Av8BNwHIAv8BNwHJAv8BRwHYAv8BQAGnAdgB/wQAAbUBOwEAAv8BrgFmAf8BtQE7AQAC/wHcAb4C/wHc
-        Ab4C/wHaAbkC/wHYAbUC/wHVAa8C/wHRAakC/wHOAaIC/wHKAZoC/wHIAZcB/wHlAVcBPgL/AcMBjgH/
-        AbUBOwEAAf8DRAF8AbUBOwEAAv8BuAFuAv8BuAFuAv8BuAFuAv8BiAEfAf8BtQE7AQAC/wHVAa0C/wHS
-        AagC/wHQAaMC/wHNAZ4C/wHKAZkB/wHlAVoBQQL/AcUBkgL/AcUBkgH/AbUBOwEAAf8DQgF1AbUBOwEA
-        Av8BrgFmAv8BbwEMAf8BcAGjAbwB/wFCAZ0BzgH/AWABvQHoAf8BlwHaAfgB/wGPAcoB7QH/AZYB0wH0
-        Af8BkQHUAfUB/wFdAboB5wH/ATgBlgHKAf8BQgFdAY0B/wHsAbQBgwH/AfUBVAEAAf8DRAF8BAABWQJc
-        AcwBXAGIAZ8B+AFPAXcBhwHzAUwBdwGHAfMBTAF3AYcB8wFNAXcBhwHzAU8BewGIAfMBTQF7AYgB8wFT
-        AXQBgwHxAVEBhAGaAfcBVgGqAdQB/wFYAZABvQH+AVMBhwGfAfgBWQJdAdIEAAG1ATsBAAL/AbsBiAH/
-        AbUBOwEALf8BtQE7AQAB/wMlATcBtQE7AQAC/wHEAZAC/wHEAZAC/wHEAZAC/wGqAVYB/wG1ATsBAAL/
-        AfYB7B3/AbUBOwEAAf8DLgFHAbUBOwEAAv8BuwGIAv8BbwEMBf8D/gH/Ab4B2AHrAf8BVQGnAdUB/wFX
-        AbAB3AH/AVoBtAHeAf8BRAGYAccB/wGZAbkB0AH/AfAB8QHyAf8D/AH/A/4B/wH2AVQBAAH/AyUBNwQA
-        AxABFQMcASgDGgEkAxkBIwMaASUDGwEmAxsBJgMbASYDEgEYA0gBhQG7AacBqAH/A2UB5QMuAUcDDQER
-        BAABtQE7AQAC/wHJAZ8C/wGyAWsB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEA
-        Af8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8DKgFAAwQBBQG1
-        ATsBAAL/AdIBqAL/Ac4BoAL/AdIBqAL/AdIBqAL/AZkBOgH/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/
-        AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wNAAXEDBwEKAbUBOwEAAv8ByQGf
-        Av8BsgFrAv8BbwEMAv8BbwEMAv8BbwEMAf8B/gFvAQwB/wH+AW8BDAH/AfwBbgEMAf8B/QFuAQwB/wH+
-        AW8BDAL/AW8BDAL/AW8BDAL/AW8BDAH/AyoBQAMEAQUoAANIAYQB0wHAAb0B/wNhAdoDFQEdCAABtQE7
-        AQAC/wHVAbUC/wHVAbUC/wHVAbQC/wHWAbUC/wHVAbMC/wHVAbMV/wG1ATsBAAH/AyoBQAMEAQUEAAG1
-        ATsBAAL/Ad4BvgL/Ad4BvgL/Ad0BuwL/Ad4BvgL/Ad0BuwL/Ad0BuxH/AbUBOwEAAf8DKwFCAwcBCgMA
-        AQEEAAG1ATsBAAL/AdUBtQL/AdUBtQL/AdUBtAL/AdYBtQL/AdUBswL/AdUBsxX/AbUBOwEAAf8DKgFA
-        AwQBBRAAA0ABbgNYAbwDTgGYAxMBGggAAwgBCwNaAcUB3wHPAdAB/wNYAbwMAAG1ATsBAAL/AeABxwL/
-        AeABxwL/AeABxwL/AeABxwL/AeABxwX/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7
-        AQAB/wMdASoDBAEFAwIBAwQAAbUBOwEAAv8B5gHNAv8B5gHNAv8B5gHNAv8B5gHNAv8B5gHNBf8BtQE7
-        AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wMdASoDBAEFDAABtQE7AQAC/wHgAccC/wHgAccC/wHg
-        AccC/wHgAccC/wHgAccF/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8DHQEq
-        AwQBBQMCAQMQAAM2AVgBkQKJAfsBuAKkAf8DVgG2AyABLwMdASoDUgGnAc4BvgG/Af8BngKPAfwDNwFa
-        DAABtQE7AQAV/wG1ATsBAAH/AysBQgMHAQoDAwEEAwMBBAMCAQMDAAEBDAABtQE7AQAV/wG1ATsBAAH/
-        AysBQgMHAQoDAwEEAwIBAwMAAQEQAAG1ATsBABX/AbUBOwEAAf8DKwFCAwcBCgMDAQQDAwEEAwIBAwMA
-        AQEcAANGAX8BsgKlAf8BxwK2Af8BjwJ/Af4BpAKWAf0B1ALEAf8BwwK5Af8DTAGPEAADAQECAbUBOwEA
-        Af8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wMdASoDBAEFAwIBAxwAAwEBAgG1ATsBAAH/
-        AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8DHQEqAwQBBSAAAwEBAgG1ATsBAAH/AbUBOwEA
-        Af8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8DHQEqAwQBBQMCAQMvAAEBAzcBWgNbAcsBewJ0AfEBewJ5
-        AfIDXgHQAzsBZQMBAQIQAAMKAQ4DHwEsAyUBNwMtAUYDOQFfA0IBdANIAYgDTgGXA1IBpgNWAbMDVwG9
-        A0EBcxQAAx0BKQJaAVwBzQI9AZgB+QM9AWkYAAM3AVsCQgGJAfUCXQFiAdoDJQE3EAADCAELAzcBWgFc
-        AlkByQF5AUQBPQH0AZUBRAEjAfoBkwFBASMB+gF8AUIBNAH1AV0CWgHTAT8CPgFsAw0BEigAAwoBDgM2
-        AVkDVQGxA1QBrgM0AVUDDAEQDAACWQFdAdIBMwFiAXkB9gE5AXABiwH4ASIBeQGWAfsBJAF/AbEB/gEf
-        AZ0B0wH/ASQBpgHeAf8BJwGxAecB/wEoAboB7QH/ASYBxgH1Af8BIwGsAfQB/wEfATYBfQH8A1QBrwMR
-        ARcIAAMeASsCWQFcAcwCIwHxAf8CDwH7Af8CJQGhAfsDPgFrEAADNwFbAjgBjQH2AkQB9wH/AlYB9QH/
-        AlkBXwHXAyYBOAgAAxkBIwNWAbMBvQFCARUB/wHQAVcBFQH/AcsBSAEBAf8BwQE6AQAB/wG+AT8BAAH/
-        AcIBRgECAf8BwQFCAQMB/wGyAS0BAQH/A1sByAMgAS8cAAMdASoDSAGIA1gB3QGGATkBTwH8AeQBbgGP
-        Af8BzAFzAYIB/wFwAk0B+gNTAaoMAAFBAZUBuwH5AaED/wGlA/8BngP/AZkD/wGMA/8BcAP/AV4D/wFL
-        AfwC/wE1AfkC/wErAd8B/QH/ARwBqwL/AQABSAHOAf8DWgHYAyoBQQQAAlwBYAHUAisB8wH/AgAB+gH/
-        AgAB7AH/AgUB8QH/AiEBowH7Az4BawgAAzYBWQI2AY0B9gIvAe8B/wIwAewB/wJBAfYB/wJmAfcB/wJX
-        AWIB3wQAAxgBIgFgAlsB1gHXAWEBJAH/AdgBWgEPAf8BwAE8AQAB/wHIAVgBHgH/AdgBkAFZAf8BugFG
-        AQ0B/wGnAS0BAAH/AaoBNAEAAf8BuAE/AQAB/wHCAUABAwH/AWUBWAFXAeUDIwEzDAADBgEIAzsBZANX
-        AcIBZgJMAfMBuAFGAV0B/wHkAWkBjwH/Ae0BjwGpAf8B9wGJAaEC/wGgAaYB/wH3AaQBqAH/A1oB3gwA
-        AVQBbgF/Ae4BxAP/AcQD/wGzA/8BqQP/AZwD/wGKAfsC/wFsAfYC/wFaAfEC/wFIAfAC/wE1AdsB9wH/
-        ARoBrgH7Af8BAAGpAv8BAgFxAecB/wNaAdMDCQEMAk4BewHyAiUC/wIAAfgB/wIAAesB/wIAAecB/wIA
-        AesB/wIxAZkB+AI5AToBYAMyAVECPgGHAfQCHgHpAf8CJAHmAf8CMQHqAf8COwH0Af8CbAL/AlEBlgH3
-        AwcBCgFVAlMBrQHcAWgBKgH/AdoBWgELAf8BxAE7AQAB/wHEATwBAAH/AesBywGzAf8B+AH/Af4B/wHj
-        Aa0BjAH/Aa4BKAEAAf8BrAEyAQAB/wGlAS4BAAH/Aa8BNwEAAf8BwQE/AQMB/wFcAloBzQMPARQEAAMJ
-        AQwDWQHHAYkBRgFWAf4BzQFXAWsB/wHkAYMBmAH/AecBpwG1Af8B4AHHAcsB/wHaAckBzAH/AeoBhQGa
-        Av8BkwGaAf8B9wGcAaAB/wFbAloB2QwAAVoBZgF0AecBwgP/AccD/wG3A/8BrgP/AaQD/wGZAf4C/wGI
-        AfsC/wFqAfYC/wFYAfEC/wFGAe0C/wEzAeQC/wEgAewC/wEgAdwC/wFRAVkBZAHsAxYBHwMxA04BfQHy
-        AhoB+gH/AgAB8QH/AgAB5QH/AgAB3wH/AgAB4wH/AhUBtgH9AiEBmgH7AgsB4wH/AhYB3wH/AiMB5AH/
-        AjEB7gH/AlUB+QH/AlIBigH0AzgBXgMtAUUBxAFSASEB/wHoAWoBGwH/Ac8BRAEAAf8BywFEAQAB/wHG
-        AT0BAAH/Ad8BnwFtAf8B7wHfAdAB/wHVAYUBSwH/AbQBMAEAAf8BsQE2AQAB/wGsATMBAAH/AaUBLgEA
-        Af8BtwE+AQAB/wGyAS0BAQH/AT4CPQFqBAADHQEqAYUBUQFSAfcB5gGVAaQB/wHlAb8BxQH/AeUB2gHb
-        Af8B5AHjAeEB/wHlAeQB4QH/AeEB0gHVAf8B6wGFAZkC/wGVAZsB/wH1AZcBnAH/AVsCWgHZDAABWgFg
-        AWQB3gHIA/8B0gP/AcED/wG4A/8BrgP/AaUD/wGZA/8BiAH7Av8BagH2Av8BWAHxAv8BRwHuAv8BNAHv
-        Av8BJwHiAv8BQAFMAXAB8wMhATEEAAMvAUoCUwF+AfECEwH1Af8CAAHqAf8CAAHfAf8CAAHXAf8CAAHb
-        Af8CAAHcAf8CCAHXAf8CFwHeAf8CJAHnAf8CQwH0Af8CSAGNAfYDNgFZBAADVAGvAeYBcgEvAf8B4gFV
-        AQAB/wHVAUkBAAH/AdIBSgEAAf8ByAE5AQAB/wHOAVsBHgH/AeUBsAGJAf8BvgE3AQAB/wG5ATkBAAH/
-        AbUBOQEAAf8BsgE2AQAB/wGsATIBAAH/AaoBMwEAAf8BwAFBAQQB/wFdAlkB0gQAAxoBJQFwAUcBWQH1
-        Ae0B0wHXAf8B9AH6AfcB/wH1AfQB8wH/AfgC9QH/AvoB+QH/AfMB5gHqAf8B6wGEAZgB/wH+AZQBmgH/
-        AfYBlgGbAf8BWwJaAdkMAAFZAl0B0gHMA/8B2gP/AckD/wHBA/8BuAP/Aa8D/wGkA/8BmQP/AYgB+wL/
-        AWoB9gL/AVkB8QL/AUYB8AL/ATcB7gL/ATcBXAGIAfgDLgFICAADMAFMAksBfQHyAg0B8AH/AgAB4AH/
-        AgAB1QH/AgABzAH/AgABzAH/AgAB1AH/AhUB3wH/AjIB7gH/Aj8BjQH2AzcBWwgAAWgBVwFWAegB8wGD
-        ASsB/wHgAU0BAAH/AdkBTAEAAf8B1QFGAQAB/wHPATwBAAH/AdkBhQFMAf8B9AHvAekB/wHJAVUBGQH/
-        Ab4BNgEAAf8BuwE7AQAB/wG0ATgBAAH/AbEBNgEAAf8BqgExAQAB/wHAAUQBAwH/AXkBOAExAfYEAAMa
-        ASUBcAFHAVgC9QHcAeAR/wH5AesB8AH/AekBggGWAf8B/gGTAZkB/wH2AZUBmQH/AVsCWgHZDAABWQJb
-        AcQBzgH8Af4B/wHhA/8B0QP/AcoD/wHBA/8BtwP/Aa4D/wGkA/8BmAP/AYgB+wL/AWsB9QL/AVkB8wL/
-        AUYB9wL/ASoBbQGaAfwDOgFhDAADKgFAAjsBjAH3AgMB5wH/Ah8B6AH/AjcB6gH/AjcB6gH/AiwB5wH/
-        Ah4B5wH/AikBngH6AjABMQFNDAABgwFSAUIB9AH4AYQBJgH/AeIBSwEAAf8B3wFOAQAB/wHhAWoBKAH/
-        AeEBcwE4Af8B3wGZAWQB/wH3AfgB9gH/AfQB7gHoAf8B3wGmAYMB/wHLAU0BDwH/AcQBQwECAf8BtgE6
-        AQAB/wGtATMBAAH/Ab8BQwEBAf8BlQFAASIB+gQAAxoBJQFwAUcBWAH1AfcB3gHiEf8B+QHsAfAB/wHn
-        AYIBlQH/Af0BkwGZAf8B9gGVAZkB/wFbAloB2QwAA1YBtgHRAfgC/wHyA/8B2gP/AdED/wHKA/8BwAP/
-        AbgD/wGuA/8BpAP/AZgB/gL/AYgB+wL/AWsB9wL/AVgB/gL/AScBfwGyAf4DRgGADAADMgFQAikBkAH5
-        AjcB9AH/AoUC/wKPAv8CjgL/AocB/gH/AkwB9QH/AioBrQH8AzgBXQwAAYMBUgFCAfQB+wGCASIB/wHo
-        AVQBAAH/Ae4BlwFVAf8B7wGpAXMB/wHrAZsBYQH/Ad4BjQFSAf8B4gGwAZMB/wHwAeMB3AH/AfwD/wHe
-        AaYBhQH/Ac8BTgERAf8BygFKAQ4B/wG1ATcBAAH/AcEBRgEBAf8BlQFDASMB+gQAAxoBJQFvAUUBTAH1
-        AfYB3gHhEf8B9wHiAegB/wHrAYEBkwL/AZgBngH/AfcBlQGZAf8DWgHYDAABUgJUAaYB2QH4AfsB/wH2
-        AfoB8gH/Ae0B/wH9Af8B3gP/AdAD/wHKA/8BwQP/AbcD/wGtA/8BpAP/AZgB/gL/AYgB+wL/AWsD/wEl
-        AagB2gH/A04BmAgAAzcBWwI6AY0B9wJAAfoB/wKTAv8CoAL/ApYB/QH/ApUB/QH/Ap8C/wKWAf4B/wJf
-        AfsB/wItAZ8B+wM+AWsIAAFpAlgB5gH8AZIBOQH/AfgBpgFjAf8B9gG7AZcB/wHyAa0BgQH/AeoBmwFg
-        Af8B4wGJAUsB/wHgAXIBOgH/AdYBdAFDAf8B9QHtAecB/wHyAeQB2gH/Ac8BXgEoAf8B0wFVARoB/wHH
-        AUgBCwH/Ac0BUQELAf8BeQFEAT0B9AQAAxoBJQFvAUYBTAH1AfYB3wHjBf8B/QH6AfsB/wH4AeAB4wH/
-        Ae8BrgG2Af8B4AFwAY8B/wHgAWYBhAH/Af0BkgGWAf8B9wGTAZgB/wNaAdUMAAJPAVEBnAE6AU8B2wH/
-        ASUBJwHBAf8BWwFmAcEB/wHXAu0B/wHeA/8B0gP/AcoD/wHAA/8BtwP/Aa4D/wGkA/8BmgP/AYwD/wE0
-        Ab8B5wH/A1QBqwQAAzYBWQI5AYkB9gJRAfwB/wKqAv8CtAL/ArAB/QH/AjIB7AH/AisB6gH/AqsB/QH/
-        ArMC/wKsAv8CgQH9Af8CMgGlAfsDPgFrBAABUwJSAagB7wGpAWoC/wHVAbMB/wH7AcABmAH/AfEBrAGA
-        Af8B3wGkAYIB/wHdAakBjAH/AeUBlAFaAf8B3wGEAUQB/wHsAdEBwgH/AfYB8AHsAf8B0gFsATgB/wHS
-        AV0BIwH/AdgBWgEeAf8B4wFaARgB/wFeAlwBzgQAAxoBJQFvAUcBVwH1Ae0BywHPAf8B7wHGAcgB/wHg
-        AYsBkgH/Ac0BXAFrAf8BqgFIAWQB/wFqAT8BaQH/AUIBMwFjAf8BkwFCAVsB/wHoAWQBcAH/AWcBSgFM
-        AfIDOQFfAwYBCAQAAlgBYgHjARUBFAHzAf8CAAHjAf8CAAHCAf8BaAFzAcQB/wHsAf0B+wH/Ad8D/wHX
-        A/8B0QP/AckD/wHCA/8BuQP/Aa4D/wGlA/8BRwHZAfIB/wNYAcADNwFaAkUBfwH0AlwB/QH/ArsC/wLI
-        Av8CxAL/AkIB9AH/AhcBlgH7AigBkAH4AkEB8QH/AsEC/wLGAv8CvwL/ApQB/gH/AkQBmgH4Aj0BPgFq
-        AykBPgHKAW0BPwL/AdkBtAL/AcsBpgH/AekBpQFvAf8B6QHPAcEB/wH2AfUB9AH/AdYBiAFRAf8B2wGI
-        AVAB/wH3AfEB7QH/AecBygG5Af8B0wFmAS8B/wHXAWkBMwH/Ae4BbwEtAf8BzwFGARIB/wM7AWMEAAMa
-        ASUBcwJSAfQBzQFfAWUB/wGvAUsBWwH/AYEBQwFlAf8BQgFBAYEB/wEVATsBhQH/AQQBOQGGAf8BDAFL
-        AZYB/wE0AYYBtgH/AZgBqgG/Af8BxwGHAZ4B/wFiAS8BRgH7A0ABcAQAAisBuQH8AScBKAHyAf8COQHr
-        Af8CAAHeAf8BPgFCAcoB/wH0Af8B9AH/AewD/wHRA/8BuAP/AZkB9QL/AW8B6gH8Af8BVAHaAfYB/wFA
-        AbcB0QH9ATIBlgHCAfsBNgFzAZcB9gNKAYsCSAF7AfYCYwL/AtQC/wLfAv8C0wL/AlIB9wH/AjsBfwH0
-        AzMBUwMtAUUCRAF9AfICVwH0Af8C0gL/AtkC/wLWAv8CqgL/AkMBmwH7AwYBCAFSAlABowHoAagBbwL/
-        AdwBuAH/AfUBvgGVAf8B3gGrAY4B/wHwAeYB4wH/AeUBygG7Af8B7AHZAdEB/wHqAdoB0gH/AdQBhwFT
-        Af8B3QGBAUMB/wHtAYoBRQH/AewBawErAf8BWwJZAcMDDQERBAADGgElAV4BRAFZAfUBSAFAAWgB/wEZ
-        AUQBcgH/AQABTwGkAf8BAAFSAaoB/wESAXABvAH/ATcBpwHaAf8BWAHTAfUB/wFuAfIC/wGBAfsC/wGP
-        Ae0C/wJcAYUB+AMvAUoEAAIiAZoB+gIMAe4B/wEjASIB+AH/AQ4BCwHqAf8BQAFHAbcB/QFlAX8BkgH0
-        AVkBbgF8AewBXAFjAWgB4gFZAlwBzANWAbMDUAGdA0UBfQM5AV8DMAFLAyABLgQAAlkBXAHJAlAB7QH/
-        AskC/wLtAv8CXgH7Af8CMgGFAfYDNgFZCAADLwFKAkcBfgHxAmkB+AH/AusC/wLeAv8CiwHzAf8CWgFe
-        AdUEAAMWAR4BWwJYAcsB6QGoAXAC/wHeAbgB/wH2AcEBmgH/AeABpQGDAf8B5gG7AaQB/wHiAa8BlAH/
-        AdoBjgFZAf8B7AGZAVwB/wH5AaABXQH/AewBgQE7Af8BYAFaAVgB3gMfAS0IAANFAX0BVgGeAdgB/gEm
-        AZoB1wH/AQUBagHBAf8BFQGcAeAB/wE2Ab4B7gH/AVUB4AH+Af8BaAHwAv8BbQHpAv8BbAGxAdoB/gFY
-        AWsBfgHvAVYCWAG5Ay8BSggAAk8BUAGbAhoBmAH8AScBJQHBAf4CWgFhAdwBMAIxAU0DGAEhAxEBFwMJ
-        AQwgAAMWAR8CWQFbAcMCTwHrAf8CXQL/AjYBgQH2AzcBWxAAAzADTAF+AfEChwH9Af8ChAHyAf8CWQFc
-        AcwDHgErCAADFgEeAVUCUwGtAc4BcgFDAf8B9AG8AZEC/wHIAZsB/wH9Ab0BjgH/Af0BtQGFAv8BswGA
-        Af8B9AGdAV0B/wHQAV4BLQH/AVgCVgG8AxwBKAwAAVkBZAF4AesBlgP/AYMB+gL/ATABaQGoAfoBPgF4
-        AaQB+AFaAekC/wFSAcUB9gH/AUYBcAGSAfUCWQFbAcQDQAFxAxEBF1QAAxYBHwJZAVsBwwJBAXsB9AI1
-        ATYBWBgAAzABSwJKAXsB8gJZAVwBzwMdASkQAAMHAQkDLwFKA1YBtgFzAVgBTQHvAaABVgFGAfoBnwFS
-        AUMB+gF+AVMBTwHxAVsCWQHEAzYBWQMKAQ4QAANDAXcBWQFcAV8BzwFSAYUBrQH3AkgBSQGHAzsBZAFZ
-        AV0BYAHXA0sBjgMhATBQAAM4AV4BUwFZAXYB6wJVAVcBugM6AWEDWQHHA1kBzANaAcoDWgHKA1oBygNa
-        AcoDWgHKA1oBygNaAcoDWgHKA1oBygNaAcoDXAHOA1kBwwM0AVUMAAMcASgDVAGrAzMBUjQAAxEBFwM4
-        AV0DTgGZA1YBswNWAbwDVgG7A1UBsgNOAZQDNAFUAwwBEDwAAzQBVAFGAVgBewHvAS8B0QL/AVMBcAGG
-        AfEDYQHuA+IB/wPdAf8D2gH/A9oB/wPYAf8C2wHaAf8C3wHaAf8C3QHaAf8C2AHXAf8D1QH/A9QB/wPT
-        Af8D4AH/A5kB/wNXAb0IAAMYASEBWgFbAVgB4QERAYABNgH/AUwBUwFQAe0DKwFDKAADAQECA0MBdwFl
-        AV4BWwHlAawBaQFKAf0B0QFoAR4B/wHgAW8BHwH/AegBcwEhAf8B6AFxASIB/wHbAWsBIgH/AboBVgEY
-        Af8BcwFFASEB+gFbAVkBWAHZAzgBXRQAAyMBMwNHAYIDIAEuAwEBAgMGAQgDDAEQAwMBBAQAAzIBUQFG
-        AVgBfwHvAS0BzQL/AUEBigGtAfkCPAE9AWgDiAH3BP8D9AH/A/MB/wLxAfMB/wL4AfMB/wLxAegB/wLe
-        Ad8B/wPeAf8C6QHhAf8C8QHoAf8C7gHqAf8C5gHnAf8D9QH/A8YB/wNZAcMEAAMSARkBWgFbAVgB4QEl
-        AU8BAAH/ASUBgAFVAf8BAAGmAagB/wFMAVIBUAHtAy0BRiQAAVACTwGbAbcBfwFSAv4B4wHCAv8B0gGl
-        Af8B6AFoAQQB/wHnAXIBHwH/AfABhgEsAf8B9gGSAUMB/wH1AZoBUgH/AfABmAFTAf8B8gGVAUYB/wHT
-        AWABEAH/AVMBOwEwAfcDOwFkDAADBAEGA1cBugHoAbgBugH/AWQCYQHkA1QBrgNcAckDYAHeA1kBvgM/
-        AW8BWgJcAc0BcAHoAv8BPgGLAawB+AM9AWkEAAN7AfYD+wH/A+oB/wLqAesB/wLxAewB/wLUAdwB/wJI
-        AdQB/wImAecB/wJEAeQB/wJpAdcB/wKkAc0B/wPQAf8C5QHfAf8D7QH/A70B/wNWAcEDFAEbAVkBWwFY
-        AdkBJwFUAQcB/wE8AVEBEAH/AS4BPAEAAf8BFwFvAVgB/wEAAZ4BpwH/AUkBUwFNAe4DLQFGIAABpgF6
-        AU8B+gH4AcgBkQH/AfYB2gG5Af8B7wHDAZgB/wHVAWkBFwH/AdYBkwFSAf8B3gGdAWAB/wHgAZoBXQH/
-        AdIBjAFQAf8B4AGTAVMB/wHtAaABXwH/AfUBjwEzAf8BzgFUAQAB/wNWAbsMAAMzAVIBswKRAfsB9gL6
-        Af8BwAG5AboB/wHIAb0BswH/AeoB4QHRAf8B8AHnAdYB/wHaAdIBwwH/AZUBkAGHAf8BoQGeAZAB/wJf
-        AWMB2wM7AWMIAAN9AfYD/AH/AuwB7QH/A+4B/wL4AegB/wJyAdoB/wIAAfkB/wIAAv8CAAL/AhYC/wJF
-        AfYB/wJzAdgB/wLEAc4B/wL1Ae8B/wPAAf8DVgHBA1gB3QEUAUIBAAH/AT0BSAEOAf8BQAFPARQB/wE+
-        AVIBLAH/AVkBZQEsAf8BJAGFAV4B/wEAAZsBrAH/AUsBUgFQAe0DLQFGHAABzQGZAX8B/gHzAc4BqgH/
-        AfQB2wG+Af8B7AHEAZ8B/wHOAXQBMQH/AdoBoQFkAf8B3AGpAYEB/wHcAaYBdAH/AdkBlwFZAf8B3QGN
-        AUYB/wHfAZMBTQH/Ad8BjQE7Af8B0QFdAQAB/wNYAcAIAAMBAQIDVQGwAfUB3gHgAf8BxAHFAcYB/wHN
-        AccBugL/AfYB3AL/AfMB2wL/AfIB2wL/AfgB4QH/AfkB7QHWAf8BmQGUAYEB/wNEAXoMAAN9AfYD/QH/
-        Au0B7gH/AvUB8QH/AusB4gH/AkMB4QH/AgAB/gH/AgAC/wIAAv8CAAL/AgYC/wI5Af0B/wJ0AdYB/wPk
-        Af8CxwHEAf8DVgHBA1oB2wEnAUQBAgH/ATgBPQEEAf8BPgFEAScB/wJJAVIB/wFbAmkB/wFVAWYBKAH/
-        ARcBcQFZAf8BAAGUAaoB/wFGAU0BSwHvAy4BSBgAAccBkAF1Af4B/QHrAdkB/wH9Ae4B3gH/AfIB0AGt
-        Af8B2wGWAUkB/wHbAaYBaQH/AdYBpQFvAf8B4gGvAYUB/wHiAaUBZAH/AdwBkAFEAf8B3gGVAUgB/wHb
-        AYsBLgH/Ac0BWQEAAf8DVgG+CAADMAFMAZICewH1Ae8B4gHlAf8BwgG6AbUB/wH5AecBygL/AegByQL/
-        AeEBvwL/AeABvwL/AeQBxQL/AfQB1wH/AdABxwGuAf8DWgHYATYCNQFYAxABFQQAA30B9gL+Af0B/wLy
-        AfAB/wL4AfIB/wLoAeMB/wJCAeQB/wIAAv8CAAL/AgAC/wIAAv8CAAL/AgAC/wI0AekB/wLLAd8B/wLO
-        AcQB/wNWAcEDEAEWA1sB1gEwAVEBDQH/AWkBZQFVAf8BUwFQAVMB/wJNAVIB/wFYAWYBZwH/AU4BZQEj
-        Af8BJgGGAWQB/wEAAYwBnwH/AUkBUQFKAe4DKwFDFAABvwGnAWEB/QH/Ae0B2AH/AfwB6wHbAf8B/gHk
-        AckB/wHvAbsBiAH/AewBtgGAAf8B1AGjAWcB/wHWAawBgwH/AecBtAGBAf8B8QGqAVkB/wHmAaABTwH/
-        AdsBjQExAf8BzQFaAQAB/wNWAb4EAAMHAQoDVQGtAfkB1gHTAf8B5wHVAdYB/wHUAcYBuwL/Ad8BtgL/
-        AdMBpAL/AdABngL/Ac4BnQL/Ac8BoQL/AeEBuAH/AeQB0AGxAf8BkwGEAXQB/wHMAZEBiQH/AVsCWAHL
-        AykBPgN9AfYD/QH/Au0B7wH/AvcB8wH/AvEB6gH/AmcB5QH/AgMB/QH/AgAC/wIAAv8CAAH7Af8CAAH4
-        Af8CAAH1Af8CRwHfAf8D6gH/AsoBxgH/A1YBwQQAAw8BFANaAdUBOAFeARkB/wFrAWwBVgH/AWMBXwFj
-        Af8BYAFeAWgB/wFbAWYBYQH/ATcBXwEAAf8BGgGAASoB/wEAAZsBagH/AUsBUwFRAe0DLgFIEAABvwGn
-        AWAB/QH/AesB1gH/Af0B7AHaAf8B/QHnAdAB/wHhAbsBkwH/AecBvAGPAf8B3gGxAYMB/wHSAbIBkgH/
-        AdgBrQGAAf8B5AGbAUgB/wHgAZcBRQH/Ad8BhgEgAf8BzwFbAQAB/wNWAb4EAAMuAUcBngGFAYQB9wH/
-        AeoB3gH/AecBzwHMAf8B0gG/AbYC/wHPAZ4B/wH+AcsBmAH/Af4BzQGgAv8B0QGjAv8BzgGcAv8B1QGf
-        Af8B3QG3AY4B/wGPAY0BigH/AfoD/wHqAagBpAH/AUACPwFvAoEBfwH2AucB/AH/ApsB3QH/AtgB6QP/
-        AfEB/wKdAeYB/wIzAfwB/wIXAv8CEAHyAf8CbwHhAf8CoQHfAf8CrAHeAf8C3wHhAf8C+QH0Af8DxgH/
-        A1YBwQgAAwoBDgNbAdYBNAFhARIB/wFwAXEBWgH/AW0BagFsAf8BNwFaARsB/wE5AWYBGQH/AVgBhwEo
-        Af8BKAGkAWUB/wEAAacBqwH/AUsBUwFQAe0DLQFFDAABwQGoAWAB/QH/AesB1AH/AfwB6wHbAv8B6wHT
-        Af8B8gHWAbQB/wHiAcIBnwH/AecBwgGbAf8B2AGzAYsB/wHdAaoBagH/AeMBnAFJAf8B4QGaAUgB/wHg
-        AXIBDwH/AdEBWQEAAf8DVgG+BAADVwG6AdwBsAGoAf8B2wGyAagB/wHLAaEBngH/AbcBqAGnAf8B8wHE
-        AaMC/wHSAaoB/wH8AdgBvAL/Ad4BwQL/AeQBvwL/AdcBpAH/AbQBjwFmAf8BoAGjAaUC/wHxAfAB/wFg
-        AlwB1AMYASICgQF/AfYC+QL/AsQB6AH/Ar4B2gH/AtgB6gH/AocB8AH/AlIC/wIpAfsB/wKCAeIB/wL+
-        AecB/wL9AesB/wL3AeoB/wLrAegB/wP0Af8DyAH/A1YBwQwAAw8BFANZAdcBOAFnARYB/wFCAWUBHAH/
-        ATcBYgEcAf8BXwJhAf8BZQGAAYEB/wFTAYkBJwH/ARQBmAFUAf8BAAGeAakB/wFLAVIBUQHtAysBQwgA
-        AbwBiQFqAfwB/wHqAdAB/wH9AesB2AL/AeYBywH/Af4B1QGpAf8B8QHDAZsB/wHpAbUBiQH/AeIBnAFS
-        Af8B9AGmAVMB/wH4AakBUgH/AecBnwFKAf8B3wF0ARIB/wHQAVoBAAH/A1YBvgQAAWMCYQHkAccBngGb
-        Af8B5AHIAccB/wHzAuYB/wHUAdUB1wH/AcQBtAGsAf8B8gHJAa0C/wHfAcgC/wHeAcsB/wH7AdoBvAH/
-        AcwBpgGLAf8BjgGDAYEB/wHkAeMB5QH/AcgCqAH9A0ABcAQAA4EB9gb/AfkB/wLbAeUB/wKNAdIB/wKG
-        AfYB/wJeAv8CLQH2Af8CqwHnAf8C/AHtAf8C7AHtAf8C6gHrAf8D6AH/A/YB/wPJAf8DVgHBEAADCgEO
-        A1oB2AEiAWkBAAH/AW8BiAFYAf8BbwFmAXAB/wFUAVIBWQH/AVYBaAFlAf8BSgGIASIB/wEYAZkBWwH/
-        AQABlQGrAf8BSwFTAVEB7QM0AVUEAAG8AYwBbQH8Af8B6gHPAf8B+QHOAacB/wH4AcoBpAH/AesBvAGY
-        Af8B5QG7AZ4B/wHrAcQBqgH/Ae4BwQGhAf8B6gGyAYsB/wHvAagBawH/Ae8BkgFBAf8B7QGAAQ4B/wHR
-        AV0BAAH/A1YBvgQAAy0BRgNTAaoBoQGCAYAB+QHvAcMBwAL/AekB5wH/AdUB1AHVAf8BvwG0Aa8B/wHO
-        AbIBpQH/AdABrQGgAf8BtgGWAYsB/wGdAZEBkAH/AdUByQHLAv8B7QHrAf8BXQFaAVkB0gMSARgEAAOB
-        AfYE/wP4A/8B+wH/AsYB4gH/AooB2wH/Ao4B9gH/ApIB8AH/AuIB7gH/AvQB7wH/A+0B/wPrAf8D6gH/
-        A/cB/wPLAf8DVgHBFAADCgEOA1sB1gE7AYgBHQH/AXABhwFaAf8BWQFVAVgB/wFHAUQBTwH/AU8CWwH/
-        ATYBhQEGAf8BHAGgAUcB/wEOAZUBNQH/A1MBqgQAAb0BjgFsAfwB/wHBAYkB/wHPAYkBRQH/A98B/wHP
-        AdUB2wH/AcEBxgHJAf8B4AHkAegB/wHVAdwB4gH/AcEBzAHVAf8B0QHbAeAB/wHYAcABsgH/AdkBaAEn
-        Af8B4gFmAQsB/wNXAb8IAAMHAQkDJgE5A1ABngF2AmIB7wHrAbcBtAH/AesB1gHVAf8B2wHXAdYB/wHS
-        AtcB/wHKAbABswH/AecBvwG6Av8B8gHrAf8B6gGwAasB/wNEAXoIAAOBAfYE/wP5Af8C+QH4Af8C/QH6
-        Af8CywHgAf8CxwHcAf8C+wHyAf8C9gHzAf8C7wHwAf8D7wH/A+0B/wPrAf8D+QH/A80B/wNWAcEYAAMR
-        ARcBWQFdAVkB1wE4AYwBGQH/AWUBcQFOAf8BTAFDAU4B/wFIAV4BOwH/AVEBpQEqAf8BJQGfAQAB/wFa
-        AVsBWgHhAx0BKgQAAb8BggFRAfwB7AGUATsB/wGtAWUBMgH/AcUBuwG0Af8BzwHLAcgB/wHeAeYB6gH/
-        AdwB4wHoAf8BuwHAAcQB/wGeAYIBaAH/AagBgAFjAf8BogFzAWcB/wGbATsBFwH/AekBawEgAf8DVgG+
-        FAADIwE0A0wBkwFhAl8B2wHmAbABrQH/AfoB5gHkAv8B7QHuAf8B/AHDAb0C/wHdAc8B/wFiAV4BWgHd
-        AxMBGggAA4UB9gT/A/sB/wP5Af8C+gH5Af8C/AH7Af8CrAHPAf8CugHUAf8C+QH2Af8D8QH/A+8B/wPt
-        Af8D6wH/A/cB/wPPAf8DVwHCHAADBwEKA1sB1gE1AY0BGAH/AU4BgAErAf8BYgGtAUAB/wFBAbABKgH/
-        AVoBWwFaAeEDFQEdCAABZAFfAVgB3QH1AbEBZAH/Ad4BigE2Af8B0gFjAREB/wG/AWMBJQH/AcoBsQGg
-        Af8ByAG1AagB/wGrAWsBRwH/AZ8BMQEAAf8BmwEhAQAB/wGXASEBAAH/Ac0BVQEcAf8BuQFuAS0B/gNB
-        AXMcAAMdASkBRwJGAYADYQHaAeABqAGnAf8B/QHOAcwB/wHnAZ0BlgH/A0ABcAwAA5MB+BT/AvgB/AH/
-        AvMB+gP/Af4B/wP9Af8D/AH/A/oB/wP5Bf8D0wH/A1cBwiAAAw8BFAFaAV4BWgHVAScBnAEJAf8BJQGW
-        ARYB/wFZAVsBWQHZAxYBHwwAAyUBNwFmAWIBXQHgAfMBqgFWAf8B8wGfAUcB/wHpAYkBLQH/AdUBcQEq
-        Af8BywFmASUB/wHLAVkBEgH/AcoBXAEcAf8B0QFjASQB/wHbAW8BLAH/AZoBXwE+AfgDTAGTKAADGgEk
-        AUACPwFvAV8CXgHZAVwCWQHMAxMBGgwAA1sBywOtAf4DtQH9A7UB/QO1Af0DtQH9A7UB/QO1Af0DtQH9
-        A7UB/QO1Af0DtQH9A7YB/QO1Af4DbgH1AzsBZSQAAw0BEgFaAWEBWgHcAVoBXAFYAdwDEAEWFAADDQES
-        A0MBdwJbAVkBxAFvAWQBXAHnAY4BbQFRAfQBpAF4AUIB+AGTAWsBSAH2AXwBYQFUAe4CYAFbAdYBUQJP
-        AZwDJwE6EAADIwEzA1YBuQNUAasDEQEXAxABFgMgAS4DAQECIwABAQMEBAUBBwMMARADHQEqAysBQwMv
-        AUkDJQE3AxYBHgMSARkDIAEuAy0BRQMyAVADMgFRAy4BSAMiATIMAAMGAQgDUAGkA1kBzwNcAc4BVgFX
-        AWUB6AFHAVkBdwHyA1sB4QNZAcwDWwHQA0gBhBgAAwQBBgM0AVQDVgGzAXQBZAFaAecBgwFiAVgB7wGD
-        AWMBWAHvAXIBXwFXAegBVwJWAbgDNgFZAwcBCRAAA10B0gG1ApoB/wFyAl0B/wNQAZ4DWgHbA1kB5QMf
-        ASwgAAMDAQQDCgENAxEBFwFAAj8BbgFhAVwBWgHcAWIBWgFWAeQDWQHDA0IBdQM1AVYDRAF8AV0CWQHX
-        AZ4BbQFRAfcBoQFyAUEB+AFlAV4BWAHlA1QBqwNAAXEMAAMYASEBkgKNAfoB3gHOAcgB/wGtAbEBzgH/
-        AVQBwgH5Af8BYwHgAv8BhwGpAeAB/wHkAc4BwwH/AckCwgH/A1UBshQAAxIBGAFTAlIBqAH2AYoBVgH/
-        AfABvwGrAf8B4wHGAcAB/wHVAcABvgH/AdMBvwG9Af8B5AHGAcAB/wHvAcABrQH/AfYBjwFbAf8DVQGy
-        AxgBIQwAA1kBxwHIAbMBsgH/AaABhwGGAf0BXwFWAVQB+wFsAmkB/wFfAlkB/gNXAd8DWQHJA1oBzQNa
-        Ac0DWgHNA1sB0ANZAckDRQF9AwYBCAMiATEDMAFMAzEBTQJcAVoBzQH+AcYBpgH/AewB0AHFAf8B1gF/
-        AUsB/gNSAakDSgGMAXkBYQFTAe4B9gHCAaUB/wHXAsYB/wHVAcUBxgH/Ae8ByAG0Af8BrAFzAU0B+gNO
-        AZkIAAMEAQYDEAEWAz4BawNEAXkDQgF0AWIBdwGEAfMBcQGlAcoB/wNXAcUDPwFtA0UBfQMhATADCQEM
-        AwYBCAgAAxIBGAFbAlkBwwHzAakBhQH/Ac0BtgGuAf8BxgG8Ab8B/wHyAeoB7QH/AcsBxgHIAf8BxgHC
-        AcMB/wH0AewB7gH/AccBvgHCAf8ByAGyAa4B/wH0AbABjQH/AVsCWAHLAxUBHQgAAw8BFANIAYQDVgG7
-        AXoBfAF/Af4BcgGTAaAB/wFzAaMBrwH/AagBnwGtAf8BwQGOAZoB/wHOAXABgwH/AdYBZgFsAf8B4QFy
-        AXQB/wHgAW8BcwH/AeABbwGBAf8BXwFAAUIB/QNEAXoDGgElAycBOwMnATsDSAGEAekBmwFgAf8ByAHF
-        AdAB/wHqAbsBpAH/AV4CXAHOAVYCVQGxAfEBrwGJAf8BxgHBAcoB/wHcAbwBrgH/AeEBuwGpAf8BxAG8
-        AcQB/wHrAb8BqgH/AV0CWAHRBAABSQJIAYgDXAHnAVsCWAHpAVwCVwHfAWECXAHcA1sB2QGTAY0BjAH7
-        AbgBogGeAf8BXQFaAVkB7QNbAdkBXgJYAd0DWgHkA2AB6wNbAeEDOgFiAwgBCwFUAlIBpgH2AaUBaQH/
-        AdYBvQHDAf8BtAGwAdYB/wLcAdkC/wH+AfwB/wH3AvUB/wL1AfQC/wH9AfwB/wPdAf8B2gHTAdcB/wHg
-        AcgBxQH/AfMBpQFwAf8DVQGyAwoBDQQAA1IBqAFgAWQBZgHsAYoBlAGXAfsBtAHiAesB/wG0AfMC/wGr
-        Af4C/wGUAfcB+gH/AZEB2wHkAf8BjgGzAcAB/wGGAYEBkwH/AWgBOAE7AfwBZAJSAe8B0AJWAf8B3gFz
-        AXQB/wNWAbMHAAEBAwcBCQMPARQBXAJaAc0B4gHDAbYB/wHSAcoB0QH/AawBdAFNAfoBdgFUAUgB7gHh
-        AcIBtQH/Ac8BxgHMAf8BzAF/AUwB/gG/AVsBOAH9AdcBxgHFAf8B2gHFAcIB/wGIAWcBSwHyBAABkgKM
-        AvkC+AH/AeEC3wH/AdwC2gH/AdkC1wH/AcoCxwH/Ad8C3gH/Ae0C6wH/AfcC9AH/AfUC8gH/AfYB8wH0
-        Af8B7gHwAewB/wHMAewB0AH/AdEBzwHLAf8DVgG7AzABSwHFAVoBQAH9Ac0BoQGKAf8B2AHUAdUB/wLW
-        AfsB/wLQAfoD/wH9Cf8B/gL9Av8C/gH/Af4C/AH/AdkB1gHaAf8BygGhAY4B/wHnAWwBOwH/ATYCNQFY
-        BAABeAGYAaMC+gP/AdoD/wGvAfMC/wGMAeAC/wGJAeoC/wGHAfYC/wGTAf0C/wGeA/8BkwHzAf4B/wNX
-        Ad8DKQE+AZUCWgH7Ad8BbQFsAf8DVQGyAwABAQMKAQ0DHAEoAzIBUAFMAksBkAHKAX8BWgH+AdMBzgHW
-        Af8B4AG6AaYB/wHhAWEBGQH/AdsBwQG3Af8B1wHLAc8B/wGQAWIBSAH2AYIBWwFJAfEB4AHIAcMB/wHY
-        AsgB/wGqAWoBQQH5BAABrwKpAfwB7ALvAf8B1QLWAf8D2QH/AdcC2AH/AcsCzAH/AeEC4gH/AewC7QH/
-        AuoB6wH/AeoC7AH/AewC7QH/AegB6gHpAf8B5gHvAegB/wHhAt4B/wNVAboDUgGpAesBkQFQAf8BywG2
-        AbMB/wHaAd0B3gL/Av4B/wHFAcYB/AH/AtIB+hL/Av4B/wHdAd8B4QH/AcoBuAG3Af8B7QGVAVUB/wFY
-        AlYBuQQAAXoBjAGaAfcB3AP/AaIB6wL/AYAB3AL/AVoB0QL/AWIB3QL/AV4B5AL/AWkB6AL/AYUB9QL/
-        AYwB+QL/AVoCWwHhAyABLgGaAk8B+gHdAW0BbgH/A1UBsQMGAQgDNwFaAWACXAHUAYYBXwFMAfMBhAFf
-        AUwB8wHBAWEBGQH+AeABuQGmAf8B1AHPAdUB/wHvAZkBWQH/AeABuwGqAf8B1gHPAdUB/wHNAX8BSwH+
-        Ab0BVAExAf0B3QHMAcoB/wHeAcsByAH/AYcBXwFMAfMEAAGWApAB+QHuAvAB/wLmAeUB/wPmAf8D5gH/
-        AegC6QH/AeYC5QH/AewB6QHmAf8B7wHsAeYB/wLpAeYB/wPjAf8B4wLiAf8C7wHwAf8B2QHUAdUB/wNU
-        Aa8BZgFbAVoB4QHoAZYBWQH/AfMB7AHvAf8B/gH9BP8B/gH/AvcC/wK5AfsB/wLcDv8D/gL/Av4B/wH0
-        Ae0B8gH/AecBmAFfAf8BbgFXAVYB6AQAAV8BfgGGAfMBsAH2Av8BbwHaAv8BSAHMAv8BLwHBAv8BUAHT
-        Av8BPQHUAv8BRwHYAv8BWQHjAv8BYgHsAv8BWAJeAeUDKQE+AZoCUAH6Ad0CbQH/A1UBsQMqAUABiQFZ
-        AUIB9QHjAcQBtgH/Ad4B1wHcAf8B3gHWAdsB/wHgAbgBoQH/AeMBmAFcAf8B1gHPAdMB/wHnAb8BrQH/
-        Ae8BtQGVAf8B0wHQAdgB/wHkAcEBsQH/AegBvAGmAf8B1AHQAdYB/wHqAcMBrwH/AV4CXAHOBAABagJl
-        AeUE/wH8A/8B+QH9Af4B/wH0AfsB/QH/AfMB/AH+Af8B6wHpAesB/wHAAccB2gH/AawBtAHPAf8ByQHE
-        Ac8B/wLjAeAB/wHdAt4B/wHmAugB/wGzAq0B/wNIAYcBeQFUAU0B7gHZAYUBSAH/AcUBwwHJAf8B8gHz
-        AfQJ/wL0Av8BsAGqAcgB/wGxAacBowH/AeYB4gHfAf8B+gL5Bf8B9gH1AfYB/wHHAcgBzgH/AdkBjAFU
-        Af8BegFYAUoB7wQAAVkBeQGHAfIBiQHrAv8BUQHQAv8BRAHLAv8BSgHOAv8BZAHZAv8BWgHbAv8BRwHW
-        Av8BRAHYAv8BSAHlAv8BVAFZAWAB6wEsAisBQwGaAVABUQH6AdwBbQFuAf8DVQGxA1UBtQHfAbMBmQH/
-        AdoB1wHgAf8B2wGxAZsB/wHcAbYBoQH/AdcB1gHfAf8B6gG1AZgB/wHpAbsBpQH/AdcB0wHaAf8B8wGq
-        AYAB/wHqAbwBpAH/Ad4B1wHbAf8B3gHYAd0B/wHpAc4BwgH/AbUBXwFAAfsDOAFcBAADVwG6AesB4AHc
-        Af8B4QHHAb4B/wHXAcoByAH/AdwBwgG6Af8B0QGjAZkB/wFiAaMB3AH/ATwBtgHtAf8BIAHHAeoB/wEb
-        AYMBzAH/AawBqAG8Af8B2QHSAc0B/wHaAtcB/wF3AnQB/AMvAUoBdwFUAU0B7gHbAYUBRgH/AckByAHM
-        Af8B9gL3Bf8B7wLsAf8BzQHCAb4B/wG7AbABqwH/AZMBigGrAf8BtAGoAbYB/wHFAbkBtQH/AdICywH/
-        A/EB/wHOAc8B1QH/AdwBjAFSAf8BdgFYAUsB7wQAAVUBZQFvAeoBhgHdAf4B/wGJAeAC/wGFAdsB+wH/
-        AWwBygHxAf8BVQG4AesB/wFzAdAB8gH/AYYB2wL/AYUB4wL/AV0B4AL/AloBXwHbAyQBNQGaAVEBUgH6
-        AdwBbQFuAf8DVQGxAWwBWAFSAekB3gHJAcIB/wHhAdYB1wH/AbcBTwEsAf0BuwFcAUAB/QHgAdoB3QH/
-        AeMBxgG6Af8B9wGeAV4B/wHdAdYB2gH/AeYByAG7Af8BzgFvASsB/gGEAWcBTgHyAYgBZwFRAfIBXQJZ
-        Ac8DNQFXAwcBCQQAA0gBhgG8AaABnAH/AeMBdAE0Af8B3wGjAW4B/wHrAZ8BaQH/AdMBNgEMAf8BSwGE
-        AbYB/wFbAd0C/wFWA/8BIAHLAfsB/wFjAYABtwH/AeEBywHEAf8B2gHIAckB/wFiAlcB8QMVAR0BYQJX
-        Ad8B6QGQAUsB/wH0AesB7gH/AvkB+gH/AdICygH/AboCrAH/AdYBzwHOAf8B+wH5AfgB/wHqAewC/wHs
-        Ae0B/QH/Ae8B6wHoAf8B3wLZAf8B+QH4AfkB/wH1Ae4B8gH/AecBkgFSAf8BagFXAVYB6AQAAzUBVwNV
-        AbUBXQFtAXoB7QGGAaUBswH/AW8BiwGYAf8BZQGDAZQB/wFgAZMBqQH/AU4BfwGcAf4BRgFlAXcB9AJa
-        AV0BygMvAUoDHwEsAY8BTQFOAfoB4gFwAXEB/wNVAbQBhgFfAUwB8wHjAdMBzwH/AecB1wHVAf8BggFd
-        AUQB8wGHAWIBQwH0AeYC2wH/AeMB0QHLAf8B4AFmASMB/wHkAbcBnwH/AeAB4QHqAf8BzAGDAW0B/gNT
-        AaoDNgFZAxUBHQMDAQQIAAM0AVQBkAGDAYkB/gHsAZkBVAL/AcwBjgL/Ad0BtwH/AfMBXQErAf8BjgFd
-        AWcB/wFDAcQB/gH/AUsB+AH9Af8BHQHhAfoB/wExAXEB1wH/AeABygHNAf8BzAK4Af8DWAHdAwYBCAFS
-        AlABowHqAYwBRQH/Ac8BrwGnAf8BugG0AbgB/wHMAsIB/wHzAvEZ/wHbAd8B4gH/AcgBrwGoAf8B6wGP
-        AUYB/wNVAbUMAAM2AVkBfwF+AXcB/gGCAXMBcQH/AZwBjQGGAf8BxQGmAaEB/wF/AXYBewH+AWgCWQH1
-        AWQBXAFaAecDWgHYA1kB1wGlAWoBaAH+AeECgQH/A1ABnQFrAWEBWAHmAecB1AHOAf8B5gHeAeAB/wG9
-        AXABNwH+Ab8BeQFCAf4B5gHgAeQB/wHpAdMBygH/AXMBVAFLAe4BkAFiAUgB9gHmAeAB4gH/AekB1AHM
-        Af8BawFcAVUB5wM6AWEDIwEzAwgBCwgAAxoBJQFwAW4BcAH1AdUBowGMAf8B/QG2AV8C/wHlAawB/wH5
-        AYMBOAH/AcIBXgFFAf8BXgGvAcoB/wFaAbUBmAH/AVcBuAGQAf8BQAF0AYsB/wHFAbcBvAH/AbgCoQH/
-        A1YBuAQAAy0BRQGtAV8BRQH7AdMBkQFhAf8B1AHKAdAJ/wH+Av0J/wP9Av8C/QH/Af4C/AH/AdoB1gHc
-        Af8B0AGVAWgB/wHZAXMBPwH/AzMBUwwAAzUBVQF0AXMBcgH+AV4CYAH/AWwCaAH/AbsBnQGXAf8B9wHF
-        AbwB/wH7AcQBvQH/AfkBwgG7Af8B8QGxAasB/wHqAZ8BmQH/AeoBkwGQAf8BYwJZAesDHAEoAVMCUgGo
-        AecBvwGnAf8C5wHuAf8B5wHJAboB/wHnAcoBvQH/AecB6AHvAf8B6AG8AaAB/wFRAlABnwNOAZgB5wG9
-        AaUB/wHnAesB9QH/AeIBqQGHAf8BUgJQAaQDKAE8AwwBEAgAAwYBCAFfAl4B3QG4AaIBowH/AW8BVwGf
-        Af8BlgF0AZ8B/wGUAWYBmwH/AVMBOQGvAf8BWAGDAU0B/wFHAcMBWAH/AZYB9gGzAf8BWgHJAV0B/wFw
-        AYgBWgH/AYYCfwH+Az8BbQQAAwcBCQNQAZ4B6wGjAWUB/wHnAbcBowH/AdcBzgHSAf8B1gHYAdoB/wH+
-        AvwB/wH1AvQB/wH0AvMC/wH9Af4B/wHaAdwB3QH/AdYBzwHSAf8B5QG3AaYB/wHsAaYBaAH/A1MBqgMJ
-        AQwMAAMfASwDagH5AW8CbgH/AVUBVwFYAf8DUAH0A1EBogNWAbQDXAHJA2AB3gF1AWkBaAHtAVsCWQHE
-        Ax0BKgQAAx0BKgFrAWEBWAHmAegBzgG8Af8B6ALjAf8B6AHiAeMB/wHoAcoBuAH/AWwBXAFUAeoDJQE3
-        AxgBIgGHAWYBTAHzAekB2AHPAf8B6gHOAbsB/wFdAlkB0gMcAScDBwEKDAADKgFBAk8BTgGXAlYBbgHo
-        AWsBbgH5Af8BnQGmAf4B/wEsAS0B9gH/ASEBIwEyAfsBPgG9AVIB/wGiAf8BzgH/AYwB/wGwAf8BJQFk
-        AR0B/wNTAaoMAAMMARABVwJVAboB7AGwAYAB/wHRAaUBkAH/AcgBsgGxAf8B8gHmAegB/wHKAcIBxAH/
-        AcUBvQG/Af8B8wHoAeoB/wHKArYB/wHNAaMBkQH/Ae4BtAGFAf8BWQJXAcIDEAEVFAADWwHLA9cB/wOT
-        Af8DUAGjEAADBgEIEAADJAE2AVsCWQHEAZ4BagFHAfkBmgFwAVQB+AFaAlcBxQMpAT4DBgEIAwABAQM9
-        AWkBXAFaAVkBzAFcAlkBzAM7AWMDBwEKAwEBAhQAA0MBdwFqAWwC/wHLAcwC/wFhAV8C/wEMARABZAH9
-        ASkBdQEqAfoBYwGqAYMB+QFhAYIBawHuATwBhAE/AfcDRwGDEAADDQESAlABTwGbAd8BnAFdAf8B7AG+
-        AZwB/wHnAcIBrwH/AdkBtQGpAf8B1wGzAagB/wHnAcIBrwH/AewBvgGdAf8B4QGgAWIB/wJSAVABowMT
-        ARoYAAMnAToDewHxA14B2QMUARtwAAMQARYCWgFmAd4CqAHdAf0CUAHCAfoCWgFeAdUDOwFkAyYBOAMS
-        ARkDKAE8AxYBHxgAAy0BRgNRAaIBYgFeAVcB3wF8AWoBXgHuAXwBagFfAe4BZwFhAVsB4QJTAVIBqAMw
-        AUwDAgEDuAADIwEzA1kB7ANWAb4DEgEZCAADEQEXA1MBqgFkAVwBVQHqAXUBZgFRAfIBZgFdAVYB7QNZ
-        AccDKgFBBAADCQEMHAADRgGBA1YBuwNVAbUDVQG1A1UBtQNVAbUDVQG1A1UBtQNVAbUDVQG1A1UBtQNV
-        AbUDVgG2A1YBuwM8AWgMAAI5AToBYAI1AXcB9QJZAV0B1wNKAYsDLgFIAxgBIQMHAQpAAAMmATkDWAHp
-        AfIC5wH/AdoC0AH/A1cBwgMSARkDEQEXAl4BWwHZAfcB2AGrAv8B3gGtAv8B3QGuAv8B7AHCAf8B6AHO
-        AaoB/wFiAVgBUgHvA1kB0gNbAeEDWQHDA1ABnQM/AW4DIAEuDAABuwFlAUAB/QHwAYoBKQH/Ae0BcwEe
-        Af8B7gFyAR0B/wHuAW8BGQH/Ae4BbAEUAf8B7QFnAQoB/wHtAWIBAwH/Ae0BYwECAf8B7QFfAQAB/wHt
-        AVwBAAH/Ae0BWQEAAf8B8gFXAQAB/wHjAVUBAAH/A1kBxAwAAlEBUgGnAioB3gH/Ah8B1QH/Ag4BugH/
-        AgEBowH/AkgBZwHuAlUBVgG0A0ABcQMyAVEDFAEcMAADJwE7A1wB5wHqAt8B/wHsAuIB/wHmAtkB/wHc
-        AtUB/wNZAcQDVAGuAfoBvAGAAv8B2wGhAv8BxQGGAf8B/QHCAYQB/wH4AcIBiAL/Ad0BqQH/AeoBtQGH
-        Af8BvQGiAZcB/wHgAd0B4AH/AecB4gHjAf8B0wHMAc0B/wGcAZQBlQH+A2UB9ANZAccDMQFPBAABxgF/
-        AUYB/gH2AbcBigH/AfQBugGUAf8B8gG3AY8B/wHyAbYBjwH/AfIBtQGNAf8B8wG0AYgB/wHzAbEBhQH/
-        AfEBrgGAAf8B8AGqAXEB/wHwAaoBcAH/Ae8BqQFvAf8B8wGsAXIB/wHvAXEBIgH/A1YBwQgAAwoBDQJc
-        AV4BzgI4AfMB/wIpAewB/wIdAeYB/wIQAd4B/wIAAc8B/wGXAZEBxQH/AbQBqwGwAf8BagFkAZYB/wJb
-        AV4B2QJVAVYBsQNAAXEkAAMkATYDWQHsAekC3AH/AfUC7QH/AeEC2AH/AeQC2QH/AfwC9wH/AVoCWAHu
-        AYABXwFMAfMBrgFaAR4B/wHmAZwBRwL/Ab4BXwH/Ae0BpAFLAf8BrgFVARcB/wHlAaEBUQH/Ad4BlgFK
-        Af8BzQGfAXMB/wHNAcIBwQH/AewB3AHYAf8B7wHZAdcB/wHwAd4B3AL/Af0B/AH/AeAC1AH/A1YBuAQA
-        AbsBfQFLAf4B/wHxAfMB/wGZAeABsAH/ATgBxwFSAf8BNwHBAUwB/wElAbUBNAH/AawB3QG4Af8B/QHv
-        AfYB/wH5AbYBhwH/AfsBswGDAf8B+gGrAW4B/wH1AawBgAH/AekB5wHuAf8B4wGPAVUB/wNYAcAIAAMs
-        AUQCOwGNAfYCQAH3Af8CLwHqAf8CIwHlAf8CEgHgAf8BHQEcAd0B/wHdAdQB4AH/AfcB7QHeAf8B6QHe
-        AdgB/wHdAdIBzAH/AcwBwgG8Af8CTQFzAfogAAMkATUBXAJZAewB6wLkAf8B9QLtAf8B6gLiAf8B+wL4
-        Af8B9gL0Af8BXwJbAewDJgE4AYsBXAErAfwBhAE1AQAB/wHbAZYBRQH/AfIBuQFpAf8BtwFvATEB/wFo
-        ASUBAAH/AZUBRAEGAf8ByQGIATgB/wHPAZwBZwH/AeQBzAHEAv8B7QHfAv8B4gHRAf8B+QHVAcYB/wHY
-        AcABuwH/AWYCZAHoAykBPwQAAbwBfwFPAf4B/wHvAfAB/wGFAd0BmgH/ARsBzwE5Af8BFAHBASoB/wEA
-        AakBAAH/AZcB0wGbAv8C5wH/Af0BsAFoAv8BsQFsAv8BoQFTAf8B/AGcAVEB/wHtAeAB3gH/AeQBkAFT
-        Af8DWAHACAACPAE9AWcCLwHhAf8CPgH5Af8CMwHtAf8CKwHoAf8CFAHiAf8BSwFIAd4B/wHzAewB3wH/
-        AegB3wHbAf8B4gHYAdoB/wHoAd0B2wH/AewB4QHcAf8CWgFdAdMcAAMkATYBXwJXAegB6wLmBf8B+AL2
-        Af8B+gL2Af8B8gLvAf8BZAJiAecDJwE7BAABgwFlAUUB9AHgAacBXAL/Ad8BswH/AccBpgGGAf8BnwFv
-        AU8B/wGeAW4BSwH/AYQBSQEeAf8BcgE2AQAB/wGoAWoBRwH/A2UB9AFqAmUB6QGXAYsBhwH4AWoBZgFl
-        Ae0BUAJPAZsDCgEOCAABugF/AVMB/gH/Ae8B7gH/AYcB4QGhAf8BJAHeAVAB/wEeAdIBQQH/AQABuAEV
-        Af8BlwHWAZ8C/wHqAekB/wH+AbYBcgL/AbwBiQH/Af4BrAFkAf8B/AGiAVoB/wHwAeQB4gH/AeQBkwFW
-        Af8DWAHABAADBAEGA1EBogKDAfQB/wFWAVUB+QH/ATIBMQHyAf8BIQEiAewB/wEOAQ8B5gH/AZIBjwHi
-        Af8B+gHxAeEB/wHkAdsB3AH/AeMB2QHaAf8B7wHkAd4B/wHCAbgBxgH/A0gBhRAAAxoBJQMqAUEDOAFc
-        A14B5QHuAugN/wHxAu4B/wFiAmAB6QMmATkIAANWAbMB7wHKAaEC/wH7AfQB/wH5AfQB7gH/AewB2QHG
-        Af8B7QHYAcAB/wHnAdIBugH/Ac0BkQFSAf8BcgFQATwB/gNEAXoDAwEEAxEBFxQAAbcBfwFXAf4B/wHv
-        AesB/wG8Ae4BxwH/AYoB5gGUAf8BiQHjAY8B/wFtAdkBcAH/AcYB6QHHAv8B8QHwAv8BzwGZAv8B0QGc
-        Av8BygGTAf8B/QHHAZQB/wH0AusB/wHjAZEBVwH/A1gBwAQAAxQBGwFdAVwBZQHhAvkB+AH/AegB5AHx
-        Af8BxgHAAe8B/wGQAY0B7AH/AkQB6AH/AcsBxQHlAv8B9wHiAf8B8wHqAeAB/wHtAeMB3QH/AfcB7AHj
-        Af8BmAGQAbAB/wMsAUQIAAMWAR8DVAGrA2QB5wFoAmYB8AF3AmoB+QHgAtYN/wHvAusB/wFkAmMB7AMj
-        ATMMAAMRARcCYQFcAdwB+AHmAdMG/wH2AesB/wH7Ae0B3AH/AfcB2wG+Af8B4wG/AacB/wGrAacBrwH/
-        AmgBagH1A1wB6gNbAdkDWQHDA1IBpgM3AVoDAwEEBAABtgF/AVoB/gH/AfYB5gH/AcgBxwHzAf8BlAGL
-        Ad4B/wGXAY4B3gH/AZQBigHZAf8B2AHTAe4B/wH1AfYB+wH/AZgBrQH+Af8BjwGnAfsB/wGMAaEB+gH/
-        AZYBpgH6Af8B7wHwAfcB/wHpAZUBUgH/A1gBwAQAAyYBOQKWAc8D/wH8Af8B+QH2AfIB/wH8AfcB7wP/
-        AesB/wHZAdQB6AH/AToBOQHmAf8BYAFcAeIB/wGgAZoB4AH/AckBwgHcAf8B7wHpAeIB/wFiAV4BagHs
-        AxYBHwQAAxUBHQNaAdMBxwK4Af8B8QLlAf8B+QLxAf8B+wL0Af8B7ALlAf8B7ALlBf8B8gLtAf8DYAHr
-        AyUBNxQAAwkBDANQAZ4BcAFmAWIB6gHkAc0BvwH/AeIBvwGpAf8BvgFbAR4B/wHGAYQBQQH/AdUBrAFx
-        Af8BywGsAYsB/wHRAbkBogH/Ad0BxwG4Af8B2AHJAcIB/wHRAcMBxQH/A10B4gMMARAEAAG3AX8BXwH+
-        Af8B/gHqAf8BYgFnAd4B/wIAAcMB/wIAAbcB/wIAAZ8B/wGZAZgB0wH/Ae4B8AL/ARsBWwH8Af8BCQFY
-        Af0B/wEAATwB/AH/AREBPQH8Af8B6QHrAfkB/wHuAZ0BVQH/A1gBwAQAA0MBeALIAeYD/wH9Af8B9gLz
-        Af8B8wHuAfEC/wH7Ae0B/wGsAacB7AH/ARoBGwHqAf8CEgHkAf8BBAEFAd8B/wINAdwB/wExAS4B1gH/
-        A1QBrwMHAQkEAANQAZoBvAKvAf8B6QLaAf8B6QLdAf8B9ALqAf8B8wLuAf8B9gL0Af8B7gLnAf8B5gLf
-        Af8DXwHgAycBOyAAAy4BSAGdAZcBmwH8AdQBtQGoAf8BsgExAQAB/wHMAVIBAAH/Ac8BYQEAAf8B0gFs
-        AQQB/wHPAWwBBwH/Ac0BZAEFAf8BvgFYARUB/wHQAbgBrwH/A1oB1QMDAQQEAAG1AX8BZAH+Af8B/gHo
-        Af8BZgFrAegB/wIAAd8B/wIAAdIB/wIAAbgB/wGcAZsB2gH/Ae4B8AL/AS8BhQH9Af8BIwGMAf0B/wEX
-        AWIB/AH/ASIBVgH9Af8B6gHsAfwB/wHsAZ0BWAH/A1gBwAQAA1kBxwL6Af0C/wH9AfsB/wH4AfQB9QH/
-        AfcB8wHyAv8B/AHvAf8BdAFyAfAB/wErASwB7gH/AiwB6AH/AhsB4QH/AgkB4QH/AgABxQH/Aj8BQAFu
-        CAADYQHuAdwCyQH/Ad0CzQH/Ab0CrwH/AZ8ClQH/Ad8C1AH/AfMC7wH/AfsC9gH/AXMCbAH0AzQBVCQA
-        AUcCRgGBAdcB2gHfAf8BvwGPAYQB/wGsASMBAAH/AcABSAEAAf8ByAFVAQAB/wHLAVoBAAH/AcoBWAEA
-        Af8BxwFMAQAB/wG9AUYBAgH/AcQBrAGmAf8DVQGyCAABtAF/AWgB/gL/AewB/wGIAY0B6gH/ARMBFQHc
-        Af8BFwEZAdYB/wEQARIBwwH/AawBrQHjAf8B8QH1Av8BRQGKAv8BOQGOAv8BMAFwAv8BPQFqAv8B7gHy
-        Av8B6wGdAVwB/wNYAcAEAAJZAX0B8gLtAfcB/wL5AfwD/wH+A/8B+QH/AfMB8AH1Af8BVwFWAfYB/wIz
-        AfEB/wIuAeoB/wIjAeQB/wIZAegB/wIdAZEB/AIwATEBTQgAAXECbQH3Ae8C3AH/AcACsgH/A1UBtQM/
-        AW8BogKZAf8B9ALrAf8B+ALxAf8BdQJvAfIDKgFBJAADVQGyAegB5wHoAf8BqQFSAUIB/wGyASoBAAH/
-        AckBVQEAAf8B2gFlAQAB/wHeAWsBAAH/AdABWwEAAf8BuwE5AQAB/wG1AUkBHwH/AbwCrgH/A0gBiAgA
-        Aa8BfwFpAf4B+AHlAdgB/wHsAecB6wH/Ad8B1wHiAf8B3wHZAeQB/wHfAdgB5AH/Ae8B6QHrAf8B9gHu
-        AewB/wHiAdoB7QH/AeAB2QHtAf8B4AHaAe4B/wHjAd8B8AH/AfoB9AHyAf8B4gGTAVoB/wNWAcEEAAM4
-        AVwCUAFSAaQCWgFdAcoBbgFvAYQB8wLDAd4B/wLOAfQB/wJvAv8CVQH+Af8CPAH3Af8CJgHrAf8CGgHq
-        Af8CXAFgAdQDEAEVCAADZAHsAcgCugH/A1UBsAMWAR4DVQGyAcACtAH/AegC3AH/AfAC5wH/AWgCZgHr
-        AxwBJyAAAwMBBANeAdkB3gHZAdwB/wGhATUBGgH/AcABQAEAAf8BzwFfAQAB/wHfAW8BAAH/AecBggEA
-        Af8B4AFyAQAB/wHJAU0BAAH/AboBXQE/Af8BoQGZAZ4B/QM3AVoIAAHRAZ8BgwH/Af4BzgGYAf8B/QHI
-        AZIC/wHMAZEC/wHJAYwC/wHHAYkB/wH8Ab4BggH/AfkBtwFxAv8BvAFtAv8BuQFpAv8BtwFmAf8B/gGz
-        AWEC/wGxAWAB/wHvAZABOwH/A1kBxAwAAwcBCgMqAUEDOwFkAk8BUQGcAloBYAHeAlQBxQH/AmMB3wH/
-        AmAB9AH/AkUB7gH/A1QBrwwAA0IBdANRAZwDHwEtA1UBsgHAArAB/wHeAswB/wHoAtoB/wHOAsEB/wNT
-        AaokAAMRARcBcQJvAfMB0AG6Ab0B/wGRAQcBAAH/Aa8BIgEAAf8BugE6AQAB/wHEAUkBAAH/AckBTgEA
-        Af8ByAFOAQAB/wG7ATMBAAH/Ab4BbAFZAf8BfwFuAX8B9wMhATAIAAF0AWQBYAHxAawBegFqAfwBmQFk
-        AV8B+wGZAWABXwH7AZkBXwFZAfsBmQFfAVQB+wGZAV8BTgH7AZkBXwFJAfsBmQFfAUQB+wGZAV8BNAH7
-        AZkBXwEyAfsBmQFfATIB+wGdAV8BMQH7AZsBSwErAfwDSAGGHAADFAEbAyIBMgNCAXUCVwFZAcICTQF1
-        AfIDPgFrFAADUQGcAcUCtwH/Ae8C3QH/Ad4CywH/AcQCtwH/A2AB1AMVAR0kAAMwAU0BpQKcAf4B3AHO
-        Ac8B/wGdAksB/wGtAVQBRwH/Aa4BVwFCAf8BrgFXAT4B/wGuAVcBOgH/AawBUgE2Af8BoQE+ATEB/wHC
-        AZoBmAH/A2IB6QMHAQqMAANCAXYDZAHnAX0CbQH3A2QB7ANOAZgDFAEcKAADIgExA14B2QNsAe4BbQJu
-        Ae4CdwF7AfEDfgHzAYIBgAGCAfUBjAGKAYwB9wGQAY0BkAH5AZcBlQGWAfsBuAGzAbQB/QNWAbkIAAM6
-        AWEDWQHHA1kBzANaAcoDWgHKA1oBygNaAcoDWgHKA1oBygNaAcoDWgHKA1oBygNaAcoDXAHOA1kBwwM0
-        AVVAAANOAZgDWQHDA1YBvgNWAb4DVgG+A1YBvgNWAb4DVgG+A1YBvgNWAb4DVgG+A1YBvgNWAb4DVgG+
-        A1kBxANEAXwIAANIAYQBiQKHAfMBfwJ9AfABfwJ9AfABfwJ9AfABfwJ9AfABfwJ8AfABfQJ8AfABfQJ8
-        AfABfQJ8AfABjAKJAfMDUQGcCAADYQHuA+IB/wPdAf8D2gH/A9oB/wPYAf8B2ALXAf8D1wH/A9YB/wPV
-        Af8D1QH/A9QB/wPTAf8D4AH/A5kB/wNXAb0MAAMuAUcBXAFeAWEB2gMlATcoAAGZAZ0BnwH9AcoBzQHP
-        Af8BywHNAdAB/wHLAc4B0AH/AcoBzQHQAf8BygHNAc8B/wHJAc0BzwH/AcgBzAHOAf8ByAHMAc4B/wHI
-        AcsBzQH/AcgBywHNAf8ByAHLAc0B/wHIAcsBzQH/AckBywHOAf8BsQG1AbcB/wNbAdADAwEEAy8BSQNS
-        AaQB6ALjBf8B+wL5Af8B+gL3Af8B+AL0Af8B9gLwAf8B8wLsAf8B8ALoAf8B8gLrAf8B7ALlAf8DVgG2
-        AzEBTQMEAQYDiAH3BP8D9AH/A/MB/wHzAvIB/wHxAvAB/wHwAfEB8gH/Ae8B8AHxAf8B7QHuAe8B/wHr
-        AewB6wH/AesC7AH/AekB6gHsAf8B5QLmAf8D9QH/A8YB/wNZAcMIAAMbASYBRgFiAXUB7wEEAeQC/wJc
-        AWAB1CgAAbIBtAG2Af0B7QLwAf8B2QHbAdoB/wHbAd0B3gH/AdsB3QHeAf8B2wHeAd8B/wHbAd4B3wH/
-        AdsB3gHgAf8B2wHeAeAB/wHbAd4B4AH/AdwB3gHgAf8B2wHdAd4B/wHaAdsB3AH/AeYB6AHpAf8B4QHm
-        AekB/wNYAcsDPgFrAYkChgH1Ad0C1QH/Ad4C1Qb/Av0B/wH8AvgB/wH6AvUB/wH4AvEB/wH1Au0B/wHx
-        AukB/wH2Au8B/wHhAtYB/wHdAtYB/wONAfYDRAF6A3sB9gP7Af8D6gH/AesC6gH/AeoB6wHqAf8B6wHw
-        AfEB/wHmAekB6gH/AeEB4AHiAf8B4wHlAecB/wHnAewB7wH/AeEB4gHlAf8B3gHfAeEB/wHeAt8B/wLs
-        AesB/wO9Af8DVgHBCAADDgETAVIBYQFqAegBAwHxAv8BMgF7AZ4B+gJMAU0BkQNJAYcDSQGHA0kBhwNJ
-        AYcDSQGHA0kBhwNJAYcDRwGABAABqAGuAbIB/QFgAWIBXwH/Ah8BCgH/AisBCwH/AjkBFgH/Ak4BLgH/
-        AlQBOAH/AlYBOwH/AVMBUgE3Af8BSAFJASsB/wE7ATwBGwH/AS8BMAEVAf8BJQEkAQ8B/wI5ATMB/wG/
-        AcYBywH/A1oBygNeAc4B9QLpAf8B0QLIAf8BbQJrAf8CtQG0Af8BwgLBAf8BvAK7Af8BvAG7AboB/wG6
-        ArkB/wG5AbgBtwH/AbsCuQH/AbUCtAH/AW0CbAH/AckCwgH/AfgC7AH/A14B2QN9AfYD/AH/Ae0C7AH/
-        Ae4B8AHyAf8B6QHsAe4B/wHaAcgBvwH/AdYBtwGnAf8B2QG+Aa4B/wHSAbYBpwH/AdABuQGwAf8B1QG1
-        AaMB/wHOAaoBlAH/AdYBzQHKAf8B7wHxAfMB/wPAAf8DVgHBCAADGwEmAVEBYwF0AesBAAHoAv8BMQGb
-        AcgB/wG7AbgBuQH/Ac0B2AHRAf8BywHVAdIB/wHJAdIB0AH/AcYB0QHOAf8BxAHPAc0B/wHBAc0BywH/
-        AckB1QHXAf8BnQGkAagB/wQAAagBqgGvAf0BRwFKAUEB/wMAAf8CPQEcAf8CRAEfAf8BJgElAQAB/wI6
-        AQgB/wI7AQoB/wI4AQcB/wIuAQAB/wIhAQAB/wIZAQAB/wIOAQAB/wEdARwBDwH/AbYBvQHCAf8DWgHK
-        A2cB5gHiAtAB/wHCArIB/wFXAVQBVQH/AVsBXwFmAf8BYgFnAW4B/wFhAWcBbwH/AWIBZwFvAf8BYgFn
-        AW8B/wFhAWgBcAH/AWIBaAFvAf8BXQFiAWkB/wFUAVIBUwH/AbkBrAGrAf8B4gLQAf8BawJqAesDfQH2
-        A/wB/wHwAvIB/wHrAekB6gH/AdcBswGgAf8B6AG+AZUB/wH1AdEBogH/AfIB0gGnAf8B8wHQAaAB/wHr
-        AcIBmQH/AfUBzQGhAf8B3gGoAXAB/wHTAcMBuwH/AfAB9AH3Af8DwQH/A1YBwQgAAykBPgELAXwBuQH8
-        AQQB6gL/ASABkQG3Af8BVgFtAUgB/wFSAYgBOgH/ATkBdAEYAf8BOgGDARcB/wE/AYUBHQH/ATcBcgEa
-        Af8BJAFiAQsB/wFwAZ4BZQH/AakBrAG0Af8EAAKoAa0B/QFBAUQBPwH/AjEBIgH/AtsB1QH/Ar0BtwH/
-        AiYBBwH/AiQBAAH/AiIBAAH/AhoBAAH/AiEBAAH/AiEBAAH/Ah0BAAH/AhIBAAH/AiIBFAH/AbQBuwHB
-        Af8DWgHKAWsCZgHvAc4CuQH/Ac4BvwHBAf8B2AHDAbwB/wHgAacBigH/AeYBpQGAAf8B6QGiAWsB/wHp
-        AZ0BYwH/AekBnQFjAf8B6QGhAWoB/wHmAaYBcwH/AeABqAGLAf8B2QHBAboB/wHOAcABwgH/Ac4CuQH/
-        AW4CagHwA30B9gP+Af8B8AH0AfcB/wHdAbsBqwH/Ae4BtwGDAf8B8gHAAYcB/wHfAbMBkQH/Ad4BvwGq
-        Af8B3gGyAY4B/wHzAcEBiQH/AfcByAGVAf8B1AGjAYYB/wHeAdwB3gH/AfIB9AH1Af8DwgH/A1YBwQgA
-        AxwBKAEdAXcBpAH6AQQB6AL/AR0BkAG1Af8BVgFzAU0B/wGDAaUBagH/AVsBkAFKAf8BXAGQAUoB/wEe
-        AWYBAQH/ARwBYgEEAf8BBgFQAQAB/wFfAZIBVgH/AaoBqwG1Af8EAAKoAaoB/QE8Aj0B/wE7AToBKgH/
-        AoEBcAH/AqoBpwH/ApEBhwH/AhsBAwH/ApMBggH/Ak0BOgH/AhEBAAH/AhgBAAH/AhUBAAH/AgoBAAH/
-        Ah0BFAH/AbABtwG9Af8DWgHKAXcCdAHxAe0C5AH/AusB8QH/AeUB0QHAAf8B+QGHARcC/wFqAQAC/wFq
-        AQAC/wFrAQAC/wFrAQAC/wFsAQAC/wFsAQAB/wH6AWoBAAH/AecBxAGqAf8B7AHwAfgB/wHqAuAB/wF0
-        AnAB8AN9AfYE/wHqAuUB/wHlAasBgwH/AfUBrwFkAf8B2AGqAY0B/wHoAeYB6AH/Au0B6wH/AeQB5wHs
-        Af8B2wGvAZIB/wH1AbUBcAH/AdkBogFxAf8B2wHXAdgB/wHzAfcB+AH/AsUBxAH/A1YBwQgAA0IBdQEA
-        AbgB7wH/AQQB6AL/AR4BlAG2Af8BhwGhAYEB/wE9AYMBMQH/ATkBgwEuAf8BMwFxASQB/wEPAVYBAAH/
-        AQ4BUQEAAf8BAAFEAQAB/wFeAZABVwH/AaoBrAG0Af8EAAGlAqgB/QFCAUUBQwH/AwAB/wMAAf8CqAGl
-        Af8CpQGdAf8CBQEAAf8CVQFKAf8CvQG6Af8CkQGJAf8CEgEAAf8CCwEAAf8CBQEAAf8BGAEXARMB/wGt
-        AbQBuQH/A1oBygN0AfAE/wHxAe4B8gH/Ad0B1QHPAf8B8AHAAWgC/wG3AT4C/wGmARoB/wH+AaIBDQH/
-        Af4BoQELAf8B/gGhAQsC/wGfAQYB/wHwAZwBFgH/AdsBzQG9Af8B5AHjAegB/wHyAusB/wF+AXsBfgHx
-        A30B9gT/AecB2gHWAf8B6gGpAWsB/wHrAacBXwH/AdoBwwG3Af8B8AHtAeYB/wHmAbgBiQH/Ae0B5wHa
-        Af8B2wHAAbMB/wHwAcIBmQH/AeYBuAGVAf8B2gHNAcgB/wH0AfgB+gH/A8YB/wNWAcEEAAMKAQ0CXAFg
-        AdQBAAHhAv8BBAHgAv8BGQGVAcAB/wEsAVkBTwH/ATMBkAE1Af8BCgGBAQkB/wENAYEBDAH/ARUBggET
-        Af8BFAFoARAB/wEAATcBAAH/AVcBiQFSAf8BrAGtAbUB/wQAAaICqAH9ATgBOwE9Af8BDAELAQoB/wKs
-        AaUB/wK9AboB/wIoARkB/wIFAQAB/wJFAT0B/wK+AbsB/wKcAZgB/wINAQAB/wIFAQAB/wMAAf8BEwEU
-        ARIB/wGqAbIBtwH/A1oBygNjAeAB/wH7AfoB/wH4AfQB9QH/Ad8C2wH/AeABywGrAf8B/QHlAbsB/wH8
-        AeABswH/AfsB2QGjAf8B/AHTAZYB/wH7AdABkAH/Af4BzwGIAf8B5AHAAYgB/wHUAcsBygH/Ac0BzAG7
-        Af8B4gHbAc8B/wNmAegDfwH2BP8B7gLqAf8B5wGrAYAB/wH2AbQBagH/AdQBnwFzAf8B4wHiAeMB/wHr
-        AeIB0AH/AeEBugGTAf8B2wGtAYsB/wH3AdMBtAH/Ad4BrQGOAf8B3wHZAdcB/wH1AfkB+gH/A8gB/wNW
-        AcEEAANRAaABAAGZAeoB/wEAAeYC/wECAdsB9gH/ATYB5gH8Af8BPwGlAd0B/wFMAYIBaAH/AYIBxAFz
-        Af8BcgG8AXQB/wFyAb0BcwH/AYEBwgGCAf8BRQGRAUUB/wFaAYwBVgH/AaoBrAGzAf8EAAGfAaYBqAH9
-        ATABMwE1Af8BbwFuAW0B/wO4Af8CBgEFAf8DAAH/AhYBCgH/ApUBjQH/AkkBRQH/AwAB/wIDAQAB/wID
-        AQAB/wMAAf8BEAISAf8BqAGwAbUB/wNaAcoDSQGHAcgCwgH/AfYB7wHuAf8B6gLlAf8BwwG0AasB/wHu
-        AdwBzAH/Ae8B4gHUAf8B7AHiAdYB/wHrAeMB1wH/AeoB4wHWAf8B6gHfAdAB/wHFAbYBrQH/AeAB1wHZ
-        Af8B7gHkAeMB/wHHAcABvwH/A04BmAOBAfYE/wH3Af0B/gH/AeQBwAGsAf8B7wGsAWoB/wHxAboBhQH/
-        AdgBpAGAAf8B2wG0AZsB/wHdAagBggH/AeUBxgGnAf8B5gGxAY0B/wHdAbsBqAH/AegB7gHxAf8B9gL3
-        Af8DyQH/A1YBwQQAAloBXgHVAQAByAL/AQAB5wL/AQIB/QH+Af8BVwP/AYoB7gH+Af8BZAGGAZ8B/wG7
-        AdIBsAH/AbcBzwGwAf8BuAHPAbEB/wG5AdABsgH/AbYB0AGwAf8BpwG+AaEB/wGkAacBrAH/BAABmwGi
-        AacB/QExATUBNgH/Al0BXAH/A70B/wKKAYkB/wI0AS8B/wMAAf8DAAH/AwAB/wMAAf8DAAH/AwAB/wMA
-        Af8BDwEQAREB/wGmAa4BswH/A1oBygMHAQkDPQFoA1gBuQNgAd4BqAGlAaYB/QH5AfcB9gH/AfUB+gH5
-        Af8B8AH6AfgB/wHsAfoB+QH/AegB+wH5Af8B7wL5Af8BnwGXAZgB/gNhAeIDWgG9A0ABbwMJAQwDgQH2
-        BP8B+QH6AfsB/wH1AvYB/wHjAbkBogH/AewBrwGBAf8B9gHAAZEB/wH2AcEBlwH/AfUBywGnAf8B6AGy
-        AY8B/wHeAbgBpAH/AesB7gHwAf8B6wHtAe4B/wH3AvYB/wPLAf8DVgHBBAABLgFYAYcB9gEAAccC/wEA
-        AeoC/wEBA/8BUQP/AZQB9wL/AWEBhAGqAf8C0gHNAf8B0QHWAdEB/wHPAdQB0AH/Ac0B0wHPAf8BzAHS
-        Ac8B/wHZAuAB/wGcAZ8BogH/BAABlgGdAaMB/QFCAUUBRgH/AhABDwH/A7IB/wPRAf8CMwE0Af8DDAH/
-        AwAB/wMAAf8DAAH/AwAB/wMAAf8DAAH/AQ0BDgEPAf8BpQGtAbIB/wNaAcoMAAMOARMDWAHBBP8B+gP/
-        AfUD/wHyA/8B7gP/AfkD/wNcAcwDFAEcDAADgQH2BP8D+QH/AfkC+wH/AfcC+wH/AesB2wHTAf8B5wHB
-        Aa4B/wHlAbwBpQH/AeUBwQGuAf8B6AHXAdAB/wHwAfQB9wH/Ae4C8AH/AesC6gH/A/kB/wPNAf8DVgHB
-        BAABUgFXAWkB6AEAAcsC/wEUAasBwwH8AVgBYAFlAeMBRwHpAfcB/wGIAfIC/wJWAVgBuwNDAXgDQwF4
-        A0MBeANDAXgDQwF4A0MBeANBAXIEAAGRAZkBngH9AVEBVAFVAf8BKwIqAf8DSgH/A0gB/wM0Af8DPwH/
-        AzkB/wMtAf8CIAEhAf8DFgH/Aw4B/wEGAgUB/wEaAhsB/wGiAaoBrwH/A1oByhAAA1MBpQP9Af8B/gP/
-        AfgD/wH1A/8B8QP/AfgD/wNVAbIQAAOFAfYE/wP7Af8D+QH/AfgC+QH/AfgB/QH+Af8B9QH6Af0B/wHy
-        AfUB+AH/AfIB9gH6Af8B8wH3AfoB/wHvAfAB8QH/A+0B/wPrAf8D9wH/A88B/wNXAcIEAANTAaoBAAHJ
-        Av8BMgGGAaEB9wJSAVMBqAEuAcsB7QH/AV0BzQHsAf8DKwFCIAABjwGXAZ0B/QFPAVEBUgH/ATsCOAH/
-        Aj4BPQH/ATwCOwH/AkMBQgH/AUQCQwH/AUUCRAH/AkYBRQH/AUcCRgH/AkUBRAH/AkIBQQH/AT8CPQH/
-        ATgCNwH/AZwBpAGqAf8DWQHMEAADVgGrA/0F/wH7A/8B+AP/AfUD/wH6A/8DVwG3AwMBBAwAA5MB+Bz/
-        A/4B/wP9Af8D/AH/A/oB/wP5Bf8D0wH/A1cBwgQAAzsBZQEwAWcBkQH3AS8BYgGJAfYBHgFcAZgB+gFM
-        AWMBdgHuAloBXgHVAw0BESAAAX8BgQGHAf4BjwGXAZoB/wFjAWcBagH/AWoBbwFyAf8BaQFuAXEB/wFp
-        AW4BcQH/AWkBbgFxAf8BaQFuAXAB/wFpAW4BcAH/AWkBbgFxAf8BagFtAXEB/wFqAW8BcgH/AWgBbQFw
-        Af8BcQGBAYUB/wGrAbYBvAH/A1kBxxAAA1QBrxj/A1gBuwMEAQUMAANbAcsDrQH+A7UB/QO1Af0DtQH9
-        A7UB/QO1Af0DtQH9A7UB/QO1Af0DtQH9A7UB/QO2Af0DtQH+A24B9QM7AWVAAAJZAVoBzwGOAZEBkgH7
-        AX4BhAGKAfoBfQGBAYcB+gF+AYQBigH6AX4BhgGMAfoBgQGHAY0B+gGDAYkBjwH6AYMBigGPAfoBhgGN
-        AZAB+gGHAY8BkgH6AYkBjwGSAfoBigGQAZMB+gGPAZoBngH8AWoBbAFvAfIDOgFiEAADUQGcAYcChgHz
-        AXsCegHvAXsCegHvAXsCegHvAXsCegHvAYcChgHzA1IBpwMBAQIwAAM/AW0BNQFIAZYB9gIhASIBMSAA
-        AwUBBwMjATMDNAFUAyYBOAMMARADAgEDZAADIAEuAzoBYQM2AVkDRQF/A1YBuwNWAbMDQAFwAzcBWgM5
-        AV8DHAEoMAADOAFeAToBogH4Af8CWgFdAcoDFwEgEwABAQMGAQgDCwEPA0EBcgF1AmQB7wFeAlsB2QNV
-        AbIDSAGGAzIBUQMZASMDDQERAwoBDgMHAQoDAwEECAABWQJXAcIBsgF8AVkB+wGjAW8BTQH6AZkCdgH6
-        AZsBeQF6AfoBmgJ4AfoBmgJ3AfoBmgJ3AfoBmgJ4AfoBmgF2AXQB+gGnAXgBYAH6AakBcwFNAfoBsgFf
-        AUUB+wFeAlsB0AwAAwMBBANgAd4CfwF+Af4BhgFhAWAB/QE7AWkBuAH/ATcBuQHzAf8BMgGIAc8B/wF3
-        AXABfgH+AY4BgwFrAf0BVgJSAf0DTgGXHAADOQFgA0oBjQFJAkgBhwM3AVsEAAMgAS4BUwFhAX8B7gFC
-        AbkB9AH/A1sByAMWAR4IAAMEAQUDJAE2A0QBeQNMAZIBbAJhAe4B/wH8Af0B/wH8AusB/wG7AaYBpwH9
-        AWcCUQHyA1cB3wNaAcoDVQGyA1ABmgNIAYUDMwFTAwsBDwQAAdIBcAFJAv8BxAFcAf8B7wGaAVMB/wHQ
-        AcQBxwH/AdICywH/AdMBygHLAf8B1wLOAf8B1gLOAf8B1QHQAdMB/wHUAcIBvQH/Af0BuQGMAv8BnQE7
-        Av8BlwEcAf8B3AF0AT0B/xAAA2AB3wG3AbMBsgH8AaQBnwGeAfoBWwGoAcoB/QFuAeQC/wFYAbYB8QH/
-        ApUBmwH7AbcBqwGqAfsBiwKHAfgDQAFwGAADSAGIAXkCdwH6AaoCowH/AYoCagH/AWoCaQH5AlsBWQHD
-        AygBPANUAa8BVwHwAv8BKAFxAcQB/wJFAUYBfggAAx0BKgG1ATsBAAH/AfQBUwEAAf8BuwFEARAB/wHx
-        AcwBzQL/AvMC/wH3AfYG/wH0AfUB/wHnAb0BvAH/AaABUAFIAf8BXgEdAQgB/wFUAQkBAAH/AZIBLgEA
-        Af8DUwGwAzYBWQQAAbUBbwE/AfwB/wG2AVYB/wHtAZQBUwH/AdQBwgHEAf8B2gFVAToB/wHXAaABlgH/
-        AdsB1wHaAf8B3AHOAc0B/wHbAdMB1AH/AdgBvgG6Af8B8wGUAV4B/wH+AY4BMwL/AY8BHwH/Ab4BZQFA
-        Af0IAAMRARcDFQEdAykBPwMzAVIDKAE8AVMCVQGwAaYBwgHfAf8CTAFdAfMDOgFiAy0BRgMvAUoDGAEh
-        AxUBHQMPARQMAAMpAT4BawFpAWcB8gG/AbsBsQH/AawBrQGmAf8BxgK6Af8BrgKUAf8BrwGaAZcB/wNe
-        AdACVQFXAboBVAG/AekB/gFUAeoB/AH/A1sByAMJAQwEAAG1ATsBAAL/AWkBBwH/Ae8BZwEMAf8BuwFz
-        AWgC/wHoAeYC/wHnAegC/wLvAv8C9gL/AvoG/wL7Af8B8gLPAf8BswFiAV8B/wFyATIBIAH/AbIBOgEA
-        Af8DSQGJBAABtAFrAT0B/AH/AbsBXAH/Ae8BmwFbAf8B3QHRAdIB/wHmATUBEgH/AeEBnQGRAf8B5QHt
-        Ae8B/wHlAd8B3QH/AuYB6AH/AeABygHFAf8B8gGCAUkB/wH9AY0BMwL/AZgBKAH/Ab0BYwFAAf0EAANL
-        AZADXAHnAVwCVQHqAVsCWAHjA1sB4QNaAd4BZQJdAfABzQG5AbUB/wF1AWUBYgH8A1oB5ANfAeADXQHi
-        A1wB5wNgAesDWAHjA0ABcAMWAR8DNwFbA1UBtQGHAXMBoQH/AV0BWAGMAf8BWQFbAYEB/wG6AbgBtgH/
-        Ab4BrAGrAf8BuwGmAaUB/wHCAawBogH/AUQBQgFoAfUBNAGSAb0B+wFdA/8BRQHGAfUB/wJGAUcBgAQA
-        AbUBOwEAAf8B/gFzARUB/wHKAVkBIgH/AfEBwwG7Af8B/AHTAcoB/wH3AdEBzwH/AdoBogGlAf8B2QGe
-        AaEB/wGrAVQBXgL/AvQC/wL1Av8B/gH9A/8B/QH/AbkBZAFbAf8BtQE7AQAB/wNMAZEEAAG0AWsBPQH8
-        Af8BvAFfAf8B8AGgAWIB/wLmAeoB/wHlAZYBhwH/AecBywHHAf8B7QH6Af4B/wHtAfEB9QH/Ae4B+gH+
-        Af8B5gHYAdQB/wHwAWIBMwH/Af0BigExAv8BnAEwAf8BvQFiAUAB/QQAAZQCjQH5AfIC8AH/AeIC4AH/
-        Ad0C2wH/AdwC2QH/Ac4CzAH/AdMC0gH/AecC5gH/Ae4C7AH/AfIC8QH/AfIC7wH/AfQC8QH/AeQB6QHi
-        Af8BxwHmAcoB/wHQAcsBygH/A1cBxQNWAbMBDwGWAeIB/wEHAZAB6AH/AQABgQHqAf8BAAFnAegB/wEk
-        AVQBvAH/Aa8BpQGfAf8BzgHAAb4B/wHMAbgBsgH/AacBmgG2Af8BMwFyAc0B/wFFAdAB8gH/AVkB+QL/
-        AWED/wFQAYEBoQH3AywBRAG1ATsBAAH/Af4BhwEnAf8BwgFpAVYB/wHVApkB/wHWAZ0BngH/AdcBoQGj
-        Af8B8wLeAf8B+ALsAf8BtgFkAWwB/wH9AeUB5AL/AuwC/wLzAf8B9QHPAc0B/wGNAT8BKgH/Ad4BSwEA
-        Af8DSwGQBAABtAFoATwB/AH/AcABZgH/AfMBnAFdAf8B6AHSAdAB/wHqAekB5wH/AesB3wHcAf8B6wHZ
-        AdUB/wHrAdkB1gH/AewB4QHaAf8B5wHBAbUB/wHvAUgBFgH/AfwBhgEsAv8BoAE1Af8BvQFhAUAB/QQA
-        AboCtwH9Ae4C8AH/AdIC0wH/AdUC1gH/AdUC1gH/AcMCxAH/Ac8C0AH/AfQB9QH0Af8B8QLyAf8B8QLy
-        Af8B8QLyAf8D8wH/AekB7gHqAf8B3AHuAeAB/wHiAeAB3wH/A1kBxwFaAWQBaQHhAUABjgGcAfQBKwGz
-        AcwB/QEWAbEB7wH/AQ8BoQHvAf8BWQGGAagB/wGpAZ4BlgH/AdECxgH/AdsBywHGAf8BvQGnAb4B/wFH
-        AaYB4AH/AVoB/QL/AVsB/AL/AVkB9QH8Af8BTwHbAfMB/wJXAVkBwgG1ATsBAAL/AZUBOwH/AdsBYgEm
-        Af8BywGMAYQB/wHwAcIBvwL/Ae4B6wL/Af0B/AX/AfkC5gH/AbgBYwFrAv8B4wHiAv8B6QHoAf8BswFd
-        AVkB/wGzAW8BQAH/AfIBUwEAAf8DSwGQBAABtAFnAToB/AH/AcUBcAH/Af0BowFUAf8B9wGZAVAB/wH4
-        AZoBUAH/AfgBlwFMAf8B+AGXAUgB/wH4AZQBRQH/AfgBlAFEAf8B+QGPATwB/wH8AYEBKgL/AZEBMgL/
-        AaABOQH/Ab0BXwFAAf0EAAGwAqoB/AHlAuYB/wHbAtwB/wPfAf8D3wH/A+AB/wHhAuAB/wPgAf8D3wH/
-        A+AB/wPgAf8D4AH/AeEB4AHhAf8B7wHsAe8B/wHhAt0B/wNZAcMDDAEQAy8BSQFdAVwBXQHiAZsBjwGe
-        Af8BcgFqAYgB/wFyAWwBcwH/AZ8CnQH/AdYCzQH/AeQB2wHZAf8B+wHiAdgB/wGPAZQByQH/AUoB0wHw
-        Af8BgAP/AV8B4AH0Af8CWAFpAeYCNAE1AVUBtQE7AQAC/wGhAVAC/wFvAQwB/wH8Ac8BqQH/AeABqAGO
-        Af8BygGGAXAB/wHlAawBqQH/Af4B4AHeAv8B/AH7Af8BuQFoAW8C/wHWAc0B/wHyAcEBvAH/AYIBKQEe
-        Af8B6QGqAWgB/wH2AVQBAAH/A0sBjwQAAbUBYwE3AfwB/wHOAZMB/wH4AdgBvgH/AfgB1wG6Af8B9wHU
-        AbUB/wH1AdIBswH/AfIBzwGwAf8B8QHNAa4B/wHxAckBqwH/Ae8ByQGpAf8B7AHMAa0B/wHoAcQBqQH/
-        AfsBrwFbAf8BvgFbAUAB/QQAAYMCfwH0AfcC+AH/A/EB/wPwAf8B7gLvAf8D7gH/AewC7QH/AeoC6wH/
-        A+kB/wPoAf8D5wH/A+UB/wPjAf8B6wLsAf8BzwLKAf8DVQGxAT0CPgFqASIBUQGgAfoBDwFeAcIB/wEU
-        AWcB0wH/AQkBVgHOAf8BIAFOAbwB/wGoAaABogH/AeQB2QHUAf8B8QHpAeoB/wGwAbYB2QH/AVYBZQG+
-        Af8BKwGaAdkB/wGIAf4C/wGdA/8BWAFmAXsB7wIhASIBMQG1ATsBAAL/Aa4BZgL/AW8BDAL/AdwBvgL/
-        AdwBvgH/Af4B2QG4Af8B6gG5AZ0B/wHNAYkBbwH/AdsBnQGZAf8B+gHTAdIB/wG8AWcBawH/AbYBZwFe
-        Af8BrQE/ASwB/wH8AcEBjAH/AfYBVAEAAf8DRAF8BAABtQFhATQB/AH+AdMBngH/AfUC+AH/AfwD/wH8
-        A/8B/AP/AfoB/QL/AfoB+wH9Af8B+gH3AfkB/wH5AvQB/wH5AfIB8wH/AekB5gHqAf8B8gGzAWkB/wG+
-        AVoBPAH9BAABYQJgAd8I/wH5AvoB/wH2AvcB/wPzAf8B7gLvAf8B6gLrAf8D5wH/AeIC4wH/A94B/wHZ
-        AtsB/wPWAf8B3QLeAf8BqAKiAf8DSAGIAVgBYgFlAd0BGAHeAv8BDQHVAv8BAAG6Av8BAAGiAv8BTwGa
-        Ad8B/wHIAbQBrgH/AekB4AHdAf8B7gHpAfAB/wFGAYwB1AH/AVgBzAHvAf8BiwHnAfcB/wGXAf0C/wGj
-        A/8BmAP/AlkBXAHMAbUBOwEAAv8BuwGIAv8BbwEMFf8B8gLlAf8B0gKlAf8BpAFCAUsB/wHLAaoBqQH/
-        A/YF/wH2AVQBAAH/AyUBNwQAAbUBYQE0AfwB/QHSAZwB/wH2AfUB8gr/AvwC/wH5AfYC/wH3AfIC/wHz
-        Ae4C/wHwAekC/wHxAesB/wHwAeUB5AH/AfIBswFnAf8BvgFaAToB/QQAA1cBugHfAtUB/wHjAtkB/wHc
-        AtMB/wHbAtEB/wHaAtAB/wHXAs4B/wHVAswB/wHUAssB/wHTAsoB/wHRAskB/wHPAsgB/wHQAskB/wHX
-        AtAB/wFwAl8B+wM0AVQDMgFQAzUBVgNVAbUBcAGQAaAB/wGkAcIB2gH/AcMBygHQAf8BywG+AbsB/wHz
-        Ae4B7QL/Af0C/wGGAagB4QH/AXMB2wHzAf8BxAP/AbcD/wFIAa0B4gH/AUIBWQGGAfUCVwFhAd8BtQE7
-        AQAC/wHJAZ8C/wGyAWsC/wFvAQwC/wFvAQwC/wFvAQwC/wFvAQwC/wFvAQwC/wFvAQwC/wFvAQwB/wH+
-        AW8BDAH/Af4BbwEMAv8BbwEMAv8BbwEMAf8DKgFAAwQBBQQAAbUBYAEyAvwB0gGdAf8B9AHzAfEG/wH8
-        AfsC/wH3AfYC/wH0AfEC/wHyAe0C/wHuAegC/wHuAecC/wHzAe8B/wHsAeUB5AH/AfABsgFoAf8BvgFX
-        ATkB/QQAA0wBkgG3AqEB/wHGArAB/wHBAqwB/wHCAq0B/wHDAq4B/wHEArAB/wHGArMB/wHIArYB/wHL
-        ArkB/wHOAr0B/wHRAsEB/wHZAssB/wHWAsMB/wFkAlcB8QMdASoIAAMsAUQBXAFUAUEB+AHsAeEB3AH/
-        AeYB3QHbAf8B5QLaBf8B3wHZAdMB/wFBAUkBXwH7AU0BqAG+Af0B0QP/AdED/wGNAccB6gH/A04BlAMB
-        AQIBtQE7AQAC/wHVAbUC/wHVAbUC/wHVAbQC/wHWAbUC/wHVAbMC/wHVAbMV/wG1ATsBAAH/AyoBQAME
-        AQUIAAG1AWABMgH8AfsB0gGdAf8B8wHxAfAC/wL+Av8B+QH1Av8B9QHxAv8B8QHtAv8B7gHnAv8B7QHm
-        Av8B7wHpAv8B9gHzAf8B6wLlAf8B8QGzAWoB/wG+AVgBOgH9BAADPQFoAZYCggH+AcoCtQH/AcYCsgH/
-        AcYCswH/AcgCtAH/AcoCtwH/AcsCuQH/Ac0CvAH/AdECwAH/AdMCxAH/AdcCygH/Ad8C0gH/AckCtQH/
-        A1sB4QMMARAMAANKAYwBXQJYAf8BnwKVAf8BtAKzAf8BiAGHAYgB/wNWAbgDQwF3AVUBYgFwAeoB3wH+
-        Av8B5wP/AesD/wFSAW0BlgH3AyQBNgG1ATsBAAL/AeABxwL/AeABxwL/AeABxwL/AeABxwL/AeABxwX/
-        AbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wMdASoDBAEFAwIBAwgAAbsBWAFA
-        Af0B+gHUAaAB/wHyAe8B8AL/Af4D/wH4AfYC/wH1AfEC/wHxAewC/wHvAesC/wHzAe4C/wH1AfMC/wH8
-        AfsB/wHsAuoB/wHgAaUBXQH/AbwBUgEwAf0EAAMmATgBdwJoAfYBxgKxAf8BxwKzAf8BxwKzAf8ByQK2
-        Af8BywK5Af8BzQK8Af8B0AK/Af8B0gLDAf8B1QLIAf8B2wLQAf8B3QLRAf8BsAKcAf8DVgHBEAADAQEC
-        AzQBVANCAXQDPgFsAzEBTwMLAQ8DAAEBAlkBXALJAfkC/wH7B/8B0QH4Af4B/wNbAcgBtQE7AQAV/wG1
-        ATsBAAH/AysBQgMHAQoDAwEEAwMBBAMCAQMDAAEBEAAB0AFcAS0C/wHhAacB/wH3AfoB8wf/AfoD/wH1
-        Av8B/AHyAv8B/gH2A/8B+gP/Af0F/wHxAfUB7gH/AecBswFnAf8B0wFWARcB/wQAAxABFgFkAl8B6gHD
-        Aq0B/wHPArsB/wHQAr4B/wHRAr8B/wHUAsMB/wHXAscB/wHbAssB/wHeAtAB/wHhAtYB/wHpAt4B/wHd
-        AssB/wGYAoQB/wNMAZIsAAJIAUkBhwExAV8BnAH7AU0BawGiAfoBTQFoAaEB+gFJAWIBpgH7AUoBUgFw
-        Ae8DAQECAbUBOwEAAf8BtQE7AQAB/wG1ATsBAAH/AbUBOwEAAf8BtQE7AQAB/wMdASoDBAEFAwIBAyAA
-        AVYCVAGrAZ4BWgEyAfsBhgJZAfUBhgJZAfUBhgJZAfUBhgFZAVcB9QGGAVkBTAH1AYYBWQFXAfUBhgFZ
-        AVcB9QGGAVkBVwH1AYYBWQFXAfUBjgFUAVEB9wGeAVYBLAH7AVgCVgG7CAADUQGcAXwCdQH6AZICiAH7
-        AY0CfAH6AY0CfAH6AZACfQH6AZICfgH6AZUCgwH6AZYChwH6AZgCjAH6AZYCkwH7AYoCfAH8A18B4AMh
-        ATAYAAMhATEDQAFwA1ABngMpAT8EAAMKAQ4DEQEXHAADBAEFAxQBHAMnAToDLAFEAygBPQMjATQDHgEr
-        AxgBIgMUARsDEAEVAwwBEAMJAQwDBAEGAzoBYQNZAccDWQHMA1oBygNaAcoDWgHKA1oBygNaAcoDWgHK
-        A1oBygNaAcoDWgHKA1oBygNcAc4DWQHDAzQBVQNKAYwDVgG2A1UBsQNVAbEDVQGxA1UBsQNVAbEDVQGx
-        A1UBsQNVAbEDVQGxA1UBsQNVAbEDVQGxA1YBtgNOAZgUAANeAdkBxQKyAf8BzwK7Af8DWAHAAykBPwNb
-        AcsDXQHSAzEBTxgAAx8BLAJXAVoBxQJbAWAB1gNXAb8DUAGkA0oBiwNBAXIDOAFdAzEBTgMtAUUDKAE9
-        AyMBNAMaASUDYQHuA+IB/wPdAf8D2gH/A9oB/wPYAf8D2AH/A9cB/wPXAf8D1QH/A9UB/wPUAf8DyAH/
-        A9oB/wOZAf8DVwG9AWgBQAE4Af0BtAFzAWUB/wGwAYYBcwH/AbQBiAGAAf8BsgGIAXQB/wGxAYYBdAH/
-        Aa4BhgF0Af8BrQGFAXQB/wGsAYUBcwH/AaoBhAFzAf8BqQGBAXIB/wGoAYIBcwH/AaYBgQFyAf8BpwGD
-        AYIB/wGsAXIBbAH/AU4BQAE/AfQIAAM6AWIDOAFeAzIBUQF7AnUB9gHmAtIB/wHnAtgB/wHFArQB/wGd
-        Ao4B/wHMAroB/wHgAswB/wGHAn8B/gM3AVsQAAMCAQMCTwFRAZwBNQHeAv8BQwGzAccB/wElAY0BrQH/
-        ARQBlgHRAf8BEgF/AcEB/gEzAVkBhAH1AVIBVwFlAegCWgFeAdUDVwG/A1IBpgNJAYkDNAFUA4gB9wT/
-        A/QB/wPzAf8D8wH/A/EB/wPwAf8D7gH/A+0B/wPrAf8D7AH/A+cB/wOWAf8D0AH/A8wB/wNZAcMBpgFQ
-        AUAB/QHzAdsBzgH/AeAB0QHGAf8B3wHNAcEB/wHaAckBvwH/AdoByAG9Af8B2gHFAbsB/wHZAcUBugH/
-        AdkBxQG4Af8B2AHDAbYB/wHYAcEBtAH/AdgBwQGyAf8B1gG/AbAB/wHYAcQBtQH/AeQBvAGoAf8BWQFL
-        AUkB8gQAAzUBVwGvAp0B/wG4AqQB/wGlApMB/wHHArQB/wHhAtEB/wHtAuEB/wHsAt8B/wHjAtIB/wHb
-        As4B/wH0AusB/wHxAuIB/wFZAlcBwhAAAw4BEwFVAV8BagHoAVUB0wH0Af8BswFwAVAB/wHiAakBhAH/
-        AcEBlAFmAf8BpgGYAXEB/wGCAaMBnQH/AVQBsAHMAf8BOAG4AfYB/wEkAbEC/wEYAZ4C/wEIAVYB0wH/
-        A1EBoAN7AfYD+wH/A+oB/wPrAf8D6gH/A+gB/wPnAf8D5gH/A+QB/wPjAf8D5AH/A98B/wOcAf8D0AH/
-        A8QB/wNWAcEBpAFPAUAB/QHvAccBnAH/AcQBpQGCAf8B2QGsAXIB/wHzAbcBdAH/AfEBsQFrAf8B8gGt
-        AWQB/wHyAakBXAH/AfIBpAFWAf8B8gGgAVAB/wHyAZwBSQH/AfIBmQFCAf8B8gGVATwB/wH1AZUBOQH/
-        AfYBkAEyAf8BVgFPAUcB8QMMARABZQJkAecBzAK5Af8B3QLLAf8B2gLHAf8B2ALHAf8B6QLcAf8B8QLm
-        Af8B9gLsAf8B9gLtAf8B9gLtAf8B/QL2Af8B3QLQAf8DYQHcA0UBfgMEAQYIAAM4AVwBJgGpAfQB/wFf
-        AaMBtAH/AeQBtAGLAv8BzwHEAv8B1gG9Av8B3AG2Af8B+wHIAZ0B/wHmAbMBhAH/AcQBoAFtAf8BnwGb
-        AXQB/wFxAqoB/wFOAc4C/wJaAVwBzQN9AfYD/AH/A+0B/wPtAf8D7AH/A+oB/wPpAf8D6AH/A+YB/wPl
-        Af8D5QH/A+EB/wPTAf8D6gH/A8EB/wNWAcEBqAFOAUAB/QHmAcsBrgH/AdAB3AHjAf8B1QG9AaYB/wH+
-        Ab0BgAL/AbwBgAL/AbYBbQL/AbIBZgL/Aa4BXwL/AakBWQL/AaUBUwL/AaIBTAL/AZ8BRgL/AZ8BQgL/
-        AZkBOgH/AVkBTwFHAfEEAANMAZABzAK6Af8B6QLbAf8B6ALbAf8B7QLgAf8B8gLmAf8B3gLRAf8B0ALD
-        Af8B5QLaAf8B/AL0Af8B/QL3Af8B5wLbAf8B2wLGAf8BsQKeAf8DOgFiBAADAwEEA1YBtgFGAc8C/wGX
-        AZABgAH/Af0B1QG6Af8B9AG7AbkB/wH9Ad4BvwH/Af4B3QG/Av8B5gHLAv8B5wHLAv8B5wHJAv8B0QGu
-        Af8B0QGgAVcB/wEcAYkB0gH/A0oBigN9AfYD/QH/A+4B/wPuAf8D7QH/A+sB/wPqAf8D6QH/A+cB/wPm
-        Af8D5gH/A+MB/wOiAf8D0wH/A8cB/wNWAcEBpwFOAUAB/QHwAdYBugH/AegB8wH6Af8B4QHKAbQB/wH7
-        AbwBgQL/Ab0BggL/AbcBcAL/AbMBagL/Aa8BYwL/AasBXgL/AacBWAL/AaQBUQL/AaEBTAL/AaIBSQL/
-        AZwBQwH/AVkBTwFHAfEDFQEdA0gBhAHAAqsB/wHmAtcB/wHsAuAB/wHvAuMB/wFzAnAB7wNCAXQDLAFE
-        A0gBhQGiAp4B+gH/AvwC/wL7Af8B+QLzAf8B8ALlAf8DUwGqBAADGQEjATgBWQGJAfUBZwHJAesB/wHI
-        AaABcgH/AfwB0wHRAf8B9gHLAcUB/wH8AeMBygH/Af0B4AHKAf8BrgGgAYEB/wHiAcUBsAL/Ad0BxQH/
-        AfQByQGsAf8B+AHYAasB/wNaAdsDIwEzA30B9gP9Af8D8AH/A+8B/wPuAf8D7AH/A+sB/wPqAf8D6QH/
-        A+cB/wPpAf8D5AH/A5EB/wPNAf8DywH/A1YBwQGlAVABQAH9AfsB1AGqAf8B4wHDAaIB/wHvAcABlgL/
-        AcIBjAL/Ab4BhQL/AbkBdAL/AbUBbgL/AbEBZwL/Aa4BYgL/AaoBXAL/AacBVgL/AaQBUQL/AaYBTwL/
-        AaABSAH/AVkBTwFHAfEDYQHkAcECqwH/Ac0CtgH/AeQC1gH/AfMC6QH/Ac0CvQH/AzQBVQgAAwsBDwF+
-        AnQB8wH/AvoJ/wH9AvYB/wNbAcsDAAEBAkEBQgFzAS4BoAH9Af8BlQGwAa0B/wHtAcQBpAH/AfUBxwHV
-        Af8B+AHhAdIC/wHpAdsB/wHPAcMBpwH/AS8BpAFAAf8BVQGRAUwB/wHfAbsBrAH/AfUBywG0Af8B+AHO
-        AaAB/wNKAYoDEwEaA30B9gP+Af8D8QH/A/EB/wPwAf8D7gH/A+0B/wPsAf8D6gH/A+kB/wPoAf8D5gH/
-        A8sB/wPoAf8DxwH/A1YBwQGoAVEBQAH9AecBygGoAf8BwwG4Aa0B/wHXAbUBlgL/AcUBjwL/AcEBigL/
-        AbwBgwL/AbgBcgL/AbQBbAL/AbIBZgL/Aa4BYQL/AasBWwL/AagBVgL/AakBVQL/AaQBTgH/AVoBUQFH
-        AfEBZAJjAeAB0gK9Af8B4gLSAf8B7QLiAf8B+ALtAf8BjgKJAfkDHQEpBAADFAEbA1UBsgHYAscB/wH+
-        AvsF/wGnAp0B+wNRAaADKAE9AwQBBgJZAVwByQFeAcgC/wG4AaYBhQH/AfkB1gHTAf8B8wHLAdgB/wH3
-        AesB3gH/AfwB5AHeAf8BgQGxAW0B/wFfAegBnwH/AVEB2wGNAf8BVQGWAU8B/wHrAdYBywH/AmEBXAHc
-        AykBPwMNAREDfQH2BP8D8wH/A/IB/wPyAf8D8AH/A+8B/wPtAf8D7AH/A+oB/wPqAf8D6AH/A8gB/wPl
-        Af8DyQH/A1YBwQGoAVABQAH9AesB1gG/Af8B5AHzAv8B2wHKAbkB/wH7AcMBjQL/AcQBjwL/AcABhwL/
-        AbwBggL/AbkBcQL/AbUBbAL/AbIBZgL/Aa4BYQL/AasBXAL/Aa0BWwL/AagBVgH/AVoBUQFJAfEDUgGh
-        AdQCwgH/AfYC7AH/AfIC6AH/AfcC7gH/AdgCyQH/A2AB1gNXAbgBZgJlAegBzgK7Af8B7ALhCf8BewJx
-        AfMDHQEqBAADKAE8ASQBTQGvAfoBlQHOAeIB/wHYAbYBkQH/AfcB0wHsAf8B8wHgAeQB/wH8Ae4B7AH/
-        AcoB0AG4Af8BUAHGAWoB/wFeAboBZwH/AVsBzwGEAf8BUgHoAZsB/wFQAZkBTAH/A04BlwMvAUoDGQEj
-        A38B9gT/A/QB/wP0Af8D8wH/A/EB/wPwAf8D7wH/A+0B/wPsAf8D7QH/A+gB/wOJAf8DyQH/A9AB/wNW
-        AcEBpwFSAUAB/QH2AdwBvQH/AecB4AHYAf8B5wHMAbAB/wH+AccBlQL/AcYBkwL/AcIBjAL/Ab4BhwL/
-        AbsBgQL/AbgBcQL/AbQBbAL/AbIBZwL/Aa8BYwL/AbEBYgL/AawBXAH/AWABUQFJAfEDHAEoAV0CXAHR
-        AYICfgHzAeAC0QH/AfcC7wH/AfkC8QH/AegC2gH/AdwCyQH/Ad8CzwH/AewC4wL/Av4J/wHwAuUB/wNY
-        AcEDAQECAk8BUAGbAT4BngL/AbUBvgGqAf8B8gHOAb4B/wH3AdMB7wH/AfwB8wHxAv8B8QH0Af8BXgG6
-        AV8B/wFZAboBYAH/AesB3gHYAf8ByAHSAbkB/wFjAcoBbQH/AUgB7gGVAf8BWQFdAVkB1wM3AVoDKQE/
-        A4EB9gT/A/YB/wP1Af8D9QH/A/MB/wPyAf8D8AH/A+8B/wPtAf8D7QH/A+oB/wOwAf8D3AH/A88B/wNW
-        AcEBqAFTAUAB/QH1AdcBsAH/AdQBtgGYAf8B6AG/AZkC/wHOAZ4C/wHIAZgC/wHFAZEC/wHBAYwC/wG+
-        AYYC/wG7AYEC/wG3AXEC/wG1AW0C/wGyAWkC/wG1AWgC/wGxAWIB/wFgAVIBSQHxBAADCAELA2EB3AHQ
-        ArsB/wH1AuwB/wH9AvgG/wL9Av8C/gn/AfQC7QH/Af0C+wH/Ad0C0wH/A0ABbgQAAUEBTgF9AfABhwHO
-        Af0B/wHOAbkBkgL/Ad0B8QH/AfwB3gHuAf8B3gHbAdQB/wHmAtsB/wHEAdIBtgH/AfEB6gHjAv8B8wH1
-        Av8B9wHuAf8BgAF/AZAB/gNVAboBTAGwAWAB+gFZAV0BWQHXAzABTQOBAfYE/wP3Af8D9gH/A/YB/wP0
-        Af8D8wH/A/EB/wPwAf8D7gH/A+0B/wPrAf8D4gH/A/QB/wPMAf8DVgHBAagBUwFAAf0B5gHUAbwB/wHS
-        AdoB4AH/AdUBxAGxAf8B/AHNAZ0C/wHLAZwC/wHHAZUC/wHDAZEC/wHBAYsC/wG+AYYC/wG7AYIC/wG4
-        AXMC/wG2AW4C/wG4AW4C/wG0AWgB/wFgAVMBSQHxCAADVQGwAdwCywL/Av0B/wH8AvUB/wHrAuEB/wH6
-        AvYJ/wF/AnsB8gNEAXkDVAGuA0oBjAgAAVoBXQFoAeIBvAHjAeQB/wHpAccBkgH/Ae4B1wHQAf8BVAGc
-        AUcB/wEPAYoBCgH/AQ4BgAEHAf8BSwGDATUB/wHvAd0BzgL/AfIB4AH/AecB4QHCAf8CWQFdAdIDGwEm
-        AyIBMgNbAcgBWAFbAVgBxgOBAfYE/wP5Af8D+AH/A/gB/wP2Af8D9AH/A/MB/wPyAf8D8AH/A/EB/wPt
-        Af8DnQH/A9IB/wPSAf8DVgHBAagBUwFAAf0B8AHhAc0B/wHmAfEB+QH/Ad8B0wHDAf8B/AHSAaUC/wHS
-        AaUC/wHOAZ8C/wHLAZkC/wHIAZQC/wHEAZAC/wHCAYsC/wHAAYcC/wG9AYIC/wG+AYQC/wG8AXEB/wFg
-        AVMBTAHxCAADEgEZA1IBowHbAs0B/wFlAmQB4gNAAW4BbQJqAecB/wL+Af8B/AL5Af8DXAHJFAADLQFF
-        A1UBsgFaAl0BygFZAmQB7AFGAcoBQQH/AUgB3QFGAf8BOwHYATUB/wEXAYwBJwH/AY0BrAHFAf8BqgHM
-        AdcB/wFZAWQBewHsAzEBTwMIAQsDAAEBAwIBAwMfASwDhQH2BP8D+wH/A/kB/wP4Af8D9gH/A/QB/wPz
-        Af8D8gH/A/EB/wPxAf8D7QH/A5YB/wPPAf8D1AH/A1cBwgGdAXEBTQH+Af8B8gHNAf8B+gHeAcUC/wHb
-        AbgC/wHgAbIC/wHeAa0C/wHZAaYC/wHWAaIC/wHTAZwC/wHPAZgC/wHNAZQC/wHLAZAC/wHIAYwC/wHL
-        AYwC/wHGAYcB/wFfAUwBRAHzEAADMgFQAx8BLAQAA0oBiQFlAmQB4gNWAbEDNQFXIAADIAEuA1sBwwGB
-        AaEBgQH3AVwBYAFcAdQDPQFpAz4BawJBAUIBcwMfAS0DBAEFAwABAQwAA5MB+Bz/A/4B/wP9Af8D/QH/
-        A/sB/wPfAf8D9gH/A9QB/wNXAcIBWQFLAUcB8gF4AU0BQwH6AXYBTQExAfoBdgFNATIB+gF1AU0BMgH6
-        AXQBTQExAfoBdAFNAS8B+gFzAU0BLgH6AXMBTQEsAfoBcgFNASoB+gFyAU0BKgH6AXIBTQEpAfoBcgFM
-        ASkB+gFqAUMBOwH5AXQBNQErAfwBWwJZAdmAAANbAcsDrQH+A7UB/QO1Af0DtQH9A7UB/QO1Af0DtQH9
-        A7UB/QO1Af0DtQH9A7UB/QO3Af0DuAH+A24B9QM7AWVMAANWAbMDUgGpAzUBWAMtAUUDHAEnAxcBIAM7
-        AWUBWgFfAWEB2wNBAXMDGgEkAwQBBhgAAxUBHQNCAXYDVQGyA1cBwgNWAcEDVAGrAz4BawMPARQcAAMQ
-        ARYDWwHIA2QB8QNiAe8DYgHvA2IB7wNiAe8DZwHyA1oB0wMUARsUAANWAbMBZwJRAfIBXwJbAeADVgG2
-        A0QBeQMoATwDDQESKAADUgGpAQABlgHtAf8BWwJeAdADRAF7AzUBVgJPAVEBnAE1AYcBpwH3ATMBgAGR
-        AfUDPAFmAykBPgMXASADCgENAwIBAwwAA0MBdwFfAlUB6gGnAXsBegH+AdoBoAGdAf8B4gG1Aa0B/wHe
-        Aa0BpQH/AcsBkQGKAf8BeQE+AT0B/AFcAloB3AM4AV0YAAMEAQYDawHrA/oB/wPwAf8D8AH/A+8B/wPy
-        Af8D8gH/A1cB3xQAASwCKwFDAZQCagH5Af8B4wHUAf8B7wHAAbMB/wHQAZsBkwH/AZABawFpAf4BZwFE
-        AUUB+AFaAlYB5ANXAb8DSAGGAy8BSgMQARYYAAMxAU4BAAFeAeoB/wEAASoB9AH/AUsBYQF2Ae4BWQJe
-        AdkBAAGDAv8BAAEtAfEB/wFTAWsBcQHxA1MBqgNBAXIDMQFPAyEBMQMNARIIAANQAaMBrwJrAf0B+wLk
-        Av8B6QHmAv8B2QHPAv8B6QHZAv8B6AHWAv8B5wHVAv8B2gHKAf8B3AGaAZEB/wFcAj4B+ANFAX8IAAME
-        AQYDKgFBAz8BbQNKAYsDWQHrA70B/wO/Af8DvAH/A70B/wO+Af8DrQH/A1sB5QNNAZYDQgF2AzABTQMU
-        ARsEAAFJAkgBhwHfAawBpQL/AdwBxQL/AdcBwQL/Ad8BzQL/AeEB0wL/AdsB0AH/AfQByAG/Af8B2QGk
-        AZ4B/wGuAWkBZgH/AWIBRAFDAfsBWQJVAesDWQHHA04BlAMlATcLAAEBAw4BEwFYAWkBcQHmAQABGgH3
-        Af8BBwEtAv8BCgFRAv8BBgERAfgB/wEAAWQB+AH/AbkBywG1Av8B3gGvAf8BfgFuAWQB8QNQAaQDNgFZ
-        AyIBMgQAA0sBkAG+AYIBhAH+Bf8B/gH8Av8B6QHnAv8BzQHDAv8B2AHJAv8B2gHJAv8B1wHGAv8B2gHH
-        Av8B5QHRAf8B9AG1AacB/wFcAj4B+AM4AVwEAANaAc0DewH8AbcBuAG5Af8B0AHRAdIB/wHOAc8B0AH/
-        AdoB2wHcAf8C5QHmAf8B4gHjAeQB/wHiAeMB5AH/AeMC5QH/AuUB5wH/AcwB0QHPAf8BuwG/Ab0B/wKs
-        Aa0B/wN2AfwDWQHSBAADWwHIAfIBzQHEAv8B2wHNAv8B1gHMAv8B2QHRAv8B2gHUAv8B3QHWAv8B4gHZ
-        Av8B5wHdAv8B6AHeAv8B3wHUAf8B+gHMAcEB/wHjAa0BpgH/AaMBTQFMAf8DVQGyBAADAgEDAwsBDwMd
-        ASoBWwJgAdYBIwFfAf0B/wFYAWAB/QH/AUoBVQH8Af8BJwE7AfwB/wELAZQB9QH/AcQBwwGlAv8B2wGl
-        Av8B7wHHAf8B7AG+AZUB/wNRAacDMwFSAyoBQQGOAmUB+QH/AfAB7wL/AfsB+QL/AfAB7wL/Ae8B7gL/
-        AdkB0QL/AdwBzAL/AeABzgL/AdgBxwL/AdMBwQL/AdQBwQL/AeMBzAH/AdwBlAGHAf8BXAJaAdwDEAEW
-        A7kB/QL4AfcB/wHVAdEBzgH/AdMB0AHNAf8B0gHQAc0B/wHRAc8BzAH/AcYBxAHCAf8BtwG2AbMB/wG+
-        AbwBuwH/As0BywH/AtEBzwH/Ac8B0QHOAf8BzgHPAc0B/wPZBf8DaAHzAxwBKAFyAl0B8AH/AeEB2gL/
-        AeAB3AL/AeEB3wL/AuMC/wLlAv8C5wL/AuUC/wHhAeAC/wHdAdsC/wHbAdUC/wHdAdAC/wHsAd0B/wHG
-        AYIBcwH/A08BmwQAAwkBDAMwAUsBXAJgAdQBMgGaAfwB/wGlAbAB/gH/AZ0BqwH9Af8BbwGNAfwB/wFR
-        AWQB+wH/ARoBRwH5Af8BEQGBAeYB/wGeAa4BoQH/Af4BvgGDAv8B4wGwAf8BlgGBAWgB9wNFAX0BVQJT
-        AbAB8QG7AbkC/wHcAdcC/wHbAdgC/wHuAe0C/wH3AfUC/wHUAdEC/wG5AbIC/wHGAbsC/wHYAccC/wHW
-        AcQC/wHSAb4C/wHWAcEC/wHQAboB/wGPAUEBQAH9Az4BawGjAacBqQH7AbsBsAGmAf8BsAFrAToB/wHG
-        AYgBTAH/AcYBgAFHAf8BxgFvAUIB/wHEAWsBPAH/AcQBZQE3Af8BxAFgATMB/wHCAVsBLQH/AcIBVQEn
-        Af8BwgFRASQB/wHBAUkBGwH/AZkBPwEeAf8B0gHUAdYB/wNlAfABPgI9AWoBuQGFAYQB/gH/AewB6wL/
-        AecB6AL/Au4C/wL3Af8B/gL4Af8B/ALzAf8B/gL1Av8B7wHuAv8B6gHrAv8C5QL/AeYB4gL/AdIBzQH/
-        AXoCQQH5AzABSwQAA0IBdgEyAW4BkwH2AR0BagL/AY4BpgL/AYwBpQL/AYwBmgH9Af8BbAGIAfwB/wFD
-        AV8B/QH/ASIBSAL/AQABKgL/AQABWgHyAf8BUgGkAbwB/wHDAYQBSAH/AcsBbgEzAf8DVgHBAWsCYgHp
-        Af8B7wHpAv8B5AHcAv8B0gHLAv8B2QHSAv8BywHKAf8B/QGqAa8B/wH+AcABwwH/Af0BrgG0Af8B/gGv
-        AasC/wHWAcMC/wHTAb8C/wHQAbwC/wHaAcMB/wHMAYYBbgH/A1MBrQGfAaUBpwH7Ab0BrwGhAf8B5gGi
-        AWEC/wG8AYcC/wGuAW8C/wGlAWYC/wGcAV0C/wGUAVYB/wH+AYwBTQH/Af0BhQFEAf8B/QFyAT0B/wH8
-        AWsBNgL/AWMBKwH/AcABTAEfAf8BzALQAf8CZQFmAfABVgJUAasB8AHJAcgC/wL6Av8B/AH9Af8B/gL6
-        Af8B9AHlAeYB/wHmAb4BvQH/Ad0BmAGTAf8B7wHSAdAG/wH0AfUC/wHwAe8C/wH0AfUB/wHwArwB/wNb
-        AeEDDwEUBAABWAJbAcsBWwJgAdYBQgFuAYoB9QEkAYkBygH/ARIBlQHpAf8BUAGKAf4B/wFkAXEB/AH/
-        ARcBiwH5Af8BOAGmAeAB/wEnAYsBzgH/AR8BgAHFAf8BKAGmAdoB/wGvAYcBWwH/Ad8BlwFKAf8BZwFf
-        AVcB6AGeAW4BagH5Af8B9wHuAv8B6wHiAv8B6QHeAv8B2AHNAv8BqQGqAf8B4gG2AboB/wGnAmkB/QG4
-        AZUBlgH+Af0BrgGzAv8BwQG1Av8B1gHCAv8BzwG7Av8B2QHCAf8B3wGeAY4B/wNXAcIBoQGlAacB+wG9
-        Aa8BowH/AeEBoAFhAv8BuQGHAf8B+QGsAXAB/wH4AaQBaAH/AfgBnQFgAf8B9gGWAVkB/wH2AY4BUQH/
-        AfUBiAFLAf8B9AGBAUQB/wHzAXEBPQH/Af0BagE0Af8BvQFRAScB/wHNAtAB/wJlAWYB8AFkAl8B4wH8
-        AecB5gH/AfoB6AHlAf8B5gHBAbwB/wHSAZkBlgH/AcgBdAFyAf8BygFwAW4B/wHPAW8BagH/AdMBgwFx
-        Af8B8gHdAdoG/wL4Av8C/gH/AdIBkQGQAf8DUwGwEAACXQFaAcoBhAEsAQAB/wFJAU8BSQH/ASQBiwL/
-        ATUBYAL/AUkBmAHIAf8B7wGcAUgB/wGGATQBAAH/AXQBLgEAAf8BlAE8AQcB/wHbAYwBNwH/AdcBlQFJ
-        Af8BgAFkAUwB8wGjAX8BdgH7Af8B9QHtAv8B6AHfAv8B6gHfAv8B2AHOAv8BswG2Af8B0gGyAbMB/wFV
-        AjYB9wGnAmkC/QHAAcUC/wG4Aa4C/wHXAcEC/wHPAbsC/wHYAcIB/wHiAaIBkgH/A1cBwgGhAaUBqQH7
-        AbwBrwGjAf8B4gGjAWUC/wG9AYsB/wH6AbEBgAH/AfkBqQFsAf8B+QGiAWUB/wH4AZsBXgH/AfcBlAFX
-        Af8B9gGOAVEB/wH2AYgBSgH/AfUBggFDAf8B/QFzAT0B/wG+AVgBLAH/Ac0C0AH/AmUBZgHwAZYBbgFt
-        AfcB3QGfAZwB/wGyAVYBVAH/AaMBQgFBAf8BpgFHAUYB/wGwAVUBVAH/AbgBYAFfAf8BvwFpAWgB/wHA
-        AWMBYAH/Ac4BcwFsAf8B9wHfAdkG/wH1AfMB/wGjAUwBSgH9Az0BahAAAlkBVwG/AZ4BUAESAf8BvgGH
-        AUUB/wEiAYUB8wH/AQMBUwH9Af8BUAFZAVoB/wGLAUIBDwH/AWoBNAEGAf8BYAEoAQAB/wFhASYBAAH/
-        AYABNwECAf8BjQFGAQ8B/wFpAVkBVwHrAYcCaAH1Af8B9AHtAv8B6gHhAv8B5wHcAv8B4wHbAv8BsAGy
-        Af8B7gGyAbYB/wHSAbIBswH/AeIBtwG5Af8B/QGoAa0C/wHLAcQC/wHUAcMC/wHPAboC/wHbAcQB/wHb
-        AZcBigH/A1UBsQGhAaUBqQH7AbsBrgGiAf8B4wGmAWgC/wHCAZAB/wH7AbUBhAH/AfoBrgFyAf8B+QGn
-        AWoB/wH4AaEBZAH/AfgBmgFdAf8B9wGVAVgB/wH2AY4BUQH/AfYBiQFLAf8B/gGGAUUB/wG/AVwBMQH/
-        Ac0CzgH/AmUBZgHwA1cBugHhAbMBtQH/AeEBoQGlAf8BzgGHAYgB/wG9AWcBaQH/Aa0CVgH/AaUCSwH/
-        AaQCSQH/AakBUAFPAf8BqgFLAUoB/wHJAW4BagH/Af0B7AHqAv8B4QHcAf8BZAFRAU8B8QMcASgQAAJJ
-        AUgBiAHPAYgBNgL/AcYBdAH/AVMBpQHpAf8BBwGDAfQB/wGuAZwBkQH/Ab0BoAGDAf8BvQGkAYoB/wG1
-        AZgBcQH/AZ0BbAFHAf8BYQEtAQEB/wGEATkBAgH/AVsCWQHEAV4CWgHYAfgB5AHeAv8B8AHmAv8B4wHc
-        Av8B5QHhAv8B1wHVAv8BrwGyAv8BsgG3Av8BrQGxAv8BygHMAv8B5QHkAv8B2AHTAv8BygG8Av8B0QG8
-        Af8BqAF0AWoB/gNCAXYBogGmAaoB+wG7Aa4BogH/AeMBqwFsAv8BxwGVAf8B+wG6AYkB/wH7AbUBgwH/
-        AfoBrgFxAf8B+QGoAWsB/wH5AaABZAH/AfgBnAFfAf8B9wGVAVgB/wH2AZEBUwH/Af4BjwFOAf8BvgFh
-        ATcB/wHMAc4BzQH/AWUCZgHwAxgBIQF0AmoB7AH/AeYB6QL/AdQB1wH/Af0BygHNAf8B9QG9AcAB/wHl
-        AacBqgH/AdIBjgGPAf8BvwJrAf8BsAFZAVoB/wGhAT8BQAH/AdABigGIAf8B6QGjAZ0B/wNZAcwUAAMc
-        ASgBpAF1AUoB+gH3AdMBrQH/AbMBzgHvAf8BZQGxAfcB/wH+AfMB5wH/AegB0QG6Af8B6QHQAbcB/wHr
-        AdEBuAH/AeYBzAG0Af8B1wG0AY4B/wGnAXIBMwH+AzsBZAFJAkgBhwHdAawBpgL/AfkB8gL/AeUB4gL/
-        AeMB4AL/AeYB4gL/AeMB3wL/AdQB0gL/AdsB2QL/AesB6gL/AegB5wL/AuYC/wHjAd8B/wH9AbcBqwH/
-        AWMBWAFXAesDFAEbAaIBpgGqAfsBuwGuAaIB/wHjAbABcAL/AcwBmwH/AfwBvwGOAf8B+wG6AYgB/wH6
-        AbMBgQH/AfoBrQFwAf8B+QGmAWoB/wH4AaMBZQH/AfgBnQFfAf8B9wGZAVsB/wH+AZcBVwH/Ab4BZwE7
-        Af8BywHNAcwB/wFlAmYB8AQAAzsBZQG+AbABsQH9Af8B7QHvAv8B3AHeAv8B2gHdAv8B2AHcAv8B1QHY
-        Av8BzQHQAf8B+wHDAccB/wHuAbsBvwH/AeABnAGdAf8BiQJHAfkDPAFoGAADRAF6AfIBxgGbAf8B/QHq
-        AdgC/wHuAeEB/wH+AfsB8wH/AfcB5AHTAf8B8wHYAcEB/wHzAdwBxQH/AfgB5wHTAf8B+AHFAZMB/wNR
-        AaADEAEWAw8BFAFkAlsB4QHzAd0B1wL/Af0B+gL/AesB6AL/AekB5QL/AesB5gL/AewB5wL/AeYB4wL/
-        AeoB6QL/Ae4B7QL/AfcB9gL/Af4B/QH/AbQBYgFfAf0DQwF3BAABogGlAaoB+wG7Aa4BoAH/AegBuQGE
-        Av8B2AGnAv8BywGaAv8BxQGUAv8BvgGMAv8BuQGHAv8BswGBAv8BrgFxAf8B/gGoAWsB/wH+AaQBZwL/
-        AaQBYwH/AcIBbgFBAf8BywHMAcsB/wFlAmYB8AgAA1gBvAHzAugC/wH3AfkC/wHnAeoC/wHjAeYC/wHk
-        AecC/wHtAfAC/wHkAeYB/wG5AaEBogH9AVwCWQHJAy8BSiAAAkcBRgGAAawBmQGFAfgB/gH1AeoC/wH9
-        AfgC/wH8AfgB/wH+AfgB8QH/Af4B9QHpAf8BwgGsAYAB/ANQAZ0DDQESAwMBBAQAAykBPwF3Al0B8AHz
-        AeIB3wb/AfkB9wL/AfQB7wL/AfIB7QL/Ae0B6QL/AfQB8gb/AvgB/wG9AYEBgAH+A1EBoggAAaMBpwGr
-        AfsBswGnAZoB/wHMAZwBWAH/AeYBuQGCAf8B5QGuAW0B/wHlAagBaAH/AeQBowFjAf8B5AGeAV4B/wHj
-        AZoBWgH/AeIBlgFVAf8B4gGSAVEB/wHhAY4BTQH/AeQBjgFKAf8BqQFdATAB/wLJAcoB/wNmAfAIAAMW
-        AR8BdAJqAesM/wH+AfYB9wH/AcIBngGfAf4BXQJaAdMBMQIwAU0sAAMqAUECVgFVAbQBgQF2AWoB8AHs
-        AckBrgH/AYsBfQFyAfICWgFXAb0BNQI0AVUDBwEJAwEBAgwAAyoBQQFkAl0B4gHdAa8BrgH/AfcB6QHo
-        Av8B/QH4A/8B+wL/AfgB8wL/AfAB7QH/AewCygH/AYsCbQH3A0sBjgwAAboCuwH9AdsB2AHWAf8BtAGk
-        AZUB/wG7AaoBmQH/AboBqgGaAf8BugGpAZoB/wG6AagBmgH/AbkBqAGZAf8BuQGoAZoB/wG5AacBmAH/
-        AbkBqAGZAf8BuAGnAZgB/wG4AaQBlgH/AbIBpQGaAf8C7QHuAf8DawHzDAADQAFuAb4CtQH9BP8BxAKr
-        Af4BXQJZAdcDNwFaaAADEAEWAUkCSAGIAWACWwHWAYcCZQH0AaMBeQFwAfsBngJqAfkBaQJfAegBVgJV
-        AbEDKgFBEAADZwHlA6sB+wGiAaQBpgH6AaIBpAGmAfoBogGkAaYB+gGiAaQBpgH6AaIBpAGmAfoBogGk
-        AaYB+gGiAaQBpgH6AaIBpAGmAfoBogGkAaYB+gGiAaQBpgH6AaEBpAGlAfoBogGkAaYB+gOzAfwDXAHJ
-        DAADAQECA1cBuANlAeUBPQI8AWgDAwEENAADCAELAlMBVQGwAkwBjAHzAjsBjAHzAlMBVQGwAwgBC6gA
-        AxABFgM6AWEDVQG0A0sBjgMDAQQgAAMEAQYDAgEDBAADAQECA1ABnQI4Av8CAAH0Af8DUAGdAwEBAgQA
-        AwIBAwMEAQYkAAM9AWkDXQHXA1IBoWAAAwkBDAM3AVoDVAGrAV0CXAHqAasCqAH9AeUC4QH/AYICfwH+
-        A1UBsQMNARIYAAMlATcDSAGEDAADQgF0AikB8AH/AgABzQH/A0IBdAwAAkcBSAGDAyYBOBwAAwMBBANe
-        AdkBuQK0Af8DXgHVAwEBAhgAAw0BEgMeASsDAwEEAxYBHgJYAVkB3QFQAVMBXAHqA0IBdAMRARcDHAEo
-        AzcBWgNEAXsDKAE9DAADKQE+A1QBrgFfAlwB6gKoAacB/QHdAtcB/wH5AfcB+AH/Af4D/wH6Af4G/wGv
-        AqgB/wNZAc8DGQEjEAADDAEQAlEBUgGnAzsBZAMkATUDAAEBBAADOQFfAgcBxwH/AgABqwH/AzkBXwcA
-        AQEDJAE1AzsBYwJRAVIBpwMMARAYAANVAbIBogKbAf8BvQK4Af8DSwGOAwABARgAA1cBvQFBAUwBXQHw
-        A0cBggMgAS4BNwFIAWUB9AEAAYgB9AH/AQABTQGmAf8DWQHMAV8CVwHoAZkBUQFQAf8BtAJhAf8BWQJL
-        AfIDOAFeCAABfwJ0AfUB3wLTAf8B+gHxAfIF/wH4AfYB+AH/AfcB9QH2Af8B8wHoAeAB/wHxAcsBqgH/
-        AfEB2wHFBf8BxwLCAf8BWwJaAeIDLQFGDAADPgFrA0QBegNEAXkDQgF0AwABAQQAAzABSwIWAY4B+wIW
-        AYIB+wMwAUsHAAEBA0IBdQNEAXkDRAF6Az4BaxQAAy0BRQF4AnYB+gHHAsEB/wFoAmcB5gMNARIcAAE+
-        AUgBZAH0AQABjAH8Af8BAAFRAawB/wNYAcYBWwJUAekBhQGBAZUB/wErAb0B/QH/AQABnwHgAf8BnQGS
-        AbEC/wG7AbcB/wH+AasBqgH/AcsBXgFgAf8BYAJBAfkDMAFNBAAB4QLTBf8B/gH9AfsC/wH7AfMB/wH+
-        AfYB5gH/AfsB5AHAAf8B/AHMAZAC/wG0AVQB/wH3AaIBRgH/AeoBxQGrAf8B/QP/AtUB2AH/A1MB8QM6
-        AWIIAANQAZ0DNQFWA0oBjAM0AVQDPwFtBAADFQEdAlQBYQHkAlQBYQHkAxUBHQQAAz8BbQM1AVUDSgGM
-        AzUBVQJPAVEBnA8AAQEDOwFkAWkCZwHuAbsCtAH/AboCtQH/AzoBYgQAAwMBBANMAY8DQwF3AxsBJgwA
-        AzABTQJUAWEB7gErAbUB9gH/AQABlQHiAf8BbwGDAacC/wG7Aa8B/wHkAcoBxwH/AWAB1QHvAf8BiwGu
-        AcoB/wH+AaoBpwH/AfACjgH/AewBhAGIAf8BzAFjAWYB/wNbAdkEAANWAasBpgKiAfoB+wH6AeoD/wHe
-        Av8B9wHLAv8B4QGnAv8ByQGEAv8BtAFXAf8B9wGcATwB/wHmAYMBLwH/Ad4BpQGHAf8B9gH3AfoB/wHl
-        AeYB6QH/AV8CWAH5A0oBigMEAQYDSgGKAz4BagNCAXYDSwGOAzIBUAQAAyUBNwJRAWAB6wJRAWAB6wMl
-        ATcEAAMxAU8DTAGPA0IBdgM+AWoCSAFJAYgIAAMNAREDWwHDAZwClgH/Ab0CtwH/AcYCvwH/A1oBvQME
-        AQYDSgGLA1oBxQG3ArEB/wG/ArgB/wM/AW0MAAMUARwBYQJbAeEB9gHXAdMB/wFiAeEB+QH/AVwBxQHn
-        Af8B9QHHAcUC/wHDAbsC/wGyAa4B/wH+Aa4BrQH/AfsBsQG0Af8B7wGrAaQB/wHfAZABigH/AegBgwGE
-        Af8BjwFKAUsB/wgAAykBPwNcAc8ByQG9AbIB/gH/AewBywL/AdoBnQL/AcEBagH/Af0BrQFOAf8B8gGZ
-        AUEB/wHkAYMBNAH/AdQBWwEdAf8B0AGAAVYB/wHrAd8B3gH/AukB6wH/AWECVgH9A0sBkAJEAUUBfAM9
-        AWcDPQFnA08BlwMSARkDCgENAlcBWQHCAgAB0wH/AgABoQH/AlcBWQHCAwoBDQMSARkDTgGWAz0BZwM+
-        AWoDQgF0BAADBAEFA1QBrAGwAqcB/wHEArwB/wHAArgB/wG4ArIB/wNbAcMDXgHQAakCpAH/AcgCwgH/
-        AckCwgH/AWICYAHjAxQBHAwAAxwBKAGKAW4BcAH+Af8B5AHeAf8B/gHXAdAB/wH4AcYBxAL/AcEBwwL/
-        AccBygL/AdIB0wL/At4C/wHjAeIC/wHcAdcB/wHxAbYBrgH/AcUBbwFoAf8DXwHgEAADPgFqAWcCZQHl
-        AeIBxgGyAv8BvwFzAv8BpQFBAf8B7gGRATkB/wHgAXMBMwH/AdMBXAEkAf8BwwE6AQkB/wG8AUMBJgH/
-        AeEBvQG5Af8B3wHUAdYB/wNbAdADRAF7Az0BZwM9AWcDTwGXAxIBGAMOARMCVAFkAeQBGQErAv8CAAH0
-        Af8CVAFhAeQDDgETAxEBFwNOAZYDPQFnAj0BPgFqA0IBdAQAAzMBUgGmAp0B/wHDArcB/wHJAsYB/wPT
-        Af8B1wLVAf8BoQKWAf8BvAK1Af8ByQHCAcEB/wGOAosB+QNNAZEDEgEYEAADBAEGAUoCSQGJAZYBiQGK
-        AfsB9gLVAv8B7gHtAv8B/QH8Bv8B/AH5Av8B8AHtAv8B4AHbAf8B8wHIAcIB/wHTAaEBnAH/AYUBWwFY
-        Af8DOAFcFAADBAEGA0wBkwF/AXkBeAH0Ae0BrwGKAf8B8AGNAUEB/wHeAWoBLQH/AdABXwE0Af8BxAFc
-        AT8B/wG3AVUBQwH/AbwBhQF0Af8BuAGoAaoB/wNVAbQDSgGKAz0BaQNCAXYDTAGPAywBQwQAAzsBZQFB
-        AUcBggHzAjsBgAHzAzsBZQQAAysBQgNMAY8DQgF2Aj0BPgFqAkkBSgGJBAADVgGzAb0CsgH/AbsCsgH/
-        AcgCxgH/AeIC4wH/AeAC3QH/AagCngH/AZcCkwH7A1QBpgMaASUfAAEBAzEBTgNWAbMBcAFuAWwB7AHJ
-        AbcBsQH/AdEBvAG3Af8BzQG1Aa8B/wGbAZEBjwH7A10B0gFqAmcB8gHWAcoByQH/AbUBsQGyAf8DOQFf
-        HAADGgElA1sBxgHFAZ8BlAH/AcsBnAGNAf8BvAGfAZ0B/wG2AaQBpQH/AbYBqQGrAf8BtgGmAacB/wFf
-        AlIB9AMlATcCTwFRAZwDNQFVA0oBiwMyAVADUgGjAxEBFwQAAxYBHgMWAR4EAAMRARcDUgGkAzIBUQNK
-        AYsDNQFWA1ABnQQAAV8CXgHfAbkBrgGsAf8BiAFvAXAB/wGlApsB/wHsAusB/wG4Aq4B/wGpAZ4BmgH/
-        AUIBWQFzAfUDQgF0AzMBUwI8AT0BaAMjATQDMwFTGAADAQECAxYBHwMiATIDKAE8AyYBOQMmATkDIwEz
-        A2AB3gT/AcoCwwH/AzYBWSAAA1kBxwG5Aa0BsAH/Ab0BsgG2Af8BugGuAbAB/wG7AqwB/wHIArYB/wN/
-        Af4DQgF2BAADPgFrA0QBeQNDAXgDQgFzAzkBXwNSAaMDLgFHAxEBFwMRARcDLgFHA1EBogM6AWADQgFz
-        A0QBeQNEAXoDPgFrBAADFgEfA1wBzwGLAW8BbQH/AbMCpgH/AbsCswH/Ab4BtQG0Af8BxAGuAasB/wEW
-        AasByQH/AQABywH8Af8BAAGsAewB/wEAAbMB8AH/AQABlAHdAf8BAAGeAecB/wNOAZkMAAMCAQMDFQEd
-        AxYBHwMWAR4DGwEmAyMBNAM1AVcDTwGXA14B1wHWAtQB/gHqAuUB/wNbAcYDDgETHAADVAGrAcICswH/
-        AdACwwH/AckCvAH/AcgCvAH/AdECxAH/AboCrQH/A1cBvQgAAwwBEAJSAVQBpgM0AVQCRwFIAYMDRAF6
-        AzQBVANMAY8DTwGXA08BlwNMAY8DNAFUA0QBegJHAUgBgwI0ATUBVQJRAVIBpwMMARAIAANQAZ0BowGd
-        AZkB/wGkAZIBkAH/AaYBkwGSAf8BtAGrAakB/wE8AbABvQH/ARQB0wHvAf8BFwHWAfMB/wEWAdUB9AH/
-        ARcB0QHzAf8BGAHVAfYB/wESAbIB5AH/AlMBVAGsDAADCgENA1cBuAFpAWMBZAHqAXICZwHuAbYBpAGi
-        Af0B0gG4AbYB/wHgAcsBygH/Ae0B2QHaAf8B4gLWAf8BbAJqAekDTgGWAxYBHhwAA0IBdgGoApsB/gHf
-        AtYB/wHUAssB/wHUAssB/wHaAtEB/wHaAs8B/wFiAlkB7AMSARkMAAMjATMDUgGpAjQBNQFVA0MBdwNK
-        AYsDQgF2Az0BZwM9AWgDQgF2A0oBiwNDAXcDNQFWA1IBqQMiATIMAANQAZoBbwGjAbYB/wGbAa0BsAH/
-        AZIBwgHDAf8BgQHiAeMB/wErAYMBuQH8A0ABcQM7AWQDOgFiAzoBYQM6AWEDMgFQFAADQwF4AXYCZgHv
-        AYMBbwFwAfEBbQJmAecDYQHaA1sBxANOAZUDOgFgAx0BKgMBAQIcAAMpAT4BiwKIAfkB8ALsAf8B4wLf
-        Af8B5QLhAf8B6QLmAf8B8gLtAf8BiQJ/AfsDNgFZFAADIwE0AlEBUgGnA0QBewM1AVYDPQFpAjwBPQFn
-        AjwBPQFnAj0BPgFqAzUBVwNEAXsCUQFSAacDIwE0EAADHAEnAkcBSAGDAVoCXQHKAVgBaAF1Ae8BWgJd
-        AcoDSAGGbAADIQEwAWoCZgHsBP8D+AH/AfQC8wH/AewC6gH/AekC5gH/Ab8CtwH/A08BnBwAAw8BFAM+
-        AWsDUAGdA0oBigNEAXsDRAF7AkkBSgGJAk8BUQGcAj0BPgFqAw8BFJgAA0ABcQGcApQB+QGBAn0B8gFp
-        AmgB5gNgAdYDWAHBA1QBrgNGAX8DAwEEMAADEQEXA0gBiANXAb8DVgHBA0wBkwMbASbYAAMGAQgDMQFP
-        A0IBdgNIAYcCVwFcAd8BAQECAbIB/wIIAcsB/wIJAcoB/wIWAZgB/wJaAVsB3AMoATxYAAMHAQoDRAF6
+        AzQBVQNKAYwDVgG2A1UBsQNVAbEDVQGxA1UBsQNVAbEDVQGxA1UBsQNVAbEDVQGxA1UBsQNVAbEDVQGx
+        A1YBtgNOAZgUAANeAdkBxQKyAf8BzwK7Af8DWAHAAykBPwNbAcsDXQHSAzEBTxgAAx8BLAJXAVoBxQJb
+        AWAB1gNXAb8DUAGkA0oBiwNBAXIDOAFdAzEBTgMtAUUDKAE9AyMBNAMaASUDYQHuA+IB/wPdAf8D2gH/
+        A9oB/wPYAf8D2AH/A9cB/wPXAf8D1QH/A9UB/wPUAf8DyAH/A9oB/wOZAf8DVwG9AWABQAE8Af0BtAFv
+        AWEB/wGwAYYBbwH/AbQBiAGAAf8BsgGIAXAB/wGxAYYBcAH/Aa4BhgFwAf8BrQGFAXAB/wGsAYUBbwH/
+        AaoBhAFvAf8BqQGBAW4B/wGoAYIBbwH/AaYBgQFuAf8BpwGDAYIB/wGsAW4BaAH/AVIBRAFDAfQIAAM6
+        AWIDOAFeAzIBUQFzAmsB9gHmAtIB/wHnAtgB/wHFArQB/wGdAo4B/wHMAroB/wHgAswB/wN/Af4DNwFb
+        EAADAgEDAk8BUQGcATEB3gL/AT8BswHHAf8BIQGNAa0B/wEQAZYB0QH/ARIBfwG5Af4BPgFZAXsB9QJX
+        AWAB6AJaAV4B1QNXAb8DUgGmA0kBiQM0AVQDhAH3BP8D9AH/A/MB/wPzAf8D8QH/A/AB/wPuAf8D7QH/
+        A+sB/wPsAf8D5wH/A5YB/wPQAf8DzAH/A1kBwwGmAUwBQAH9AfMB2wHOAf8B4AHRAcYB/wHfAc0BwQH/
+        AdoByQG/Af8B2gHIAb0B/wHaAcUBuwH/AdkBxQG6Af8B2QHFAbgB/wHYAcMBtgH/AdgBwQG0Af8B2AHB
+        AbIB/wHWAb8BsAH/AdgBxAG1Af8B5AG8AagB/wFZAU8BTQHyBAADNQFXAa8CnQH/AbgCpAH/AaUCkwH/
+        AccCtAH/AeEC0QH/Ae0C4QH/AewC3wH/AeMC0gH/AdsCzgH/AfQC6wH/AfEC4gH/AVkCVwHCEAADDgET
+        AVcBXwFlAegBUQHTAfQB/wGzAWwBTAH/AeIBqQGEAf8BwQGUAWIB/wGmAZgBbQH/AYIBowGdAf8BUAGw
+        AcwB/wE0AbgB9gH/ASABsQL/ARQBngL/AQQBUgHTAf8DUQGgA3MB9gP7Af8D6gH/A+sB/wPqAf8D6AH/
+        A+cB/wPmAf8D5AH/A+MB/wPkAf8D3wH/A5wB/wPQAf8DxAH/A1YBwQGkAUsBQAH9Ae8BxwGcAf8BxAGl
+        AYIB/wHZAawBbgH/AfMBtwFwAf8B8QGxAWcB/wHyAa0BYAH/AfIBqQFYAf8B8gGkAVIB/wHyAaABTAH/
+        AfIBnAFFAf8B8gGZAT4B/wHyAZUBOAH/AfUBlQE1Af8B9gGQAS4B/wFWAVMBUQHxAwwBEANkAecBzAK5
+        Af8B3QLLAf8B2gLHAf8B2ALHAf8B6QLcAf8B8QLmAf8B9gLsAf8B9gLtAf8B9gLtAf8B/QL2Af8B3QLQ
+        Af8DYQHcA0UBfgMEAQYIAAM4AVwBIgGpAfQB/wFbAaMBtAH/AeQBtAGLAv8BzwHEAv8B1gG9Av8B3AG2
+        Af8B+wHIAZ0B/wHmAbMBhAH/AcQBoAFpAf8BnwGbAXAB/wFtAqoB/wFKAc4C/wJaAVwBzQN1AfYD/AH/
+        A+0B/wPtAf8D7AH/A+oB/wPpAf8D6AH/A+YB/wPlAf8D5QH/A+EB/wPTAf8D6gH/A8EB/wNWAcEBqAFK
+        AUAB/QHmAcsBrgH/AdAB3AHjAf8B1QG9AaYB/wH+Ab0BgAL/AbwBgAL/AbYBaQL/AbIBYgL/Aa4BWwL/
+        AakBVQL/AaUBTwL/AaIBSAL/AZ8BQgL/AZ8BPgL/AZkBNgH/AVkBUwFRAfEEAANMAZABzAK6Af8B6QLb
+        Af8B6ALbAf8B7QLgAf8B8gLmAf8B3gLRAf8B0ALDAf8B5QLaAf8B/AL0Af8B/QL3Af8B5wLbAf8B2wLG
+        Af8BsQKeAf8DOgFiBAADAwEEA1YBtgFCAc8C/wGXAZABgAH/Af0B1QG6Af8B9AG7AbkB/wH9Ad4BvwH/
+        Af4B3QG/Av8B5gHLAv8B5wHLAv8B5wHJAv8B0QGuAf8B0QGgAVMB/wEYAYkB0gH/A0oBigN1AfYD/QH/
+        A+4B/wPuAf8D7QH/A+sB/wPqAf8D6QH/A+cB/wPmAf8D5gH/A+MB/wOiAf8D0wH/A8cB/wNWAcEBpwFK
+        AUAB/QHwAdYBugH/AegB8wH6Af8B4QHKAbQB/wH7AbwBgQL/Ab0BggL/AbcBbAL/AbMBZgL/Aa8BXwL/
+        AasBWgL/AacBVAL/AaQBTQL/AaEBSAL/AaIBRQL/AZwBPwH/AVkBUwFRAfEDFQEdA0gBhAHAAqsB/wHm
+        AtcB/wHsAuAB/wHvAuMB/wFoAmYB7wNCAXQDLAFEA0gBhQGaApUB+gH/AvwC/wL7Af8B+QLzAf8B8ALl
+        Af8DUwGqBAADGQEjAUIBWQGAAfUBYwHJAesB/wHIAaABbgH/AfwB0wHRAf8B9gHLAcUB/wH8AeMBygH/
+        Af0B4AHKAf8BrgGgAYEB/wHiAcUBsAL/Ad0BxQH/AfQByQGsAf8B+AHYAasB/wNaAdsDIwEzA3UB9gP9
+        Af8D8AH/A+8B/wPuAf8D7AH/A+sB/wPqAf8D6QH/A+cB/wPpAf8D5AH/A5EB/wPNAf8DywH/A1YBwQGl
+        AUwBQAH9AfsB1AGqAf8B4wHDAaIB/wHvAcABlgL/AcIBjAL/Ab4BhQL/AbkBcAL/AbUBagL/AbEBYwL/
+        Aa4BXgL/AaoBWAL/AacBUgL/AaQBTQL/AaYBSwL/AaABRAH/AVkBUwFRAfEDYQHkAcECqwH/Ac0CtgH/
+        AeQC1gH/AfMC6QH/Ac0CvQH/AzQBVQgAAwsBDwFxAm4B8wH/AvoJ/wH9AvYB/wNbAcsDAAEBAkEBQgFz
+        ASoBoAH9Af8BlQGwAa0B/wHtAcQBpAH/AfUBxwHVAf8B+AHhAdIC/wHpAdsB/wHPAcMBpwH/ASsBpAE8
+        Af8BUQGRAUgB/wHfAbsBrAH/AfUBywG0Af8B+AHOAaAB/wNKAYoDEwEaA3UB9gP+Af8D8QH/A/EB/wPw
+        Af8D7gH/A+0B/wPsAf8D6gH/A+kB/wPoAf8D5gH/A8sB/wPoAf8DxwH/A1YBwQGoAU0BQAH9AecBygGo
+        Af8BwwG4Aa0B/wHXAbUBlgL/AcUBjwL/AcEBigL/AbwBgwL/AbgBbgL/AbQBaAL/AbIBYgL/Aa4BXQL/
+        AasBVwL/AagBUgL/AakBUQL/AaQBSgH/AVoBUwFRAfEBYAJfAeAB0gK9Af8B4gLSAf8B7QLiAf8B+ALt
+        Af8BigKFAfkDHQEpBAADFAEbA1UBsgHYAscB/wH+AvsF/wGbApYB+wNRAaADKAE9AwQBBgJZAVwByQFa
+        AcgC/wG4AaYBhQH/AfkB1gHTAf8B8wHLAdgB/wH3AesB3gH/AfwB5AHeAf8BgQGxAWkB/wFbAegBnwH/
+        AU0B2wGNAf8BUQGWAUsB/wHrAdYBywH/AmEBXAHcAykBPwMNAREDdQH2BP8D8wH/A/IB/wPyAf8D8AH/
+        A+8B/wPtAf8D7AH/A+oB/wPqAf8D6AH/A8gB/wPlAf8DyQH/A1YBwQGoAUwBQAH9AesB1gG/Af8B5AHz
+        Av8B2wHKAbkB/wH7AcMBjQL/AcQBjwL/AcABhwL/AbwBggL/AbkBbQL/AbUBaAL/AbIBYgL/Aa4BXQL/
+        AasBWAL/Aa0BVwL/AagBUgH/AVoCUwHxA1IBoQHUAsIB/wH2AuwB/wHyAugB/wH3Au4B/wHYAskB/wNg
+        AdYDVwG4AWECYAHoAc4CuwH/AewC4Qn/AXACbQHzAx0BKgQAAygBPAEoAU0BpAH6AZUBzgHiAf8B2AG2
+        AZEB/wH3AdMB7AH/AfMB4AHkAf8B/AHuAewB/wHKAdABuAH/AUwBxgFmAf8BWgG6AWMB/wFXAc8BhAH/
+        AU4B6AGbAf8BTAGZAUgB/wNOAZcDLwFKAxkBIwN3AfYE/wP0Af8D9AH/A/MB/wPxAf8D8AH/A+8B/wPt
+        Af8D7AH/A+0B/wPoAf8DiQH/A8kB/wPQAf8DVgHBAacBTgFAAf0B9gHcAb0B/wHnAeAB2AH/AecBzAGw
+        Af8B/gHHAZUC/wHGAZMC/wHCAYwC/wG+AYcC/wG7AYEC/wG4AW0C/wG0AWgC/wGyAWMC/wGvAV8C/wGx
+        AV4C/wGsAVgB/wFgAlMB8QMcASgDXAHRAXcCcQHzAeAC0QH/AfcC7wH/AfkC8QH/AegC2gH/AdwCyQH/
+        Ad8CzwH/AewC4wL/Av4J/wHwAuUB/wNYAcEDAQECAk8BUAGbAToBngL/AbUBvgGqAf8B8gHOAb4B/wH3
+        AdMB7wH/AfwB8wHxAv8B8QH0Af8BWgG6AVsB/wFVAboBXAH/AesB3gHYAf8ByAHSAbkB/wFfAcoBaQH/
+        AUQB7gGVAf8BWQFdAVkB1wM3AVoDKQE/A3cB9gT/A/YB/wP1Af8D9QH/A/MB/wPyAf8D8AH/A+8B/wPt
+        Af8D7QH/A+oB/wOwAf8D3AH/A88B/wNWAcEBqAFPAUAB/QH1AdcBsAH/AdQBtgGYAf8B6AG/AZkC/wHO
+        AZ4C/wHIAZgC/wHFAZEC/wHBAYwC/wG+AYYC/wG7AYEC/wG3AW0C/wG1AWkC/wGyAWUC/wG1AWQC/wGx
+        AV4B/wFgAlMB8QQAAwgBCwNhAdwB0AK7Af8B9QLsAf8B/QL4Bv8C/QL/Av4J/wH0Au0B/wH9AvsB/wHd
+        AtMB/wNAAW4EAAFLAU4BcAHwAYcBzgH9Af8BzgG5AZIC/wHdAfEB/wH8Ad4B7gH/Ad4B2wHUAf8B5gLb
+        Af8BxAHSAbYB/wHxAeoB4wL/AfMB9QL/AfcB7gH/An8BiAH+A1UBugFNAaUBWAH6AVkBXQFZAdcDMAFN
+        A3cB9gT/A/cB/wP2Af8D9gH/A/QB/wPzAf8D8QH/A/AB/wPuAf8D7QH/A+sB/wPiAf8D9AH/A8wB/wNW
+        AcEBqAFPAUAB/QHmAdQBvAH/AdIB2gHgAf8B1QHEAbEB/wH8Ac0BnQL/AcsBnAL/AccBlQL/AcMBkQL/
+        AcEBiwL/Ab4BhgL/AbsBggL/AbgBbwL/AbYBagL/AbgBagL/AbQBZAH/AWACUwHxCAADVQGwAdwCywL/
+        Av0B/wH8AvUB/wHrAuEB/wH6AvYJ/wF3AnIB8gNEAXkDVAGuA0oBjAgAAl0BYgHiAbwB4wHkAf8B6QHH
+        AZIB/wHuAdcB0AH/AVABnAFDAf8BCwGKAQYB/wEKAYABAwH/AUcBgwExAf8B7wHdAc4C/wHyAeAB/wHn
+        AeEBwgH/AlkBXQHSAxsBJgMiATIDWwHIAVgBWwFYAcYDdwH2BP8D+QH/A/gB/wP4Af8D9gH/A/QB/wPz
+        Af8D8gH/A/AB/wPxAf8D7QH/A50B/wPSAf8D0gH/A1YBwQGoAU8BQAH9AfAB4QHNAf8B5gHxAfkB/wHf
+        AdMBwwH/AfwB0gGlAv8B0gGlAv8BzgGfAv8BywGZAv8ByAGUAv8BxAGQAv8BwgGLAv8BwAGHAv8BvQGC
+        Av8BvgGEAv8BvAFtAf8BYAJTAfEIAAMSARkDUgGjAdsCzQH/A2EB4gNAAW4DZAHnAf8C/gH/AfwC+QH/
+        A1wByRQAAy0BRQNVAbIBWgJdAcoBWQJkAewBQgHKAT0B/wFEAd0BQgH/ATcB2AExAf8BEwGMASMB/wGN
+        AawBxQH/AaoBzAHXAf8BWQFkAW4B7AMxAU8DCAELAwABAQMCAQMDHwEsA3kB9gT/A/sB/wP5Af8D+AH/
+        A/YB/wP0Af8D8wH/A/IB/wPxAf8D8QH/A+0B/wOWAf8DzwH/A9QB/wNXAcIBlQFxAU0B/gH/AfIBzQH/
+        AfoB3gHFAv8B2wG4Av8B4AGyAv8B3gGtAv8B2QGmAv8B1gGiAv8B0wGcAv8BzwGYAv8BzQGUAv8BywGQ
+        Av8ByAGMAv8BywGMAv8BxgGHAf8BXwJMAfMQAAMyAVADHwEsBAADSgGJA2EB4gNWAbEDNQFXIAADIAEu
+        A1sBwwF6AZIBegH3AVwBYAFcAdQDPQFpAz4BawJBAUIBcwMfAS0DBAEFAwABAQwAA4gB+Bz/A/4B/wP9
+        Af8D/QH/A/sB/wPfAf8D9gH/A9QB/wNXAcIBWQFPAUsB8gF0AU0BRwH6AXIBTQExAfoBcgFNATIB+gFx
+        AU0BMgH6AXABTQExAfoBcAFNAS8B+gFvAU0BLgH6AW8BTQEsAfoBbgFNASoB+gFuAU0BKgH6AW4BTQEp
+        AfoBbgFNASkB+gFqAUMBQQH5AXABMQErAfwDWwHZgAADWwHLA6UB/gOxAf0DsQH9A7EB/QOxAf0DsQH9
+        A7EB/QOxAf0DsQH9A7EB/QOxAf0DswH9A7AB/gNqAfUDOwFlTAADVgGzA1IBqQM1AVgDLQFFAxwBJwMX
+        ASADOwFlAVoCXwHbA0EBcwMaASQDBAEGGAADFQEdA0IBdgNVAbIDVwHCA1YBwQNUAasDPgFrAw8BFBwA
+        AxABFgNbAcgDZAHxA2IB7wNiAe8DYgHvA2IB7wNnAfIDWgHTAxQBGxQAA1YBswFnAlcB8gNfAeADVgG2
+        A0QBeQMoATwDDQESKAADUgGpAQABlgHtAf8BWwJeAdADRAF7AzUBVgJPAVEBnAE5AYMBmgH3AT4BcwGE
+        AfUDPAFmAykBPgMXASADCgENAwIBAwwAA0MBdwFcAlUB6gGfAXsBegH+AdoBoAGdAf8B4gG1Aa0B/wHe
+        Aa0BpQH/AcsBkQGKAf8BdQE6ATkB/ANcAdwDOAFdGAADBAEGA2cB6wP6Af8D8AH/A/AB/wPvAf8D8gH/
+        A/IB/wNXAd8UAAEsAisBQwGNAmoB+QH/AeMB1AH/Ae8BwAGzAf8B0AGbAZMB/wGIAWsBaQH+AV8BRAFF
+        AfgDWgHkA1cBvwNIAYYDLwFKAxABFhgAAzEBTgEAAVoB6gH/AQABJgH0Af8BUwFhAWoB7gFbAl4B2QEA
+        AYMC/wEAASkB8QH/AVMBZAFtAfEDUwGqA0EBcgMxAU8DIQExAw0BEggAA1ABowGrAmMB/QH7AuQC/wHp
+        AeYC/wHZAc8C/wHpAdkC/wHoAdYC/wHnAdUC/wHaAcoB/wHcAZoBkQH/AVwCPgH4A0UBfwgAAwQBBgMq
+        AUEDPwFtA0oBiwNZAesDvQH/A78B/wO8Af8DvQH/A74B/wOtAf8DXgHlA00BlgNCAXYDMAFNAxQBGwQA
+        AUkCSAGHAd8BrAGlAv8B3AHFAv8B1wHBAv8B3wHNAv8B4QHTAv8B2wHQAf8B9AHIAb8B/wHZAaQBngH/
+        Aa4BZQFiAf8BXwFEAUMB+wNZAesDWQHHA04BlAMlATcLAAEBAw4BEwFYAWQBaAHmAQABFgH3Af8BAwEp
+        Av8BBgFNAv8BAgENAfgB/wEAAWAB+AH/AbkBywG1Av8B3gGvAf8BcgFnAWQB8QNQAaQDNgFZAyIBMgQA
+        A0sBkAG2An8B/gX/Af4B/AL/AekB5wL/Ac0BwwL/AdgByQL/AdoByQL/AdcBxgL/AdoBxwL/AeUB0QH/
+        AfQBtQGnAf8BXAI+AfgDOAFcBAADWgHNA3cB/AG3AbgBuQH/AdAB0QHSAf8BzgHPAdAB/wHaAdsB3AH/
+        AuUB5gH/AeIB4wHkAf8B4gHjAeQB/wHjAuUB/wLlAecB/wHMAdEBzwH/AbsBvwG9Af8CrAGtAf8DcgH8
+        A1kB0gQAA1sByAHyAc0BxAL/AdsBzQL/AdYBzAL/AdkB0QL/AdoB1AL/Ad0B1gL/AeIB2QL/AecB3QL/
+        AegB3gL/Ad8B1AH/AfoBzAHBAf8B4wGtAaYB/wGjAUkBSAH/A1UBsgQAAwIBAwMLAQ8DHQEqAVsCYAHW
+        AR8BWwH9Af8BVAFcAf0B/wFGAVEB/AH/ASMBNwH8Af8BBwGUAfUB/wHEAcMBpQL/AdsBpQL/Ae8BxwH/
+        AewBvgGVAf8DUQGnAzMBUgMqAUEBigJlAfkB/wHwAe8C/wH7AfkC/wHwAe8C/wHvAe4C/wHZAdEC/wHc
+        AcwC/wHgAc4C/wHYAccC/wHTAcEC/wHUAcEC/wHjAcwB/wHcAZQBhwH/A1wB3AMQARYDtQH9AvgB9wH/
+        AdUB0QHOAf8B0wHQAc0B/wHSAdABzQH/AdEBzwHMAf8BxgHEAcIB/wG3AbYBswH/Ab4BvAG7Af8CzQHL
+        Af8C0QHPAf8BzwHRAc4B/wHOAc8BzQH/A9kF/wNgAfMDHAEoAWkCXQHwAf8B4QHaAv8B4AHcAv8B4QHf
+        Av8C4wL/AuUC/wLnAv8C5QL/AeEB4AL/Ad0B2wL/AdsB1QL/Ad0B0AL/AewB3QH/AcYBggFvAf8DTwGb
+        BAADCQEMAzABSwFcAmAB1AEuAZoB/AH/AaUBsAH+Af8BnQGrAf0B/wFrAY0B/AH/AU0BYAH7Af8BFgFD
+        AfkB/wENAYEB5gH/AZ4BrgGhAf8B/gG+AYMC/wHjAbAB/wGKAXoBaAH3A0UBfQFVAlMBsAHxAbsBuQL/
+        AdwB1wL/AdsB2AL/Ae4B7QL/AfcB9QL/AdQB0QL/AbkBsgL/AcYBuwL/AdgBxwL/AdYBxAL/AdIBvgL/
+        AdYBwQL/AdABugH/AY8CQAH9Az4BawGZApsB+wG7AbABpgH/AbABZwE2Af8BxgGIAUgB/wHGAYABQwH/
+        AcYBawE+Af8BxAFnATgB/wHEAWEBMwH/AcQBXAEvAf8BwgFXASkB/wHCAVEBIwH/AcIBTQEgAf8BwQFF
+        ARcB/wGZATsBGgH/AdIB1AHWAf8DXQHwAT4CPQFqAbECfwH+Af8B7AHrAv8B5wHoAv8C7gL/AvcB/wH+
+        AvgB/wH8AvMB/wH+AvUC/wHvAe4C/wHqAesC/wLlAv8B5gHiAv8B0gHNAf8BbgJBAfkDMAFLBAADQgF2
+        ATYBYgGFAfYBGQFmAv8BjgGmAv8BjAGlAv8BjAGaAf0B/wFoAYgB/AH/AT8BWwH9Af8BHgFEAv8BAAEm
+        Av8BAAFWAfIB/wFOAaQBvAH/AcMBhAFEAf8BywFqAS8B/wNWAcEBYwJiAekB/wHvAekC/wHkAdwC/wHS
+        AcsC/wHZAdIC/wHLAcoB/wH9AaoBrwH/Af4BwAHDAf8B/QGuAbQB/wH+Aa8BqwL/AdYBwwL/AdMBvwL/
+        AdABvAL/AdoBwwH/AcwBhgFqAf8DUwGtAZcBmQGbAfsBvQGvAaEB/wHmAaIBXQL/AbwBhwL/Aa4BawL/
+        AaUBYgL/AZwBWQL/AZQBUgH/Af4BjAFJAf8B/QGFAUAB/wH9AW4BOQH/AfwBZwEyAv8BXwEnAf8BwAFI
+        ARsB/wHMAtAB/wJdAV8B8AFWAlQBqwHwAckByAL/AvoC/wH8Af0B/wH+AvoB/wH0AeUB5gH/AeYBvgG9
+        Af8B3QGYAZMB/wHvAdIB0Ab/AfQB9QL/AfAB7wL/AfQB9QH/AfACvAH/A1sB4QMPARQEAAFYAlsBywFb
+        AmAB1gFCAWoBgQH1ASABiQHKAf8BDgGVAekB/wFMAYoB/gH/AWABbQH8Af8BEwGLAfkB/wE0AaYB4AH/
+        ASMBiwHOAf8BGwGAAcUB/wEkAaYB2gH/Aa8BhwFXAf8B3wGXAUYB/wFjAV8BVwHoAZACagH5Af8B9wHu
+        Av8B6wHiAv8B6QHeAv8B2AHNAv8BqQGqAf8B4gG2AboB/wGnAmEB/QGwAY0BjgH+Af0BrgGzAv8BwQG1
+        Av8B1gHCAv8BzwG7Av8B2QHCAf8B3wGeAY4B/wNXAcIBlwGZAZsB+wG9Aa8BowH/AeEBoAFdAv8BuQGH
+        Af8B+QGsAWwB/wH4AaQBZAH/AfgBnQFcAf8B9gGWAVUB/wH2AY4BTQH/AfUBiAFHAf8B9AGBAUAB/wHz
+        AW0BOQH/Af0BZgEwAf8BvQFNASMB/wHNAtAB/wJdAV8B8ANfAeMB/AHnAeYB/wH6AegB5QH/AeYBwQG8
+        Af8B0gGZAZYB/wHIAXABbgH/AcoBbAFqAf8BzwFrAWYB/wHTAYMBbQH/AfIB3QHaBv8C+AL/Av4B/wHS
+        AZEBkAH/A1MBsBAAAl0BWgHKAYQBKAEAAf8BRQFLAUUB/wEgAYsC/wExAVwC/wFFAZgByAH/Ae8BnAFE
+        Af8BhgEwAQAB/wFwASoBAAH/AZQBOAEDAf8B2wGMATMB/wHXAZUBRQH/AXMBXwFMAfMBmQFzAWoB+wH/
+        AfUB7QL/AegB3wL/AeoB3wL/AdgBzgL/AbMBtgH/AdIBsgGzAf8BUgI6AfcBpwJhAv0BwAHFAv8BuAGu
+        Av8B1wHBAv8BzwG7Av8B2AHCAf8B4gGiAZIB/wNXAcIBlwGZAZsB+wG8Aa8BowH/AeIBowFhAv8BvQGL
+        Af8B+gGxAYAB/wH5AakBaAH/AfkBogFhAf8B+AGbAVoB/wH3AZQBUwH/AfYBjgFNAf8B9gGIAUYB/wH1
+        AYIBPwH/Af0BbwE5Af8BvgFUASgB/wHNAtAB/wJdAV8B8AGKAm0B9wHdAZ8BnAH/AbIBUgFQAf8BowE+
+        AT0B/wGmAUMBQgH/AbABUQFQAf8BuAFcAVsB/wG/AWUBZAH/AcABXwFcAf8BzgFvAWgB/wH3Ad8B2Qb/
+        AfUB8wH/AaMBSAFGAf0DPQFqEAACWQFXAb8BngFMAQ4B/wG+AYcBQQH/AR4BhQHzAf8BAAFPAf0B/wFM
+        AVUBVgH/AYsBPgELAf8BZgEwAQIB/wFcASQBAAH/AV0BIgEAAf8BgAEzAQAB/wGNAUIBCwH/AWQCWQHr
+        AX8CYgH1Af8B9AHtAv8B6gHhAv8B5wHcAv8B4wHbAv8BsAGyAf8B7gGyAbYB/wHSAbIBswH/AeIBtwG5
+        Af8B/QGoAa0C/wHLAcQC/wHUAcMC/wHPAboC/wHbAcQB/wHbAZcBigH/A1UBsQGXAZkBmwH7AbsBrgGi
+        Af8B4wGmAWQC/wHCAZAB/wH7AbUBhAH/AfoBrgFuAf8B+QGnAWYB/wH4AaEBYAH/AfgBmgFZAf8B9wGV
+        AVQB/wH2AY4BTQH/AfYBiQFHAf8B/gGGAUEB/wG/AVgBLQH/Ac0CzgH/Al0BXwHwA1cBugHhAbMBtQH/
+        AeEBoQGlAf8BzgGHAYgB/wG9AWMBZQH/Aa0CUgH/AaUCRwH/AaQCRQH/AakBTAFLAf8BqgFHAUYB/wHJ
+        AWoBZgH/Af0B7AHqAv8B4QHcAf8BZAJTAfEDHAEoEAACSQFIAYgBzwGIATIC/wHGAXAB/wFPAaUB6QH/
+        AQMBgwH0Af8BrgGcAZEB/wG9AaABgwH/Ab0BpAGKAf8BtQGYAW0B/wGdAWgBQwH/AV0BKQEAAf8BhAE1
+        AQAB/wFbAlkBxAFeAloB2AH4AeQB3gL/AfAB5gL/AeMB3AL/AeUB4QL/AdcB1QL/Aa8BsgL/AbIBtwL/
+        Aa0BsQL/AcoBzAL/AeUB5AL/AdgB0wL/AcoBvAL/AdEBvAH/AaABdAFqAf4DQgF2AZgBmgGcAfsBuwGu
+        AaIB/wHjAasBaAL/AccBlQH/AfsBugGJAf8B+wG1AYMB/wH6Aa4BbQH/AfkBqAFnAf8B+QGgAWAB/wH4
+        AZwBWwH/AfcBlQFUAf8B9gGRAU8B/wH+AY8BSgH/Ab4BXQEzAf8BzAHOAc0B/wFdAl8B8AMYASEBagJk
+        AewB/wHmAekC/wHUAdcB/wH9AcoBzQH/AfUBvQHAAf8B5QGnAaoB/wHSAY4BjwH/Ab8CZwH/AbABVQFW
+        Af8BoQE7ATwB/wHQAYoBiAH/AekBowGdAf8DWQHMFAADHAEoAZwBcQFNAfoB9wHTAa0B/wGzAc4B7wH/
+        AWEBsQH3Af8B/gHzAecB/wHoAdEBugH/AekB0AG3Af8B6wHRAbgB/wHmAcwBtAH/AdcBtAGOAf8BnwFy
+        ATMB/gM7AWQBSQJIAYcB3QGsAaYC/wH5AfIC/wHlAeIC/wHjAeAC/wHmAeIC/wHjAd8C/wHUAdIC/wHb
+        AdkC/wHrAeoC/wHoAecC/wLmAv8B4wHfAf8B/QG3AasB/wFgAlkB6wMUARsBmAGaAZwB+wG7Aa4BogH/
+        AeMBsAFsAv8BzAGbAf8B/AG/AY4B/wH7AboBiAH/AfoBswGBAf8B+gGtAWwB/wH5AaYBZgH/AfgBowFh
+        Af8B+AGdAVsB/wH3AZkBVwH/Af4BlwFTAf8BvgFjATcB/wHLAc0BzAH/AV0CXwHwBAADOwFlAboBrAGt
+        Af0B/wHtAe8C/wHcAd4C/wHaAd0C/wHYAdwC/wHVAdgC/wHNAdAB/wH7AcMBxwH/Ae4BuwG/Af8B4AGc
+        AZ0B/wGFAkcB+QM8AWgYAANEAXoB8gHGAZsB/wH9AeoB2AL/Ae4B4QH/Af4B+wHzAf8B9wHkAdMB/wHz
+        AdgBwQH/AfMB3AHFAf8B+AHnAdMB/wH4AcUBkwH/A1EBoAMQARYDDwEUAWECWwHhAfMB3QHXAv8B/QH6
+        Av8B6wHoAv8B6QHlAv8B6wHmAv8B7AHnAv8B5gHjAv8B6gHpAv8B7gHtAv8B9wH2Av8B/gH9Af8BsAFa
+        AVcB/QNDAXcEAAGYAZkBnAH7AbsBrgGgAf8B6AG5AYQC/wHYAacC/wHLAZoC/wHFAZQC/wG+AYwC/wG5
+        AYcC/wGzAYEC/wGuAW0B/wH+AagBZwH/Af4BpAFjAv8BpAFfAf8BwgFqAT0B/wHLAcwBywH/AV0CXwHw
+        CAADWAG8AfMC6AL/AfcB+QL/AecB6gL/AeMB5gL/AeQB5wL/Ae0B8AL/AeQB5gH/AbUBoQGiAf0BXAJZ
+        AckDLwFKIAACRwFGAYABnAGRAX0B+AH+AfUB6gL/Af0B+AL/AfwB+AH/Af4B+AHxAf8B/gH1AekB/wG5
+        AaEBewH8A1ABnQMNARIDAwEEBAADKQE/AWoCXQHwAfMB4gHfBv8B+QH3Av8B9AHvAv8B8gHtAv8B7QHp
+        Av8B9AHyBv8C+AH/AbUCfwH+A1EBoggAAZkBmwGdAfsBswGnAZoB/wHMAZwBVAH/AeYBuQGCAf8B5QGu
+        AWkB/wHlAagBZAH/AeQBowFfAf8B5AGeAVoB/wHjAZoBVgH/AeIBlgFRAf8B4gGSAU0B/wHhAY4BSQH/
+        AeQBjgFGAf8BqQFZASwB/wLJAcoB/wNfAfAIAAMWAR8BagJmAesM/wH+AfYB9wH/AboBlgGXAf4BXQJa
+        AdMBMQIwAU0sAAMqAUECVgFVAbQBcgFqAWYB8AHsAckBrgH/AX0BdQFpAfICWgFXAb0BNQI0AVUDBwEJ
+        AwEBAgwAAyoBQQFhAl0B4gHdAa8BrgH/AfcB6QHoAv8B/QH4A/8B+wL/AfgB8wL/AfAB7QH/AewCygH/
+        AYYCbQH3A0sBjgwAAbYCtwH9AdsB2AHWAf8BtAGkAZUB/wG7AaoBmQH/AboBqgGaAf8BugGpAZoB/wG6
+        AagBmgH/AbkBqAGZAf8BuQGoAZoB/wG5AacBmAH/AbkBqAGZAf8BuAGnAZgB/wG4AaQBlgH/AbIBpQGa
+        Af8C7QHuAf8DZAHzDAADQAFuAboCsQH9BP8BvAKjAf4BXQJZAdcDNwFaaAADEAEWAUkCSAGIAWACWwHW
+        AXsCZQH0AZkBbQFkAfsBkAJqAfkBZQJfAegBVgJVAbEDKgFBEAADZQHlA50B+wGaAZwBngH6AZoBnAGe
+        AfoBmgGcAZ4B+gGaAZwBngH6AZoBnAGeAfoBmgGcAZ4B+gGaAZwBngH6AZoBnAGeAfoBmgGcAZ4B+gGa
+        AZwBngH6AZkBnAGdAfoBmgGcAZ4B+gOrAfwDXAHJDAADAQECA1cBuANlAeUBPQI8AWgDAwEENAADCAEL
+        AlMBVQGwAkwBgAHzAkQBgAHzAlMBVQGwAwgBC6gAAxABFgM6AWEDVQG0A0sBjgMDAQQgAAMEAQYDAgED
+        BAADAQECA1ABnQI0Av8CAAH0Af8DUAGdAwEBAgQAAwIBAwMEAQYkAAM9AWkDXQHXA1IBoWAAAwkBDAM3
+        AVoDVAGrA1wB6gOoAf0B5QLhAf8DfwH+A1UBsQMNARIYAAMlATcDSAGEDAADQgF0AiUB8AH/AgABzQH/
+        A0IBdAwAAkcBSAGDAyYBOBwAAwMBBANeAdkBuQK0Af8DXgHVAwEBAhgAAw0BEgMeASsDAwEEAxYBHgJY
+        AVkB3QFUAVUBXAHqA0IBdAMRARcDHAEoAzcBWgNEAXsDKAE9DAADKQE+A1QBrgNcAeoCqAGnAf0B3QLX
+        Af8B+QH3AfgB/wH+A/8B+gH+Bv8BrwKoAf8DWQHPAxkBIxAAAwwBEAJRAVIBpwM7AWQDJAE1AwABAQQA
+        AzkBXwIDAccB/wIAAasB/wM5AV8HAAEBAyQBNQM7AWMCUQFSAacDDAEQGAADVQGyAaICmwH/Ab0CuAH/
+        A0sBjgMAAQEYAANXAb0BSwFOAV0B8ANHAYIDIAEuAT8BUAFlAfQBAAGIAfQB/wEAAUkBpgH/A1kBzAFf
+        AlcB6AGZAU0BTAH/AbQCXQH/AVkCTwHyAzgBXggAAXACbQH1Ad8C0wH/AfoB8QHyBf8B+AH2AfgB/wH3
+        AfUB9gH/AfMB6AHgAf8B8QHLAaoB/wHxAdsBxQX/AccCwgH/A10B4gMtAUYMAAM+AWsDRAF6A0QBeQNC
+        AXQDAAEBBAADMAFLAh4BigH7Ah4BfAH7AzABSwcAAQEDQgF1A0QBeQNEAXoDPgFrFAADLQFFAXQCcgH6
+        AccCwQH/AWICYQHmAw0BEhwAAUIBUAFkAfQBAAGMAfwB/wEAAU0BrAH/A1gBxgFbAlgB6QGFAYEBlQH/
+        AScBvQH9Af8BAAGfAeAB/wGdAZIBsQL/AbsBtwH/Af4BqwGqAf8BywFaAVwB/wFgAkEB+QMwAU0EAAHh
+        AtMF/wH+Af0B+wL/AfsB8wH/Af4B9gHmAf8B+wHkAcAB/wH8AcwBkAL/AbQBUAH/AfcBogFCAf8B6gHF
+        AasB/wH9A/8C1QHYAf8DUwHxAzoBYggAA1ABnQM1AVYDSgGMAzQBVAM/AW0EAAMVAR0CWQFhAeQCWQFh
+        AeQDFQEdBAADPwFtAzUBVQNKAYwDNQFVAk8BUQGcDwABAQM7AWQDYQHuAbsCtAH/AboCtQH/AzoBYgQA
+        AwMBBANMAY8DQwF3AxsBJgwAAzABTQJUAWEB7gEnAbUB9gH/AQABlQHiAf8BawGDAacC/wG7Aa8B/wHk
+        AcoBxwH/AVwB1QHvAf8BiwGuAcoB/wH+AaoBpwH/AfACjgH/AewBhAGIAf8BzAFfAWIB/wNbAdkEAANW
+        AasBngKaAfoB+wH6AeoD/wHeAv8B9wHLAv8B4QGnAv8ByQGEAv8BtAFTAf8B9wGcATgB/wHmAYMBKwH/
+        Ad4BpQGHAf8B9gH3AfoB/wHlAeYB6QH/AV8CWAH5A0oBigMEAQYDSgGKAz4BagNCAXYDSwGOAzIBUAQA
+        AyUBNwJXAWAB6wJXAWAB6wMlATcEAAMxAU8DTAGPA0IBdgM+AWoCSAFJAYgIAAMNAREDWwHDAZwClgH/
+        Ab0CtwH/AcYCvwH/A1oBvQMEAQYDSgGLA1oBxQG3ArEB/wG/ArgB/wM/AW0MAAMUARwBYQJbAeEB9gHX
+        AdMB/wFeAeEB+QH/AVgBxQHnAf8B9QHHAcUC/wHDAbsC/wGyAa4B/wH+Aa4BrQH/AfsBsQG0Af8B7wGr
+        AaQB/wHfAZABigH/AegBgwGEAf8BjwFGAUcB/wgAAykBPwNcAc8BwQG1AaoB/gH/AewBywL/AdoBnQL/
+        AcEBZgH/Af0BrQFKAf8B8gGZAT0B/wHkAYMBMAH/AdQBVwEZAf8B0AGAAVIB/wHrAd8B3gH/AukB6wH/
+        AVkCUQH9A0sBkAJEAUUBfAM9AWcDPQFnA08BlwMSARkDCgENAlcBWQHCAgAB0wH/AgABoQH/AlcBWQHC
+        AwoBDQMSARkDTgGWAz0BZwM+AWoDQgF0BAADBAEFA1QBrAGwAqcB/wHEArwB/wHAArgB/wG4ArIB/wNb
+        AcMDXgHQAakCpAH/AcgCwgH/AckCwgH/A18B4wMUARwMAAMcASgBggFuAXAB/gH/AeQB3gH/Af4B1wHQ
+        Af8B+AHGAcQC/wHBAcMC/wHHAcoC/wHSAdMC/wLeAv8B4wHiAv8B3AHXAf8B8QG2Aa4B/wHFAWsBZAH/
+        A18B4BAAAz4BagNlAeUB4gHGAbIC/wG/AW8C/wGlAT0B/wHuAZEBNQH/AeABbwEvAf8B0wFYASAB/wHD
+        ATYBBQH/AbwBPwEiAf8B4QG9AbkB/wHfAdQB1gH/A1sB0ANEAXsDPQFnAz0BZwNPAZcDEgEYAw4BEwJZ
+        AWEB5AEVAScC/wIAAfQB/wJZAWEB5AMOARMDEQEXA04BlgM9AWcCPQE+AWoDQgF0BAADMwFSAaYCnQH/
+        AcMCtwH/AckCxgH/A9MB/wHXAtUB/wGhApYB/wG8ArUB/wHJAcIBwQH/AYoChwH5A00BkQMSARgQAAME
+        AQYBSgJJAYkBkgGFAYYB+wH2AtUC/wHuAe0C/wH9AfwG/wH8AfkC/wHwAe0C/wHgAdsB/wHzAcgBwgH/
+        AdMBoQGcAf8BhQFXAVQB/wM4AVwUAAMEAQYDTAGTAXcBcAFvAfQB7QGvAYoB/wHwAY0BPQH/Ad4BZgEp
+        Af8B0AFbATAB/wHEAVgBOwH/AbcBUQE/Af8BvAGFAXAB/wG4AagBqgH/A1UBtANKAYoDPQFpA0IBdgNM
+        AY8DLAFDBAADOwFlAkwBdwHzAkQBcwHzAzsBZQQAAysBQgNMAY8DQgF2Aj0BPgFqAkkBSgGJBAADVgGz
+        Ab0CsgH/AbsCsgH/AcgCxgH/AeIC4wH/AeAC3QH/AagCngH/AZMCjwH7A1QBpgMaASUfAAEBAzEBTgNW
+        AbMBaAFmAWQB7AHJAbcBsQH/AdEBvAG3Af8BzQG1Aa8B/wGVAY0BiwH7A10B0gNnAfIB1gHKAckB/wG1
+        AbEBsgH/AzkBXxwAAxoBJQNbAcYBxQGfAZQB/wHLAZwBjQH/AbwBnwGdAf8BtgGkAaUB/wG2AakBqwH/
+        AbYBpgGnAf8BXwJSAfQDJQE3Ak8BUQGcAzUBVQNKAYsDMgFQA1IBowMRARcEAAMWAR4DFgEeBAADEQEX
+        A1IBpAMyAVEDSgGLAzUBVgNQAZ0EAANcAd8BuQGuAawB/wGIAWsBbAH/AaUCmwH/AewC6wH/AbgCrgH/
+        AakBngGaAf8BQgFZAW0B9QNCAXQDMwFTAjwBPQFoAyMBNAMzAVMYAAMBAQIDFgEfAyIBMgMoATwDJgE5
+        AyYBOQMjATMDYAHeBP8BygLDAf8DNgFZIAADWQHHAbkBrQGwAf8BvQGyAbYB/wG6Aa4BsAH/AbsCrAH/
+        AcgCtgH/A38B/gNCAXYEAAM+AWsDRAF5A0MBeANCAXMDOQFfA1IBowMuAUcDEQEXAxEBFwMuAUcDUQGi
+        AzoBYANCAXMDRAF5A0QBegM+AWsEAAMWAR8DXAHPAYsBawFpAf8BswKmAf8BuwKzAf8BvgG1AbQB/wHE
+        Aa4BqwH/ARIBqwHJAf8BAAHLAfwB/wEAAawB7AH/AQABswHwAf8BAAGUAd0B/wEAAZ4B5wH/A04BmQwA
+        AwIBAwMVAR0DFgEfAxYBHgMbASYDIwE0AzUBVwNPAZcDXQHXAc4CzAH+AeoC5QH/A1sBxgMOARMcAANU
+        AasBwgKzAf8B0ALDAf8ByQK8Af8ByAK8Af8B0QLEAf8BugKtAf8DVwG9CAADDAEQAlIBVAGmAzQBVAJH
+        AUgBgwNEAXoDNAFUA0wBjwNPAZcDTwGXA0wBjwM0AVQDRAF6AkcBSAGDAjQBNQFVAlEBUgGnAwwBEAgA
+        A1ABnQGjAZ0BmQH/AaQBkgGQAf8BpgGTAZIB/wG0AasBqQH/ATgBsAG9Af8BEAHTAe8B/wETAdYB8wH/
+        ARIB1QH0Af8BEwHRAfMB/wEUAdUB9gH/AQ4BsgHkAf8CUwFUAawMAAMKAQ0DVwG4AWMBXgFfAeoBaQJh
+        Ae4BsgGkAaIB/QHSAbgBtgH/AeABywHKAf8B7QHZAdoB/wHiAtYB/wFjAmIB6QNOAZYDFgEeHAADQgF2
+        AaACkwH+Ad8C1gH/AdQCywH/AdQCywH/AdoC0QH/AdoCzwH/AWICWQHsAxIBGQwAAyMBMwNSAakCNAE1
+        AVUDQwF3A0oBiwNCAXYDPQFnAz0BaANCAXYDSgGLA0MBdwM1AVYDUgGpAyIBMgwAA1ABmgFrAaMBtgH/
+        AZsBrQGwAf8BkgHCAcMB/wGBAeIB4wH/ASsBfAGxAfwDQAFxAzsBZAM6AWIDOgFhAzoBYQMyAVAUAAND
+        AXgBawJiAe8BdwFpAWsB8QNkAecDYQHaA1sBxANOAZUDOgFgAx0BKgMBAQIcAAMpAT4BhwKEAfkB8ALs
+        Af8B4wLfAf8B5QLhAf8B6QLmAf8B8gLtAf8BhQJzAfsDNgFZFAADIwE0AlEBUgGnA0QBewM1AVYDPQFp
+        AjwBPQFnAjwBPQFnAj0BPgFqAzUBVwNEAXsCUQFSAacDIwE0EAADHAEnAkcBSAGDAVoCXQHKAVgBYwFr
+        Ae8BWgJdAcoDSAGGbAADIQEwA2QB7AT/A/gB/wH0AvMB/wHsAuoB/wHpAuYB/wG/ArcB/wNPAZwcAAMP
+        ARQDPgFrA1ABnQNKAYoDRAF7A0QBewJJAUoBiQJPAVEBnAI9AT4BagMPARSYAANAAXEBkAKNAfkBdwJ1
+        AfIBZAJiAeYDYAHWA1gBwQNUAa4DRgF/AwMBBDAAAxEBFwNIAYgDVwG/A1YBwQNMAZMDGwEm2AADBgEI
+        AzEBTwNCAXYDSAGHAlcBXAHfAgABsgH/AgQBywH/AgUBygH/AhIBmAH/A1wB3AMoATxYAAMHAQoDRAF6
         A1IBqQNFAX0DJgE4AwoBDhQAAz8BbgNWAcEDVwG/A1YBvgNWAb4DVgG+A1YBvgNWAb4DVgG+A1YBvgNW
-        Ab4DVgG+A1YBvgNYAcADVgG+AzkBXwwAAz4BawFcAlcB3wGTAVIBPwH6AbYBfQE9Af4BVAE0AW8B/gED
-        AQgB1AH/ASgBKQHvAf8BLAEtAfcB/wFGAUUC/wFXAVAC/wEzATIBwAH/A1wBzgMKAQ4BXQJZAdcBgwFk
-        AVIB9wF1AWIBWwH2AXUBYgFeAfYBdwFiAVsB9gF3AWIBWQH2AXcBYgFaAfYBeQFiAVgB9gF5AWIBSQH2
-        AXsBYgFJAfYBewFiAUkB9gF7AWIBSQH2AXsBYgFJAfYBewFiAUkB9gGHAWUBUQH3AV4BWwFaAdkUAAFV
-        AlMBsAHlAaYBSgH/Ae4ByAGXAf8BpQF/AVsB/gFtAVIBPQH3A1cB3wNUAasDPgFrAyMBMwMEAQYEAAF5
-        Am0B9gHZAtMB/wHJArgB/wG4Ap8B/wG8AqIB/wHEAqkB/wG+AqQB/wG8AqoB/wHJAsEB/wHSAswB/wHH
-        Ar0B/wHFArAB/wHeAsAB/wHkAsUB/wHCApMB/wNXAcUEAAMDAQQDUwGqAbgBnAFdAf0B/wHWAaoC/wHZ
-        AZwB/wHbAbMBmgH/AR4BGAG+Af8BGwEdAekB/wItAfcB/wJKAv8BTQFRAfMB/wEzAUQB4AH/ATkBMQHs
-        Af8CWAFeAeUDDwEUAXICWQHyAd8B2wHfAf8B5wHgAeIB/wHhAbcBqgH/AeYBtAGSAf8B6gG5AZAB/wHd
-        AbEBnQH/AdkByAHGAf8B2gHVAdoB/wHaAdIB1QH/AdsB1AHXAf8B2wHUAdgB/wHcAdUB2AH/AeEB3AHf
-        Af8B3AHbAeEB/wF3AWQBUwHxBAADFgEfA1oBygNZAcQDSgGKAcgBqwFjAf0BuAG/AWwB/wG+AcQBnQL/
-        Ae8B0AL/AewByQH/AfYB1wGtAf8B3AG0AYYB/wGoAYABSgH9AWQBSQE3AfYBXwFbAVoB4ANOAZgBtAKo
-        Af0B+gP/AeIC2gH/Ac0CugH/AdQCvgH/AdACvAH/AdICygH/AfgC9w3/AfEC7QH/AeAC1AH/AfkC2gH/
-        AeMCsQH/A1gBywQAA1ABnQHnAa0BcAL/Ae4BxAL/Ad8BtQL/AegBrAH/AasBlwGgAf8CAAHFAf8BEQET
-        AfMB/wJEAv8BWwFMAfsB/wE/AUsB7AH/ARwBuQHpAf8BGAFSAcAB/wNWAb4EAAFqAWEBXAHuAe0B7AHv
-        Af8B/gHDAZ8B/wH+AakBSQH/AdgBlwFoAf8BvQGCAWsC/wGtAVQB/wHpAZwBWQH/AbwBoAGdAf8BwwGz
-        AbQB/wHIArcB/wHMArwB/wHQAsEB/wHdAdAB0QH/AewB6gHtAf8BbwFhAVUB7gQAA0gBhAFlAe8BkQH/
-        AVABvwFkAf8BPAFyAR0B/wFhAb0BUgH/ATIBxgFBAf8BOAGXASgB/wHpAccBowL/AeUBxAL/AeoBzAL/
-        AfIB2QL/AfUB3QL/AewB0AH/AfoB1QGpAf8BYgFVAVMB6gGdAokB/AHvAvIB/wHYAs8B/wHFArEB/wHI
-        ArIB/wHAArMB/wHlAt8B/wH6AvcB/wH2AvUB/wHvAfAB8QH/AfIC8AH/AfcC8gH/Ad4C2QH/AdgCwQH/
-        AdoCqgH/A1sByAMvAUoBoAFxAU0B+gH/AccBkQL/AdMBnwL/AccBjgL/AdIBhwH/Ab0BlwGCAf8CAAHG
-        Af8BIgEgAv8BYQFnAfoB/wE6AWYB3QH/AT8BOgHeAf8BLgGDAfwB/wEAAbIB7wH/AUsBVQFeAe0DNgFZ
-        AWoCYQLuAd8B4AL/AbYBcgL/AdoBjAH/AZsBjAHEAf8BQQE8AdAB/wH3Ac4BjwH/AfwBsQFcAf8B5QG+
-        Aa4B/wLrAe8B/wHsAuUB/wHsAuYB/wHtAucB/wHyAu0B/wHuAe0B7gH/AW8BYQFYAe4EAAM6AWEBlgHZ
-        AacB/gHuAf8B8gH/AaUB+AG5Af8BoAHxAbEB/wGoAf8BwAH/AWUBvwFjAf8B8gHZAbkC/wHnAcoC/wHo
-        AcwB/wH9AegBzwH/Af0B6QHTAv8B+AHqAf8B9QHdAcIB/wNTAa0BnQKIAfwB8ALzAf8B2QLQAf8ByAKz
-        Af8BwAKtAf8BzALBAf8B7gLlAf8B6ALmAf8B1ALSAf8BywLHAf8BygHJAcgB/wHkAuAB/wHuAuYB/wHW
-        AskB/wHRAqMB/wNbAcgBWgJYAcABzgFyATMB/wHRAYwBRgH/AfwBwwF0Av8BvQFpAv8BvAFfAf8B7QGw
-        AVQB/wE0ASEBpQH/AjsC/wFoAW8B/gH/ASABwQH3Af8BEwGKAeMB/wFUASQBkAH/AVMBhAGnAf8BAAGI
-        AegB/wNQAZ0BagJhAe4B8gHpAegB/wH8AcsBqAL/AfEByAH/AbEBrwHjAf8BbAFqAeMB/wH7AfABzgH/
-        AfUBwgGYAf8BxgGgAZQB/wHDAbcBuQH/AcoCuAH/Ac4CvgH/AdACwAH/AdsC0AH/AfAB7wHyAf8BcgFh
-        AV0B7gQAA1ABngGMAegBpQH/AeEB/wHjAf8BugH/AcEB/wFyAf8BggH/AXEB8gGRAf8BWAGjAU4B/wHt
-        AdcBwQL/Ae8B1wH/AfsB6gHVAf8B+wHsAdsB/wH6Ae4B4AL/Af4B8QH/AZUBgAFfAfsDKgFBAZ0ChwH8
-        AfAC8wH/AdkC0AH/AccCsgH/Ab0CrAH/AdMCxwH/AeoC4gH/AeMB4QHgAf8BkQGNAYwB/wEtASsBKgH/
-        AaABnQGbAf8B2QHXAdYB/wHsAuUB/wHaAtAB/wHJAp8B/wNbAcgBdQFjAVQB7QGqAVcBHAH/AZcBPgED
-        Af8BwwFuASsB/wH5AbEBUgL/AbEBUwL/AbwBUAH/AbUBcAFLAf8BRQE7Aa8B/wFbAVkB7gH/AUgBaAHd
-        Af8BBwG1Ae8B/wFCAZUBswH/AbgBZwFRAf8CWgFeAdkDIQEwAWoCYQHuAfYB9QH2Af8B/QHiAdQC/wHk
-        AckB/wGjAZ4BwwH/AV0BWgGoAf8B/QHeAcMB/wH3AdUBxAH/Ad4B0wHRAf8B3gLWAf8B4gLYAf8B5ALa
-        Af8B5ALcAf8B6wHlAeYB/wH0AfUB+AH/AXICYQHuAzsBZAFfAb8BfwH+AdoB/gHlAf8B2AH/AdwB/wGs
-        Af8BuAH/AYkB/QGTAf8BnAH6Aa0B/wE8AcABVQH/AWABjAFEAf8B+AHnAdoB/wH9AfIB5AH/AfkB7wHj
-        Af8B/AH4AfAB/wH8Ae0B3AH/AV0CWQHSAwEBAgGbAocB/AHwAvMB/wHZAtAB/wHHArIB/wG+Aq4B/wHV
-        AsgB/wHoAuEB/wHoAeUB5AH/AVsBVgFVAf8DAAH/AYECcAH/AeAC3QH/AeoC4gH/AdsC0gH/AcYCnwH/
-        A1sByAGYAW4BPgH4AY0BQgELAf8BbwErAQAB/wGbAUkBDQH/AfEBrQFXAv8BxAFyAv8BzgGHAf8B1AGQ
-        ATgB/wFnASwBDAH/AVEBKgE5Af8BkgFFAS8B/wGiAZoBiQH/AS8BrAH5Af8BngGDAYAB/wNQAZ0EAAFr
-        AmEB7gH5AfgB+QP/AfsB/wHEAckBygH/AUwBigGyAf8BLwFnAZ8B/wGCAZkBpwH/AewB3QHYAf8B3wLV
-        Af8B3ALSAf8B3wLWAf8B4QLXAf8B4gLZAf8B6gLjAf8B+AH5AfsB/wFyAmEB7gEwAjEBTQFqAawBhgH5
-        AdAB+AHTAf8ByAH9AdUB/wHjAf8B7wH/Ab8B/gHPAf8BiwHvAZIB/wFgAeMBhwH/AUcBnwE/Af8B8gHf
-        AdoB/wH9AfgB7wH/AfcB8QHtBf8BwgGhAYsB/gNCAXQEAAGbAocB/AHwAvQB/wHZAtAB/wHIArMB/wG8
-        AqwB/wHQAsUB/wHsAuQB/wHjAuAB/wGuAaUBpAH/AWcCXQH/AbUBrQGsAf8B4ALdAf8B7wLlAf8B2QLN
-        Af8BywKhAf8DWwHIAZwBagFBAfkBiQFDAQ0B/wGTAUoBDgH/AdsBngFQAf8B/QHLAYoB/wHhAawBaAH/
-        Aa8BbgE6Af8BjwFKARUB/wFsASsBAAH/AWsBKAEAAf8BhgE3AQAB/wGyAVoBEwH/AZwBYgFLAf8BrAFo
-        AUIB/wNRAaIEAAFsAmEB7gH+AvsB/wHzAfoB/QH/AZsB2AH5Af8BggG9AeIB/wFsAbIB1wH/AVgBtgHi
-        Af8BtAHKAdcB/wHKAbUBsgH/AcUCtQH/AcoCuwH/Ac4CvwH/AdECwQH/AdsC0AH/AvoB+wH/AXIBYwFh
-        Ae4DBAEGAWYBZAFcAecB1AHxAdAB/wGjAe0BtgH/AcwB/wHbAf8BkgHvAaMB/wGQAdQBjwH/AbYB1QGp
-        Af8B3wHjAdAB/wH9AfYB8wH/AfYB9AHyAf8B9wH4AfkD/wH8Af8BZwFfAVQB7gMNARIEAAGaAoYB/AHw
-        AvQB/wHZAtAB/wHHArIB/wHEArAB/wHHArwB/wHxAegB6QH/AfgB+QH7Af8B5wLlAf8B5ALeAf8B4QHe
-        Ad0B/wHyAewB7QH/AeoB5AHlAf8B1gHFAcYB/wHWAqYB/wNbAcgBdgFjAVcB6wHHAYkBOwH/AfMBtQFi
-        Av8B1AGbAf8B/gHdAbYB/wG+AZsBcAH/AZMBZAFFAf8BngFxAVEB/wGdAW4BTAH/AZABXAE0Af8BgAFC
-        ARIB/wFdASUBAAH/AXQBNAEAAf8BkQFjATQB/gNCAXQEAAFsAmEB7gL/Af4B/wHrAfUB/AH/Aa4B3AH3
-        Af8B2AH3Av8BwAHwAv8BcwHKAfMB/wG+AdgB5wH/AfUB8AHtAf8B8QLtAf8B8wLuAf8B8wLvAf8B8wLw
-        Af8B9wL0Af8B/gP/AXMBZQFhAe4DUQGiAfsB2gG8Bf8ByAHpAcwB/wGNAeUBmgH/AZAB2QGVAf8B9AHr
-        AecC/wH4Af0C/wH6AfsB/wH1AfcB9QH/AvcB+AH/Af0B/gL/Ae0B1QHIAf8DUQGnCAABmgKFAfwB8ALz
-        Af8B2ALPAf8BxAKxAf8BygK0Af8BxAKzAf8B0AHIAccB/wHQAccBwwH/A+wB/wHeAuAB/wH8AvoB/wH0
-        Ae4B7QH/AdQCzQH/Ad0CwQH/AdoCqAH/A1kByQJWAVUBtAHOAYkBOAH/AewBwQGQAv8B8AHbAv8B9QHp
-        Af8B8gHpAd8B/wHdAcoBtgH/AdkBxAGuAf8B4AHMAbgB/wHaAcYBsAH/AckBrgGUAf8BoQFrAUQB/wGx
-        AV8BIAH/AWUBVAFRAe4DGAEhBAABbAJjAe4E/wH8Af0C/wHPAecB9wH/AdUB7AH6Af8BtAHhAf0B/wGe
-        AdUB+gH/At4B4gH/AbkBoQGfAf8BuAKkAf8BvgKrAf8BwwKwAf8BxAK0Af8B0gHEAcUB/wH9Af4C/wF2
-        AWcBYQHuAYgBdwFVAfMB/wH8AfcF/wHvAdkBvwH/Ab0BxgGLAf8B5wH0AecC/wL7Af8B+AH6AfwB/wH6
-        Af0C/wH8A/8B/Qf/AZMBcwFfAfsDJgE4CAABsAKoAf0B9wL8Af8B3gLXAf8ByQK2Af8B0AK6Af8B2QHH
-        AcsB/wGmAY0BgQH/AZgBTwEeAf8BmgGWAZMB/wFoAW0BcAH/AeoC7AH/AecB3QHUAf8B5AHLAbEB/wHq
-        AccBqwH/AdMBpgGlAf8DXAHOAykBPgGQAWUBSAH2Ae4B0QGwAf8B+AHuAeIB/wH9AfMB6QP/AfwB/wH5
-        AfAB5wH/Ae8B1gG+Af8B8AHWAb4B/wHvAdYBvgH/AfEB3QHJAf8B+gHYAbIB/wHVAYYBPgH/A04BlAgA
-        AXkCagHyCP8B+wP/Ad8B8gL/AdMB7QL/Ae8B+wP/Av4B/wHtAukB/wHuAusB/wHwAu0B/wHxAe4B7wH/
-        AfIB7wHwAf8B9QH0AfUF/wF+AW8BZwHxAkABPwFuAl0BWgHTAa8BlgGHAfkB7wHUAbYB/wHzAcwBrAH/
-        AfMB1AG4Af8B7QHLAawB/wHsAcsBrwH/AfQB3gHKAf8B9QHiAdUB/wH3Ae0B5gH/AfcB5QHZAf8DWwHQ
-        AwEBAggAAYgCggH3AeUC3wH/AdQCxwH/AcYCtAH/AcwCuAH/AdgBwgHEAf8BvQGmAaIB/wGfAYEBZwH/
-        Aa0BoQGgAf8BqwGjAaQB/wHLAb8BwAH/AdMBwgHBAf8B4gHPAcYB/wHhAcgBugH/AckBpQGkAf8DUQGn
-        BAADRAF6AcMBpQFaAf0B/AHsAdcB/wH6AfIB5wH/AfsB8wHrAf8B/AH0AesB/wH3AeUB1AH/AfcB5AHS
-        Af8B+QHuAeAC/wHzAdsB/wHyAbEBcQH/AVsCWQHEAwQBBggAAWACXAHUAYYCbQH3AXkBaAFlAfYBewFo
-        AWQB9gF7AWgBYgH2AX0BaAFiAfYBfQFoAWIB9gF9AWgBYgH2AX0BawFiAfYBgQFrAWIB9gGBAWsBYgH2
-        AYEBawFiAfYBgQFrAWIB9gGBAWsBYgH2AYwBbgFtAfcBXgJaAdgIAAMlATcCTwFOAZcBZgFjAV8B4AHB
-        Aa4BmgH9AfMB3AHDAf8B/AHrAcoB/wGqAX8BZgH+A1UBsgJTAVIBqAFbAlkBxAMtAUUMAAE9AjwBZwFS
-        AlEBoQNdAdcBewJsAfoBZAJZAewBVgJUAasDUAGdAVIBUQFSAaEDUgGhA1IBoQFSAlEBoQNSAaEDUgGh
-        A1IBpANMAZMDGAEhCAACRwFGAYABkwF1AWIB9gH3AeIBzAL/Af0B9wf/Af0D/wH6Av8B7gHXAf8BtgF+
-        AWoB/ANWAbYDDAEQXAADBwEKAzABSwJWAVUBtAGHAW0BZQH0A1UBtWgAAygBPAJWAVUBtAFuAWMBXQHp
-        AaoBjAF9AfkBrQGTAXgB+gF8AWkBXQHwAVwCWQHJAzoBYf8AGQADHwEsA0sBjwNVAbQDVwG/A1gBwANX
-        Ab0DVAGuA0EBcwMNARJgAAMMARADTgGUA1UBtQNVAbQDVQG0A1UBtQNWAbYDVgG2A1UBugNWAb4DQQFz
-        GAADBQEHAwEBAiwAAzIBUAFLAVgBSwHvAScBmAE7Af8BLgGwAUwB/wEyAbgBUwH/ATMBuAFTAf8BLwGz
-        AU4B/wEpAZ0BQAH/AS8BTwEwAf0DVwHFAw8BFCwAAw8BFANOAZcDRgGAAwMBBCAAA0gBhwGeAT0BQAH/
-        AbEBSgFNAf8BtQFNAVAB/wG+AVUBVwH/AccBXAFeAf8BzwFkAWUB/wHUAWgBaQH/AdkBbQFuAf8B1QFz
-        AXQB/wFeAlkB5QMGAQgQAAJTAVUBrQEaAXMB0gH/AUIBaAGJAfUDWQHHAk0BTgGWAzsBZQNKAY0BmgFt
-        AVEB9wFfAV0BWQHXAVYCVQG0AU0CTAGRAUACPwFuAyUBNwQAAVwBXwFbAeABPQHVAWgB/wFKAeUBiAH/
-        AVUB4QGNAf8BWwHiAZIB/wFcAeEBkgH/AVgB4wGPAf8BTwHlAYsB/wFFAeABcgH/ASkBZwEtAf4DQAFx
-        KAADJQE3AVoCWwHhASQBkgEdAf8BLAFAAQwB/QNWAbMDEAEWHAABWwJYAcsB8AGbAZQC/wG7AaQB/wH+
-        Ab0BqQL/AbwBqAL/Ab4BqwL/AbwBqAL/AbwBqQL/Ab8BqgL/AcMBuAH/AV8CWAHjAwQBBhAAAUMBXQF5
-        AfABPAHBAf4B/wFfAckB/gH/AVgByAH+Af8BQwG3AfAB/wFeAWABagH/AfMBuAGGAv8BvwFyAv8BuQFl
-        Av8BsgFWAv8BsQFUAf8B7AGkAWIB/wNEAXkEAAE4AYABPgH8AWQB6AGcAf8BdAHeAZ8B/wGJAeEBpwH/
-        AZAB4wGsAf8BkQHjAa0B/wGNAeIBqgH/AYQB3wGiAf8BbgHsAaIB/wFDAa8BWAH/A1EBoCQAA0IBdgEz
-        AWIBOAH2AScB0AFeAf8BLAHJAToB/wErAZ4BAAH/AR8BVQEAAf8DWgHbAy0BRhQAAwEBAgFjAlgB6QH8
-        AcYBrAL/AfUB2QH/AfgB7gHZAf8B+gH0AeIB/wH7AfQB5AL/AfwB8QL/Af4B+QL/AfwB+AH/Ae0B4QHd
-        Af8DVgG+EAADCQEMAQEBYAHUAf8BTwHFAf4B/wGSAdgC/wGWAdwC/wGDAaoBvwH/AdgBnwFyAv8BzgGa
-        Av8BywGTAv8BxQGIAv8BvgFvAf8B+AGyAWQB/wFtAXABhwH/AlABUQGfBAABWAGTAV8B+wGUAeoBtAH/
-        AacB6AG8Af8BsgHsAccB/wG+AfMBzAH/AcAB9AHOAf8BtwHsAckB/wGtAeoBwAH/AZ8B8AG7Af8BWwG2
-        AW0B/wNMAZMgAAMnAToBKQF9AT4B+gEqAdcBYgH/ASkB1gFnAf8BJgG0AS4B/wEoAZgBAAH/ASsBpAEA
-        Af8BJgFrAQAB/wNaAcoUAAMjATMBkQFPAU0B+wH/AdMBtwL/AfcB3wH/AZ0BjwGCAf8BRgFCAT4B/wGO
-        AYgBjAH/AcIBsAGrAf8B6gHgAdED/wH+Af8BzQHBAcAB/wNGAYEQAAMcASgBAAFqAeIB/wFtAdAB/gH/
-        Ab4B6AL/AbgB5QH9Af8BnwGMAYQB/wH9AdkBtAL/AdYBqwL/AdMBpAL/Ac4BmwL/AcgBjgH/AckBjwFm
-        Af8BPgGvAfkB/wNSAakEAAFVAWUBVQHqAbIB8QHJAf8B0AH0Ad0B/wHmAfsB7AH/AeUB8QHrAf8B4gHv
-        AekB/wHtAfwB8AH/AdwB9gHmAf8BwAH5AdMB/wFTAZ0BWQH9AzYBWRwAAwwBEANYAcABIwG7AUgB/wEo
-        AdMBYAH/ASUBzQFfAf8BLAHAAT8B/wEpAZcBAAH/ASkBmwEAAf8BKgGYAQAB/wExAj4B+ANIAYYDAwEE
-        DAADRAF6Ab0BWgFQAv8B3gG+Av8B8QHZAf8BwgG0AaMB/wFHAU0BSAH/AYEBpwHAAf8BEAFMAacB/wJP
-        AW8B/wHvAdsByQH/AYoBegF4AfoDLQFFEAACKwEsAUMBCAGCAfAB/wGPAdkB/gH/AcIB6gL/AcEB5QH4
-        Af8B0QGnAYwC/wHeAbkC/wHcAbYC/wHZAbAC/wHVAagB/wHzAaQBZQH/AaYBqgGuAf8BQAG2Af4B/wNK
-        AY0EAANOAZkBtwHgAcAB/wH0Af8B9AH/AewB/QHWAf8BcQGHAdsB/wFdAWIB2wH/AdAB+wHFAf8B6QH/
-        AewB/wHNAfIB1AH/A1sB2QMHAQoYAAMmATgCVwFcAd8BAAEPAagB/wEYAa8BRgH/AScB1QFZAf8BRQHm
-        AYMB/wFEAesBhwH/ASwBwQFBAf8BKQGdAQAB/wEnAY0BAAH/AQMBYAGnAf8BCwE5AbAB/QNVAboDFQEd
-        CAADVQGyAdIBbAFYAv8B5QHDAf8B8AHaAcIB/wHpAdkBwgH/AbACpwH/AYwBvwHoAf8BDAGvAv8BAAFo
-        AdIB/wFiAWYBogH/AWICVgHvAxIBGRAAAzgBXgEYAZEB/AH/AZ4B3gL/AcgB6wL/AcUB4AHuAf8B5gG7
-        AZsC/wHlAcgC/wHWAbAC/wGRAUIC/wGmAV8B/wHVAWMBMQH/AZsB2wH6Af8BOwG1Af4B/wNBAXIEAAMP
-        ARQBWgFeAVoB1QGiAdIBoAH/AXEBwwG2Af8BGwFiAbkB/wEOAVABuQH/ATIBsAGVAf8BcQHTAY0B/wFd
-        AWgBXQHwAykBPhgAA0EBcwIuAW4B9gIAAfcB/wEAARIBywH/AUMBxAFUAf8BiwH7AagB/wFlAf4BnwH/
-        AUIB6gGDAf8BLQHWAWkB/wEpAcgBSQH/AScBoAEJAf8BAgFuAZwB/wEAAWgC/wEAATgBzgH/A1cB3wMw
-        AUsDAQECAWECWgHcAeMBkQFqAv8B7QHKAf8B5wHPAbYB/wHlAdABugH/AdoBxAG2Af8BSQFyAacB/wFh
-        AdkB9wH/ASABzgL/AQABmgHsAf8BGAE8AVkB/QNRAacDBgEIDAADRAF5ASkBmAL/AawB4wL/Ac8B7gL/
-        AckCzQH/AfMB2gHFAv8B8QHiAv8B6wHWAv8BrgFqAf8B2AGGAVYB/wErARsBcgH/AWcBqgHhAf8BNwGt
-        AfoB/wM4AVwIAAMZASMBRwFiAWUB9gFuAbQB3QH/Ab0B1AHfAf8BwgHXAd8B/wFaAZ4BywH/ARIBawFw
-        Af8DTQGWHAACJQGTAfgCAAL/AgAC/wIAAdkB/wFLAYsBbgH/AaYB+QGgAf8BZQH/AaAB/wE+AeYBggH/
-        AS8B1QFiAf8BKQHNAUsB/wEUAaIBRAH/AQABbgHEAf8BAAFgAv8BAAFqAv8BAAFHAeQB/wNYAcADHwEs
-        AWwBQQFAAfUB8wGtAYsB/wH7AeUBxQH/AdEBuQGkAf8BxgGyAaAB/wHtAdgBwQH/AcwBvgG5Af8BSwGL
-        AbMB/wFhAd0B8wH/ATsB8AL/AQABxQH7Af8BBgFRAX8B/gNYAcYDFQEdCAADTgGUATsBnwL/AbsB6AL/
-        AdYB8AL/Ac4BwgG2Af8B+wHwAeYC/wH2Ae0B/wH9AfEB4wH/Ae4BzQGvAf8BWAFJAZMB/wEAAQYBuwH/
-        AQABCQGtAf8BAgEVAbUB/wJXAVoBxQgAAzoBYQFTAagBvQH9AbQBzwHlAf8B5gHqAfEB/wHsAe4B9gH/
-        AbwByQHdAf8BPgGWAcwB/wNZAdIDHwEsAxIBGQMEAQYDBAEGDAACCwG8Af0CAAL/AgAC/wEWARQB/gH/
-        AgABxwH/ARUBUAFoAf8BUAHnAWIB/wFIAfoBgQH/ASoBxwFCAf8BBwGUAVQB/wEAAZsB1AH/AQABngL/
-        AQABYAL/AQABYgL/AQABXgH4Af8DWQHHAzoBYgGGATcBLwL+AcEBmQH/Ad4ByAGuAf8BxQGuAZoB/wHQ
-        Ab8BqAH/AdMBwgGtAf8B3wHNAbMB/wG4AaABmwH/ATgBXQGbAf8BWQHOAesB/wFNAf0C/wEAAd0C/wEA
-        AWABrAH/AlsBXQHaAyUBNwQAAlMBVQGwAVEBqwL/AcsB7QL/AeAB9AL/AdUBwAGtAf8B/gH7AfgC/wH7
-        AfcB/wHzAfAB7AH/AdMBzgHMAf8BTgFWAbcB/wFaAXIB8QH/ATIBSQHbAf8BMQFGAdoB/wJYAV0B0QgA
-        AVACUgGjAZ4B2QH0Af8BsgHgAfoB/wGqAdoB9gH/AZ0B1AH1Af8BlQHRAfUB/wFuAc0B9wH/AlMBYQHx
-        AV8CVwHfAWICWAHpAV4BWwFaAdkBXgJaAdgDUwGwAygBPAQAAhYBrQH7AgAC/wJDAv8CgQH+Af8BUQFO
-        Af0B/wEHAQAB3gH/AQIBKQGIAf8BJwGkATwB/wEKAZwBhwH/AQABowHsAf8BAAHMAv8BAAHHAv8BAAGc
-        Av8BAAFpAv8BAAFWAfQB/wNYAcYDTgGZAboBQQEuAf8B8wHAAZgB/wHWAcIBpAH/AdABuAGeAf8BxgGV
-        AY0B/wHLAYcBjQH/AccBgwGNAf8B1QGQAZQB/wHUAYIBkwH/AVsBUAGbAf8BTQGzAd4B/wFWAfYC/wEN
-        Ad8C/wE4AWgBpwH/AloBWwHcBAACWAFbAcsBaAG5Av8B3AHzAv8B6gH3Av8B3QHGAbIB/wHzAd8B0AH/
-        AfUB5QHYAf8B9gHpAd4B/wH4Ae0B5AH/Ab4BtgHMAf8BNgFBAbgB/wGXAZ8B0wH/AU0BkAHHAf0DHwEs
-        CAABTQJOAZYBsgHeAfIB/wHbAfcC/wHRAe8C/wG4AeYC/wGgAd8C/wGGAdcC/wNZAewBngFvAVwB+AH/
-        AekBwAL/Ad0BvAL/AdwBuAH/AdwBpQF0Af8BYAFXAVUB6wMwAUsCKwG8Af0CbgL/ApIC/wJvAv8CZQL/
-        AV0BWwL/ASIBFQHhAf8BHwEhAWIB+wEAAawB4wH/AQAB9QL/AQAB3gL/AQABwgL/AQABsAL/AQABpgL/
-        AQABcAH7Af8DWQHEA1oCygFWATwB/wHgAb4BmAH/AdMBtQGXAf8B0wGWAY0B/wHxAaIBpQH/Af4BswG0
-        Af8B/gG0AbYB/wH+AbcBuQL/AcQBwgH/AfkBuAG6Af8BgwGAAbgB/wFIAa4B5QH/Aa0B8gHzAf8BbwGw
-        AewB/wFNAVEBYAHtBAACWQFdAdIBiwHIAv8B8QH6Av8B9wH8Av8B9gH5AfsB/wHwAeUB3AH/Ae4B4AHV
-        Af8B7QHcAc8B/wHsAdgByQH/AeoB1AHCAf8B9AHwAe0B/wH3AfsC/wFYAWIBcgHpDAADKAE8AXcBlQGi
-        AfoE/wH1A/8BzwHyAv8BtAHyAv8BYgGPAbYB/gFnAVkBVQHyAfkBzAGXAv8B3gGyAv8B4AG5Av8B4QG5
-        Av8B7AG+Af8B7AGlAWgB/wNXAb0CWAFbAcsCcwHlAf8CkQL/Am4C/wJkAv8CYAL/AUQBQAGQAfoDUAGd
-        AVcBXgFiAd8BAAHpAf4B/wEAAeQC/wEAAcAC/wEAAbEC/wEAAa4C/wEwAW0BngH3AzoBYgFjAkoB7wG+
-        AWcBSAH/AcwBogGEAf8B1AGOAYcB/wH3AasBqQL/AbcBsgL/AbYBswL/Ab4BvAL/AcYBxQL/AdkB1wL/
-        AfwB+gH/AeYBsQG9Af8BXQFYAV4B5QFLAWgBsgH9ARwBWgHKAf8DSwGPBAADHAEnAlMBVQGtA1wB0QJd
-        AV8B1wJeAWMB3QJfAWYB4wFiAWMBbgHpAWIBaAF7Ae8BagF0AZYB9QFtAZABvwH7AYcBpgHwAf8BiAGr
-        AfUB/wJUAVYBqxAAAUYCRwGAAX4BmAGiAfoB1gHlAe4B/wG8AeIB8QH/AWoBjAGyAfwCUAFSAaMBYQJa
-        AdsB/wHaAZQC/wHNAZkC/wHOAZ0C/wHMAZsC/wHXAZwB/wH+AbUBZwH/A1cBvwQAAk8BUQGcAj4BtAH8
-        AoMC/wJZAfUB/wJLAWUB7wMzAVIEAAMQARYBWAJaAcABAAG1AfYB/wEAAc8C/wEAAaQC/wFaAV8BZQHg
-        AycBOgQAAXYBKwEnAfwBtgFkAU8B/wHoAasBoAL/AcYBwAL/Ac8BxwL/AdQBzQL/Ad4B1wL/AeYB4QL/
-        Ae8B6QL/AvoB/wG7AYQBmQH+A1QBrwMEAQYDQAFwAksBTAGPAwEBAi8AAQEDBQEHGAADLwFKAVECUgGh
-        A1IBqQM5AV8EAANFAX0B1gGNAXIB/gH/AfQB1AL/AfQB3wL/AfUB3QL/AdsBqgH/AYwBUgE+AfcDMQFP
-        CAADOwFkAlEBcwHuAlsBXgHQAxgBIRAAA0wBkgE0AWIBmgH2AlUBVwG6AwwBEAgAAV8CVwHfAZcBQQFA
-        Af4BtwJSAf0BqwFZAVsB/AGqAVsBYAH8AZkCXwH7AZkCXwH7AZwBVgFrAfoBmgFfAWIB+wF5AVkBZwHy
-        A0QBfHgAAUcCRgGAAWwBZQFeAeUBqgGEAXoB+gGeAYIBbQH3AWACXAHUAzMBUoQAA0sBjgNZAcMDVwHC
-        A0IBdkAAAxEBFwNEAXkDVgGzA1gBxgNXAcUDVAGvAz0BagMNARIQAAJVAVcBugEhASQBlAH7ATsBPQGO
-        AfgBOAE6AYsB+AE0ATgBiAH4ATEBNwGFAfgBMQE0AYIB+AEuATEBfgH4Ai4BfAH4ASsBLgF6AfgBKwEs
-        AXkB+AEpASsBeAH4AisBdwH4AisBdwH4ARwBHQFtAfsCWQFbAcMMAANTAaoDWAHRA1gBywNaAdUBUAFd
-        AWoB7QE/AV0BdwHzAVYBVwFfAegDWwHQA1wBzgNZAdIDRAF8CAABNgFtAYwB9wEAAbUB4QH/AQEBqwHa
-        Af8BTwFXAVkB7AMZASM4AANDAXcBYgFZAVgB6wJ/AU0B/gGBAakBSAH/AYYBuwFWAf8BiQG2AVcB/wGz
-        AagBcgH/AaIBVgFOAf0BWgJYAd4DOQFfDAABNwE4AYMB9gEjAT4B7gH/AQsBJgHkAf8BBgEfAeAB/wEJ
-        AR4B2gH/AQcBGgHVAf8BBAEVAc8B/wEPAR0B1gH/AQ8BGQHSAf8BAgEJAcEB/wECAQYBvQH/AQABBAG5
-        Af8CAAG1Af8CAAGvAf8CAAG5Af8CMwF6AfcMAAGyAasBrAH/AdsB0gHRAf8B4gHMAcIB/wGFAaMB3gH/
-        AVoB0gL/AWgB6QL/AWIBrQHyAf8B2gHGAcIB/wHfAdUB1AH/AbwCtgH/A1UBtQgAAT4BdQGDAfQBAAHo
-        Av8BAAHuAv8BAQGDAbUB/wJaAVwB3ANKAYsDAwEELAABUgJQAaQBsgJ/Af4B/wHvAeUB/wHdAfgBzwH/
-        Ad8B9QHOAf8B5gH1AdYB/wHpAfoB3wP/AfoD/wH5Af8B6wHIAbkB/wFqAkEB+QNEAXoIAANVAbUBHwEy
-        AdsB/wEAAREB5AH/AVgBZwHRAf8BqwGvAdAB/wGpAa4B2QH/AbMBtwHgAf8BnAGfAccB/wGaAZwBxAH/
-        AbQBtgHcAf8BrAGuAdMB/wGvAbABywH/AWUBZwG6Af8CAAGkAf8CAAGrAf8CVgFYAcEMAANRAaADVQGt
-        A1ABnQNVAbUBYAGqAcsB/QFtAbcB5wH/AVkBYAFoAesDVAGmA1UBrQNSAakDKAE8CAABWgJdAdMBAAHa
-        AfQB/wEAAdkB9wH/AQABzAH6Af8BAwG4AesB/wElAUMBagH5AzgBXCgAA0sBkAHGAZoBcQL/Af0B4wL/
-        AeoBzgL/AeABwgL/AdwBuwL/AdwBuQL/Ad0BvQL/AeABwwL/AeoB0QP/AfYB/wH9AeQB1AH/AWoCQQH5
-        AzgBXQQAAysBQgEoAS4BlwH7AQkBJQHqAf8BcQGIAdcB/wH5AfUB2QH/AfgB9gHqA/8B+wH/Al8BUwH/
-        AlQBSQP/AfkB/wL6Ae8B/wL7AeIB/wGNAY8BxQH/AgABtQH/AQABAgGTAf8DMgFRGAADMwFSAX0BeQF6
-        AfoBpQGaAZwB/wNUAa4YAAMkATUBVgFjAWgB6AEAAdsB9AH/AQAB2gH2Af8BAgHuAv8BAAGaAdQB/wFD
-        AUoBWQHyA0sBkAMjATMcAAMmATgBfQFcAUMB+AG/AdMBjgL/AdsBsgL/Ac8BnAL/AcoBkwL/AcgBjwL/
-        AckBjgL/AcsBlAL/AdIBnwL/AdYBqQH/Ae4B1QGrAv8B+AHhAf8B8gHIAa0B/wNYAd0DDQESAwQBBQNT
-        AaoBHgExAd4B/wEbATIB6AH/AdYB2AHlAf8B+gH5AfIB/wL9Af4B/wLVAdcB/wLSAdMB/wL9Af4B/wL6
-        AfUB/wHhAeIB5QH/ASIBJQG8Af8BAAECAbUB/wJWAVgBuQMJAQwMAAMxAU8DVgG2A1cB6AF1AXkBdAH6
-        AbMBqwGmAf8BhgJtAf8DWAHRAxABFhgAAyQBNQFVAWcBcQHrAQAB4QH5Af8BAAHQAfUB/wEAAdQB/gH/
-        AQYBwQHxAf8BEgFFAZkB/QFLAVEBXQHtA1EBpwNKAYsDJAE1EAADVQGyAXABjwE3Af8BbAGjAUAB/wH4
-        AckBjQL/AcABcgL/AboBaQL/AbkBZQL/AbsBaAH/AdQBrwFWAf8BdAGYATYB/wHhAb0BcAH/Ae0BxwGO
-        Af8BqAGyAWQB/wFqAakBSwH/AZYBUwFAAf0DPQFqBAADKgFBAkIBhAH1AQgBJAHtAf8BagGDAegD/wH3
-        Bf8DvAH/A7UH/wH8Af8BkAGUAdUB/wEAAQIBwAH/ATEBNAGBAfgDMQFOEAABbQJnAfEB4wHaAdsB/wHz
-        AesB6gH/AekB7AHkAf8B2wHQAc4B/wHLAbgBuQH/AY4CgQH/A1gB4wM9AWoDAQECFAADJgE4AVABZgFx
-        Ae0BAAHiAfkB/wEAAdMB8wH/AQsB5QH9Af8BEwHmAv8BDQGvAfIB/wEAAVsBxgH/AQABUAG+Af8BUwFU
-        AVwB5wM4AV0MAAFmAVUBVAHqAT8BggEdAf8BFgFeAQAB/wFwAYkBKQH/AfUBswFYAv8BsQFTAv8BrgFP
-        Av8BswFVAf8BhgGKAScB/wEGAVgBAAH/AWsBhgElAf8B/QHFAYMB/wGdAZwBQwH/AVYBkQEvAf8BxgGc
-        AWMB/wNTAbAIAAJUAVYBqwElATcB3gH/AUABVAH1Af8B7QHuAfwF/wOMAf8DcwX/AeoB6wH+Af8BJQEs
-        Ad8B/wEFAQ4BwAH/AlUBVwG3AwEBAhAAAX4CegH4Ae0C4AH/AeIC1gH/AecB3AHeAf8B2QHKAcsB/wHU
-        AsMB/wHlAtQB/wHJAroB/wFUAk8B/QNXAcIDIQEwFAADKQE/AUoBYwFzAe8BAAHjAfoB/wEAAc4B8gH/
-        ARYB5AH7Af8BOAP/AUIB6gL/AVoB5AL/ARMBigHnAf8BMAE5AW0B9wNGAYAIAAGHAVsBQQH5AS0BYQEM
-        Af8BFwFMAQAB/wEUAUsBAAH/AbEBkQEyAv8BswFSAv8BtAFUAv8BuAFXAf8BXgFrARkB/wEZAU8BAAH/
-        AR4BUAEAAf8BqgGTATkB/wHlAbABXAH/AckBsgFnAf8B7AG6AYoB/wNXAcUIAAMnAToCQQGVAfkBngGi
-        Af0B/wLPBv8DagH/A1gF/wKnAv8BGgEbAf4B/wEiASQBqAH9Ay8BSRQAAYQCggH3AfkC8gH/AfIC7QH/
-        AfEC7gH/AdwCzwH/Ac8CvQH/AdQCxQH/AeEC0gH/Ae8C4gH/AZgCjQH/A1EBoRgAAy0BRgFJAWQBdQHv
-        AQAB3QH0Af8BAAHHAfAB/wEVAeAB9gH/AU0D/wGOA/8BjwH2Av8BJwGjAfkB/wEwAT4BYgH1Ay8BSgQA
-        AZABXwEyAfsBJQFMAQQB/wEWATgBAAH/AWQBYgEYAf8B4wGpAUsC/wG3AVoB/wHbAaMBSQH/AbYBjgE2
-        Af8BNQFHAQAB/wEaAToBAAH/AR0BPgEAAf8BNgFMAQMB/wGeAYMBLwH/AaMBjwE8Af8BuwGXAVIB/wNZ
-        AccIAAMCAQMCUAFSAaMBdAGCAecB/wG9AbwC/wL7Av8CSQFFAf8COwE2Af8C9gH+Af8CYgL/ASUBJgHi
-        Af8DVQGyAwUBBxQAAYUChAH3Af4C/AH/AewC5gH/Ae8C6gH/Ad0C0QH/Ac4CvAH/AdMCxAH/AdUCxgH/
-        Ae0C3wH/AboCrQH/A1IBqRwAA0gBhAEAAagB2gH/AQAB6wH9Af8BAAHkAfQB/wETAv4B/wFEA/8BkgP/
-        AZsD/wEQAXEB4QH/A1sB0AMPARQBfQFYAUgB9gGFAWsBJAH/AbcBigEwAf8B9QGuAVAC/wG+AWcB/wHb
-        AawBYAH/AU4BUwEfAf8BOwFKARcB/wFBAUsBGQH/ATgBQQEQAf8BKQEzAQAB/wEzATQBAAH/AjsBAAH/
-        AToBQAEHAf8BkgFkAS0B/wNVAbQMAAMkATYCTAGCAfMBsgG0Af4B/wLfAv8CagFkAf8CZQFZAf8CwAH8
-        Af8BUQFSAf4B/wE6ATsBigH3AyoBQRgAA4QB9wHYAsoB/wHIArcB/wHoAuAB/wHfAtMB/wHMArkB/wHS
-        AsEB/wHVAsQB/wHmAtYB/wGtAp8B/wNRAaccAAJbAWAB1gEAAcoB+QH/AQAB4AL/AQAB7wL/AQAB/AL/
-        ARID/wE5AfoC/wGGA/8BXwHgAv8BBwFLAZsB/gNKAYwBXgFbAVoB2QGxAYsBNgH/Ae0BqgFJAv8BygGM
-        Av8B3gG3Af8B4AHSAbkB/wGfAaYBjwH/AaABpwGPAf8BqAGrAZMB/wGmAakBkAH/AZUBmQFxAf8BYQFl
-        AT8B/wEcASwBAAH/ASQBNAEAAf8BqgFlATQB/wNDAXcMAAMDAQQDUAGdAYIBhQHlAf8ByQHIAv8C5gHv
-        Af8C5gHtAf8ClgL/AUYBSAHjAf8DUwGqAwYBCBgAAYQCgwH3Ac0CuwH/AcMCsgH/Ae8C6gH/Ad4C0gH/
-        AcYCswH/AdACvgH/AdECwAH/AeIC0QH/AakCmgH/A1EBpxwAAVUCVwG6AQABxwHzAf8BAAHRAv8BAAHa
-        Av8BAAH1Av8BEgHYAfEB/wE+AVoBggH1AS8BqAHCAf0BWAP/AQcBggHoAf8DTgGUAUcCRgGBAZ0BaQEx
-        Af8BpQG1AXMB/wH5Ae4B2gL/AfAB4QL/AfYB6gH/AfEB7gHgAf8BwgHPAbgB/wHGAdEBugH/Ac0B1QG8
-        Af8BxAHQAbcB/wG6Ac0BtQH/AYUBqAGGAf8BagGAAS0B/wFmAVkBVQHsAxIBGRAAAyUBNwJTAYAB8QG+
-        AcAB/gH/AtcC/wHJAcgC/wGOAY8C/wE7AT0BhQH2Ay0BRRwAA4QB9wHvAugB/wHwAusB/wH+Av0B/wHZ
-        AswB/wG+AqgB/wHHArQB/wHNArsB/wHfAs0B/wGmApcB/wNRAaccAAMQARYBVQFjAXMB6wEAAdMC/wEA
-        Ac8C/wEAAegC/wElAYYBugH+A1kBzwElAWUBlQH4AQABswHzAf8CVwFaAb0DDQESAw0BEgFgAlcB3wG9
+        Ab4DVgG+A1YBvgNYAcADVgG+AzkBXwwAAz4BawFcAlcB3wGHAU4BQwH6Aa4BfQE9Af4BVAE0AW8B/gEA
+        AQQB1AH/ASQBJQHvAf8BKAEpAfcB/wFCAUEC/wFTAUwC/wEvAS4BwAH/A1wBzgMKAQ4BXQJZAdcBfwFk
+        AVIB9wFrAWIBWwH2AWsBYgFeAfYBbgFiAVsB9gFuAWIBWQH2AW4BYgFaAfYBcQFiAVgB9gFxAWIBSQH2
+        AXMBYgFJAfYBcwFiAUkB9gFzAWIBSQH2AXMBYgFJAfYBcwFiAUkB9gGDAWUBUQH3AV4CWwHZFAABVQJT
+        AbAB5QGmAUYB/wHuAcgBlwH/AZ0BfwFbAf4BbQFSAUIB9wNXAd8DVAGrAz4BawMjATMDBAEGBAABcQJi
+        AfYB2QLTAf8ByQK4Af8BuAKfAf8BvAKiAf8BxAKpAf8BvgKkAf8BvAKqAf8ByQLBAf8B0gLMAf8BxwK9
+        Af8BxQKwAf8B3gLAAf8B5ALFAf8BwgKTAf8DVwHFBAADAwEEA1MBqgG0AZwBVQH9Af8B1gGqAv8B2QGc
+        Af8B2wGzAZoB/wEaARQBvgH/ARcBGQHpAf8CKQH3Af8CRgL/AUkBTQHzAf8BLwFAAeAB/wE1AS0B7AH/
+        A14B5QMPARQBaQJZAfIB3wHbAd8B/wHnAeAB4gH/AeEBtwGqAf8B5gG0AZIB/wHqAbkBkAH/Ad0BsQGd
+        Af8B2QHIAcYB/wHaAdUB2gH/AdoB0gHVAf8B2wHUAdcB/wHbAdQB2AH/AdwB1QHYAf8B4QHcAd8B/wHc
+        AdsB4QH/AW8BZAFTAfEEAAMWAR8DWgHKA1kBxANKAYoBvgGoAVsB/QG4Ab8BaAH/Ab4BxAGdAv8B7wHQ
+        Av8B7AHJAf8B9gHXAa0B/wHcAbQBhgH/AagBgAFGAf0BYgFJAT0B9gJfAV4B4ANOAZgBsAKoAf0B+gP/
+        AeIC2gH/Ac0CugH/AdQCvgH/AdACvAH/AdICygH/AfgC9w3/AfEC7QH/AeAC1AH/AfkC2gH/AeMCsQH/
+        A1gBywQAA1ABnQHnAa0BbAL/Ae4BxAL/Ad8BtQL/AegBrAH/AasBlwGgAf8CAAHFAf8BDQEPAfMB/wJA
+        Av8BVwFIAfsB/wE7AUcB7AH/ARgBuQHpAf8BFAFOAcAB/wNWAb4EAAFjAWEBXAHuAe0B7AHvAf8B/gHD
+        AZ8B/wH+AakBRQH/AdgBlwFkAf8BvQGCAWcC/wGtAVAB/wHpAZwBVQH/AbwBoAGdAf8BwwGzAbQB/wHI
+        ArcB/wHMArwB/wHQAsEB/wHdAdAB0QH/AewB6gHtAf8BZwFhAVUB7gQAA0gBhAFhAe8BkQH/AUwBvwFg
+        Af8BOAFuARkB/wFdAb0BTgH/AS4BxgE9Af8BNAGXASQB/wHpAccBowL/AeUBxAL/AeoBzAL/AfIB2QL/
+        AfUB3QL/AewB0AH/AfoB1QGpAf8BXQJVAeoBkQJ+AfwB7wLyAf8B2ALPAf8BxQKxAf8ByAKyAf8BwAKz
+        Af8B5QLfAf8B+gL3Af8B9gL1Af8B7wHwAfEB/wHyAvAB/wH3AvIB/wHeAtkB/wHYAsEB/wHaAqoB/wNb
+        AcgDLwFKAZgBbQFNAfoB/wHHAZEC/wHTAZ8C/wHHAY4C/wHSAYcB/wG9AZcBggH/AgABxgH/AR4BHAL/
+        AV0BYwH6Af8BNgFiAd0B/wE7ATYB3gH/ASoBgwH8Af8BAAGyAe8B/wFSAVkBXQHtAzYBWQFjAmEC7gHf
+        AeAC/wG2AW4C/wHaAYwB/wGbAYwBxAH/AT0BOAHQAf8B9wHOAY8B/wH8AbEBWAH/AeUBvgGuAf8C6wHv
+        Af8B7ALlAf8B7ALmAf8B7QLnAf8B8gLtAf8B7gHtAe4B/wFnAWEBWAHuBAADOgFhAY4B0QGfAf4B7gH/
+        AfIB/wGlAfgBuQH/AaAB8QGxAf8BqAH/AcAB/wFhAb8BXwH/AfIB2QG5Av8B5wHKAv8B6AHMAf8B/QHo
+        Ac8B/wH9AekB0wL/AfgB6gH/AfUB3QHCAf8DUwGtAZECfgH8AfAC8wH/AdkC0AH/AcgCswH/AcACrQH/
+        AcwCwQH/Ae4C5QH/AegC5gH/AdQC0gH/AcsCxwH/AcoByQHIAf8B5ALgAf8B7gLmAf8B1gLJAf8B0QKj
+        Af8DWwHIAVoCWAHAAc4BbgEvAf8B0QGMAUIB/wH8AcMBcAL/Ab0BZQL/AbwBWwH/Ae0BsAFQAf8BMAEd
+        AaUB/wI3Av8BZAFrAf4B/wEcAcEB9wH/AQ8BigHjAf8BUAEgAZAB/wFPAYQBpwH/AQABiAHoAf8DUAGd
+        AWMCYQHuAfIB6QHoAf8B/AHLAagC/wHxAcgB/wGxAa8B4wH/AWgBZgHjAf8B+wHwAc4B/wH1AcIBmAH/
+        AcYBoAGUAf8BwwG3AbkB/wHKArgB/wHOAr4B/wHQAsAB/wHbAtAB/wHwAe8B8gH/AWkBYQFdAe4EAANQ
+        AZ4BjAHoAaUB/wHhAf8B4wH/AboB/wHBAf8BbgH/AYIB/wFtAfIBkQH/AVQBowFKAf8B7QHXAcEC/wHv
+        AdcB/wH7AeoB1QH/AfsB7AHbAf8B+gHuAeAC/wH+AfEB/wGRAXYBXwH7AyoBQQGRAn0B/AHwAvMB/wHZ
+        AtAB/wHHArIB/wG9AqwB/wHTAscB/wHqAuIB/wHjAeEB4AH/AZEBjQGMAf8BKQEnASYB/wGgAZ0BmwH/
+        AdkB1wHWAf8B7ALlAf8B2gLQAf8ByQKfAf8DWwHIAWoBXwFYAe0BqgFTARgB/wGXAToBAAH/AcMBagEn
+        Af8B+QGxAU4C/wGxAU8C/wG8AUwB/wG1AWwBRwH/AUEBNwGvAf8BVwFVAe4B/wFEAWQB3QH/AQMBtQHv
+        Af8BPgGVAbMB/wG4AWMBTQH/AlsBXgHZAyEBMAFjAmEB7gH2AfUB9gH/Af0B4gHUAv8B5AHJAf8BowGe
+        AcMB/wFZAVYBqAH/Af0B3gHDAf8B9wHVAcQB/wHeAdMB0QH/Ad4C1gH/AeIC2AH/AeQC2gH/AeQC3AH/
+        AesB5QHmAf8B9AH1AfgB/wFpAmEB7gM7AWQBXwG3AX8B/gHaAf4B5QH/AdgB/wHcAf8BrAH/AbgB/wGJ
+        Af0BkwH/AZwB+gGtAf8BOAHAAVEB/wFcAYwBQAH/AfgB5wHaAf8B/QHyAeQB/wH5Ae8B4wH/AfwB+AHw
+        Af8B/AHtAdwB/wFdAlkB0gMBAQIBjwJ9AfwB8ALzAf8B2QLQAf8BxwKyAf8BvgKuAf8B1QLIAf8B6ALh
+        Af8B6AHlAeQB/wFXAVIBUQH/AwAB/wGBAmwB/wHgAt0B/wHqAuIB/wHbAtIB/wHGAp8B/wNbAcgBkAFn
+        AT4B+AGNAT4BBwH/AWsBJwEAAf8BmwFFAQkB/wHxAa0BUwL/AcQBbgL/Ac4BhwH/AdQBkAE0Af8BYwEo
+        AQgB/wFNASYBNQH/AZIBQQErAf8BogGaAYkB/wErAawB+QH/AZ4BgwGAAf8DUAGdBAABYwJhAe4B+QH4
+        AfkD/wH7Af8BxAHJAcoB/wFIAYoBsgH/ASsBYwGfAf8BggGZAacB/wHsAd0B2AH/Ad8C1QH/AdwC0gH/
+        Ad8C1gH/AeEC1wH/AeIC2QH/AeoC4wH/AfgB+QH7Af8BaQJhAe4BMAIxAU0BagGdAYIB+QHQAfgB0wH/
+        AcgB/QHVAf8B4wH/Ae8B/wG/Af4BzwH/AYsB7wGSAf8BXAHjAYcB/wFDAZ8BOwH/AfIB3wHaAf8B/QH4
+        Ae8B/wH3AfEB7QX/AboBmQGDAf4DQgF0BAABjwJ9AfwB8AL0Af8B2QLQAf8ByAKzAf8BvAKsAf8B0ALF
+        Af8B7ALkAf8B4wLgAf8BrgGlAaQB/wFjAlkB/wG1Aa0BrAH/AeAC3QH/Ae8C5QH/AdkCzQH/AcsCoQH/
+        A1sByAGQAWoBQQH5AYkBPwEJAf8BkwFGAQoB/wHbAZ4BTAH/Af0BywGKAf8B4QGsAWQB/wGvAWoBNgH/
+        AY8BRgERAf8BaAEnAQAB/wFnASQBAAH/AYYBMwEAAf8BsgFWAQ8B/wGcAV4BRwH/AawBZAE+Af8DUQGi
+        BAABZQJhAe4B/gL7Af8B8wH6Af0B/wGbAdgB+QH/AYIBvQHiAf8BaAGyAdcB/wFUAbYB4gH/AbQBygHX
+        Af8BygG1AbIB/wHFArUB/wHKArsB/wHOAr8B/wHRAsEB/wHbAtAB/wL6AfsB/wFpAmEB7gMEAQYCZAFc
+        AecB1AHxAdAB/wGjAe0BtgH/AcwB/wHbAf8BkgHvAaMB/wGQAdQBjwH/AbYB1QGpAf8B3wHjAdAB/wH9
+        AfYB8wH/AfYB9AHyAf8B9wH4AfkD/wH8Af8BYQFfAVQB7gMNARIEAAGOAn0B/AHwAvQB/wHZAtAB/wHH
+        ArIB/wHEArAB/wHHArwB/wHxAegB6QH/AfgB+QH7Af8B5wLlAf8B5ALeAf8B4QHeAd0B/wHyAewB7QH/
+        AeoB5AHlAf8B1gHFAcYB/wHWAqYB/wNbAcgBawFgAVkB6wHHAYkBNwH/AfMBtQFeAv8B1AGbAf8B/gHd
+        AbYB/wG+AZsBbAH/AZMBYAFBAf8BngFtAU0B/wGdAWoBSAH/AZABWAEwAf8BgAE+AQ4B/wFZASEBAAH/
+        AXABMAEAAf8BiQFjATQB/gNCAXQEAAFlAmEB7gL/Af4B/wHrAfUB/AH/Aa4B3AH3Af8B2AH3Av8BwAHw
+        Av8BbwHKAfMB/wG+AdgB5wH/AfUB8AHtAf8B8QLtAf8B8wLuAf8B8wLvAf8B8wLwAf8B9wL0Af8B/gP/
+        AWkCYQHuA1EBogH7AdoBvAX/AcgB6QHMAf8BjQHlAZoB/wGQAdkBlQH/AfQB6wHnAv8B+AH9Av8B+gH7
+        Af8B9QH3AfUB/wL3AfgB/wH9Af4C/wHtAdUByAH/A1EBpwgAAY4CfQH8AfAC8wH/AdgCzwH/AcQCsQH/
+        AcoCtAH/AcQCswH/AdAByAHHAf8B0AHHAcMB/wPsAf8B3gLgAf8B/AL6Af8B9AHuAe0B/wHUAs0B/wHd
+        AsEB/wHaAqgB/wNZAckCVgFVAbQBzgGJATQB/wHsAcEBkAL/AfAB2wL/AfUB6QH/AfIB6QHfAf8B3QHK
+        AbYB/wHZAcQBrgH/AeABzAG4Af8B2gHGAbAB/wHJAa4BlAH/AaEBZwFAAf8BsQFbARwB/wFhAlQB7gMY
+        ASEEAAFlAmEB7gT/AfwB/QL/Ac8B5wH3Af8B1QHsAfoB/wG0AeEB/QH/AZ4B1QH6Af8C3gHiAf8BuQGh
+        AZ8B/wG4AqQB/wG+AqsB/wHDArAB/wHEArQB/wHSAcQBxQH/Af0B/gL/AWoCYQHuAX4BbwFVAfMB/wH8
+        AfcF/wHvAdkBvwH/Ab0BxgGLAf8B5wH0AecC/wL7Af8B+AH6AfwB/wH6Af0C/wH8A/8B/Qf/AY8BZwFf
+        AfsDJgE4CAABrAKoAf0B9wL8Af8B3gLXAf8ByQK2Af8B0AK6Af8B2QHHAcsB/wGmAY0BgQH/AZgBSwEa
+        Af8BmgGWAZMB/wFkAWkBbAH/AeoC7AH/AecB3QHUAf8B5AHLAbEB/wHqAccBqwH/AdMBpgGlAf8DXAHO
+        AykBPgGBAWIBSAH2Ae4B0QGwAf8B+AHuAeIB/wH9AfMB6QP/AfwB/wH5AfAB5wH/Ae8B1gG+Af8B8AHW
+        Ab4B/wHvAdYBvgH/AfEB3QHJAf8B+gHYAbIB/wHVAYYBOgH/A04BlAgAAW8CZwHyCP8B+wP/Ad8B8gL/
+        AdMB7QL/Ae8B+wP/Av4B/wHtAukB/wHuAusB/wHwAu0B/wHxAe4B7wH/AfIB7wHwAf8B9QH0AfUF/wFy
+        AWkBZAHxAkABPwFuAl0BWgHTAaEBjQGDAfkB7wHUAbYB/wHzAcwBrAH/AfMB1AG4Af8B7QHLAawB/wHs
+        AcsBrwH/AfQB3gHKAf8B9QHiAdUB/wH3Ae0B5gH/AfcB5QHZAf8DWwHQAwEBAggAAYQCfQH3AeUC3wH/
+        AdQCxwH/AcYCtAH/AcwCuAH/AdgBwgHEAf8BvQGmAaIB/wGfAYEBYwH/Aa0BoQGgAf8BqwGjAaQB/wHL
+        Ab8BwAH/AdMBwgHBAf8B4gHPAcYB/wHhAcgBugH/AckBpQGkAf8DUQGnBAADRAF6AbwBpQFTAf0B/AHs
+        AdcB/wH6AfIB5wH/AfsB8wHrAf8B/AH0AesB/wH3AeUB1AH/AfcB5AHSAf8B+QHuAeAC/wHzAdsB/wHy
+        AbEBbQH/AVsCWQHEAwQBBggAAWACXAHUAYICbQH3AXECYgH2AXMCYgH2AXMCYgH2AXUCYgH2AXUCYgH2
+        AXUCYgH2AXUCYgH2AXcCYgH2AXcCYgH2AXcCYgH2AXcCYgH2AXcCYgH2AYcCbQH3AV4CWgHYCAADJQE3
+        Ak8BTgGXAWICXwHgAbsBqgGaAf0B8wHcAcMB/wH8AesBygH/AaIBfwFmAf4DVQGyAlMBUgGoAVsCWQHE
+        Ay0BRQwAAT0CPAFnAVICUQGhA10B1wF3AmgB+gFkAlkB7AFWAlQBqwNQAZ0BUgFRAVIBoQNSAaEDUgGh
+        AVICUQGhA1IBoQNSAaEDUgGkA0wBkwMYASEIAAJHAUYBgAGFAWsBYgH2AfcB4gHMAv8B/QH3B/8B/QP/
+        AfoC/wHuAdcB/wGuAXoBZgH8A1YBtgMMARBcAAMHAQoDMAFLAlYBVQG0AXsCZQH0A1UBtWgAAygBPAJW
+        AVUBtAFlAWIBXQHpAZoBiAFxAfkBowGHAXQB+gFuAWUBXQHwAVwCWQHJAzoBYf8AGQADHwEsA0sBjwNV
+        AbQDVwG/A1gBwANXAb0DVAGuA0EBcwMNARJgAAMMARADTgGUA1UBtQNVAbQDVQG0A1UBtQNWAbYDVgG2
+        A1UBugNWAb4DQQFzGAADBQEHAwEBAiwAAzIBUAFPAVgBTwHvASMBmAE3Af8BKgGwAUgB/wEuAbgBTwH/
+        AS8BuAFPAf8BKwGzAUoB/wElAZ0BPAH/ATMBSwE0Af0DVwHFAw8BFCwAAw8BFANOAZcDRgGAAwMBBCAA
+        A0gBhwGeATkBPAH/AbEBRgFJAf8BtQFJAUwB/wG+AVEBUwH/AccBWAFaAf8BzwFgAWEB/wHUAWQBZQH/
+        AdkBaQFqAf8B1QFvAXAB/wNeAeUDBgEIEAACUwFVAa0BFgFvAdIB/wFCAWIBgAH1A1kBxwJNAU4BlgM7
+        AWUDSgGNAYwBbQFRAfcCXQFZAdcBVgJVAbQBTQJMAZEBQAI/AW4DJQE3BAADXwHgATkB1QFkAf8BRgHl
+        AYgB/wFRAeEBjQH/AVcB4gGSAf8BWAHhAZIB/wFUAeMBjwH/AUsB5QGLAf8BQQHgAW4B/wEpAWcBLQH+
+        A0ABcSgAAyUBNwNbAeEBIAGSARkB/wEwAUABEAH9A1YBswMQARYcAAFbAlgBywHwAZsBlAL/AbsBpAH/
+        Af4BvQGpAv8BvAGoAv8BvgGrAv8BvAGoAv8BvAGpAv8BvwGqAv8BwwG4Af8BXwJYAeMDBAEGEAABTQFd
+        AWwB8AE4AcEB/gH/AVsByQH+Af8BVAHIAf4B/wE/AbcB8AH/AVoBXAFmAf8B8wG4AYYC/wG/AW4C/wG5
+        AWEC/wGyAVIC/wGxAVAB/wHsAaQBXgH/A0QBeQQAATQBewE6AfwBYAHoAZwB/wFwAd4BnwH/AYkB4QGn
+        Af8BkAHjAawB/wGRAeMBrQH/AY0B4gGqAf8BhAHfAaIB/wFqAewBogH/AT8BrwFUAf8DUQGgJAADQgF2
+        ATcBYgE/AfYBIwHQAVoB/wEoAckBNgH/AScBngEAAf8BGwFRAQAB/wNaAdsDLQFGFAADAQECAWICWAHp
+        AfwBxgGsAv8B9QHZAf8B+AHuAdkB/wH6AfQB4gH/AfsB9AHkAv8B/AHxAv8B/gH5Av8B/AH4Af8B7QHh
+        Ad0B/wNWAb4QAAMJAQwBAAFcAdQB/wFLAcUB/gH/AZIB2AL/AZYB3AL/AYMBqgG/Af8B2AGfAW4C/wHO
+        AZoC/wHLAZMC/wHFAYgC/wG+AWsB/wH4AbIBYAH/AWkBbAGHAf8CUAFRAZ8EAAFYAY8BXwH7AZQB6gG0
+        Af8BpwHoAbwB/wGyAewBxwH/Ab4B8wHMAf8BwAH0Ac4B/wG3AewByQH/Aa0B6gHAAf8BnwHwAbsB/wFX
+        AbYBaQH/A0wBkyAAAycBOgEpAXkBQgH6ASYB1wFeAf8BJQHWAWMB/wEiAbQBKgH/ASQBmAEAAf8BJwGk
+        AQAB/wEiAWcBAAH/A1oByhQAAyMBMwGNAU8BTQH7Af8B0wG3Av8B9wHfAf8BnQGPAYIB/wFCAT4BOgH/
+        AY4BiAGMAf8BwgGwAasB/wHqAeAB0QP/Af4B/wHNAcEBwAH/A0YBgRAAAxwBKAEAAWYB4gH/AWkB0AH+
+        Af8BvgHoAv8BuAHlAf0B/wGfAYwBhAH/Af0B2QG0Av8B1gGrAv8B0wGkAv8BzgGbAv8ByAGOAf8ByQGP
+        AWIB/wE6Aa8B+QH/A1IBqQQAAVUBYQFVAeoBsgHxAckB/wHQAfQB3QH/AeYB+wHsAf8B5QHxAesB/wHi
+        Ae8B6QH/Ae0B/AHwAf8B3AH2AeYB/wHAAfkB0wH/AU8BnQFTAf0DNgFZHAADDAEQA1gBwAEfAbsBRAH/
+        ASQB0wFcAf8BIQHNAVsB/wEoAcABOwH/ASUBlwEAAf8BJQGbAQAB/wEmAZgBAAH/AToCPgH4A0gBhgMD
+        AQQMAANEAXoBvQFWAUwC/wHeAb4C/wHxAdkB/wHCAbQBowH/AUMBSQFEAf8BgQGnAcAB/wEMAUgBpwH/
+        AksBawH/Ae8B2wHJAf8BfgF2AXQB+gMtAUUQAAIrASwBQwEEAYIB8AH/AY8B2QH+Af8BwgHqAv8BwQHl
+        AfgB/wHRAacBjAL/Ad4BuQL/AdwBtgL/AdkBsAL/AdUBqAH/AfMBpAFhAf8BpgGqAa4B/wE8AbYB/gH/
+        A0oBjQQAA04BmQG3AeABwAH/AfQB/wH0Af8B7AH9AdYB/wFtAYcB2wH/AVkBXgHbAf8B0AH7AcUB/wHp
+        Af8B7AH/Ac0B8gHUAf8DWwHZAwcBChgAAyYBOAJXAVwB3wEAAQsBqAH/ARQBrwFCAf8BIwHVAVUB/wFB
+        AeYBgwH/AUAB6wGHAf8BKAHBAT0B/wElAZ0BAAH/ASMBjQEAAf8BAAFcAacB/wEPAT0BrAH9A1UBugMV
+        AR0IAANVAbIB0gFoAVQC/wHlAcMB/wHwAdoBwgH/AekB2QHCAf8BsAKnAf8BjAG/AegB/wEIAa8C/wEA
+        AWQB0gH/AV4BYgGiAf8BYgJYAe8DEgEZEAADOAFeARQBkQH8Af8BngHeAv8ByAHrAv8BxQHgAe4B/wHm
+        AbsBmwL/AeUByAL/AdYBsAL/AZEBPgL/AaYBWwH/AdUBXwEtAf8BmwHbAfoB/wE3AbUB/gH/A0EBcgQA
+        Aw8BFAFaAV4BWgHVAaIB0gGgAf8BbQHDAbYB/wEXAV4BuQH/AQoBTAG5Af8BLgGwAZUB/wFtAdMBjQH/
+        AV0BYwFdAfADKQE+GAADQQFzAjMBYgH2AgAB9wH/AQABDgHLAf8BPwHEAVAB/wGLAfsBqAH/AWEB/gGf
+        Af8BPgHqAYMB/wEpAdYBZQH/ASUByAFFAf8BIwGgAQUB/wEAAWoBnAH/AQABZAL/AQABNAHOAf8DVwHf
+        AzABSwMBAQIBYQJcAdwB4wGRAWYC/wHtAcoB/wHnAc8BtgH/AeUB0AG6Af8B2gHEAbYB/wFFAW4BpwH/
+        AV0B2QH3Af8BHAHOAv8BAAGaAewB/wEcAUABUwH9A1EBpwMGAQgMAANEAXkBJQGYAv8BrAHjAv8BzwHu
+        Av8ByQLNAf8B8wHaAcUC/wHxAeIC/wHrAdYC/wGuAWYB/wHYAYYBUgH/AScBFwFuAf8BYwGqAeEB/wEz
+        Aa0B+gH/AzgBXAgAAxkBIwFIAmIB9gFqAbQB3QH/Ab0B1AHfAf8BwgHXAd8B/wFWAZ4BywH/AQ4BZwFs
+        Af8DTQGWHAACMQGIAfgCAAL/AgAC/wIAAdkB/wFHAYsBagH/AaYB+QGgAf8BYQH/AaAB/wE6AeYBggH/
+        ASsB1QFeAf8BJQHNAUcB/wEQAaIBQAH/AQABagHEAf8BAAFcAv8BAAFmAv8BAAFDAeQB/wNYAcADHwEs
+        AWgCQgH1AfMBrQGLAf8B+wHlAcUB/wHRAbkBpAH/AcYBsgGgAf8B7QHYAcEB/wHMAb4BuQH/AUcBiwGz
+        Af8BXQHdAfMB/wE3AfAC/wEAAcUB+wH/AQYBUQF/Af4DWAHGAxUBHQgAA04BlAE3AZ8C/wG7AegC/wHW
+        AfAC/wHOAcIBtgH/AfsB8AHmAv8B9gHtAf8B/QHxAeMB/wHuAc0BrwH/AVQBRQGTAf8BAAECAbsB/wEA
+        AQUBrQH/AQABEQG1Af8CVwFaAcUIAAM6AWEBTwGoAbkB/QG0Ac8B5QH/AeYB6gHxAf8B7AHuAfYB/wG8
+        AckB3QH/AToBlgHMAf8DWQHSAx8BLAMSARkDBAEGAwQBBgwAAg8BuAH9AgAC/wIAAv8BEgEQAf4B/wIA
+        AccB/wERAUwBZAH/AUwB5wFeAf8BRAH6AYEB/wEmAccBPgH/AQMBlAFQAf8BAAGbAdQB/wEAAZ4C/wEA
+        AVwC/wEAAV4C/wEAAVoB+AH/A1kBxwM6AWIBfwE3AS8C/gHBAZkB/wHeAcgBrgH/AcUBrgGaAf8B0AG/
+        AagB/wHTAcIBrQH/Ad8BzQGzAf8BuAGgAZsB/wE0AVkBmwH/AVUBzgHrAf8BSQH9Av8BAAHdAv8BAAFc
+        AawB/wNeAdoDJQE3BAACUwFVAbABTQGrAv8BywHtAv8B4AH0Av8B1QHAAa0B/wH+AfsB+AL/AfsB9wH/
+        AfMB8AHsAf8B0wHOAcwB/wFKAVIBtwH/AVYBbgHxAf8BLgFFAdsB/wEtAUIB2gH/AlgBXAHRCAABUAJS
+        AaMBngHZAfQB/wGyAeAB+gH/AaoB2gH2Af8BnQHUAfUB/wGVAdEB9QH/AWoBzQH3Af8CUwFhAfEBXAJX
+        Ad8BYgJYAekBXgJbAdkBXgJaAdgDUwGwAygBPAQAAh4BnQH7AgAC/wI/Av8CgQH+Af8BTQFKAf0B/wED
+        AQAB3gH/AQABJQGIAf8BIwGkATgB/wEGAZwBhwH/AQABowHsAf8BAAHMAv8BAAHHAv8BAAGcAv8BAAFl
+        Av8BAAFSAfQB/wNYAcYDTgGZAboBPQEqAf8B8wHAAZgB/wHWAcIBpAH/AdABuAGeAf8BxgGVAY0B/wHL
+        AYcBjQH/AccBgwGNAf8B1QGQAZQB/wHUAYIBkwH/AVcBTAGbAf8BSQGzAd4B/wFSAfYC/wEJAd8C/wE0
+        AWQBpwH/A1wB3AQAAlgBWwHLAWQBuQL/AdwB8wL/AeoB9wL/Ad0BxgGyAf8B8wHfAdAB/wH1AeUB2AH/
+        AfYB6QHeAf8B+AHtAeQB/wG+AbYBzAH/ATIBPQG4Af8BlwGfAdMB/wFJAZABvQH9Ax8BLAgAAU0CTgGW
+        AbIB3gHyAf8B2wH3Av8B0QHvAv8BuAHmAv8BoAHfAv8BhgHXAv8DWQHsAZUBaQFcAfgB/wHpAcAC/wHd
+        AbwC/wHcAbgB/wHcAaUBcAH/AWACWQHrAzABSwIvAbgB/QJqAv8CkgL/AmsC/wJhAv8BWQFXAv8BHgER
+        AeEB/wIhAV8B+wEAAawB4wH/AQAB9QL/AQAB3gL/AQABwgL/AQABsAL/AQABpgL/AQABbAH7Af8DWQHE
+        A1oCygFSATgB/wHgAb4BmAH/AdMBtQGXAf8B0wGWAY0B/wHxAaIBpQH/Af4BswG0Af8B/gG0AbYB/wH+
+        AbcBuQL/AcQBwgH/AfkBuAG6Af8BgwGAAbgB/wFEAa4B5QH/Aa0B8gHzAf8BawGwAewB/wFTAVUBXQHt
+        BAACWQFdAdIBiwHIAv8B8QH6Av8B9wH8Av8B9gH5AfsB/wHwAeUB3AH/Ae4B4AHVAf8B7QHcAc8B/wHs
+        AdgByQH/AeoB1AHCAf8B9AHwAe0B/wH3AfsC/wFYAWIBaAHpDAADKAE8AXMBiQGaAfoE/wH1A/8BzwHy
+        Av8BtAHyAv8BYgGHAa4B/gFnAlkB8gH5AcwBlwL/Ad4BsgL/AeABuQL/AeEBuQL/AewBvgH/AewBpQFk
+        Af8DVwG9AlgBWwHLAm8B5QH/ApEC/wJqAv8CYAL/AlwC/wFIAUQBhAH6A1ABnQFXAVwBXgHfAQAB6QH+
+        Af8BAAHkAv8BAAHAAv8BAAGxAv8BAAGuAv8BNwFtAY4B9wM6AmICTgHvAb4BYwFEAf8BzAGiAYQB/wHU
+        AY4BhwH/AfcBqwGpAv8BtwGyAv8BtgGzAv8BvgG8Av8BxgHFAv8B2QHXAv8B/AH6Af8B5gGxAb0B/wNe
+        AeUBRwFgAa4B/QEYAVYBygH/A0sBjwQAAxwBJwJTAVUBrQNcAdEDXQHXA14B3QJfAWAB4wJiAWUB6QFi
+        AWMBbgHvAWYBbQGGAfUBYgGMAa8B+wGHAaYB8AH/AYgBqwH1Af8CVAFWAasQAAFGAkcBgAF6AYwBmgH6
+        AdYB5QHuAf8BvAHiAfEB/wFmAYABqgH8AlABUgGjAV8CWgHbAf8B2gGUAv8BzQGZAv8BzgGdAv8BzAGb
+        Av8B1wGcAf8B/gG1AWMB/wNXAb8EAAJPAVEBnAI6AawB/AKDAv8CVQH1Af8CTwFiAe8DMwFSBAADEAEW
+        AVgCWgHAAQABtQH2Af8BAAHPAv8BAAGkAv8BXgFfAWEB4AMnAToEAAFyAisB/AG2AWABSwH/AegBqwGg
+        Av8BxgHAAv8BzwHHAv8B1AHNAv8B3gHXAv8B5gHhAv8B7wHpAv8C+gH/AbMBfwGRAf4DVAGvAwQBBgNA
+        AXACSwFMAY8DAQECLwABAQMFAQcYAAMvAUoBUQJSAaEDUgGpAzkBXwQAA0UBfQHOAYUBcgH+Af8B9AHU
+        Av8B9AHfAv8B9QHdAv8B2wGqAf8BhwFSAUQB9wMxAU8IAAM7AWQCVAFpAe4CWwFeAdADGAEhEAADTAGS
+        ATgBYgGNAfYCVQFXAboDDAEQCAABXAJXAd8BjwFBAUAB/gGzAk4B/QGgAVUBVwH8AZ4BVwFcAfwBlAJf
+        AfsBlAJfAfsBkgFRAWcB+gGUAl8B+wFvAVkBZwHyA0QBfHgAAUcCRgGAAmUBXgHlAaEBfAF2AfoBjgF9
+        AW0B9wFgAlwB1AMzAVKEAANLAY4DWQHDA1cBwgNCAXZAAAMRARcDRAF5A1YBswNYAcYDVwHFA1QBrwM9
+        AWoDDQESEAACVQFXAboBIQEkAZAB+wI+AYIB+AE8AT4BfwH4ATsBPAF+AfgBOgE8AX0B+AE6ATsBfAH4
+        ATkBOgF6AfgCOQF4AfgBNwE5AXYB+AE3ATgBdQH4ATUBNwF0AfgCNwFzAfgCNwFzAfgCIQFiAfsCWQFb
+        AcMMAANTAaoDWAHRA1gBywNaAdUBVAFdAWYB7QFKAV0BbwHzAlcBXwHoA1sB0ANcAc4DWQHSA0QBfAgA
+        AToBbQGHAfcBAAG1AeEB/wEAAasB2gH/AVcCWQHsAxkBIzgAA0MBdwFgAlkB6wJ/AU0B/gGBAakBRAH/
+        AYYBuwFSAf8BiQG2AVMB/wGzAagBbgH/AaIBUQFKAf0DWgHeAzkBXwwAAT0BPwF5AfYBHwE6Ae4B/wEH
+        ASIB5AH/AQIBGwHgAf8BBQEaAdoB/wEDARYB1QH/AQABEQHPAf8BCwEZAdYB/wELARUB0gH/AQABBQHB
+        Af8BAAECAb0B/wIAAbkB/wIAAbUB/wIAAa8B/wIAAbkB/wI4AW4B9wwAAbIBqwGsAf8B2wHSAdEB/wHi
+        AcwBwgH/AYUBowHeAf8BVgHSAv8BZAHpAv8BXgGtAfIB/wHaAcYBwgH/Ad8B1QHUAf8BvAK2Af8DVQG1
+        CAABQgFqAXkB9AEAAegC/wEAAe4C/wEAAYMBtQH/A1wB3ANKAYsDAwEELAABUgJQAaQBqgJ/Af4B/wHv
+        AeUB/wHdAfgBzwH/Ad8B9QHOAf8B5gH1AdYB/wHpAfoB3wP/AfoD/wH5Af8B6wHIAbkB/wFqAkEB+QNE
+        AXoIAANVAbUBGwEuAdsB/wEAAQ0B5AH/AVQBYwHRAf8BqwGvAdAB/wGpAa4B2QH/AbMBtwHgAf8BnAGf
+        AccB/wGaAZwBxAH/AbQBtgHcAf8BrAGuAdMB/wGvAbABywH/AWEBYwG6Af8CAAGkAf8CAAGrAf8CVgFY
+        AcEMAANRAaADVQGtA1ABnQNVAbUBWAGoAb8B/QFpAbcB5wH/AVkBYAFjAesDVAGmA1UBrQNSAakDKAE8
+        CAABWgJdAdMBAAHaAfQB/wEAAdkB9wH/AQABzAH6Af8BAAG4AesB/wEpAUMBagH5AzgBXCgAA0sBkAHG
+        AZoBbQL/Af0B4wL/AeoBzgL/AeABwgL/AdwBuwL/AdwBuQL/Ad0BvQL/AeABwwL/AeoB0QP/AfYB/wH9
+        AeQB1AH/AWoCQQH5AzgBXQQAAysBQgEoAS4BkwH7AQUBIQHqAf8BbQGIAdcB/wH5AfUB2QH/AfgB9gHq
+        A/8B+wH/AlsBTwH/AlABRQP/AfkB/wL6Ae8B/wL7AeIB/wGNAY8BxQH/AgABtQH/AgABkwH/AzIBURgA
+        AzMBUgF5AXUBdgH6AaUBmgGcAf8DVAGuGAADJAE1AVcBXwFkAegBAAHbAfQB/wEAAdoB9gH/AQAB7gL/
+        AQABmgHUAf8BSQFOAVkB8gNLAZADIwEzHAADJgE4AXkBXAFDAfgBvwHTAY4C/wHbAbIC/wHPAZwC/wHK
+        AZMC/wHIAY8C/wHJAY4C/wHLAZQC/wHSAZ8C/wHWAakB/wHuAdUBqwL/AfgB4QH/AfIByAGtAf8DWAHd
+        Aw0BEgMEAQUDUwGqARoBLQHeAf8BFwEuAegB/wHWAdgB5QH/AfoB+QHyAf8C/QH+Af8C1QHXAf8C0gHT
+        Af8C/QH+Af8C+gH1Af8B4QHiAeUB/wEeASEBvAH/AgABtQH/AlYBWAG5AwkBDAwAAzEBTwNWAbYDVwHo
+        AXEBdQFwAfoBswGrAaYB/wGGAmkB/wNYAdEDEAEWGAADJAE1AVkBYgFpAesBAAHhAfkB/wEAAdAB9QH/
+        AQAB1AH+Af8BAgHBAfEB/wEWAUEBmQH9AVIBVQFdAe0DUQGnA0oBiwMkATUQAANVAbIBbAGPATMB/wFo
+        AaMBPAH/AfgByQGNAv8BwAFuAv8BugFlAv8BuQFhAv8BuwFkAf8B1AGvAVIB/wFwAZgBMgH/AeEBvQFs
+        Af8B7QHHAY4B/wGoAbIBYAH/AWYBqQFHAf8BlgFPAUAB/QM9AWoEAAMqAUECQgF7AfUBBAEgAe0B/wFm
+        AYMB6AP/AfcF/wO8Af8DtQf/AfwB/wGQAZQB1QH/AgABwAH/AToBOwF7AfgDMQFOEAABZQJkAfEB4wHa
+        AdsB/wHzAesB6gH/AekB7AHkAf8B2wHQAc4B/wHLAbgBuQH/AY4CgQH/A1gB4wM9AWoDAQECFAADJgE4
+        AVQBYgFoAe0BAAHiAfkB/wEAAdMB8wH/AQcB5QH9Af8BDwHmAv8BCQGvAfIB/wEAAVcBxgH/AQABTAG+
+        Af8BWAFaAVwB5wM4AV0MAAFiAlUB6gE7AYIBGQH/ARIBWgEAAf8BbAGJASUB/wH1AbMBVAL/AbEBTwL/
+        Aa4BSwL/AbMBUQH/AYYBigEjAf8BAgFUAQAB/wFnAYYBIQH/Af0BxQGDAf8BnQGcAT8B/wFSAZEBKwH/
+        AcYBnAFfAf8DUwGwCAACVAFWAasBIQEzAd4B/wE8AVAB9QH/Ae0B7gH8Bf8DjAH/A28F/wHqAesB/gH/
+        ASEBKAHfAf8BAQEKAcAB/wJVAVcBtwMBAQIQAAF6AnYB+AHtAuAB/wHiAtYB/wHnAdwB3gH/AdkBygHL
+        Af8B1ALDAf8B5QLUAf8ByQK6Af8BUAJLAf0DVwHCAyEBMBQAAykBPwFOAWIBaAHvAQAB4wH6Af8BAAHO
+        AfIB/wESAeQB+wH/ATQD/wE+AeoC/wFWAeQC/wEPAYoB5wH/ATcBPQFtAfcDRgGACAABgwFbAUEB+QEp
+        AV0BCAH/ARMBSAEAAf8BEAFHAQAB/wGxAZEBLgL/AbMBTgL/AbQBUAL/AbgBUwH/AVoBZwEVAf8BFQFL
+        AQAB/wEaAUwBAAH/AaoBkwE1Af8B5QGwAVgB/wHJAbIBYwH/AewBugGKAf8DVwHFCAADJwE6AkEBjQH5
+        AZ4BogH9Af8Czwb/A2YB/wNUBf8CpwL/ARYBFwH+Af8BJgEoAagB/QMvAUkUAAGAAn0B9wH5AvIB/wHy
+        Au0B/wHxAu4B/wHcAs8B/wHPAr0B/wHUAsUB/wHhAtIB/wHvAuIB/wGYAo0B/wNRAaEYAAMtAUYBTQFi
+        AWsB7wEAAd0B9AH/AQABxwHwAf8BEQHgAfYB/wFJA/8BjgP/AY8B9gL/ASMBowH5Af8BOgFCAVoB9QMv
+        AUoEAAGMAV8BMgH7ASEBSAEAAf8BEgE0AQAB/wFgAV4BFAH/AeMBqQFHAv8BtwFWAf8B2wGjAUUB/wG2
+        AY4BMgH/ATEBQwEAAf8BFgE2AQAB/wEZAToBAAH/ATIBSAEAAf8BngGDASsB/wGjAY8BOAH/AbsBlwFO
+        Af8DWQHHCAADAgEDAlABUgGjAXABggHnAf8BvQG8Av8C+wL/AkUBQQH/AjcBMgH/AvYB/gH/Al4C/wEh
+        ASIB4gH/A1UBsgMFAQcUAAGBAoAB9wH+AvwB/wHsAuYB/wHvAuoB/wHdAtEB/wHOArwB/wHTAsQB/wHV
+        AsYB/wHtAt8B/wG6Aq0B/wNSAakcAANIAYQBAAGoAdoB/wEAAesB/QH/AQAB5AH0Af8BDwL+Af8BQAP/
+        AZID/wGbA/8BDAFtAeEB/wNbAdADDwEUAXUBWAFIAfYBhQFnASAB/wG3AYoBLAH/AfUBrgFMAv8BvgFj
+        Af8B2wGsAVwB/wFKAU8BGwH/ATcBRgETAf8BPQFHARUB/wE0AT0BDAH/ASUBLwEAAf8BLwEwAQAB/wI3
+        AQAB/wE2ATwBAwH/AZIBYAEpAf8DVQG0DAADJAE2AkwBdwHzAbIBtAH+Af8C3wL/AmYBYAH/AmEBVQH/
+        AsAB/AH/AU0BTgH+Af8BPgE/AYYB9wMqAUEYAAOAAfcB2ALKAf8ByAK3Af8B6ALgAf8B3wLTAf8BzAK5
+        Af8B0gLBAf8B1QLEAf8B5gLWAf8BrQKfAf8DUQGnHAACWwFgAdYBAAHKAfkB/wEAAeAC/wEAAe8C/wEA
+        AfwC/wEOA/8BNQH6Av8BhgP/AVsB4AL/AQcBSwGTAf4DSgGMAV4CWwHZAbEBiwEyAf8B7QGqAUUC/wHK
+        AYwC/wHeAbcB/wHgAdIBuQH/AZ8BpgGPAf8BoAGnAY8B/wGoAasBkwH/AaYBqQGQAf8BlQGZAW0B/wFd
+        AWEBOwH/ARgBKAEAAf8BIAEwAQAB/wGqAWEBMAH/A0MBdwwAAwMBBANQAZ0BggGFAeUB/wHJAcgC/wLm
+        Ae8B/wLmAe0B/wKWAv8BQgFEAeMB/wNTAaoDBgEIGAABgAJ/AfcBzQK7Af8BwwKyAf8B7wLqAf8B3gLS
+        Af8BxgKzAf8B0AK+Af8B0QLAAf8B4gLRAf8BqQKaAf8DUQGnHAABVQJXAboBAAHHAfMB/wEAAdEC/wEA
+        AdoC/wEAAfUC/wEOAdgB8QH/AUIBWQF3AfUBMwGoAbwB/QFUA/8BAwGCAegB/wNOAZQBRwJGAYEBnQFl
+        AS0B/wGlAbUBbwH/AfkB7gHaAv8B8AHhAv8B9gHqAf8B8QHuAeAB/wHCAc8BuAH/AcYB0QG6Af8BzQHV
+        AbwB/wHEAdABtwH/AboBzQG1Af8BhQGoAYYB/wFmAYABKQH/AWQCWQHsAxIBGRAAAyUBNwJTAXQB8QG+
+        AcAB/gH/AtcC/wHJAcgC/wGOAY8C/wFDAUUBeQH2Ay0BRRwAA4AB9wHvAugB/wHwAusB/wH+Av0B/wHZ
+        AswB/wG+AqgB/wHHArQB/wHNArsB/wHfAs0B/wGmApcB/wNRAaccAAMQARYBWQFgAWoB6wEAAdMC/wEA
+        Ac8C/wEAAegC/wElAX8BsgH+A1kBzwExAV0BiwH4AQABswHzAf8CVwFaAb0DDQESAw0BEgFcAlcB3wG9
         AccBlQH/AcwB6QHRAf8B5QHpAdgB/wH4AfQB6QL/Af0B+AH/AdkB6AHWAf8BvgHYAb4B/wHAAdgBvwH/
-        AcMB2QHBAf8BwAHfAcoB/wG3AdgBqwH/AZgBfAFFAf4DRAF5GAADUAGeAYwBkAHlAf8CzAL/AbUBtAL/
-        AW0BcAHkAf8DVAGuIAADcAH1Af8C/QH/AfYC7wH/AeQC2wH/Ad4C0wH/AdMCxQH/AcQCsAH/AcECqwH/
-        AdYCwQH/AaICkQH/A1EBpyAAAzkBXwEhAXkBpAH6AQAB0QH7Af8BAAHeAv8BAAHBAe0B/wEGAX8BqAH+
-        AQABjQHbAf8CWQFbAcMDBAEGCAADJQE3AXMBWAFQAe8B4AHdAboB/wHbAfgB5wH/Ad4B8AHlAf8B7AH1
-        Ae0B/wHjAe8B4wH/AdUB5wHWAf8B1QHqAdwB/wHbAfYB6QH/AesB8AHPAf8ByQGTAVMB/wFSAlABpBwA
-        Ax0BKgJMAYIB8wHWAdgC/wHMAc0C/wI+AZYB+AMmATkgAAM+AWsDYQHqAcwCxQH/AfAC6AH/AfAC6AH/
-        AegC4wH/AeAC2QH/Ac4CvwH/AdACuQH/AZ0CiwH/A1QBqyQAAzgBXAFXAVwBYQHfAQABsQHpAf8BAAHq
-        Av8BAAHLAfQB/wJaAV0BygMJAQwQAAMlATcBYgJYAd0B4gG3AZ4B/wH4AfcB7An/AfsD/wH6Af4B8gH/
-        AfYB2QG9Af8BlgFlAVsB+ANOAZQgAAMCAQMDTgGUAZMBlwHoAf8BmgGfAekB/wJPAVMBpQMDAQQkAAMJ
-        AQwDSwGPA2UB7wHZAtYB/wH5AvYB/wH6AvcB/wH4AvcB/wHtAuUB/wGXAooB/wNOAZkoAAMNARIDTgGU
-        AUIBYwF8AfACWgFdAcoDDQESGAADCQEMAUcCRgGAAV4CWwHZAYkBaQFcAfUBqwGMAXAB+wGiAYMBagH5
-        AWwBXAFVAeoDVQGyAycBOigAAxsBJgJaAWEB2wFVAVYBZAHkAyIBMjAAAxUBHQNQAZ4BeAJ3AfUDiwH5
-        A18B4wNZAccDTAGTAxYBHwgAAUIBTQE+BwABPgMAASgDAAFAAwABIAEBAgABAQEAAQEGAAEJFgAD/wEA
-        AfABHwYAAeABDwYAAeABDwYAAeABDwYAAeABDwYAAeABDwYAAeABDwYAAeABDwYAAeABDwYAAeABDwYA
-        AeABDwYAAeABDwYAAeABDwYAAeABDwYAAeABDwYAAeABDwYAAfgBDwL/Af4BfwL/AfABBwL/Af4BfwL/
-        AfABAwH5Ac8B4AEPAv8B4AEBAfgBjwHgAQcCAAHgAQEB8AGPAeYBRwIAAcABAQHwAQcB5gFDAgABwAEA
-        AeABBwH+AQcCAAHAAQAB4gETAfABBwIAAcABAAHCATMB4AEPAgABwAEAAcQBEwHgAR8CAAHAAQEBhAEZ
-        AeABbwIAAeABAwGIAQkB4gFnAgAB/AEPAgAB4AFHAgABwAF/Av8B8AEHAgABgwG/Av8B/AE/Av8BzwG/
-        Av8B/gF/Av8B+AE/AccB4wHgAQcBfwH/AeABAwHBAcMBwAEDAT8B/wGAAQEBwAEDAeABBwGPAf8BgAEB
-        AeABBwGAAQEBgwH/AYABAQHgAQcBgAEBAcEB/wGAAQEB4AEHAYABAQHAAf8BgAEBAeABAwGAAQEB4AE/
-        AYABAAHAAQEBgAEBAfABHwQAAcABAwH4AQ8EAAHAAQMB/AEHBAAB4AEHAf4BAwEAAQEB+AEfAeABBwH/
-        AQEBgAEBAfgBHwHwAQ8B/wGBAcABAwH8AT8B8AEPAf8CwAEHAfwBPwHwAQ8B/wHwAv8B/AE/AfgBHwH/
-        AfwB4AP/AcIBAwH/AeEB4AE/AgABgAEBAf8B4AHAAQ8CAAGAAQAB/wHAAYABBwIAAYABAAH/AYABAAED
-        AgABgAEAAf8BgQEAAQMCAAGAAQAB/wEDAQABAQIAAYABAAH/AQMEAAGAAQABjgEHAeAEAAEBAQwBDwH8
-        BAABAwEAAR8B/gQAAQEBAAE/Af8BAQMAAQEBAAE/Af8BAwMAAQEBwAFjAf8BhwMAAQMBwAEDAf8BxwMA
-        AQcB4AEDAv8CAAEBAQ8B8AEPAgAC/wGfAf8BgAEBAgAB4wH/AYcB/wGAAQECAAHBAf8BgQH/AYABAQIA
-        AcAB/wHAAf8BgAEBAgABgAF/AcAB/wGAAQECAAGAAT8BwAH/AYABAQMAAR8B4AE/AYABAQMAAQ8B8AEf
-        AYABAQMAAQcB+AEPAYABAQIAAQwBBwH8AQ8BgAEBAgABHgEDAfwBBwGAAQECAAE/AYEB/gEDAYABAQIA
-        Af8BwAH/AQMBgAEBAgAB/wHwAf8BgQGAAQECAAH/AfgB/wHBAYABAQIAA/8B4QGAAQEE/wHgAQMBgAEB
-        AYABAQGAAQcBgAEBAYABAQMAAQMCAAGAAQEDAAEBAgABgAEBAwABAQIAAYABAQMAAQECAAGAAQEGAAGA
-        AQEGAAGAAQEGAAGAAQEGAAGAAQEGAAGAAQEGAAH/AcMBAAEBAQABAQEAAQEB4QGHAQABAQEAAQcBAAEB
-        AeABBwEAAQcBAAEPAQABBwHwAQ8BAAF/AQAB/wEAAX8B8AEPAQABDwGHAeEB4AEHAf4BBwEAAgMCwAED
-        AfgBBwEAAgECgAEBAcABBwYAAYABBwYAAYABBwIAAYABAQIAAYABBwIAAcABAwIAAYABBwIAAeABBwIA
-        AYABBwIAAeABBwIAAYABBwIAAcABAwIAAYABBwIAAYABAQIAAYABAQYAAYABAQYAAYABAQEAAgECgAEB
-        AYABAwEAAf8BAwLAAQMBgAEPAv8BhwHhAeABBwGAAX8B/wH4AgAB4wH/AeABBwH/AfACAAHBAf8BgAED
-        AeABIAIAAYAB/wGAAQEBwAEBAwABfwGAAQEBwAEDAwABPwGAAQEBgAEHAwABHwGAAQEBgAEBAwABDwGA
-        AQEEAAGAAQcBgAEBBAABwAEDAYABAQQAAeABAQGAAQEBAAEBAgAB8AEAAYABAQEAAQECAAH4AQABgAEB
-        AYABAwIAAfwBAAGAAQEB8AEDAgAB/gEBAYABAQH8AQcCAAH/AQMBgAEDAf8BBwIAAf8BhwHAAQcBgAH/
-        AgAB4AEHAeABBwGAAf8CAAHgAQcBwAEDAYADAAHAAQEBgAEBAYADAAGAAwABgAEAAYABAAGAAwABgAMA
-        AYADAAGAAwABgAMAAYADAAGAAwABgAMAAYADAAGAAwABgAMAAYACAAEBAYADAAHgAgABAQGAAQECAAHg
-        AgABAQGAAQECAAHgAQEBAAEBAcABAwGAAQEB8AH3AYABAQHwAQMBwAEDAfAD/wHwAQMB8AEHBf8B4QGA
-        Ab8BgAEAAeABPwH/AcABAAEDAYABAAHgAQcB/wGAAgABgAEAAcABAQH/AwABgAEAAcABAQH+AwABgAEA
-        AcABAQH8AQEBAAEBAYABAAGAAQEB4AEDAQABDwGAAQABgAEBAYABBwIAAYABAAGAAQEBAAEPAYABAAGA
-        AQABgAEBAQABHwHgAQABgAEAAYABAwEAAT8B4AEBAYABAAGAAQMBAAE/AeABAQGAAQABgAEDAQABPwHA
-        AQEBgAEAAeABBwEAAX8BwAEBAYABAAH+AQcBwAF/AcABAQT/AcAB/wHAAQMCAAL/AgABwAEDAgAB4wH/
-        BgABwwH/BgABwAEBBgABwAEBBgABwAEBBgABwAEBBgABwAEBBgABgAEBBgABgAEBBgABgAEBBgABgAEB
-        AgAB4AEHAgABgAEBAgAB8AEPAgABgAH/AgAB8AEHAgABgAH/AgAB8AEHAgAC/wIAAfABBwH/AY8B8AE/
-        Av8B4AEHAf8BhwGAAQEBgAEBAcABBwHwAYMCAAGAAQEB4AEHAeABAwIAAYABAQGAAQEBwAEBAgABgAEB
-        AwABAQIAAYABAQYAAYABAQYAAYABAQYAAYABAQYAAYABAQYAAYABAQYAAYABAQIAAcACAAEBAYABAQIA
-        AeACAAEBAYABAQEAAQEB4AIAAQcBgAEBAQABAQH/AcABAAF/AYABAQGAAQEB+AFPAeAFAAH4AQcB4AUA
-        AcABAwHABQABgAEDAcAHAAHABQABgAEAAYAHAAGABQABAQGABgABAQgAAQEOAAGAAQEGAAHAAQMGAAHA
-        AR8GAAHyAR8B4AEHBAAE/wIAAv8B4AEDAfABDwHgAQcBwAF/AeABAAHgAQcB4AEPAYABBwHgAQABwAED
-        AgABgAEAAcABAAGAAQECAAGAAQABgAcAAYAHAAGABwABgAYAAQEB4AYAAQEB4AYAAQEB4AYAAQMB4AUA
-        AYABAwHwAgABAQIAAcABBwH4AQABgAEDAgABwAEfAfwBAQHAAQcCAAHgAX8C/wHgAQ8CAAHgAf8B+AEf
-        BP8B+AE/AcgBEwH+AT8C/wHAAR8BnAE5AfwBHwGAAQcBAAEPAQQBIAH8AR8BgAEDAQABBwEEASAB+AE/
-        AYABAQEAAQMBBAEgAeABQwGAAQECAAEEASABwAEDAYABAQGAAwABgAEDAYABAQHgAwABgAEHAYABAQHw
-        AQABBAEgAYABHwHAAQEB/AEAAQIBQAGAAQMB8AEBAf4BAQIAAYABAQHAAQEB/AEDAgABwAEBAcABAwH4
-        AQMBgAEBAcABAwHgAQcB8AEHAcABAwHAA/8B4AEPAeABBwT/AeABDwH/AQMG/wHwAQEC/wH4AR8CAAHg
-        AwAB+AEBAgABgAMAAYADAAGAAQECAAGABwABgAcAAYAMAAEBAwABAQMAAQEDAAEBAwABAQMAAQMDAAEB
-        AwABAwMAAQMDAAEDAgABgAEDAgABwAEHAgABwAEHAv8B8AF/Av8B4AEfCP8BgAE/Av8BwAEHAecB/wEA
-        AR8B/AE/AcABAwHAAQEBAAEfAfgBHwHAAQMBwAEBAQABHwHwAQ8BgAEHAYABAQEAAR8B4AEPAYABBwGA
-        AQEBAAEfAcABAwGAAQcBgAEBAQABHwGAAQEBgAEHAYABAQEAAT8DAAEDAYABAQGAAX8DAAEBAYABAQGA
-        AQcEAAGAAQEBgAEBBAABgAEBAYAFAAGAAQMBgAUAAYABAwHAAQABgQEBAgAB/wHnAeEBAALDAQABHwP/
-        AYEE/wEPAf8B8AEPAgAB4AEDAQcB/wHgAQcCAAHgAQMBAQH/AcABAwIAAeABAwEBAf8BgAEBAgAB/AE/
-        AQABfwQAAeABHwGAAQ8CAAGAAQEB4AEHAcABBwIAAcABAQHgAQMB4AEDAgABwAEDAeABAwHwAQECAAHA
-        AQMB4AEDAfgDAAHgAQcB4AEDAfgDAAHgAQcB4AEDAfgDAAHwAQ8B4AEDAfgCAAEBAfgBHwHgAQMB/AEB
-        AYABAwH4AR8B4AEDAf4BAwHAAQcB+AEfAfABAwH/AQcB4AEPAfwBPwH8AQML
+        AcMB2QHBAf8BwAHfAcoB/wG3AdgBqwH/AZABfAFFAf4DRAF5GAADUAGeAYwBkAHlAf8CzAL/AbUBtAL/
+        AWkBbAHkAf8DVAGuIAADbAH1Af8C/QH/AfYC7wH/AeQC2wH/Ad4C0wH/AdMCxQH/AcQCsAH/AcECqwH/
+        AdYCwQH/AaICkQH/A1EBpyAAAzkBXwElAXUBnAH6AQAB0QH7Af8BAAHeAv8BAAHBAe0B/wEGAX8BoAH+
+        AQABjQHbAf8CWQFbAcMDBAEGCAADJQE3AWgBWAFWAe8B4AHdAboB/wHbAfgB5wH/Ad4B8AHlAf8B7AH1
+        Ae0B/wHjAe8B4wH/AdUB5wHWAf8B1QHqAdwB/wHbAfYB6QH/AesB8AHPAf8ByQGTAU8B/wFSAlABpBwA
+        Ax0BKgJMAXcB8wHWAdgC/wHMAc0C/wI+AY0B+AMmATkgAAM+AWsDXAHqAcwCxQH/AfAC6AH/AfAC6AH/
+        AegC4wH/AeAC2QH/Ac4CvwH/AdACuQH/AZ0CiwH/A1QBqyQAAzgBXAFXAVwBXQHfAQABsQHpAf8BAAHq
+        Av8BAAHLAfQB/wJaAV0BygMJAQwQAAMlATcBXgJYAd0B4gG3AZ4B/wH4AfcB7An/AfsD/wH6Af4B8gH/
+        AfYB2QG9Af8BjQFdAVwB+ANOAZQgAAMCAQMDTgGUAZMBlwHoAf8BmgGfAekB/wJPAVMBpQMDAQQkAAMJ
+        AQwDSwGPA2IB7wHZAtYB/wH5AvYB/wH6AvcB/wH4AvcB/wHtAuUB/wGXAooB/wNOAZkoAAMNARIDTgGU
+        AUwBXQFuAfACWgFdAcoDDQESGAADCQEMAUcCRgGAAV4CWwHZAYABZAFZAfUBnQGIAWQB+wGSAX8BagH5
+        AWQBXAFVAeoDVQGyAycBOigAAxsBJgJaAV8B2wJaAWEB5AMiATIwAAMVAR0DUAGeA24B9QOHAfkDXwHj
+        A1kBxwNMAZMDFgEfCAABQgFNAT4HAAE+AwABKAMAAUADAAEgAQECAAEBAQABAQYAAQkWAAP/AQAB8AEf
+        BgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEP
+        BgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEPBgAB4AEPBgAB+AEPAv8B/gF/Av8B8AEHAv8B/gF/Av8B8AED
+        AfkBzwHgAQ8C/wHgAQEB+AGPAeABBwIAAeABAQHwAY8B5gFHAgABwAEBAfABBwHmAUMCAAHAAQAB4AEH
+        Af4BBwIAAcABAAHiARMB8AEHAgABwAEAAcIBMwHgAQ8CAAHAAQABxAETAeABHwIAAcABAQGEARkB4AFv
+        AgAB4AEDAYgBCQHiAWcCAAH8AQ8CAAHgAUcCAAHAAX8C/wHwAQcCAAGDAb8C/wH8AT8C/wHPAb8C/wH+
+        AX8C/wH4AT8BxwHjAeABBwF/Af8B4AEDAcEBwwHAAQMBPwH/AYABAQHAAQMB4AEHAY8B/wGAAQEB4AEH
+        AYABAQGDAf8BgAEBAeABBwGAAQEBwQH/AYABAQHgAQcBgAEBAcAB/wGAAQEB4AEDAYABAQHgAT8BgAEA
+        AcABAQGAAQEB8AEfBAABwAEDAfgBDwQAAcABAwH8AQcEAAHgAQcB/gEDAQABAQH4AR8B4AEHAf8BAQGA
+        AQEB+AEfAfABDwH/AYEBwAEDAfwBPwHwAQ8B/wLAAQcB/AE/AfABDwH/AfAC/wH8AT8B+AEfAf8B/AHg
+        A/8BwgEDAf8B4QHgAT8CAAGAAQEB/wHgAcABDwIAAYABAAH/AcABgAEHAgABgAEAAf8BgAEAAQMCAAGA
+        AQAB/wGBAQABAwIAAYABAAH/AQMBAAEBAgABgAEAAf8BAwQAAYABAAGOAQcB4AQAAQEBDAEPAfwEAAED
+        AQABHwH+BAABAQEAAT8B/wEBAwABAQEAAT8B/wEDAwABAQHAAWMB/wGHAwABAwHAAQMB/wHHAwABBwHg
+        AQMC/wIAAQEBDwHwAQ8CAAL/AZ8B/wGAAQECAAHjAf8BhwH/AYABAQIAAcEB/wGBAf8BgAEBAgABwAH/
+        AcAB/wGAAQECAAGAAX8BwAH/AYABAQIAAYABPwHAAf8BgAEBAwABHwHgAT8BgAEBAwABDwHwAR8BgAEB
+        AwABBwH4AQ8BgAEBAgABDAEHAfwBDwGAAQECAAEeAQMB/AEHAYABAQIAAT8BgQH+AQMBgAEBAgAB/wHA
+        Af8BAwGAAQECAAH/AfAB/wGBAYABAQIAAf8B+AH/AcEBgAEBAgAD/wHhAYABAQT/AeABAwGAAQEBgAEB
+        AYABBwGAAQEBgAEBAwABAwIAAYABAQMAAQECAAGAAQEDAAEBAgABgAEBAwABAQIAAYABAQYAAYABAQYA
+        AYABAQYAAYABAQYAAYABAQYAAYABAQYAAf8BwwEAAQEBAAEBAQABAQHhAYcBAAEBAQABBwEAAQEB4AEH
+        AQABBwEAAQ8BAAEHAfABDwEAAX8BAAH/AQABfwHwAQ8BAAEPAYcB4QHgAQcB/gEHAQACAwLAAQMB+AEH
+        AQACAQKAAQEBwAEHBgABgAEHBgABgAEHAgABgAEBAgABgAEHAgABwAEDAgABgAEHAgAB4AEHAgABgAEH
+        AgAB4AEHAgABgAEHAgABwAEDAgABgAEHAgABgAEBAgABgAEBBgABgAEBBgABgAEBAQACAQKAAQEBgAED
+        AQAB/wEDAsABAwGAAQ8C/wGHAeEB4AEHAYABfwH/AfgCAAHjAf8B4AEHAf8B8AIAAcEB/wGAAQMB4AEg
+        AgABgAH/AYABAQHAAQEDAAF/AYABAQHAAQMDAAE/AYABAQGAAQcDAAEfAYABAQGAAQEDAAEPAYABAQQA
+        AYABBwGAAQEEAAHAAQMBgAEBBAAB4AEBAYABAQEAAQECAAHwAQABgAEBAQABAQIAAfgBAAGAAQEBgAED
+        AgAB/AEAAYABAQHwAQMCAAH+AQEBgAEBAfwBBwIAAf8BAwGAAQMB/wEHAgAB/wGHAcABBwGAAf8CAAHg
+        AQcB4AEHAYAB/wIAAeABBwHAAQMBgAMAAcABAQGAAQEBgAMAAYADAAGAAQABgAEAAYADAAGAAwABgAMA
+        AYADAAGAAwABgAMAAYADAAGAAwABgAMAAYADAAGAAwABgAIAAQEBgAMAAeACAAEBAYABAQIAAeACAAEB
+        AYABAQIAAeABAQEAAQEBwAEDAYABAQHwAfcBgAEBAfABAwHAAQMB8AP/AfABAwHwAQcF/wHhAYABvwGA
+        AQAB4AE/Af8BwAEAAQMBgAEAAeABBwH/AYACAAGAAQABwAEBAf8DAAGAAQABwAEBAf4DAAGAAQABwAEB
+        AfwBAQEAAQEBgAEAAYABAQHgAQMBAAEPAYABAAGAAQEBgAEHAgABgAEAAYABAQEAAQ8BgAEAAYABAAGA
+        AQEBAAEfAeABAAGAAQABgAEDAQABPwHgAQEBgAEAAYABAwEAAT8B4AEBAYABAAGAAQMBAAE/AcABAQGA
+        AQAB4AEHAQABfwHAAQEBgAEAAf4BBwHAAX8BwAEBBP8BwAH/AcABAwIAAv8CAAHAAQMCAAHjAf8GAAHD
+        Af8GAAHAAQEGAAHAAQEGAAHAAQEGAAHAAQEGAAHAAQEGAAGAAQEGAAGAAQEGAAGAAQEGAAGAAQECAAHg
+        AQcCAAGAAQECAAHwAQ8CAAGAAf8CAAHwAQcCAAGAAf8CAAHwAQcCAAL/AgAB8AEHAf8BjwHwAT8C/wHg
+        AQcB/wGHAYABAQGAAQEBwAEHAfABgwIAAYABAQHgAQcB4AEDAgABgAEBAYABAQHAAQECAAGAAQEDAAEB
+        AgABgAEBBgABgAEBBgABgAEBBgABgAEBBgABgAEBBgABgAEBBgABgAEBAgABwAIAAQEBgAEBAgAB4AIA
+        AQEBgAEBAQABAQHgAgABBwGAAQEBAAEBAf8BwAEAAX8BgAEBAYABAQH4AU8B4AUAAfgBBwHgBQABwAED
+        AcAFAAGAAQMBwAcAAcAFAAGAAQABgAcAAYAFAAEBAYAGAAEBCAABAQ4AAYABAQYAAcABAwYAAcABHwYA
+        AfIBHwHgAQcEAAT/AgAC/wHgAQMB8AEPAeABBwHAAX8B4AEAAeABBwHgAQ8BgAEHAeABAAHAAQMCAAGA
+        AQABwAEAAYABAQIAAYABAAGABwABgAcAAYAHAAGABgABAQHgBgABAQHgBgABAQHgBgABAwHgBQABgAED
+        AfACAAEBAgABwAEHAfgBAAGAAQMCAAHAAR8B/AEBAcABBwIAAeABfwL/AeABDwIAAeAB/wH4AR8E/wH4
+        AT8ByAETAf4BPwL/AcABHwGcATkB/AEfAYABBwEAAQ8BBAEgAfwBHwGAAQMBAAEHAQQBIAH4AT8BgAEB
+        AQABAwEEASAB4AFDAYABAQIAAQQBIAHAAQMBgAEBAYADAAGAAQMBgAEBAeADAAGAAQcBgAEBAfABAAEE
+        ASABgAEfAcABAQH8AQABAgFAAYABAwHwAQEB/gEBAgABgAEBAcABAQH8AQMCAAHAAQEBwAEDAfgBAwGA
+        AQEBwAEDAeABBwHwAQcBwAEDAcAD/wHgAQ8B4AEHBP8B4AEPAf8BAwb/AfABAQL/AfgBHwIAAeADAAH4
+        AQECAAGAAwABgAMAAYABAQIAAYAHAAGABwABgAwAAQEDAAEBAwABAQMAAQEDAAEBAwABAwMAAQEDAAED
+        AwABAwMAAQMCAAGAAQMCAAHAAQcCAAHAAQcC/wHwAX8C/wHgAR8I/wGAAT8C/wHAAQcB5wH/AQABHwH8
+        AT8BwAEDAcABAQEAAR8B+AEfAcABAwHAAQEBAAEfAfABDwGAAQcBgAEBAQABHwHgAQ8BgAEHAYABAQEA
+        AR8BwAEDAYABBwGAAQEBAAEfAYABAQGAAQcBgAEBAQABPwMAAQMBgAEBAYABfwMAAQEBgAEBAYABBwQA
+        AYABAQGAAQEEAAGAAQEBgAUAAYABAwGABQABgAEDAcABAAGBAQECAAH/AecB4QEAAsMBAAEfA/8BgQT/
+        AQ8B/wHwAQ8CAAHgAQMBBwH/AeABBwIAAeABAwEBAf8BwAEDAgAB4AEDAQEB/wGAAQECAAH8AT8BAAF/
+        BAAB4AEfAYABDwIAAYABAQHgAQcBwAEHAgABwAEBAeABAwHgAQMCAAHAAQMB4AEDAfABAQIAAcABAwHg
+        AQMB+AMAAeABBwHgAQMB+AMAAeABBwHgAQMB+AMAAfABDwHgAQMB+AIAAQEB+AEfAeABAwH8AQEBgAED
+        AfgBHwHgAQMB/gEDAcABBwH4AR8B8AEDAf8BBwHgAQ8B/AE/AfwBAws=
 </value>
   </data>
   <metadata name="m_ctxPwList.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
@@ -1581,17 +1573,17 @@
   <data name="m_tbCloseTab.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
         iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
-        YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAjhJREFUOE+1k9tL
-        k2Ecx/1jqotIbyShIiMPqWva5nSH1BVOcqYL7OBFEi0sMIlQXMNW22IjnKXL3Dxs2jClk2J2GNhFiyLq
-        xguD6qKIPv32zpqSsaseeHmf532f7+H3/T1PVtb/GPGGJu6V64hVVDOl1jG2r5wnJjMZtZbb7UxrDHzu
-        6IJwDJ6/hdgiuAf5cMrOSIGKV1bbxkRJ8GPjIYg+gOl5WPki7wUITkL/OHT7+HbRTaRMx1Jj898k0xo9
-        RGbBE+Dn5T7o9cDtiKL+yd7Nj0tOcdbLylkHt3YWrCdI1qzYnotDzzWU0efl6wWHAqbHnfp21cf7E508
-        O2xjcr8mTTJReoCPbZ2wmABXQDb6/wBweFPzGwO8OXaO1y3JUq24s3PTBOMlGuINbbxrtUu9o3zvcglR
-        fwq4Ck7Y7BLgGWYq66RDRq5v254mGC2ukGBOM3ewmafmZkn8vCgOpQn8QV7UH5cAq5SWxipMuLaucRAu
-        UvPScpL5mqOKPZy+FLh/RIgGU3NvQFpsIlykkrNhwLklJ+1goa6eWZ1F1G3ShVXA8CQP9Rbua2vhZihF
-        MjAmYD3BfBV395as78TQ7mJx0MJyu4Q5HJVyrEyUakmWN1MpJIGQ/OsgqtJzZfMa9d/HM2Fr5c4elZTQ
-        xCPDEWlTlTw6IdEQKlRJcAZZG/Dk7Pj3sV5qbMGfu0tA1aJqlpprJDCjAgzml+HYlC3ktZnvxJRaK0p5
-        0qo8Je2k5VBhaWZgxtu2wYZf6sXN8tgp1swAAAAASUVORK5CYII=
+        YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAI4SURBVDhPtZPbS5NhHMf9Y6qLSG8koSIjD6lr2uZ0h9QV
+        TnKmC+zgRRItLDCJUFzDVttiI5yly9w8bNowpZNidhjYRYsi6sYLg+qiiD799s6akrGrHnh5n+d9n+/h
+        9/09T1bW/xjxhibuleuIVVQzpdYxtq+cJyYzGbWW2+1Mawx87uiCcAyev4XYIrgH+XDKzkiBildW28ZE
+        SfBj4yGIPoDpeVj5Iu8FCE5C/zh0+/h20U2kTMdSY/PfJNMaPURmwRPg5+U+6PXA7Yii/snezY9LTnHW
+        y8pZB7d2FqwnSNas2J6LQ881lNHn5esFhwKmx536dtXH+xOdPDtsY3K/Jk0yUXqAj22dsJgAV0A2+v8A
+        cHhT8xsDvDl2jtctyVKtuLNz0wTjJRriDW28a7VLvaN873IJUX8KuApO2OwS4BlmKuukQ0aub9ueJhgt
+        rpBgTjN3sJmn5mZJ/LwoDqUJ/EFe1B+XAKuUlsYqTLi2rnEQLlLz0nKS+Zqjij2cvhS4f0SIBlNzb0Ba
+        bCJcpJKzYcC5JSftYKGunlmdRdRt0oVVwPAkD/UW7mtr4WYoRTIwJmA9wXwVd/eWrO/E0O5icdDCcruE
+        ORyVcqxMlGpJljdTKSSBkPzrIKrSc2XzGvXfxzNha+XOHpWU0MQjwxFpU5U8OiHRECpUSXAGWRvw5Oz4
+        97FeamzBn7tLQNWiapaaayQwowIM5pfh2JQt5LWZ78SUWitKedKqPCXtpOVQYWlmYMbbtsGGX+rFzfLY
+        KdbMAAAAAElFTkSuQmCC
 </value>
   </data>
   <metadata name="m_statusMain.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
diff --git a/KeePass/Forms/MainForm_Events.cs b/KeePass/Forms/MainForm_Events.cs
index f01a0b6..99e333c 100644
--- a/KeePass/Forms/MainForm_Events.cs
+++ b/KeePass/Forms/MainForm_Events.cs
@@ -130,6 +130,24 @@ namespace KeePass.Forms
 	}
 
 	/// <summary>
+	/// Event arguments structure for file-closing events.
+	/// </summary>
+	public sealed class FileClosingEventArgs : CancellableOperationEventArgs
+	{
+		private PwDatabase m_pwDatabase;
+
+		public PwDatabase Database { get { return m_pwDatabase; } }
+
+		/// <summary>
+		/// Default constructor.
+		/// </summary>
+		public FileClosingEventArgs(PwDatabase pwDatabase)
+		{
+			m_pwDatabase = pwDatabase;
+		}
+	}
+
+	/// <summary>
 	/// Event arguments structure for the file-closed event.
 	/// </summary>
 	public sealed class FileClosedEventArgs : EventArgs
@@ -189,6 +207,9 @@ namespace KeePass.Forms
 		/// </summary>
 		public event EventHandler<FileOpenedEventArgs> FileOpened;
 
+		public event EventHandler<FileClosingEventArgs> FileClosingPre;
+		public event EventHandler<FileClosingEventArgs> FileClosingPost;
+
 		/// <summary>
 		/// Event that is fired after a database has been closed.
 		/// </summary>
diff --git a/KeePass/Forms/MainForm_Functions.cs b/KeePass/Forms/MainForm_Functions.cs
index 968b48b..15ac1f7 100644
--- a/KeePass/Forms/MainForm_Functions.cs
+++ b/KeePass/Forms/MainForm_Functions.cs
@@ -23,8 +23,8 @@ using System.Drawing;
 using System.Collections;
 using System.Collections.Generic;
 using System.Windows.Forms;
-using System.Diagnostics;
 using System.IO;
+using System.Diagnostics;
 
 using KeePass.App;
 using KeePass.App.Configuration;
@@ -1176,14 +1176,7 @@ namespace KeePass.Forms
 			}
 
 			if(lviFocused != null)
-			{
-				try { m_lvEntries.FocusedItem = lviFocused; } // .NET
-				catch(Exception)
-				{
-					try { lviFocused.Focused = true; } // Mono
-					catch(Exception) { Debug.Assert(false); }
-				}
-			}
+				UIUtil.SetFocusedItem(m_lvEntries, lviFocused, false);
 
 			View view = m_lvEntries.View;
 			if(m_bSimpleTanView)
@@ -2172,7 +2165,8 @@ namespace KeePass.Forms
 			}
 			catch(Exception ex)
 			{
-				MessageService.ShowLoadWarning(ioc.GetDisplayName(), ex);
+				MessageService.ShowLoadWarning(ioc.GetDisplayName(), ex,
+					(Program.CommandLineArgs[AppDefs.CommandLineOptions.Debug] != null));
 				pwDb = null;
 			}
 
@@ -3166,20 +3160,26 @@ namespace KeePass.Forms
 			}
 		}
 
-		private void CloseDocument(PwDocument ds, bool bLocking, bool bExiting)
+		private void CloseDocument(bool bLocking, bool bExiting)
 		{
-			if(ds == null) ds = m_docMgr.ActiveDocument;
-
+			PwDocument ds = m_docMgr.ActiveDocument;
 			PwDatabase pd = ds.Database;
-			IOConnectionInfo ioClosing = pd.IOConnectionInfo.CloneDeep();
+
+			Program.TriggerSystem.RaiseEvent(EcasEventIDs.ClosingDatabaseFilePre,
+				pd.IOConnectionInfo.Path);
+			if(this.FileClosingPre != null)
+			{
+				FileClosingEventArgs fcea = new FileClosingEventArgs(pd);
+				this.FileClosingPre(null, fcea);
+				if(fcea.Cancel) return;
+			}
 
 			if(pd.Modified) // Implies pd.IsOpen
 			{
+				bool bInvokeSave = false;
+
 				if(Program.Config.Application.FileClosing.AutoSave)
-				{
-					OnFileSave(null, EventArgs.Empty);
-					if(pd.Modified) return;
-				}
+					bInvokeSave = true;
 				else
 				{
 					FileSaveOrigin fso = FileSaveOrigin.Closing;
@@ -3190,15 +3190,28 @@ namespace KeePass.Forms
 						pd.IOConnectionInfo.GetDisplayName(), fso, this.Handle);
 
 					if(dr == DialogResult.Cancel) return;
-					else if(dr == DialogResult.Yes)
-					{
-						OnFileSave(null, EventArgs.Empty);
-						if(pd.Modified) return;
-					}
+					else if(dr == DialogResult.Yes) bInvokeSave = true;
 					else if(dr == DialogResult.No) { } // Changes are lost
 				}
+
+				if(bInvokeSave)
+				{
+					OnFileSave(null, EventArgs.Empty);
+					if(pd.Modified) return;
+				}
 			}
 
+			Program.TriggerSystem.RaiseEvent(EcasEventIDs.ClosingDatabaseFilePost,
+				pd.IOConnectionInfo.Path);
+			if(this.FileClosingPost != null)
+			{
+				FileClosingEventArgs fcea = new FileClosingEventArgs(pd);
+				this.FileClosingPost(null, fcea);
+				if(fcea.Cancel) return;
+			}
+
+			IOConnectionInfo ioClosing = pd.IOConnectionInfo.CloneDeep();
+
 			pd.Close();
 			if(!bLocking) m_docMgr.CloseDatabase(pd);
 
@@ -3209,14 +3222,15 @@ namespace KeePass.Forms
 			{
 				m_docMgr.ActiveDatabase.UINeedsIconUpdate = true;
 				UpdateUI(true, null, true, null, true, null, false);
+				ResetDefaultFocus(null);
 			}
 
 			// NativeMethods.ClearIconicBitmaps(this.Handle);
 
-			if(FileClosed != null)
+			if(this.FileClosed != null)
 			{
 				FileClosedEventArgs fcea = new FileClosedEventArgs(ioClosing);
-				FileClosed(null, fcea);
+				this.FileClosed(null, fcea);
 			}
 		}
 
@@ -3241,15 +3255,13 @@ namespace KeePass.Forms
 			foreach(PwDocument ds in m_docMgr.Documents)
 			{
 				PwDatabase pd = ds.Database;
-
 				if(!pd.IsOpen) continue; // Nothing to lock
 
 				IOConnectionInfo ioIoc = pd.IOConnectionInfo;
 				Debug.Assert(ioIoc != null);
 
 				m_docMgr.ActiveDocument = ds;
-
-				CloseDocument(null, true, false);
+				CloseDocument(true, false);
 				if(pd.IsOpen) return;
 
 				ds.LockedIoc = ioIoc;
@@ -3296,7 +3308,7 @@ namespace KeePass.Forms
 					if(ds.Database.IsOpen)
 					{
 						m_docMgr.ActiveDocument = ds;
-						CloseDocument(null, false, bExiting);
+						CloseDocument(false, bExiting);
 
 						if(ds.Database.IsOpen)
 						{
@@ -3524,10 +3536,7 @@ namespace KeePass.Forms
 		{
 			if((m_lvEntries.Items.Count > 0) &&
 				(m_lvEntries.SelectedIndices.Count == 0))
-			{
-				m_lvEntries.Items[0].Selected = true;
-				m_lvEntries.Items[0].Focused = true;
-			}
+				UIUtil.SetFocusedItem(m_lvEntries, m_lvEntries.Items[0], true);
 		}
 
 		private void SelectEntries(PwObjectList<PwEntry> lEntries,
@@ -3550,7 +3559,8 @@ namespace KeePass.Forms
 
 						if(bFirst && bFocusFirst)
 						{
-							m_lvEntries.Items[i].Focused = true;
+							UIUtil.SetFocusedItem(m_lvEntries,
+								m_lvEntries.Items[i], false);
 							bFirst = false;
 						}
 
@@ -4134,8 +4144,8 @@ namespace KeePass.Forms
 
 				aceMru.Items.Clear();
 				// Count <= max is not guaranteed, therefore take minimum of both
-				for(uint uMru = 0; uMru < Math.Min(m_mruList.MaxItemCount,
-					m_mruList.ItemCount); ++uMru)
+				uint uMax = Math.Min(m_mruList.MaxItemCount, m_mruList.ItemCount);
+				for(uint uMru = 0; uMru < uMax; ++uMru)
 				{
 					KeyValuePair<string, object> kvpMru = m_mruList.GetItem(uMru);
 					IOConnectionInfo ioMru = (kvpMru.Value as IOConnectionInfo);
@@ -4147,10 +4157,10 @@ namespace KeePass.Forms
 			{
 				m_mruList.MaxItemCount = aceMru.MaxItemCount;
 
-				for(int iMru = 0; iMru < Math.Min((int)m_mruList.MaxItemCount,
-					aceMru.Items.Count); ++iMru)
+				int nMax = Math.Min((int)m_mruList.MaxItemCount, aceMru.Items.Count);
+				for(int iMru = 0; iMru < nMax; ++iMru)
 				{
-					IOConnectionInfo ioMru = aceMru.Items[iMru];
+					IOConnectionInfo ioMru = aceMru.Items[nMax - iMru - 1];
 					m_mruList.AddItem(ioMru.GetDisplayName(), ioMru.CloneDeep(), false);
 				}
 
@@ -4737,5 +4747,15 @@ namespace KeePass.Forms
 			ctx.ForcePlainTextPasswords = false;
 			return ctx;
 		}
+
+		private void EnsureAlwaysOnTopOpt()
+		{
+			bool bWish = Program.Config.MainWindow.AlwaysOnTop;
+			if(KeePassLib.Native.NativeLib.IsUnix()) { this.TopMost = bWish; return; }
+
+			// Workaround for issue reported in KPB 3475997
+			this.TopMost = false;
+			if(bWish) this.TopMost = true;
+		}
 	}
 }
diff --git a/KeePass/Forms/OptionsForm.cs b/KeePass/Forms/OptionsForm.cs
index 588dfd0..a061396 100644
--- a/KeePass/Forms/OptionsForm.cs
+++ b/KeePass/Forms/OptionsForm.cs
@@ -135,7 +135,12 @@ namespace KeePass.Forms
 
 			CreateDialogBanner(BannerStyle.Default); // Default forces generation
 			m_cmbBannerStyle.SelectedIndex = (int)BannerStyle.Default;
-			if(BannerFactory.CustomGenerator != null) m_cmbBannerStyle.Enabled = false;
+			if((BannerFactory.CustomGenerator != null) ||
+				AppConfigEx.IsOptionEnforced(Program.Config.UI, "BannerStyle"))
+			{
+				m_lblBannerStyle.Enabled = false;
+				m_cmbBannerStyle.Enabled = false;
+			}
 
 			int nWidth = m_lvPolicy.ClientRectangle.Width - UIUtil.GetVScrollBarWidth() - 1;
 			m_lvPolicy.Columns.Add(KPRes.Feature, (nWidth * 10) / 29);
@@ -167,6 +172,13 @@ namespace KeePass.Forms
 				m_cbAutoRun.Enabled = false;
 			}
 
+			UIUtil.SetExplorerTheme(m_lvSecurityOptions, false);
+			UIUtil.SetExplorerTheme(m_lvPolicy, false);
+			UIUtil.SetExplorerTheme(m_lvGuiOptions, false);
+			UIUtil.SetExplorerTheme(m_lvAdvanced, false);
+
+			AppConfigEx.ClearXmlPathCache();
+
 			LoadOptions();
 
 			// if(Program.Config.Meta.IsEnforcedConfiguration)
@@ -190,15 +202,21 @@ namespace KeePass.Forms
 
 		private void LoadSecurityOptions()
 		{
-			uint uLockTime = Program.Config.Security.WorkspaceLocking.LockAfterTime;
+			AceWorkspaceLocking aceWL = Program.Config.Security.WorkspaceLocking;
+
+			uint uLockTime = aceWL.LockAfterTime;
 			bool bLockTime = (uLockTime > 0);
 			m_numLockAfterTime.Value = (bLockTime ? uLockTime : 300);
 			m_cbLockAfterTime.Checked = bLockTime;
+			if(AppConfigEx.IsOptionEnforced(aceWL, "LockAfterTime"))
+				m_cbLockAfterTime.Enabled = false;
 
-			uLockTime = Program.Config.Security.WorkspaceLocking.LockAfterGlobalTime;
+			uLockTime = aceWL.LockAfterGlobalTime;
 			bLockTime = (uLockTime > 0);
 			m_numLockAfterGlobalTime.Value = (bLockTime ? uLockTime : 240);
 			m_cbLockAfterGlobalTime.Checked = bLockTime;
+			if(AppConfigEx.IsOptionEnforced(aceWL, "LockAfterGlobalTime"))
+				m_cbLockAfterGlobalTime.Enabled = false;
 
 			int nDefaultExpireDays = Program.Config.Defaults.NewEntryExpiresInDays;
 			if(nDefaultExpireDays < 0)
@@ -209,6 +227,8 @@ namespace KeePass.Forms
 				try { m_numDefaultExpireDays.Value = nDefaultExpireDays; }
 				catch(Exception) { Debug.Assert(false); }
 			}
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Defaults, "NewEntryExpiresInDays"))
+				m_cbDefaultExpireDays.Enabled = false;
 
 			int nClipClear = Program.Config.Security.ClipboardClearAfterSeconds;
 			if(nClipClear >= 0)
@@ -217,6 +237,8 @@ namespace KeePass.Forms
 				m_numClipClearTime.Value = nClipClear;
 			}
 			else m_cbClipClearTime.Checked = false;
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Security, "ClipboardClearAfterSeconds"))
+				m_cbClipClearTime.Enabled = false;
 
 			m_lvSecurityOptions.Columns.Add(string.Empty, 200); // Resize below
 
@@ -224,20 +246,20 @@ namespace KeePass.Forms
 			m_lvSecurityOptions.Groups.Add(lvg);
 			Debug.Assert(lvg.ListView == m_lvSecurityOptions);
 
-			m_cdxSecurityOptions = new CheckedLVItemDXList(m_lvSecurityOptions);
-
-			m_cdxSecurityOptions.CreateItem(Program.Config.Security.WorkspaceLocking,
-				"LockOnWindowMinimize", lvg, KPRes.LockOnMinimize);
-			m_cdxSecurityOptions.CreateItem(Program.Config.Security.WorkspaceLocking,
-				"LockOnSessionSwitch", lvg, KPRes.LockOnSessionSwitch);
-			m_cdxSecurityOptions.CreateItem(Program.Config.Security.WorkspaceLocking,
-				"LockOnSuspend", lvg, KPRes.LockOnSuspend);
-			m_cdxSecurityOptions.CreateItem(Program.Config.Security.WorkspaceLocking,
-				"LockOnRemoteControlChange", lvg, KPRes.LockOnRemoteControlChange);
-			m_cdxSecurityOptions.CreateItem(Program.Config.Security.WorkspaceLocking,
-				"ExitInsteadOfLockingAfterTime", lvg, KPRes.ExitInsteadOfLockingAfterTime);
-			m_cdxSecurityOptions.CreateItem(Program.Config.Security.WorkspaceLocking,
-				"AlwaysExitInsteadOfLocking", lvg, KPRes.ExitInsteadOfLockingAlways);
+			m_cdxSecurityOptions = new CheckedLVItemDXList(m_lvSecurityOptions, true);
+
+			m_cdxSecurityOptions.CreateItem(aceWL, "LockOnWindowMinimize",
+				lvg, KPRes.LockOnMinimize);
+			m_cdxSecurityOptions.CreateItem(aceWL, "LockOnSessionSwitch",
+				lvg, KPRes.LockOnSessionSwitch);
+			m_cdxSecurityOptions.CreateItem(aceWL, "LockOnSuspend",
+				lvg, KPRes.LockOnSuspend);
+			m_cdxSecurityOptions.CreateItem(aceWL, "LockOnRemoteControlChange",
+				lvg, KPRes.LockOnRemoteControlChange);
+			m_cdxSecurityOptions.CreateItem(aceWL, "ExitInsteadOfLockingAfterTime",
+				lvg, KPRes.ExitInsteadOfLockingAfterTime);
+			m_cdxSecurityOptions.CreateItem(aceWL, "AlwaysExitInsteadOfLocking",
+				lvg, KPRes.ExitInsteadOfLockingAlways);
 			m_cdxSecurityOptions.CreateItem(Program.Config.Security, "ClipboardClearOnExit",
 				lvg, KPRes.ClipboardClearOnExit);
 			m_cdxSecurityOptions.CreateItem(Program.Config.Security,
@@ -268,7 +290,7 @@ namespace KeePass.Forms
 
 		private void LoadPolicyOptions()
 		{
-			m_cdxPolicy = new CheckedLVItemDXList(m_lvPolicy);
+			m_cdxPolicy = new CheckedLVItemDXList(m_lvPolicy, true);
 
 			LoadPolicyOption("Plugins", KPRes.Plugins, KPRes.PolicyPluginsDesc);
 			LoadPolicyOption("Export", KPRes.Export, KPRes.PolicyExportDesc);
@@ -305,7 +327,7 @@ namespace KeePass.Forms
 			m_lvGuiOptions.Groups.Add(lvg);
 			Debug.Assert(lvg.ListView == m_lvGuiOptions);
 
-			m_cdxGuiOptions = new CheckedLVItemDXList(m_lvGuiOptions);
+			m_cdxGuiOptions = new CheckedLVItemDXList(m_lvGuiOptions, true);
 
 			m_cdxGuiOptions.CreateItem(Program.Config.MainWindow, "CloseButtonMinimizesWindow",
 				lvg, KPRes.CloseButtonMinimizes);
@@ -373,6 +395,8 @@ namespace KeePass.Forms
 
 			lvg = new ListViewGroup(KPRes.Advanced);
 			m_lvGuiOptions.Groups.Add(lvg);
+			m_cdxGuiOptions.CreateItem(Program.Config.UI, "RepeatPasswordOnlyWhenHidden",
+				lvg, KPRes.RepeatOnlyWhenHidden);
 			m_cdxGuiOptions.CreateItem(Program.Config.UI, "UseCustomToolStripRenderer",
 				lvg, KPRes.UseCustomToolStripRenderer);
 			m_cdxGuiOptions.CreateItem(Program.Config.UI, "ForceSystemFontUnix",
@@ -386,6 +410,16 @@ namespace KeePass.Forms
 
 			try { m_numMruCount.Value = Program.Config.Application.MostRecentlyUsed.MaxItemCount; }
 			catch(Exception) { Debug.Assert(false); m_numMruCount.Value = AceMru.DefaultMaxItemCount; }
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Application.MostRecentlyUsed, "MaxItemCount"))
+			{
+				m_lblMruCount.Enabled = false;
+				m_numMruCount.Enabled = false;
+			}
+
+			if(AppConfigEx.IsOptionEnforced(Program.Config.UI, "StandardFont"))
+				m_btnSelFont.Enabled = false;
+			if(AppConfigEx.IsOptionEnforced(Program.Config.UI, "PasswordFont"))
+				m_btnSelPwFont.Enabled = false;
 		}
 
 		private void LoadIntegrationOptions()
@@ -395,32 +429,46 @@ namespace KeePass.Forms
 			m_hkGlobalAutoType.HotKeyModifiers = (kAT & Keys.Modifiers);
 			m_hkGlobalAutoType.RenderHotKey();
 			m_kPrevATHKKey = (m_hkGlobalAutoType.HotKey | m_hkGlobalAutoType.HotKeyModifiers);
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "HotKeyGlobalAutoType"))
+				m_hkGlobalAutoType.Enabled = false;
 
 			Keys kATS = (Keys)Program.Config.Integration.HotKeySelectedAutoType;
 			m_hkSelectedAutoType.HotKey = (kATS & Keys.KeyCode);
 			m_hkSelectedAutoType.HotKeyModifiers = (kATS & Keys.Modifiers);
 			m_hkSelectedAutoType.RenderHotKey();
 			m_kPrevATSHKKey = (m_hkSelectedAutoType.HotKey | m_hkSelectedAutoType.HotKeyModifiers);
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "HotKeySelectedAutoType"))
+				m_hkSelectedAutoType.Enabled = false;
 
 			Keys kSW = (Keys)Program.Config.Integration.HotKeyShowWindow;
 			m_hkShowWindow.HotKey = (kSW & Keys.KeyCode);
 			m_hkShowWindow.HotKeyModifiers = (kSW & Keys.Modifiers);
 			m_hkShowWindow.RenderHotKey();
 			m_kPrevSWHKKey = (m_hkShowWindow.HotKey | m_hkShowWindow.HotKeyModifiers);
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "HotKeyShowWindow"))
+				m_hkShowWindow.Enabled = false;
 
 			m_cbAutoRun.Checked = ShellUtil.GetStartWithWindows(AppDefs.AutoRunName);
+
 			m_cbSingleClickTrayAction.Checked = Program.Config.UI.TrayIcon.SingleClickDefault;
+			if(AppConfigEx.IsOptionEnforced(Program.Config.UI.TrayIcon, "SingleClickDefault"))
+				m_cbSingleClickTrayAction.Enabled = false;
 
 			string strOverride = Program.Config.Integration.UrlOverride;
 			m_cbUrlOverride.Checked = (strOverride.Length > 0);
 			m_tbUrlOverride.Text = strOverride;
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "UrlOverride"))
+				m_cbUrlOverride.Enabled = false;
+
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "UrlSchemeOverrides"))
+				m_btnSchemeOverrides.Enabled = false;
 		}
 
 		private void LoadAdvancedOptions()
 		{
 			m_lvAdvanced.Columns.Add(string.Empty, 200); // Resize below
 
-			m_cdxAdvanced = new CheckedLVItemDXList(m_lvAdvanced);
+			m_cdxAdvanced = new CheckedLVItemDXList(m_lvAdvanced, true);
 
 			ListViewGroup lvg = new ListViewGroup(KPRes.StartAndExit);
 			m_lvAdvanced.Groups.Add(lvg);
@@ -450,6 +498,8 @@ namespace KeePass.Forms
 				lvg, KPRes.AutoTypeMatchByUrlInTitle);
 			m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeMatchByUrlHostInTitle",
 				lvg, KPRes.AutoTypeMatchByUrlHostInTitle);
+			m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeMatchByTagInTitle",
+				lvg, KPRes.AutoTypeMatchByTagInTitle);
 			m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypePrependInitSequenceForIE",
 				lvg, KPRes.AutoTypePrependInitSeqForIE);
 			m_cdxAdvanced.CreateItem(Program.Config.Integration, "AutoTypeReleaseAltWithKeyPress",
@@ -497,10 +547,18 @@ namespace KeePass.Forms
 			m_cdxAdvanced.UpdateData(false);
 			m_lvAdvanced.Columns[0].Width = m_lvAdvanced.ClientRectangle.Width -
 				UIUtil.GetVScrollBarWidth() - 1;
+
+			if(AppConfigEx.IsOptionEnforced(Program.Config.Integration, "ProxyType") ||
+				AppConfigEx.IsOptionEnforced(Program.Config.Integration, "ProxyAddress"))
+				m_btnProxy.Enabled = false;
 		}
 
 		private bool ValidateOptions()
 		{
+			m_hkGlobalAutoType.ResetIfModifierOnly();
+			m_hkSelectedAutoType.ResetIfModifierOnly();
+			m_hkShowWindow.ResetIfModifierOnly();
+
 			bool bAltMod = false;
 			bAltMod |= ((m_hkGlobalAutoType.HotKeyModifiers == Keys.Alt) ||
 				(m_hkGlobalAutoType.HotKeyModifiers == (Keys.Alt | Keys.Shift)));
@@ -586,6 +644,8 @@ namespace KeePass.Forms
 			m_cdxPolicy.Release();
 			m_cdxGuiOptions.Release();
 			m_cdxAdvanced.Release();
+
+			AppConfigEx.ClearXmlPathCache();
 		}
 
 		private static void ChangeHotKey(ref Keys kPrevHK, HotKeyControlEx hkControl,
@@ -614,7 +674,8 @@ namespace KeePass.Forms
 			if(m_bBlockUIUpdate) return;
 			m_bBlockUIUpdate = true;
 
-			m_numLockAfterTime.Enabled = m_cbLockAfterTime.Checked;
+			m_numLockAfterTime.Enabled = (m_cbLockAfterTime.Checked &&
+				m_cbLockAfterTime.Enabled);
 
 			if(WinUtil.IsWindows9x || NativeLib.IsUnix())
 			{
@@ -622,12 +683,17 @@ namespace KeePass.Forms
 				m_cbLockAfterGlobalTime.Enabled = false;
 				m_numLockAfterGlobalTime.Enabled = false;
 			}
-			else m_numLockAfterGlobalTime.Enabled = m_cbLockAfterGlobalTime.Checked;
-			
-			m_numDefaultExpireDays.Enabled = m_cbDefaultExpireDays.Checked;
-			m_numClipClearTime.Enabled = m_cbClipClearTime.Checked;
+			else
+				m_numLockAfterGlobalTime.Enabled = (m_cbLockAfterGlobalTime.Checked &&
+					m_cbLockAfterGlobalTime.Enabled);
+
+			m_numDefaultExpireDays.Enabled = (m_cbDefaultExpireDays.Checked &&
+				m_cbDefaultExpireDays.Enabled);
+			m_numClipClearTime.Enabled = (m_cbClipClearTime.Checked &&
+				m_cbClipClearTime.Enabled);
 
-			m_tbUrlOverride.Enabled = m_cbUrlOverride.Checked;
+			m_tbUrlOverride.Enabled = (m_cbUrlOverride.Checked &&
+				m_cbUrlOverride.Enabled);
 
 			m_bBlockUIUpdate = false;
 		}
diff --git a/KeePass/Forms/PrintForm.Designer.cs b/KeePass/Forms/PrintForm.Designer.cs
index b528a18..e9a0ab2 100644
--- a/KeePass/Forms/PrintForm.Designer.cs
+++ b/KeePass/Forms/PrintForm.Designer.cs
@@ -364,9 +364,9 @@
 			this.m_cbExpire.AutoSize = true;
 			this.m_cbExpire.Location = new System.Drawing.Point(360, 42);
 			this.m_cbExpire.Name = "m_cbExpire";
-			this.m_cbExpire.Size = new System.Drawing.Size(94, 17);
+			this.m_cbExpire.Size = new System.Drawing.Size(76, 17);
 			this.m_cbExpire.TabIndex = 8;
-			this.m_cbExpire.Text = "Expiration time";
+			this.m_cbExpire.Text = "Expiry time";
 			this.m_cbExpire.UseVisualStyleBackColor = true;
 			// 
 			// m_cbNotes
diff --git a/KeePass/Forms/PrintForm.cs b/KeePass/Forms/PrintForm.cs
index c4a8ad4..02d4808 100644
--- a/KeePass/Forms/PrintForm.cs
+++ b/KeePass/Forms/PrintForm.cs
@@ -214,14 +214,37 @@ namespace KeePass.Forms
 
 			sb.AppendLine("body, p, div, h1, h2, h3, h4, h5, h6, ol, ul, li, td, th, dd, dt, a {");
 			sb.AppendLine("\tfont-family: Tahoma, MS Sans Serif, Sans Serif, Verdana, sans-serif;");
+			sb.AppendLine("\tfont-size: 10pt;");
 			sb.AppendLine("}");
 			sb.AppendLine("span.fserif {");
 			sb.AppendLine("\tfont-family: Times New Roman, serif;");
 			sb.AppendLine("}");
+			sb.AppendLine("h1 { font-size: 2em; }");
+			sb.AppendLine("h2 { font-size: 1.5em; }");
+			sb.AppendLine("h3 { font-size: 1.2em; }");
+			sb.AppendLine("h4 { font-size: 1em; }");
+			sb.AppendLine("h5 { font-size: 0.89em; }");
+			sb.AppendLine("h6 { font-size: 0.6em; }");
 			sb.AppendLine("td {");
 			sb.AppendLine("\ttext-align: left;");
 			sb.AppendLine("\tvertical-align: top;");
 			sb.AppendLine("}");
+			sb.AppendLine("a:visited {");
+			sb.AppendLine("\ttext-decoration: none;");
+			sb.AppendLine("\tcolor: #0000DD;");
+			sb.AppendLine("}");
+			sb.AppendLine("a:active {");
+			sb.AppendLine("\ttext-decoration: none;");
+			sb.AppendLine("\tcolor: #6699FF;");
+			sb.AppendLine("}");
+			sb.AppendLine("a:link {");
+			sb.AppendLine("\ttext-decoration: none;");
+			sb.AppendLine("\tcolor: #0000DD;");
+			sb.AppendLine("}");
+			sb.AppendLine("a:hover {");
+			sb.AppendLine("\ttext-decoration: underline;");
+			sb.AppendLine("\tcolor: #6699FF;");
+			sb.AppendLine("}");
 
 			sb.AppendLine("--></style>");
 
@@ -250,13 +273,13 @@ namespace KeePass.Forms
 
 			if(m_rbSerif.Checked)
 			{
-				strFontInit = "<span class=\"fserif\"><small>";
-				strFontExit = "</small></span>";
+				strFontInit = "<span class=\"fserif\">";
+				strFontExit = "</span>";
 			}
 			else if(m_rbSansSerif.Checked)
 			{
-				strFontInit = "<small>";
-				strFontExit = "</small>";
+				strFontInit = string.Empty;
+				strFontExit = string.Empty;
 			}
 			else if(m_rbMonospace.Checked)
 			{
@@ -275,12 +298,11 @@ namespace KeePass.Forms
 				string strCellPre = "<td>" + strFontInit;
 				string strCellPost = strFontExit + "</td>";
 
-				sb.AppendLine(strTableInit);
-
-				string strHTdInit = "<td><b><small>";
-				string strHTdExit = "</small></b></td>";
+				string strHTdInit = "<td><b>";
+				string strHTdExit = "</b></td>";
 
 				StringBuilder sbH = new StringBuilder();
+				sbH.AppendLine();
 				sbH.Append("<tr>");
 				if(bGroup) sbH.AppendLine(strHTdInit + StrUtil.StringToHtml(KPRes.Group) + strHTdExit);
 				if(bTitle) sbH.AppendLine(strHTdInit + StrUtil.StringToHtml(KPRes.Title) + strHTdExit);
@@ -292,17 +314,16 @@ namespace KeePass.Forms
 				if(bLastAcc) sbH.AppendLine(strHTdInit + StrUtil.StringToHtml(KPRes.LastAccessTime) + strHTdExit);
 				if(bLastMod) sbH.AppendLine(strHTdInit + StrUtil.StringToHtml(KPRes.LastModificationTime) + strHTdExit);
 				if(bExpire) sbH.AppendLine(strHTdInit + StrUtil.StringToHtml(KPRes.ExpiryTime) + strHTdExit);
-				sbH.AppendLine("</tr>");
+				sbH.Append("</tr>"); // No terminating \r\n
 
-				string strH = sbH.ToString();
-				sb.Append(strH);
-				strTableInit += strH;
+				strTableInit += sbH.ToString();
+				sb.AppendLine(strTableInit);
 
 				eh = delegate(PwEntry pe)
 				{
 					sb.AppendLine("<tr>");
 
-					WriteTabularIf(bGroup, sb, pe.ParentGroup.Name, strCellPre, strCellPost);
+					WriteTabularIf(bGroup, sb, StrUtil.StringToHtml(pe.ParentGroup.Name), strCellPre, strCellPost);
 					WriteTabularIf(bTitle, sb, pe, PwDefs.TitleField, strCellPre, strCellPost);
 					WriteTabularIf(bUserName, sb, pe, PwDefs.UserNameField, strCellPre, strCellPost);
 
@@ -321,13 +342,20 @@ namespace KeePass.Forms
 						else sb.AppendLine(strCellPost);
 					}
 
-					WriteTabularIf(bURL, sb, pe, PwDefs.UrlField, strCellPre, strCellPost);
+					// WriteTabularIf(bURL, sb, pe, PwDefs.UrlField, strCellPre, strCellPost);
+					WriteTabularIf(bURL, sb, MakeUrlLink(pe.Strings.ReadSafe(PwDefs.UrlField),
+						strFontInit, strFontExit), strCellPre, strCellPost);
+
 					WriteTabularIf(bNotes, sb, pe, PwDefs.NotesField, strCellPre, strCellPost);
 
-					WriteTabularIf(bCreation, sb, pe.CreationTime.ToString(), strCellPre, strCellPost);
-					WriteTabularIf(bLastAcc, sb, pe.LastAccessTime.ToString(), strCellPre, strCellPost);
-					WriteTabularIf(bLastMod, sb, pe.LastModificationTime.ToString(), strCellPre, strCellPost);
-					WriteTabularIf(bExpire, sb, pe.ExpiryTime.ToString(), strCellPre, strCellPost);
+					WriteTabularIf(bCreation, sb, TimeUtil.ToDisplayString(
+						pe.CreationTime), strCellPre, strCellPost);
+					WriteTabularIf(bLastAcc, sb, TimeUtil.ToDisplayString(
+						pe.LastAccessTime), strCellPre, strCellPost);
+					WriteTabularIf(bLastMod, sb, TimeUtil.ToDisplayString(
+						pe.LastModificationTime), strCellPre, strCellPost);
+					WriteTabularIf(bExpire, sb, (pe.Expires ? TimeUtil.ToDisplayString(
+						pe.ExpiryTime) : KPRes.NeverExpires), strCellPre, strCellPost);
 
 					sb.AppendLine("</tr>");
 					return true;
@@ -337,6 +365,9 @@ namespace KeePass.Forms
 			{
 				sb.AppendLine(strTableInit);
 
+				if(pgDataSource.Entries.UCount == 0)
+					sb.AppendLine(@"<tr><td> </td></tr>");
+
 				eh = delegate(PwEntry pe)
 				{
 					if(bGroup) WriteDetailsLine(sb, KPRes.Group, pe.ParentGroup.Name, bSmallMono, bMonoPasswords, strFontInit, strFontExit);
@@ -345,10 +376,14 @@ namespace KeePass.Forms
 					if(bPassword) WriteDetailsLine(sb, KPRes.Password, pe.Strings.ReadSafe(PwDefs.PasswordField), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
 					if(bURL) WriteDetailsLine(sb, KPRes.Url, pe.Strings.ReadSafe(PwDefs.UrlField), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
 					if(bNotes) WriteDetailsLine(sb, KPRes.Notes, pe.Strings.ReadSafe(PwDefs.NotesField), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
-					if(bCreation) WriteDetailsLine(sb, KPRes.CreationTime, pe.CreationTime.ToString(), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
-					if(bLastAcc) WriteDetailsLine(sb, KPRes.LastAccessTime, pe.LastAccessTime.ToString(), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
-					if(bLastMod) WriteDetailsLine(sb, KPRes.LastModificationTime, pe.LastModificationTime.ToString(), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
-					if(bExpire) WriteDetailsLine(sb, KPRes.ExpiryTime, pe.ExpiryTime.ToString(), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
+					if(bCreation) WriteDetailsLine(sb, KPRes.CreationTime, TimeUtil.ToDisplayString(
+						pe.CreationTime), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
+					if(bLastAcc) WriteDetailsLine(sb, KPRes.LastAccessTime, TimeUtil.ToDisplayString(
+						pe.LastAccessTime), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
+					if(bLastMod) WriteDetailsLine(sb, KPRes.LastModificationTime, TimeUtil.ToDisplayString(
+						pe.LastModificationTime), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
+					if(bExpire) WriteDetailsLine(sb, KPRes.ExpiryTime, (pe.Expires ? TimeUtil.ToDisplayString(
+						pe.ExpiryTime) : KPRes.NeverExpires), bSmallMono, bMonoPasswords, strFontInit, strFontExit);
 
 					if(bAutoType)
 					{
@@ -395,6 +430,8 @@ namespace KeePass.Forms
 
 			try { UIUtil.SetWebBrowserDocument(m_wbMain, sb.ToString()); }
 			catch(Exception) { } // Throws in Mono 2.0+
+			try { m_wbMain.AllowNavigation = false; }
+			catch(Exception) { Debug.Assert(false); }
 
 			m_bBlockPreviewRefresh = false;
 		}
@@ -420,7 +457,7 @@ namespace KeePass.Forms
 
 			sb.Append(strCellPre);
 
-			if(strValue.Length > 0) sb.Append(strValue);
+			if(strValue.Length > 0) sb.Append(strValue); // Don't HTML-encode
 			else sb.Append(@" ");
 
 			sb.AppendLine(strCellPost);
@@ -430,9 +467,9 @@ namespace KeePass.Forms
 			KeyValuePair<string, ProtectedString> kvp, bool bSmallMono,
 			bool bMonoPasswords, string strFontInit, string strFontExit)
 		{
-			sb.Append("<tr><td><i><small>");
+			sb.Append("<tr><td><i>");
 			sb.Append(StrUtil.StringToHtml(kvp.Key));
-			sb.AppendLine(":</small></i></td>");
+			sb.AppendLine(":</i></td>");
 
 			sb.Append("<td>");
 
@@ -440,9 +477,14 @@ namespace KeePass.Forms
 				sb.Append(bSmallMono ? "<code><small>" : "<code>");
 			else sb.Append(strFontInit);
 
-			string strInner = StrUtil.StringToHtml(kvp.Value.ReadString());
-			if(strInner.Length > 0) sb.Append(strInner);
-			else sb.Append(" ");
+			if((kvp.Key == PwDefs.UrlField) && !kvp.Value.IsEmpty)
+				sb.Append(MakeUrlLink(kvp.Value.ReadString(), strFontInit, strFontExit));
+			else
+			{
+				string strInner = StrUtil.StringToHtml(kvp.Value.ReadString());
+				if(strInner.Length > 0) sb.Append(strInner);
+				else sb.Append(" ");
+			}
 
 			if(kvp.Key == PwDefs.PasswordField)
 				sb.Append(bSmallMono ? "</small></code>" : "</code>");
@@ -461,6 +503,17 @@ namespace KeePass.Forms
 			WriteDetailsLine(sb, kvp, bSmallMono, bMonoPasswords, strFontInit, strFontExit);
 		}
 
+		private static string MakeUrlLink(string strRawUrl, string strFontInit,
+			string strFontExit)
+		{
+			if(string.IsNullOrEmpty(strRawUrl)) return string.Empty;
+
+			string strUrl = StrUtil.StringToHtml(strRawUrl);
+			strUrl = "<a href=\"" + strUrl + "\">" + strFontInit + strUrl +
+				strFontExit + "</a>";
+			return strUrl;
+		}
+
 		private void SortGroupEntriesRecursive(PwGroup pg, string strFieldName)
 		{
 			PwEntryComparer cmp = new PwEntryComparer(strFieldName, true, true);
diff --git a/KeePass/Forms/PrintForm.resx b/KeePass/Forms/PrintForm.resx
index 5c542b5..35aa4d5 100644
--- a/KeePass/Forms/PrintForm.resx
+++ b/KeePass/Forms/PrintForm.resx
@@ -125,38 +125,38 @@
         AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
         LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
         ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAAS
-        CAAAAk1TRnQBSQFMAgEBAgEAAQQBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
-        AwABEAMAAQEBAAEgBgABEEIAAxIBGQNTAaoDVAGrAx0BKiwAAyMBMwFkAkYB7AFZAlYBvgMSARmwAAMU
-        ARsBYAJXAdYBGgGAAd8B/wEmAW0BsAH/A1QBqygAAyYBOQFiAkgB6QHyAucB/wHaAtAB/wFZAlcBwgMS
-        ARmoAAMSARkBXgJZAdUBEwF0Ae0B/wFHAdsC/wFOAbQB6gH/A1MBqiQAAycBOwFkAk0B5wHqAt8B/wHs
-        AuIB/wHmAtkB/wHcAtUB/wFbAlkBxJQAAwMBBAMBAQIIAAMQARYBXgJWAdgBFAF1AfEB/wFGAdUC/wFX
-        AccB8gH/AV0CVgHXAxUBHSAAAyQBNgFkAkYB7AHpAtwB/wH1Au0B/wHhAtgB/wHkAtkB/wH8AvcB/wFh
-        AkIB7owAAzQEVAGvAVwCWAHRAV4CWQHOAVICUQGhAygBPANWAbYBPgGOAfQB/wFEAdQC/wFWAcgB8wH/
-        AV4CWQHVAxQBGyAAAyQBNQFkAkYB7AHrAuQB/wH1Au0B/wHqAuIB/wH7AvgB/wH2AvQB/wFkAkYB7AMm
-        ATiEAAMMARADVQGyAW4BRgFHAfoBqAGlAaAB/wG2AbABqQH/AaMBnwGYAf8BgAF2AXQB/wFfAjcB8wFj
-        AUMBWAH8AcsB9AH1Af8BaQHHAfgB/wFeAlYB2AMVAR0gAAMkATYBXwJKAegB6wLmBf8B+AL2Af8B+gL2
-        Af8B8gLvAf8BZAJNAecDJwE7hAADBAEGAVoCVwHFAbcBswGvAf8B9QHpAdgC/wHzAd8C/wH1AeIC/wH0
-        AeAB/wHnAd4BywH/AagBoAGXAf8BpgGkAZgB/wFyAVEBXwH8AVYCVQG0Aw8BFBgAAxoBJQMqAUEDOAFc
-        AWUCTwHlAe4C6A3/AfEC7gH/AWICSAHpAyYBOYgAA0gBhgG1AbEBrgL/AfMB2wL/AfIB2QL/AfAB2AL/
-        Ae8B2AL/AfAB2QL/AfcB4AH/AfoB7AHUAf8BpAGcAZAB/wFSAjEB9AMlATcUAAMWAR8DVAGrAWQCTQHn
-        AWMCPwHwAWoCQQH5AeAC1g3/Ae8C6wH/AWQCRgHsAyMBM4wAAV8CVAHgAfQB5QHTAv8B7QHOAv8B6AHM
-        Av8B5QHHAv8B5QHHAv8B5gHIAv8B5wHNAv8B9QHbAf8B4AHQAbcB/wFjAWEBXgH/A1EBoBAAAxUBHQFa
-        AlcB0wHHArgB/wHxAuUB/wH5AvEB/wH7AvQB/wHsAuUB/wHsAuUF/wHyAu0B/wFiAkoB6wMlATeQAAGA
+        CAAAAk1TRnQBSQFMAgEBAgEAAQwBAAEMAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
+        AwABEAMAAQEBAAEgBgABEEIAAxIBGQNTAaoDVAGrAx0BKiwAAyMBMwFkAkoB7AFZAlYBvgMSARmwAAMU
+        ARsBYAJYAdYBGQGAAd8B/wElAWwBsAH/A1QBqygAAyYBOQFiAkwB6QHyAucB/wHaAtAB/wFZAlcBwgMS
+        ARmoAAMSARkBXgJaAdUBEgFzAe0B/wFGAdsC/wFNAbQB6gH/A1MBqiQAAycBOwFkAlEB5wHqAt8B/wHs
+        AuIB/wHmAtkB/wHcAtUB/wFbAlkBxJQAAwMBBAMBAQIIAAMQARYBXgJYAdgBEwF0AfEB/wFFAdUC/wFW
+        AccB8gH/AV0CWQHXAxUBHSAAAyQBNgFkAkoB7AHpAtwB/wH1Au0B/wHhAtgB/wHkAtkB/wH8AvcB/wFh
+        AkYB7owAAzQEVAGvAVwCWAHRAV4CWgHOAVICUQGhAygBPANWAbYBPQGOAfQB/wFDAdQC/wFVAcgB8wH/
+        AV4CWgHVAxQBGyAAAyQBNQFkAkoB7AHrAuQB/wH1Au0B/wHqAuIB/wH7AvgB/wH2AvQB/wFkAkoB7AMm
+        ATiEAAMMARADVQGyAW0BRwFIAfoBqAGlAaAB/wG2AbABqQH/AaMBnwGYAf8BgAF1AXMB/wFfAjkB8wFi
+        AUEBVwH8AcsB9AH1Af8BaAHHAfgB/wFeAlgB2AMVAR0gAAMkATYBXwJNAegB6wLmBf8B+AL2Af8B+gL2
+        Af8B8gLvAf8BZAJRAecDJwE7hAADBAEGAVoCVwHFAbcBswGvAf8B9QHpAdgC/wHzAd8C/wH1AeIC/wH0
+        AeAB/wHnAd4BywH/AagBoAGXAf8BpgGkAZgB/wFxAU8BXgH8AVYCVQG0Aw8BFBgAAxoBJQMqAUEDOAFc
+        AWUCUwHlAe4C6A3/AfEC7gH/AWICTAHpAyYBOYgAA0gBhgG1AbEBrgL/AfMB2wL/AfIB2QL/AfAB2AL/
+        Ae8B2AL/AfAB2QL/AfcB4AH/AfoB7AHUAf8BpAGcAZAB/wFSAjUB9AMlATcUAAMWAR8DVAGrAWQCUQHn
+        AWECQQHwAWoCQQH5AeAC1g3/Ae8C6wH/AWQCSgHsAyMBM4wAAV8CVwHgAfQB5QHTAv8B7QHOAv8B6AHM
+        Av8B5QHHAv8B5QHHAv8B5gHIAv8B5wHNAv8B9QHbAf8B4AHQAbcB/wFiAWABXQH/A1EBoBAAAxUBHQFa
+        AlkB0wHHArgB/wHxAuUB/wH5AvEB/wH7AvQB/wHsAuUB/wHsAuUF/wHyAu0B/wFhAk0B6wMlATeQAAF/
         AkcB+QH/AegBywL/Ad8BuwL/AdoBsgL/AdYBqgL/AdUBqQL/AdcBrAL/AdsBtAL/AegBxwH/Af0B5QHF
         Af8BigKBAf8BXAJZAc8DAwEEDAADUAGaAbwCrwH/AekC2gH/AekC3QH/AfQC6gH/AfMC7gH/AfYC9AH/
-        Ae4C5wH/AeYC3wH/AV8CVAHgAycBO5QAAXsBawFpAfwB/wHcAbcC/wHPAZ4C/wHNAZkC/wHNAZkC/wHN
-        AZoC/wHMAZkC/wHNAZoC/wHXAakC/wHdAbQB/wGXAYcBgQH/AVwCWAHRAwMBBAwAAWECQgHuAdwCyQH/
-        Ad0CzQH/Ab0CrwH/AZ8ClQH/Ad8C1AH/AfMC7wH/AfsC9gH/AWUCPQH0AzQBVJgAAWoCPQHzAf8B1wGy
+        Ae4C5wH/AeYC3wH/AV8CVwHgAycBO5QAAXoBagFoAfwB/wHcAbcC/wHPAZ4C/wHNAZkC/wHNAZkC/wHN
+        AZoC/wHMAZkC/wHNAZoC/wHXAakC/wHdAbQB/wGXAYcBgQH/AVwCWAHRAwMBBAwAAWECRgHuAdwCyQH/
+        Ad0CzQH/Ab0CrwH/AZ8ClQH/Ad8C1AH/AfMC7wH/AfsC9gH/AWUCPgH0AzQBVJgAAWgCPwHzAf8B1wGy
         Av8BywGUAv8B0gGkAv8B1QGpAv8B1gGrAv8B0wGoAv8BzwGfAv8B0wGdAf8B9wHHAZgB/wGCAoEB/wNU
-        Aa8QAAFtAjoB9wHvAtwB/wHAArIB/wNVAbUBQAI/AW8BogKZAf8B9ALrAf8B+ALxAf8BZwJAAfIDKgFB
+        Aa8QAAFtAjsB9wHvAtwB/wHAArIB/wNVAbUBQAI/AW8BogKZAf8B9ALrAf8B+ALxAf8BZwJEAfIDKgFB
         mAABWgJXAcUB7QHQAb4C/wHRAaIC/wHgAbsC/wHiAcMC/wHhAcIC/wHgAb8C/wHgAboC/wHYAaQB/wHX
-        AawBiQH/AV8BMwE1AfsBNQI0AVUQAAFkAkYB7AHIAroB/wFVAlMBsAMWAR4DVQGyAcACtAH/AegC3AH/
-        AfAC5wH/AWMCSwHrAxwBJ5gAAy0BRQFuAjwB9wH5Ac8BtwL/AdYBtQL/AekB0gL/AfAB2wL/AesB0wH/
+        AawBiQH/AV8BMgE0AfsBNQI0AVUQAAFkAkoB7AHIAroB/wFVAlMBsAMWAR4DVQGyAcACtAH/AegC3AH/
+        AfAC5wH/AWICTgHrAxwBJ5gAAy0BRQFtAj0B9wH5Ac8BtwL/AdYBtQL/AekB0gL/AfAB2wL/AesB0wH/
         Af4B2wG4Af8B6wG6AZcB/wGPAYIBgQH/A1YBsxQAA0IBdAFRAk8BnAMfAS0DVQGyAcACsAH/Ad4CzAH/
-        AegC2gH/Ac4CwQH/A1MBqqAAAz8BbQFiAjcB9gHiAcABsgH/AfIBxQGwAf8B9AHIAbQB/wHtAb4BqQH/
+        AegC2gH/Ac4CwQH/A1MBqqAAAz8BbQFiAjgB9gHiAcABsgH/AfIBxQGwAf8B9AHIAbQB/wHtAb4BqQH/
         AdUBrAGZAf8BkgGHAYQB/wFaAlcBxQMPARQcAAFRAk8BnAHFArcB/wHvAt0B/wHeAssB/wHEArcB/wFg
-        AlgB1AMVAR2kAAEsAisBQwFbAlkBxAFnAkAB8gGJAVkBVwH7AXcCPgH4AWACVAHeA0gBhAMGAQggAANC
-        AXYBZAJNAecBbQI6AfcBZAJGAewDTgGYAxQBHKAAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEB
+        AlkB1AMVAR2kAAEsAisBQwFbAlkBxAFnAkQB8gGIAVkBVwH7AXYCPgH4AWACVQHeA0gBhAMGAQggAANC
+        AXYBZAJRAecBbQI7AfcBZAJKAewDTgGYAxQBHKAAAUIBTQE+BwABPgMAASgDAAFAAwABEAMAAQEBAAEB
         BQABgBcAA/8BAAH/AfAB/wHhBAAB/wHgAf8BwAQAAf8BwAH/AYAEAAH5AYAB/wUAAeABAQH+BQABgAED
         AfwBAQUAAQcB4AEDBQABDwGAAQcFAAEPAQABDwUAAQcBAAEfBQABBwEAAT8FAAEPAQABPwUAAQ8BAAE/
         BQABHwEAAX8EAAGAAR8BwAF/BAABwAE/AcAB/wQACw==
diff --git a/KeePass/Forms/PwEntryForm.Designer.cs b/KeePass/Forms/PwEntryForm.Designer.cs
index 2818475..e189648 100644
--- a/KeePass/Forms/PwEntryForm.Designer.cs
+++ b/KeePass/Forms/PwEntryForm.Designer.cs
@@ -138,6 +138,10 @@
 			this.m_ctxToolsFieldRefsInPassword = new System.Windows.Forms.ToolStripMenuItem();
 			this.m_ctxToolsFieldRefsInUrl = new System.Windows.Forms.ToolStripMenuItem();
 			this.m_ctxToolsFieldRefsInNotes = new System.Windows.Forms.ToolStripMenuItem();
+			this.m_ctxBinAttach = new System.Windows.Forms.ContextMenuStrip(this.components);
+			this.m_ctxBinImportFile = new System.Windows.Forms.ToolStripMenuItem();
+			this.m_ctxBinSep0 = new System.Windows.Forms.ToolStripSeparator();
+			this.m_ctxBinNew = new System.Windows.Forms.ToolStripMenuItem();
 			this.m_ctxDefaultTimes.SuspendLayout();
 			this.m_tabMain.SuspendLayout();
 			this.m_tabEntry.SuspendLayout();
@@ -152,6 +156,7 @@
 			this.m_ctxStrMoveToStandard.SuspendLayout();
 			this.m_ctxPwGen.SuspendLayout();
 			this.m_ctxTools.SuspendLayout();
+			this.m_ctxBinAttach.SuspendLayout();
 			this.SuspendLayout();
 			// 
 			// m_lblUserName
@@ -287,7 +292,6 @@
 			this.m_dtExpireDateTime.Name = "m_dtExpireDateTime";
 			this.m_dtExpireDateTime.Size = new System.Drawing.Size(335, 20);
 			this.m_dtExpireDateTime.TabIndex = 20;
-			this.m_dtExpireDateTime.ValueChanged += new System.EventHandler(this.OnExpireDateTimeChanged);
 			// 
 			// m_ctxDefaultTimes
 			// 
@@ -408,7 +412,6 @@
 			// 
 			// m_btnGenPw
 			// 
-			this.m_btnGenPw.Image = global::KeePass.Properties.Resources.B15x13_KGPG_Gen;
 			this.m_btnGenPw.Location = new System.Drawing.Point(423, 90);
 			this.m_btnGenPw.Name = "m_btnGenPw";
 			this.m_btnGenPw.Size = new System.Drawing.Size(32, 23);
@@ -551,7 +554,7 @@
 			this.m_btnBinView.Location = new System.Drawing.Point(374, 104);
 			this.m_btnBinView.Name = "m_btnBinView";
 			this.m_btnBinView.Size = new System.Drawing.Size(75, 23);
-			this.m_btnBinView.TabIndex = 4;
+			this.m_btnBinView.TabIndex = 3;
 			this.m_btnBinView.Text = "<>";
 			this.m_btnBinView.UseVisualStyleBackColor = true;
 			this.m_btnBinView.Click += new System.EventHandler(this.OnBtnBinView);
@@ -561,7 +564,7 @@
 			this.m_btnBinSave.Location = new System.Drawing.Point(374, 133);
 			this.m_btnBinSave.Name = "m_btnBinSave";
 			this.m_btnBinSave.Size = new System.Drawing.Size(75, 23);
-			this.m_btnBinSave.TabIndex = 3;
+			this.m_btnBinSave.TabIndex = 4;
 			this.m_btnBinSave.Text = "&Save";
 			this.m_btnBinSave.UseVisualStyleBackColor = true;
 			this.m_btnBinSave.Click += new System.EventHandler(this.OnBtnBinSave);
@@ -589,7 +592,9 @@
 			// m_lvBinaries
 			// 
 			this.m_lvBinaries.FullRowSelect = true;
+			this.m_lvBinaries.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
 			this.m_lvBinaries.HideSelection = false;
+			this.m_lvBinaries.LabelEdit = true;
 			this.m_lvBinaries.Location = new System.Drawing.Point(6, 20);
 			this.m_lvBinaries.Name = "m_lvBinaries";
 			this.m_lvBinaries.ShowItemToolTips = true;
@@ -598,6 +603,7 @@
 			this.m_lvBinaries.UseCompatibleStateImageBehavior = false;
 			this.m_lvBinaries.View = System.Windows.Forms.View.Details;
 			this.m_lvBinaries.ItemActivate += new System.EventHandler(this.OnBinariesItemActivate);
+			this.m_lvBinaries.AfterLabelEdit += new System.Windows.Forms.LabelEditEventHandler(this.OnBinAfterLabelEdit);
 			this.m_lvBinaries.SelectedIndexChanged += new System.EventHandler(this.OnBinariesSelectedIndexChanged);
 			// 
 			// m_grpStringFields
@@ -1074,11 +1080,11 @@
             this.m_ctxPwGenSep0,
             this.m_ctxPwGenProfiles});
 			this.m_ctxPwGen.Name = "m_ctxPwGen";
-			this.m_ctxPwGen.Size = new System.Drawing.Size(229, 54);
+			this.m_ctxPwGen.Size = new System.Drawing.Size(229, 76);
 			// 
 			// m_ctxPwGenOpen
 			// 
-			this.m_ctxPwGenOpen.Image = global::KeePass.Properties.Resources.B16x16_KGPG_Gen;
+			this.m_ctxPwGenOpen.Image = global::KeePass.Properties.Resources.B16x16_Key_New;
 			this.m_ctxPwGenOpen.Name = "m_ctxPwGenOpen";
 			this.m_ctxPwGenOpen.Size = new System.Drawing.Size(228, 22);
 			this.m_ctxPwGenOpen.Text = "&Open Password Generator...";
@@ -1197,6 +1203,36 @@
 			this.m_ctxToolsFieldRefsInNotes.Text = "In N&otes Field";
 			this.m_ctxToolsFieldRefsInNotes.Click += new System.EventHandler(this.OnFieldRefInNotes);
 			// 
+			// m_ctxBinAttach
+			// 
+			this.m_ctxBinAttach.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
+            this.m_ctxBinImportFile,
+            this.m_ctxBinSep0,
+            this.m_ctxBinNew});
+			this.m_ctxBinAttach.Name = "m_ctxBinAttach";
+			this.m_ctxBinAttach.Size = new System.Drawing.Size(212, 54);
+			// 
+			// m_ctxBinImportFile
+			// 
+			this.m_ctxBinImportFile.Image = global::KeePass.Properties.Resources.B16x16_Folder_Yellow_Open;
+			this.m_ctxBinImportFile.Name = "m_ctxBinImportFile";
+			this.m_ctxBinImportFile.Size = new System.Drawing.Size(211, 22);
+			this.m_ctxBinImportFile.Text = "Attach &File(s)...";
+			this.m_ctxBinImportFile.Click += new System.EventHandler(this.OnCtxBinImport);
+			// 
+			// m_ctxBinSep0
+			// 
+			this.m_ctxBinSep0.Name = "m_ctxBinSep0";
+			this.m_ctxBinSep0.Size = new System.Drawing.Size(208, 6);
+			// 
+			// m_ctxBinNew
+			// 
+			this.m_ctxBinNew.Image = global::KeePass.Properties.Resources.B16x16_FileNew;
+			this.m_ctxBinNew.Name = "m_ctxBinNew";
+			this.m_ctxBinNew.Size = new System.Drawing.Size(211, 22);
+			this.m_ctxBinNew.Text = "&Create Empty Attachment";
+			this.m_ctxBinNew.Click += new System.EventHandler(this.OnCtxBinNew);
+			// 
 			// PwEntryForm
 			// 
 			this.AcceptButton = this.m_btnOK;
@@ -1237,6 +1273,7 @@
 			this.m_ctxStrMoveToStandard.ResumeLayout(false);
 			this.m_ctxPwGen.ResumeLayout(false);
 			this.m_ctxTools.ResumeLayout(false);
+			this.m_ctxBinAttach.ResumeLayout(false);
 			this.ResumeLayout(false);
 
 		}
@@ -1352,6 +1389,10 @@
 		private System.Windows.Forms.CheckBox m_cbCustomForegroundColor;
 		private System.Windows.Forms.TextBox m_tbTags;
 		private System.Windows.Forms.Label m_lblTags;
+		private System.Windows.Forms.ContextMenuStrip m_ctxBinAttach;
+		private System.Windows.Forms.ToolStripMenuItem m_ctxBinImportFile;
+		private System.Windows.Forms.ToolStripSeparator m_ctxBinSep0;
+		private System.Windows.Forms.ToolStripMenuItem m_ctxBinNew;
 
 	}
 }
\ No newline at end of file
diff --git a/KeePass/Forms/PwEntryForm.cs b/KeePass/Forms/PwEntryForm.cs
index 4057d3b..37bc5b3 100644
--- a/KeePass/Forms/PwEntryForm.cs
+++ b/KeePass/Forms/PwEntryForm.cs
@@ -78,7 +78,10 @@ namespace KeePass.Forms
 		private bool m_bForceClosing = false;
 
 		private PwInputControlGroup m_icgPassword = new PwInputControlGroup();
+		private ExpiryControlGroup m_cgExpiry = new ExpiryControlGroup();
 		private RichTextBoxContextMenu m_ctxNotes = new RichTextBoxContextMenu();
+		private Image m_imgPwGen = null;
+		private Image m_imgStdExpire = null;
 
 		private readonly string DeriveFromPrevious = "(" + KPRes.GenPwBasedOnPrevious + ")";
 		private DynamicMenu m_dynGenProfiles;
@@ -136,6 +139,11 @@ namespace KeePass.Forms
 			get { return m_ctxStrMoveToStandard; }
 		}
 
+		public ContextMenuStrip AttachmentsContextMenu
+		{
+			get { return m_ctxBinAttach; }
+		}
+
 		private bool m_bInitSwitchToHistory = false;
 		internal bool InitSwitchToHistoryTab
 		{
@@ -153,6 +161,7 @@ namespace KeePass.Forms
 			Program.Translation.ApplyTo("KeePass.Forms.PwEntryForm.m_ctxListOperations", m_ctxListOperations.Items);
 			Program.Translation.ApplyTo("KeePass.Forms.PwEntryForm.m_ctxPwGen", m_ctxPwGen.Items);
 			Program.Translation.ApplyTo("KeePass.Forms.PwEntryForm.m_ctxStrMoveToStandard", m_ctxStrMoveToStandard.Items);
+			Program.Translation.ApplyTo("KeePass.Forms.PwEntryForm.m_ctxBinAttach", m_ctxBinAttach.Items);
 		}
 
 		public void InitEx(PwEntry pwEntry, PwEditMode pwMode, PwDatabase pwDatabase,
@@ -204,9 +213,6 @@ namespace KeePass.Forms
 				m_tbRepeatPassword, m_lblQuality, m_pbQuality, m_lblQualityBitsText,
 				this, bHideInitial, false);
 
-			m_dtExpireDateTime.CustomFormat = DateTimeFormatInfo.CurrentInfo.ShortDatePattern +
-				" " + DateTimeFormatInfo.CurrentInfo.LongTimePattern;
-
 			if(m_pwEntry.Expires)
 			{
 				m_dtExpireDateTime.Value = m_pwEntry.ExpiryTime;
@@ -214,9 +220,10 @@ namespace KeePass.Forms
 			}
 			else // Does not expire
 			{
-				m_dtExpireDateTime.Value = DateTime.Now;
+				m_dtExpireDateTime.Value = DateTime.Now.Date;
 				m_cbExpires.Checked = false;
 			}
+			m_cgExpiry.Attach(m_cbExpires, m_dtExpireDateTime);
 
 			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry)
 			{
@@ -256,9 +263,9 @@ namespace KeePass.Forms
 			m_lvStrings.Columns.Add(KPRes.FieldName, nWidth);
 			m_lvStrings.Columns.Add(KPRes.FieldValue, nWidth);
 
-			nWidth = m_lvBinaries.ClientRectangle.Width;
+			nWidth = m_lvBinaries.ClientRectangle.Width / 2;
 			m_lvBinaries.Columns.Add(KPRes.Attachments, nWidth);
-			// m_lvBinaries.Columns.Add(KPRes.FieldValue, nWidth);
+			m_lvBinaries.Columns.Add(KPRes.Size, nWidth, HorizontalAlignment.Right);
 
 			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry)
 			{
@@ -266,6 +273,8 @@ namespace KeePass.Forms
 					m_btnStrDelete.Enabled = m_btnStrMove.Enabled =
 					m_btnBinAdd.Enabled = m_btnBinDelete.Enabled =
 					m_btnBinView.Enabled = m_btnBinSave.Enabled = false;
+
+				m_lvBinaries.LabelEdit = false;
 			}
 		}
 
@@ -329,11 +338,17 @@ namespace KeePass.Forms
 		// Public for plugins
 		public void UpdateEntryBinaries(bool bGuiToInternal)
 		{
-			UpdateEntryBinaries(bGuiToInternal, false);
+			UpdateEntryBinaries(bGuiToInternal, false, null);
 		}
 
 		public void UpdateEntryBinaries(bool bGuiToInternal, bool bUpdateState)
 		{
+			UpdateEntryBinaries(bGuiToInternal, bUpdateState, null);
+		}
+
+		public void UpdateEntryBinaries(bool bGuiToInternal, bool bUpdateState,
+			string strFocusItem)
+		{
 			if(bGuiToInternal) { }
 			else // Internal to GUI
 			{
@@ -343,9 +358,22 @@ namespace KeePass.Forms
 				{
 					PwIcon pwIcon = (kvpBin.Value.IsProtected ?
 						m_pwObjectProtected : m_pwObjectPlainText);
-					m_lvBinaries.Items.Add(kvpBin.Key, (int)pwIcon);
+					ListViewItem lvi = m_lvBinaries.Items.Add(kvpBin.Key, (int)pwIcon);
+					lvi.SubItems.Add(StrUtil.FormatDataSizeKB(kvpBin.Value.Length));
 				}
 				UIUtil.SetTopVisibleItem(m_lvBinaries, iTopVisible);
+
+				if(strFocusItem != null)
+				{
+					ListViewItem lvi = m_lvBinaries.FindItemWithText(strFocusItem,
+						false, 0, false);
+					if(lvi != null)
+					{
+						m_lvBinaries.EnsureVisible(lvi.Index);
+						UIUtil.SetFocusedItem(m_lvBinaries, lvi, true);
+					}
+					else { Debug.Assert(false); }
+				}
 			}
 
 			if(bUpdateState) EnableControlsEx();
@@ -485,11 +513,13 @@ namespace KeePass.Forms
 		{
 			Debug.Assert(m_lvStrings.Columns.Count == 2);
 			int dx = m_lvStrings.ClientRectangle.Width;
-			m_lvStrings.Columns[0].Width = m_lvStrings.Columns[1].Width = dx / 2;
+			m_lvStrings.Columns[0].Width = dx / 2;
+			m_lvStrings.Columns[1].Width = dx / 2;
 
-			Debug.Assert(m_lvBinaries.Columns.Count == 1);
+			Debug.Assert(m_lvBinaries.Columns.Count == 2);
 			dx = m_lvBinaries.ClientRectangle.Width;
-			m_lvBinaries.Columns[0].Width = dx;
+			m_lvBinaries.Columns[0].Width = (dx * 4) / 5;
+			m_lvBinaries.Columns[1].Width = dx / 5;
 
 			Debug.Assert(m_lvAutoType.Columns.Count == 2);
 			dx = m_lvAutoType.ClientRectangle.Width;
@@ -553,14 +583,22 @@ namespace KeePass.Forms
 			this.Icon = Properties.Resources.KeePass;
 			this.Text = strTitle;
 
+			m_imgPwGen = UIUtil.CreateDropDownImage(Properties.Resources.B16x16_Key_New);
+			m_imgStdExpire = UIUtil.CreateDropDownImage(Properties.Resources.B16x16_History);
+
 			UIUtil.SetButtonImage(m_btnTools,
 				Properties.Resources.B16x16_Package_Settings, true);
-			UIUtil.SetButtonImage(m_btnStandardExpires,
-				Properties.Resources.B16x16_History, true);
+			UIUtil.SetButtonImage(m_btnGenPw, m_imgPwGen, true);
+			UIUtil.SetButtonImage(m_btnStandardExpires, m_imgStdExpire, true);
 
 			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry)
 				m_bLockEnabledState = true;
 
+			// UIUtil.SetExplorerTheme(m_lvStrings, true);
+			// UIUtil.SetExplorerTheme(m_lvBinaries, true);
+			// UIUtil.SetExplorerTheme(m_lvAutoType, true);
+			// UIUtil.SetExplorerTheme(m_lvHistory, true);
+
 			UIUtil.PrepareStandardMultilineControl(m_rtNotes, true, true);
 
 			m_bInitializing = true;
@@ -661,22 +699,23 @@ namespace KeePass.Forms
 			m_btnPickFgColor.Enabled = m_cbCustomForegroundColor.Checked;
 			m_btnPickBgColor.Enabled = m_cbCustomBackgroundColor.Checked;
 
+			bool bATEnabled = m_cbAutoTypeEnabled.Checked;
 			m_lvAutoType.Enabled = m_btnAutoTypeAdd.Enabled =
 				m_rbAutoTypeSeqInherit.Enabled = m_rbAutoTypeOverride.Enabled =
-				m_cbAutoTypeObfuscation.Enabled = m_cbAutoTypeEnabled.Checked;
+				m_cbAutoTypeObfuscation.Enabled = bATEnabled;
 
 			if(!m_rbAutoTypeOverride.Checked)
 				m_tbDefaultAutoTypeSeq.Enabled = m_btnAutoTypeEditDefault.Enabled = false;
 			else
 				m_tbDefaultAutoTypeSeq.Enabled = m_btnAutoTypeEditDefault.Enabled =
-					m_cbAutoTypeEnabled.Checked;
+					bATEnabled;
 
 			int nAutoTypeSel = m_lvAutoType.SelectedItems.Count;
 
 			if(m_pwEditMode != PwEditMode.ViewReadOnlyEntry)
 			{
-				m_btnAutoTypeEdit.Enabled = (nAutoTypeSel == 1);
-				m_btnAutoTypeDelete.Enabled = (nAutoTypeSel >= 1);
+				m_btnAutoTypeEdit.Enabled = (bATEnabled && (nAutoTypeSel == 1));
+				m_btnAutoTypeDelete.Enabled = (bATEnabled && (nAutoTypeSel >= 1));
 			}
 
 			int nAccumSel = nStringsSel + nBinSel + nAutoTypeSel;
@@ -725,8 +764,8 @@ namespace KeePass.Forms
 			peTarget.Tags.Clear();
 			foreach(string strTag in vNewTags) peTarget.AddTag(strTag);
 
-			peTarget.Expires = m_cbExpires.Checked;
-			if(peTarget.Expires) peTarget.ExpiryTime = m_dtExpireDateTime.Value;
+			peTarget.Expires = m_cgExpiry.Checked;
+			if(peTarget.Expires) peTarget.ExpiryTime = m_cgExpiry.Value;
 
 			UpdateEntryStrings(true, false);
 
@@ -738,10 +777,7 @@ namespace KeePass.Forms
 				AutoTypeObfuscationOptions.UseClipboard :
 				AutoTypeObfuscationOptions.None);
 
-			if(m_rbAutoTypeSeqInherit.Checked) m_atConfig.DefaultSequence = string.Empty;
-			else if(m_rbAutoTypeOverride.Checked)
-				m_atConfig.DefaultSequence = m_tbDefaultAutoTypeSeq.Text;
-			else { Debug.Assert(false); }
+			SaveDefaultSeq();
 
 			peTarget.AutoType = m_atConfig;
 
@@ -750,17 +786,24 @@ namespace KeePass.Forms
 
 			StrUtil.NormalizeNewLines(peTarget.Strings, true);
 
+			bool bUndoBackup = false;
 			PwCompareOptions cmpOpt = m_cmpOpt;
 			if(bCreateBackup) cmpOpt |= PwCompareOptions.IgnoreLastBackup;
-
 			if(peTarget.EqualsEntry(m_pwInitialEntry, cmpOpt, MemProtCmpMode.CustomOnly))
 			{
+				// No modifications at all => restore last mod time and undo backup
 				peTarget.LastModificationTime = m_pwInitialEntry.LastModificationTime;
-
-				if(bCreateBackup)
-					peTarget.History.Remove(peTarget.History.GetAt(
-						peTarget.History.UCount - 1)); // Undo backup
+				bUndoBackup = bCreateBackup;
+			}
+			else if(bCreateBackup)
+			{
+				// If only history items have been modified (deleted) => undo
+				// backup, but without restoring the last mod time
+				PwCompareOptions cmpOptNH = (m_cmpOpt | PwCompareOptions.IgnoreHistory);
+				if(peTarget.EqualsEntry(m_pwInitialEntry, cmpOptNH, MemProtCmpMode.CustomOnly))
+					bUndoBackup = true;
 			}
+			if(bUndoBackup) peTarget.History.RemoveAt(peTarget.History.UCount - 1);
 
 			peTarget.MaintainBackups(m_pwDatabase);
 
@@ -769,6 +812,15 @@ namespace KeePass.Forms
 			return true;
 		}
 
+		private void SaveDefaultSeq()
+		{
+			if(m_rbAutoTypeSeqInherit.Checked)
+				m_atConfig.DefaultSequence = string.Empty;
+			else if(m_rbAutoTypeOverride.Checked)
+				m_atConfig.DefaultSequence = m_tbDefaultAutoTypeSeq.Text;
+			else { Debug.Assert(false); }
+		}
+
 		private void OnBtnOK(object sender, EventArgs e)
 		{
 			if(SaveEntry(m_pwEntry, true)) m_bForceClosing = true;
@@ -796,6 +848,14 @@ namespace KeePass.Forms
 
 			m_ctxNotes.Detach();
 			m_icgPassword.Release();
+			m_cgExpiry.Release();
+
+			m_btnGenPw.Image = null;
+			m_imgPwGen.Dispose();
+			m_imgPwGen = null;
+			m_btnStandardExpires.Image = null;
+			m_imgStdExpire.Dispose();
+			m_imgStdExpire = null;
 		}
 
 		private void OnBtnStrAdd(object sender, EventArgs e)
@@ -854,72 +914,7 @@ namespace KeePass.Forms
 
 		private void OnBtnBinAdd(object sender, EventArgs e)
 		{
-			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return;
-
-			OpenFileDialog ofd = UIUtil.CreateOpenFileDialog(KPRes.AttachFiles,
-				UIUtil.CreateFileTypeFilter(null, null, true), 1, null, true, true);
-
-			if(ofd.ShowDialog() == DialogResult.OK)
-			{
-				UpdateEntryBinaries(true, false);
-
-				foreach(string strFile in ofd.FileNames)
-				{
-					byte[] vBytes = null;
-					string strMsg, strItem = UrlUtil.GetFileName(strFile);
-
-					if(m_vBinaries.Get(strItem) != null)
-					{
-						strMsg = KPRes.AttachedExistsAlready + MessageService.NewLine +
-							strItem + MessageService.NewParagraph + KPRes.AttachNewRename +
-							MessageService.NewParagraph + KPRes.AttachNewRenameRemarks0 +
-							MessageService.NewLine + KPRes.AttachNewRenameRemarks1 +
-							MessageService.NewLine + KPRes.AttachNewRenameRemarks2;
-
-						DialogResult dr = MessageService.Ask(strMsg, null,
-							MessageBoxButtons.YesNoCancel);
-
-						if(dr == DialogResult.Cancel) continue;
-						else if(dr == DialogResult.Yes)
-						{
-							string strFileName = UrlUtil.StripExtension(strItem);
-							string strExtension = "." + UrlUtil.GetExtension(strItem);
-
-							int nTry = 0;
-							while(true)
-							{
-								string strNewName = strFileName + nTry.ToString() + strExtension;
-								if(m_vBinaries.Get(strNewName) == null)
-								{
-									strItem = strNewName;
-									break;
-								}
-
-								++nTry;
-							}
-						}
-					}
-
-					try
-					{
-						vBytes = File.ReadAllBytes(strFile);
-						vBytes = DataEditorForm.ConvertAttachment(strItem, vBytes);
-
-						if(vBytes != null)
-						{
-							ProtectedBinary pb = new ProtectedBinary(false, vBytes);
-							m_vBinaries.Set(strItem, pb);
-						}
-					}
-					catch(Exception exAttach)
-					{
-						MessageService.ShowWarning(KPRes.AttachFailed, strFile, exAttach);
-					}
-				}
-
-				UpdateEntryBinaries(false, true);
-				ResizeColumnHeaders();
-			}
+			m_ctxBinAttach.Show(m_btnBinAdd, new Point(0, m_btnBinAdd.Height));
 		}
 
 		private void OnBtnBinDelete(object sender, EventArgs e)
@@ -1002,7 +997,7 @@ namespace KeePass.Forms
 			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return;
 
 			EditAutoTypeItemForm dlg = new EditAutoTypeItemForm();
-			dlg.InitEx(m_atConfig, m_vStrings, -1, false);
+			dlg.InitEx(m_atConfig, -1, false, m_tbDefaultAutoTypeSeq.Text, m_vStrings);
 
 			if(UIUtil.ShowDialogAndDestroy(dlg) == DialogResult.OK)
 			{
@@ -1015,12 +1010,12 @@ namespace KeePass.Forms
 		{
 			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return;
 
-			EditAutoTypeItemForm dlg = new EditAutoTypeItemForm();
-
 			ListView.SelectedIndexCollection lvSel = m_lvAutoType.SelectedIndices;
 			Debug.Assert(lvSel.Count == 1); if(lvSel.Count != 1) return;
 
-			dlg.InitEx(m_atConfig, m_vStrings, lvSel[0], false);
+			EditAutoTypeItemForm dlg = new EditAutoTypeItemForm();
+			dlg.InitEx(m_atConfig, lvSel[0], false, m_tbDefaultAutoTypeSeq.Text,
+				m_vStrings);
 
 			if(UIUtil.ShowDialogAndDestroy(dlg) == DialogResult.OK)
 				UpdateAutoTypeList();
@@ -1113,13 +1108,18 @@ namespace KeePass.Forms
 		{
 			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return;
 
-			DateTime dt = DateTime.Now;
-			if(nYears != 0) dt = dt.AddYears(nYears);
-			if(nMonths != 0) dt = dt.AddMonths(nMonths);
-			if(nDays != 0) dt = dt.AddDays(nDays);
+			DateTime dt = DateTime.Now.Date;
+			dt = dt.AddYears(nYears);
+			dt = dt.AddMonths(nMonths);
+			dt = dt.AddDays(nDays);
+
+			DateTime dtPrevTime = m_cgExpiry.Value;
+			dt = dt.AddHours(dtPrevTime.Hour);
+			dt = dt.AddMinutes(dtPrevTime.Minute);
+			dt = dt.AddSeconds(dtPrevTime.Second);
 
-			m_cbExpires.Checked = true;
-			m_dtExpireDateTime.Value = dt;
+			m_cgExpiry.Checked = true;
+			m_cgExpiry.Value = dt;
 
 			EnableControlsEx();
 		}
@@ -1227,10 +1227,10 @@ namespace KeePass.Forms
 		{
 			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return;
 
-			m_atConfig.DefaultSequence = m_tbDefaultAutoTypeSeq.Text;
+			SaveDefaultSeq();
 
 			EditAutoTypeItemForm ef = new EditAutoTypeItemForm();
-			ef.InitEx(m_atConfig, m_vStrings, -1, true);
+			ef.InitEx(m_atConfig, -1, true, m_tbDefaultAutoTypeSeq.Text, m_vStrings);
 
 			if(UIUtil.ShowDialogAndDestroy(ef) == DialogResult.OK)
 				m_tbDefaultAutoTypeSeq.Text = m_atConfig.DefaultSequence;
@@ -1318,12 +1318,6 @@ namespace KeePass.Forms
 			m_ctxStrMoveToStandard.Show(m_btnStrMove, 0, m_btnStrMove.Height);
 		}
 
-		private void OnExpireDateTimeChanged(object sender, EventArgs e)
-		{
-			m_cbExpires.Checked = true;
-			EnableControlsEx();
-		}
-
 		private void OnNotesLinkClicked(object sender, LinkClickedEventArgs e)
 		{
 			WinUtil.OpenUrl(e.LinkText, m_pwEntry);
@@ -1497,7 +1491,7 @@ namespace KeePass.Forms
 				{
 					m_vBinaries.Set(strDataItem, new ProtectedBinary(
 						pbinData.IsProtected, def.EditedBinaryData));
-					UpdateEntryBinaries(false, true);
+					UpdateEntryBinaries(false, true, strDataItem); // Update size
 				}
 
 				UIUtil.DestroyForm(def);
@@ -1609,8 +1603,17 @@ namespace KeePass.Forms
 			return base.ProcessDialogKey(keyData);
 		}
 
+		private bool m_bClosing = false; // Mono bug workaround
 		private void OnFormClosing(object sender, FormClosingEventArgs e)
 		{
+			if(m_bClosing) return;
+			m_bClosing = true;
+			HandleFormClosing(e);
+			m_bClosing = false;
+		}
+
+		private void HandleFormClosing(FormClosingEventArgs e)
+		{
 			bool bCancel = false;
 			if(!m_bForceClosing && (m_pwEditMode != PwEditMode.ViewReadOnlyEntry))
 			{
@@ -1654,5 +1657,127 @@ namespace KeePass.Forms
 		{
 			OnBtnHistoryView(sender, e);
 		}
+
+		private void OnCtxBinImport(object sender, EventArgs e)
+		{
+			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return;
+
+			OpenFileDialog ofd = UIUtil.CreateOpenFileDialog(KPRes.AttachFiles,
+				UIUtil.CreateFileTypeFilter(null, null, true), 1, null, true, true);
+
+			if(ofd.ShowDialog() == DialogResult.OK)
+			{
+				UpdateEntryBinaries(true, false);
+
+				foreach(string strFile in ofd.FileNames)
+				{
+					byte[] vBytes = null;
+					string strMsg, strItem = UrlUtil.GetFileName(strFile);
+
+					if(m_vBinaries.Get(strItem) != null)
+					{
+						strMsg = KPRes.AttachedExistsAlready + MessageService.NewLine +
+							strItem + MessageService.NewParagraph + KPRes.AttachNewRename +
+							MessageService.NewParagraph + KPRes.AttachNewRenameRemarks0 +
+							MessageService.NewLine + KPRes.AttachNewRenameRemarks1 +
+							MessageService.NewLine + KPRes.AttachNewRenameRemarks2;
+
+						DialogResult dr = MessageService.Ask(strMsg, null,
+							MessageBoxButtons.YesNoCancel);
+
+						if(dr == DialogResult.Cancel) continue;
+						else if(dr == DialogResult.Yes)
+						{
+							string strFileName = UrlUtil.StripExtension(strItem);
+							string strExtension = "." + UrlUtil.GetExtension(strItem);
+
+							int nTry = 0;
+							while(true)
+							{
+								string strNewName = strFileName + nTry.ToString() + strExtension;
+								if(m_vBinaries.Get(strNewName) == null)
+								{
+									strItem = strNewName;
+									break;
+								}
+
+								++nTry;
+							}
+						}
+					}
+
+					try
+					{
+						vBytes = File.ReadAllBytes(strFile);
+						vBytes = DataEditorForm.ConvertAttachment(strItem, vBytes);
+
+						if(vBytes != null)
+						{
+							ProtectedBinary pb = new ProtectedBinary(false, vBytes);
+							m_vBinaries.Set(strItem, pb);
+						}
+					}
+					catch(Exception exAttach)
+					{
+						MessageService.ShowWarning(KPRes.AttachFailed, strFile, exAttach);
+					}
+				}
+
+				UpdateEntryBinaries(false, true);
+				ResizeColumnHeaders();
+			}
+		}
+
+		private void OnCtxBinNew(object sender, EventArgs e)
+		{
+			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return;
+
+			string strName;
+			for(int i = 0; ; ++i)
+			{
+				strName = KPRes.New;
+				if(i >= 1) strName += " (" + i.ToString() + ")";
+				strName += ".rtf";
+
+				if(m_vBinaries.Get(strName) == null) break;
+			}
+
+			ProtectedBinary pb = new ProtectedBinary();
+			m_vBinaries.Set(strName, pb);
+			UpdateEntryBinaries(false, true, strName);
+			ResizeColumnHeaders();
+
+			ListViewItem lviNew = m_lvBinaries.FindItemWithText(strName,
+				false, 0, false);
+			if(lviNew != null) lviNew.BeginEdit();
+		}
+
+		private void OnBinAfterLabelEdit(object sender, LabelEditEventArgs e)
+		{
+			string strNew = e.Label;
+
+			e.CancelEdit = true; // In the case of success, we update it on our own
+
+			if(string.IsNullOrEmpty(strNew)) return;
+			if(m_pwEditMode == PwEditMode.ViewReadOnlyEntry) return;
+
+			int iItem = e.Item;
+			if((iItem < 0) || (iItem >= m_lvBinaries.Items.Count)) return;
+			string strOld = m_lvBinaries.Items[iItem].Text;
+			if(strNew == strOld) return;
+
+			if(m_vBinaries.Get(strNew) != null)
+			{
+				MessageService.ShowWarning(KPRes.FieldNameExistsAlready);
+				return;
+			}
+
+			ProtectedBinary pb = m_vBinaries.Get(strOld);
+			if(pb == null) { Debug.Assert(false); return; }
+			m_vBinaries.Remove(strOld);
+			m_vBinaries.Set(strNew, pb);
+
+			UpdateEntryBinaries(false, true, strNew);
+		}
 	}
 }
diff --git a/KeePass/Forms/PwEntryForm.resx b/KeePass/Forms/PwEntryForm.resx
index 72825d9..94cc339 100644
--- a/KeePass/Forms/PwEntryForm.resx
+++ b/KeePass/Forms/PwEntryForm.resx
@@ -138,4 +138,7 @@
   <metadata name="m_ctxTools.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 43</value>
   </metadata>
+  <metadata name="m_ctxBinAttach.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>135, 46</value>
+  </metadata>
 </root>
\ No newline at end of file
diff --git a/KeePass/Forms/TextEncodingForm.Designer.cs b/KeePass/Forms/TextEncodingForm.Designer.cs
index 4fd6d9d..e8b099c 100644
--- a/KeePass/Forms/TextEncodingForm.Designer.cs
+++ b/KeePass/Forms/TextEncodingForm.Designer.cs
@@ -75,7 +75,7 @@
 			this.m_cmbEnc.Location = new System.Drawing.Point(12, 53);
 			this.m_cmbEnc.MaxDropDownItems = 12;
 			this.m_cmbEnc.Name = "m_cmbEnc";
-			this.m_cmbEnc.Size = new System.Drawing.Size(233, 21);
+			this.m_cmbEnc.Size = new System.Drawing.Size(385, 21);
 			this.m_cmbEnc.TabIndex = 4;
 			this.m_cmbEnc.SelectedIndexChanged += new System.EventHandler(this.OnEncSelectedIndexChanged);
 			// 
diff --git a/KeePass/Forms/TextEncodingForm.cs b/KeePass/Forms/TextEncodingForm.cs
index 96be9d0..a73be78 100644
--- a/KeePass/Forms/TextEncodingForm.cs
+++ b/KeePass/Forms/TextEncodingForm.cs
@@ -29,6 +29,8 @@ using KeePass.UI;
 using KeePass.Util;
 using KeePass.Resources;
 
+using KeePassLib.Utility;
+
 namespace KeePass.Forms
 {
 	public partial class TextEncodingForm : Form
@@ -37,24 +39,7 @@ namespace KeePass.Forms
 		private byte[] m_pbData = null;
 		private bool m_bInitializing = false;
 		private Encoding m_encSel = null;
-
-		private string[] m_vEncText = new string[] {
-			KPRes.BinaryNoConv,
-			BinaryDataClassifier.BdeAnsi + " (" + KPRes.SystemCodePage + ")",
-			BinaryDataClassifier.BdeAscii,
-			BinaryDataClassifier.BdeUtf7, BinaryDataClassifier.BdeUtf8,
-			BinaryDataClassifier.BdeUtf32,
-			BinaryDataClassifier.BdeUnicodeLE, BinaryDataClassifier.BdeUnicodeBE
-		};
-
-		private Encoding[] m_vEnc = new Encoding[] {
-			null,
-			Encoding.Default,
-			Encoding.ASCII,
-			Encoding.UTF7, new UTF8Encoding(false),
-			Encoding.UTF32,
-			Encoding.Unicode, Encoding.BigEndianUnicode
-		};
+		private uint m_uStartOffset = 0;
 
 		public Encoding SelectedEncoding
 		{
@@ -81,15 +66,17 @@ namespace KeePass.Forms
 			FontUtil.AssignDefaultBold(m_lblContext);
 			m_lblContext.Text = m_strContext;
 
-			foreach(string strEnc in m_vEncText)
-				m_cmbEnc.Items.Add(strEnc);
+			m_cmbEnc.Items.Add(KPRes.BinaryNoConv);
+			foreach(StrEncodingInfo sei in StrUtil.Encodings)
+				m_cmbEnc.Items.Add(sei.Name);
+
+			StrEncodingInfo seiGuess = BinaryDataClassifier.GetStringEncoding(
+				m_pbData, out m_uStartOffset);
 
-			string strDet;
-			uint uStartOffset;
-			BinaryDataClassifier.GetStringEncoding(m_pbData, false,
-				out strDet, out uStartOffset);
-			int iDet = Array.IndexOf<string>(m_vEncText, strDet);
-			m_cmbEnc.SelectedIndex = ((iDet >= 0) ? iDet : 0);
+			int iSel = 0;
+			if(seiGuess != null)
+				iSel = Math.Max(m_cmbEnc.FindStringExact(seiGuess.Name), 0);
+			m_cmbEnc.SelectedIndex = iSel;
 
 			m_bInitializing = false;
 			UpdateTextPreview();
@@ -100,17 +87,24 @@ namespace KeePass.Forms
 			GlobalWindowManager.RemoveWindow(this);
 		}
 
+		private Encoding GetSelEnc()
+		{
+			StrEncodingInfo sei = StrUtil.GetEncoding(m_cmbEnc.Text);
+			return ((sei != null) ? sei.Encoding : null);
+		}
+
 		private void UpdateTextPreview()
 		{
 			if(m_bInitializing) return;
-			if(m_pbData == null) { Debug.Assert(false); return; }
 
+			m_rtbPreview.Clear(); // Clear formatting
 			try
 			{
-				Encoding enc = m_vEnc[m_cmbEnc.SelectedIndex];
-				if(enc == null) enc = new UTF8Encoding(false);
+				Encoding enc = GetSelEnc();
+				if(enc == null) throw new InvalidOperationException();
 
-				m_rtbPreview.Text = enc.GetString(m_pbData);
+				m_rtbPreview.Text = enc.GetString(m_pbData, (int)m_uStartOffset,
+					m_pbData.Length - (int)m_uStartOffset);
 			}
 			catch(Exception) { m_rtbPreview.Text = string.Empty; }
 		}
@@ -122,7 +116,7 @@ namespace KeePass.Forms
 
 		private void OnBtnOK(object sender, EventArgs e)
 		{
-			m_encSel = m_vEnc[m_cmbEnc.SelectedIndex];
+			m_encSel = GetSelEnc();
 		}
 
 		private void OnBtnCancel(object sender, EventArgs e)
diff --git a/KeePass/Forms/UpdateCheckForm.cs b/KeePass/Forms/UpdateCheckForm.cs
index 2088a86..a995197 100644
--- a/KeePass/Forms/UpdateCheckForm.cs
+++ b/KeePass/Forms/UpdateCheckForm.cs
@@ -67,7 +67,7 @@ namespace KeePass.Forms
 			this.Icon = Properties.Resources.KeePass;
 			this.Text = KPRes.UpdateCheck + " - " + PwDefs.ShortProductName;
 
-			// UIUtil.SetExplorerTheme(m_lvInfo.Handle);
+			UIUtil.SetExplorerTheme(m_lvInfo, true);
 
 			int nWidth = m_lvInfo.ClientRectangle.Width - UIUtil.GetVScrollBarWidth();
 			m_lvInfo.Columns.Add(KPRes.Component, (nWidth * 2) / 6);
@@ -123,12 +123,12 @@ namespace KeePass.Forms
 				else lvi.ImageIndex = 0;
 
 				lvi.SubItems.Add(strStatus);
-				lvi.SubItems.Add(StrUtil.VersionToString(uc.VerInstalled));
+				lvi.SubItems.Add(StrUtil.VersionToString(uc.VerInstalled, true));
 
 				if((uc.Status == UpdateComponentStatus.UpToDate) ||
 					(uc.Status == UpdateComponentStatus.NewVerAvailable) ||
 					(uc.Status == UpdateComponentStatus.PreRelease))
-					lvi.SubItems.Add(StrUtil.VersionToString(uc.VerAvailable));
+					lvi.SubItems.Add(StrUtil.VersionToString(uc.VerAvailable, true));
 				else lvi.SubItems.Add("?");
 
 				if(lvg != null) lvi.Group = lvg;
diff --git a/KeePass/Forms/UrlSchemesForm.cs b/KeePass/Forms/UrlSchemesForm.cs
index 469d6b6..b466926 100644
--- a/KeePass/Forms/UrlSchemesForm.cs
+++ b/KeePass/Forms/UrlSchemesForm.cs
@@ -57,7 +57,7 @@ namespace KeePass.Forms
 			this.Icon = Properties.Resources.KeePass;
 			this.Text = KPRes.UrlSchemeOverrides;
 
-			UIUtil.SetExplorerTheme(m_lvOverrides.Handle);
+			UIUtil.SetExplorerTheme(m_lvOverrides, false);
 
 			int nWidth = (m_lvOverrides.ClientSize.Width - UIUtil.GetVScrollBarWidth()) / 4;
 			m_lvOverrides.Columns.Add(KPRes.Scheme, nWidth);
diff --git a/KeePass/KeePass.csproj b/KeePass/KeePass.csproj
index 1b60651..87f61d0 100644
--- a/KeePass/KeePass.csproj
+++ b/KeePass/KeePass.csproj
@@ -140,6 +140,9 @@
     <Compile Include="..\KeePassLib\Interfaces\IUIOperations.cs">
       <Link>KeePassLib\Interfaces\IUIOperations.cs</Link>
     </Compile>
+    <Compile Include="..\KeePassLib\Interfaces\IXmlSerializerEx.cs">
+      <Link>KeePassLib\Interfaces\IXmlSerializerEx.cs</Link>
+    </Compile>
     <Compile Include="..\KeePassLib\Keys\CompositeKey.cs">
       <Link>KeePassLib\Keys\CompositeKey.cs</Link>
     </Compile>
@@ -306,6 +309,7 @@
     <Compile Include="App\Configuration\AppConfigEx.cs" />
     <Compile Include="App\Configuration\AppConfigSerializer.cs" />
     <Compile Include="DataExchange\CsvStreamReader.cs" />
+    <Compile Include="DataExchange\CsvStreamReaderEx.cs" />
     <Compile Include="DataExchange\ExportUtil.cs" />
     <Compile Include="DataExchange\FileFormatProvider.cs" />
     <Compile Include="DataExchange\Formats\AmpXml250.cs" />
@@ -317,7 +321,6 @@
     <Compile Include="DataExchange\Formats\HandySafeProXml12.cs" />
     <Compile Include="DataExchange\Formats\HandySafeTxt512.cs" />
     <Compile Include="DataExchange\Formats\KasperskyPwMgrXml50.cs" />
-    <Compile Include="DataExchange\Formats\KeePassCsv1x.cs" />
     <Compile Include="DataExchange\Formats\KeePassHtml2x.cs" />
     <Compile Include="DataExchange\Formats\KeePassKdb1x.cs" />
     <Compile Include="DataExchange\Formats\KeePassKdb2x.cs" />
@@ -389,6 +392,12 @@
     <Compile Include="Forms\ColumnsForm.Designer.cs">
       <DependentUpon>ColumnsForm.cs</DependentUpon>
     </Compile>
+    <Compile Include="Forms\CsvImportForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Forms\CsvImportForm.Designer.cs">
+      <DependentUpon>CsvImportForm.cs</DependentUpon>
+    </Compile>
     <Compile Include="Forms\DatabaseOperationsForm.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -491,12 +500,6 @@
     <Compile Include="Forms\FileBrowserForm.Designer.cs">
       <DependentUpon>FileBrowserForm.cs</DependentUpon>
     </Compile>
-    <Compile Include="Forms\ImportCsvForm.cs">
-      <SubType>Form</SubType>
-    </Compile>
-    <Compile Include="Forms\ImportCsvForm.Designer.cs">
-      <DependentUpon>ImportCsvForm.cs</DependentUpon>
-    </Compile>
     <Compile Include="Forms\GroupForm.cs">
       <SubType>Form</SubType>
     </Compile>
@@ -696,6 +699,7 @@
       <SubType>Component</SubType>
     </Compile>
     <Compile Include="UI\DocumentManagerEx.cs" />
+    <Compile Include="UI\ExpiryControlGroup.cs" />
     <Compile Include="UI\FileDialogsEx.cs" />
     <Compile Include="UI\FontUtil.cs" />
     <Compile Include="UI\GlobalWindowManager.cs" />
@@ -764,6 +768,9 @@
     <EmbeddedResource Include="Forms\ColumnsForm.resx">
       <DependentUpon>ColumnsForm.cs</DependentUpon>
     </EmbeddedResource>
+    <EmbeddedResource Include="Forms\CsvImportForm.resx">
+      <DependentUpon>CsvImportForm.cs</DependentUpon>
+    </EmbeddedResource>
     <EmbeddedResource Include="Forms\DatabaseOperationsForm.resx">
       <SubType>Designer</SubType>
       <DependentUpon>DatabaseOperationsForm.cs</DependentUpon>
@@ -822,10 +829,6 @@
     <EmbeddedResource Include="Forms\FileBrowserForm.resx">
       <DependentUpon>FileBrowserForm.cs</DependentUpon>
     </EmbeddedResource>
-    <EmbeddedResource Include="Forms\ImportCsvForm.resx">
-      <DependentUpon>ImportCsvForm.cs</DependentUpon>
-      <SubType>Designer</SubType>
-    </EmbeddedResource>
     <EmbeddedResource Include="Forms\GroupForm.resx">
       <SubType>Designer</SubType>
       <DependentUpon>GroupForm.cs</DependentUpon>
@@ -945,6 +948,7 @@
     <Compile Include="Util\ClipboardContents.cs" />
     <Compile Include="Util\ClipboardEventChainBlocker.cs" />
     <Compile Include="Util\ClipboardUtil.cs" />
+    <Compile Include="Util\ClipboardUtil.MacOSX.cs" />
     <Compile Include="Util\ClipboardUtil.Windows.cs" />
     <Compile Include="Util\CommandLineArgs.cs" />
     <Compile Include="Ecas\EcasActionType.cs" />
@@ -973,6 +977,7 @@
     <Compile Include="Util\IpcBroadcast.Fsw.cs" />
     <Compile Include="Util\IpcUtilEx.cs" />
     <Compile Include="Util\KeyUtil.cs" />
+    <Compile Include="Util\MonoWorkarounds.cs" />
     <Compile Include="Util\NetUtil.cs" />
     <Compile Include="Util\PwGeneratorUtil.cs" />
     <Compile Include="Util\SearchUtil.cs" />
@@ -990,7 +995,9 @@
     <Compile Include="Util\TextSimilarity.cs" />
     <Compile Include="Util\UpdateCheckEx.cs" />
     <Compile Include="Util\WinUtil.cs" />
+    <Compile Include="Util\XmlSerialization\XmlSerializerEx.Gen.cs" />
     <Compile Include="Util\XmlUtil.cs" />
+    <Compile Include="Util\XmlSerialization\XmlSerializerEx.cs" />
   </ItemGroup>
   <ItemGroup>
     <None Include="Resources\Nuvola\B16x16_1DownArrow.png" />
@@ -1117,6 +1124,7 @@
   </ItemGroup>
   <ItemGroup>
     <Content Include="KeePass.ico" />
+    <None Include="Resources\Nuvola_Derived\B16x16_Key_New.png" />
     <None Include="Resources\Nuvola_Derived\B16x16_EditCopyLink.png" />
     <None Include="Resources\Images\B16x16_Imp_KasperskyPwMgr.png" />
     <None Include="Resources\Images\B16x16_Imp_StickyPw.png" />
diff --git a/KeePass/Native/NativeMethods.New.cs b/KeePass/Native/NativeMethods.New.cs
index fc22ce7..8d2c89d 100644
--- a/KeePass/Native/NativeMethods.New.cs
+++ b/KeePass/Native/NativeMethods.New.cs
@@ -435,5 +435,45 @@ namespace KeePass.Native
 			SendMessageLVGroup(lv.Handle, LVM_SETGROUPINFO,
 				new IntPtr(iGroupID), ref g);
 		} */
+
+		/* internal static int GetGroupIDByIndex(ListView lv, uint uIndex)
+		{
+			if(lv == null) { Debug.Assert(false); return 0; }
+
+			LVGROUP g = new LVGROUP();
+			g.cbSize = (uint)Marshal.SizeOf(g);
+			g.AssertSize();
+
+			g.mask = NativeMethods.LVGF_GROUPID;
+
+			if(SendMessageLVGroup(lv.Handle, LVM_GETGROUPINFOBYINDEX,
+				new IntPtr((int)uIndex), ref g) == IntPtr.Zero)
+			{
+				Debug.Assert(false);
+			}
+
+			return g.iGroupId;
+		}
+
+		internal static void SetGroupTask(ListView lv, int iGroupID,
+			string strTask)
+		{
+			if(lv == null) { Debug.Assert(false); return; }
+
+			LVGROUP g = new LVGROUP();
+			g.cbSize = (uint)Marshal.SizeOf(g);
+			g.AssertSize();
+
+			g.mask = LVGF_TASK;
+
+			g.pszTask = strTask;
+			g.cchTask = (uint)((strTask != null) ? strTask.Length : 0);
+
+			if(SendMessageLVGroup(lv.Handle, LVM_SETGROUPINFO,
+				new IntPtr(iGroupID), ref g) == (new IntPtr(-1)))
+			{
+				Debug.Assert(false);
+			}
+		} */
 	}
 }
diff --git a/KeePass/Native/NativeMethods.Structs.cs b/KeePass/Native/NativeMethods.Structs.cs
index a5eea28..6d75972 100644
--- a/KeePass/Native/NativeMethods.Structs.cs
+++ b/KeePass/Native/NativeMethods.Structs.cs
@@ -246,9 +246,10 @@ namespace KeePass.Native
 			public IntPtr pszSubtitle;
 			public uint cchSubtitle;
 
-			// [MarshalAs(UnmanagedType.LPWStr)]
+			[MarshalAs(UnmanagedType.LPWStr)]
+			public string pszTask;
 			// public StringBuilder pszTask;
-			public IntPtr pszTask;
+			// public IntPtr pszTask;
 			public uint cchTask;
 
 			// [MarshalAs(UnmanagedType.LPWStr)]
@@ -270,6 +271,20 @@ namespace KeePass.Native
 			// public StringBuilder pszSubsetTitle;
 			public IntPtr pszSubsetTitle;
 			public uint cchSubsetTitle;
+
+			[Conditional("DEBUG")]
+			internal void AssertSize()
+			{
+				if(IntPtr.Size == 4)
+				{
+					Debug.Assert(Marshal.SizeOf(this) == 96);
+				}
+				else if(IntPtr.Size == 8)
+				{
+					Debug.Assert(Marshal.SizeOf(this) == 152);
+				}
+				else { Debug.Assert(false); }
+			}
 		} */
 	}
 }
diff --git a/KeePass/Native/NativeMethods.Unix.cs b/KeePass/Native/NativeMethods.Unix.cs
index 1a59394..812a3df 100644
--- a/KeePass/Native/NativeMethods.Unix.cs
+++ b/KeePass/Native/NativeMethods.Unix.cs
@@ -29,6 +29,8 @@ using KeePass.Util;
 
 using KeePassLib.Utility;
 
+using KeeNativeLib = KeePassLib.Native;
+
 namespace KeePass.Native
 {
 	internal static partial class NativeMethods
@@ -120,7 +122,8 @@ namespace KeePass.Native
 			try
 			{
 				Application.DoEvents(); // E.g. for clipboard updates
-				string strOutput = WinUtil.RunConsoleApp("xdotool", strParams);
+				string strOutput = KeeNativeLib.NativeLib.RunConsoleApp(
+					"xdotool", strParams);
 				Application.DoEvents(); // E.g. for clipboard updates
 				return (strOutput ?? string.Empty);
 			}
diff --git a/KeePass/Plugins/PlgxCache.cs b/KeePass/Plugins/PlgxCache.cs
index 4bc3d8e..fa6acf2 100644
--- a/KeePass/Plugins/PlgxCache.cs
+++ b/KeePass/Plugins/PlgxCache.cs
@@ -30,6 +30,7 @@ using KeePass.App.Configuration;
 using KeePass.Util.Spr;
 
 using KeePassLib;
+using KeePassLib.Native;
 using KeePassLib.Utility;
 
 namespace KeePass.Plugins
@@ -38,29 +39,56 @@ namespace KeePass.Plugins
 	{
 		private const string CacheDirName = "PluginCache";
 
-		private static string m_strAppID = null;
+		private static string m_strAppEnvID = null;
 
-		private static string GetAppID()
+		private static string GetAppEnvID()
 		{
-			if(m_strAppID != null) return m_strAppID;
+			if(m_strAppEnvID != null) return m_strAppEnvID;
 
+			StringBuilder sb = new StringBuilder();
+
+			Assembly asm = null;
+			AssemblyName asmName = null;
 			try
 			{
-				Assembly asm = Assembly.GetExecutingAssembly();
-				AssemblyName n = asm.GetName();
-				m_strAppID = n.Version.ToString(4);
-			}
-			catch(Exception)
-			{
-				Debug.Assert(false);
-				m_strAppID = PwDefs.VersionString;
+				asm = Assembly.GetExecutingAssembly();
+				asmName = asm.GetName();
 			}
+			catch(Exception) { Debug.Assert(false); }
+
+			try { sb.Append(asmName.Version.ToString(4)); }
+			catch(Exception) { Debug.Assert(false); sb.Append(PwDefs.VersionString); }
 
 #if DEBUG
-			m_strAppID += "d";
+			sb.Append("d");
 #endif
 
-			return m_strAppID;
+			sb.Append(",PK=");
+			try
+			{
+				byte[] pk = asmName.GetPublicKeyToken();
+				sb.Append(Convert.ToBase64String(pk, Base64FormattingOptions.None));
+			}
+			catch(Exception) { Debug.Assert(false); sb.Append('?'); }
+
+			sb.Append(",CLR=");
+			sb.Append(Environment.Version.ToString(4));
+			sb.Append(",Ptr=");
+			sb.Append(IntPtr.Size.ToString());
+
+			sb.Append(",OS=");
+			PlatformID p = NativeLib.GetPlatformID();
+			if((p == PlatformID.Win32NT) || (p == PlatformID.Win32S) ||
+				(p == PlatformID.Win32Windows))
+				sb.Append("Win");
+			else if(p == PlatformID.WinCE) sb.Append("WinCE");
+			else if(p == PlatformID.Xbox) sb.Append("Xbox");
+			else if(p == PlatformID.Unix) sb.Append("Unix");
+			else if(p == PlatformID.MacOSX) sb.Append("MacOSX");
+			else sb.Append('?');
+
+			m_strAppEnvID = sb.ToString();
+			return m_strAppEnvID;
 		}
 
 		public static string GetCacheRoot()
@@ -77,7 +105,7 @@ namespace KeePass.Plugins
 				}
 			}
 
-			string strDataDir = AppConfigSerializer.AppDataDirectory;
+			string strDataDir = AppConfigSerializer.LocalAppDataDirectory;
 			// try
 			// {
 			//	DirectoryInfo diAppData = new DirectoryInfo(strDataDir);
@@ -95,15 +123,27 @@ namespace KeePass.Plugins
 			return (strDataDir + Path.DirectorySeparatorChar + CacheDirName);
 		}
 
-		public static string GetCacheDirectory(PwUuid pwPluginUuid, bool bEnsureExists)
+		public static string GetCacheDirectory(PlgxPluginInfo plgx, bool bEnsureExists)
 		{
-			string strPlgID = Convert.ToBase64String(pwPluginUuid.UuidBytes,
-				Base64FormattingOptions.None);
-			strPlgID = StrUtil.AlphaNumericOnly(strPlgID);
-			if(strPlgID.Length > 16) strPlgID = strPlgID.Substring(0, 16);
+			if(plgx == null) { Debug.Assert(false); return null; }
+
+			StringBuilder sb = new StringBuilder();
+			sb.Append(plgx.BaseFileName);
+			sb.Append(':');
+			sb.Append(Convert.ToBase64String(plgx.FileUuid.UuidBytes,
+				Base64FormattingOptions.None));
+			sb.Append(';');
+			sb.Append(GetAppEnvID());
 
-			string strDir = GetCacheRoot() + Path.DirectorySeparatorChar +
-				strPlgID + "_" + GetAppID();
+			byte[] pbID = StrUtil.Utf8.GetBytes(sb.ToString());
+			SHA256Managed sha256 = new SHA256Managed();
+			byte[] pbHash = sha256.ComputeHash(pbID);
+
+			string strHash = Convert.ToBase64String(pbHash, Base64FormattingOptions.None);
+			strHash = StrUtil.AlphaNumericOnly(strHash);
+			if(strHash.Length > 20) strHash = strHash.Substring(0, 20);
+
+			string strDir = GetCacheRoot() + Path.DirectorySeparatorChar + strHash;
 
 			if(bEnsureExists && !Directory.Exists(strDir))
 				Directory.CreateDirectory(strDir);
@@ -111,29 +151,33 @@ namespace KeePass.Plugins
 			return strDir;
 		}
 
-		public static string GetCacheFile(PwUuid pwPluginUuid, bool bMustExist,
+		public static string GetCacheFile(PlgxPluginInfo plgx, bool bMustExist,
 			bool bCreateDirectory)
 		{
-			if(pwPluginUuid == null) return null;
+			if(plgx == null) { Debug.Assert(false); return null; }
+
+			// byte[] pbID = new byte[(int)PwUuid.UuidSize];
+			// Array.Copy(pwPluginUuid.UuidBytes, 0, pbID, 0, pbID.Length);
+			// Array.Reverse(pbID);
+			// string strID = Convert.ToBase64String(pbID, Base64FormattingOptions.None);
+			// strID = StrUtil.AlphaNumericOnly(strID);
+			// if(strID.Length > 8) strID = strID.Substring(0, 8);
 
-			byte[] pbID = new byte[(int)PwUuid.UuidSize];
-			Array.Copy(pwPluginUuid.UuidBytes, 0, pbID, 0, pbID.Length);
-			Array.Reverse(pbID);
-			string strID = Convert.ToBase64String(pbID, Base64FormattingOptions.None);
-			strID = StrUtil.AlphaNumericOnly(strID);
-			if(strID.Length > 8) strID = strID.Substring(0, 8);
+			string strFileName = StrUtil.AlphaNumericOnly(plgx.BaseFileName);
+			if(strFileName.Length == 0) strFileName = "Plugin";
+			strFileName += ".dll";
 
-			string strDir = GetCacheDirectory(pwPluginUuid, bCreateDirectory);
-			string strPlugin = strDir + Path.DirectorySeparatorChar + strID + ".dll";
-			bool bExists = File.Exists(strPlugin);
+			string strDir = GetCacheDirectory(plgx, bCreateDirectory);
+			string strPath = strDir + Path.DirectorySeparatorChar + strFileName;
+			bool bExists = File.Exists(strPath);
 
 			if(bMustExist && bExists)
 			{
-				try { File.SetLastAccessTime(strPlugin, DateTime.Now); }
+				try { File.SetLastAccessTime(strPath, DateTime.Now); }
 				catch(Exception) { } // Might be locked by other KeePass instance
 			}
 
-			if(!bMustExist || bExists) return strPlugin;
+			if(!bMustExist || bExists) return strPath;
 			return null;
 		}
 
@@ -141,7 +185,7 @@ namespace KeePass.Plugins
 		{
 			if(string.IsNullOrEmpty(strAssemblyPath)) { Debug.Assert(false); return null; }
 
-			string strNewFile = GetCacheFile(plgx.FileUuid, false, true);
+			string strNewFile = GetCacheFile(plgx, false, true);
 			File.Copy(strAssemblyPath, strNewFile, true);
 
 			return strNewFile;
@@ -152,7 +196,7 @@ namespace KeePass.Plugins
 			if(string.IsNullOrEmpty(strNormalFile)) { Debug.Assert(false); return null; }
 
 			string strNewFile = UrlUtil.EnsureTerminatingSeparator(GetCacheDirectory(
-				plgx.FileUuid, true), false) + UrlUtil.GetFileName(strNormalFile);
+				plgx, true), false) + UrlUtil.GetFileName(strNormalFile);
 			File.Copy(strNormalFile, strNewFile, true);
 
 			return strNewFile;
diff --git a/KeePass/Plugins/PlgxCsprojLoader.cs b/KeePass/Plugins/PlgxCsprojLoader.cs
index c1f3949..df04d83 100644
--- a/KeePass/Plugins/PlgxCsprojLoader.cs
+++ b/KeePass/Plugins/PlgxCsprojLoader.cs
@@ -130,8 +130,7 @@ namespace KeePass.Plugins
 			if((xnInc == null) || string.IsNullOrEmpty(xnInc.Value)) { Debug.Assert(false); return; }
 			string str = xnInc.Value;
 
-			if((str == PwDefs.ShortProductName) || str.StartsWith(
-				PwDefs.ShortProductName + ",", StrUtil.CaseIgnoreCmp))
+			if(UrlUtil.AssemblyEquals(str, PwDefs.ShortProductName))
 				return; // Ignore KeePass references
 
 			foreach(XmlNode xnSub in xn.ChildNodes)
diff --git a/KeePass/Plugins/PlgxPlugin.cs b/KeePass/Plugins/PlgxPlugin.cs
index d101514..30df3d0 100644
--- a/KeePass/Plugins/PlgxPlugin.cs
+++ b/KeePass/Plugins/PlgxPlugin.cs
@@ -230,8 +230,7 @@ namespace KeePass.Plugins
 					if(bContent.HasValue)
 						throw new PlgxException(KLRes.FileCorrupted);
 
-					string strCached = PlgxCache.GetCacheFile(plgx.FileUuid, true,
-						false);
+					string strCached = PlgxCache.GetCacheFile(plgx, true, false);
 					if(!string.IsNullOrEmpty(strCached) && plgx.AllowCached)
 					{
 						strPluginPath = strCached;
@@ -427,14 +426,14 @@ namespace KeePass.Plugins
 			string strKP = Program.CommandLineArgs[AppDefs.CommandLineOptions.PlgxPrereqKP];
 			if(!string.IsNullOrEmpty(strKP))
 			{
-				ulong uKP = StrUtil.GetVersion(strKP);
+				ulong uKP = StrUtil.ParseVersion(strKP);
 				if(uKP != 0) WriteObject(bw, PlgxPrereqKP, MemUtil.UInt64ToBytes(uKP));
 			}
 
 			string strNet = Program.CommandLineArgs[AppDefs.CommandLineOptions.PlgxPrereqNet];
 			if(!string.IsNullOrEmpty(strNet))
 			{
-				ulong uNet = StrUtil.GetVersion(strNet);
+				ulong uNet = StrUtil.ParseVersion(strNet);
 				if(uNet != 0) WriteObject(bw, PlgxPrereqNet, MemUtil.UInt64ToBytes(uNet));
 			}
 
@@ -510,9 +509,8 @@ namespace KeePass.Plugins
 			}
 
 			CompilerParameters cp = plgx.CompilerParameters;
-			cp.OutputAssembly = UrlUtil.EnsureTerminatingSeparator(strTmpRoot,
-				false) + UrlUtil.GetFileName(PlgxCache.GetCacheFile(plgx.FileUuid,
-				false, false));
+			cp.OutputAssembly = UrlUtil.EnsureTerminatingSeparator(strTmpRoot, false) +
+				UrlUtil.GetFileName(PlgxCache.GetCacheFile(plgx, false, false));
 			cp.GenerateExecutable = false;
 			cp.GenerateInMemory = false;
 			cp.IncludeDebugInformation = false;
@@ -530,7 +528,8 @@ namespace KeePass.Plugins
 				vCompilers = new string[] {
 					null,
 					"v4", // Suggested in CodeDomProvider.CreateProvider doc
-					"v4.0", // Apparently works for most people
+					"v4.0", // Suggested in community content of the above
+					"v4.0.30319", // Deduced from file system
 					"v3.5"
 				};
 			}
@@ -539,7 +538,8 @@ namespace KeePass.Plugins
 				vCompilers = new string[] {
 					null, "v3.5",
 					"v4", // Suggested in CodeDomProvider.CreateProvider doc
-					"v4.0" // Apparently works for most people
+					"v4.0", // Suggested in community content of the above
+					"v4.0.30319" // Deduced from file system
 				};
 			}
 
@@ -577,6 +577,29 @@ namespace KeePass.Plugins
 		private static bool CompileAssembly(PlgxPluginInfo plgx,
 			ref CompilerResults cr, string strCompilerVersion)
 		{
+			const string StrCoreRef = "System.Core";
+			const string StrCoreDll = "System.Core.dll";
+			bool bHasCore = false, bCoreAdded = false;
+			foreach(string strAsm in plgx.CompilerParameters.ReferencedAssemblies)
+			{
+				if(UrlUtil.AssemblyEquals(strAsm, StrCoreRef))
+				{
+					bHasCore = true;
+					break;
+				}
+			}
+			if((strCompilerVersion != null) && strCompilerVersion.StartsWith(
+				"v", StrUtil.CaseIgnoreCmp))
+			{
+				ulong v = StrUtil.ParseVersion(strCompilerVersion.Substring(1));
+				if(!bHasCore && (v >= 0x0003000500000000UL))
+				{
+					plgx.CompilerParameters.ReferencedAssemblies.Add(StrCoreDll);
+					bCoreAdded = true;
+				}
+			}
+
+			bool bResult = false;
 			try
 			{
 				Dictionary<string, string> dictOpt = new Dictionary<string, string>();
@@ -599,12 +622,15 @@ namespace KeePass.Plugins
 				cr = cdp.CompileAssemblyFromFile(plgx.CompilerParameters,
 					plgx.SourceFiles.ToArray());
 
-				return ((cr.Errors == null) || !cr.Errors.HasErrors);
+				bResult = ((cr.Errors == null) || !cr.Errors.HasErrors);
 			}
 			catch(Exception) { }
 
+			if(bCoreAdded)
+				plgx.CompilerParameters.ReferencedAssemblies.Remove(StrCoreDll);
+
 			// cr = null; // Keep previous results for output
-			return false;
+			return bResult;
 		}
 
 		private static void SaveCompilerResults(PlgxPluginInfo plgx,
diff --git a/KeePass/Program.cs b/KeePass/Program.cs
index 97c674c..82f50a2 100644
--- a/KeePass/Program.cs
+++ b/KeePass/Program.cs
@@ -36,6 +36,7 @@ using KeePass.Native;
 using KeePass.Resources;
 using KeePass.UI;
 using KeePass.Util;
+using KeePass.Util.XmlSerialization;
 using KeePass.Ecas;
 using KeePass.Plugins;
 
@@ -202,40 +203,7 @@ namespace KeePass
 			Application.SetCompatibleTextRenderingDefault(false);
 			Application.DoEvents(); // Required
 
-			int nRandomSeed = (int)DateTime.UtcNow.Ticks;
-			// Prevent overflow (see Random class constructor)
-			if(nRandomSeed == int.MinValue) nRandomSeed = 17;
-			m_rndGlobal = new Random(nRandomSeed);
-
-			InitEnvSecurity();
-
-			try { SelfTest.TestFipsComplianceProblems(); }
-			catch(Exception exFips)
-			{
-				MessageService.ShowWarning(KPRes.SelfTestFailed, exFips);
-				return;
-			}
-
-			// Set global localized strings
-			PwDatabase.LocalizedAppName = PwDefs.ShortProductName;
-			Kdb4File.DetermineLanguageId();
-
-			m_appConfig = AppConfigSerializer.Load();
-			if(m_appConfig.Logging.Enabled)
-				AppLogEx.Open(PwDefs.ShortProductName);
-
-			AppPolicy.Current = m_appConfig.Security.Policy.CloneDeep();
-			IOConnection.SetProxy(m_appConfig.Integration.ProxyType,
-				m_appConfig.Integration.ProxyAddress, m_appConfig.Integration.ProxyPort,
-				m_appConfig.Integration.ProxyUserName, m_appConfig.Integration.ProxyPassword);
-
-			m_ecasTriggers = m_appConfig.Application.TriggerSystem;
-			m_ecasTriggers.SetToInitialState();
-
-			string strHelpFile = UrlUtil.StripExtension(WinUtil.GetExecutable()) + ".chm";
-			AppHelp.LocalHelpFile = strHelpFile;
-
-			LoadTranslation();
+			if(!CommonInit()) { CommonTerminate(); return; }
 
 			if(m_appConfig.Application.Start.PluginCacheClearOnce)
 			{
@@ -346,6 +314,12 @@ namespace KeePass
 				MainCleanUp();
 				return;
 			}
+			else if(m_cmdLineArgs[AppDefs.CommandLineOptions.MakeXmlSerializerEx] != null)
+			{
+				XmlSerializerEx.GenerateSerializers(m_cmdLineArgs);
+				MainCleanUp();
+				return;
+			}
 #if (DEBUG && !KeePassLibSD)
 			else if(m_cmdLineArgs[AppDefs.CommandLineOptions.MakePopularPasswordTable] != null)
 			{
@@ -438,6 +412,55 @@ namespace KeePass
 			// if(mSingleLock != null) { GC.KeepAlive(mSingleLock); }
 		}
 
+		/// <summary>
+		/// Common program initialization function that can also be
+		/// used by applications that use KeePass as a library
+		/// (like e.g. KPScript).
+		/// </summary>
+		public static bool CommonInit()
+		{
+			int nRandomSeed = (int)DateTime.UtcNow.Ticks;
+			// Prevent overflow (see Random class constructor)
+			if(nRandomSeed == int.MinValue) nRandomSeed = 17;
+			m_rndGlobal = new Random(nRandomSeed);
+
+			InitEnvSecurity();
+
+			try { SelfTest.TestFipsComplianceProblems(); }
+			catch(Exception exFips)
+			{
+				MessageService.ShowWarning(KPRes.SelfTestFailed, exFips);
+				return false;
+			}
+
+			// Set global localized strings
+			PwDatabase.LocalizedAppName = PwDefs.ShortProductName;
+			Kdb4File.DetermineLanguageId();
+
+			m_appConfig = AppConfigSerializer.Load();
+			if(m_appConfig.Logging.Enabled)
+				AppLogEx.Open(PwDefs.ShortProductName);
+
+			AppPolicy.Current = m_appConfig.Security.Policy.CloneDeep();
+			IOConnection.SetProxy(m_appConfig.Integration.ProxyType,
+				m_appConfig.Integration.ProxyAddress, m_appConfig.Integration.ProxyPort,
+				m_appConfig.Integration.ProxyUserName, m_appConfig.Integration.ProxyPassword);
+
+			m_ecasTriggers = m_appConfig.Application.TriggerSystem;
+			m_ecasTriggers.SetToInitialState();
+
+			string strHelpFile = UrlUtil.StripExtension(WinUtil.GetExecutable()) + ".chm";
+			AppHelp.LocalHelpFile = strHelpFile;
+
+			LoadTranslation();
+			return true;
+		}
+
+		public static void CommonTerminate()
+		{
+			AppLogEx.Close();
+		}
+
 		private static void MainCleanUp()
 		{
 			IpcBroadcast.StopServer();
@@ -446,9 +469,9 @@ namespace KeePass
 
 			EntryMenu.Destroy();
 
-			AppLogEx.Close();
-
 			GlobalMutexPool.ReleaseAll();
+
+			CommonTerminate();
 		}
 
 		private static void InitEnvSecurity()
@@ -575,7 +598,7 @@ namespace KeePass
 		private static void LoadTranslation()
 		{
 			string strLangFile = m_appConfig.Application.LanguageFile;
-			if((strLangFile != null) && (strLangFile.Length > 0))
+			if(!string.IsNullOrEmpty(strLangFile))
 			{
 				string[] vLangDirs = new string[]{
 					AppConfigSerializer.AppDataDirectory,
@@ -590,7 +613,8 @@ namespace KeePass
 
 					try
 					{
-						m_kpTranslation = KPTranslation.LoadFromFile(strLangPath);
+						XmlSerializerEx xs = new XmlSerializerEx(typeof(KPTranslation));
+						m_kpTranslation = KPTranslation.LoadFromFile(strLangPath, xs);
 
 						KPRes.SetTranslatedStrings(
 							m_kpTranslation.SafeGetStringTableDictionary(
@@ -608,5 +632,19 @@ namespace KeePass
 				}
 			}
 		}
+
+		internal static bool IsDevelopmentSnapshot()
+		{
+			try
+			{
+				Assembly asm = Assembly.GetExecutingAssembly();
+				byte[] pk = asm.GetName().GetPublicKeyToken();
+				string strPk = MemUtil.ByteArrayToHexString(pk);
+				return !strPk.Equals("fed2ed7716aecf5c", StrUtil.CaseIgnoreCmp);
+			}
+			catch(Exception) { Debug.Assert(false); }
+
+			return false;
+		}
 	}
 }
diff --git a/KeePass/Properties/AssemblyInfo.cs b/KeePass/Properties/AssemblyInfo.cs
index e822870..9ed86df 100644
--- a/KeePass/Properties/AssemblyInfo.cs
+++ b/KeePass/Properties/AssemblyInfo.cs
@@ -38,5 +38,5 @@ using System.Runtime.InteropServices;
 [assembly: Guid("02020c52-c0da-47c0-9f3f-a6fe76cee400")]
 
 // Assembly version information
-[assembly: AssemblyVersion("2.1.8.*")]
-[assembly: AssemblyFileVersion("2.1.8.0")]
+[assembly: AssemblyVersion("2.19.0.*")]
+[assembly: AssemblyFileVersion("2.19.0.0")]
diff --git a/KeePass/Properties/Resources.Designer.cs b/KeePass/Properties/Resources.Designer.cs
index 292e4c4..b3977f4 100644
--- a/KeePass/Properties/Resources.Designer.cs
+++ b/KeePass/Properties/Resources.Designer.cs
@@ -1,7 +1,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
-//     Runtime Version:2.0.50727.5446
+//     Runtime Version:2.0.50727.5448
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -60,13 +60,6 @@ namespace KeePass.Properties {
             }
         }
         
-        internal static System.Drawing.Bitmap B15x13_KGPG_Gen {
-            get {
-                object obj = ResourceManager.GetObject("B15x13_KGPG_Gen", resourceCulture);
-                return ((System.Drawing.Bitmap)(obj));
-            }
-        }
-        
         internal static System.Drawing.Bitmap B15x14_FileNew {
             get {
                 object obj = ResourceManager.GetObject("B15x14_FileNew", resourceCulture);
@@ -662,6 +655,13 @@ namespace KeePass.Properties {
             }
         }
         
+        internal static System.Drawing.Bitmap B16x16_Key_New {
+            get {
+                object obj = ResourceManager.GetObject("B16x16_Key_New", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
         internal static System.Drawing.Bitmap B16x16_Keyboard_Layout {
             get {
                 object obj = ResourceManager.GetObject("B16x16_Keyboard_Layout", resourceCulture);
diff --git a/KeePass/Properties/Resources.resx b/KeePass/Properties/Resources.resx
index 165f24f..686cff6 100644
--- a/KeePass/Properties/Resources.resx
+++ b/KeePass/Properties/Resources.resx
@@ -118,9 +118,6 @@
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
   <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
-  <data name="B15x13_KGPG_Gen" type="System.Resources.ResXFileRef, System.Windows.Forms">
-    <value>..\Resources\Nuvola_Derived\B15x13_KGPG_Gen.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
-  </data>
   <data name="B16x16_Reload_Page" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\Nuvola\B16x16_Reload_Page.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
@@ -574,4 +571,7 @@
   <data name="B16x16_EditCopyLink" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\Nuvola_Derived\B16x16_EditCopyLink.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="B16x16_Key_New" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\Nuvola_Derived\B16x16_Key_New.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/KeePass/Resources/KPRes.Generated.cs b/KeePass/Resources/KPRes.Generated.cs
index 181a09b..8bcb45b 100644
--- a/KeePass/Resources/KPRes.Generated.cs
+++ b/KeePass/Resources/KPRes.Generated.cs
@@ -60,6 +60,7 @@ namespace KeePass.Resources
 			m_strAttachNewRenameRemarks1 = TryGetEx(dictNew, "AttachNewRenameRemarks1", m_strAttachNewRenameRemarks1);
 			m_strAttachNewRenameRemarks2 = TryGetEx(dictNew, "AttachNewRenameRemarks2", m_strAttachNewRenameRemarks2);
 			m_strAuthor = TryGetEx(dictNew, "Author", m_strAuthor);
+			m_strAuto = TryGetEx(dictNew, "Auto", m_strAuto);
 			m_strAutoCreateNew = TryGetEx(dictNew, "AutoCreateNew", m_strAutoCreateNew);
 			m_strAutoGeneratedPasswordSettings = TryGetEx(dictNew, "AutoGeneratedPasswordSettings", m_strAutoGeneratedPasswordSettings);
 			m_strAutoRememberOpenLastFile = TryGetEx(dictNew, "AutoRememberOpenLastFile", m_strAutoRememberOpenLastFile);
@@ -72,6 +73,7 @@ namespace KeePass.Resources
 			m_strAutoTypeEntrySelectionDescLong = TryGetEx(dictNew, "AutoTypeEntrySelectionDescLong", m_strAutoTypeEntrySelectionDescLong);
 			m_strAutoTypeEntrySelectionDescShort = TryGetEx(dictNew, "AutoTypeEntrySelectionDescShort", m_strAutoTypeEntrySelectionDescShort);
 			m_strAutoTypeGlobalHint = TryGetEx(dictNew, "AutoTypeGlobalHint", m_strAutoTypeGlobalHint);
+			m_strAutoTypeMatchByTagInTitle = TryGetEx(dictNew, "AutoTypeMatchByTagInTitle", m_strAutoTypeMatchByTagInTitle);
 			m_strAutoTypeMatchByTitle = TryGetEx(dictNew, "AutoTypeMatchByTitle", m_strAutoTypeMatchByTitle);
 			m_strAutoTypeMatchByUrlHostInTitle = TryGetEx(dictNew, "AutoTypeMatchByUrlHostInTitle", m_strAutoTypeMatchByUrlHostInTitle);
 			m_strAutoTypeMatchByUrlInTitle = TryGetEx(dictNew, "AutoTypeMatchByUrlInTitle", m_strAutoTypeMatchByUrlInTitle);
@@ -110,6 +112,7 @@ namespace KeePass.Resources
 			m_strClipboardViewerIgnoreFormat = TryGetEx(dictNew, "ClipboardViewerIgnoreFormat", m_strClipboardViewerIgnoreFormat);
 			m_strCloseButton = TryGetEx(dictNew, "CloseButton", m_strCloseButton);
 			m_strCloseButtonMinimizes = TryGetEx(dictNew, "CloseButtonMinimizes", m_strCloseButtonMinimizes);
+			m_strClosingDatabaseFile = TryGetEx(dictNew, "ClosingDatabaseFile", m_strClosingDatabaseFile);
 			m_strColumn = TryGetEx(dictNew, "Column", m_strColumn);
 			m_strColumns = TryGetEx(dictNew, "Columns", m_strColumns);
 			m_strCompany = TryGetEx(dictNew, "Company", m_strCompany);
@@ -208,7 +211,6 @@ namespace KeePass.Resources
 			m_strEnable = TryGetEx(dictNew, "Enable", m_strEnable);
 			m_strEnabled = TryGetEx(dictNew, "Enabled", m_strEnabled);
 			m_strEncoding = TryGetEx(dictNew, "Encoding", m_strEncoding);
-			m_strEncodingAnsi = TryGetEx(dictNew, "EncodingAnsi", m_strEncodingAnsi);
 			m_strEncodingFail = TryGetEx(dictNew, "EncodingFail", m_strEncodingFail);
 			m_strEndsWith = TryGetEx(dictNew, "EndsWith", m_strEndsWith);
 			m_strEnterCompositeKey = TryGetEx(dictNew, "EnterCompositeKey", m_strEnterCompositeKey);
@@ -239,6 +241,7 @@ namespace KeePass.Resources
 			m_strExportToPrompt = TryGetEx(dictNew, "ExportToPrompt", m_strExportToPrompt);
 			m_strFatalError = TryGetEx(dictNew, "FatalError", m_strFatalError);
 			m_strFeature = TryGetEx(dictNew, "Feature", m_strFeature);
+			m_strField = TryGetEx(dictNew, "Field", m_strField);
 			m_strFieldName = TryGetEx(dictNew, "FieldName", m_strFieldName);
 			m_strFieldNameExistsAlready = TryGetEx(dictNew, "FieldNameExistsAlready", m_strFieldNameExistsAlready);
 			m_strFieldNameInvalid = TryGetEx(dictNew, "FieldNameInvalid", m_strFieldNameInvalid);
@@ -400,10 +403,12 @@ namespace KeePass.Resources
 			m_strNavigation = TryGetEx(dictNew, "Navigation", m_strNavigation);
 			m_strNetwork = TryGetEx(dictNew, "Network", m_strNetwork);
 			m_strNeverExpires = TryGetEx(dictNew, "NeverExpires", m_strNeverExpires);
+			m_strNew = TryGetEx(dictNew, "New", m_strNew);
 			m_strNewDatabase = TryGetEx(dictNew, "NewDatabase", m_strNewDatabase);
 			m_strNewDatabaseFileName = TryGetEx(dictNew, "NewDatabaseFileName", m_strNewDatabaseFileName);
 			m_strNewerNetRequired = TryGetEx(dictNew, "NewerNetRequired", m_strNewerNetRequired);
 			m_strNewGroup = TryGetEx(dictNew, "NewGroup", m_strNewGroup);
+			m_strNewLine = TryGetEx(dictNew, "NewLine", m_strNewLine);
 			m_strNewState = TryGetEx(dictNew, "NewState", m_strNewState);
 			m_strNewVersionAvailable = TryGetEx(dictNew, "NewVersionAvailable", m_strNewVersionAvailable);
 			m_strNo = TryGetEx(dictNew, "No", m_strNo);
@@ -497,6 +502,7 @@ namespace KeePass.Resources
 			m_strRememberKeySources = TryGetEx(dictNew, "RememberKeySources", m_strRememberKeySources);
 			m_strRemoteHostReachable = TryGetEx(dictNew, "RemoteHostReachable", m_strRemoteHostReachable);
 			m_strRepairMode = TryGetEx(dictNew, "RepairMode", m_strRepairMode);
+			m_strRepeatOnlyWhenHidden = TryGetEx(dictNew, "RepeatOnlyWhenHidden", m_strRepeatOnlyWhenHidden);
 			m_strRestartKeePassQuestion = TryGetEx(dictNew, "RestartKeePassQuestion", m_strRestartKeePassQuestion);
 			m_strRootDirectory = TryGetEx(dictNew, "RootDirectory", m_strRootDirectory);
 			m_strSameKeybLayout = TryGetEx(dictNew, "SameKeybLayout", m_strSameKeybLayout);
@@ -510,6 +516,8 @@ namespace KeePass.Resources
 			m_strSavedDatabaseFile = TryGetEx(dictNew, "SavedDatabaseFile", m_strSavedDatabaseFile);
 			m_strSavingDatabase = TryGetEx(dictNew, "SavingDatabase", m_strSavingDatabase);
 			m_strSavingDatabaseFile = TryGetEx(dictNew, "SavingDatabaseFile", m_strSavingDatabaseFile);
+			m_strSavingPost = TryGetEx(dictNew, "SavingPost", m_strSavingPost);
+			m_strSavingPre = TryGetEx(dictNew, "SavingPre", m_strSavingPre);
 			m_strScheme = TryGetEx(dictNew, "Scheme", m_strScheme);
 			m_strSearch = TryGetEx(dictNew, "Search", m_strSearch);
 			m_strSearchDesc = TryGetEx(dictNew, "SearchDesc", m_strSearchDesc);
@@ -636,6 +644,7 @@ namespace KeePass.Resources
 			m_strViewEntry = TryGetEx(dictNew, "ViewEntry", m_strViewEntry);
 			m_strViewEntryDesc = TryGetEx(dictNew, "ViewEntryDesc", m_strViewEntryDesc);
 			m_strWait = TryGetEx(dictNew, "Wait", m_strWait);
+			m_strWaitForExit = TryGetEx(dictNew, "WaitForExit", m_strWaitForExit);
 			m_strWarnings = TryGetEx(dictNew, "Warnings", m_strWarnings);
 			m_strWebBrowser = TryGetEx(dictNew, "WebBrowser", m_strWebBrowser);
 			m_strWebSiteLogin = TryGetEx(dictNew, "WebSiteLogin", m_strWebSiteLogin);
@@ -649,6 +658,7 @@ namespace KeePass.Resources
 			m_strXslSelectFile = TryGetEx(dictNew, "XslSelectFile", m_strXslSelectFile);
 			m_strXslStylesheets = TryGetEx(dictNew, "XslStylesheets", m_strXslStylesheets);
 			m_strYes = TryGetEx(dictNew, "Yes", m_strYes);
+			m_strZoom = TryGetEx(dictNew, "Zoom", m_strZoom);
 		}
 
 		private static readonly string[] m_vKeyNames = {
@@ -686,6 +696,7 @@ namespace KeePass.Resources
 			"AttachNewRenameRemarks1",
 			"AttachNewRenameRemarks2",
 			"Author",
+			"Auto",
 			"AutoCreateNew",
 			"AutoGeneratedPasswordSettings",
 			"AutoRememberOpenLastFile",
@@ -698,6 +709,7 @@ namespace KeePass.Resources
 			"AutoTypeEntrySelectionDescLong",
 			"AutoTypeEntrySelectionDescShort",
 			"AutoTypeGlobalHint",
+			"AutoTypeMatchByTagInTitle",
 			"AutoTypeMatchByTitle",
 			"AutoTypeMatchByUrlHostInTitle",
 			"AutoTypeMatchByUrlInTitle",
@@ -736,6 +748,7 @@ namespace KeePass.Resources
 			"ClipboardViewerIgnoreFormat",
 			"CloseButton",
 			"CloseButtonMinimizes",
+			"ClosingDatabaseFile",
 			"Column",
 			"Columns",
 			"Company",
@@ -834,7 +847,6 @@ namespace KeePass.Resources
 			"Enable",
 			"Enabled",
 			"Encoding",
-			"EncodingAnsi",
 			"EncodingFail",
 			"EndsWith",
 			"EnterCompositeKey",
@@ -865,6 +877,7 @@ namespace KeePass.Resources
 			"ExportToPrompt",
 			"FatalError",
 			"Feature",
+			"Field",
 			"FieldName",
 			"FieldNameExistsAlready",
 			"FieldNameInvalid",
@@ -1026,10 +1039,12 @@ namespace KeePass.Resources
 			"Navigation",
 			"Network",
 			"NeverExpires",
+			"New",
 			"NewDatabase",
 			"NewDatabaseFileName",
 			"NewerNetRequired",
 			"NewGroup",
+			"NewLine",
 			"NewState",
 			"NewVersionAvailable",
 			"No",
@@ -1123,6 +1138,7 @@ namespace KeePass.Resources
 			"RememberKeySources",
 			"RemoteHostReachable",
 			"RepairMode",
+			"RepeatOnlyWhenHidden",
 			"RestartKeePassQuestion",
 			"RootDirectory",
 			"SameKeybLayout",
@@ -1136,6 +1152,8 @@ namespace KeePass.Resources
 			"SavedDatabaseFile",
 			"SavingDatabase",
 			"SavingDatabaseFile",
+			"SavingPost",
+			"SavingPre",
 			"Scheme",
 			"Search",
 			"SearchDesc",
@@ -1262,6 +1280,7 @@ namespace KeePass.Resources
 			"ViewEntry",
 			"ViewEntryDesc",
 			"Wait",
+			"WaitForExit",
 			"Warnings",
 			"WebBrowser",
 			"WebSiteLogin",
@@ -1274,7 +1293,8 @@ namespace KeePass.Resources
 			"XslFileType",
 			"XslSelectFile",
 			"XslStylesheets",
-			"Yes"
+			"Yes",
+			"Zoom"
 		};
 
 		public static string[] GetKeyNames()
@@ -1656,6 +1676,17 @@ namespace KeePass.Resources
 			get { return m_strAuthor; }
 		}
 
+		private static string m_strAuto =
+			@"Auto";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'Auto'.
+		/// </summary>
+		public static string Auto
+		{
+			get { return m_strAuto; }
+		}
+
 		private static string m_strAutoCreateNew =
 			@"Automatically create new";
 		/// <summary>
@@ -1788,6 +1819,17 @@ namespace KeePass.Resources
 			get { return m_strAutoTypeGlobalHint; }
 		}
 
+		private static string m_strAutoTypeMatchByTagInTitle =
+			@"An entry matches if one of its tags is contained in the target window title";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'An entry matches if one of its tags is contained in the target window title'.
+		/// </summary>
+		public static string AutoTypeMatchByTagInTitle
+		{
+			get { return m_strAutoTypeMatchByTagInTitle; }
+		}
+
 		private static string m_strAutoTypeMatchByTitle =
 			@"An entry matches if its title is contained in the target window title";
 		/// <summary>
@@ -2206,6 +2248,17 @@ namespace KeePass.Resources
 			get { return m_strCloseButtonMinimizes; }
 		}
 
+		private static string m_strClosingDatabaseFile =
+			@"Closing database file";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'Closing database file'.
+		/// </summary>
+		public static string ClosingDatabaseFile
+		{
+			get { return m_strClosingDatabaseFile; }
+		}
+
 		private static string m_strColumn =
 			@"Column";
 		/// <summary>
@@ -3284,17 +3337,6 @@ namespace KeePass.Resources
 			get { return m_strEncoding; }
 		}
 
-		private static string m_strEncodingAnsi =
-			@"Default ANSI (System)";
-		/// <summary>
-		/// Look up a localized string similar to
-		/// 'Default ANSI (System)'.
-		/// </summary>
-		public static string EncodingAnsi
-		{
-			get { return m_strEncodingAnsi; }
-		}
-
 		private static string m_strEncodingFail =
 			@"Selected encoding is invalid. The file cannot be interpreted using the selected encoding.";
 		/// <summary>
@@ -3625,6 +3667,17 @@ namespace KeePass.Resources
 			get { return m_strFeature; }
 		}
 
+		private static string m_strField =
+			@"Field";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'Field'.
+		/// </summary>
+		public static string Field
+		{
+			get { return m_strField; }
+		}
+
 		private static string m_strFieldName =
 			@"Field Name";
 		/// <summary>
@@ -5396,6 +5449,17 @@ namespace KeePass.Resources
 			get { return m_strNeverExpires; }
 		}
 
+		private static string m_strNew =
+			@"New";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'New'.
+		/// </summary>
+		public static string New
+		{
+			get { return m_strNew; }
+		}
+
 		private static string m_strNewDatabase =
 			@"New Database";
 		/// <summary>
@@ -5440,6 +5504,17 @@ namespace KeePass.Resources
 			get { return m_strNewGroup; }
 		}
 
+		private static string m_strNewLine =
+			@"New line";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'New line'.
+		/// </summary>
+		public static string NewLine
+		{
+			get { return m_strNewLine; }
+		}
+
 		private static string m_strNewState =
 			@"New state";
 		/// <summary>
@@ -6463,6 +6538,17 @@ namespace KeePass.Resources
 			get { return m_strRepairMode; }
 		}
 
+		private static string m_strRepeatOnlyWhenHidden =
+			@"Require password repetition only when hiding using asterisks is enabled";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'Require password repetition only when hiding using asterisks is enabled'.
+		/// </summary>
+		public static string RepeatOnlyWhenHidden
+		{
+			get { return m_strRepeatOnlyWhenHidden; }
+		}
+
 		private static string m_strRestartKeePassQuestion =
 			@"Do you wish to restart KeePass now?";
 		/// <summary>
@@ -6606,6 +6692,28 @@ namespace KeePass.Resources
 			get { return m_strSavingDatabaseFile; }
 		}
 
+		private static string m_strSavingPost =
+			@"after saving";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'after saving'.
+		/// </summary>
+		public static string SavingPost
+		{
+			get { return m_strSavingPost; }
+		}
+
+		private static string m_strSavingPre =
+			@"before saving";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'before saving'.
+		/// </summary>
+		public static string SavingPre
+		{
+			get { return m_strSavingPre; }
+		}
+
 		private static string m_strScheme =
 			@"Scheme";
 		/// <summary>
@@ -7992,6 +8100,17 @@ namespace KeePass.Resources
 			get { return m_strWait; }
 		}
 
+		private static string m_strWaitForExit =
+			@"Wait for exit";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'Wait for exit'.
+		/// </summary>
+		public static string WaitForExit
+		{
+			get { return m_strWaitForExit; }
+		}
+
 		private static string m_strWarnings =
 			@"Warnings";
 		/// <summary>
@@ -8134,5 +8253,16 @@ namespace KeePass.Resources
 		{
 			get { return m_strYes; }
 		}
+
+		private static string m_strZoom =
+			@"Zoom";
+		/// <summary>
+		/// Look up a localized string similar to
+		/// 'Zoom'.
+		/// </summary>
+		public static string Zoom
+		{
+			get { return m_strZoom; }
+		}
 	}
 }
diff --git a/KeePass/Resources/Nuvola_Derived/B15x13_KGPG_Gen.png b/KeePass/Resources/Nuvola_Derived/B15x13_KGPG_Gen.png
deleted file mode 100644
index 4e8989f..0000000
Binary files a/KeePass/Resources/Nuvola_Derived/B15x13_KGPG_Gen.png and /dev/null differ
diff --git a/KeePass/Resources/Nuvola_Derived/B16x16_Key_New.png b/KeePass/Resources/Nuvola_Derived/B16x16_Key_New.png
new file mode 100644
index 0000000..de21b88
Binary files /dev/null and b/KeePass/Resources/Nuvola_Derived/B16x16_Key_New.png differ
diff --git a/KeePass/UI/CheckedLVItemDXList.cs b/KeePass/UI/CheckedLVItemDXList.cs
index 159c65d..2281df0 100644
--- a/KeePass/UI/CheckedLVItemDXList.cs
+++ b/KeePass/UI/CheckedLVItemDXList.cs
@@ -21,10 +21,13 @@ using System;
 using System.Collections.Generic;
 using System.Text;
 using System.Windows.Forms;
-using System.Diagnostics;
+using System.Drawing;
 using System.Reflection;
+using System.Diagnostics;
 
 using KeePass.App;
+using KeePass.App.Configuration;
+using KeePass.Util;
 
 using KeePassLib.Utility;
 
@@ -43,11 +46,57 @@ namespace KeePass.UI
 	{
 		private ListView m_lv;
 
-		private List<object> m_vObjects = new List<object>();
-		private List<PropertyInfo> m_vProperties = new List<PropertyInfo>();
-		private List<ListViewItem> m_vListViewItems = new List<ListViewItem>();
+		private List<ClviInfo> m_lItems = new List<ClviInfo>();
+		private List<CheckItemLink> m_lLinks = new List<CheckItemLink>();
+
+		private bool m_bUseEnforcedConfig;
+
+		private sealed class ClviInfo
+		{
+			private object m_o; // Never null
+			public object Object { get { return m_o; } }
+
+			// private string m_strPropName; // Never null
+			// public string PropertyName { get { return m_strPropName; } }
 
-		private List<CheckItemLink> m_vLinks = new List<CheckItemLink>();
+			private PropertyInfo m_pi; // Never null
+			public PropertyInfo PropertyInfo { get { return m_pi; } }
+
+			private ListViewItem m_lvi; // Never null
+			public ListViewItem ListViewItem { get { return m_lvi; } }
+
+			public bool PropertyValue
+			{
+				get { return (bool)m_pi.GetValue(m_o, null); }
+				set { m_pi.SetValue(m_o, value, null); }
+			}
+
+			private bool m_bReadOnly = false;
+			public bool ReadOnly
+			{
+				get { return m_bReadOnly; }
+				set { m_bReadOnly = value; }
+			}
+
+			public ClviInfo(object pContainer, string strPropertyName,
+				ListViewItem lvi)
+			{
+				if(pContainer == null) throw new ArgumentNullException("pContainer");
+				if(strPropertyName == null) throw new ArgumentNullException("strPropertyName");
+				if(strPropertyName.Length == 0) throw new ArgumentException("strPropertyName");
+				// if(lvi == null) throw new ArgumentNullException("lvi");
+
+				m_o = pContainer;
+				// m_strPropName = strPropertyName;
+				m_lvi = lvi;
+
+				Type t = pContainer.GetType();
+				m_pi = t.GetProperty(strPropertyName);
+				if((m_pi == null) || (m_pi.PropertyType != typeof(bool)) ||
+					!m_pi.CanRead || !m_pi.CanWrite)
+					throw new ArgumentException("strPropertyName");
+			}
+		}
 
 		private sealed class CheckItemLink
 		{
@@ -69,11 +118,24 @@ namespace KeePass.UI
 			}
 		}
 
+		[Obsolete]
 		public CheckedLVItemDXList(ListView lv)
 		{
+			Construct(lv, false);
+		}
+
+		public CheckedLVItemDXList(ListView lv, bool bUseEnforcedConfig)
+		{
+			Construct(lv, bUseEnforcedConfig);
+		}
+
+		private void Construct(ListView lv, bool bUseEnforcedConfig)
+		{
 			if(lv == null) throw new ArgumentNullException("lv");
 
 			m_lv = lv;
+			m_bUseEnforcedConfig = bUseEnforcedConfig;
+
 			m_lv.ItemChecked += this.OnItemCheckedChanged;
 		}
 
@@ -88,10 +150,8 @@ namespace KeePass.UI
 		{
 			if(m_lv == null) { Debug.Assert(false); return; }
 
-			m_vObjects.Clear();
-			m_vProperties.Clear();
-			m_vListViewItems.Clear();
-			m_vLinks.Clear();
+			m_lItems.Clear();
+			m_lLinks.Clear();
 
 			m_lv.ItemChecked -= this.OnItemCheckedChanged;
 			m_lv = null;
@@ -101,21 +161,31 @@ namespace KeePass.UI
 		{
 			if(m_lv == null) { Debug.Assert(false); return; }
 
-			for(int i = 0; i < m_vObjects.Count; ++i)
+			Color clr = SystemColors.ControlText;
+			float fH, fS, fV;
+			UIUtil.ColorToHsv(clr, out fH, out fS, out fV);
+			if(fV >= 0.5f) // Text color is rather light
+				clr = UIUtil.ColorFromHsv(fH, 0.0f, 0.40f);
+			else // Text color is rather dark
+				clr = UIUtil.ColorFromHsv(fH, 0.0f, 0.60f);
+
+			foreach(ClviInfo clvi in m_lItems)
 			{
-				object o = m_vObjects[i];
+				ListViewItem lvi = clvi.ListViewItem;
 
-				Debug.Assert(m_vListViewItems[i].Index >= 0);
-				Debug.Assert(m_lv.Items.IndexOf(m_vListViewItems[i]) >= 0);
+				Debug.Assert(lvi.Index >= 0);
+				Debug.Assert(m_lv.Items.IndexOf(lvi) >= 0);
 				if(bGuiToInternals)
 				{
-					bool bChecked = m_vListViewItems[i].Checked;
-					m_vProperties[i].SetValue(o, bChecked, null);
+					bool bChecked = lvi.Checked;
+					clvi.PropertyValue = bChecked;
 				}
 				else // Internals to GUI
 				{
-					bool bValue = (bool)m_vProperties[i].GetValue(o, null);
-					m_vListViewItems[i].Checked = bValue;
+					bool bValue = clvi.PropertyValue;
+					lvi.Checked = bValue;
+
+					if(clvi.ReadOnly) lvi.ForeColor = clr;
 				}
 			}
 		}
@@ -125,18 +195,15 @@ namespace KeePass.UI
 		{
 			if(pContainer == null) throw new ArgumentNullException("pContainer");
 			if(strPropertyName == null) throw new ArgumentNullException("strPropertyName");
-			if(strPropertyName.Length == 0) throw new ArgumentException();
+			if(strPropertyName.Length == 0) throw new ArgumentException("strPropertyName");
 			if(strDisplayString == null) throw new ArgumentNullException("strDisplayString");
 
 			if(m_lv == null) { Debug.Assert(false); return null; }
 
-			Type t = pContainer.GetType();
-			PropertyInfo pi = t.GetProperty(strPropertyName);
-			if((pi == null) || (pi.PropertyType != typeof(bool)) ||
-				!pi.CanRead || !pi.CanWrite)
-				throw new ArgumentException();
-
 			ListViewItem lvi = new ListViewItem(strDisplayString);
+			ClviInfo clvi = new ClviInfo(pContainer, strPropertyName, lvi);
+			DetermineReadOnlyState(clvi);
+
 			if(lvgContainer != null)
 			{
 				lvi.Group = lvgContainer;
@@ -145,10 +212,7 @@ namespace KeePass.UI
 			}
 
 			m_lv.Items.Add(lvi);
-
-			m_vObjects.Add(pContainer);
-			m_vProperties.Add(pi);
-			m_vListViewItems.Add(lvi);
+			m_lItems.Add(clvi);
 
 			return lvi;
 		}
@@ -161,10 +225,22 @@ namespace KeePass.UI
 
 			if(m_lv == null) { Debug.Assert(false); return; }
 
-			Debug.Assert(m_vListViewItems.IndexOf(lviSource) >= 0);
-			Debug.Assert(m_vListViewItems.IndexOf(lviTarget) >= 0);
+			Debug.Assert(GetItem(lviSource) != null);
+			Debug.Assert(GetItem(lviTarget) != null);
+
+			m_lLinks.Add(new CheckItemLink(lviSource, lviTarget, t));
+		}
+
+		private ClviInfo GetItem(ListViewItem lvi)
+		{
+			if(lvi == null) { Debug.Assert(false); return null; }
+
+			foreach(ClviInfo clvi in m_lItems)
+			{
+				if(clvi.ListViewItem == lvi) return clvi;
+			}
 
-			m_vLinks.Add(new CheckItemLink(lviSource, lviTarget, t));
+			return null;
 		}
 
 		private void OnItemCheckedChanged(object sender, ItemCheckedEventArgs e)
@@ -174,8 +250,17 @@ namespace KeePass.UI
 
 			bool bChecked = lvi.Checked;
 
-			// Debug.Assert(m_vListViewItems.IndexOf(lvi) >= 0);
-			foreach(CheckItemLink cl in m_vLinks)
+			ClviInfo clvi = GetItem(lvi);
+			if(clvi != null)
+			{
+				if(clvi.ReadOnly && (bChecked != clvi.PropertyValue))
+				{
+					lvi.Checked = clvi.PropertyValue;
+					return;
+				}
+			}
+
+			foreach(CheckItemLink cl in m_lLinks)
 			{
 				if(cl.Source == lvi)
 				{
@@ -196,5 +281,15 @@ namespace KeePass.UI
 				}
 			}
 		}
+
+		private void DetermineReadOnlyState(ClviInfo clvi)
+		{
+			if(clvi == null) { Debug.Assert(false); return; }
+
+			if(!m_bUseEnforcedConfig) clvi.ReadOnly = false;
+			else
+				clvi.ReadOnly = AppConfigEx.IsOptionEnforced(clvi.Object,
+					clvi.PropertyInfo);
+		}
 	}
 }
diff --git a/KeePass/UI/CustomListViewEx.cs b/KeePass/UI/CustomListViewEx.cs
index f35c87a..1980a24 100644
--- a/KeePass/UI/CustomListViewEx.cs
+++ b/KeePass/UI/CustomListViewEx.cs
@@ -121,9 +121,8 @@ namespace KeePass.UI
 					foreach(ListViewItem lviEnum in this.Items)
 						lviEnum.Selected = false;
 
-					lviChangeTo.Selected = true;
-					lviChangeTo.Focused = true;
 					EnsureVisible(lviChangeTo.Index);
+					UIUtil.SetFocusedItem(this, lviChangeTo, true);
 
 					e.Handled = true;
 					return true;
diff --git a/KeePass/UI/ExpiryControlGroup.cs b/KeePass/UI/ExpiryControlGroup.cs
new file mode 100644
index 0000000..39eac25
--- /dev/null
+++ b/KeePass/UI/ExpiryControlGroup.cs
@@ -0,0 +1,128 @@
+/*
+  KeePass Password Safe - The Open-Source Password Manager
+  Copyright (C) 2003-2012 Dominik Reichl <dominik.reichl at t-online.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using System.Globalization;
+using System.Diagnostics;
+
+using KeePassLib;
+
+namespace KeePass.UI
+{
+	public sealed class ExpiryControlGroup
+	{
+		private CheckBox m_cb = null;
+		private DateTimePicker m_dtp = null;
+
+		public bool Checked
+		{
+			get
+			{
+				if(m_cb == null) { Debug.Assert(false); return false; }
+				return m_cb.Checked;
+			}
+
+			set { UIUtil.SetChecked(m_cb, value); }
+		}
+
+		public DateTime Value
+		{
+			get
+			{
+				if(m_dtp == null) { Debug.Assert(false); return DateTime.Now; }
+
+				// Force validation/update of incomplete edit
+				// (workaround for KPB 3505269)
+				if(m_dtp.Focused && m_dtp.Visible)
+				{
+					m_dtp.Visible = false;
+					m_dtp.Visible = true;
+				}
+
+				return m_dtp.Value;
+			}
+
+			set
+			{
+				if(m_dtp == null) { Debug.Assert(false); return; }
+				m_dtp.Value = value;
+			}
+		}
+
+		public ExpiryControlGroup()
+		{
+		}
+
+#if DEBUG
+		~ExpiryControlGroup()
+		{
+			Debug.Assert(m_cb == null); // Owner should call Release()
+		}
+#endif
+
+		public void Attach(CheckBox cb, DateTimePicker dtp)
+		{
+			if(cb == null) throw new ArgumentNullException("cb");
+			if(dtp == null) throw new ArgumentNullException("dtp");
+
+			m_cb = cb;
+			m_dtp = dtp;
+
+			// m_dtp.ShowUpDown = true;
+			m_dtp.CustomFormat = DateTimeFormatInfo.CurrentInfo.ShortDatePattern +
+				" " + DateTimeFormatInfo.CurrentInfo.LongTimePattern;
+
+			m_dtp.ValueChanged += this.OnExpiryValueChanged;
+			// Also handle key press event (workaround for KPB 3505269)
+			m_dtp.KeyPress += this.OnExpiryKeyPress;
+		}
+
+		public void Release()
+		{
+			if(m_cb == null) return;
+
+			m_dtp.ValueChanged -= this.OnExpiryValueChanged;
+			m_dtp.KeyPress -= this.OnExpiryKeyPress;
+
+			m_cb = null;
+			m_dtp = null;
+		}
+
+		private void UpdateUI(bool? pbSetCheck)
+		{
+			if(pbSetCheck.HasValue)
+				UIUtil.SetChecked(m_cb, pbSetCheck.Value);
+
+			UIUtil.SetEnabled(m_dtp, m_cb.Enabled);
+		}
+
+		private void OnExpiryValueChanged(object sender, EventArgs e)
+		{
+			UpdateUI(true);
+		}
+
+		private void OnExpiryKeyPress(object sender, KeyPressEventArgs e)
+		{
+			if(char.IsDigit(e.KeyChar)) UpdateUI(true);
+		}
+	}
+}
diff --git a/KeePass/UI/GlobalWindowManager.cs b/KeePass/UI/GlobalWindowManager.cs
index 2788156..11871fe 100644
--- a/KeePass/UI/GlobalWindowManager.cs
+++ b/KeePass/UI/GlobalWindowManager.cs
@@ -25,6 +25,7 @@ using System.Windows.Forms;
 using System.Drawing;
 
 using KeePass.App;
+using KeePass.Util;
 
 using KeePassLib.Native;
 using KeePassLib.Utility;
@@ -122,6 +123,8 @@ namespace KeePass.UI
 
 			CustomizeControl(form);
 
+			MonoWorkarounds.ApplyTo(form);
+
 			if(GlobalWindowManager.WindowAdded != null)
 				GlobalWindowManager.WindowAdded(null, new GwmWindowEventArgs(
 					form, wnd));
@@ -148,6 +151,8 @@ namespace KeePass.UI
 						GlobalWindowManager.WindowRemoved(null, new GwmWindowEventArgs(
 							form, m_vWindows[i].Value));
 
+					MonoWorkarounds.Release(form);
+
 					m_vWindows.RemoveAt(i);
 					return;
 				}
diff --git a/KeePass/UI/HotKeyControlEx.cs b/KeePass/UI/HotKeyControlEx.cs
index a5b73f7..aae3a5d 100644
--- a/KeePass/UI/HotKeyControlEx.cs
+++ b/KeePass/UI/HotKeyControlEx.cs
@@ -169,6 +169,12 @@ namespace KeePass.UI
 			RenderHotKey();
 		}
 
+		public void ResetIfModifierOnly()
+		{
+			if((m_kHotKey == Keys.None) && (m_kModifiers != Keys.None))
+				ResetHotKey();
+		}
+
 		public void RenderHotKey()
 		{
 			if(m_kHotKey == Keys.None)
diff --git a/KeePass/UI/OpenWithMenu.cs b/KeePass/UI/OpenWithMenu.cs
index 3cbb55a..b14d6bd 100644
--- a/KeePass/UI/OpenWithMenu.cs
+++ b/KeePass/UI/OpenWithMenu.cs
@@ -232,10 +232,7 @@ namespace KeePass.UI
 			AddAppByFile(AppLocator.InternetExplorerPath, @"&Internet Explorer");
 			AddAppByFile(AppLocator.FirefoxPath, @"&Firefox");
 			AddAppByFile(AppLocator.OperaPath, @"O&pera");
-
-			AddAppByFile(AppLocator.ChromePath, (NativeLib.IsUnix() ?
-				@"&Google Chromium" : @"&Google Chrome"));
-
+			AddAppByFile(AppLocator.ChromePath, @"&Google Chrome");
 			AddAppByFile(AppLocator.SafariPath, @"&Safari");
 
 			if(NativeLib.IsUnix())
diff --git a/KeePass/UI/PwInputControlGroup.cs b/KeePass/UI/PwInputControlGroup.cs
index f1e6ad4..060ec72 100644
--- a/KeePass/UI/PwInputControlGroup.cs
+++ b/KeePass/UI/PwInputControlGroup.cs
@@ -79,6 +79,9 @@ namespace KeePass.UI
 		{
 			get
 			{
+				if(!Program.Config.UI.RepeatPasswordOnlyWhenHidden)
+					return false;
+
 				if(m_cbHide == null) { Debug.Assert(false); return false; }
 				return !m_cbHide.Checked;
 			}
@@ -243,7 +246,8 @@ namespace KeePass.UI
 			m_secPassword.EnableProtection(bHide);
 			m_secRepeat.EnableProtection(bHide);
 
-			if(bHide && !m_bPrgmCheck)
+			bool bWasAutoRepeat = Program.Config.UI.RepeatPasswordOnlyWhenHidden;
+			if(bHide && !m_bPrgmCheck && bWasAutoRepeat)
 			{
 				++m_uBlockUIUpdate;
 				byte[] pb = GetPasswordUtf8();
diff --git a/KeePass/UI/UIUtil.cs b/KeePass/UI/UIUtil.cs
index 877b075..7d4bb56 100644
--- a/KeePass/UI/UIUtil.cs
+++ b/KeePass/UI/UIUtil.cs
@@ -520,9 +520,7 @@ namespace KeePass.UI
 
 				if(bFirstEntry)
 				{
-					lvi.Selected = true;
-					lvi.Focused = true;
-
+					UIUtil.SetFocusedItem(lv, lvi, true);
 					bFirstEntry = false;
 				}
 			}
@@ -640,9 +638,7 @@ namespace KeePass.UI
 
 				if(bFirstEntry)
 				{
-					lvi.Selected = true;
-					lvi.Focused = true;
-
+					UIUtil.SetFocusedItem(lv, lvi, true);
 					bFirstEntry = false;
 				}
 			}
@@ -664,25 +660,64 @@ namespace KeePass.UI
 			return 18; // Default theme on Windows Vista
 		}
 
+		/// <summary>
+		/// Create a file type filter specification string.
+		/// </summary>
+		/// <param name="strExtension">Default extension(s), without leading
+		/// dot. Multiple extensions must be separated by a '|' (e.g.
+		/// "html|htm", having the same description "HTML Files").</param>
 		public static string CreateFileTypeFilter(string strExtension, string strDescription,
 			bool bIncludeAllFiles)
 		{
-			string str = string.Empty;
+			StringBuilder sb = new StringBuilder();
 
-			if((strExtension != null) && (strExtension.Length > 0) &&
-				(strDescription != null) && (strDescription.Length > 0))
+			if(!string.IsNullOrEmpty(strExtension) && !string.IsNullOrEmpty(
+				strDescription))
 			{
-				str += strDescription + @" (*." + strExtension + @")|*." + strExtension;
+				// str += strDescription + @" (*." + strExtension +
+				//	@")|*." + strExtension;
+
+				string[] vExts = strExtension.Split(new char[]{ '|' },
+					StringSplitOptions.RemoveEmptyEntries);
+				if(vExts.Length > 0)
+				{
+					sb.Append(strDescription);
+					sb.Append(@" (*.");
+
+					for(int i = 0; i < vExts.Length; ++i)
+					{
+						if(i > 0) sb.Append(@", *.");
+						sb.Append(vExts[i]);
+					}
+
+					sb.Append(@")|*.");
+
+					for(int i = 0; i < vExts.Length; ++i)
+					{
+						if(i > 0) sb.Append(@";*.");
+						sb.Append(vExts[i]);
+					}
+				}
 			}
 
 			if(bIncludeAllFiles)
 			{
-				if(str.Length > 0) str += @"|";
-
-				str += KPRes.AllFiles + @" (*.*)|*.*";
+				if(sb.Length > 0) sb.Append(@"|");
+				sb.Append(KPRes.AllFiles);
+				sb.Append(@" (*.*)|*.*");
 			}
 
-			return str;
+			return sb.ToString();
+		}
+
+		public static string GetPrimaryFileTypeExt(string strExtensions)
+		{
+			if(strExtensions == null) { Debug.Assert(false); return string.Empty; }
+
+			int i = strExtensions.IndexOf('|');
+			if(i >= 0) return strExtensions.Substring(0, i);
+
+			return strExtensions; // Single extension
 		}
 
 		public static OpenFileDialog CreateOpenFileDialog(string strTitle, string strFilter,
@@ -972,8 +1007,10 @@ namespace KeePass.UI
 			if(vItemTags == null) throw new ArgumentNullException("vItemTags");
 
 			for(int i = 0; i < lv.Items.Count; ++i)
+			{
 				if(Array.IndexOf<object>(vItemTags, lv.Items[i].Tag) >= 0)
 					lv.Items[i].Selected = true;
+			}
 		}
 
 		public static void SetWebBrowserDocument(WebBrowser wb, string strDocumentText)
@@ -1006,6 +1043,19 @@ namespace KeePass.UI
 			catch(Exception) { } // Not supported on older operating systems
 		}
 
+		public static void SetExplorerTheme(Control c, bool bUseListFont)
+		{
+			if(c == null) { Debug.Assert(false); return; }
+
+			SetExplorerTheme(c.Handle);
+
+			if(bUseListFont)
+			{
+				if(UISystemFonts.ListFont != null)
+					c.Font = UISystemFonts.ListFont;
+			}
+		}
+
 		public static Image LoadImage(byte[] pb)
 		{
 			if(pb == null) throw new ArgumentNullException("pb");
@@ -2018,5 +2068,72 @@ namespace KeePass.UI
 
 			tsmi.ShortcutKeyDisplayString = str;
 		}
+
+		/* public static string ImageToDataUri(Image img)
+		{
+			if(img == null) { Debug.Assert(false); return string.Empty; }
+
+			MemoryStream ms = new MemoryStream();
+			img.Save(ms, ImageFormat.Png);
+
+			byte[] pbImage = ms.ToArray();
+			string strImage = Convert.ToBase64String(pbImage);
+
+			ms.Close();
+			return ("data:image/png;base64," + strImage);
+		} */
+
+		public static void SetFocusedItem(ListView lv, ListViewItem lvi,
+			bool bAlsoSelect)
+		{
+			if((lv == null) || (lvi == null)) { Debug.Assert(false); return; }
+
+			if(bAlsoSelect) lvi.Selected = true;
+
+			try { lv.FocusedItem = lvi; } // .NET
+			catch(Exception)
+			{
+				try { lvi.Focused = true; } // Mono
+				catch(Exception) { Debug.Assert(false); }
+			}
+		}
+
+		public static Image CreateDropDownImage(Image imgBase)
+		{
+			if(imgBase == null) { Debug.Assert(false); return null; }
+
+			int dx = imgBase.Width, dy = imgBase.Height;
+			if((dx < 8) || (dy < 5)) return new Bitmap(imgBase);
+
+			Bitmap bmp = new Bitmap(dx, dy, PixelFormat.Format32bppArgb);
+			using(Graphics g = Graphics.FromImage(bmp))
+			{
+				g.Clear(Color.Transparent);
+				g.DrawImageUnscaled(imgBase, 0, 0);
+
+				Pen penDark = Pens.Black;
+				g.DrawLine(penDark, dx - 5, dy - 3, dx - 1, dy - 3);
+				g.DrawLine(penDark, dx - 4, dy - 2, dx - 2, dy - 2);
+				// g.DrawLine(penDark, dx - 7, dy - 4, dx - 1, dy - 4);
+				// g.DrawLine(penDark, dx - 6, dy - 3, dx - 2, dy - 3);
+				// g.DrawLine(penDark, dx - 5, dy - 2, dx - 3, dy - 2);
+
+				using(Pen penLight = new Pen(Color.FromArgb(
+					160, 255, 255, 255), 1.0f))
+				{
+					g.DrawLine(penLight, dx - 5, dy - 4, dx - 1, dy - 4);
+					g.DrawLine(penLight, dx - 6, dy - 3, dx - 4, dy - 1);
+					g.DrawLine(penLight, dx - 2, dy - 1, dx - 1, dy - 2);
+					// g.DrawLine(penLight, dx - 7, dy - 5, dx - 1, dy - 5);
+					// g.DrawLine(penLight, dx - 8, dy - 4, dx - 5, dy - 1);
+					// g.DrawLine(penLight, dx - 3, dy - 1, dx - 1, dy - 3);
+				}
+			}
+
+			bmp.SetPixel(dx - 3, dy - 1, Color.Black);
+			// bmp.SetPixel(dx - 4, dy - 1, Color.Black);
+
+			return bmp;
+		}
 	}
 }
diff --git a/KeePass/Util/AppLocator.cs b/KeePass/Util/AppLocator.cs
index 422bb15..2df75b1 100644
--- a/KeePass/Util/AppLocator.cs
+++ b/KeePass/Util/AppLocator.cs
@@ -222,7 +222,12 @@ namespace KeePass.Util
 		// HKEY_CLASSES_ROOT\\ChromeHTML\\shell\\open\\command
 		private static string FindChrome()
 		{
-			if(NativeLib.IsUnix()) return FindAppUnix("chromium-browser");
+			if(NativeLib.IsUnix())
+			{
+				string str = FindAppUnix("google-chrome");
+				if(!string.IsNullOrEmpty(str)) return str;
+				return FindAppUnix("chromium-browser");
+			}
 
 			RegistryKey kHtml = Registry.ClassesRoot.OpenSubKey("ChromeHTML", false);
 			RegistryKey kShell = kHtml.OpenSubKey("shell", false);
@@ -292,7 +297,7 @@ namespace KeePass.Util
 
 		public static string FindAppUnix(string strApp)
 		{
-			string str = WinUtil.RunConsoleApp("whereis", "-b " + strApp);
+			string str = NativeLib.RunConsoleApp("whereis", "-b " + strApp);
 			if(str == null) return null;
 
 			str = str.Trim();
diff --git a/KeePass/Util/AutoType.cs b/KeePass/Util/AutoType.cs
index 186c3d7..f4a679c 100644
--- a/KeePass/Util/AutoType.cs
+++ b/KeePass/Util/AutoType.cs
@@ -78,6 +78,17 @@ namespace KeePass.Util
 		public static event EventHandler<AutoTypeEventArgs> FilterSendPre;
 		public static event EventHandler<AutoTypeEventArgs> FilterSend;
 
+		public static event EventHandler<SequenceQueryEventArgs> SequenceQuery;
+
+		public static event EventHandler<SequenceQueriesEventArgs> SequenceQueriesBegin;
+		public static event EventHandler<SequenceQueriesEventArgs> SequenceQueriesEnd;
+
+		private static int m_iEventID = 0;
+		public static int GetNextEventID()
+		{
+			return Interlocked.Increment(ref m_iEventID);
+		}
+
 		internal static void InitStatic()
 		{
 			try
@@ -206,8 +217,28 @@ namespace KeePass.Util
 			return AutoType.Execute(ctxNew);
 		}
 
+		private static SequenceQueriesEventArgs GetSequencesForWindowBegin(
+			IntPtr hWnd, string strWindow)
+		{
+			SequenceQueriesEventArgs e = new SequenceQueriesEventArgs(
+				GetNextEventID(), hWnd, strWindow);
+
+			if(AutoType.SequenceQueriesBegin != null)
+				AutoType.SequenceQueriesBegin(null, e);
+
+			return e;
+		}
+
+		private static void GetSequencesForWindowEnd(SequenceQueriesEventArgs e)
+		{
+			if(AutoType.SequenceQueriesEnd != null)
+				AutoType.SequenceQueriesEnd(null, e);
+		}
+
+		// Multiple calls of this method should be wrapped in
+		// GetSequencesForWindowBegin and GetSequencesForWindowEnd
 		private static List<string> GetSequencesForWindow(PwEntry pwe,
-			string strWindow, PwDatabase pdContext)
+			IntPtr hWnd, string strWindow, PwDatabase pdContext, int iEventID)
 		{
 			List<string> l = new List<string>();
 
@@ -275,6 +306,30 @@ namespace KeePass.Util
 					AddSequence(l, pwe.GetAutoTypeSequence());
 			}
 
+			if(Program.Config.Integration.AutoTypeMatchByTagInTitle)
+			{
+				foreach(string strTag in pwe.Tags)
+				{
+					if(string.IsNullOrEmpty(strTag)) { Debug.Assert(false); continue; }
+
+					if(strWindow.IndexOf(strTag, StrUtil.CaseIgnoreCmp) >= 0)
+					{
+						AddSequence(l, pwe.GetAutoTypeSequence());
+						break;
+					}
+				}
+			}
+
+			if(AutoType.SequenceQuery != null)
+			{
+				SequenceQueryEventArgs e = new SequenceQueryEventArgs(iEventID,
+					hWnd, strWindow, pwe, pdContext);
+				AutoType.SequenceQuery(null, e);
+
+				foreach(string strSeq in e.Sequences)
+					AddSequence(l, strSeq);
+			}
+
 			return l;
 		}
 
@@ -359,6 +414,9 @@ namespace KeePass.Util
 			if(string.IsNullOrEmpty(strWindow)) return false;
 			if(!IsValidAutoTypeWindow(hWnd, true)) return false;
 
+			SequenceQueriesEventArgs evQueries = GetSequencesForWindowBegin(
+				hWnd, strWindow);
+
 			List<AutoTypeCtx> lCtxs = new List<AutoTypeCtx>();
 			PwDatabase pdCurrent = null;
 			DateTime dtNow = DateTime.Now;
@@ -368,7 +426,8 @@ namespace KeePass.Util
 				// Ignore expired entries
 				if(pe.Expires && (pe.ExpiryTime < dtNow)) return true;
 
-				List<string> lSeq = GetSequencesForWindow(pe, strWindow, pdCurrent);
+				List<string> lSeq = GetSequencesForWindow(pe, hWnd, strWindow,
+					pdCurrent, evQueries.EventID);
 				foreach(string strSeq in lSeq)
 				{
 					lCtxs.Add(new AutoTypeCtx(strSeq, pe, pdCurrent));
@@ -384,6 +443,8 @@ namespace KeePass.Util
 				pwSource.RootGroup.TraverseTree(TraversalMethod.PreOrder, null, eh);
 			}
 
+			GetSequencesForWindowEnd(evQueries);
+
 			if(lCtxs.Count == 1)
 				AutoType.PerformInternal(lCtxs[0], strWindow);
 			else if(lCtxs.Count > 1)
@@ -447,13 +508,13 @@ namespace KeePass.Util
 			if(!pe.GetAutoTypeEnabled()) return false;
 			if(!AppPolicy.Try(AppPolicyId.AutoTypeWithoutContext)) return false;
 
+			IntPtr hWnd;
 			string strWindow;
 			try
 			{
-				IntPtr hDummy;
-				NativeMethods.GetForegroundWindowInfo(out hDummy, out strWindow, true);
+				NativeMethods.GetForegroundWindowInfo(out hWnd, out strWindow, true);
 			}
-			catch(Exception) { strWindow = null; }
+			catch(Exception) { hWnd = IntPtr.Zero; strWindow = null; }
 
 			if(!KeePassLib.Native.NativeLib.IsUnix())
 			{
@@ -463,7 +524,14 @@ namespace KeePass.Util
 
 			Thread.Sleep(100);
 
-			List<string> lSeq = GetSequencesForWindow(pe, strWindow, pdContext);
+			SequenceQueriesEventArgs evQueries = GetSequencesForWindowBegin(
+				hWnd, strWindow);
+
+			List<string> lSeq = GetSequencesForWindow(pe, hWnd, strWindow,
+				pdContext, evQueries.EventID);
+
+			GetSequencesForWindowEnd(evQueries);
+
 			if(lSeq.Count == 0) lSeq.Add(pe.GetAutoTypeSequence());
 
 			AutoTypeCtx ctx = new AutoTypeCtx(lSeq[0], pe, pdContext);
diff --git a/KeePass/Util/AutoTypeCtx.cs b/KeePass/Util/AutoTypeCtx.cs
index a193d02..d31368a 100644
--- a/KeePass/Util/AutoTypeCtx.cs
+++ b/KeePass/Util/AutoTypeCtx.cs
@@ -22,6 +22,8 @@ using System.Collections.Generic;
 using System.Text;
 using System.Diagnostics;
 
+using KeePass.Util.Spr;
+
 using KeePassLib;
 
 namespace KeePass.Util
@@ -72,4 +74,89 @@ namespace KeePass.Util
 			return (AutoTypeCtx)this.MemberwiseClone();
 		}
 	}
+
+	public sealed class SequenceQueriesEventArgs : EventArgs
+	{
+		private readonly int m_iEventID;
+		public int EventID
+		{
+			get { return m_iEventID; }
+		}
+
+		private readonly IntPtr m_h;
+		public IntPtr TargetWindowHandle
+		{
+			get { return m_h; }
+		}
+
+		private readonly string m_strWnd;
+		public string TargetWindowTitle
+		{
+			get { return m_strWnd; }
+		}
+
+		public SequenceQueriesEventArgs(int iEventID, IntPtr hWnd,
+			string strWnd)
+		{
+			m_iEventID = iEventID;
+			m_h = hWnd;
+			m_strWnd = strWnd;
+		}
+	}
+
+	public sealed class SequenceQueryEventArgs : EventArgs
+	{
+		private readonly int m_iEventID;
+		public int EventID
+		{
+			get { return m_iEventID; }
+		}
+
+		private readonly IntPtr m_h;
+		public IntPtr TargetWindowHandle
+		{
+			get { return m_h; }
+		}
+
+		private readonly string m_strWnd;
+		public string TargetWindowTitle
+		{
+			get { return m_strWnd; }
+		}
+
+		private readonly PwEntry m_pe;
+		public PwEntry Entry
+		{
+			get { return m_pe; }
+		}
+
+		private readonly PwDatabase m_pd;
+		public PwDatabase Database
+		{
+			get { return m_pd; }
+		}
+
+		private List<string> m_lSeqs = new List<string>();
+		internal IEnumerable<string> Sequences
+		{
+			get { return m_lSeqs; }
+		}
+
+		public SequenceQueryEventArgs(int iEventID, IntPtr hWnd, string strWnd,
+			PwEntry pe, PwDatabase pd)
+		{
+			m_iEventID = iEventID;
+			m_h = hWnd;
+			m_strWnd = strWnd;
+			m_pe = pe;
+			m_pd = pd;
+		}
+
+		public void AddSequence(string strSeq)
+		{
+			if(strSeq == null) { Debug.Assert(false); return; }
+
+			m_lSeqs.Add(strSeq);
+		}
+	}
 }
diff --git a/KeePass/Util/BinaryDataClassifier.cs b/KeePass/Util/BinaryDataClassifier.cs
index e38337d..d144ebe 100644
--- a/KeePass/Util/BinaryDataClassifier.cs
+++ b/KeePass/Util/BinaryDataClassifier.cs
@@ -24,6 +24,10 @@ using System.Diagnostics;
 using System.Drawing;
 using System.IO;
 
+using KeePass.Resources;
+
+using KeePassLib.Utility;
+
 namespace KeePass.Util
 {
 	public enum BinaryDataClass
@@ -37,14 +41,6 @@ namespace KeePass.Util
 
 	public static class BinaryDataClassifier
 	{
-		public const string BdeAnsi = "ANSI";
-		public const string BdeAscii = "ASCII";
-		public const string BdeUtf7 = "UTF-7";
-		public const string BdeUtf8 = "UTF-8";
-		public const string BdeUtf32 = "UTF-32";
-		public const string BdeUnicodeLE = "Unicode (Little Endian)";
-		public const string BdeUnicodeBE = "Unicode (Big Endian)";
-
 		private static readonly string[] m_vTextExtensions = new string[]{
 			"txt", "csv", "c", "cpp", "h", "hpp", "css", "js", "bat"
 		};
@@ -121,61 +117,70 @@ namespace KeePass.Util
 			return ClassifyData(pbData);
 		}
 
-		public static Encoding GetStringEncoding(byte[] pbData, bool bBom,
-			out string strOutEncodingName, out uint uStartOffset)
+		public static StrEncodingInfo GetStringEncoding(byte[] pbData,
+			out uint uStartOffset)
 		{
 			Debug.Assert(pbData != null);
 			if(pbData == null) throw new ArgumentNullException("pbData");
 
-			byte bt1 = ((pbData.Length >= 1) ? pbData[0] : (byte)0);
-			byte bt2 = ((pbData.Length >= 2) ? pbData[1] : (byte)0);
-			byte bt3 = ((pbData.Length >= 3) ? pbData[2] : (byte)0);
-			byte bt4 = ((pbData.Length >= 4) ? pbData[3] : (byte)0);
+			uStartOffset = 0;
 
-			if((bt1 == 0xEF) && (bt2 == 0xBB) && (bt3 == 0xBF))
-			{
-				strOutEncodingName = BdeUtf8;
-				uStartOffset = 3;
-				return new UTF8Encoding(bBom);
-			}
-			if((bt1 == 0x00) && (bt2 == 0x00) && (bt3 == 0xFE) && (bt4 == 0xFF))
-			{
-				strOutEncodingName = BdeUtf32;
-				uStartOffset = 4;
-				return new UTF32Encoding(true, bBom);
-			}
-			if((bt1 == 0xFF) && (bt2 == 0xFE) && (bt3 == 0x00) && (bt4 == 0x00))
+			List<StrEncodingInfo> lEncs = new List<StrEncodingInfo>(StrUtil.Encodings);
+			lEncs.Sort(BinaryDataClassifier.CompareBySigLengthRev);
+
+			foreach(StrEncodingInfo sei in lEncs)
 			{
-				strOutEncodingName = BdeUtf32;
-				uStartOffset = 4;
-				return new UTF32Encoding(false, bBom);
+				byte[] pbSig = sei.StartSignature;
+				if((pbSig == null) || (pbSig.Length == 0)) continue;
+				if(pbSig.Length > pbData.Length) continue;
+
+				byte[] pbStart = MemUtil.Mid<byte>(pbData, 0, pbSig.Length);
+				if(MemUtil.ArraysEqual(pbStart, pbSig))
+				{
+					uStartOffset = (uint)pbSig.Length;
+					return sei;
+				}
 			}
-			if((bt1 == 0xFF) && (bt2 == 0xFE))
+
+			if((pbData.Length % 4) == 0)
 			{
-				strOutEncodingName = BdeUnicodeLE;
-				uStartOffset = 2;
-				return new UnicodeEncoding(false, bBom);
+				byte[] z3 = new byte[] { 0, 0, 0 };
+				int i = MemUtil.IndexOf<byte>(pbData, z3);
+				if((i >= 0) && (i < (pbData.Length - 4))) // Ignore last zero char
+				{
+					if((i % 4) == 0) return StrUtil.GetEncoding(StrEncodingType.Utf32BE);
+					if((i % 4) == 1) return StrUtil.GetEncoding(StrEncodingType.Utf32LE);
+					// Don't assume UTF-32 for other offsets
+				}
 			}
-			if((bt1 == 0xFE) && (bt2 == 0xFF))
+
+			if((pbData.Length % 2) == 0)
 			{
-				strOutEncodingName = BdeUnicodeBE;
-				uStartOffset = 2;
-				return new UnicodeEncoding(true, bBom);
+				int i = Array.IndexOf<byte>(pbData, 0);
+				if((i >= 0) && (i < (pbData.Length - 2))) // Ignore last zero char
+				{
+					if((i % 2) == 0) return StrUtil.GetEncoding(StrEncodingType.Utf16BE);
+					return StrUtil.GetEncoding(StrEncodingType.Utf16LE);
+				}
 			}
 
-			uStartOffset = 0;
-
 			try
 			{
-				Encoding.UTF8.GetString(pbData);
-
-				strOutEncodingName = BdeUtf8;
-				return new UTF8Encoding(bBom);
+				UTF8Encoding utf8Throw = new UTF8Encoding(false, true);
+				utf8Throw.GetString(pbData);
+				return StrUtil.GetEncoding(StrEncodingType.Utf8);
 			}
 			catch(Exception) { }
 
-			strOutEncodingName = BdeAnsi;
-			return Encoding.Default;
+			return StrUtil.GetEncoding(StrEncodingType.Default);
+		}
+
+		private static int CompareBySigLengthRev(StrEncodingInfo a, StrEncodingInfo b)
+		{
+			int na = 0, nb = 0;
+			if(a.StartSignature != null) na = a.StartSignature.Length;
+			if(b.StartSignature != null) nb = b.StartSignature.Length;
+			return -(na.CompareTo(nb));
 		}
 	}
 }
diff --git a/KeePass/Util/CancellableOperationEventArgs.cs b/KeePass/Util/CancellableOperationEventArgs.cs
index 4380b2b..da82b1f 100644
--- a/KeePass/Util/CancellableOperationEventArgs.cs
+++ b/KeePass/Util/CancellableOperationEventArgs.cs
@@ -21,6 +21,15 @@ using System;
 
 namespace KeePass.Util
 {
+	/// <summary>
+	/// Structure for a cancellable event.
+	/// The difference between this class and the .NET <c>CancelEventArgs</c>
+	/// class is that in <c>CancellableOperationEventArgs</c> once the
+	/// <c>Cancel</c> property has been set to <c>true</c>, it remains
+	/// <c>true</c>, even when trying to set it to <c>false</c> afterwards;
+	/// this allows passing an instance to multiple recipients and cancel
+	/// if at least one of them wants to (the others can't reset the vote).
+	/// </summary>
 	public class CancellableOperationEventArgs : EventArgs
 	{
 		private bool m_bCancel = false;
diff --git a/KeePassLibSD/SecureStringEx.cs b/KeePass/Util/ClipboardUtil.MacOSX.cs
similarity index 70%
copy from KeePassLibSD/SecureStringEx.cs
copy to KeePass/Util/ClipboardUtil.MacOSX.cs
index ae1d85e..5d0301f 100644
--- a/KeePassLibSD/SecureStringEx.cs
+++ b/KeePass/Util/ClipboardUtil.MacOSX.cs
@@ -1,4 +1,4 @@
-/*
+/*
   KeePass Password Safe - The Open-Source Password Manager
   Copyright (C) 2003-2012 Dominik Reichl <dominik.reichl at t-online.de>
 
@@ -20,31 +20,23 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.Diagnostics;
 
-namespace KeePassLib
+using KeePassLib.Native;
+
+namespace KeePass.Util
 {
-	public sealed class SecureString
+	public static partial class ClipboardUtil
 	{
-		private string m_secString = string.Empty;
-
-		public int Length
-		{
-			get { return m_secString.Length; }
-		}
-
-		public void AppendChar(char ch)
-		{
-			m_secString += ch;
-		}
-
-		public string ReadAsString()
+		private static string GetStringM()
 		{
-			return m_secString;
+			return (NativeLib.RunConsoleApp("pbpaste", "-pboard general") ??
+				string.Empty);
 		}
 
-		public void Clear()
+		private static void SetStringM(string str)
 		{
-			m_secString = string.Empty;
+			NativeLib.RunConsoleApp("pbcopy", "-pboard general", str);
 		}
 	}
 }
diff --git a/KeePass/Util/ClipboardUtil.cs b/KeePass/Util/ClipboardUtil.cs
index 3050a14..af9f3fe 100644
--- a/KeePass/Util/ClipboardUtil.cs
+++ b/KeePass/Util/ClipboardUtil.cs
@@ -95,6 +95,8 @@ namespace KeePass.Util
 
 					if(bFailed) return false;
 				}
+				else if(KeeNativeLib.NativeLib.GetPlatformID() == PlatformID.MacOSX)
+					SetStringM(strData);
 				else // Managed
 				{
 					Clear();
@@ -163,6 +165,9 @@ namespace KeePass.Util
 
 					if(bFailed) return false;
 				}
+				else if(KeeNativeLib.NativeLib.GetPlatformID() == PlatformID.MacOSX)
+					SetStringM(Convert.ToBase64String(pbToCopy,
+						Base64FormattingOptions.None));
 				else // Managed, no encoding
 				{
 					Clear();
@@ -201,6 +206,8 @@ namespace KeePass.Util
 
 					return Convert.FromBase64String(str);
 				}
+				else if(KeeNativeLib.NativeLib.GetPlatformID() == PlatformID.MacOSX)
+					return Convert.FromBase64String(GetStringM());
 				else // Managed, no encoding
 				{
 					return (byte[])Clipboard.GetData(strFormat);
@@ -271,6 +278,11 @@ namespace KeePass.Util
 						bNativeSuccess = true;
 					}
 				}
+				else if(KeeNativeLib.NativeLib.GetPlatformID() == PlatformID.MacOSX)
+				{
+					SetStringM(string.Empty);
+					bNativeSuccess = true;
+				}
 			}
 			catch(Exception) { Debug.Assert(false); }
 
@@ -302,7 +314,15 @@ namespace KeePass.Util
 		{
 			try
 			{
-				if(Clipboard.ContainsText())
+				if(KeeNativeLib.NativeLib.GetPlatformID() == PlatformID.MacOSX)
+				{
+					string strData = GetStringM();
+					byte[] pbUtf8 = StrUtil.Utf8.GetBytes(strData);
+
+					SHA256Managed sha256 = new SHA256Managed();
+					return sha256.ComputeHash(pbUtf8);
+				}
+				else if(Clipboard.ContainsText())
 				{
 					string strData = Clipboard.GetText();
 					byte[] pbUtf8 = StrUtil.Utf8.GetBytes(strData);
@@ -346,6 +366,15 @@ namespace KeePass.Util
 			}
 			catch(Exception) { Debug.Assert(false); }
 
+			if(KeeNativeLib.NativeLib.GetPlatformID() == PlatformID.MacOSX)
+			{
+				string str = GetStringM();
+				byte[] pbText = StrUtil.Utf8.GetBytes("pb" + str);
+
+				SHA256Managed sha256 = new SHA256Managed();
+				return sha256.ComputeHash(pbText);
+			}
+
 			try
 			{
 				MemoryStream ms = new MemoryStream();
@@ -359,6 +388,7 @@ namespace KeePass.Util
 					MemUtil.CopyStream(sAudio, ms);
 					sAudio.Close();
 				}
+
 				if(Clipboard.ContainsFileDropList())
 				{
 					StringCollection sc = Clipboard.GetFileDropList();
@@ -368,6 +398,7 @@ namespace KeePass.Util
 						ms.Write(pbStr, 0, pbStr.Length);
 					}
 				}
+
 				if(Clipboard.ContainsImage())
 				{
 					using(Image img = Clipboard.GetImage())
@@ -379,6 +410,7 @@ namespace KeePass.Util
 						msImage.Close();
 					}
 				}
+
 				if(Clipboard.ContainsText())
 				{
 					string str = Clipboard.GetText();
diff --git a/KeePass/Util/HotKeyManager.cs b/KeePass/Util/HotKeyManager.cs
index 36ee8c7..5f1899d 100644
--- a/KeePass/Util/HotKeyManager.cs
+++ b/KeePass/Util/HotKeyManager.cs
@@ -61,7 +61,7 @@ namespace KeePass.Util
 
 		public static bool RegisterHotKey(int nId, Keys kKey)
 		{
-			if(kKey == Keys.None) return false;
+			UnregisterHotKey(nId);
 
 			uint uMod = 0;
 			if((kKey & Keys.Shift) != Keys.None) uMod |= NativeMethods.MOD_SHIFT;
@@ -69,8 +69,7 @@ namespace KeePass.Util
 			if((kKey & Keys.Control) != Keys.None) uMod |= NativeMethods.MOD_CONTROL;
 
 			uint vkCode = (uint)(kKey & Keys.KeyCode);
-
-			UnregisterHotKey(nId);
+			if(vkCode == (uint)Keys.None) return false; // Don't register mod keys only
 
 			try
 			{
@@ -126,20 +125,10 @@ namespace KeePass.Util
 
 		public static void UnregisterAll()
 		{
-			try
-			{
-				foreach(KeyValuePair<int, Keys> kvp in m_vRegKeys)
-				{
-					if(!NativeLib.IsUnix())
-						NativeMethods.UnregisterHotKey(m_fRecvWnd.Handle, kvp.Key);
-					// else // Unix
-					//	NativeMethods.tomboy_keybinder_unbind(
-					//		EggAccKeysToString(kvp.Value), m_hOnHotKey);
-				}
-			}
-			catch(Exception) { Debug.Assert(false); }
+			List<int> vIDs = new List<int>(m_vRegKeys.Keys);
+			foreach(int nID in vIDs) UnregisterHotKey(nID);
 
-			m_vRegKeys.Clear();
+			Debug.Assert(m_vRegKeys.Count == 0);
 		}
 
 		/* private static void OnHotKey(string strKey, IntPtr lpUserData)
diff --git a/KeePass/Util/IpcUtilEx.cs b/KeePass/Util/IpcUtilEx.cs
index 366b6a8..247a111 100644
--- a/KeePass/Util/IpcUtilEx.cs
+++ b/KeePass/Util/IpcUtilEx.cs
@@ -27,6 +27,7 @@ using System.Threading;
 
 using KeePass.Forms;
 using KeePass.Native;
+using KeePass.UI;
 
 using KeePassLib;
 using KeePassLib.Cryptography;
@@ -200,6 +201,10 @@ namespace KeePass.Util
 				mf.EnsureVisibleForegroundWindow(true, true);
 				mf.UIBlockAutoUnlock(false);
 
+				// Don't try to open another database while a dialog
+				// is displayed (3489098)
+				if(GlobalWindowManager.WindowCount > 0) return;
+
 				string[] vArgs = CommandLineArgs.SafeDeserialize(ipcMsg.Param0);
 				if(vArgs == null) { Debug.Assert(false); return; }
 
diff --git a/KeePass/Util/MonoWorkarounds.cs b/KeePass/Util/MonoWorkarounds.cs
new file mode 100644
index 0000000..a409aea
--- /dev/null
+++ b/KeePass/Util/MonoWorkarounds.cs
@@ -0,0 +1,207 @@
+/*
+  KeePass Password Safe - The Open-Source Password Manager
+  Copyright (C) 2003-2012 Dominik Reichl <dominik.reichl at t-online.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Windows.Forms;
+using System.ComponentModel;
+using System.Reflection;
+using System.Diagnostics;
+
+using KeePassLib.Native;
+
+namespace KeePass.Util
+{
+	public static class MonoWorkarounds
+	{
+		private static bool? m_bReq = null;
+		public static bool IsRequired
+		{
+			get
+			{
+				if(!m_bReq.HasValue) m_bReq = NativeLib.IsUnix();
+				return m_bReq.Value;
+			}
+		}
+
+		public static void ApplyTo(Form f)
+		{
+			if(!MonoWorkarounds.IsRequired) return;
+			if(f == null) { Debug.Assert(false); return; }
+
+			ApplyToControlsRec(f.Controls, f, MonoWorkarounds.ApplyToControl);
+		}
+
+		public static void Release(Form f)
+		{
+			if(!MonoWorkarounds.IsRequired) return;
+			if(f == null) { Debug.Assert(false); return; }
+
+			ApplyToControlsRec(f.Controls, f, MonoWorkarounds.ReleaseControl);
+		}
+
+		private delegate void MwaControlHandler(Control c, Form fContext);
+
+		private static void ApplyToControlsRec(Control.ControlCollection cc,
+			Form fContext, MwaControlHandler fn)
+		{
+			if(cc == null) { Debug.Assert(false); return; }
+
+			foreach(Control c in cc)
+			{
+				fn(c, fContext);
+				ApplyToControlsRec(c.Controls, fContext, fn);
+			}
+		}
+
+		private sealed class MwaHandlerInfo
+		{
+			private readonly Delegate m_fnOrg; // May be null
+			public Delegate FunctionOriginal
+			{
+				get { return m_fnOrg; }
+			}
+
+			private readonly Delegate m_fnOvr;
+			public Delegate FunctionOverride
+			{
+				get { return m_fnOvr; }
+			}
+
+			private readonly DialogResult m_dr;
+			public DialogResult Result
+			{
+				get { return m_dr; }
+			}
+
+			private readonly Form m_fContext;
+			public Form FormContext
+			{
+				get { return m_fContext; }
+			}
+
+			public MwaHandlerInfo(Delegate fnOrg, Delegate fnOvr, DialogResult dr,
+				Form fContext)
+			{
+				m_fnOrg = fnOrg;
+				m_fnOvr = fnOvr;
+				m_dr = dr;
+				m_fContext = fContext;
+			}
+		}
+
+		private static void ApplyToControl(Control c, Form fContext)
+		{
+			Button btn = (c as Button);
+			if(btn != null) ApplyToButton(btn, fContext);
+		}
+
+		private static EventHandlerList GetEventHandlers(Component c,
+			out object objClickEvent)
+		{
+			FieldInfo fi = typeof(Control).GetField("ClickEvent", // Mono
+				BindingFlags.Static | BindingFlags.NonPublic);
+			if(fi == null)
+				fi = typeof(Control).GetField("EventClick", // .NET
+					BindingFlags.Static | BindingFlags.NonPublic);
+			if(fi == null) { Debug.Assert(false); objClickEvent = null; return null; }
+
+			objClickEvent = fi.GetValue(null);
+			if(objClickEvent == null) { Debug.Assert(false); return null; }
+
+			PropertyInfo pi = typeof(Component).GetProperty("Events",
+				BindingFlags.Instance | BindingFlags.NonPublic);
+			return (pi.GetValue(c, null) as EventHandlerList);
+		}
+
+		private static Dictionary<object, MwaHandlerInfo> m_dictHandlers =
+			new Dictionary<object, MwaHandlerInfo>();
+		private static void ApplyToButton(Button btn, Form fContext)
+		{
+			DialogResult dr = btn.DialogResult;
+			if(dr == DialogResult.None) return; // No workaround required
+
+			object objClickEvent;
+			EventHandlerList ehl = GetEventHandlers(btn, out objClickEvent);
+			if(ehl == null) { Debug.Assert(false); return; }
+			Delegate fnClick = ehl[objClickEvent]; // May be null
+
+			EventHandler fnOvr = new EventHandler(MonoWorkarounds.OnButtonClick);
+			m_dictHandlers[btn] = new MwaHandlerInfo(fnClick, fnOvr, dr, fContext);
+
+			btn.DialogResult = DialogResult.None;
+			if(fnClick != null) ehl.RemoveHandler(objClickEvent, fnClick);
+			ehl[objClickEvent] = fnOvr;
+		}
+
+		private static void ReleaseControl(Control c, Form fContext)
+		{
+			Button btn = (c as Button);
+			if(btn != null) ReleaseButton(btn, fContext);
+		}
+
+		private static void ReleaseButton(Button btn, Form fContext)
+		{
+			MwaHandlerInfo hi;
+			m_dictHandlers.TryGetValue(btn, out hi);
+			if(hi == null) return;
+
+			object objClickEvent;
+			EventHandlerList ehl = GetEventHandlers(btn, out objClickEvent);
+			if(ehl == null) { Debug.Assert(false); return; }
+
+			ehl.RemoveHandler(objClickEvent, hi.FunctionOverride);
+			if(hi.FunctionOriginal != null)
+				ehl[objClickEvent] = hi.FunctionOriginal;
+
+			btn.DialogResult = hi.Result;
+			m_dictHandlers.Remove(btn);
+		}
+
+		private static void OnButtonClick(object sender, EventArgs e)
+		{
+			Button btn = (sender as Button);
+			if(btn == null) { Debug.Assert(false); return; }
+
+			MwaHandlerInfo hi;
+			m_dictHandlers.TryGetValue(btn, out hi);
+			if(hi == null) { Debug.Assert(false); return; }
+
+			Form f = hi.FormContext;
+
+			// Set current dialog result by setting the form's private
+			// variable; the DialogResult property can't be used,
+			// because it raises close events
+			FieldInfo fiRes = typeof(Form).GetField("dialog_result",
+				BindingFlags.Instance | BindingFlags.NonPublic);
+			if(fiRes == null) { Debug.Assert(false); return; }
+			if(f != null) fiRes.SetValue(f, hi.Result);
+
+			if(hi.FunctionOriginal != null)
+				hi.FunctionOriginal.Method.Invoke(hi.FunctionOriginal.Target,
+					new object[]{ btn, e });
+
+			// Raise close events, if the click event handler hasn't
+			// reset the dialog result
+			if((f != null) && (f.DialogResult == hi.Result))
+				f.DialogResult = hi.Result; // Raises close events
+		}
+	}
+}
diff --git a/KeePass/Util/SendInputEx.Windows.cs b/KeePass/Util/SendInputEx.Windows.cs
index 1217bac..0775c62 100644
--- a/KeePass/Util/SendInputEx.Windows.cs
+++ b/KeePass/Util/SendInputEx.Windows.cs
@@ -304,23 +304,39 @@ namespace KeePass.Util
 			}
 		} */
 
+		private static Dictionary<string, char> m_dictNativeChars = null;
+		private static string[] m_vNativeCharKeys = null;
 		private static void OSSendKeysWindows(string strSequence)
 		{
 			// Workaround for ^/& .NET SendKeys bug:
 			// https://connect.microsoft.com/VisualStudio/feedback/details/93922/sendkeys-send-sends-wrong-character
 
-			string[] vSpecial = new string[]{ @"{^}", @"{%}", @"´", @"`", @"@" };
-			List<string> vSend = StrUtil.SplitWithSep(strSequence, vSpecial, true);
+			if(m_dictNativeChars == null)
+			{
+				m_dictNativeChars = new Dictionary<string, char>();
+				m_dictNativeChars[@"{^}"] = '^';
+				m_dictNativeChars[@"{%}"] = '%';
+				m_dictNativeChars[@"´"] = '´';
+				m_dictNativeChars[@"`"] = '`';
+				m_dictNativeChars[@"@"] = '@';
+				m_dictNativeChars[@"°"] = '°';
+				m_dictNativeChars[@"£"] = '£';
+				m_dictNativeChars[@"|"] = '|';
+
+				List<string> lKeys = new List<string>(m_dictNativeChars.Keys);
+				m_vNativeCharKeys = lKeys.ToArray();
+			}
+
+			List<string> vSend = StrUtil.SplitWithSep(strSequence,
+				m_vNativeCharKeys, true);
 
 			foreach(string strSend in vSend)
 			{
 				if(string.IsNullOrEmpty(strSend)) continue;
 
-				if(strSend.Equals(@"{^}")) SendCharNative('^');
-				else if(strSend.Equals(@"{%}")) SendCharNative('%');
-				else if(strSend.Equals(@"´")) SendCharNative('´');
-				else if(strSend.Equals(@"`")) SendCharNative('`');
-				else if(strSend.Equals(@"@")) SendCharNative('@');
+				char chNative;
+				if(m_dictNativeChars.TryGetValue(strSend, out chNative))
+					SendCharNative(chNative);
 				else SendKeys.SendWait(strSend);
 			}
 		}
diff --git a/KeePass/Util/Spr/SprEngine.cs b/KeePass/Util/Spr/SprEngine.cs
index 561ce18..6e0a72e 100644
--- a/KeePass/Util/Spr/SprEngine.cs
+++ b/KeePass/Util/Spr/SprEngine.cs
@@ -163,9 +163,19 @@ namespace KeePass.Util.Spr
 			}
 
 			if((ctx.Flags & SprCompileFlags.Paths) != SprCompileFlags.None)
+			{
 				str = SprEngine.FillIfExists(str, @"{ENV_DIRSEP}", new ProtectedString(
 					false, Path.DirectorySeparatorChar.ToString()), ctx, uRecursionLevel);
 
+				string strPF86 = Environment.GetEnvironmentVariable("ProgramFiles(x86)");
+				if(string.IsNullOrEmpty(strPF86))
+					strPF86 = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles);
+				if(strPF86 != null)
+					str = SprEngine.FillIfExists(str, @"{ENV_PROGRAMFILES_X86}",
+						new ProtectedString(false, strPF86), ctx, uRecursionLevel);
+				else { Debug.Assert(false); }
+			}
+
 			if((ctx.Flags & SprCompileFlags.AutoType) != SprCompileFlags.None)
 				str = StrUtil.ReplaceCaseInsensitive(str, @"{CLEARFIELD}",
 					@"{HOME}+({END}){DEL}{DELAY 50}");
diff --git a/KeePass/Util/UpdateCheckEx.cs b/KeePass/Util/UpdateCheckEx.cs
index f11ad06..59a23cc 100644
--- a/KeePass/Util/UpdateCheckEx.cs
+++ b/KeePass/Util/UpdateCheckEx.cs
@@ -305,51 +305,70 @@ namespace KeePass.Util
 				ms.Close();
 
 				if(ioc.Path.EndsWith(".gz", StrUtil.CaseIgnoreCmp))
-					pb = MemUtil.Decompress(pb);
-
-				string strData = StrUtil.Utf8.GetString(pb);
-				strData = StrUtil.NormalizeNewLines(strData, false);
-				string[] vLines = strData.Split('\n');
-
-				List<UpdateComponentInfo> l = new List<UpdateComponentInfo>();
-				bool bHeader = true, bFooterFound = false;
-				char chSep = ':'; // Modified by header
-				for(int i = 0; i < vLines.Length; ++i)
 				{
-					string str = vLines[i].Trim();
-					if(str.Length == 0) continue;
-
-					if(bHeader)
-					{
-						chSep = str[0];
-						bHeader = false;
-					}
-					else if(str[0] == chSep)
-					{
-						bFooterFound = true;
-						break;
-					}
-					else // Component info
+					// Decompress in try-catch, because some web filters
+					// incorrectly pre-decompress the returned data
+					// https://sourceforge.net/projects/keepass/forums/forum/329221/topic/4915083
+					try
 					{
-						string[] vInfo = str.Split(new char[] { chSep });
-						if(vInfo.Length >= 2)
-						{
-							UpdateComponentInfo c = new UpdateComponentInfo(
-								vInfo[0].Trim(), 0, ioc.Path, string.Empty);
-							c.VerAvailable = StrUtil.GetVersion(vInfo[1]);
-
-							AddComponent(l, c);
-						}
+						byte[] pbDec = MemUtil.Decompress(pb);
+						List<UpdateComponentInfo> l = LoadInfoFilePriv(pbDec, ioc);
+						if(l != null) return l;
 					}
+					catch(Exception) { }
 				}
 
-				return (bFooterFound ? l : null);
+				return LoadInfoFilePriv(pb, ioc);
 			}
 			catch(Exception) { }
 
 			return null;
 		}
 
+		private static List<UpdateComponentInfo> LoadInfoFilePriv(byte[] pbData,
+			IOConnectionInfo iocSource)
+		{
+			if((pbData == null) || (pbData.Length == 0)) return null;
+
+			string strData = StrUtil.Utf8.GetString(pbData);
+			strData = StrUtil.NormalizeNewLines(strData, false);
+			string[] vLines = strData.Split('\n');
+
+			List<UpdateComponentInfo> l = new List<UpdateComponentInfo>();
+			bool bHeader = true, bFooterFound = false;
+			char chSep = ':'; // Modified by header
+			for(int i = 0; i < vLines.Length; ++i)
+			{
+				string str = vLines[i].Trim();
+				if(str.Length == 0) continue;
+
+				if(bHeader)
+				{
+					chSep = str[0];
+					bHeader = false;
+				}
+				else if(str[0] == chSep)
+				{
+					bFooterFound = true;
+					break;
+				}
+				else // Component info
+				{
+					string[] vInfo = str.Split(new char[] { chSep });
+					if(vInfo.Length >= 2)
+					{
+						UpdateComponentInfo c = new UpdateComponentInfo(
+							vInfo[0].Trim(), 0, iocSource.Path, string.Empty);
+						c.VerAvailable = StrUtil.ParseVersion(vInfo[1]);
+
+						AddComponent(l, c);
+					}
+				}
+			}
+
+			return (bFooterFound ? l : null);
+		}
+
 		private static void AddComponent(List<UpdateComponentInfo> l,
 			UpdateComponentInfo c)
 		{
@@ -375,7 +394,7 @@ namespace KeePass.Util
 					string.Empty);
 
 				AddComponent(l, new UpdateComponentInfo(pi.Name.Trim(),
-					StrUtil.GetVersion(pi.FileVersion), strUrl.Trim(),
+					StrUtil.ParseVersion(pi.FileVersion), strUrl.Trim(),
 					KPRes.Plugins));
 			}
 
@@ -449,7 +468,8 @@ namespace KeePass.Util
 
 			// If the user has manually enabled the automatic update check
 			// before, there's no need to ask him again
-			if(!Program.Config.Application.Start.CheckForUpdate)
+			if(!Program.Config.Application.Start.CheckForUpdate &&
+				!Program.IsDevelopmentSnapshot())
 			{
 				string strHdr = KPRes.UpdateCheckInfo;
 				string strSub = KPRes.UpdateCheckInfoRes + MessageService.NewParagraph +
diff --git a/KeePass/Util/WinUtil.cs b/KeePass/Util/WinUtil.cs
index 8b1df4e..8772aab 100644
--- a/KeePass/Util/WinUtil.cs
+++ b/KeePass/Util/WinUtil.cs
@@ -513,7 +513,7 @@ namespace KeePass.Util
 				SearchOption.TopDirectoryOnly))
 			{
 				string strVer = di.Name.TrimStart('v', 'V');
-				ulong uVer = StrUtil.GetVersion(strVer);
+				ulong uVer = StrUtil.ParseVersion(strVer);
 				if(uVer > uFrameworkVersion) uFrameworkVersion = uVer;
 			}
 
@@ -541,33 +541,10 @@ namespace KeePass.Util
 			catch(Exception) { Debug.Assert(NativeLib.IsUnix()); }
 		}
 
+		[Obsolete]
 		public static string RunConsoleApp(string strAppPath, string strParams)
 		{
-			if(strAppPath == null) throw new ArgumentNullException("strAppPath");
-			if(strAppPath.Length == 0) throw new ArgumentException("strAppPath");
-
-			try
-			{
-				ProcessStartInfo psi = new ProcessStartInfo();
-
-				psi.CreateNoWindow = true;
-				psi.FileName = strAppPath;
-				psi.WindowStyle = ProcessWindowStyle.Hidden;
-				psi.UseShellExecute = false;
-				psi.RedirectStandardOutput = true;
-
-				if(!string.IsNullOrEmpty(strParams)) psi.Arguments = strParams;
-
-				Process p = Process.Start(psi);
-
-				string strOutput = p.StandardOutput.ReadToEnd();
-				p.WaitForExit();
-
-				return strOutput;
-			}
-			catch(Exception) { Debug.Assert(false); }
-
-			return null;
+			return NativeLib.RunConsoleApp(strAppPath, strParams);
 		}
 
 		public static string LocateSystemApp(string strExeName)
diff --git a/KeePass/Util/XmlSerialization/XmlSerializerEx.Gen.cs b/KeePass/Util/XmlSerialization/XmlSerializerEx.Gen.cs
new file mode 100644
index 0000000..765e894
--- /dev/null
+++ b/KeePass/Util/XmlSerialization/XmlSerializerEx.Gen.cs
@@ -0,0 +1,3015 @@
+// This is a generated file!
+// Do not edit manually, changes will be overwritten.
+
+using System;
+using System.Collections.Generic;
+using System.Xml;
+using System.Diagnostics;
+
+using KeePassLib.Interfaces;
+
+namespace KeePass.Util.XmlSerialization
+{
+	public sealed partial class XmlSerializerEx : IXmlSerializerEx
+	{
+		private static char[] m_vEnumSeps = new char[] {
+			' ', '\t', '\r', '\n', '|', ',', ';', ':'
+		};
+
+		private static KeePass.App.Configuration.AppConfigEx ReadAppConfigEx(XmlReader xr)
+		{
+			KeePass.App.Configuration.AppConfigEx o = new KeePass.App.Configuration.AppConfigEx();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Meta":
+						o.Meta = ReadAceMeta(xr);
+						break;
+					case "Application":
+						o.Application = ReadAceApplication(xr);
+						break;
+					case "Logging":
+						o.Logging = ReadAceLogging(xr);
+						break;
+					case "MainWindow":
+						o.MainWindow = ReadAceMainWindow(xr);
+						break;
+					case "UI":
+						o.UI = ReadAceUI(xr);
+						break;
+					case "Security":
+						o.Security = ReadAceSecurity(xr);
+						break;
+					case "Native":
+						o.Native = ReadAceNative(xr);
+						break;
+					case "PasswordGenerator":
+						o.PasswordGenerator = ReadAcePasswordGenerator(xr);
+						break;
+					case "Defaults":
+						o.Defaults = ReadAceDefaults(xr);
+						break;
+					case "Integration":
+						o.Integration = ReadAceIntegration(xr);
+						break;
+					case "Custom":
+						o.CustomSerialized = ReadArrayOfAceKvp(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePassLib.Translation.KPTranslation ReadKPTranslation(XmlReader xr)
+		{
+			KeePassLib.Translation.KPTranslation o = new KeePassLib.Translation.KPTranslation();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Properties":
+						o.Properties = ReadKPTranslationProperties(xr);
+						break;
+					case "StringTables":
+						o.StringTables = ReadListOfKPStringTable(xr);
+						break;
+					case "Forms":
+						o.Forms = ReadListOfKPFormCustomization(xr);
+						break;
+					case "UnusedText":
+						o.UnusedText = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceMeta ReadAceMeta(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceMeta o = new KeePass.App.Configuration.AceMeta();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "PreferUserConfiguration":
+						o.PreferUserConfiguration = ReadBoolean(xr);
+						break;
+					case "OmitItemsWithDefaultValues":
+						o.OmitItemsWithDefaultValues = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceApplication ReadAceApplication(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceApplication o = new KeePass.App.Configuration.AceApplication();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "LanguageFile":
+						o.LanguageFile = ReadString(xr);
+						break;
+					case "HelpUseLocal":
+						o.HelpUseLocal = ReadBoolean(xr);
+						break;
+					case "LastUpdateCheck":
+						o.LastUpdateCheck = ReadString(xr);
+						break;
+					case "LastUsedFile":
+						o.LastUsedFile = ReadIOConnectionInfo(xr);
+						break;
+					case "MostRecentlyUsed":
+						o.MostRecentlyUsed = ReadAceMru(xr);
+						break;
+					case "Start":
+						o.Start = ReadAceStartUp(xr);
+						break;
+					case "FileOpening":
+						o.FileOpening = ReadAceOpenDb(xr);
+						break;
+					case "VerifyWrittenFileAfterSaving":
+						o.VerifyWrittenFileAfterSaving = ReadBoolean(xr);
+						break;
+					case "UseTransactedFileWrites":
+						o.UseTransactedFileWrites = ReadBoolean(xr);
+						break;
+					case "UseFileLocks":
+						o.UseFileLocks = ReadBoolean(xr);
+						break;
+					case "FileClosing":
+						o.FileClosing = ReadAceCloseDb(xr);
+						break;
+					case "TriggerSystem":
+						o.TriggerSystem = ReadEcasTriggerSystem(xr);
+						break;
+					case "PluginCachePath":
+						o.PluginCachePath = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceLogging ReadAceLogging(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceLogging o = new KeePass.App.Configuration.AceLogging();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Enabled":
+						o.Enabled = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceMainWindow ReadAceMainWindow(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceMainWindow o = new KeePass.App.Configuration.AceMainWindow();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "X":
+						o.X = ReadInt32(xr);
+						break;
+					case "Y":
+						o.Y = ReadInt32(xr);
+						break;
+					case "Width":
+						o.Width = ReadInt32(xr);
+						break;
+					case "Height":
+						o.Height = ReadInt32(xr);
+						break;
+					case "Maximized":
+						o.Maximized = ReadBoolean(xr);
+						break;
+					case "SplitterHorizontalFrac":
+						o.SplitterHorizontalFrac = ReadSingle(xr);
+						break;
+					case "SplitterVerticalFrac":
+						o.SplitterVerticalFrac = ReadSingle(xr);
+						break;
+					case "Layout":
+						o.Layout = ReadAceMainWindowLayout(xr);
+						break;
+					case "AlwaysOnTop":
+						o.AlwaysOnTop = ReadBoolean(xr);
+						break;
+					case "CloseButtonMinimizesWindow":
+						o.CloseButtonMinimizesWindow = ReadBoolean(xr);
+						break;
+					case "MinimizeToTray":
+						o.MinimizeToTray = ReadBoolean(xr);
+						break;
+					case "ShowFullPathInTitle":
+						o.ShowFullPathInTitle = ReadBoolean(xr);
+						break;
+					case "DropToBackAfterClipboardCopy":
+						o.DropToBackAfterClipboardCopy = ReadBoolean(xr);
+						break;
+					case "MinimizeAfterClipboardCopy":
+						o.MinimizeAfterClipboardCopy = ReadBoolean(xr);
+						break;
+					case "MinimizeAfterLocking":
+						o.MinimizeAfterLocking = ReadBoolean(xr);
+						break;
+					case "MinimizeAfterOpeningDatabase":
+						o.MinimizeAfterOpeningDatabase = ReadBoolean(xr);
+						break;
+					case "QuickFindSearchInPasswords":
+						o.QuickFindSearchInPasswords = ReadBoolean(xr);
+						break;
+					case "QuickFindExcludeExpired":
+						o.QuickFindExcludeExpired = ReadBoolean(xr);
+						break;
+					case "QuickFindDerefData":
+						o.QuickFindDerefData = ReadBoolean(xr);
+						break;
+					case "FocusResultsAfterQuickFind":
+						o.FocusResultsAfterQuickFind = ReadBoolean(xr);
+						break;
+					case "FocusQuickFindOnRestore":
+						o.FocusQuickFindOnRestore = ReadBoolean(xr);
+						break;
+					case "FocusQuickFindOnUntray":
+						o.FocusQuickFindOnUntray = ReadBoolean(xr);
+						break;
+					case "CopyUrlsInsteadOfOpening":
+						o.CopyUrlsInsteadOfOpening = ReadBoolean(xr);
+						break;
+					case "DisableSaveIfNotModified":
+						o.DisableSaveIfNotModified = ReadBoolean(xr);
+						break;
+					case "ToolBar":
+						o.ToolBar = ReadAceToolBar(xr);
+						break;
+					case "EntryView":
+						o.EntryView = ReadAceEntryView(xr);
+						break;
+					case "TanView":
+						o.TanView = ReadAceTanView(xr);
+						break;
+					case "EntryListColumnCollection":
+						o.EntryListColumns = ReadListOfAceColumn(xr);
+						break;
+					case "EntryListColumnDisplayOrder":
+						o.EntryListColumnDisplayOrder = ReadString(xr);
+						break;
+					case "EntryListAutoResizeColumns":
+						o.EntryListAutoResizeColumns = ReadBoolean(xr);
+						break;
+					case "EntryListAlternatingBgColors":
+						o.EntryListAlternatingBgColors = ReadBoolean(xr);
+						break;
+					case "EntryListShowDerefData":
+						o.EntryListShowDerefData = ReadBoolean(xr);
+						break;
+					case "EntryListShowDerefDataAsync":
+						o.EntryListShowDerefDataAsync = ReadBoolean(xr);
+						break;
+					case "ListSorting":
+						o.ListSorting = ReadListSorter(xr);
+						break;
+					case "ShowEntriesOfSubGroups":
+						o.ShowEntriesOfSubGroups = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceUI ReadAceUI(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceUI o = new KeePass.App.Configuration.AceUI();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "TrayIcon":
+						o.TrayIcon = ReadAceTrayIcon(xr);
+						break;
+					case "Hiding":
+						o.Hiding = ReadAceHiding(xr);
+						break;
+					case "RepeatPasswordOnlyWhenHidden":
+						o.RepeatPasswordOnlyWhenHidden = ReadBoolean(xr);
+						break;
+					case "StandardFont":
+						o.StandardFont = ReadAceFont(xr);
+						break;
+					case "PasswordFont":
+						o.PasswordFont = ReadAceFont(xr);
+						break;
+					case "ForceSystemFontUnix":
+						o.ForceSystemFontUnix = ReadBoolean(xr);
+						break;
+					case "BannerStyle":
+						o.BannerStyle = ReadBannerStyle(xr);
+						break;
+					case "ShowImportStatusDialog":
+						o.ShowImportStatusDialog = ReadBoolean(xr);
+						break;
+					case "ShowDbMntncResultsDialog":
+						o.ShowDbMntncResultsDialog = ReadBoolean(xr);
+						break;
+					case "UseCustomToolStripRenderer":
+						o.UseCustomToolStripRenderer = ReadBoolean(xr);
+						break;
+					case "OptimizeForScreenReader":
+						o.OptimizeForScreenReader = ReadBoolean(xr);
+						break;
+					case "DataEditorRect":
+						o.DataEditorRect = ReadString(xr);
+						break;
+					case "DataEditorFont":
+						o.DataEditorFont = ReadAceFont(xr);
+						break;
+					case "DataEditorWordWrap":
+						o.DataEditorWordWrap = ReadBoolean(xr);
+						break;
+					case "CharPickerRect":
+						o.CharPickerRect = ReadString(xr);
+						break;
+					case "AutoTypeCtxRect":
+						o.AutoTypeCtxRect = ReadString(xr);
+						break;
+					case "AutoTypeCtxFlags":
+						o.AutoTypeCtxFlags = ReadInt64(xr);
+						break;
+					case "AutoTypeCtxColumnWidths":
+						o.AutoTypeCtxColumnWidths = ReadString(xr);
+						break;
+					case "UIFlags":
+						o.UIFlags = ReadUInt64(xr);
+						break;
+					case "KeyCreationFlags":
+						o.KeyCreationFlags = ReadUInt64(xr);
+						break;
+					case "KeyPromptFlags":
+						o.KeyPromptFlags = ReadUInt64(xr);
+						break;
+					case "SecureDesktopPlaySound":
+						o.SecureDesktopPlaySound = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceSecurity ReadAceSecurity(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceSecurity o = new KeePass.App.Configuration.AceSecurity();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "WorkspaceLocking":
+						o.WorkspaceLocking = ReadAceWorkspaceLocking(xr);
+						break;
+					case "Policy":
+						o.Policy = ReadAppPolicyFlags(xr);
+						break;
+					case "MasterPassword":
+						o.MasterPassword = ReadAceMasterPassword(xr);
+						break;
+					case "MasterKeyOnSecureDesktop":
+						o.MasterKeyOnSecureDesktop = ReadBoolean(xr);
+						break;
+					case "ClipboardClearOnExit":
+						o.ClipboardClearOnExit = ReadBoolean(xr);
+						break;
+					case "ClipboardClearAfterSeconds":
+						o.ClipboardClearAfterSeconds = ReadInt32(xr);
+						break;
+					case "UseClipboardViewerIgnoreFormat":
+						o.UseClipboardViewerIgnoreFormat = ReadBoolean(xr);
+						break;
+					case "ClearKeyCommandLineParams":
+						o.ClearKeyCommandLineParams = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceNative ReadAceNative(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceNative o = new KeePass.App.Configuration.AceNative();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "NativeKeyTransformations":
+						o.NativeKeyTransformations = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AcePasswordGenerator ReadAcePasswordGenerator(XmlReader xr)
+		{
+			KeePass.App.Configuration.AcePasswordGenerator o = new KeePass.App.Configuration.AcePasswordGenerator();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "AutoGeneratedPasswordsProfile":
+						o.AutoGeneratedPasswordsProfile = ReadPwProfile(xr);
+						break;
+					case "LastUsedProfile":
+						o.LastUsedProfile = ReadPwProfile(xr);
+						break;
+					case "UserProfiles":
+						o.UserProfiles = ReadListOfPwProfile(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceDefaults ReadAceDefaults(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceDefaults o = new KeePass.App.Configuration.AceDefaults();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "NewEntryExpiresInDays":
+						o.NewEntryExpiresInDays = ReadInt32(xr);
+						break;
+					case "OptionsTabIndex":
+						o.OptionsTabIndex = ReadUInt32(xr);
+						break;
+					case "TanCharacters":
+						o.TanCharacters = ReadString(xr);
+						break;
+					case "TanExpiresOnUse":
+						o.TanExpiresOnUse = ReadBoolean(xr);
+						break;
+					case "SearchParameters":
+						o.SearchParameters = ReadSearchParameters(xr);
+						break;
+					case "FileSaveAsDirectory":
+						o.FileSaveAsDirectory = ReadString(xr);
+						break;
+					case "RememberKeySources":
+						o.RememberKeySources = ReadBoolean(xr);
+						break;
+					case "KeySources":
+						o.KeySources = ReadListOfAceKeyAssoc(xr);
+						break;
+					case "CustomColors":
+						o.CustomColors = ReadString(xr);
+						break;
+					case "WinFavsBaseFolderName":
+						o.WinFavsBaseFolderName = ReadString(xr);
+						break;
+					case "WinFavsFileNamePrefix":
+						o.WinFavsFileNamePrefix = ReadString(xr);
+						break;
+					case "WinFavsFileNameSuffix":
+						o.WinFavsFileNameSuffix = ReadString(xr);
+						break;
+					case "RecycleBinCollapse":
+						o.RecycleBinCollapse = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceIntegration ReadAceIntegration(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceIntegration o = new KeePass.App.Configuration.AceIntegration();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "HotKeyGlobalAutoType":
+						o.HotKeyGlobalAutoType = ReadUInt64(xr);
+						break;
+					case "HotKeySelectedAutoType":
+						o.HotKeySelectedAutoType = ReadUInt64(xr);
+						break;
+					case "HotKeyShowWindow":
+						o.HotKeyShowWindow = ReadUInt64(xr);
+						break;
+					case "HotKeyEntryMenu":
+						o.HotKeyEntryMenu = ReadUInt64(xr);
+						break;
+					case "UrlOverride":
+						o.UrlOverride = ReadString(xr);
+						break;
+					case "UrlSchemeOverrides":
+						o.UrlSchemeOverrides = ReadAceUrlSchemeOverrides(xr);
+						break;
+					case "SearchKeyFiles":
+						o.SearchKeyFiles = ReadBoolean(xr);
+						break;
+					case "SearchKeyFilesOnRemovableMedia":
+						o.SearchKeyFilesOnRemovableMedia = ReadBoolean(xr);
+						break;
+					case "LimitToSingleInstance":
+						o.LimitToSingleInstance = ReadBoolean(xr);
+						break;
+					case "AutoTypeMatchByTitle":
+						o.AutoTypeMatchByTitle = ReadBoolean(xr);
+						break;
+					case "AutoTypeMatchByUrlInTitle":
+						o.AutoTypeMatchByUrlInTitle = ReadBoolean(xr);
+						break;
+					case "AutoTypeMatchByUrlHostInTitle":
+						o.AutoTypeMatchByUrlHostInTitle = ReadBoolean(xr);
+						break;
+					case "AutoTypeMatchByTagInTitle":
+						o.AutoTypeMatchByTagInTitle = ReadBoolean(xr);
+						break;
+					case "AutoTypePrependInitSequenceForIE":
+						o.AutoTypePrependInitSequenceForIE = ReadBoolean(xr);
+						break;
+					case "AutoTypeReleaseAltWithKeyPress":
+						o.AutoTypeReleaseAltWithKeyPress = ReadBoolean(xr);
+						break;
+					case "AutoTypeAdjustKeyboardLayout":
+						o.AutoTypeAdjustKeyboardLayout = ReadBoolean(xr);
+						break;
+					case "AutoTypeCancelOnWindowChange":
+						o.AutoTypeCancelOnWindowChange = ReadBoolean(xr);
+						break;
+					case "ProxyType":
+						o.ProxyType = ReadProxyServerType(xr);
+						break;
+					case "ProxyAddress":
+						o.ProxyAddress = ReadString(xr);
+						break;
+					case "ProxyPort":
+						o.ProxyPort = ReadString(xr);
+						break;
+					case "ProxyUserName":
+						o.ProxyUserName = ReadString(xr);
+						break;
+					case "ProxyPassword":
+						o.ProxyPassword = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceKvp[] ReadArrayOfAceKvp(XmlReader xr)
+		{
+			List<KeePass.App.Configuration.AceKvp> l = new List<KeePass.App.Configuration.AceKvp>();
+
+			if(SkipEmptyElement(xr)) return l.ToArray();
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePass.App.Configuration.AceKvp oElem = ReadAceKvp(xr);
+				l.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return l.ToArray();
+		}
+
+		private static KeePassLib.Translation.KPTranslationProperties ReadKPTranslationProperties(XmlReader xr)
+		{
+			KeePassLib.Translation.KPTranslationProperties o = new KeePassLib.Translation.KPTranslationProperties();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Application":
+						o.Application = ReadString(xr);
+						break;
+					case "ApplicationVersion":
+						o.ApplicationVersion = ReadString(xr);
+						break;
+					case "NameEnglish":
+						o.NameEnglish = ReadString(xr);
+						break;
+					case "NameNative":
+						o.NameNative = ReadString(xr);
+						break;
+					case "Iso6391Code":
+						o.Iso6391Code = ReadString(xr);
+						break;
+					case "RightToLeft":
+						o.RightToLeft = ReadBoolean(xr);
+						break;
+					case "AuthorName":
+						o.AuthorName = ReadString(xr);
+						break;
+					case "AuthorContact":
+						o.AuthorContact = ReadString(xr);
+						break;
+					case "Generator":
+						o.Generator = ReadString(xr);
+						break;
+					case "FileUuid":
+						o.FileUuid = ReadString(xr);
+						break;
+					case "LastModified":
+						o.LastModified = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<KeePassLib.Translation.KPStringTable> ReadListOfKPStringTable(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePassLib.Translation.KPStringTable> o = new System.Collections.Generic.List<KeePassLib.Translation.KPStringTable>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePassLib.Translation.KPStringTable oElem = ReadKPStringTable(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<KeePassLib.Translation.KPFormCustomization> ReadListOfKPFormCustomization(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePassLib.Translation.KPFormCustomization> o = new System.Collections.Generic.List<KeePassLib.Translation.KPFormCustomization>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePassLib.Translation.KPFormCustomization oElem = ReadKPFormCustomization(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.String ReadString(XmlReader xr)
+		{
+			return xr.ReadElementString();
+		}
+
+		private static System.Boolean ReadBoolean(XmlReader xr)
+		{
+			string strValue = xr.ReadElementString();
+			return XmlConvert.ToBoolean(strValue);
+		}
+
+		private static KeePassLib.Serialization.IOConnectionInfo ReadIOConnectionInfo(XmlReader xr)
+		{
+			KeePassLib.Serialization.IOConnectionInfo o = new KeePassLib.Serialization.IOConnectionInfo();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Path":
+						o.Path = ReadString(xr);
+						break;
+					case "UserName":
+						o.UserName = ReadString(xr);
+						break;
+					case "Password":
+						o.Password = ReadString(xr);
+						break;
+					case "CredProtMode":
+						o.CredProtMode = ReadIOCredProtMode(xr);
+						break;
+					case "CredSaveMode":
+						o.CredSaveMode = ReadIOCredSaveMode(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceMru ReadAceMru(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceMru o = new KeePass.App.Configuration.AceMru();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "MaxItemCount":
+						o.MaxItemCount = ReadUInt32(xr);
+						break;
+					case "Items":
+						o.Items = ReadListOfIOConnectionInfo(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceStartUp ReadAceStartUp(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceStartUp o = new KeePass.App.Configuration.AceStartUp();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "OpenLastFile":
+						o.OpenLastFile = ReadBoolean(xr);
+						break;
+					case "CheckForUpdate":
+						o.CheckForUpdate = ReadBoolean(xr);
+						break;
+					case "CheckForUpdateConfigured":
+						o.CheckForUpdateConfigured = ReadBoolean(xr);
+						break;
+					case "MinimizedAndLocked":
+						o.MinimizedAndLocked = ReadBoolean(xr);
+						break;
+					case "PluginCacheDeleteOld":
+						o.PluginCacheDeleteOld = ReadBoolean(xr);
+						break;
+					case "PluginCacheClearOnce":
+						o.PluginCacheClearOnce = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceOpenDb ReadAceOpenDb(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceOpenDb o = new KeePass.App.Configuration.AceOpenDb();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "ShowExpiredEntries":
+						o.ShowExpiredEntries = ReadBoolean(xr);
+						break;
+					case "ShowSoonToExpireEntries":
+						o.ShowSoonToExpireEntries = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceCloseDb ReadAceCloseDb(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceCloseDb o = new KeePass.App.Configuration.AceCloseDb();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "AutoSave":
+						o.AutoSave = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.Ecas.EcasTriggerSystem ReadEcasTriggerSystem(XmlReader xr)
+		{
+			KeePass.Ecas.EcasTriggerSystem o = new KeePass.Ecas.EcasTriggerSystem();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Enabled":
+						o.Enabled = ReadBoolean(xr);
+						break;
+					case "Triggers":
+						o.TriggerArrayForSerialization = ReadArrayOfEcasTrigger(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Int32 ReadInt32(XmlReader xr)
+		{
+			string strValue = xr.ReadElementString();
+			return XmlConvert.ToInt32(strValue);
+		}
+
+		private static System.Single ReadSingle(XmlReader xr)
+		{
+			string strValue = xr.ReadElementString();
+			return XmlConvert.ToSingle(strValue);
+		}
+
+		private static Dictionary<string, KeePass.App.Configuration.AceMainWindowLayout> m_dictAceMainWindowLayout = null;
+		private static KeePass.App.Configuration.AceMainWindowLayout ReadAceMainWindowLayout(XmlReader xr)
+		{
+			if(m_dictAceMainWindowLayout == null)
+			{
+				m_dictAceMainWindowLayout = new Dictionary<string, KeePass.App.Configuration.AceMainWindowLayout>();
+				m_dictAceMainWindowLayout["Default"] = KeePass.App.Configuration.AceMainWindowLayout.Default;
+				m_dictAceMainWindowLayout["SideBySide"] = KeePass.App.Configuration.AceMainWindowLayout.SideBySide;
+			}
+
+			string strValue = xr.ReadElementString();
+			KeePass.App.Configuration.AceMainWindowLayout eResult;
+			if(!m_dictAceMainWindowLayout.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static KeePass.App.Configuration.AceToolBar ReadAceToolBar(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceToolBar o = new KeePass.App.Configuration.AceToolBar();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Show":
+						o.Show = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceEntryView ReadAceEntryView(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceEntryView o = new KeePass.App.Configuration.AceEntryView();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Show":
+						o.Show = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceTanView ReadAceTanView(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceTanView o = new KeePass.App.Configuration.AceTanView();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "UseSimpleView":
+						o.UseSimpleView = ReadBoolean(xr);
+						break;
+					case "ShowIndices":
+						o.ShowIndices = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<KeePass.App.Configuration.AceColumn> ReadListOfAceColumn(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePass.App.Configuration.AceColumn> o = new System.Collections.Generic.List<KeePass.App.Configuration.AceColumn>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePass.App.Configuration.AceColumn oElem = ReadAceColumn(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.UI.ListSorter ReadListSorter(XmlReader xr)
+		{
+			KeePass.UI.ListSorter o = new KeePass.UI.ListSorter();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Column":
+						o.Column = ReadInt32(xr);
+						break;
+					case "Order":
+						o.Order = ReadSortOrder(xr);
+						break;
+					case "CompareNaturally":
+						o.CompareNaturally = ReadBoolean(xr);
+						break;
+					case "CompareTimes":
+						o.CompareTimes = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceTrayIcon ReadAceTrayIcon(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceTrayIcon o = new KeePass.App.Configuration.AceTrayIcon();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "ShowOnlyIfTrayed":
+						o.ShowOnlyIfTrayed = ReadBoolean(xr);
+						break;
+					case "SingleClickDefault":
+						o.SingleClickDefault = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceHiding ReadAceHiding(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceHiding o = new KeePass.App.Configuration.AceHiding();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "SeparateHidingSettings":
+						o.SeparateHidingSettings = ReadBoolean(xr);
+						break;
+					case "HideInEntryWindow":
+						o.HideInEntryWindow = ReadBoolean(xr);
+						break;
+					case "UnhideButtonAlsoUnhidesSource":
+						o.UnhideButtonAlsoUnhidesSource = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceFont ReadAceFont(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceFont o = new KeePass.App.Configuration.AceFont();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Family":
+						o.Family = ReadString(xr);
+						break;
+					case "Size":
+						o.Size = ReadSingle(xr);
+						break;
+					case "GraphicsUnit":
+						o.GraphicsUnit = ReadGraphicsUnit(xr);
+						break;
+					case "Style":
+						o.Style = ReadFontStyle(xr);
+						break;
+					case "OverrideUIDefault":
+						o.OverrideUIDefault = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static Dictionary<string, KeePass.UI.BannerStyle> m_dictBannerStyle = null;
+		private static KeePass.UI.BannerStyle ReadBannerStyle(XmlReader xr)
+		{
+			if(m_dictBannerStyle == null)
+			{
+				m_dictBannerStyle = new Dictionary<string, KeePass.UI.BannerStyle>();
+				m_dictBannerStyle["Default"] = KeePass.UI.BannerStyle.Default;
+				m_dictBannerStyle["WinXPLogin"] = KeePass.UI.BannerStyle.WinXPLogin;
+				m_dictBannerStyle["WinVistaBlack"] = KeePass.UI.BannerStyle.WinVistaBlack;
+				m_dictBannerStyle["KeePassWin32"] = KeePass.UI.BannerStyle.KeePassWin32;
+				m_dictBannerStyle["BlueCarbon"] = KeePass.UI.BannerStyle.BlueCarbon;
+			}
+
+			string strValue = xr.ReadElementString();
+			KeePass.UI.BannerStyle eResult;
+			if(!m_dictBannerStyle.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static System.Int64 ReadInt64(XmlReader xr)
+		{
+			string strValue = xr.ReadElementString();
+			return XmlConvert.ToInt64(strValue);
+		}
+
+		private static System.UInt64 ReadUInt64(XmlReader xr)
+		{
+			string strValue = xr.ReadElementString();
+			return XmlConvert.ToUInt64(strValue);
+		}
+
+		private static KeePass.App.Configuration.AceWorkspaceLocking ReadAceWorkspaceLocking(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceWorkspaceLocking o = new KeePass.App.Configuration.AceWorkspaceLocking();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "LockOnWindowMinimize":
+						o.LockOnWindowMinimize = ReadBoolean(xr);
+						break;
+					case "LockOnSessionSwitch":
+						o.LockOnSessionSwitch = ReadBoolean(xr);
+						break;
+					case "LockOnSuspend":
+						o.LockOnSuspend = ReadBoolean(xr);
+						break;
+					case "LockOnRemoteControlChange":
+						o.LockOnRemoteControlChange = ReadBoolean(xr);
+						break;
+					case "LockAfterTime":
+						o.LockAfterTime = ReadUInt32(xr);
+						break;
+					case "LockAfterGlobalTime":
+						o.LockAfterGlobalTime = ReadUInt32(xr);
+						break;
+					case "ExitInsteadOfLockingAfterTime":
+						o.ExitInsteadOfLockingAfterTime = ReadBoolean(xr);
+						break;
+					case "AlwaysExitInsteadOfLocking":
+						o.AlwaysExitInsteadOfLocking = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.AppPolicyFlags ReadAppPolicyFlags(XmlReader xr)
+		{
+			KeePass.App.AppPolicyFlags o = new KeePass.App.AppPolicyFlags();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Plugins":
+						o.Plugins = ReadBoolean(xr);
+						break;
+					case "Export":
+						o.Export = ReadBoolean(xr);
+						break;
+					case "ExportNoKey":
+						o.ExportNoKey = ReadBoolean(xr);
+						break;
+					case "Import":
+						o.Import = ReadBoolean(xr);
+						break;
+					case "Print":
+						o.Print = ReadBoolean(xr);
+						break;
+					case "PrintNoKey":
+						o.PrintNoKey = ReadBoolean(xr);
+						break;
+					case "NewFile":
+						o.NewFile = ReadBoolean(xr);
+						break;
+					case "SaveFile":
+						o.SaveFile = ReadBoolean(xr);
+						break;
+					case "AutoType":
+						o.AutoType = ReadBoolean(xr);
+						break;
+					case "AutoTypeWithoutContext":
+						o.AutoTypeWithoutContext = ReadBoolean(xr);
+						break;
+					case "CopyToClipboard":
+						o.CopyToClipboard = ReadBoolean(xr);
+						break;
+					case "CopyWholeEntries":
+						o.CopyWholeEntries = ReadBoolean(xr);
+						break;
+					case "DragDrop":
+						o.DragDrop = ReadBoolean(xr);
+						break;
+					case "UnhidePasswords":
+						o.UnhidePasswords = ReadBoolean(xr);
+						break;
+					case "ChangeMasterKey":
+						o.ChangeMasterKey = ReadBoolean(xr);
+						break;
+					case "ChangeMasterKeyNoKey":
+						o.ChangeMasterKeyNoKey = ReadBoolean(xr);
+						break;
+					case "EditTriggers":
+						o.EditTriggers = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceMasterPassword ReadAceMasterPassword(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceMasterPassword o = new KeePass.App.Configuration.AceMasterPassword();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "MinimumLength":
+						o.MinimumLength = ReadUInt32(xr);
+						break;
+					case "MinimumQuality":
+						o.MinimumQuality = ReadUInt32(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePassLib.Cryptography.PasswordGenerator.PwProfile ReadPwProfile(XmlReader xr)
+		{
+			KeePassLib.Cryptography.PasswordGenerator.PwProfile o = new KeePassLib.Cryptography.PasswordGenerator.PwProfile();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Name":
+						o.Name = ReadString(xr);
+						break;
+					case "GeneratorType":
+						o.GeneratorType = ReadPasswordGeneratorType(xr);
+						break;
+					case "CollectUserEntropy":
+						o.CollectUserEntropy = ReadBoolean(xr);
+						break;
+					case "Length":
+						o.Length = ReadUInt32(xr);
+						break;
+					case "CharSetRanges":
+						o.CharSetRanges = ReadString(xr);
+						break;
+					case "CharSetAdditional":
+						o.CharSetAdditional = ReadString(xr);
+						break;
+					case "Pattern":
+						o.Pattern = ReadString(xr);
+						break;
+					case "PatternPermutePassword":
+						o.PatternPermutePassword = ReadBoolean(xr);
+						break;
+					case "ExcludeLookAlike":
+						o.ExcludeLookAlike = ReadBoolean(xr);
+						break;
+					case "NoRepeatingCharacters":
+						o.NoRepeatingCharacters = ReadBoolean(xr);
+						break;
+					case "ExcludeCharacters":
+						o.ExcludeCharacters = ReadString(xr);
+						break;
+					case "CustomAlgorithmUuid":
+						o.CustomAlgorithmUuid = ReadString(xr);
+						break;
+					case "CustomAlgorithmOptions":
+						o.CustomAlgorithmOptions = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<KeePassLib.Cryptography.PasswordGenerator.PwProfile> ReadListOfPwProfile(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePassLib.Cryptography.PasswordGenerator.PwProfile> o = new System.Collections.Generic.List<KeePassLib.Cryptography.PasswordGenerator.PwProfile>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePassLib.Cryptography.PasswordGenerator.PwProfile oElem = ReadPwProfile(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.UInt32 ReadUInt32(XmlReader xr)
+		{
+			string strValue = xr.ReadElementString();
+			return XmlConvert.ToUInt32(strValue);
+		}
+
+		private static KeePassLib.SearchParameters ReadSearchParameters(XmlReader xr)
+		{
+			KeePassLib.SearchParameters o = new KeePassLib.SearchParameters();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "SearchString":
+						o.SearchString = ReadString(xr);
+						break;
+					case "RegularExpression":
+						o.RegularExpression = ReadBoolean(xr);
+						break;
+					case "SearchInTitles":
+						o.SearchInTitles = ReadBoolean(xr);
+						break;
+					case "SearchInUserNames":
+						o.SearchInUserNames = ReadBoolean(xr);
+						break;
+					case "SearchInPasswords":
+						o.SearchInPasswords = ReadBoolean(xr);
+						break;
+					case "SearchInUrls":
+						o.SearchInUrls = ReadBoolean(xr);
+						break;
+					case "SearchInNotes":
+						o.SearchInNotes = ReadBoolean(xr);
+						break;
+					case "SearchInOther":
+						o.SearchInOther = ReadBoolean(xr);
+						break;
+					case "SearchInUuids":
+						o.SearchInUuids = ReadBoolean(xr);
+						break;
+					case "SearchInGroupNames":
+						o.SearchInGroupNames = ReadBoolean(xr);
+						break;
+					case "SearchInTags":
+						o.SearchInTags = ReadBoolean(xr);
+						break;
+					case "ComparisonMode":
+						o.ComparisonMode = ReadStringComparison(xr);
+						break;
+					case "ExcludeExpired":
+						o.ExcludeExpired = ReadBoolean(xr);
+						break;
+					case "RespectEntrySearchingDisabled":
+						o.RespectEntrySearchingDisabled = ReadBoolean(xr);
+						break;
+					case "DataTransformation":
+						o.DataTransformation = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<KeePass.App.Configuration.AceKeyAssoc> ReadListOfAceKeyAssoc(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePass.App.Configuration.AceKeyAssoc> o = new System.Collections.Generic.List<KeePass.App.Configuration.AceKeyAssoc>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePass.App.Configuration.AceKeyAssoc oElem = ReadAceKeyAssoc(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.App.Configuration.AceUrlSchemeOverrides ReadAceUrlSchemeOverrides(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceUrlSchemeOverrides o = new KeePass.App.Configuration.AceUrlSchemeOverrides();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "BuiltInOverridesEnabled":
+						o.BuiltInOverridesEnabled = ReadUInt64(xr);
+						break;
+					case "CustomOverrides":
+						o.CustomOverrides = ReadListOfAceUrlSchemeOverride(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static Dictionary<string, KeePassLib.ProxyServerType> m_dictProxyServerType = null;
+		private static KeePassLib.ProxyServerType ReadProxyServerType(XmlReader xr)
+		{
+			if(m_dictProxyServerType == null)
+			{
+				m_dictProxyServerType = new Dictionary<string, KeePassLib.ProxyServerType>();
+				m_dictProxyServerType["None"] = KeePassLib.ProxyServerType.None;
+				m_dictProxyServerType["System"] = KeePassLib.ProxyServerType.System;
+				m_dictProxyServerType["Manual"] = KeePassLib.ProxyServerType.Manual;
+			}
+
+			string strValue = xr.ReadElementString();
+			KeePassLib.ProxyServerType eResult;
+			if(!m_dictProxyServerType.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static KeePass.App.Configuration.AceKvp ReadAceKvp(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceKvp o = new KeePass.App.Configuration.AceKvp();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Key":
+						o.Key = ReadString(xr);
+						break;
+					case "Value":
+						o.Value = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePassLib.Translation.KPStringTable ReadKPStringTable(XmlReader xr)
+		{
+			KeePassLib.Translation.KPStringTable o = new KeePassLib.Translation.KPStringTable();
+
+			while(xr.MoveToNextAttribute())
+			{
+				switch(xr.LocalName)
+				{
+					case "Name":
+						o.Name = xr.Value;
+						break;
+					default:
+						Debug.Assert(false);
+						break;
+				}
+			}
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Strings":
+						o.Strings = ReadListOfKPStringTableItem(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePassLib.Translation.KPFormCustomization ReadKPFormCustomization(XmlReader xr)
+		{
+			KeePassLib.Translation.KPFormCustomization o = new KeePassLib.Translation.KPFormCustomization();
+
+			while(xr.MoveToNextAttribute())
+			{
+				switch(xr.LocalName)
+				{
+					case "FullName":
+						o.FullName = xr.Value;
+						break;
+					default:
+						Debug.Assert(false);
+						break;
+				}
+			}
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Window":
+						o.Window = ReadKPControlCustomization(xr);
+						break;
+					case "ChildControls":
+						o.Controls = ReadListOfKPControlCustomization(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static Dictionary<string, KeePassLib.Serialization.IOCredProtMode> m_dictIOCredProtMode = null;
+		private static KeePassLib.Serialization.IOCredProtMode ReadIOCredProtMode(XmlReader xr)
+		{
+			if(m_dictIOCredProtMode == null)
+			{
+				m_dictIOCredProtMode = new Dictionary<string, KeePassLib.Serialization.IOCredProtMode>();
+				m_dictIOCredProtMode["None"] = KeePassLib.Serialization.IOCredProtMode.None;
+				m_dictIOCredProtMode["Obf"] = KeePassLib.Serialization.IOCredProtMode.Obf;
+			}
+
+			string strValue = xr.ReadElementString();
+			KeePassLib.Serialization.IOCredProtMode eResult;
+			if(!m_dictIOCredProtMode.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static Dictionary<string, KeePassLib.Serialization.IOCredSaveMode> m_dictIOCredSaveMode = null;
+		private static KeePassLib.Serialization.IOCredSaveMode ReadIOCredSaveMode(XmlReader xr)
+		{
+			if(m_dictIOCredSaveMode == null)
+			{
+				m_dictIOCredSaveMode = new Dictionary<string, KeePassLib.Serialization.IOCredSaveMode>();
+				m_dictIOCredSaveMode["NoSave"] = KeePassLib.Serialization.IOCredSaveMode.NoSave;
+				m_dictIOCredSaveMode["UserNameOnly"] = KeePassLib.Serialization.IOCredSaveMode.UserNameOnly;
+				m_dictIOCredSaveMode["SaveCred"] = KeePassLib.Serialization.IOCredSaveMode.SaveCred;
+			}
+
+			string strValue = xr.ReadElementString();
+			KeePassLib.Serialization.IOCredSaveMode eResult;
+			if(!m_dictIOCredSaveMode.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static System.Collections.Generic.List<KeePassLib.Serialization.IOConnectionInfo> ReadListOfIOConnectionInfo(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePassLib.Serialization.IOConnectionInfo> o = new System.Collections.Generic.List<KeePassLib.Serialization.IOConnectionInfo>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePassLib.Serialization.IOConnectionInfo oElem = ReadIOConnectionInfo(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.Ecas.EcasTrigger[] ReadArrayOfEcasTrigger(XmlReader xr)
+		{
+			List<KeePass.Ecas.EcasTrigger> l = new List<KeePass.Ecas.EcasTrigger>();
+
+			if(SkipEmptyElement(xr)) return l.ToArray();
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePass.Ecas.EcasTrigger oElem = ReadEcasTrigger(xr);
+				l.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return l.ToArray();
+		}
+
+		private static KeePass.App.Configuration.AceColumn ReadAceColumn(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceColumn o = new KeePass.App.Configuration.AceColumn();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Type":
+						o.Type = ReadAceColumnType(xr);
+						break;
+					case "CustomName":
+						o.CustomName = ReadString(xr);
+						break;
+					case "Width":
+						o.Width = ReadInt32(xr);
+						break;
+					case "HideWithAsterisks":
+						o.HideWithAsterisks = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static Dictionary<string, System.Windows.Forms.SortOrder> m_dictSortOrder = null;
+		private static System.Windows.Forms.SortOrder ReadSortOrder(XmlReader xr)
+		{
+			if(m_dictSortOrder == null)
+			{
+				m_dictSortOrder = new Dictionary<string, System.Windows.Forms.SortOrder>();
+				m_dictSortOrder["None"] = System.Windows.Forms.SortOrder.None;
+				m_dictSortOrder["Ascending"] = System.Windows.Forms.SortOrder.Ascending;
+				m_dictSortOrder["Descending"] = System.Windows.Forms.SortOrder.Descending;
+			}
+
+			string strValue = xr.ReadElementString();
+			System.Windows.Forms.SortOrder eResult;
+			if(!m_dictSortOrder.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static Dictionary<string, System.Drawing.GraphicsUnit> m_dictGraphicsUnit = null;
+		private static System.Drawing.GraphicsUnit ReadGraphicsUnit(XmlReader xr)
+		{
+			if(m_dictGraphicsUnit == null)
+			{
+				m_dictGraphicsUnit = new Dictionary<string, System.Drawing.GraphicsUnit>();
+				m_dictGraphicsUnit["World"] = System.Drawing.GraphicsUnit.World;
+				m_dictGraphicsUnit["Display"] = System.Drawing.GraphicsUnit.Display;
+				m_dictGraphicsUnit["Pixel"] = System.Drawing.GraphicsUnit.Pixel;
+				m_dictGraphicsUnit["Point"] = System.Drawing.GraphicsUnit.Point;
+				m_dictGraphicsUnit["Inch"] = System.Drawing.GraphicsUnit.Inch;
+				m_dictGraphicsUnit["Document"] = System.Drawing.GraphicsUnit.Document;
+				m_dictGraphicsUnit["Millimeter"] = System.Drawing.GraphicsUnit.Millimeter;
+			}
+
+			string strValue = xr.ReadElementString();
+			System.Drawing.GraphicsUnit eResult;
+			if(!m_dictGraphicsUnit.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static Dictionary<string, System.Drawing.FontStyle> m_dictFontStyle = null;
+		private static System.Drawing.FontStyle ReadFontStyle(XmlReader xr)
+		{
+			if(m_dictFontStyle == null)
+			{
+				m_dictFontStyle = new Dictionary<string, System.Drawing.FontStyle>();
+				m_dictFontStyle["Regular"] = System.Drawing.FontStyle.Regular;
+				m_dictFontStyle["Bold"] = System.Drawing.FontStyle.Bold;
+				m_dictFontStyle["Italic"] = System.Drawing.FontStyle.Italic;
+				m_dictFontStyle["Underline"] = System.Drawing.FontStyle.Underline;
+				m_dictFontStyle["Strikeout"] = System.Drawing.FontStyle.Strikeout;
+			}
+
+			string strValue = xr.ReadElementString();
+			System.Drawing.FontStyle eResult = (System.Drawing.FontStyle)0;
+			string[] vValues = strValue.Split(m_vEnumSeps, StringSplitOptions.RemoveEmptyEntries);
+			foreach(string strPart in vValues)
+			{
+				System.Drawing.FontStyle ePart;
+				if(m_dictFontStyle.TryGetValue(strPart, out ePart))
+					eResult |= ePart;
+				else { Debug.Assert(false); }
+			}
+			return eResult;
+		}
+
+		private static Dictionary<string, KeePassLib.Cryptography.PasswordGenerator.PasswordGeneratorType> m_dictPasswordGeneratorType = null;
+		private static KeePassLib.Cryptography.PasswordGenerator.PasswordGeneratorType ReadPasswordGeneratorType(XmlReader xr)
+		{
+			if(m_dictPasswordGeneratorType == null)
+			{
+				m_dictPasswordGeneratorType = new Dictionary<string, KeePassLib.Cryptography.PasswordGenerator.PasswordGeneratorType>();
+				m_dictPasswordGeneratorType["CharSet"] = KeePassLib.Cryptography.PasswordGenerator.PasswordGeneratorType.CharSet;
+				m_dictPasswordGeneratorType["Pattern"] = KeePassLib.Cryptography.PasswordGenerator.PasswordGeneratorType.Pattern;
+				m_dictPasswordGeneratorType["Custom"] = KeePassLib.Cryptography.PasswordGenerator.PasswordGeneratorType.Custom;
+			}
+
+			string strValue = xr.ReadElementString();
+			KeePassLib.Cryptography.PasswordGenerator.PasswordGeneratorType eResult;
+			if(!m_dictPasswordGeneratorType.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static Dictionary<string, System.StringComparison> m_dictStringComparison = null;
+		private static System.StringComparison ReadStringComparison(XmlReader xr)
+		{
+			if(m_dictStringComparison == null)
+			{
+				m_dictStringComparison = new Dictionary<string, System.StringComparison>();
+				m_dictStringComparison["CurrentCulture"] = System.StringComparison.CurrentCulture;
+				m_dictStringComparison["CurrentCultureIgnoreCase"] = System.StringComparison.CurrentCultureIgnoreCase;
+				m_dictStringComparison["InvariantCulture"] = System.StringComparison.InvariantCulture;
+				m_dictStringComparison["InvariantCultureIgnoreCase"] = System.StringComparison.InvariantCultureIgnoreCase;
+				m_dictStringComparison["Ordinal"] = System.StringComparison.Ordinal;
+				m_dictStringComparison["OrdinalIgnoreCase"] = System.StringComparison.OrdinalIgnoreCase;
+			}
+
+			string strValue = xr.ReadElementString();
+			System.StringComparison eResult;
+			if(!m_dictStringComparison.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static KeePass.App.Configuration.AceKeyAssoc ReadAceKeyAssoc(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceKeyAssoc o = new KeePass.App.Configuration.AceKeyAssoc();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "DatabasePath":
+						o.DatabasePath = ReadString(xr);
+						break;
+					case "KeyFilePath":
+						o.KeyFilePath = ReadString(xr);
+						break;
+					case "KeyProvider":
+						o.KeyProvider = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<KeePass.App.Configuration.AceUrlSchemeOverride> ReadListOfAceUrlSchemeOverride(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePass.App.Configuration.AceUrlSchemeOverride> o = new System.Collections.Generic.List<KeePass.App.Configuration.AceUrlSchemeOverride>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePass.App.Configuration.AceUrlSchemeOverride oElem = ReadAceUrlSchemeOverride(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<KeePassLib.Translation.KPStringTableItem> ReadListOfKPStringTableItem(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePassLib.Translation.KPStringTableItem> o = new System.Collections.Generic.List<KeePassLib.Translation.KPStringTableItem>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePassLib.Translation.KPStringTableItem oElem = ReadKPStringTableItem(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePassLib.Translation.KPControlCustomization ReadKPControlCustomization(XmlReader xr)
+		{
+			KeePassLib.Translation.KPControlCustomization o = new KeePassLib.Translation.KPControlCustomization();
+
+			while(xr.MoveToNextAttribute())
+			{
+				switch(xr.LocalName)
+				{
+					case "Name":
+						o.Name = xr.Value;
+						break;
+					case "BaseHash":
+						o.BaseHash = xr.Value;
+						break;
+					default:
+						Debug.Assert(false);
+						break;
+				}
+			}
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Text":
+						o.Text = ReadString(xr);
+						break;
+					case "Layout":
+						o.Layout = ReadKpccLayout(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<KeePassLib.Translation.KPControlCustomization> ReadListOfKPControlCustomization(XmlReader xr)
+		{
+			System.Collections.Generic.List<KeePassLib.Translation.KPControlCustomization> o = new System.Collections.Generic.List<KeePassLib.Translation.KPControlCustomization>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePassLib.Translation.KPControlCustomization oElem = ReadKPControlCustomization(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.Ecas.EcasTrigger ReadEcasTrigger(XmlReader xr)
+		{
+			KeePass.Ecas.EcasTrigger o = new KeePass.Ecas.EcasTrigger();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Guid":
+						o.UuidString = ReadString(xr);
+						break;
+					case "Name":
+						o.Name = ReadString(xr);
+						break;
+					case "Comments":
+						o.Comments = ReadString(xr);
+						break;
+					case "Enabled":
+						o.Enabled = ReadBoolean(xr);
+						break;
+					case "InitiallyOn":
+						o.InitiallyOn = ReadBoolean(xr);
+						break;
+					case "TurnOffAfterAction":
+						o.TurnOffAfterAction = ReadBoolean(xr);
+						break;
+					case "Events":
+						o.EventArrayForSerialization = ReadArrayOfEcasEvent(xr);
+						break;
+					case "Conditions":
+						o.ConditionsArrayForSerialization = ReadArrayOfEcasCondition(xr);
+						break;
+					case "Actions":
+						o.ActionArrayForSerialization = ReadArrayOfEcasAction(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static Dictionary<string, KeePass.App.Configuration.AceColumnType> m_dictAceColumnType = null;
+		private static KeePass.App.Configuration.AceColumnType ReadAceColumnType(XmlReader xr)
+		{
+			if(m_dictAceColumnType == null)
+			{
+				m_dictAceColumnType = new Dictionary<string, KeePass.App.Configuration.AceColumnType>();
+				m_dictAceColumnType["Title"] = KeePass.App.Configuration.AceColumnType.Title;
+				m_dictAceColumnType["UserName"] = KeePass.App.Configuration.AceColumnType.UserName;
+				m_dictAceColumnType["Password"] = KeePass.App.Configuration.AceColumnType.Password;
+				m_dictAceColumnType["Url"] = KeePass.App.Configuration.AceColumnType.Url;
+				m_dictAceColumnType["Notes"] = KeePass.App.Configuration.AceColumnType.Notes;
+				m_dictAceColumnType["CreationTime"] = KeePass.App.Configuration.AceColumnType.CreationTime;
+				m_dictAceColumnType["LastAccessTime"] = KeePass.App.Configuration.AceColumnType.LastAccessTime;
+				m_dictAceColumnType["LastModificationTime"] = KeePass.App.Configuration.AceColumnType.LastModificationTime;
+				m_dictAceColumnType["ExpiryTime"] = KeePass.App.Configuration.AceColumnType.ExpiryTime;
+				m_dictAceColumnType["Uuid"] = KeePass.App.Configuration.AceColumnType.Uuid;
+				m_dictAceColumnType["Attachment"] = KeePass.App.Configuration.AceColumnType.Attachment;
+				m_dictAceColumnType["CustomString"] = KeePass.App.Configuration.AceColumnType.CustomString;
+				m_dictAceColumnType["PluginExt"] = KeePass.App.Configuration.AceColumnType.PluginExt;
+				m_dictAceColumnType["OverrideUrl"] = KeePass.App.Configuration.AceColumnType.OverrideUrl;
+				m_dictAceColumnType["Tags"] = KeePass.App.Configuration.AceColumnType.Tags;
+				m_dictAceColumnType["ExpiryTimeDateOnly"] = KeePass.App.Configuration.AceColumnType.ExpiryTimeDateOnly;
+				m_dictAceColumnType["Size"] = KeePass.App.Configuration.AceColumnType.Size;
+				m_dictAceColumnType["HistoryCount"] = KeePass.App.Configuration.AceColumnType.HistoryCount;
+				m_dictAceColumnType["Count"] = KeePass.App.Configuration.AceColumnType.Count;
+			}
+
+			string strValue = xr.ReadElementString();
+			KeePass.App.Configuration.AceColumnType eResult;
+			if(!m_dictAceColumnType.TryGetValue(strValue, out eResult))
+				{ Debug.Assert(false); }
+			return eResult;
+		}
+
+		private static KeePass.App.Configuration.AceUrlSchemeOverride ReadAceUrlSchemeOverride(XmlReader xr)
+		{
+			KeePass.App.Configuration.AceUrlSchemeOverride o = new KeePass.App.Configuration.AceUrlSchemeOverride();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Enabled":
+						o.Enabled = ReadBoolean(xr);
+						break;
+					case "Scheme":
+						o.Scheme = ReadString(xr);
+						break;
+					case "UrlOverride":
+						o.UrlOverride = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePassLib.Translation.KPStringTableItem ReadKPStringTableItem(XmlReader xr)
+		{
+			KeePassLib.Translation.KPStringTableItem o = new KeePassLib.Translation.KPStringTableItem();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "Name":
+						o.Name = ReadString(xr);
+						break;
+					case "Value":
+						o.Value = ReadString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePassLib.Translation.KpccLayout ReadKpccLayout(XmlReader xr)
+		{
+			KeePassLib.Translation.KpccLayout o = new KeePassLib.Translation.KpccLayout();
+
+			while(xr.MoveToNextAttribute())
+			{
+				switch(xr.LocalName)
+				{
+					case "X":
+						o.X = xr.Value;
+						break;
+					case "Y":
+						o.Y = xr.Value;
+						break;
+					case "Width":
+						o.Width = xr.Value;
+						break;
+					case "Height":
+						o.Height = xr.Value;
+						break;
+					default:
+						Debug.Assert(false);
+						break;
+				}
+			}
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				Debug.Assert(false);
+				xr.Skip();
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.Ecas.EcasEvent[] ReadArrayOfEcasEvent(XmlReader xr)
+		{
+			List<KeePass.Ecas.EcasEvent> l = new List<KeePass.Ecas.EcasEvent>();
+
+			if(SkipEmptyElement(xr)) return l.ToArray();
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePass.Ecas.EcasEvent oElem = ReadEcasEvent(xr);
+				l.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return l.ToArray();
+		}
+
+		private static KeePass.Ecas.EcasCondition[] ReadArrayOfEcasCondition(XmlReader xr)
+		{
+			List<KeePass.Ecas.EcasCondition> l = new List<KeePass.Ecas.EcasCondition>();
+
+			if(SkipEmptyElement(xr)) return l.ToArray();
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePass.Ecas.EcasCondition oElem = ReadEcasCondition(xr);
+				l.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return l.ToArray();
+		}
+
+		private static KeePass.Ecas.EcasAction[] ReadArrayOfEcasAction(XmlReader xr)
+		{
+			List<KeePass.Ecas.EcasAction> l = new List<KeePass.Ecas.EcasAction>();
+
+			if(SkipEmptyElement(xr)) return l.ToArray();
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				KeePass.Ecas.EcasAction oElem = ReadEcasAction(xr);
+				l.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return l.ToArray();
+		}
+
+		private static KeePass.Ecas.EcasEvent ReadEcasEvent(XmlReader xr)
+		{
+			KeePass.Ecas.EcasEvent o = new KeePass.Ecas.EcasEvent();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "TypeGuid":
+						o.TypeString = ReadString(xr);
+						break;
+					case "Parameters":
+						o.Parameters = ReadListOfString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.Ecas.EcasCondition ReadEcasCondition(XmlReader xr)
+		{
+			KeePass.Ecas.EcasCondition o = new KeePass.Ecas.EcasCondition();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "TypeGuid":
+						o.TypeString = ReadString(xr);
+						break;
+					case "Parameters":
+						o.Parameters = ReadListOfString(xr);
+						break;
+					case "Negate":
+						o.Negate = ReadBoolean(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static KeePass.Ecas.EcasAction ReadEcasAction(XmlReader xr)
+		{
+			KeePass.Ecas.EcasAction o = new KeePass.Ecas.EcasAction();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				switch(xr.LocalName)
+				{
+					case "TypeGuid":
+						o.TypeString = ReadString(xr);
+						break;
+					case "Parameters":
+						o.Parameters = ReadListOfString(xr);
+						break;
+					default:
+						Debug.Assert(false);
+						xr.Skip();
+						break;
+				}
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+
+		private static System.Collections.Generic.List<System.String> ReadListOfString(XmlReader xr)
+		{
+			System.Collections.Generic.List<System.String> o = new System.Collections.Generic.List<System.String>();
+
+			if(SkipEmptyElement(xr)) return o;
+
+			Debug.Assert(xr.NodeType == XmlNodeType.Element);
+			xr.ReadStartElement();
+			xr.MoveToContent();
+
+			while(true)
+			{
+				XmlNodeType nt = xr.NodeType;
+				if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;
+				if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }
+
+				System.String oElem = ReadString(xr);
+				o.Add(oElem);
+
+				xr.MoveToContent();
+			}
+
+			Debug.Assert(xr.NodeType == XmlNodeType.EndElement);
+			xr.ReadEndElement();
+			return o;
+		}
+	}
+}
diff --git a/KeePass/Util/XmlSerialization/XmlSerializerEx.cs b/KeePass/Util/XmlSerialization/XmlSerializerEx.cs
new file mode 100644
index 0000000..71835be
--- /dev/null
+++ b/KeePass/Util/XmlSerialization/XmlSerializerEx.cs
@@ -0,0 +1,558 @@
+/*
+  KeePass Password Safe - The Open-Source Password Manager
+  Copyright (C) 2003-2012 Dominik Reichl <dominik.reichl at t-online.de>
+
+  This program is free software; you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation; either version 2 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program; if not, write to the Free Software
+  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+*/
+
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.IO;
+using System.Xml;
+using System.Xml.Serialization;
+using System.Reflection;
+using System.Diagnostics;
+
+using KeePass.App.Configuration;
+
+using KeePassLib.Interfaces;
+using KeePassLib.Serialization;
+using KeePassLib.Translation;
+using KeePassLib.Utility;
+
+namespace KeePass.Util.XmlSerialization
+{
+	public sealed partial class XmlSerializerEx : IXmlSerializerEx
+	{
+		private readonly Type m_t;
+
+		public XmlSerializerEx(Type t)
+		{
+			m_t = t;
+		}
+
+		// AppConfigEx with KeePass.XmlSerializers.dll: 811 ms
+		// AppConfigEx with own deserializer: 312 ms
+		/* public object Deserialize(Stream s)
+		{
+			int tStart = Environment.TickCount;
+			object o = Deserialize_(s);
+			MessageService.ShowInfo(Environment.TickCount - tStart);
+			return o;
+		} */
+
+		public object Deserialize(Stream s)
+		{
+			object oResult = null;
+			if((m_t == typeof(AppConfigEx)) || (m_t == typeof(KPTranslation)))
+			{
+				XmlReaderSettings xrs = Kdb4File.CreateStdXmlReaderSettings();
+				XmlReader xr = XmlReader.Create(s, xrs);
+
+				string strRootName = GetXmlName(m_t);
+				bool bRootFound = SkipToRoot(xr, strRootName);
+
+				if(!bRootFound) { Debug.Assert(false); }
+				else if(m_t == typeof(AppConfigEx))
+					oResult = ReadAppConfigEx(xr);
+				else if(m_t == typeof(KPTranslation))
+					oResult = ReadKPTranslation(xr);
+				else { Debug.Assert(false); } // See top-level 'if'
+
+				xr.Close();
+			}
+			if(oResult != null) return oResult;
+
+			XmlSerializer xs = new XmlSerializer(m_t);
+			return xs.Deserialize(s);
+		}
+
+		private static bool SkipToRoot(XmlReader xr, string strRootName)
+		{
+			xr.Read(); // Initialize reader
+
+			bool bRootFound = false;
+			while(true)
+			{
+				if((xr.NodeType == XmlNodeType.Document) ||
+					(xr.NodeType == XmlNodeType.DocumentFragment) ||
+					(xr.NodeType == XmlNodeType.Element))
+				{
+					if(xr.Name == strRootName) { bRootFound = true; break; }
+					xr.Skip();
+				}
+				else if(!xr.Read()) { Debug.Assert(false); break; }
+			}
+
+			return bRootFound;
+		}
+
+		public void Serialize(XmlWriter xmlWriter, object o)
+		{
+			XmlSerializer xs = new XmlSerializer(m_t);
+			xs.Serialize(xmlWriter, o);
+		}
+
+		internal static T GetAttribute<T>(object[] vAttribs)
+			where T : Attribute
+		{
+			if(vAttribs == null) { Debug.Assert(false); return null; }
+
+			foreach(object o in vAttribs)
+			{
+				if(o == null) { Debug.Assert(false); continue; }
+				if(o.GetType() == typeof(T)) return (o as T);
+			}
+
+			return null;
+		}
+
+		internal static string GetXmlName(MemberInfo mi)
+		{
+			object[] vAttribs = mi.GetCustomAttributes(true);
+			string strXmlName = mi.Name;
+
+			XmlTypeAttribute xmlType = GetAttribute<XmlTypeAttribute>(vAttribs);
+			if(xmlType != null) strXmlName = xmlType.TypeName;
+			XmlRootAttribute xmlRoot = GetAttribute<XmlRootAttribute>(vAttribs);
+			if(xmlRoot != null) strXmlName = xmlRoot.ElementName;
+			XmlArrayAttribute xmlArray = GetAttribute<XmlArrayAttribute>(vAttribs);
+			if(xmlArray != null) strXmlName = xmlArray.ElementName;
+			XmlElementAttribute xmlElement = GetAttribute<XmlElementAttribute>(vAttribs);
+			if(xmlElement != null) strXmlName = xmlElement.ElementName;
+
+			return strXmlName;
+		}
+
+		private sealed class XmlsTypeInfo
+		{
+			public bool HasInfo { get { return (m_strReadCode.Length > 0); } }
+
+			private readonly Type m_t;
+			public Type Type { get { return m_t; } }
+
+			private readonly string m_strReadCode;
+			public string ReadCode { get { return m_strReadCode; } }
+
+			// private readonly string m_strWriteCode;
+			// public string WriteCode { get { return m_strWriteCode; } }
+
+			public XmlsTypeInfo(Type t)
+			{
+				m_t = t;
+				m_strReadCode = string.Empty;
+				// m_strWriteCode = string.Empty;
+			}
+
+			public XmlsTypeInfo(Type t, string strReadCode, string strWriteCode)
+			{
+				m_t = t;
+				m_strReadCode = (strReadCode ?? string.Empty);
+				// m_strWriteCode = (strWriteCode ?? string.Empty);
+			}
+		}
+
+		internal static void GenerateSerializers(CommandLineArgs cl)
+		{
+			StringBuilder sb = new StringBuilder();
+			int t = 0;
+
+			AppendLine(sb, "// This is a generated file!", ref t);
+			AppendLine(sb, "// Do not edit manually, changes will be overwritten.", ref t);
+			AppendLine(sb);
+			AppendLine(sb, "using System;", ref t);
+			AppendLine(sb, "using System.Collections.Generic;", ref t);
+			AppendLine(sb, "using System.Xml;", ref t);
+			AppendLine(sb, "using System.Diagnostics;", ref t);
+			AppendLine(sb);
+			AppendLine(sb, "using KeePassLib.Interfaces;", ref t);
+			AppendLine(sb);
+			AppendLine(sb, "namespace KeePass.Util.XmlSerialization", ref t);
+			AppendLine(sb, "{", ref t, 0, 1);
+			AppendLine(sb, "public sealed partial class XmlSerializerEx : IXmlSerializerEx", ref t);
+			AppendLine(sb, "{", ref t, 0, 1);
+			AppendLine(sb, "private static char[] m_vEnumSeps = new char[] {", ref t, 0, 1);
+			AppendLine(sb, "' ', '\\t', '\\r', '\\n', '|', ',', ';', ':'", ref t);
+			AppendLine(sb, "};", ref t, -1, 0);
+
+			Dictionary<string, XmlsTypeInfo> d =
+				new Dictionary<string, XmlsTypeInfo>();
+			d[typeof(AppConfigEx).FullName] = new XmlsTypeInfo(typeof(AppConfigEx));
+			d[typeof(KPTranslation).FullName] = new XmlsTypeInfo(typeof(KPTranslation));
+
+			bool bTypeCreated = true;
+			while(bTypeCreated)
+			{
+				bTypeCreated = false;
+				foreach(KeyValuePair<string, XmlsTypeInfo> kvp in d)
+				{
+					if(!kvp.Value.HasInfo)
+					{
+						d[kvp.Key] = GenerateSerializer(kvp.Value.Type, d, t);
+						bTypeCreated = true;
+						break; // Iterator might be invalid
+					}
+				}
+			}
+
+			foreach(KeyValuePair<string, XmlsTypeInfo> kvp in d)
+			{
+				AppendLine(sb);
+				sb.Append(kvp.Value.ReadCode);
+			}
+
+			AppendLine(sb, "}", ref t, -1, 0);
+			AppendLine(sb, "}", ref t, -1, 0);
+			Debug.Assert(t == 0);
+
+			string strFileData = StrUtil.NormalizeNewLines(sb.ToString(), true);
+
+			string strFile = cl["out"];
+			if(!string.IsNullOrEmpty(strFile))
+			{
+				strFile = UrlUtil.MakeAbsolutePath(WinUtil.GetExecutable(), strFile);
+				File.WriteAllText(strFile, strFileData, StrUtil.Utf8);
+				MessageService.ShowInfo("Saved XmlSerializerEx to:", strFile);
+			}
+		}
+
+		private static bool IsXmlConvertibleType(Type t)
+		{
+			return ((t == typeof(Boolean)) || (t == typeof(Byte)) ||
+				(t == typeof(Char)) || (t == typeof(DateTime)) ||
+				(t == typeof(DateTimeOffset)) || (t == typeof(Decimal)) ||
+				(t == typeof(Double)) || (t == typeof(Guid)) ||
+				(t == typeof(Int16)) || (t == typeof(Int32)) ||
+				(t == typeof(Int64)) || (t == typeof(SByte)) ||
+				(t == typeof(Single)) || (t == typeof(TimeSpan)) ||
+				(t == typeof(UInt16)) || (t == typeof(UInt32)) ||
+				(t == typeof(UInt64)));
+		}
+
+		private static void Append(StringBuilder sb, string strAppend,
+			ref int iIndent, int iIndentChangePre, int iIndentChangePost)
+		{
+			iIndent += iIndentChangePre;
+			Debug.Assert(iIndent >= 0);
+			sb.Append(new string('\t', Math.Max(iIndent, 0)));
+			sb.Append(strAppend);
+			iIndent += iIndentChangePost;
+		}
+
+		private static void AppendLine(StringBuilder sb)
+		{
+			sb.AppendLine();
+		}
+
+		private static void AppendLine(StringBuilder sb, string strAppend,
+			ref int iIndent)
+		{
+			AppendLine(sb, strAppend, ref iIndent, 0, 0);
+		}
+
+		private static void AppendLine(StringBuilder sb, string strAppend,
+			ref int iIndent, int iIndentChangePre, int iIndentChangePost)
+		{
+			Append(sb, strAppend + MessageService.NewLine, ref iIndent,
+				iIndentChangePre, iIndentChangePost);
+		}
+
+		internal static string GetFullTypeNameCS(Type t, out string strPrimarySubType)
+		{
+			string str = t.FullName;
+
+			if(str.StartsWith(@"System.Collections.Generic.List`1"))
+			{
+				int iElemTypeOffset = str.IndexOf("[[");
+				int iElemTypeEnd = str.IndexOfAny(new char[] {
+					',', ' ', '\t', '\r', '\n', ';', ':', ']' }, iElemTypeOffset);
+				strPrimarySubType = str.Substring(iElemTypeOffset + 2,
+					iElemTypeEnd - iElemTypeOffset - 2);
+
+				str = "System.Collections.Generic.List<" + strPrimarySubType + ">";
+			}
+			else if(str.EndsWith("[]"))
+				strPrimarySubType = str.Substring(0, str.Length - 2);
+			else strPrimarySubType = null;
+
+			return str;
+		}
+
+		internal static string GetTypeDesc(string strFullTypeNameCS)
+		{
+			string str = strFullTypeNameCS;
+
+			int iBackOffset = str.IndexOf('<');
+			if(iBackOffset < 0) iBackOffset = str.Length - 1;
+
+			int i = str.LastIndexOf('.', iBackOffset);
+			if(i >= 0) str = str.Substring(i + 1);
+
+			if(str.StartsWith("List<"))
+			{
+				string strSubType = str.Substring(5, str.Length - 6);
+				return "ListOf" + GetTypeDesc(strSubType);
+			}
+			if(str.EndsWith("[]"))
+			{
+				string strSubType = str.Substring(0, str.Length - 2);
+				return "ArrayOf" + GetTypeDesc(strSubType);
+			}
+
+			Debug.Assert(str.IndexOfAny(new char[] { '<', '>', '[', ']',
+				'`', ':', ' ', '\t', '\r', '\n' }) < 0);
+			return str;
+		}
+
+		internal static bool TypeIsList(string strTypeFullCS)
+		{
+			return strTypeFullCS.StartsWith("System.Collections.Generic.List<");
+		}
+
+		internal static bool TypeIsArray(string strTypeFullCS)
+		{
+			return strTypeFullCS.EndsWith("[]");
+		}
+
+		private static XmlsTypeInfo GenerateSerializer(Type t,
+			Dictionary<string, XmlsTypeInfo> dTypes, int iIndent)
+		{
+			StringBuilder sbr = new StringBuilder();
+			StringBuilder sbw = new StringBuilder();
+
+			string strSubTypeFull;
+			string strTypeFull = GetFullTypeNameCS(t, out strSubTypeFull);
+			string strTypeDesc = GetTypeDesc(strTypeFull);
+
+			string strSubTypeDesc = null;
+			if(strSubTypeFull != null)
+				strSubTypeDesc = GetTypeDesc(strSubTypeFull);
+
+			bool bIsList = TypeIsList(strTypeFull);
+			bool bIsArray = TypeIsArray(strTypeFull);
+			int ir = iIndent;
+
+			if(t.IsEnum)
+				AppendLine(sbr, "private static Dictionary<string, " + strTypeFull +
+					"> m_dict" + strTypeDesc + " = null;", ref ir);
+
+			AppendLine(sbr, "private static " + strTypeFull + " Read" +
+				strTypeDesc + "(XmlReader xr" +
+				// ((bIsList || bIsArray) ? ", string strItemName" : string.Empty) +
+				")", ref ir);
+			AppendLine(sbr, "{", ref ir, 0, 1);
+
+			if(t == typeof(string))
+			{
+				AppendLine(sbr, "return xr.ReadElementString();", ref ir);
+			}
+			else if(IsXmlConvertibleType(t))
+			{
+				AppendLine(sbr, "string strValue = xr.ReadElementString();", ref ir);
+				AppendLine(sbr, "return XmlConvert.To" + strTypeDesc + "(strValue);", ref ir);
+			}
+			else if(t.IsEnum)
+			{
+				AppendLine(sbr, "if(m_dict" + strTypeDesc + " == null)", ref ir);
+				AppendLine(sbr, "{", ref ir, 0, 1);
+				AppendLine(sbr, "m_dict" + strTypeDesc + " = new Dictionary<string, " +
+					strTypeFull + ">();", ref ir);
+
+				string[] vEnumNames = Enum.GetNames(t);
+				foreach(string strEnumName in vEnumNames)
+				{
+					AppendLine(sbr, "m_dict" + strTypeDesc + "[\"" + strEnumName +
+						"\"] = " + strTypeFull + "." + strEnumName + ";", ref ir);
+				}
+
+				AppendLine(sbr, "}", ref ir, -1, 0);
+				AppendLine(sbr);
+
+				AppendLine(sbr, "string strValue = xr.ReadElementString();", ref ir);
+
+				// AppendLine(sbr, "return Enum.Parse(typeof(" + strTypeFull + "), strValue);", ref ir);
+				object[] vAttribs = t.GetCustomAttributes(true);
+				if(GetAttribute<FlagsAttribute>(vAttribs) != null)
+				{
+					AppendLine(sbr, strTypeFull + " eResult = (" + strTypeFull + ")0;", ref ir);
+					AppendLine(sbr, "string[] vValues = strValue.Split(m_vEnumSeps, StringSplitOptions.RemoveEmptyEntries);", ref ir);
+					AppendLine(sbr, "foreach(string strPart in vValues)", ref ir);
+					AppendLine(sbr, "{", ref ir, 0, 1);
+					AppendLine(sbr, strTypeFull + " ePart;", ref ir);
+					AppendLine(sbr, "if(m_dict" + strTypeDesc + ".TryGetValue(strPart, out ePart))", ref ir);
+					AppendLine(sbr, "eResult |= ePart;", ref ir, 1, -1);
+					AppendLine(sbr, "else { Debug.Assert(false); }", ref ir);
+					AppendLine(sbr, "}", ref ir, -1, 0);
+				}
+				else
+				{
+					AppendLine(sbr, strTypeFull + " eResult;", ref ir);
+					AppendLine(sbr, "if(!m_dict" + strTypeDesc + ".TryGetValue(strValue, out eResult))", ref ir);
+					AppendLine(sbr, "{ Debug.Assert(false); }", ref ir, 1, -1);
+				}
+
+				AppendLine(sbr, "return eResult;", ref ir);
+			}
+			else
+			{
+				if(!bIsArray)
+					AppendLine(sbr, strTypeFull + " o = new " + strTypeFull + "();", ref ir);
+				else
+					AppendLine(sbr, "List<" + strSubTypeFull + "> l = new List<" +
+						strSubTypeFull + ">();", ref ir);
+				AppendLine(sbr);
+
+				byte[] pbInsAttribs = new byte[16];
+				Program.GlobalRandom.NextBytes(pbInsAttribs);
+				string strInsAttribs = Convert.ToBase64String(pbInsAttribs,
+					Base64FormattingOptions.None);
+				sbr.Append(strInsAttribs);
+				StringBuilder sbAttribs = new StringBuilder();
+
+				AppendLine(sbr, "if(SkipEmptyElement(xr)) return " +
+					(bIsArray ? "l.ToArray();" : "o;"), ref ir);
+				AppendLine(sbr);
+
+				AppendLine(sbr, "Debug.Assert(xr.NodeType == XmlNodeType.Element);", ref ir);
+				AppendLine(sbr, "xr.ReadStartElement();", ref ir);
+				AppendLine(sbr, "xr.MoveToContent();", ref ir);
+				AppendLine(sbr);
+				AppendLine(sbr, "while(true)", ref ir);
+				AppendLine(sbr, "{", ref ir, 0, 1);
+				AppendLine(sbr, "XmlNodeType nt = xr.NodeType;", ref ir);
+				AppendLine(sbr, "if((nt == XmlNodeType.EndElement) || (nt == XmlNodeType.None)) break;", ref ir);
+				AppendLine(sbr, "if(nt != XmlNodeType.Element) { Debug.Assert(false); continue; }", ref ir);
+				AppendLine(sbr);
+
+				if(bIsList || bIsArray)
+				{
+					AppendLine(sbr, strSubTypeFull + " oElem = Read" + strSubTypeDesc +
+						"(xr);", ref ir);
+					AppendLine(sbr, (bIsArray ? "l" : "o") + ".Add(oElem);", ref ir);
+
+					if(!dTypes.ContainsKey(strSubTypeFull))
+						dTypes[strSubTypeFull] = new XmlsTypeInfo(Type.GetType(strSubTypeFull));
+				}
+				else
+				{
+					StringBuilder sbs = new StringBuilder();
+					uint uElements = 0;
+
+					AppendLine(sbs, "switch(xr.LocalName)", ref ir);
+					AppendLine(sbs, "{", ref ir, 0, 1);
+
+					PropertyInfo[] vProps = t.GetProperties();
+					foreach(PropertyInfo pi in vProps)
+					{
+						object[] vAttribs = pi.GetCustomAttributes(true);
+						if(GetAttribute<XmlIgnoreAttribute>(vAttribs) != null) continue;
+
+						if(!pi.CanRead || !pi.CanWrite) { Debug.Assert(false); continue; }
+
+						Type tProp = pi.PropertyType;
+						string strPropSubTypeFull;
+						string strPropTypeFull = GetFullTypeNameCS(tProp, out strPropSubTypeFull);
+						string strPropTypeDesc = GetTypeDesc(strPropTypeFull);
+
+						string strXmlName = GetXmlName(pi);
+
+						if(!dTypes.ContainsKey(strPropTypeFull))
+							dTypes[strPropTypeFull] = new XmlsTypeInfo(tProp);
+
+						if(GetAttribute<XmlAttributeAttribute>(vAttribs) == null)
+						{
+							AppendLine(sbs, "case \"" + strXmlName + "\":", ref ir, 0, 1);
+							AppendLine(sbs, "o." + pi.Name + " = Read" + strPropTypeDesc +
+								"(xr);", ref ir);
+							AppendLine(sbs, "break;", ref ir, 0, -1);
+
+							++uElements;
+						}
+						else
+						{
+							Debug.Assert(tProp == typeof(string));
+
+							AppendLine(sbAttribs, "case \"" + strXmlName + "\":", ref ir, 0, 1);
+							AppendLine(sbAttribs, "o." + pi.Name + " = xr.Value;", ref ir);
+							AppendLine(sbAttribs, "break;", ref ir, 0, -1);
+						}
+					}
+
+					AppendLine(sbs, "default:", ref ir, 0, 1);
+					AppendLine(sbs, "Debug.Assert(false);", ref ir);
+					AppendLine(sbs, "xr.Skip();", ref ir);
+					AppendLine(sbs, "break;", ref ir, 0, -1);
+					AppendLine(sbs, "}", ref ir, -1, 0); // switch
+
+					if(uElements > 0) sbr.Append(sbs.ToString());
+					else
+					{
+						AppendLine(sbr, "Debug.Assert(false);", ref ir);
+						AppendLine(sbr, "xr.Skip();", ref ir);
+					}
+				}
+
+				AppendLine(sbr);
+				AppendLine(sbr, "xr.MoveToContent();", ref ir);
+				AppendLine(sbr, "}", ref ir, -1, 0);
+				AppendLine(sbr);
+				AppendLine(sbr, "Debug.Assert(xr.NodeType == XmlNodeType.EndElement);", ref ir);
+				AppendLine(sbr, "xr.ReadEndElement();", ref ir);
+
+				AppendLine(sbr, (bIsArray ? "return l.ToArray();" : "return o;"), ref ir);
+
+				if(sbAttribs.Length == 0)
+					sbr.Replace(strInsAttribs, string.Empty);
+				else
+				{
+					StringBuilder sba = new StringBuilder();
+					AppendLine(sba, "while(xr.MoveToNextAttribute())", ref ir);
+					AppendLine(sba, "{", ref ir, 0, 1);
+					AppendLine(sba, "switch(xr.LocalName)", ref ir);
+					AppendLine(sba, "{", ref ir, 0, 1);
+					sba.Append(sbAttribs.ToString());
+					AppendLine(sba, "default:", ref ir, 0, 1);
+					AppendLine(sba, "Debug.Assert(false);", ref ir);
+					AppendLine(sba, "break;", ref ir, 0, -1);
+					AppendLine(sba, "}", ref ir, -1, 0); // switch
+					AppendLine(sba, "}", ref ir, -1, 0); // while
+					sba.AppendLine();
+
+					sbr.Replace(strInsAttribs, sba.ToString());
+				}
+			}
+
+			AppendLine(sbr, "}", ref ir, -1, 0);
+
+			Debug.Assert(ir == iIndent);
+
+			XmlsTypeInfo xti = new XmlsTypeInfo(t, sbr.ToString(), sbw.ToString());
+			return xti;
+		}
+
+		private static bool SkipEmptyElement(XmlReader xr)
+		{
+			xr.MoveToElement();
+			if(xr.IsEmptyElement)
+			{
+				xr.Skip();
+				return true;
+			}
+
+			return false;
+		}
+	}
+}
diff --git a/KeePass/Util/XmlUtil.cs b/KeePass/Util/XmlUtil.cs
index aa62d56..94e6c43 100644
--- a/KeePass/Util/XmlUtil.cs
+++ b/KeePass/Util/XmlUtil.cs
@@ -22,8 +22,11 @@ using System.Collections.Generic;
 using System.Text;
 using System.Xml;
 using System.Xml.Serialization;
+using System.Reflection;
 using System.Diagnostics;
 
+using KeePass.Util.XmlSerialization;
+
 namespace KeePass.Util
 {
 	public static class XmlUtil
@@ -148,5 +151,76 @@ namespace KeePass.Util
 				else xnRep.InnerText = XmlUtil.SafeInnerText(xnOvrChild);
 			}
 		}
+
+		private sealed class XuopContainer
+		{
+			private object m_o;
+			public object Object { get { return m_o; } }
+
+			public XuopContainer(object o)
+			{
+				m_o = o;
+			}
+		}
+
+		private const string GoxpSep = "/";
+		public static string GetObjectXmlPath(object oContainer, object oNeedle)
+		{
+			if(oContainer == null) { Debug.Assert(false); return null; }
+
+			XuopContainer c = new XuopContainer(oContainer);
+			string strXPath = GetObjectXmlPathRec(c, typeof(XuopContainer),
+				oNeedle, string.Empty);
+			if(string.IsNullOrEmpty(strXPath)) return strXPath;
+
+			if(!strXPath.StartsWith("/Object")) { Debug.Assert(false); return null; }
+			strXPath = strXPath.Substring(7);
+
+			Type tRoot = oContainer.GetType();
+			string strRoot = XmlSerializerEx.GetXmlName(tRoot);
+
+			return (GoxpSep + strRoot + strXPath);
+		}
+
+		private static string GetObjectXmlPathRec(object oContainer, Type tContainer,
+			object oNeedle, string strCurPath)
+		{
+			if(oContainer == null) { Debug.Assert(false); return null; }
+			if(oNeedle == null) { Debug.Assert(false); return null; }
+			Debug.Assert(oContainer.GetType() == tContainer);
+
+			PropertyInfo[] vProps = tContainer.GetProperties();
+			foreach(PropertyInfo pi in vProps)
+			{
+				if((pi == null) || !pi.CanRead) continue;
+
+				object[] vPropAttribs = pi.GetCustomAttributes(true);
+				if(XmlSerializerEx.GetAttribute<XmlIgnoreAttribute>(
+					vPropAttribs) != null) continue;
+
+				object oSub = pi.GetValue(oContainer, null);
+				if(oSub == null) continue;
+
+				string strPropName = XmlSerializerEx.GetXmlName(pi);
+				string strSubPath = strCurPath + GoxpSep + strPropName;
+
+				if(oSub == oNeedle) return strSubPath;
+
+				Type tSub = oSub.GetType();
+				string strPrimarySubType;
+				string strPropTypeCS = XmlSerializerEx.GetFullTypeNameCS(tSub,
+					out strPrimarySubType);
+				if(XmlSerializerEx.TypeIsArray(strPropTypeCS) ||
+					XmlSerializerEx.TypeIsList(strPropTypeCS))
+					continue;
+				if(strPropTypeCS.StartsWith("System.")) continue;
+
+				string strSubFound = GetObjectXmlPathRec(oSub, tSub, oNeedle,
+					strSubPath);
+				if(strSubFound != null) return strSubFound;
+			}
+
+			return null;
+		}
 	}
 }
diff --git a/KeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs b/KeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs
index 8a32c6e..3460b02 100644
--- a/KeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs
+++ b/KeePassLib/Cryptography/PasswordGenerator/PwCharSet.cs
@@ -38,7 +38,7 @@ namespace KeePassLib.Cryptography.PasswordGenerator
 		public const string Punctuation = @",.;:";
 		public const string Brackets = @"[]{}()<>";
 
-		public const string PrintableAsciiSpecial = "!\"#$%&'()*+,-./:;<=>?[\\]^_{|}~";
+		public const string PrintableAsciiSpecial = "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~";
 
 		public const string UpperHex = "0123456789ABCDEF";
 		public const string LowerHex = "0123456789abcdef";
diff --git a/KeePassLib/Cryptography/PopularPasswords.cs b/KeePassLib/Cryptography/PopularPasswords.cs
index af82756..f4cbec5 100644
--- a/KeePassLib/Cryptography/PopularPasswords.cs
+++ b/KeePassLib/Cryptography/PopularPasswords.cs
@@ -450,7 +450,7 @@ namespace KeePassLib.Cryptography
 
 		public static void MakeList()
 		{
-			string strData = File.ReadAllText("MostPopularPasswords.txt", Encoding.UTF8);
+			string strData = File.ReadAllText("MostPopularPasswords.txt", StrUtil.Utf8);
 			strData += " ";
 			CharStream cs = new CharStream(strData);
 
diff --git a/KeePassLib/Cryptography/QualityEstimation.cs b/KeePassLib/Cryptography/QualityEstimation.cs
index de96068..69f8c4c 100644
--- a/KeePassLib/Cryptography/QualityEstimation.cs
+++ b/KeePassLib/Cryptography/QualityEstimation.cs
@@ -34,11 +34,10 @@ namespace KeePassLib.Cryptography
 	{
 		private enum CharSpaceBits : uint
 		{
-			Escape = 60,
+			Control = 32,
 			Alpha = 26,
 			Number = 10,
-			SimpleSpecial = 16,
-			ExtendedSpecial = 17,
+			Special = 33,
 			High = 112
 		}
 
@@ -55,8 +54,7 @@ namespace KeePassLib.Cryptography
 			if(vPasswordChars == null) throw new ArgumentNullException("vPasswordChars");
 
 			bool bChLower = false, bChUpper = false, bChNumber = false;
-			bool bChSimpleSpecial = false, bChExtSpecial = false, bChHigh = false;
-			bool bChEscape = false;
+			bool bChSpecial = false, bChHigh = false, bChControl = false;
 			Dictionary<char, uint> vCharCounts = new Dictionary<char, uint>();
 			Dictionary<int, uint> vDifferences = new Dictionary<int, uint>();
 			double dblEffectiveLength = 0.0;
@@ -65,54 +63,56 @@ namespace KeePassLib.Cryptography
 			{
 				char tch = vPasswordChars[i];
 
-				if(tch < ' ') bChEscape = true;
-				if((tch >= 'A') && (tch <= 'Z')) bChUpper = true;
-				if((tch >= 'a') && (tch <= 'z')) bChLower = true;
-				if((tch >= '0') && (tch <= '9')) bChNumber = true;
-				if((tch >= ' ') && (tch <= '/')) bChSimpleSpecial = true;
-				if((tch >= ':') && (tch <= '@')) bChExtSpecial = true;
-				if((tch >= '[') && (tch <= '`')) bChExtSpecial = true;
-				if((tch >= '{') && (tch <= '~')) bChExtSpecial = true;
-				if(tch > '~') bChHigh = true;
+				if(tch < ' ') bChControl = true;
+				else if((tch >= 'A') && (tch <= 'Z')) bChUpper = true;
+				else if((tch >= 'a') && (tch <= 'z')) bChLower = true;
+				else if((tch >= '0') && (tch <= '9')) bChNumber = true;
+				else if((tch >= ' ') && (tch <= '/')) bChSpecial = true;
+				else if((tch >= ':') && (tch <= '@')) bChSpecial = true;
+				else if((tch >= '[') && (tch <= '`')) bChSpecial = true;
+				else if((tch >= '{') && (tch <= '~')) bChSpecial = true;
+				else if(tch > '~') bChHigh = true;
 
 				double dblDiffFactor = 1.0;
 				if(i >= 1)
 				{
 					int iDiff = (int)tch - (int)vPasswordChars[i - 1];
 
-					if(vDifferences.ContainsKey(iDiff) == false)
-						vDifferences.Add(iDiff, 1);
-					else
+					uint uDiffCount;
+					if(vDifferences.TryGetValue(iDiff, out uDiffCount))
 					{
-						vDifferences[iDiff] = vDifferences[iDiff] + 1;
-						dblDiffFactor /= (double)vDifferences[iDiff];
+						++uDiffCount;
+						vDifferences[iDiff] = uDiffCount;
+						dblDiffFactor /= (double)uDiffCount;
 					}
+					else vDifferences.Add(iDiff, 1);
 				}
 
-				if(vCharCounts.ContainsKey(tch) == false)
+				uint uCharCount;
+				if(vCharCounts.TryGetValue(tch, out uCharCount))
 				{
-					vCharCounts.Add(tch, 1);
-					dblEffectiveLength += dblDiffFactor;
+					++uCharCount;
+					vCharCounts[tch] = uCharCount;
+					dblEffectiveLength += dblDiffFactor * (1.0 / (double)uCharCount);
 				}
 				else
 				{
-					vCharCounts[tch] = vCharCounts[tch] + 1;
-					dblEffectiveLength += dblDiffFactor * (1.0 / (double)vCharCounts[tch]);
+					vCharCounts.Add(tch, 1);
+					dblEffectiveLength += dblDiffFactor;
 				}
 			}
 
-			uint charSpace = 0;
-			if(bChEscape) charSpace += (uint)CharSpaceBits.Escape;
-			if(bChUpper) charSpace += (uint)CharSpaceBits.Alpha;
-			if(bChLower) charSpace += (uint)CharSpaceBits.Alpha;
-			if(bChNumber) charSpace += (uint)CharSpaceBits.Number;
-			if(bChSimpleSpecial) charSpace += (uint)CharSpaceBits.SimpleSpecial;
-			if(bChExtSpecial) charSpace += (uint)CharSpaceBits.ExtendedSpecial;
-			if(bChHigh) charSpace += (uint)CharSpaceBits.High;
+			uint uCharSpace = 0;
+			if(bChControl) uCharSpace += (uint)CharSpaceBits.Control;
+			if(bChUpper) uCharSpace += (uint)CharSpaceBits.Alpha;
+			if(bChLower) uCharSpace += (uint)CharSpaceBits.Alpha;
+			if(bChNumber) uCharSpace += (uint)CharSpaceBits.Number;
+			if(bChSpecial) uCharSpace += (uint)CharSpaceBits.Special;
+			if(bChHigh) uCharSpace += (uint)CharSpaceBits.High;
 
-			if(charSpace == 0) return 0;
+			if(uCharSpace == 0) return 0;
 
-			double dblBitsPerChar = Math.Log((double)charSpace) / Math.Log(2.0);
+			double dblBitsPerChar = Math.Log((double)uCharSpace) / Math.Log(2.0);
 			double dblRating = dblBitsPerChar * dblEffectiveLength;
 
 #if !KeePassLibSD
diff --git a/KeePassLib/Cryptography/SelfTest.cs b/KeePassLib/Cryptography/SelfTest.cs
index 1625f25..dda5484 100644
--- a/KeePassLib/Cryptography/SelfTest.cs
+++ b/KeePassLib/Cryptography/SelfTest.cs
@@ -63,11 +63,10 @@ namespace KeePassLib.Cryptography
 			
 			TestNativeKeyTransform();
 			
-			TestGZip();
-
 			TestHmacOtp();
 
 			TestProtectedObjects();
+			TestMemUtil();
 			TestStrUtil();
 			TestUrlUtil();
 
@@ -214,7 +213,7 @@ namespace KeePassLib.Cryptography
 #endif
 		}
 
-		private static void TestGZip()
+		private static void TestMemUtil()
 		{
 #if DEBUG
 			Random r = new Random();
@@ -224,6 +223,29 @@ namespace KeePassLib.Cryptography
 			byte[] pbCompressed = MemUtil.Compress(pb);
 			if(!MemUtil.ArraysEqual(MemUtil.Decompress(pbCompressed), pb))
 				throw new InvalidOperationException("GZip");
+
+			pb = Encoding.ASCII.GetBytes("012345678901234567890a");
+			byte[] pbN = Encoding.ASCII.GetBytes("9012");
+			if(MemUtil.IndexOf<byte>(pb, pbN) != 9)
+				throw new InvalidOperationException("MemUtil-1");
+			pbN = Encoding.ASCII.GetBytes("01234567890123");
+			if(MemUtil.IndexOf<byte>(pb, pbN) != 0)
+				throw new InvalidOperationException("MemUtil-2");
+			pbN = Encoding.ASCII.GetBytes("a");
+			if(MemUtil.IndexOf<byte>(pb, pbN) != 21)
+				throw new InvalidOperationException("MemUtil-3");
+			pbN = Encoding.ASCII.GetBytes("0a");
+			if(MemUtil.IndexOf<byte>(pb, pbN) != 20)
+				throw new InvalidOperationException("MemUtil-4");
+			pbN = Encoding.ASCII.GetBytes("1");
+			if(MemUtil.IndexOf<byte>(pb, pbN) != 1)
+				throw new InvalidOperationException("MemUtil-5");
+			pbN = Encoding.ASCII.GetBytes("b");
+			if(MemUtil.IndexOf<byte>(pb, pbN) >= 0)
+				throw new InvalidOperationException("MemUtil-6");
+			pbN = Encoding.ASCII.GetBytes("012b");
+			if(MemUtil.IndexOf<byte>(pb, pbN) >= 0)
+				throw new InvalidOperationException("MemUtil-7");
 #endif
 		}
 
@@ -336,6 +358,10 @@ namespace KeePassLib.Cryptography
 				throw new InvalidOperationException("StrUtil-V3");
 			if(StrUtil.VersionToString(0x00FF000000000000UL) != "255")
 				throw new InvalidOperationException("StrUtil-V4");
+			if(StrUtil.VersionToString(0x00FF000000000000UL, true) != "255.0")
+				throw new InvalidOperationException("StrUtil-V5");
+			if(StrUtil.VersionToString(0x0000000000070000UL, true) != "0.0.7")
+				throw new InvalidOperationException("StrUtil-V6");
 #endif
 		}
 
diff --git a/KeePass/Ecas/IEcasParameterized.cs b/KeePassLib/Interfaces/IXmlSerializerEx.cs
similarity index 80%
copy from KeePass/Ecas/IEcasParameterized.cs
copy to KeePassLib/Interfaces/IXmlSerializerEx.cs
index 4d8ca3c..e0e627b 100644
--- a/KeePass/Ecas/IEcasParameterized.cs
+++ b/KeePassLib/Interfaces/IXmlSerializerEx.cs
@@ -20,15 +20,14 @@
 using System;
 using System.Collections.Generic;
 using System.Text;
+using System.IO;
+using System.Xml;
 
-using KeePassLib;
-
-namespace KeePass.Ecas
+namespace KeePassLib.Interfaces
 {
-	public interface IEcasParameterized
+	public interface IXmlSerializerEx
 	{
-		PwUuid Type { get; }
-
-		EcasParameter[] Parameters { get; }
+		void Serialize(XmlWriter xmlWriter, object o);
+		object Deserialize(Stream s);
 	}
 }
diff --git a/KeePassLib/KeePassLib.csproj b/KeePassLib/KeePassLib.csproj
index 0a86798..63b65a8 100644
--- a/KeePassLib/KeePassLib.csproj
+++ b/KeePassLib/KeePassLib.csproj
@@ -69,6 +69,7 @@
     <Compile Include="Cryptography\SelfTest.cs" />
     <Compile Include="Interfaces\IStructureItem.cs" />
     <Compile Include="Interfaces\IUIOperations.cs" />
+    <Compile Include="Interfaces\IXmlSerializerEx.cs" />
     <Compile Include="Keys\KcpCustomKey.cs" />
     <Compile Include="Keys\KeyProvider.cs" />
     <Compile Include="Keys\KeyProviderPool.cs" />
diff --git a/KeePassLib/Keys/KcpKeyFile.cs b/KeePassLib/Keys/KcpKeyFile.cs
index 1dcd8c5..caadde4 100644
--- a/KeePassLib/Keys/KcpKeyFile.cs
+++ b/KeePassLib/Keys/KcpKeyFile.cs
@@ -70,13 +70,18 @@ namespace KeePassLib.Keys
 
 		private void Construct(IOConnectionInfo iocFile)
 		{
-			byte[] pbKey = LoadXmlKeyFile(iocFile);
-			if(pbKey == null) pbKey = LoadKeyFile(iocFile);
+			byte[] pbFileData = IOConnection.ReadFile(iocFile);
+			if(pbFileData == null) throw new FileNotFoundException();
+
+			byte[] pbKey = LoadXmlKeyFile(pbFileData);
+			if(pbKey == null) pbKey = LoadKeyFile(pbFileData);
 
 			if(pbKey == null) throw new InvalidOperationException();
 
 			m_strPath = iocFile.Path;
 			m_pbKeyData = new ProtectedBinary(true, pbKey);
+
+			MemUtil.ZeroByteArray(pbKey);
 		}
 
 		// public void Clear()
@@ -85,31 +90,20 @@ namespace KeePassLib.Keys
 		//	m_pbKeyData = null;
 		// }
 
-		private static byte[] LoadKeyFile(IOConnectionInfo iocFile)
+		private static byte[] LoadKeyFile(byte[] pbFileData)
 		{
-			Stream sIn = null;
-			try { sIn = IOConnection.OpenRead(iocFile); }
-			catch(Exception) { }
-			if(sIn == null) return null;
+			if(pbFileData == null) { Debug.Assert(false); return null; }
 
-			long lLength = sIn.Length;
-			BinaryReader br = new BinaryReader(sIn);
-			byte[] pbFileData = br.ReadBytes((int)lLength);
-			br.Close();
-			sIn.Close();
+			int iLength = pbFileData.Length;
 
 			byte[] pbKey = null;
-			if(lLength == 32) pbKey = LoadBinaryKey32(pbFileData);
-			else if(lLength == 64) pbKey = LoadHexKey32(pbFileData);
+			if(iLength == 32) pbKey = LoadBinaryKey32(pbFileData);
+			else if(iLength == 64) pbKey = LoadHexKey32(pbFileData);
 
 			if(pbKey == null)
 			{
-				if(pbFileData.Length == lLength)
-				{
-					SHA256Managed sha256 = new SHA256Managed();
-					pbKey = sha256.ComputeHash(pbFileData);
-				}
-				else { Debug.Assert(false); pbKey = null; }
+				SHA256Managed sha256 = new SHA256Managed();
+				pbKey = sha256.ComputeHash(pbFileData);
 			}
 
 			return pbKey;
@@ -196,19 +190,17 @@ namespace KeePassLib.Keys
 		private const string KeyElementName = "Key";
 		private const string KeyDataElementName = "Data";
 
-		private static byte[] LoadXmlKeyFile(IOConnectionInfo iocFile)
+		private static byte[] LoadXmlKeyFile(byte[] pbFileData)
 		{
-			Debug.Assert(iocFile != null); if(iocFile == null) throw new ArgumentNullException("iocFile");
+			if(pbFileData == null) { Debug.Assert(false); return null; }
 
-			Stream sIn = null;
+			MemoryStream ms = new MemoryStream(pbFileData, false);
 			byte[] pbKeyData = null;
 
 			try
 			{
-				sIn = IOConnection.OpenRead(iocFile);
-
 				XmlDocument doc = new XmlDocument();
-				doc.Load(sIn);
+				doc.Load(ms);
 
 				XmlElement el = doc.DocumentElement;
 				if((el == null) || !el.Name.Equals(RootElementName)) return null;
@@ -231,7 +223,7 @@ namespace KeePassLib.Keys
 				}
 			}
 			catch(Exception) { pbKeyData = null; }
-			finally { if(sIn != null) sIn.Close(); }
+			finally { ms.Close(); }
 
 			return pbKeyData;
 		}
@@ -243,7 +235,7 @@ namespace KeePassLib.Keys
 			Debug.Assert(pbKeyData != null);
 			if(pbKeyData == null) throw new ArgumentNullException("pbKeyData");
 
-			XmlTextWriter xtw = new XmlTextWriter(strFile, new UTF8Encoding(false));
+			XmlTextWriter xtw = new XmlTextWriter(strFile, StrUtil.Utf8);
 
 			xtw.WriteStartDocument();
 			xtw.WriteWhitespace("\r\n");
diff --git a/KeePassLib/Native/NativeLib.cs b/KeePassLib/Native/NativeLib.cs
index c4af820..bc4e334 100644
--- a/KeePassLib/Native/NativeLib.cs
+++ b/KeePassLib/Native/NativeLib.cs
@@ -22,6 +22,8 @@ using System.Collections.Generic;
 using System.Runtime.InteropServices;
 using System.Diagnostics;
 
+using KeePassLib.Utility;
+
 namespace KeePassLib.Native
 {
 	/// <summary>
@@ -72,9 +74,10 @@ namespace KeePassLib.Native
 
 			// Mono defines Unix as 128 in early .NET versions
 #if !KeePassLibSD
-			m_bIsUnix = ((p == PlatformID.Unix) || ((int)p == 128));
+			m_bIsUnix = ((p == PlatformID.Unix) || (p == PlatformID.MacOSX) ||
+				((int)p == 128));
 #else
-			m_bIsUnix = (((int)p == 4) || ((int)p == 128));
+			m_bIsUnix = (((int)p == 4) || ((int)p == 6) || ((int)p == 128));
 #endif
 			return m_bIsUnix.Value;
 		}
@@ -85,9 +88,65 @@ namespace KeePassLib.Native
 			if(m_platID.HasValue) return m_platID.Value;
 
 			m_platID = Environment.OSVersion.Platform;
+
+#if !KeePassLibSD
+			// Mono returns PlatformID.Unix on Mac OS X, workaround this
+			if(m_platID.Value == PlatformID.Unix)
+			{
+				if((RunConsoleApp("uname", null) ?? string.Empty).Trim().Equals(
+					"Darwin", StrUtil.CaseIgnoreCmp))
+					m_platID = PlatformID.MacOSX;
+			}
+#endif
+
 			return m_platID.Value;
 		}
 
+#if !KeePassLibSD
+		public static string RunConsoleApp(string strAppPath, string strParams)
+		{
+			return RunConsoleApp(strAppPath, strParams, null);
+		}
+
+		public static string RunConsoleApp(string strAppPath, string strParams,
+			string strStdInput)
+		{
+			if(strAppPath == null) throw new ArgumentNullException("strAppPath");
+			if(strAppPath.Length == 0) throw new ArgumentException("strAppPath");
+
+			try
+			{
+				ProcessStartInfo psi = new ProcessStartInfo();
+
+				psi.CreateNoWindow = true;
+				psi.FileName = strAppPath;
+				psi.WindowStyle = ProcessWindowStyle.Hidden;
+				psi.UseShellExecute = false;
+				psi.RedirectStandardOutput = true;
+
+				if(strStdInput != null) psi.RedirectStandardInput = true;
+
+				if(!string.IsNullOrEmpty(strParams)) psi.Arguments = strParams;
+
+				Process p = Process.Start(psi);
+
+				if(strStdInput != null)
+				{
+					p.StandardInput.Write(strStdInput);
+					p.StandardInput.Close();
+				}
+
+				string strOutput = p.StandardOutput.ReadToEnd();
+				p.WaitForExit();
+
+				return strOutput;
+			}
+			catch(Exception) { Debug.Assert(false); }
+
+			return null;
+		}
+#endif
+
 		/// <summary>
 		/// Transform a key.
 		/// </summary>
diff --git a/KeePassLib/Properties/AssemblyInfo.cs b/KeePassLib/Properties/AssemblyInfo.cs
index 2d2b982..8b13823 100644
--- a/KeePassLib/Properties/AssemblyInfo.cs
+++ b/KeePassLib/Properties/AssemblyInfo.cs
@@ -38,5 +38,5 @@ using System.Runtime.InteropServices;
 [assembly: Guid("395f6eec-a1e0-4438-aa82-b75099348134")]
 
 // Assembly version information
-[assembly: AssemblyVersion("2.1.8.*")]
-[assembly: AssemblyFileVersion("2.1.8.0")]
+[assembly: AssemblyVersion("2.19.0.*")]
+[assembly: AssemblyFileVersion("2.19.0.0")]
diff --git a/KeePassLib/PwDefs.cs b/KeePassLib/PwDefs.cs
index 89cad13..5d2418b 100644
--- a/KeePassLib/PwDefs.cs
+++ b/KeePassLib/PwDefs.cs
@@ -46,15 +46,23 @@ namespace KeePassLib
 
 		/// <summary>
 		/// Version, encoded as 32-bit unsigned integer.
-		/// 2.00 = 0x02000000, 2.01 = 0x02000100, 2.15 = 0x02010500, etc.
+		/// 2.00 = 0x02000000, 2.01 = 0x02000100, ..., 2.18 = 0x02010800.
+		/// As of 2.19, the version is encoded component-wise per byte,
+		/// e.g. 2.19 = 0x02130000.
+		/// It is highly recommended to use <c>FileVersion64</c> instead.
 		/// </summary>
-		public const uint Version32 = 0x02010800;
-		public const ulong FileVersion64 = 0x0002001200000000UL;
+		public const uint Version32 = 0x02130000;
+
+		/// <summary>
+		/// Version, encoded as 64-bit unsigned integer
+		/// (component-wise, 16 bits per component).
+		/// </summary>
+		public const ulong FileVersion64 = 0x0002001300000000UL;
 
 		/// <summary>
 		/// Version, encoded as string.
 		/// </summary>
-		public const string VersionString = "2.18";
+		public const string VersionString = "2.19";
 
 		public const string Copyright = @"Copyright © 2003-2012 Dominik Reichl";
 
diff --git a/KeePassLib/PwGroup.cs b/KeePassLib/PwGroup.cs
index 6e79590..be3bad6 100644
--- a/KeePassLib/PwGroup.cs
+++ b/KeePassLib/PwGroup.cs
@@ -1157,9 +1157,14 @@ namespace KeePassLib
 		/// <param name="strTree">Tree string.</param>
 		/// <param name="vSeparators">Separators that delimit groups in the
 		/// <c>strTree</c> parameter.</param>
-		/// <returns></returns>
 		public PwGroup FindCreateSubTree(string strTree, char[] vSeparators)
 		{
+			return FindCreateSubTree(strTree, vSeparators, true);
+		}
+
+		public PwGroup FindCreateSubTree(string strTree, char[] vSeparators,
+			bool bAllowCreate)
+		{
 			Debug.Assert(strTree != null); if(strTree == null) return this;
 			if(strTree.Length == 0) return this;
 
@@ -1169,8 +1174,7 @@ namespace KeePassLib
 			PwGroup pgContainer = this;
 			for(int nGroup = 0; nGroup < vGroups.Length; ++nGroup)
 			{
-				if((vGroups[nGroup] == null) || (vGroups[nGroup].Length == 0))
-					continue;
+				if(string.IsNullOrEmpty(vGroups[nGroup])) continue;
 
 				bool bFound = false;
 				foreach(PwGroup pg in pgContainer.Groups)
@@ -1185,10 +1189,10 @@ namespace KeePassLib
 
 				if(!bFound)
 				{
-					PwGroup pg = new PwGroup(true, true, vGroups[nGroup], PwIcon.Folder);
+					if(!bAllowCreate) return null;
 
+					PwGroup pg = new PwGroup(true, true, vGroups[nGroup], PwIcon.Folder);
 					pgContainer.AddGroup(pg, true);
-
 					pgContainer = pg;
 				}
 			}
diff --git a/KeePassLib/Serialization/HashedBlockStream.cs b/KeePassLib/Serialization/HashedBlockStream.cs
index ca8b189..9c05fdc 100644
--- a/KeePassLib/Serialization/HashedBlockStream.cs
+++ b/KeePassLib/Serialization/HashedBlockStream.cs
@@ -24,6 +24,7 @@ using System.Diagnostics;
 using System.Text;
 
 using KeePassLib.Native;
+using KeePassLib.Utility;
 
 #if KeePassLibSD
 using KeePassLibSD;
@@ -102,8 +103,7 @@ namespace KeePassLib.Serialization
 			m_bWriting = bWriting;
 			m_bVerify = bVerify;
 
-			UTF8Encoding utf8 = new UTF8Encoding(false, false);
-
+			UTF8Encoding utf8 = StrUtil.Utf8;
 			if(m_bWriting == false) // Reading mode
 			{
 				if(m_sBaseStream.CanRead == false)
diff --git a/KeePassLib/Serialization/IOConnection.cs b/KeePassLib/Serialization/IOConnection.cs
index 6bde6f8..274a473 100644
--- a/KeePassLib/Serialization/IOConnection.cs
+++ b/KeePassLib/Serialization/IOConnection.cs
@@ -399,5 +399,29 @@ namespace KeePassLib.Serialization
 			try { wr.Close(); }
 			catch(Exception) { Debug.Assert(false); }
 		}
+
+		public static byte[] ReadFile(IOConnectionInfo ioc)
+		{
+			Stream sIn = null;
+			MemoryStream ms = null;
+			try
+			{
+				sIn = IOConnection.OpenRead(ioc);
+				if(sIn == null) return null;
+
+				ms = new MemoryStream();
+				MemUtil.CopyStream(sIn, ms);
+
+				return ms.ToArray();
+			}
+			catch(Exception) { }
+			finally
+			{
+				if(sIn != null) sIn.Close();
+				if(ms != null) ms.Close();
+			}
+
+			return null;
+		}
 	}
 }
diff --git a/KeePassLib/Serialization/Kdb4File.Read.Streamed.cs b/KeePassLib/Serialization/Kdb4File.Read.Streamed.cs
index fae29ec..2488e49 100644
--- a/KeePassLib/Serialization/Kdb4File.Read.Streamed.cs
+++ b/KeePassLib/Serialization/Kdb4File.Read.Streamed.cs
@@ -87,15 +87,28 @@ namespace KeePassLib.Serialization
 			ReadDocumentStreamed(CreateXmlReader(readerStream), sParentStream);
 		}
 
-		private static XmlReader CreateXmlReader(Stream readerStream)
+		internal static XmlReaderSettings CreateStdXmlReaderSettings()
 		{
-			XmlReaderSettings xmlSettings = new XmlReaderSettings();
-			xmlSettings.CloseInput = true;
-			xmlSettings.IgnoreComments = true;
-			xmlSettings.IgnoreProcessingInstructions = true;
-			xmlSettings.IgnoreWhitespace = true;
+			XmlReaderSettings xrs = new XmlReaderSettings();
+
+			xrs.CloseInput = true;
+			xrs.IgnoreComments = true;
+			xrs.IgnoreProcessingInstructions = true;
+			xrs.IgnoreWhitespace = true;
+
+#if !KeePassLibSD
+			xrs.ProhibitDtd = true;
+#endif
+
+			xrs.ValidationType = ValidationType.None;
+
+			return xrs;
+		}
 
-			return XmlReader.Create(readerStream, xmlSettings);
+		private static XmlReader CreateXmlReader(Stream readerStream)
+		{
+			XmlReaderSettings xrs = CreateStdXmlReaderSettings();
+			return XmlReader.Create(readerStream, xrs);
 		}
 
 		private void ReadDocumentStreamed(XmlReader xr, Stream sParentStream)
@@ -111,12 +124,14 @@ namespace KeePassLib.Serialization
 			uint uTagCounter = 0;
 
 			bool bSupportsStatus = (m_slLogger != null);
+			long lStreamLength = 1;
 			try
 			{
-				sParentStream.Position.ToString();
-				sParentStream.Length.ToString();
+				sParentStream.Position.ToString(); // Test Position support
+				lStreamLength = sParentStream.Length;
 			}
 			catch(Exception) { bSupportsStatus = false; }
+			if(lStreamLength <= 0) { Debug.Assert(false); lStreamLength = 1; }
 
 			m_bReadNextNode = true;
 
@@ -148,8 +163,17 @@ namespace KeePassLib.Serialization
 
 				++uTagCounter;
 				if(((uTagCounter % 256) == 0) && bSupportsStatus)
-					m_slLogger.SetProgress((uint)((sParentStream.Position * 100) /
-						sParentStream.Length));
+				{
+					Debug.Assert(lStreamLength == sParentStream.Length);
+					uint uPct = (uint)((sParentStream.Position * 100) /
+						lStreamLength);
+
+					// Clip percent value in case the stream reports incorrect
+					// position/length values (M120413)
+					if(uPct > 100) { Debug.Assert(false); uPct = 100; }
+
+					m_slLogger.SetProgress(uPct);
+				}
 			}
 
 			Debug.Assert(ctx == KdbContext.Null);
diff --git a/KeePassLib/Serialization/Kdb4File.Read.cs b/KeePassLib/Serialization/Kdb4File.Read.cs
index 57aea0f..96ba492 100644
--- a/KeePassLib/Serialization/Kdb4File.Read.cs
+++ b/KeePassLib/Serialization/Kdb4File.Read.cs
@@ -75,8 +75,7 @@ namespace KeePassLib.Serialization
 
 			HashingStreamEx hashedStream = new HashingStreamEx(sSource, false, null);
 
-			UTF8Encoding encNoBom = new UTF8Encoding(false, false);
-
+			UTF8Encoding encNoBom = StrUtil.Utf8;
 			try
 			{
 				BinaryReaderEx br = null;
diff --git a/KeePassLib/Serialization/Kdb4File.Write.cs b/KeePassLib/Serialization/Kdb4File.Write.cs
index 12e3a8c..b16af6f 100644
--- a/KeePassLib/Serialization/Kdb4File.Write.cs
+++ b/KeePassLib/Serialization/Kdb4File.Write.cs
@@ -83,7 +83,7 @@ namespace KeePassLib.Serialization
 
 			HashingStreamEx hashedStream = new HashingStreamEx(sSaveTo, true, null);
 
-			UTF8Encoding encNoBom = new UTF8Encoding(false, false);
+			UTF8Encoding encNoBom = StrUtil.Utf8;
 			CryptoRandom cr = CryptoRandom.Instance;
 
 			try
@@ -806,7 +806,7 @@ namespace KeePassLib.Serialization
 			f.m_format = Kdb4Format.PlainXml;
 
 			XmlTextWriter xtw = null;
-			try { xtw = new XmlTextWriter(msOutput, new UTF8Encoding(false)); }
+			try { xtw = new XmlTextWriter(msOutput, StrUtil.Utf8); }
 			catch(Exception) { Debug.Assert(false); return false; }
 			if(xtw == null) { Debug.Assert(false); return false; }
 
diff --git a/KeePassLib/Translation/KPTranslation.cs b/KeePassLib/Translation/KPTranslation.cs
index 27d0e22..2747bfa 100644
--- a/KeePassLib/Translation/KPTranslation.cs
+++ b/KeePassLib/Translation/KPTranslation.cs
@@ -28,6 +28,9 @@ using System.ComponentModel;
 using System.Drawing;
 using System.Diagnostics;
 
+using KeePassLib.Interfaces;
+using KeePassLib.Utility;
+
 #if !KeePassLibSD
 using System.IO.Compression;
 #else
@@ -89,8 +92,11 @@ namespace KeePassLib.Translation
 			}
 		}
 
-		public static void SaveToFile(KPTranslation kpTrl, string strFileName)
+		public static void SaveToFile(KPTranslation kpTrl, string strFileName,
+			IXmlSerializerEx xs)
 		{
+			if(xs == null) throw new ArgumentNullException("xs");
+
 			FileStream fs = new FileStream(strFileName, FileMode.Create,
 				FileAccess.Write, FileShare.None);
 
@@ -102,22 +108,24 @@ namespace KeePassLib.Translation
 
 			XmlWriterSettings xws = new XmlWriterSettings();
 			xws.CheckCharacters = true;
-			xws.Encoding = new UTF8Encoding(false);
+			xws.Encoding = StrUtil.Utf8;
 			xws.Indent = true;
 			xws.IndentChars = "\t";
 
 			XmlWriter xw = XmlWriter.Create(gz, xws);
 
-			XmlSerializer xmlSerial = new XmlSerializer(typeof(KPTranslation));
-			xmlSerial.Serialize(xw, kpTrl);
+			xs.Serialize(xw, kpTrl);
 
 			xw.Close();
 			gz.Close();
 			fs.Close();
 		}
 
-		public static KPTranslation LoadFromFile(string strFile)
+		public static KPTranslation LoadFromFile(string strFile,
+			IXmlSerializerEx xs)
 		{
+			if(xs == null) throw new ArgumentNullException("xs");
+
 			FileStream fs = new FileStream(strFile, FileMode.Open,
 				FileAccess.Read, FileShare.Read);
 
@@ -127,8 +135,7 @@ namespace KeePassLib.Translation
 			GZipInputStream gz = new GZipInputStream(fs);
 #endif
 
-			XmlSerializer xmlSerial = new XmlSerializer(typeof(KPTranslation));
-			KPTranslation kpTrl = (xmlSerial.Deserialize(gz) as KPTranslation);
+			KPTranslation kpTrl = (xs.Deserialize(gz) as KPTranslation);
 
 			gz.Close();
 			fs.Close();
diff --git a/KeePassLib/Utility/MemUtil.cs b/KeePassLib/Utility/MemUtil.cs
index dabf0d8..94e8207 100644
--- a/KeePassLib/Utility/MemUtil.cs
+++ b/KeePassLib/Utility/MemUtil.cs
@@ -326,5 +326,41 @@ namespace KeePassLib.Utility
 			msData.Close();
 			return pbData;
 		}
+
+		public static int IndexOf<T>(T[] vHaystack, T[] vNeedle)
+			where T : IEquatable<T>
+		{
+			if(vHaystack == null) throw new ArgumentNullException("vHaystack");
+			if(vNeedle == null) throw new ArgumentNullException("vNeedle");
+			if(vNeedle.Length == 0) return 0;
+
+			for(int i = 0; i <= (vHaystack.Length - vNeedle.Length); ++i)
+			{
+				bool bFound = true;
+				for(int m = 0; m < vNeedle.Length; ++m)
+				{
+					if(!vHaystack[i + m].Equals(vNeedle[m]))
+					{
+						bFound = false;
+						break;
+					}
+				}
+				if(bFound) return i;
+			}
+
+			return -1;
+		}
+
+		public static T[] Mid<T>(T[] v, int iOffset, int iLength)
+		{
+			if(v == null) throw new ArgumentNullException("v");
+			if(iOffset < 0) throw new ArgumentOutOfRangeException("iOffset");
+			if(iLength < 0) throw new ArgumentOutOfRangeException("iLength");
+			if(iOffset + iLength > v.Length) throw new ArgumentException();
+
+			T[] r = new T[iLength];
+			Array.Copy(v, iOffset, r, 0, iLength);
+			return r;
+		}
 	}
 }
diff --git a/KeePassLib/Utility/MessageService.cs b/KeePassLib/Utility/MessageService.cs
index 00044d5..4085382 100644
--- a/KeePassLib/Utility/MessageService.cs
+++ b/KeePassLib/Utility/MessageService.cs
@@ -346,6 +346,12 @@ namespace KeePassLib.Utility
 
 		public static void ShowLoadWarning(string strFilePath, Exception ex)
 		{
+			ShowLoadWarning(strFilePath, ex, false);
+		}
+
+		public static void ShowLoadWarning(string strFilePath, Exception ex,
+			bool bFullException)
+		{
 			string str = string.Empty;
 
 			if((strFilePath != null) && (strFilePath.Length > 0))
@@ -354,7 +360,11 @@ namespace KeePassLib.Utility
 			str += KLRes.FileLoadFailed;
 
 			if((ex != null) && (ex.Message != null) && (ex.Message.Length > 0))
-				str += MessageService.NewParagraph + ex.Message;
+			{
+				str += MessageService.NewParagraph;
+				if(!bFullException) str += ex.Message;
+				else str += ObjectsToMessage(new object[] { ex }, true);
+			}
 
 			ShowWarning(str);
 		}
@@ -362,7 +372,7 @@ namespace KeePassLib.Utility
 		public static void ShowLoadWarning(IOConnectionInfo ioConnection, Exception ex)
 		{
 			if(ioConnection != null)
-				ShowLoadWarning(ioConnection.GetDisplayName(), ex);
+				ShowLoadWarning(ioConnection.GetDisplayName(), ex, false);
 			else ShowWarning(ex);
 		}
 
diff --git a/KeePassLib/Utility/StrUtil.cs b/KeePassLib/Utility/StrUtil.cs
index de01625..0ed0281 100644
--- a/KeePassLib/Utility/StrUtil.cs
+++ b/KeePassLib/Utility/StrUtil.cs
@@ -23,7 +23,6 @@ using System.Collections.Generic;
 using System.Diagnostics;
 using System.Text;
 using System.Drawing;
-// using System.Drawing.Imaging;
 using System.IO;
 using System.Text.RegularExpressions;
 using System.Security.Cryptography;
@@ -112,6 +111,73 @@ namespace KeePassLib.Utility
 		}
 	}
 
+	public enum StrEncodingType
+	{
+		Unknown = 0,
+		Default,
+		Ascii,
+		Utf7,
+		Utf8,
+		Utf16LE,
+		Utf16BE,
+		Utf32LE,
+		Utf32BE
+	}
+
+	public sealed class StrEncodingInfo
+	{
+		private readonly StrEncodingType m_type;
+		public StrEncodingType Type
+		{
+			get { return m_type; }
+		}
+
+		private readonly string m_strName;
+		public string Name
+		{
+			get { return m_strName; }
+		}
+
+		private readonly Encoding m_enc;
+		public Encoding Encoding
+		{
+			get { return m_enc; }
+		}
+
+		private readonly uint m_cbCodePoint;
+		/// <summary>
+		/// Size of a character in bytes.
+		/// </summary>
+		public uint CodePointSize
+		{
+			get { return m_cbCodePoint; }
+		}
+
+		private readonly byte[] m_vSig;
+		/// <summary>
+		/// Start signature of the text (byte order mark).
+		/// May be <c>null</c> or empty, if no signature is known.
+		/// </summary>
+		public byte[] StartSignature
+		{
+			get { return m_vSig; }
+		}
+
+		public StrEncodingInfo(StrEncodingType t, string strName, Encoding enc,
+			uint cbCodePoint, byte[] vStartSig)
+		{
+			if(strName == null) throw new ArgumentNullException("strName");
+			if(enc == null) throw new ArgumentNullException("enc");
+			if(cbCodePoint <= 0) throw new ArgumentOutOfRangeException("cbCodePoint");
+
+			m_type = t;
+			m_strName = strName;
+			m_enc = enc;
+			m_cbCodePoint = cbCodePoint;
+			m_vSig = vStartSig;
+		}
+	}
+
 	/// <summary>
 	/// A class containing various string helper methods.
 	/// </summary>
@@ -136,11 +202,54 @@ namespace KeePassLib.Utility
 		{
 			get
 			{
-				if(m_encUtf8 == null) m_encUtf8 = new UTF8Encoding(false);
+				if(m_encUtf8 == null) m_encUtf8 = new UTF8Encoding(false, false);
 				return m_encUtf8;
 			}
 		}
 
+		private static List<StrEncodingInfo> m_lEncs = null;
+		public static IEnumerable<StrEncodingInfo> Encodings
+		{
+			get
+			{
+				if(m_lEncs == null)
+				{
+					m_lEncs = new List<StrEncodingInfo>();
+
+					m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Default,
+#if !KeePassLibSD
+						Encoding.Default.EncodingName,
+#else
+						Encoding.Default.WebName,
+#endif
+						Encoding.Default,
+						(uint)Encoding.Default.GetBytes("a").Length, null));
+					m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Ascii,
+						"ASCII", Encoding.ASCII, 1, null));
+					m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf7,
+						"Unicode (UTF-7)", Encoding.UTF7, 1, null));
+					m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf8,
+						"Unicode (UTF-8)", StrUtil.Utf8, 1, new byte[] { 0xEF, 0xBB, 0xBF }));
+					m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf16LE,
+						"Unicode (UTF-16 LE)", new UnicodeEncoding(false, false),
+						2, new byte[] { 0xFF, 0xFE }));
+					m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf16BE,
+						"Unicode (UTF-16 BE)", new UnicodeEncoding(true, false),
+						2, new byte[] { 0xFE, 0xFF }));
+#if !KeePassLibSD
+					m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf32LE,
+						"Unicode (UTF-32 LE)", new UTF32Encoding(false, false),
+						4, new byte[] { 0xFF, 0xFE, 0x0, 0x0 }));
+					m_lEncs.Add(new StrEncodingInfo(StrEncodingType.Utf32BE,
+						"Unicode (UTF-32 BE)", new UTF32Encoding(true, false),
+						4, new byte[] { 0x0, 0x0, 0xFE, 0xFF }));
+#endif
+				}
+
+				return m_lEncs;
+			}
+		}
+
 		// public static string RtfPar
 		// {
 		//	// get { return (m_bRtl ? "\\rtlpar " : "\\par "); }
@@ -685,7 +794,7 @@ namespace KeePassLib.Utility
 		{
 			if(string.IsNullOrEmpty(str)) return false; // No assert
 
-			string s = str.ToLower().Trim();
+			string s = str.Trim().ToLower();
 			if(s == "true") return true;
 			if(s == "yes") return true;
 			if(s == "1") return true;
@@ -699,7 +808,7 @@ namespace KeePassLib.Utility
 		{
 			if(string.IsNullOrEmpty(str)) return null;
 
-			string s = str.ToLower().Trim();
+			string s = str.Trim().ToLower();
 			if(s == "true") return true;
 			if(s == "false") return false;
 
@@ -806,11 +915,11 @@ namespace KeePassLib.Utility
 		}
 
 		private static readonly char[] m_vVersionSep = new char[]{ '.', ',' };
-		public static ulong GetVersion(string strVersion)
+		public static ulong ParseVersion(string strVersion)
 		{
 			if(strVersion == null) { Debug.Assert(false); return 0; }
 
-			string[] vVer = strVersion.Trim().Split(m_vVersionSep);
+			string[] vVer = strVersion.Split(m_vVersionSep);
 			if((vVer == null) || (vVer.Length == 0)) { Debug.Assert(false); return 0; }
 
 			ushort uPart;
@@ -840,7 +949,14 @@ namespace KeePassLib.Utility
 
 		public static string VersionToString(ulong uVersion)
 		{
+			return VersionToString(uVersion, false);
+		}
+
+		public static string VersionToString(ulong uVersion,
+			bool bEnsureAtLeastTwoComp)
+		{
 			string str = string.Empty;
+			bool bMultiComp = false;
 
 			for(int i = 0; i < 4; ++i)
 			{
@@ -848,13 +964,21 @@ namespace KeePassLib.Utility
 
 				if((us != 0) || (str.Length > 0))
 				{
-					if(str.Length > 0) str = "." + str;
+					if(str.Length > 0)
+					{
+						str = "." + str;
+						bMultiComp = true;
+					}
+
 					str = us.ToString() + str;
 				}
 
 				uVersion >>= 16;
 			}
 
+			if(bEnsureAtLeastTwoComp && !bMultiComp && (str.Length > 0))
+				str += ".0";
+
 			return str;
 		}
 
@@ -1099,20 +1223,6 @@ namespace KeePassLib.Utility
 			return ((x.Length > y.Length) ? -1 : 1);
 		}
 
-		/* public static string ImageToDataUri(Image img)
-		{
-			if(img == null) { Debug.Assert(false); return string.Empty; }
-
-			MemoryStream ms = new MemoryStream();
-			img.Save(ms, ImageFormat.Png);
-
-			byte[] pbImage = ms.ToArray();
-			string strImage = Convert.ToBase64String(pbImage);
-
-			ms.Close();
-			return ("data:image/png;base64," + strImage);
-		} */
-
 		public static bool IsDataUri(string strUri)
 		{
 			if(strUri == null) { Debug.Assert(false); return false; }
@@ -1200,5 +1310,25 @@ namespace KeePassLib.Utility
 
 			return str;
 		}
+
+		public static StrEncodingInfo GetEncoding(StrEncodingType t)
+		{
+			foreach(StrEncodingInfo sei in StrUtil.Encodings)
+			{
+				if(sei.Type == t) return sei;
+			}
+
+			return null;
+		}
+
+		public static StrEncodingInfo GetEncoding(string strName)
+		{
+			foreach(StrEncodingInfo sei in StrUtil.Encodings)
+			{
+				if(sei.Name == strName) return sei;
+			}
+
+			return null;
+		}
 	}
 }
diff --git a/KeePassLib/Utility/UrlUtil.cs b/KeePassLib/Utility/UrlUtil.cs
index 2e88858..5d01cfd 100644
--- a/KeePassLib/Utility/UrlUtil.cs
+++ b/KeePassLib/Utility/UrlUtil.cs
@@ -226,7 +226,7 @@ namespace KeePassLib.Utility
 			if(strUrl == null) throw new ArgumentNullException("strUrl");
 
 			string str = strUrl;
-			if(str.ToLower().StartsWith(@"file:///"))
+			if(str.StartsWith(@"file:///", StrUtil.CaseIgnoreCmp))
 				str = str.Substring(8, str.Length - 8);
 
 			str = str.Replace('/', Path.DirectorySeparatorChar);
@@ -563,5 +563,30 @@ namespace KeePassLib.Utility
 
 			return str;
 		}
+
+		public static bool AssemblyEquals(string strExt, string strShort)
+		{
+			if((strExt == null) || (strShort == null)) { Debug.Assert(false); return false; }
+
+			if(strExt.Equals(strShort, StrUtil.CaseIgnoreCmp) ||
+				strExt.StartsWith(strShort + ",", StrUtil.CaseIgnoreCmp))
+				return true;
+
+			if(!strShort.EndsWith(".dll", StrUtil.CaseIgnoreCmp))
+			{
+				if(strExt.Equals(strShort + ".dll", StrUtil.CaseIgnoreCmp) ||
+					strExt.StartsWith(strShort + ".dll,", StrUtil.CaseIgnoreCmp))
+					return true;
+			}
+
+			if(!strShort.EndsWith(".exe", StrUtil.CaseIgnoreCmp))
+			{
+				if(strExt.Equals(strShort + ".exe", StrUtil.CaseIgnoreCmp) ||
+					strExt.StartsWith(strShort + ".exe,", StrUtil.CaseIgnoreCmp))
+					return true;
+			}
+
+			return false;
+		}
 	}
 }
diff --git a/KeePassLibSD/KeePassLibSD.csproj b/KeePassLibSD/KeePassLibSD.csproj
index 278c110..3e4bf78 100644
--- a/KeePassLibSD/KeePassLibSD.csproj
+++ b/KeePassLibSD/KeePassLibSD.csproj
@@ -149,6 +149,9 @@
     <Compile Include="..\KeePassLib\Interfaces\IUIOperations.cs">
       <Link>Interfaces\IUIOperations.cs</Link>
     </Compile>
+    <Compile Include="..\KeePassLib\Interfaces\IXmlSerializerEx.cs">
+      <Link>Interfaces\IXmlSerializerEx.cs</Link>
+    </Compile>
     <Compile Include="..\KeePassLib\Keys\CompositeKey.cs">
       <Link>Keys\CompositeKey.cs</Link>
     </Compile>
diff --git a/KeePassLibSD/Properties/AssemblyInfo.cs b/KeePassLibSD/Properties/AssemblyInfo.cs
index 2e15a1e..7ec1fff 100644
--- a/KeePassLibSD/Properties/AssemblyInfo.cs
+++ b/KeePassLibSD/Properties/AssemblyInfo.cs
@@ -38,4 +38,4 @@ using System.Runtime.InteropServices;
 [assembly: Guid("1d3c6f10-e10b-47be-a2f1-af2562d7d470")]
 
 // Assembly version information
-[assembly: AssemblyVersion("2.1.8.*")]
+[assembly: AssemblyVersion("2.19.0.*")]
diff --git a/ShInstUtil/ShInstUtil.rc b/ShInstUtil/ShInstUtil.rc
index 709da0d..a95027b 100644
--- a/ShInstUtil/ShInstUtil.rc
+++ b/ShInstUtil/ShInstUtil.rc
@@ -65,8 +65,8 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 2,1,8,0
- PRODUCTVERSION 2,1,8,0
+ FILEVERSION 2,19,0,0
+ PRODUCTVERSION 2,19,0,0
  FILEFLAGSMASK 0x17L
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -83,12 +83,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "Dominik Reichl"
             VALUE "FileDescription", "ShInstUtil - KeePass Helper Utility"
-            VALUE "FileVersion", "2, 1, 8, 0"
+            VALUE "FileVersion", "2, 19, 0, 0"
             VALUE "InternalName", "ShInstUtil"
             VALUE "LegalCopyright", "Copyright (c) 2007-2012 Dominik Reichl"
             VALUE "OriginalFilename", "ShInstUtil.exe"
             VALUE "ProductName", "ShInstUtil - KeePass Helper Utility"
-            VALUE "ProductVersion", "2, 1, 8, 0"
+            VALUE "ProductVersion", "2, 19, 0, 0"
         END
     END
     BLOCK "VarFileInfo"
diff --git a/Translation/DefaultText.xml b/Translation/DefaultText.xml
index adddc4f..c751cb3 100644
--- a/Translation/DefaultText.xml
+++ b/Translation/DefaultText.xml
@@ -103,6 +103,9 @@
 		<Data Name="Author">
 			<Value>Author</Value>
 		</Data>
+		<Data Name="Auto">
+			<Value>Auto</Value>
+		</Data>
 		<Data Name="AutoCreateNew">
 			<Value>Automatically create new</Value>
 		</Data>
@@ -139,6 +142,9 @@
 		<Data Name="AutoTypeGlobalHint">
 			<Value>If you want KeePass to search the active database for a matching entry and auto-type it, use the 'Global auto-type' hot key.</Value>
 		</Data>
+		<Data Name="AutoTypeMatchByTagInTitle">
+			<Value>An entry matches if one of its tags is contained in the target window title</Value>
+		</Data>
 		<Data Name="AutoTypeMatchByTitle">
 			<Value>An entry matches if its title is contained in the target window title</Value>
 		</Data>
@@ -253,6 +259,9 @@
 		<Data Name="CloseButtonMinimizes">
 			<Value>Close button [X] minimizes main window instead of terminating the application</Value>
 		</Data>
+		<Data Name="ClosingDatabaseFile">
+			<Value>Closing database file</Value>
+		</Data>
 		<Data Name="Column">
 			<Value>Column</Value>
 		</Data>
@@ -547,9 +556,6 @@
 		<Data Name="Encoding">
 			<Value>Encoding</Value>
 		</Data>
-		<Data Name="EncodingAnsi">
-			<Value>Default ANSI (System)</Value>
-		</Data>
 		<Data Name="EncodingFail">
 			<Value>Selected encoding is invalid. The file cannot be interpreted using the selected encoding.</Value>
 		</Data>
@@ -640,6 +646,9 @@
 		<Data Name="Feature">
 			<Value>Feature</Value>
 		</Data>
+		<Data Name="Field">
+			<Value>Field</Value>
+		</Data>
 		<Data Name="FieldName">
 			<Value>Field Name</Value>
 		</Data>
@@ -1123,6 +1132,9 @@
 		<Data Name="NeverExpires">
 			<Value>Never expires</Value>
 		</Data>
+		<Data Name="New">
+			<Value>New</Value>
+		</Data>
 		<Data Name="NewDatabase">
 			<Value>New Database</Value>
 		</Data>
@@ -1135,6 +1147,9 @@
 		<Data Name="NewGroup">
 			<Value>New Group</Value>
 		</Data>
+		<Data Name="NewLine">
+			<Value>New line</Value>
+		</Data>
 		<Data Name="NewState">
 			<Value>New state</Value>
 		</Data>
@@ -1414,6 +1429,9 @@
 		<Data Name="RepairMode">
 			<Value>Repair Mode</Value>
 		</Data>
+		<Data Name="RepeatOnlyWhenHidden">
+			<Value>Require password repetition only when hiding using asterisks is enabled</Value>
+		</Data>
 		<Data Name="RestartKeePassQuestion">
 			<Value>Do you wish to restart KeePass now?</Value>
 		</Data>
@@ -1453,6 +1471,12 @@
 		<Data Name="SavingDatabaseFile">
 			<Value>Saving database file</Value>
 		</Data>
+		<Data Name="SavingPost">
+			<Value>after saving</Value>
+		</Data>
+		<Data Name="SavingPre">
+			<Value>before saving</Value>
+		</Data>
 		<Data Name="Scheme">
 			<Value>Scheme</Value>
 		</Data>
@@ -1745,7 +1769,7 @@
 			<Value>KeePass can automatically check for updates on each program start.</Value>
 		</Data>
 		<Data Name="UpdateCheckInfoPriv">
-			<Value>No personal information is sent to the KeePass server. KeePass just downloads a small version information file and compares the available version with the installed version.</Value>
+			<Value>No personal information is sent to the KeePass web server. KeePass just downloads a small version information file and compares the available version with the installed version.</Value>
 		</Data>
 		<Data Name="UpdateCheckInfoRes">
 			<Value>Automatic update checks are performed unintrusively in the background. A notification is only displayed when an update is available. Updates are not downloaded or installed automatically.</Value>
@@ -1831,6 +1855,9 @@
 		<Data Name="Wait">
 			<Value>Wait</Value>
 		</Data>
+		<Data Name="WaitForExit">
+			<Value>Wait for exit</Value>
+		</Data>
 		<Data Name="Warnings">
 			<Value>Warnings</Value>
 		</Data>
@@ -1870,6 +1897,9 @@
 		<Data Name="Yes">
 			<Value>Yes</Value>
 		</Data>
+		<Data Name="Zoom">
+			<Value>Zoom</Value>
+		</Data>
 	</StringTable>
 
 	<StringTable Name="KLRes" Namespace="KeePassLib.Resources">
diff --git a/Translation/TrlUtil/FormTrlMgr.cs b/Translation/TrlUtil/FormTrlMgr.cs
index c30e8f0..84015f8 100644
--- a/Translation/TrlUtil/FormTrlMgr.cs
+++ b/Translation/TrlUtil/FormTrlMgr.cs
@@ -47,6 +47,7 @@ namespace TrlUtil
 			AddForm(l, new AutoTypeCtxForm());
 			AddForm(l, new CharPickerForm());
 			AddForm(l, new ColumnsForm());
+			AddForm(l, new CsvImportForm());
 			AddForm(l, new DatabaseOperationsForm());
 			AddForm(l, new DatabaseSettingsForm());
 			AddForm(l, new DataEditorForm());
@@ -68,7 +69,6 @@ namespace TrlUtil
 			AddForm(l, new GroupForm());
 			AddForm(l, new HelpSourceForm());
 			AddForm(l, new IconPickerForm());
-			AddForm(l, new ImportCsvForm());
 			AddForm(l, new ImportMethodForm());
 			AddForm(l, new InternalBrowserForm());
 			AddForm(l, new IOConnectionForm());
diff --git a/Translation/TrlUtil/MainForm.cs b/Translation/TrlUtil/MainForm.cs
index 30e7d8b..cb3ebd4 100644
--- a/Translation/TrlUtil/MainForm.cs
+++ b/Translation/TrlUtil/MainForm.cs
@@ -30,6 +30,7 @@ using KeePass.App;
 using KeePass.Resources;
 using KeePass.UI;
 using KeePass.Util;
+using KeePass.Util.XmlSerialization;
 
 using KeePassLib;
 using KeePassLib.Resources;
@@ -143,6 +144,9 @@ namespace TrlUtil
 			KPStringTable kpstSM = new KPStringTable();
 			kpstSM.Name = "KeePass.Forms.PwEntryForm.m_ctxStrMoveToStandard";
 			m_trl.StringTables.Add(kpstSM);
+			KPStringTable kpstBA = new KPStringTable();
+			kpstBA.Name = "KeePass.Forms.PwEntryForm.m_ctxBinAttach";
+			m_trl.StringTables.Add(kpstBA);
 			KPStringTable kpstTT = new KPStringTable();
 			kpstTT.Name = "KeePass.Forms.EcasTriggersForm.m_ctxTools";
 			m_trl.StringTables.Add(kpstTT);
@@ -279,6 +283,10 @@ namespace TrlUtil
 			m_lvStrings.Groups.Add(lvg);
 			TrlAddMenuCommands(kpstSM, lvg, ef.StandardStringMovementContextMenu.Items);
 
+			lvg = new ListViewGroup("Entry Attachments Context Menu Commands");
+			m_lvStrings.Groups.Add(lvg);
+			TrlAddMenuCommands(kpstBA, lvg, ef.AttachmentsContextMenu.Items);
+
 			Type tSD = typeof(KSRes);
 			lvg = new ListViewGroup("KeePassLibSD Strings");
 			m_lvStrings.Groups.Add(lvg);
@@ -391,7 +399,11 @@ namespace TrlUtil
 			if(ofd.ShowDialog() != DialogResult.OK) return;
 
 			KPTranslation kpTrl = null;
-			try { kpTrl = KPTranslation.LoadFromFile(ofd.FileName); }
+			try
+			{
+				XmlSerializerEx xs = new XmlSerializerEx(typeof(KPTranslation));
+				kpTrl = KPTranslation.LoadFromFile(ofd.FileName, xs);
+			}
 			catch(Exception ex)
 			{
 				MessageBox.Show(ex.Message, "TrlUtil", MessageBoxButtons.OK,
@@ -528,7 +540,8 @@ namespace TrlUtil
 
 			try
 			{
-				KPTranslation.SaveToFile(m_trl, m_strFile);
+				XmlSerializerEx xs = new XmlSerializerEx(typeof(KPTranslation));
+				KPTranslation.SaveToFile(m_trl, m_strFile, xs);
 				m_bModified = false;
 			}
 			catch(Exception ex)
@@ -638,8 +651,8 @@ namespace TrlUtil
 				if(iIndex < m_lvStrings.Items.Count - 1)
 				{
 					lvsic[0].Selected = false;
-					m_lvStrings.Items[iIndex + 1].Selected = true;
-					m_lvStrings.FocusedItem = m_lvStrings.Items[iIndex + 1];
+					UIUtil.SetFocusedItem(m_lvStrings, m_lvStrings.Items[
+						iIndex + 1], true);
 				}
 
 				m_bModified = true;
@@ -852,7 +865,7 @@ namespace TrlUtil
 				{
 					if(lvsi.Text.IndexOf(strFind, StrUtil.CaseIgnoreCmp) >= 0)
 					{
-						m_lvStrings.FocusedItem = lvi;
+						UIUtil.SetFocusedItem(m_lvStrings, lvi, false);
 						m_lvStrings.SelectedItems.Clear();
 						lvi.Selected = true;
 
diff --git a/Translation/TrlUtil/Properties/AssemblyInfo.cs b/Translation/TrlUtil/Properties/AssemblyInfo.cs
index 80a5c12..aca8622 100644
--- a/Translation/TrlUtil/Properties/AssemblyInfo.cs
+++ b/Translation/TrlUtil/Properties/AssemblyInfo.cs
@@ -38,5 +38,5 @@ using System.Runtime.InteropServices;
 [assembly: Guid("39aa6f93-a1c9-497f-bad2-cc42a61d5710")]
 
 // Assembly version information
-[assembly: AssemblyVersion("2.1.8.0")]
-[assembly: AssemblyFileVersion("2.1.8.0")]
+[assembly: AssemblyVersion("2.19.0.*")]
+[assembly: AssemblyFileVersion("2.19.0.0")]

-- 
keepass2



More information about the Pkg-cli-apps-commits mailing list